解鎖大模型推理新潛能:重復采樣的魔力

大家好,我是肆〇柒。如果看我文章的朋友,可能看到過前些天發(fā)的這樣一篇文章《LLM 推理新境界:多語言思考的力量》。這篇文章就提到過與重復(Repeat)采樣的性能對比。當時發(fā)出這篇文章以后,我在社區(qū)和小伙伴探討過一些問題,所以引出了今天這篇重復采樣的內容。這篇論文《Large Language Monkeys: Scaling Inference Compute with Repeated Sampling》,我曾在去年讀到過,并且在具體的項目中落地過這個重復采樣的方法。因為討論時被重新提起,所以復習一下,下面我們就一起看看這個可以讓模型性能提升的方法。
研究背景
大型語言模型在解決編程、數學以及各種復雜推理任務方面的能力提升簡直可以用 “飛速” 來形容。這一切的背后,離不開訓練時對計算資源的大量投入。研究人員們發(fā)現,通過擴大模型規(guī)模、延長預訓練時間以及采用更龐大的數據集進行訓練,模型的性能就像被施了魔法一樣,不斷地取得突破。無論是處理自然語言理解任務,還是生成復雜的文本內容,亦或是解決數學和編程難題,模型都展現出了驚人的進步。
然而,在推理階段,情況卻有些不盡如人意。與訓練階段的繁榮景象形成鮮明對比的是,對于如何合理利用推理階段的計算資源,相關研究卻相對較少。在實際應用中,模型往往只能老老實實地進行單次嘗試。而且,隨著人們對模型性能要求的不斷提高,這種局限性愈發(fā)明顯,成為了制約大型語言模型進一步發(fā)展的瓶頸之一。
不過,重復采樣這一方法的提出,為解決這一問題提供了一個全新的思路。在一些特定場景下,比如數學、編程以及解謎任務中,重復采樣已經展現出了一定的潛在益處。它就像是一個隱藏的寶藏,等待著人們去挖掘它的無限價值。例如,AlphaCode 在編程競賽任務中,通過使用大規(guī)模采樣策略,性能隨著采樣次數的增加而不斷提高,最終在與人類選手的較量中取得了令人矚目的成績。這充分證明了重復采樣在提升模型推理能力方面的巨大潛力,讓人們對它在更廣泛領域的應用充滿了期待。
研究方法
重復采樣的核心思想其實很簡單,但卻蘊含著巨大的力量。它主要可以分為以下幾個關鍵步驟:
1. 候選方案生成 :當模型面對一個需要解決的問題時,它會根據自身的訓練知識以及設定的采樣參數(比如溫度值等),開始生成各種各樣的解決方案。溫度值在這里就像是一個 “創(chuàng)意調節(jié)器”,較高的溫度值會讓模型生成更加多樣化、富有創(chuàng)意的方案,而較低的溫度值則會使生成的方案更加集中于模型認為最有可能正確的方向。這些方案就像是從模型腦海深處涌出的多條思路,形態(tài)各異,各有特點,為后續(xù)的挑選提供了豐富的素材。
2. 驗證器篩選 :在生成一定數量的候選方案后,驗證器就開始登場發(fā)揮作用了。驗證器就像是一個嚴格的裁判,它的任務是對每個候選方案進行仔細審查和評判。不同的任務對應著不同的驗證規(guī)則和標準。比如在數學問題中,驗證器會根據數學公式、定理等規(guī)則,檢查候選方案中的計算過程和結果是否正確;在編程任務中,驗證器則會運行代碼,查看其是否能通過預設的測試用例,輸出正確的結果。只有那些經得起驗證器嚴格審查的方案,才有資格進入下一步。
3. 最終答案確定 :經過驗證器的篩選后,會留下一些被認為是正確的候選方案。這時,就需要根據一定的策略從這些方案中挑選出一個最合適的作為最終答案。這個過程就像是在眾多優(yōu)秀的選手中選出冠軍一樣,可能會考慮方案的簡潔性、效率、創(chuàng)新性等多種因素,從而確定出一個最佳的方案呈現給用戶。
在研究中,為了全面評估重復采樣的效果,研究人員精心挑選了多個不同類型的模型和任務進行實驗。模型方面,除了常見的 Llama - 3、Gemma、Pythia 等,還涵蓋了不同規(guī)模、不同訓練方式的版本。這些模型有的擅長處理文本生成任務,有的在代碼理解和生成方面表現出色,還有的在數學推理上有著獨特的優(yōu)勢,它們對問題的思考和回答方式也因此各有差異,就像是一個由不同專業(yè)背景的專家組成的團隊。
而在任務選擇上,研究人員也是費了一番心思。例如 SWE - bench Lite 是一個涉及真實世界 GitHub 問題的復雜任務,它要求模型能夠在理解問題描述的基礎上,對代碼倉庫進行編輯修改,并且通過一系列單元測試來驗證修改的正確性;CodeContests 則是一個編程競賽任務集合,模型需要根據問題描述編寫 Python 代碼,并且代碼要能通過隱藏的輸入輸出測試用例;MATH 數據集則專注于數學問題求解,涵蓋了從初等數學到高等數學的多個領域,模型需要輸出詳細的解題步驟和最終答案。這些任務就像是不同類型的競技場,能夠讓模型在各種場景下充分展示自己的能力。
評估指標方面,覆蓋率(Coverage)和精確度(Precision)是兩個關鍵的衡量標準。覆蓋率的計算方法是,對于所有測試問題,只要有一個候選方案被驗證為正確,就算作覆蓋了一個問題。它反映了模型在面對不同問題時,能夠產生有效解決方案的廣度,就像是在統(tǒng)計模型能夠解決的問題范圍有多大一樣。而精確度則更加注重從眾多候選方案中準確挑選出正確答案的能力,它的計算方式是將最終確定的正確答案數量與所有確定的答案數量之比。在不同的任務中,這兩個指標的具體定義和計算方式會根據任務的特點進行相應的調整,以確保評估結果能夠真實地反映模型和驗證器的性能。

