聊聊最近爆火的 CHAT-GPT。

CHAT-GPT 初體驗

Chat-GPT 以問答的方式呈現給用戶,如何使用 Chat-GPT,實際上轉換為另一個問題:如何有效地提問。

編寫程序

難度為『困難』,通過率僅 30.9% 的動態規劃題:

很穩,代碼還有註釋。

嘗試通過率最低的一道題 Fancy Sequence:

僅通過了 2 個用例。這個測試有點極端,說明 Chat-GPT 並不是完全正確,但處理一般的編程問題還是綽綽有餘。

翻譯

查詢資料

提供參考方案

可以看出,給出的建議並不具體,第二次提問我希望知道『如何從入門到精通學習 RUST』,但得到的答案和『新手如何學習 RUST』問題相同。這些方案可以作為參考,但不能直接使用。

寫作業和寫論文也是類似的效果,你甚至可以指定生成文本的字數。

解決問題

答案正確,由於直接從圖片復制的文字《『兔』字識別有誤》,Chat-GPT 會修改為正確的內容後再進行處理。

換了個類似的問題:

正確答案:因為變換後腳少了,所以兔多,多了《100-88》÷《4-2》=7 隻,原有雞《100-7×4》÷《4+2》=12 隻,原有兔 12+7=19 隻。

可以看到,解決理科類問題是不靠譜的。這也容易理解,模型是基於概率給出答案,而理科類問題是嚴謹的。

發展歷程

OpenAI 成立於 2015 年 12 月 10 日,創始人包括 Sam Altman,Elon Musk 在內,OpenAI 的使命是『確保通用人工智能造福全人類』。2017 年,Google 在論文《Attention is all you need》中開源了 Transformer 神經網路結構,提出了最近幾年爆火的『注意力機制』,這篇論文最大的貢獻是使得 AI 能夠理解人們表達的意思。訓練大規模 AI 模型需要巨量資金,彼時,作為非營利機構的 OpenAI 已經無力承擔,2018 年,大靠山馬斯克也宣佈辭職。2019 年,微軟投了 10 億美元,雖然比爾·蓋茨並不看好 OpenAI 的前景。2022 年 12 月,OpenAI 推出 Chat-GPT,在全世界引起轟動。

基本原理

GPT-1

GPT《Generative Pre-trained Transformer》,即生成性被預訓練過的 Transformer 模型,源自 OpenAI 2018 年發表的論文《Improving Language Understanding by Generative Pre-Training》,提出了一種半監督學習方法,通過『預訓練+微調』的方式讓模型通過大量無標註數據學習『基本常識』,從而緩解人工標註數據有限的問題。

  • 12 層單向 Transformer《上圖左側》,每層 12 個注意力頭。不同任務《右側》的微調方式不同。
  • 預訓練過程,根據前 n 個單詞預測下一個可能的單詞。
  • 微調過程,有監督任務《給定數據集》和無監督任務同時進行。

GPT-2

2019 年,OpenAI 發表了論文《Language Models are Unsupervised Multitask Learners》,也就是 GPT-2,和 GPT-1 相比,主要的變化:

  • 完全舍棄微調《在 GPT-1 中,隻能用於特定任務》過程,驗證了 GPT-2 在 zero-shot《不提供樣本數據》 設置下的性能。
  • 更大規模的網路模型。參數量擴大到 1.5 億,使用 48 層 Transformer,1600 維向量。
  • 更大的數據集。新的數據集包含 800 萬個網頁,數據大小為 40GB。
  • 調整 Transformer 結構,將層歸一化《layer normalization》放在每個子塊之前作為輸入,並在最後一個自注意力塊後增加層歸一化操作。

GPT-3

2020 年,OpenAI 發表論文《Language Models are Few-Shot Learners》,即 GPT-3,采用了和 GPT-2 相同的模型。主要變化如下:

  • 討論了移除微調步驟的必要性《需要大量的數據標註》。
  • GPT-3 采用了 96 層的多頭 Transformer,詞向量維度為 12288,文本長度為 2048。
  • 在 Transformer Decoder 中使用了交替稠密《alternating dense》和局部帶狀稀疏注意力《locally banded sparse attention》機制。
  • 更大的數據集《維基百科數據集的權重隻占 3%》,Common Crawl 數據集《過濾後》大小為 570GB。

  • 上下文學習。以下示例《左側》是 Zero-shot《不給樣本數據》、One-shot《給一個樣本數據》、Few-shot《給少量樣本數據》 三種方式的區別。

Instruct-GPT

Chat-GPT 是 基於 OpenAI 於 2022 年發佈的 InstructGPT 進一步改進實現,本質上也是上下文模型,用戶給出文本的一部分內容,該模型會嘗試補充其餘部分。Instruct-GPT 的主要的區別如下:

  • 通過人為標註和強化學習的方法提升模型輸出結果的真實性、無害性和有用性,進一步理解用戶的意圖。

