大规模语言模型虽然在各大自然语言处理任务上都展现了优越的性能,不过算术类题目仍然是一大难关,即便是当下最强的GPT-4也很难处理基础运算的问题。
最近,来自新加坡国立大学的研究人员提出了一个专供算术的模型山羊Goat,在LLaMA模型基础上微调后,实现了显著优于GPT-4的算术能力。
论文链接:https://arxiv.org/pdf/2305.14201.pdf
通过对合成的算术数据集进行微调,Goat在BIG-bench算术子任务上实现了最先进的性能,
Goat仅通过监督微调就可以在大数加减运算上实现近乎完美的准确率,超越了之前所有的预训练语言模型,如Bloom、OPT、GPT-NeoX等,其中零样本的Goat-7B所达到的精度甚至超过了少样本学习后的PaLM-540
研究人员将Goat的卓越性能归功于LLaMA对数字的一致性分词技术。
为了解决更有挑战性的任务,如大数乘法和除法,研究人员还提出了一种方法,根据算术的可学习性对任务进行分类,然后利用基本的算术原理将不可学习的任务(如多位数乘法和除法)分解为一系列可学习的任务。
通过全面的实验验证后,文中提出的分解步骤可以有效地提升算术性能。
并且Goat-7 B可以在24 GB VRAM GPU上使用LoRA高效训练,其他研究人员可以非常容易地重复该实验,模型、数据集和生成数据集的python脚本即将开源。
语言模型
LLaMA是一组开源的预训练语言模型,使用公开可用的数据集在数万亿个token上进行训练后得到,并在多个基准测试上实现了最先进的性能。
先前的研究结果表明,分词(tokenization)对LLM的算术能力很重要,不过常用的分词技术无法很好地表示数字,比如位数过多的数字可能会被切分。
LLaMA选择将数字切分为多个token,确保数字表示的一致性,研究人员认为,实验结果中表现出的非凡算术能力主要归功于LLaMA对数字的一致性分词。
在实验中,其他微调后的语言模型,如Bloom、OPT、GPT-NeoX和Pythia,无法与LLaMA的算术能力相匹配。
算术任务的可学习性(Learnability of Arithmetic Tasks)
之前有研究人员对使用中间监督解决复合任务(composite task)进行了理论分析,结果表明这种任务是不可学习的,但可以分解为多项式数量的简单子任务。
也就是说,不可学习的复合问题可以通过使用中间监督或逐步思维链(CoT)来学习。
在此分析基础上,研究人员首先对可学习和不可学习任务进行实验分类。
在算术计算的背景下,可学习任务通常是指那些可以成功训练模型以直接生成答案的任务,从而在预定义数量的训练epochs内实现足够高的精度。
不可學習的任務是那些即使經過廣泛訓練,模型也難以正確學習和產生直接答案的任務。
雖然任務可學習性變化背後的確切原因尚不完全清楚,但可以假設這與基本模式的複雜性和完成任務所需的工作記憶大小有關。
研究人員透過在簡化的合成環境中專門針對每個任務微調模型來實驗檢查這些任務的可學習性。
可學習的和不可學習的任務
任務分類的結果也與人類的感知相同,透過實踐,人類可以在腦海中計算兩個大數字的加法和減法,無需手算的情況下,可以直接從左(最高有效數字)到右(最低有效數字)寫下最終的數字答案。
不過心算解決大數乘法和除法是一項具有挑戰性的任務。
也可以觀察到,上述對任務的分類結果與GPT-4的表現也一致,特別是GPT-4擅長為大數加法和減法產生直接答案,當涉及到多位乘法和除法任務時,準確度會顯著下降。
像GPT-4這樣強大的模型無法直接解決不可學習的任務,也可能表明,即使經過廣泛的訓練,為這些任務生成直接答案也是極具挑戰性的。
值得注意的是,對LLaMA來說是可學習的任務可能不一定對其他LLM來說是可學的。
此外,並非所有被歸類為不可學習的任務對模型來說都是完全不可能學習到的。
例如,兩位數乘兩位數被認為是一項不可學習的任務,但如果訓練集中包含所有可能的2位數乘法枚舉資料的話,模型仍然可以透過過擬合訓練集來直接產生答案。
不過整個過程需要近10個epoch才能達到90%左右的準確率。
而透過在最終答案之前插入文中提出的CoT,該模型可以在1個epoch的訓練後就可以在兩位數乘法中實現相當不錯的精度,也與先前的研究結論一致,即中間監督的存在有助於學習過程。
加法與減法
#這兩個算術運算是可學習的,僅透過有監督微調,模型就展現了準確產生直接數字答案的非凡能力。
儘管模型只是在非常有限的加法資料子集上進行了訓練,但從模型在未見過的測試集上實現了近乎完美的準確率上可以看出來,模型成功地捕捉了算術運算的基本模式,並且無需使用CoT
#研究人員通過實驗驗證了n位數乘1位數的乘法是可學習的,而多位數乘法則無法學習。
為了克服這個問題,研究人員選擇在產生答案之前對LLM進行微調以產生CoT,將多位數乘法分解為5個可學習的子任務:
1. 抽取(extraction),從自然語言指令中抽取算術表達式
2. 拆分(split),將兩者中較小的數拆分為place值
3. 展開(expansion),基於分配性展開求和
#4. 乘積(product),同時計算每個乘積
#5. 逐項相加(adding term by term),將前兩項相加,複製其餘項,得到最終和
其中每個任務都是可學習的。
除法
#類似地,可以透過實驗觀察到n位數除以1位數是可以學習的,而多位數除法是不可學習的。
研究者利用改進慢除法的遞推方程,設計了一個全新的思維鏈提示。
主要想法是從被除數中減去數的倍數,直到餘數小於除數。
##。文章中設計的實驗為兩個正整數的加法和減法,每個正整數最多包含16位數,且減法運算的結果可能是負數。
為了限制產生的最大序列長度,乘法的結果為12位元以內的正整數;兩個正整數的除法中,被除數小於12位,商值6位數以內。
研究人員使用Python腳本合成了一個資料集,產生了大約100萬個問答對,答案包含提出的CoT以及最終的數字輸出,所有數字都是隨機產生的,可以保證重複實例的機率非常低,不過小數字可能會被多次取樣。
微調
為了使該模型能夠基於指令解決算術問題,並促進自然語言問答,研究人員使用ChatGPT產生了數百個指令模板。
在指令調整過程中,從訓練集中為每個算術輸入隨機選擇一個模板,並微調LLaMA-7B,類似於Alpaca中使用的方法。
Goat-7B可以在24GB VRAM GPU上使用LoRA進行微調,在A100 GPU上僅花費約1.5小時即可完成10萬個樣本的微調,並實現近乎完美的精度。
實驗結果
比較Goat和GPT-4在大量乘法和除法方面的表現似乎不公平,因為GPT-4會直接產生答案,而Goat則依賴設計的思考鏈,所以在GPT-4評估時還在每個提示的結尾加入「Solve it step by step」
不過可以觀察到,雖然GPT-4在某些情況下,長乘法和除法的中間步驟錯了,但最終答案仍然是正確的,也就意味著GPT-4並沒有利用思維鏈的中間監督來提高最終輸出。
######最終從GPT-4的解決方案中確定了以下3個常見錯誤:###########1. 對應數字的對齊### ###2. 重複數字
3. n位數乘以1位數的中間結果錯誤
從實驗結果中可以看插到,GPT-4在8D 8D和16D 16D任務上表現相當好,但在大多數16D 8D任務上的計算結果都是錯誤的,儘管直觀上來看,16D 8D應該比16D 16D相對容易。
雖然造成這種情況的確切原因尚不清楚,但一個可能的因素可能是GPT-4不一致的數字分詞過程,使得兩個數字之間很難對齊.
以上是算數能力接近滿分!新加坡國立大學發表Goat,僅用70億參數秒殺GPT-4,起步支持16位數乘除法的詳細內容。更多資訊請關注PHP中文網其他相關文章!