在本文中遵循的重復采樣過程。1)我們通過從具有正溫度的大型語言模型(LLM)中采樣,為給定問題生成許多獨立的候選解決方案。2)我們使用領域特定的驗證器(例如,代碼的單元測試)從生成的樣本中選擇最終答案。
實驗結果
實驗結果可謂是相當振奮人心。在代碼生成任務中,比如使用 Gemma - 2B 模型解決 CodeContests 編程問題時,情況發(fā)生了翻天覆地的變化。當采樣次數僅為 1 次時,覆蓋率僅為 0.02%,這就好比在廣闊的沙漠中幾乎找不到一絲綠洲的蹤跡。然而,隨著采樣次數不斷增加,當采樣次數達到 10,000 次時,覆蓋率竟然飆升至 7.1%,這就像是在沙漠中發(fā)現了一片郁郁蔥蔥的綠洲,模型解決問題的能力得到了質的飛躍。而在形式證明領域,使用 Llama - 3 - 8B - Instruct 模型對 MiniF2F - MATH 中的數學問題進行證明時,表現同樣出色。隨著采樣次數的不斷增加,覆蓋率如同穩(wěn)步攀升的階梯,從相對較低的水平逐步攀升至較高的數值,每一個采樣次數的增加都帶來了覆蓋率的提升,就像是攀登高峰時每一步都離頂點更近了一點。

在五個任務中,覆蓋率(至少有一個生成樣本解決的問題比例)隨著樣本數量的增加而提高。值得注意的是,通過重復采樣,用一種開源方法在SWE-bench Lite上的解決率從15.9%提高到了56%。在數學問題求解方面,模型的表現也沒有讓人失望。以 Llama - 3 為例,在解決 MATH 數據集中的難題時,隨著采樣次數從 100 增加到 10,000,覆蓋率從 82.9% 迅速增長至 98.44%。這意味著,模型能夠解決的問題范圍在不斷擴大,幾乎涵蓋了數據集中的絕大多數問題。然而,在使用多數投票和獎勵模型等方法挑選最終答案時,性能提升卻相對有限。例如,在 GSM8K 數據集上,當采樣次數從 100 增加到 10,000 時,多數投票方法的準確率僅從 40.50% 提升到 41.41%。這就好比是,雖然模型在不斷產生更多的正確答案,但在沒有得力的驗證工具時,這些正確答案就像是被埋在沙子里的金子,難以被挖掘出來,最終只能挑選出少量的正確答案,導致整體性能提升幅度較小。


