大模型基礎02:GPT家族與提示學習

大模型基礎:GPT 家族與提示學習

從 GPT-1 到 GPT-3.5

GPT(Generative Pre-trained Transformer)是 Google 于2018年提出的一種基于 Transformer 的預訓練語言模型。它標志著自然語言處理領域從 RNN 時代進入 Transformer 時代。GPT 的發展歷史和技術特點如下:

  • GPT-1

2018年6月, Google 在論文 “Improving Language Understanding by Generative Pre-Training” 中首次提出 GPT 模型。GPT-1 使用 12 層 Transformer 解碼器堆疊而成,每層包含一個 multi-head self-attention 模塊和一個全連接前饋網絡。在一個包含網頁、書籍等的大規模文本數據集上進行了無監督預訓練,根據下游任務進行微調,展示了其在語言理解和生成任務上的強大能力, 是語言模型發展歷史上的重要里程碑。GPT-1 的貢獻在于證明了 Transformer 結構也可以進行無監督預訓練, 并可以捕獲語言的長距離依賴特征。GPT-1的提出推動了后續GPT模型系列的發展與革新。
在這里插入圖片描述

  • GPT-2

2019年2月, OpenAI 發布 GPT-2 模型。GPT-2 使用更大規模的數據集,包含40GB文本數據,規模比GPT-1大40倍。GPT-2基于GPT-1進行改進,提出了一種簡化的 Transformer 解碼器結構。GPT-2 展示了強大的語言生成能力, 可以根據提示文本進行長段落語言生成。GPT-2 繼承 GPT-1的設計思路, 通過擴大模型和數據集規模, 優化模型結構, 給出了一個更強大的預訓練語言模型, 顯示了該方向的發展前景。

  • GPT-3

2020年5月,OpenAI 發布GPT-3,引起了廣泛關注。GPT-3使用了1750億參數,是迄今為止最大的語言模型。GPT-3沿用了 Transformer 解碼器結構,但進一步擴大了模型寬度和深度, 包含了96層Transformer塊, 具有更強的表示能力。訓練數據集達到了4000億字的海量文本數據, 遠超之前的GPT模型。這為GPT-3提供了豐富的世界知識。GPT-3在問答、翻譯、總結等多項任務上都展現出強大的零樣本學習能力,展現出接近人類的語言處理能力。GPT-3的關鍵創新在于提出了In-Context Learning概念, 可以理解提示并根據上下文進行回答,例如在問答任務中,只需在prompt提供問題及一個QA示例,GPT-3就可以學習回答同類問題,在千億級參數量級的模型上,In-Context Learning 的能力才初步顯現,可以從5-10個示例中獲取新任務和概念信息。這種學習方式更貼近人類的學習模式。GPT-3 使語言模型產生了質的飛躍, 具有廣泛的應用前景。

在這里插入圖片描述

模型發布時間模型規模層數數據集主要貢獻
GPT-12018年6月117M參數12層BooksCorpus 數據集(8000本書)首個無監督預訓練的Transformer語言模型
GPT-22019年2月1.5B參數48層WebText 數據集(450GB文本)展示了規模對生成質量的重要性
GPT-32020年5月175B參數96層CommonCrawl 數據集(45TB文本)規模再次擴大,上下文學習能力, prompt engineering

ChatGPT:贏在哪里

ChatGPT 是技術和商業的成功結合。

  1. 模型訓練:雖然GPT-3和ChatGPT都是基于Transformer的語言模型,但在訓練數據和目標函數上有所不同。GPT-3主要是用大量的非結構化文本進行訓練的,而ChatGPT則在GPT-3的基礎上進行了進一步的訓練,這包括使用與對話相關的數據集和更適合對話任務的訓練目標。

  2. 對話管理:在對話管理方面進行了優化,以提供更自然、連貫的對話體驗。這包括保持對話的上下文、處理多輪對話、以及在一個對話中處理多個話題等。

  3. 用戶輸入處理:這包括理解和響應各種類型的查詢,如信息查詢、任務請求、小說式的輸入等。

  4. 輸出生成:生成更貼近人類的輸出。這包括使用更復雜的生成策略、生成更長的響應、以及更好地處理模糊或不確定的輸入等。

  5. 安全性和道德規范:還進行了一些改進以提高模型的安全性和符合道德規范。這包括對模型的過濾和調節,以防止生成不適當或有害的內容,以及對模型進行額外的評估和測試,以確保其在各種情況下都能表現良好。

GPT-4:一個新的開始

2022年8月,GPT-4 模型訓練完成。2023年3月14日,OpenAI 正式發布 GPT-4。 與GPT-3和GPT-3.5相比,

