7.7億參數,超越5400億PaLM! UW谷歌提出「分步蒸餾」,只需80%訓練資料|ACL 2023
大型語言模型在表現方面表現出色,能夠透過零樣本或少樣本提示來解決新任務。然而,在實際應用部署中,LLM卻不太實用,因為它的記憶體利用效率低,同時需要大量的運算資源
例如執行1750億參數的語言模型服務至少需要350GB的顯存,而目前最先進的語言模型大多已超過5000億參數量,許多研究團隊都沒有足夠的資源來運行,在現實應用中也無法滿足低延遲性能。
也有一些研究使用人工標註資料或使用LLM產生的標籤進行蒸餾來訓練較小的、任務專用的模型,不過微調和蒸餾需要大量的訓練資料才能實現與LLM相當的效能。
為了解決大型模型對資源的需求問題,華盛頓大學與Google合作提出了一種名為「逐步蒸餾」(Distilling Step-by-Step)的新蒸餾機制。透過逐步蒸餾,經過蒸餾後的模型尺寸相較於原模型來說更小,但性能卻更優,而且在微調和蒸餾過程中所需的訓練數據也更少
#請點選以下連結查看論文:https://arxiv.org/abs/2305.02301
分佈蒸餾機制把LLM中抽取的預測理由(rationale )作為在多任務框架內訓練小模型的額外監督資訊。
經過在4個NLP基準上進行實驗後,我們發現:
1. 與微調和蒸餾相比,該機制用更少的訓練樣本實現了更好的性能;
相對於少樣本提示LLM,該機制利用更小尺寸的模型實現了更出色的性能
3. 同時降低模型尺寸和數據量也可以實現優於LLM的效能。
實驗中,微調後770M的T5模型在基準測試中僅使用80%的可用數據就優於少樣本提示的540B的PaLM模型,而標準微調相同的T5模型即使使用100%的數據集也難以匹配。
蒸餾方法
分佈蒸餾的關鍵思想是逐步抽取資訊豐富且用自然語言描述的預測理由,即中間推理步驟,以解釋輸入問題與模型輸出之間的聯繫,並透過這些數據來更有效率地訓練小模型
分佈蒸餾主要包括兩個階段:
1. 從LLM中提取原理(rationale)
研究人員利用少樣本思維鏈(CoT)提示從LLM中提取預測中間步驟。
在決定目標任務之後,先在LLM輸入提示中準備幾個範例。每個範例都由一個三元組組成,包括輸入、原理和輸出
輸入提示後,LLM能夠模仿三元組演示以產生其他新問題的預測原理,例如,在常識問答案任務中,給定輸入問題:
#Sammy想去人群聚集的地方。他會選擇哪裡呢?選項有:(a)人口稠密地區,(b)賽道,(c)沙漠,(d)公寓,(e)路障
(Sammy wanted to go to where the people are. Where might he go? Answer Choices: (a) populated areas, (b) race track, (c) desert, (d) apartment, (e) roadblock)
經過逐步提煉後,LLM可以給出問題的正確答案“(a)人口稠密地區”,並且提供回答問題的理由“答案必須是一個有很多人的地方,在上述選擇中,只有人口稠密的地區有很多人。” 經過逐步提煉,LLM能夠得出正確答案為“(a)人口稠密地區”,並提供了解答問題的理由“答案必須是一個有很多人的地方,在上述選擇中,只有人口稠密的地區有很多人。”
透過在提示中提供與基本原理配對的CoT範例,上下文學習能力可以讓LLM為未曾遇到的問題類型產生對應的回答理由
2. 訓練小模型
透過將訓練過程建構成多任務問題,可以將預測理由抽取出來,並將其納入訓練小模型中
除了標準標籤預測任務之外,研究人員還使用新的理由生成任務來訓練小模型,使得模型能夠學習產生用於預測的中間推理步驟,並且引導模型更好地預測結果標籤。
透過在輸入提示中加入任務前綴「label」和「rationale」來區分標籤預測和理由產生任務。
實驗結果
在實驗中,研究人員選擇5,400億個參數量的PaLM模型作為LLM基線,使用T5模型作為任務相關的下游小模型。
在這項研究中,我們對四個基準資料集進行了實驗,這四個資料集分別是e-SNLI和ANLI用於自然語言推理,CQA用於常識問答,以及SVAMP用於算術數學應用題。我們在這三個不同的NLP任務中進行了實驗
#更少的訓練資料
逐步蒸餾方法在表現上比標準微調更出色,而且只需較少的訓練資料
在e-SNLI資料集上,當使用完整資料集的12.5%時就實現了比標準微調更好的性能,在ANLI、 CQA和SVAMP上分別只需要75%、25%和20%的訓練資料。
與使用220M T5模型對不同大小的人工標記資料集進行標準微調相比,分佈蒸餾在所有資料集上使用較少的訓練範例時,優於在完整資料集上進行標準微調
更小的部署模型尺寸
與少樣本CoT提示的LLM相比,分佈蒸餾得到的模型尺寸要小得多,但性能更好。
在e-SNLI資料集上,使用220M的T5模型實現了比540B的PaLM更好的性能;在ANLI上,使用770M的T5模型實現了比540B的PaLM更好的性能,模型尺寸僅為1/700
更小的模型、更少的資料
在縮小模型尺寸和訓練資料的同時,我們成功地實現了超越少樣本PaLM的性能
在ANLI中,使用770M T5模型的性能超過了540B PaLM,而且只使用了完整數據集的80%
經觀察可知,即使使用完整的100%資料集,標準微調也無法達到PaLM的性能水平,這表明透過逐步蒸餾可以同時減少模型尺寸和訓練資料量,從而實現超越LLM的效能
以上是7.7億參數,超越5400億PaLM! UW谷歌提出「分步蒸餾」,只需80%訓練資料|ACL 2023的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