柱狀圖顯示了在評估的GSM8K和MATH子集中的每個問題中,正確樣本的比例(在10,000個樣本中)。每個問題有一個柱子,柱子的高度對應于得出正確答案的樣本比例。如果自洽性選擇了正確答案,則柱子為綠色,否則為紅色。注意,有許多問題存在正確答案,但這些正確答案的采樣頻率很低。此外,在不同的任務中,同一模型的覆蓋率變化趨勢也呈現出多樣性。例如,在 MATH 數據集上,Llama - 3 - 8B - Instruct 模型的覆蓋率曲線隨著采樣次數的增加呈現出較為平穩(wěn)的上升趨勢,而 Llama - 3 - 70B - Instruct 模型的覆蓋率曲線則相對陡峭一些,這表明模型規(guī)模的擴大在一定程度上能夠加速覆蓋率的提升。而在 CodeContests 任務中,Gemma - 2B 模型的覆蓋率曲線則呈現出一種從低到高逐步躍升的態(tài)勢,這反映出該模型在編程任務上的適應性和潛力。這些結果以直觀的圖表形式呈現了出來。在上圖,我們可以清晰地看到,隨著采樣次數的增加,不同模型在各個任務上的覆蓋率曲線呈現出穩(wěn)步上升的趨勢。例如,在 SWE - bench Lite 任務上,DeepSeek - Coder - V2 - Instruct 模型的覆蓋率從單次采樣的較低水平,隨著采樣次數增加到 250 次時,一舉超越了單次嘗試的最先進水平(43%),達到了 56%。這就像是一匹黑馬,在不斷的嘗試中逐漸嶄露頭角,最終超越了傳統(tǒng)強國,奪得了冠軍。而在 CodeContests 任務上,Gemma - 2B 模型的覆蓋率曲線同樣展現出驚人的增長勢頭,從最初的幾乎為零,一路上揚,最終在 10,000 次采樣時達到了 7.1% 的覆蓋率,完美詮釋了什么叫做 “厚積薄發(fā)”。

使用Moatless工具 Agent 框架比較不同模型在SWE-bench Lite數據集上的API成本(以美元計)和性能。結果顯示,當采樣數量增加時,開源的DeepSeek-Coder-V2-Instruct模型能夠以不到閉源前沿模型三分之一的價格,達到相同的解決問題的比率。
同時,下圖展示了不同模型在同一任務上的表現對比。在 MATH 數據集上,較小的 Pythia - 70M 模型在單次采樣時的覆蓋率幾乎為零,但隨著采樣次數增加到 10,000 次,覆蓋率竟然達到了 57%,遠超其單次采樣的表現。這就好比是一個初出茅廬的選手,雖然一開始表現平平,但通過不斷的努力和嘗試,最終展現出了驚人的潛力。而相比之下,一些大型模型在單次采樣時表現優(yōu)異,但在采樣次數增加后的提升幅度卻相對較小,這說明模型的大小并不是決定重復采樣效果的唯一因素,模型的架構、訓練方式等多種因素都會對結果產生影響。

通過重復采樣來擴展推理時間計算,可以在多種模型大?。?0M-70B)、模型家族(Llama、Gemma和Pythia)以及不同級別的訓練后階段(基礎模型和指令模型)中實現一致的覆蓋率提升
關鍵結論
重復采樣對覆蓋率的提升效果簡直可以用 “驚人” 來形容。它讓那些原本在單次采樣時表現平平的模型,通過多次嘗試,能夠解決更多的問題,就像是給這些模型插上了翅膀,讓它們能夠飛得更高、更遠。在一些場景下,它甚至能夠讓一些原本性能稍弱的模型通過多次采樣,實現對單次采樣更強模型的超越。這就像是在一場賽跑中,原本不被看好的選手通過不懈努力和多次沖刺,最終超越了那些一開始領先的選手,奪得了冠軍。例如,在 SWE - bench Lite 數據集上,DeepSeek - Coder - V2 - Instruct 模型在單次采樣時的性能僅為 15.9%,但隨著采樣次數增加到 250 次,其性能一舉提升至 56%,超過了單次采樣的最先進水平(43%)。