GPT-4在各方面都有所優化和提升:

  1. 多模態模型: GPT-4支持圖像輸入,出色的視覺信息理解能力使得GPT-4能對接更多樣化的下游任務,如:描述不尋常圖像中的幽默、總結截屏文本以及回答包含圖表的試題。在文本理解能力上,GPT-4 在中文和多輪對話中也表現出遠超 GPT-3.5 的能力。

  2. 擴展上下文窗口:gpt-4 and gpt-4-32k 分別提供了最大長度為8192和32768個token的上下文窗口。這使得 GPT-4可以通過更多的上下文來完成更復雜的任務,也為 思維鏈(CoT)、思維樹(ToT)等后續工作提供了可能。

  3. GPT+生態 :借助GPT-4強大能力,依托 ChatGPT Plugin 搭建AIGC應用生態商店(類似 App Store)

  4. 應用+GPT :GPT-4已經被應用在多個領域,包括微軟Office、Duolingo、Khan Academy等。

在這里插入圖片描述

提示學習(Prompt Learning)

  • Prompt learning 是一種使用預訓練語言模型的方法,它不會修改模型的權重。在這種方法中,模型被給予一個提示(prompt),這個提示是模型輸入的一部分,它指導模型產生特定類型的輸出。這個過程不涉及到對模型權重的修改,而是利用了模型在預訓練階段學習到的知識和能力。

  • In-context learning 是指模型在處理一系列輸入時,使用前面的輸入和輸出作為后續輸入的上下文。這是Transformer模型(如GPT系列)的一種基本特性。例如,當模型在處理一個對話任務時,它會使用對話中的前幾輪內容作為上下文,來生成下一輪的回答。這個過程也不涉及到對模型權重的修改。

總的來說,prompt learning 和 in-context learning都是利用預訓練語言模型的方法,它們都不會修改模型的權重。它們的主要區別在于,prompt learning關注的是如何通過設計有效的提示來引導模型的輸出,而in-context learning則關注的是如何利用輸入序列中的上下文信息來影響模型的輸出。

  • Prompt tuning,又稱為"prompt engineering",是一種優化技術,它涉及到尋找或生成能夠最大限度提高模型性能的提示。這可能涉及到使用啟發式方法、人工智能搜索算法,或者甚至是人工選擇和優化提示。Prompt tuning的目標是找到一種方式,使得當給定這個提示時,模型能夠生成最準確、最相關的輸出。

思維鏈(Chain-of-Thought, CoT):開山之作

Chain-of-thought(CoT) prompting 是一種利用自然語言編程的技巧,可以提高ChatGPT在復雜推理問題上的準確率。思維鏈提示的原理是參考人類解決問題的方法,從輸入問題開始的一系列自然語言形式的推理過程,直到得到最后輸出結論。思維鏈就是讓語言模型逐步推理,通過依次生成多個中間步驟z1,z2,…,zn(這些中間過程稱為thoughts),前面的生成結果會作為后續的模型輸入,直到得到最終結果y。

思維鏈提示的實現方法大致如下:

首先,選擇一個適合思維鏈提示的任務,例如數學、常識或符號推理等,需要多步驟的推理過程。然后,為任務準備一些樣例,每個樣例包含輸入問題、思維鏈和輸出結論。思維鏈是一系列自然語言形式的推理步驟,從輸入問題開始,直到得到輸出結論。接著,將樣例作為上下文輸入給大語言模型,例如GPT-3或PaLM等,讓模型學習樣例中的推理模式。最后,給模型一個新的輸入問題,讓模型生成思維鏈和輸出結論。模型會根據樣例中的推理模式,生成一系列合理的推理步驟,并給出最終的答案。

這就是思維鏈提示的基本實現方法。當然,還有一些改進和優化的方法,例如使用多數投票、自洽性檢查、自我訓練等等。

假設您想讓 ChatGPT 回答一個數學問題:

一、如果您直接給出問題,ChatGPT 回答不一定正確,例如:Q: 一個人以每小時5公里的速度騎自行車,騎了1小時后,又以每小時10公里的速度騎了2小時,他一共騎了多少公里?那么ChatGPT可能會直接給出答案,但不一定正確,也不會顯示推理過程。二、提供思維鏈示例,那么ChatGPT可能會按照類似的方式給出答案和推理過程,并且更可能正確。例如:Q: 一個人以每小時5公里的速度騎自行車,騎了1小時后,又以每小時10公里的速度騎了2小時,他一共騎了多少公里?
A: 思維鏈:
第一段路程 = 速度 x 時間 = 5 x 1 = 5公里
第二段路程 = 速度 x 時間 = 10 x 2 = 20公里
總路程 = 第一段路程 + 第二段路程 = 5 + 20 = 25公里 輸出結論:25公里Q: 一個人以每小時10公里的速度騎自行車,騎了半小時后,又以每小時15公里的速度騎了1小時,他一共騎了多少公里?