DMA在C 中是指DirectMemoryAccess,直接內存訪問技術,允許硬件設備直接與內存進行數據傳輸,不需要CPU干預。 1)DMA操作高度依賴於硬件設備和驅動程序,實現方式因係統而異。 2)直接訪問內存可能帶來安全風險,需確保代碼的正確性和安全性。 3)DMA可提高性能,但使用不當可能導致系統性能下降。通過實踐和學習,可以掌握DMA的使用技巧,在高速數據傳輸和實時信號處理等場景中發揮其最大效能。

使用C 中的chrono庫可以讓你更加精確地控制時間和時間間隔,讓我們來探討一下這個庫的魅力所在吧。 C 的chrono庫是標準庫的一部分,它提供了一種現代化的方式來處理時間和時間間隔。對於那些曾經飽受time.h和ctime折磨的程序員來說,chrono無疑是一個福音。它不僅提高了代碼的可讀性和可維護性,還提供了更高的精度和靈活性。讓我們從基礎開始,chrono庫主要包括以下幾個關鍵組件:std::chrono::system_clock:表示系統時鐘,用於獲取當前時間。 std::chron

在C 中測量線程性能可以使用標準庫中的計時工具、性能分析工具和自定義計時器。 1.使用庫測量執行時間。 2.使用gprof進行性能分析,步驟包括編譯時添加-pg選項、運行程序生成gmon.out文件、生成性能報告。 3.使用Valgrind的Callgrind模塊進行更詳細的分析,步驟包括運行程序生成callgrind.out文件、使用kcachegrind查看結果。 4.自定義計時器可靈活測量特定代碼段的執行時間。這些方法幫助全面了解線程性能,並優化代碼。

交易所內置量化工具包括:1. Binance(幣安):提供Binance Futures量化模塊,低手續費,支持AI輔助交易。 2. OKX(歐易):支持多賬戶管理和智能訂單路由,提供機構級風控。獨立量化策略平台有:3. 3Commas:拖拽式策略生成器,適用於多平台對沖套利。 4. Quadency:專業級算法策略庫,支持自定義風險閾值。 5. Pionex:內置16 預設策略,低交易手續費。垂直領域工具包括:6. Cryptohopper:雲端量化平台,支持150 技術指標。 7. Bitsgap:

在C 中處理高DPI顯示可以通過以下步驟實現:1)理解DPI和縮放,使用操作系統API獲取DPI信息並調整圖形輸出;2)處理跨平台兼容性,使用如SDL或Qt的跨平台圖形庫;3)進行性能優化,通過緩存、硬件加速和動態調整細節級別來提升性能;4)解決常見問題,如模糊文本和界面元素過小,通過正確應用DPI縮放來解決。

C 在實時操作系統(RTOS)編程中表現出色,提供了高效的執行效率和精確的時間管理。 1)C 通過直接操作硬件資源和高效的內存管理滿足RTOS的需求。 2)利用面向對象特性,C 可以設計靈活的任務調度系統。 3)C 支持高效的中斷處理,但需避免動態內存分配和異常處理以保證實時性。 4)模板編程和內聯函數有助於性能優化。 5)實際應用中,C 可用於實現高效的日誌系統。

在MySQL中,添加字段使用ALTERTABLEtable_nameADDCOLUMNnew_columnVARCHAR(255)AFTERexisting_column,刪除字段使用ALTERTABLEtable_nameDROPCOLUMNcolumn_to_drop。添加字段時,需指定位置以優化查詢性能和數據結構;刪除字段前需確認操作不可逆;使用在線DDL、備份數據、測試環境和低負載時間段修改表結構是性能優化和最佳實踐。

C 中使用字符串流的主要步驟和注意事項如下:1.創建輸出字符串流並轉換數據,如將整數轉換為字符串。 2.應用於復雜數據結構的序列化,如將vector轉換為字符串。 3.注意性能問題,避免在處理大量數據時頻繁使用字符串流,可考慮使用std::string的append方法。 4.注意內存管理,避免頻繁創建和銷毀字符串流對象,可以重用或使用std::stringstream。