對Llama-3-8B-Instruct和Llama3-70B-Instruct的推理FLOPs數量(用于衡量成本)和覆蓋范圍進行比較??梢园l(fā)現,理想的模型大小取決于任務、計算預算以及覆蓋范圍的要求。需要注意的是,Llama-3-70B-Instruct在GSM8K上未能達到100%的覆蓋范圍,原因是存在一個標注錯誤的真實答案。
而且,在推理成本方面,重復采樣也展現出了獨特的優(yōu)勢。在固定的計算預算下,使用較小規(guī)模的模型進行多次采樣,有時候會比使用大型模型進行單次采樣更具成本效益。這就好比是在有限的經費下,我們選擇購買多件性價比高的物品,而不是一件昂貴卻使用次數有限的奢侈品。對于一些對成本敏感的應用場景來說,重復采樣提供了一種更加靈活且經濟實惠的選擇,能夠讓用戶在有限的預算內獲得更好的性能表現。例如,上圖展示了在不同任務和模型尺寸下,推理成本(以 FLOPs 為單位)與覆蓋率之間的關系。對于 MiniF2F - MATH、GSM8K 和 MATH 任務,Llama - 3 - 8B - Instruct 模型在固定 FLOPs 預算下通常能夠獲得比 Llama - 3 - 70B - Instruct 模型更高的覆蓋率,這表明在這些任務上,較小的模型通過多次采樣更具優(yōu)勢。然而,在 CodeContests 任務中,Llama - 70B - Instruct 模型則在大多數情況下更為劃算。這說明,選擇最優(yōu)的模型和采樣策略需要綜合考慮任務特點、計算預算和性能要求。
不過,這里也有一個關鍵因素不容忽視,那就是自動驗證工具。它們就像是黑暗中的燈塔,為重復采樣指引著方向。如果在沒有自動驗證工具的情況下,那些常見的驗證方法往往會很快遇到瓶頸。以多數投票方法為例,當采樣次數增加到一定程度后,其性能提升非常有限,這就導致了一個尷尬的局面 —— 模型雖然能夠生成越來越多的候選方案,但卻無法有效地從中挑選出正確的答案,就好像在一堆寶藏中迷失了方向,不知道哪一顆才是真正的寶石。這充分說明了自動驗證工具在重復采樣過程中的重要性,它們能夠幫助我們從海量的候選方案中精準地找到正確的答案,從而實現重復采樣的最大價值。

隨著樣本數量的增加,將覆蓋率(與理想驗證器的性能比較)與主流的正確答案選擇方法(多數投票、獎勵模型選擇和獎勵模型多數投票)進行了比較。盡管接近完美的覆蓋率得以實現,但所有樣本選擇方法都未能達到覆蓋率的上限,并且在達到100個樣本之前就已經飽和。對于每一個k值,在大小為k的100個子集上計算該指標,然后繪制子集的平均值以及一個標準差。
方法細節(jié)與觀點
重復采樣作為一種擴展推理計算的新方法,它的優(yōu)勢不僅僅體現在性能的提升上,還在于為模型提供了一種更靈活的思考方式。傳統(tǒng)的單次采樣就像是讓模型在瞬間做出一個重大的決定,而重復采樣則更像是給模型提供了一個思考和探索的過程。模型不再局限于一次性的 “靈光乍現”,而是可以通過多次嘗試,不斷地調整和優(yōu)化自己的答案。這就好比我們在解決一個復雜問題時,常常會先嘗試不同的思路,然后根據每次嘗試的結果進行反思和調整,最終找到最優(yōu)的解決方案一樣。
然而,重復采樣也并非十全十美,它同樣存在一些局限性和挑戰(zhàn)。例如,在生成眾多候選方案時,如何確保這些方案之間的多樣性是一個需要解決的問題。如果所有方案都大同小異,那么即使采樣次數再多,也很難找到真正優(yōu)秀的答案。這就像是在一個創(chuàng)新設計比賽中,如果所有的參賽作品都采用了相同的思路和設計風格,那么比賽的精彩程度和創(chuàng)新性就會大打折扣。因此,研究人員需要不斷探索新的方法來提高解的多樣性,比如引入不同的采樣策略,如溫度采樣、核采樣等,調整模型的參數,或者對模型進行微調,讓模型能夠在思考時更加發(fā)散和自由。