CoT Prompting 作為一種促進語言模型推理的方法具有幾個吸引人的特點:

  • 首先,從原則上講,CoT 允許模型將多步問題分解為中間步驟,這意味著可以將額外計算資源分配給需要更多推理步驟的問題。

  • 其次,CoT 提供了對模型行為的可解釋窗口,提示了它可能是如何得出特定答案的,并提供了調試推理路徑錯誤之處的機會(盡管完全描述支持答案的模型計算仍然是一個未解決問題)。

  • 第三,在數學應用題、常識推理和符號操作等任務中都可以使用思維鏈推理(CoT Reasoning),并且在原則上適用于任何人類能夠通過語言解決的任務。

  • 最后,在足夠大規模現成語言模型中很容易引發 CoT Reasoning ,只需在少樣本提示示例中包含一些連貫思路序列即可。

通過思維鏈,我們可以看到大語言模型的強與弱:

  • 它強在,模型規模的提高,讓語義理解、符號映射、連貫文本生成等能力躍升,從而讓多步驟推理的思維鏈成為可能,帶來“智能涌現”。

  • 它弱在,即使大語言模型表現出了前所未有的能力,但思維鏈暴露了它,依然是鸚鵡學舌,而非真的產生了意識。

沒有思維鏈,大模型幾乎無法實現邏輯推理。但有了思維鏈,大語言模型也可能出現錯誤推理,尤其是非常簡單的計算錯誤。Jason Wei 等的論文中,曾展示過在 GSM8K 的一個子集中,大語言模型出現了 8% 的計算錯誤,比如6 * 13 = 68(正確答案是78)。

自洽性(Self-Consistency): 多路徑推理

谷歌研究者提出一種名為「self-consistency」(自洽性)的簡單策略,不需要額外的人工注釋、訓練、輔助模型或微調,可直接用于大規模預訓練模型。顯著提高了大型語言模型的推理準確率。該研究在三種大型語言模型上評估一系列算術推理和常識推理任務的自洽性,包括 LaMDA-137B、PaLM-540B 和 GPT-3 175B。研究者發現,對于這幾種規模不同的語言模型,自洽方法都能顯著提高其推理能力。與通過貪心解碼(Wei et al., 2022)生成單一思維鏈相比,自洽方法有助于在所有推理任務中顯著提高準確性,如下圖 2 所示。

在這里插入圖片描述
具體步驟如下:

首先,使用一組手動編寫的思維鏈示例對語言模型進行提示;
接著,從語言模型的解碼器中采樣一組候選輸出,生成一組不同的候選推理路徑;
最后,通過在生成的答案中選擇最自洽的答案來集成結果。
在實驗調查中,研究者發現思維鏈提示與相結合,會比單獨使用僅考慮單一生成路徑的思維鏈產生好得多的結果。

思維樹(Tree-of-Thoughts, ToT): 續寫佳話

Tree of Thoughts(TOT),它允許語言模型在解決問題的中間過程進行探索,通過考慮多種不同推理路徑并進行評估,同時具備向前看跟向后回溯的能力以獲得更佳決策選擇。

在這里插入圖片描述
TOT 使語言模型可以去探索多個推理路徑。把解決問題視作在一棵樹上的搜索,樹上的每個節點代表當前的狀態s=[x,z1,…,zi],狀態包括原始的問題以及到目前為止的思考過程。一個完整的Tree of Thoughts包括以下4個過程:

  1. Thought decomposition 思維分解

    如何將推理中間過程 分解 成多個想法步驟。不同于CoT會在沒有明確分解的情況下連續對thoughts采樣,ToT 會根據問題屬性去設計和分解中間的想法過程。每個想法應該足夠小,使得語言模型可以生成有潛力跟多樣的樣本(生成一本書就太長了,很難保證連貫性),同時又應該足夠大,使得語言模型可以評估該想法解決問題的潛力(只生成一個token就太小,很難去評估對于解決問題的幫助)。

  2. Thought generator 思維生成,根據當前狀態生成候選想法。

  3. State evaluator 狀態評估。

    讓狀態評估器評估它們對于解決問題的幫助,以確定哪些狀態值得繼續探索,以及以何種方式探索。

  4. Search algorithm 搜索算法。

    Tree of Thought支持插入多種依賴于樹的搜索算法,論文中探索了其中兩種相對簡單的搜索算法。 a) BFS,廣度優先算法,每一步中保留最優潛力的K個狀態。 b) DFS,深度優先算法,優先探索最優潛力的狀態,直到得到最終結果(解決了問題),或者超過當前狀態被評估不可能解決問題就停止,如果是后者的話可以退回父節點,繼續進行探索。