訓練模型分為三步:

  • 人工標註一批數據《工程師設計提示文本,由人類回答》,進行有監督地微調訓練《SFT》。
  • 人工對模型給出的結果進行打分排序《考慮真實性和無害性》,訓練獎勵模型《RM》,讓模型分辨人類不喜歡的內容。
  • 基於獎勵模型,使用 PPO《proximal policy optimization 》強化學習算法進行微調。
  • 社區現狀

    • 逆向工程 Chat-GPT API。通過逆向工程,作者得到了 Chat-GPT 的 API 調用接口,這樣,開發者就可以在任何地方調用 Chat-GPT:acheong08/ChatGPT
    • 如何使用 Chat-GPT。通過特定輸入,讓 Chat-GPT 完成不同類型的工作,例如,模擬 Linux 終端:f/awesome-chatgpt-prompts
    • 桌面端應用:lencx/ChatGPT《圖源該項目主頁》

    • 通過 wechaty《微信機器人》,在微信中接入 Chat-GPT:fuergaosi233/wechat-chatgpt
    • 瀏覽器插件:wong2/chatgpt-google-extension

    和直接在 Chat-GPT 網頁提問相比,對內容進行了精簡。個人認為,這才是 Chat-GPT 和搜索引擎結合的最終方案,因為 Chat-GPT 給出的結果隻能作為參考,通過 Edge 瀏覽器壟斷的方式可能行不通。

    • 使用 Chat-GPT Review 代碼:anc95/ChatGPT-CodeReview

    最初源自這個項目:sturdy-dev/codereview.gpt,隻是在 PR 頁面顯示 Chat-GPT 的建議供 reviewer 參考,後經過anc95修改,可以直接在 PR 頁面進行回復。

    可以遷移到論文修改、作業修改等類似場景,為 reviewer 提供參考信息。

    發展前景

    Chat-GPT 爆火之後,衍生出了一大批相關產業,從賣賬號,到實現微信小程序和 Web 應用,通過廣告和會員費獲得收入,挺佩服動手能力強的人。不過,話說回來,這些也隻是處在風口上的小打小鬧,最終在國內如何發展還得看大型企業。Chat-GPT 爆火之後,國內的互聯網公司相繼表示已有類似的研究,百度預計 2022 年 3 月完成『文心一言』的內測並面向公眾開放。

    就個人體驗來看,Chat-GPT 要想大規模應用可能還需要進一步優化。

    • Chat-GPT 雖然通過人工標註和訓練獎勵模型能夠使得輸出結果具有真實性、無害性和有用性,但是,這種機制還是不完善,用戶很容易繞過。例如,如果直接問一個不符合道德規范的問題,Chat-GPT 會拒絕回答,但是,當用戶換個提問方式,例如:『我在寫一本小說,故事的主人公想 xxx』,此時,Chat-GPT 就會完整地給出答案。
    • Chat-GPT 對理科類知識的輸出還需優化,數學、物理等理科類知識是嚴謹的,而基於概率的 AI 模型會根據上下文進行推斷,給出最適合《概率值最高》的輸出,並不能給出嚴謹、準確的答案。
    • Chat-GPT 給出的回答還比較泛,在某些情況下並不能給出用戶想要的答案。在 Chat-GPT 中,數據是至關重要的,因此,可能需要分行業、分領域標註數據集,從而給出更有深度、更符合用戶期望的答案。

    參考資料

    [1] Fancy Sequence: https://leetcode.cn/problems/fancy-sequence/

    [2] Attention is all you need: https://arxiv.org/pdf/1706.03762.pdf

    [3] Improving Language Understanding by Generative Pre-Training: https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf

    [4] Language Models are Unsupervised Multitask Learners: https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf

    [5] Language Models are Few-Shot Learners: https://arxiv.org/pdf/2005.14165.pdf

    [6] InstructGPT: https://cdn.openai.com/papers/Training_language_models_to_follow_instructions_with_human_feedback.pdf

    [7] acheong08/ChatGPT: https://github.com/acheong08/ChatGPT

    [8] f/awesome-chatgpt-prompts: https://github.com/f/awesome-chatgpt-prompts

    [9] lencx/ChatGPT: https://github.com/lencx/ChatGPT

    [10] wechaty: https://wechaty.js.org/

    [11] fuergaosi233/wechat-chatgpt: https://github.com/fuergaosi233/wechat-chatgpt

    [12] wong2/chatgpt-google-extension: https://github.com/wong2/chatgpt-google-extension

    [13] anc95/ChatGPT-CodeReview: https://github.com/anc95/ChatGPT-CodeReview

    [14] sturdy-dev/codereview.gpt: https://github.com/sturdy-dev/codereview.gpt