覆蓋范圍與樣本數量之間的關系可以用冪律指數模型來描述,這適用于大多數任務和模型。我們特別指出,某些曲線(例如在MiniF2F-MATH任務上的Llama-3-8B-Instruct模型)并不嚴格遵循這一趨勢。我們展示了在對數尺度上均勻采樣的100個點處,覆蓋曲線與冪律擬合之間的誤差的均值和標準差還有,引入多輪交互也是一個值得深挖的方向。在一些任務中,模型可以利用前一次嘗試的結果來指導下一次的采樣。例如,在代碼生成任務中,模型可以根據前一次生成的代碼在測試用例中的表現,分析錯誤的原因,然后在下一次采樣時針對性地修改代碼。這樣就像我們在解決問題時,會根據之前的嘗試經驗不斷地調整自己的方法,從而一步步靠近正確的答案。同時,從未次嘗試中學習也是提高重復采樣效果的關鍵。通過對失敗方案的分析,模型可以總結經驗教訓,避免在后續(xù)采樣中再犯同樣的錯誤,這就好比是從挫折中汲取智慧,讓自己變得更加聰明和強大。

將同一模型家族中不同模型的覆蓋曲線疊加在一起。通過水平移動每條曲線(x軸為對數刻度)來實現這種疊加,使得所有曲線都通過點(1,c)。選擇c為圖中所有模型的最大pass@1分數??梢钥吹?,曲線在平移后的相似性表明,在一個模型家族內,采樣擴展曲線具有相似的形狀。
而對于推理系統(tǒng)和驗證器來說,重復采樣也提出了新的要求。推理系統(tǒng)需要能夠高效地處理大量的采樣任務,這就像是在一個繁忙的港口同時裝卸大量的貨物,需要合理安排資源和流程,以確保效率和質量。它需要具備強大的并行處理能力,能夠同時生成多個候選方案,并且在生成過程中合理利用計算資源,避免資源的浪費。而驗證器則需要更加精準和可靠,能夠在眾多候選方案中迅速而準確地挑選出正確的答案。這就如同在一場大型選秀中,評委需要有一雙慧眼,能夠從眾多選手中發(fā)現真正的明星。驗證器需要不斷優(yōu)化自身的驗證規(guī)則和算法,提高驗證的效率和準確性,同時還要能夠適應不同任務和模型的特點,具有良好的通用性和擴展性。
七、現象與洞察
在重復采樣的過程中,研究人員發(fā)現了一些非常有趣且富有啟發(fā)性的現象。有些模型在特定任務上,隨著采樣次數的增加,覆蓋率會出現顯著的提升。例如,Gemma - 2B 模型在 CodeContests 編程任務上,從單次采樣的 0.02% 的覆蓋率,隨著采樣次數增加到 10,000 次,覆蓋率升至 7.1%。這就好像這些模型在這個任務領域有著獨特的天賦,只要給予足夠的機會,它們就能充分展現自己的才華。而另一方面,有些模型在某些任務上即使采樣次數再多,覆蓋率的提升也非常有限,這就像是有些選手在特定的賽場上始終找不到感覺,難以發(fā)揮出自己的真實水平。
深入分析這些現象,研究人員發(fā)現,這與模型的訓練數據、架構以及任務的特點都有著密切的關系。例如,那些在編程任務上表現出色的模型,往往是在訓練數據中接觸了大量的代碼相關知識,并且模型的架構也更適合處理編程語言的結構和邏輯。而對于一些數學推理任務,模型的表現則更多地取決于其對數學概念的理解和推理能力,這可能需要模型具備更深層次的語義理解和邏輯推理機制。

對Llama-3-8B-Instruct在解答GSM8K問題時的鏈式思維(Chain-of-Thought)推理的有效性進行人工評估。每個問題評估了3條鏈式思維。即使在模型正確率僅為≤10%的難題中,鏈式思維也幾乎總是遵循有效的邏輯步驟。
另外在不同的任務中,驗證的難度也有所不同。例如,在數學問題中,驗證一個答案的正確性可能需要復雜的邏輯推理和計算。這就像是在解開一個個錯綜復雜的謎團,驗證器需要仔細檢查每一步推理是否正確,每一個計算步驟是否符合數學規(guī)則,稍有不慎就可能遺漏錯誤或者誤判正確。而對于一些編程任務,雖然有自動測試工具輔助驗證,但也會受到測試用例的局限性影響。有些代碼可能通過了現有的測試用例,但卻存在潛在的漏洞或者在一些邊界條件下無法正常運行,這就像是在檢查一件工藝品時,只能從某些特定的角度去觀察,可能會遺漏一些細節(jié)。例如,下圖展示了在 GSM8K 和 MATH 數據集上,隨著采樣次數的增加,多數投票、獎勵模型等主流驗證方法的性能與覆蓋率(基于 oracle 驗證器)之間的差距。盡管覆蓋率接近完美,但這些驗證方法的性能卻在采樣次數達到 100 左右時就趨于飽和,無法充分利用大量的采樣結果。這表明,在沒有自動驗證工具的情況下,驗證方法的局限性成為了限制重復采樣性能提升的關鍵因素。