從概念上講,ToT 作為LM通用問題求解方法具有幾個優勢:
(1) 泛化性。IO、CoT、CoT-SC 和自我完善都可以看作是ToT的特殊情況(即有限深度和廣度的樹;圖1)
(2) 模塊化。基本LM以及思考分解、生成、評估和搜索過程都可以獨立變化。
(3) 適應性。可以適應不同的問題屬性、LM能力和資源約束。
(4) 方便性。無需額外訓練

ToT 為復雜推理問題提供了一種新的解決方案,雖然用戶可以靈活調整其中的模塊,但是往往需要更多的資源(例如更多次數的模型調用)才能提升某個任務下的表現。雖然目前這種方式沒涉及模型訓練,但是利用ToT的相關任務來微調語言模型可以進一步提升語言模型解決問題的能力,例如將模型訓練中預測下一個token的任務改成考慮下一個段落的選擇。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43016.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43016.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43016.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【校招VIP】java語言類和對象之map、set集合

考點介紹: map、set集合相關內容是校招面試的高頻考點之一。 map和set是一種專門用來進行搜索的容器或者數據結構,其搜索效率與其具體的實例化子類有關系。 『java語言類和對象之map、set集合』相關題目及解析內容可點擊文章末尾鏈接查看! …

深入了解Maven(一)

目錄 一.Maven介紹與功能 二.依賴管理 1.依賴的配置 2.依賴的傳遞性 3.排除依賴 4.依賴的作用范圍 5.依賴的生命周期 一.Maven介紹與功能 maven是一個項目管理和構建工具,是基于對象模型POM實現。 Maven的作用: 便捷的依賴管理:使用…

springboot 使用zookeeper實現分布式隊列

一.添加ZooKeeper依賴&#xff1a;在pom.xml文件中添加ZooKeeper客戶端的依賴項。例如&#xff0c;可以使用Apache Curator作為ZooKeeper客戶端庫&#xff1a; <dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</…

【java安全】Log4j反序列化漏洞

文章目錄 【java安全】Log4j反序列化漏洞關于Apache Log4j漏洞成因CVE-2017-5645漏洞版本復現環境漏洞復現漏洞分析 CVE-2019-17571漏洞版本漏洞復現漏洞分析 參考 【java安全】Log4j反序列化漏洞 關于Apache Log4j Log4j是Apache的開源項目&#xff0c;可以實現對System.out…

英語——構詞法

按照語言一定的規律創造新詞的方法就叫作構詞法。英語中常見的構詞法包括六種:合成法、派生法、轉化法、混合法、截短法和首尾字母結合法。其中后三種將在第四節“縮寫和簡寫”中進行講解。 第一節 合成法 英語構詞法中把兩個單詞連在一起合成一個新詞,前一個詞修飾或限定后…

前端性能優化——包體積壓縮插件,打包速度提升插件,提升瀏覽器響應的速率模式

前端代碼優化 –其他的優化可以具體在網上搜索 壓縮項目打包后的體積大小、提升打包速度&#xff0c;是前端性能優化中非常重要的環節&#xff0c;結合工作中的實踐總結&#xff0c;梳理出一些 常規且有效 的性能優化建議 ue 項目可以通過添加–report命令&#xff1a; "…

innodb索引與算法

B樹主鍵插入 B樹在innodb的插入有三種模式page_last_insert, page_dirction, page_N_direction 而在bustub里面的B樹就是page_N_direction,如果是自增主鍵的話&#xff0c;就是上面這樣的插入法 FIC優化 (DDL) 選擇性統計 覆蓋索引 MMR ICP優化 自適應hash 全文索引 MySQL…

Rust之編寫自動化測試

1、測試函數的構成&#xff1a; 在最簡單的情形下,Rust中的測試就是一個標注有test屬性的函數。屬性 (attribute)是一種用于修飾Rust代碼的元數據。只需要將#[test]添加到關鍵字fn的上一行便可以將函數轉變為測試函數。當測試編寫完成后,我們可以使用cargo test命令來運行測試…

Flink-----Standalone會話模式作業提交流程

1.Flink的Slot特點: 均分隔離內存,不隔離CPU可以共享:同一個job中,不同算子的子任務才可以共享同一個slot,同時在運行的前提是,屬于同一個slot共享組,默認都是“default”2.Slot的數量 與 并行度 的關系 slot 是一種靜態的概念,表示最大的并發上線并行度是個動態的概念…

List和ObservableCollection和ListBinding在MVVM模式下的對比

List和ObservableCollection和ListBinding在MVVM模式下的對比 List 當對List進行增刪操作后&#xff0c;并不會對View進行通知。 //Employee public class Employee : INotifyPropertyChanged {public event PropertyChangedEventHandler? PropertyChanged;public string N…

Vue-13.創建完整的Vue項目(vue+vue-cli+js)

前言 之前寫了命令創建Vue項目&#xff0c;但是事實上我們可以直接用編譯器直接創建項目&#xff0c;這里我使用webstorm&#xff08;因為我是前后端兼修的所以我習慣使用Idea家族的編譯器&#xff09; 只寫前端的推薦用VsCode前后端都寫的推薦用webstorm 新建項目 項目初始…

確保Django項目的穩定運行和持續改進

確保Django項目的穩定運行和持續改進 引言 Django是一個強大的Python Web框架&#xff0c;用于構建高效、可靠的Web應用程序。然而&#xff0c;部署一個Django項目并不意味著工作已經完成。在項目上線之后&#xff0c;確保項目的穩定運行并不斷進行改進是非常重要的。本博客將…

vscode 安裝勾選項解釋

1、通過code 打開“操作添加到windows資源管理器文件上下文菜單 &#xff1a;把這個兩個勾選上&#xff0c;可以對文件使用鼠標右鍵&#xff0c;選擇VSCode 打開。 2、將code注冊為受支持的文件類型的編輯器&#xff1a;不建議勾選&#xff0c;這樣會默認使用VSCode打開支持的相…

《Linux從練氣到飛升》No.15 Linux 環境變量

&#x1f57a;作者&#xff1a; 主頁 我的專欄C語言從0到1探秘C數據結構從0到1探秘Linux菜鳥刷題集 &#x1f618;歡迎關注&#xff1a;&#x1f44d;點贊&#x1f64c;收藏??留言 &#x1f3c7;碼字不易&#xff0c;你的&#x1f44d;點贊&#x1f64c;收藏??關注對我真的…

微信小程序通用字體代碼

下面是一個簡單的微信小程序通用字體代碼示例&#xff1a; // 在app.wxss中設置全局字體樣式 import ./styles/fonts.wxss;// 在fonts.wxss中定義字體樣式 font-face {font-family: CustomFont;src: url(font.ttf) format(truetype); }// 在page.wxss中使用自定義字體樣式 .cus…

SASS 學習筆記 II

SASS 學習筆記 II 上篇筆記&#xff0c;SASS 學習筆記 中包含&#xff1a; 配置 變量 嵌套 這里加一個擴展&#xff0c;嵌套中有一個 & 的用法&#xff0c;使用 & 可以指代當前 block 中的 selector&#xff0c;后面可以追加其他的選擇器。如當前的 scope 是 form&a…

GuLi商城-前端基礎Vue-使用Vue腳手架進行模塊化開發

自己親自實踐&#xff1a; mac安裝webpack webpack 簡介Webpack 是一個非常流行的前端構建工具&#xff0c;它可以將多個模塊&#xff08;包括CSS、JavaScript、圖片等&#xff09;打包成一個或多個靜態資源文件&#xff08;bundle&#xff09;&#xff0c;以便用于部署到生產…

19c_ogg搭建

1.環境介紹 源端&#xff1a;192.168.56.101 目標端&#xff1a;192.168.56.100 背景&#xff1a;數據從主庫cdb主機定位&#xff0c;同步到從庫 2.配置ogg 2.1 開啟歸檔、強制日志、補充日志 --ogg 主備都需要配置 SQL> alter database archivelog; SQL> alter databa…

【Axure高保真原型】JS日期選擇器篩選中繼器表格

今天和大家分享JS日期選擇器篩選中繼器表格的原型模板&#xff0c;通過調用瀏覽器的日期選擇器&#xff0c;所以可以獲取真實的日歷效果&#xff0c;具體包括哪一年二月份有29天&#xff0c;幾號對應星期幾&#xff0c;都是真實的&#xff0c;獲取日期值后&#xff0c;通過交互…

接口測試,負載測試,并發測試,壓力測試區別

接口測試 1.定義&#xff1a;接口測試是測試系統組件間接口的一種測試。接口測試主要用于檢測外部系統與系統之間以及內部各個子系統之間的交互點。測試的重點是要檢查數據的交換&#xff0c;傳遞和控制管理過程&#xff0c;以及系統間的相互邏輯依賴關系等。 2.目的&#xf…