為了應對這些挑戰(zhàn),研究人員也在不斷探索各種可能的解決方法。例如,通過改進模型的訓練方式,讓模型在生成答案時更加注重中間過程的合理性,而不僅僅是最終結果的正確性。這就像是在培養(yǎng)一個學者時,不僅要關注其最終的研究成果,還要注重其研究過程的嚴謹性和科學性。同時,開發(fā)更加智能的驗證技術也是提高重復采樣效果的關鍵。例如,利用深度學習技術構建更加精準的獎勵模型,或者結合多種驗證方法進行綜合判斷,從而更全面、更深入地分析候選方案的質量,讓每一個優(yōu)秀的答案都有機會被發(fā)現和認可。
討論、總結
重復采樣為大型語言模型的研究和應用帶來了一系列新的啟示。在模型設計方面,它讓我們重新審視模型的大小和性能之間的關系。過去,人們往往認為模型越大,性能就一定越好。然而,重復采樣的研究表明,一個中等規(guī)模的模型通過巧妙的采樣策略和優(yōu)化的驗證方法,能夠在某些任務上取得比大型模型更好的效果。這就像是在建筑設計中,有時候一個小而精巧的建筑反而比龐大而笨重的建筑更具實用性。
在推理策略上,重復采樣提供了一種全新的思路。我們不再局限于單次嘗試,而是可以通過多次采樣和優(yōu)化,讓模型在推理過程中擁有更多的靈活性和適應性。這就像是給模型配備了一套精良的裝備,讓它在面對各種復雜任務時能夠更加游刃有余。例如,在處理開放性問題時,模型可以通過多次采樣生成多種可能的答案,并根據用戶的反饋不斷調整和完善答案,從而更好地滿足用戶的需求。
而對于驗證方法來說,重復采樣更是提出了一項艱巨的任務 —— 開發(fā)更加高效、精準的驗證技術。這不僅需要我們在技術上不斷創(chuàng)新,還需要我們從應用需求和實際場景出發(fā),設計出更加符合現實要求的驗證工具和方法。例如,在醫(yī)療、金融等對準確性和可靠性要求極高的領域,驗證器需要具備極高的精度和穩(wěn)定性,以確保模型的輸出能夠真正滿足專業(yè)的要求和標準。
未來,一方面,我們可以通過進一步優(yōu)化重復采樣的方法,比如提高采樣的效率、增強方案的多樣性、引入更加智能的采樣控制策略等,來讓模型在推理階段發(fā)揮出更大的潛力。另一方面,開發(fā)更加高效的驗證技術也是一個重要的突破口。如果我們能夠創(chuàng)造出一種能夠自動理解、分析和評估模型輸出的智能驗證器,那么重復采樣的效果將會得到極大的提升,模型的應用范圍也將得到極大的拓展。
這篇研究通過對重復采樣技術的深入探索和實驗驗證,為我們展示了它在提升大型語言模型推理性能方面的巨大潛力。無論是讓原本平平無奇的模型通過多次采樣實現逆襲,還是在有限的計算預算下實現性能和成本的平衡,重復采樣都展現出了其獨特的價值。
本文如我開頭所提及,是篇復習之作,發(fā)出來是分享給需要的伙伴。畢竟重復采樣的方法,在當下依然有效。即便你沒有用到過這樣的工程方法,你也可能用過DeepSeek-R1這樣的 Reason Model。重復采樣,可以通過 CoT、反思等 prompt 實現或者通過訓練 Reason Model 實現,還可以通過多線程的 Agent 經批次推理實現。其本質原理都是類似的,通俗的講就是“問一遍不行,那就多問幾遍,總有回復令人滿意”。





































