天天看點

GPT前2代版本簡介

作者:平凡人筆記

承接上文ChatGPT進化的過程簡介

2018年,Google的Bert和OpenAI的GPT絕代雙驕,兩者非常像,都是語言模型,都基本上是無監督的方式去訓練的,你給我一個文本,我給你一個語言模型出來。

GPT前兩代沒有什麼特别的,第三代才有點大發神威。

GPT還不是特别火的時候,已經預計每天産生450億詞,每小時生成100W本書,是以以後看到的東西,可能是AI生成出來的。

這僅僅是22年5月份的GPT-3的情況。

微軟給OpenAI提供大規模的資料中心、上萬個GPU并行訓練 ,其他公司很難複現,因成本太高,訓練GPT3,電費畫了1200萬美元。

22年初,最開始的GPT3的應用,隻是在傳統的GPT基礎之上做的擴充,并不是讓網絡結構更大、訓練資料更多,而是讓網絡模式去解決一些以前解決不了的問題。

傳統的GPT存在的問題

  • 存在偏見

NLP偏見非常大,因為它學的是網際網路當中曆史上一切的東西,在曆史上會存在一些偏見,比如,

我今天買了一個華為手機,AI告訴你心情非常失落;買了蘋果手機,心情非常高興。

AI大機率會認為黑人是殺人犯,白人是教授、醫生。

會把這些偏見強行加入進來,這是最大的問題。

  • 答非所問

可能輸出的是長篇大論,可能自作聰明生成一些沒用的東西。

GPT可以生成小說、代碼等,你給它一些價值的内容,都可以按照要求去生成。

GPT前2代版本簡介

以前一年有幾個大模型出現,現在平均每4天就有一個大模型問世。

GPT這個圈大概有1750億的權重參數,其他更大的圓,權重參數更多。更大的語言模型,訓練生成的成本會更高。

在NLP領域當中,一定是模型越大、參數越大,越好嗎?

在訓練集和驗證集中是這樣的,資料、标簽越多,答案越固定。 NLP比的是一定做的對嗎? 就一種固定答案嗎? 不是的。 我比你描述的更好,但它是一種錯誤的答案,跟原始答案不一樣,你能說我錯了嗎!

ChatGPT在訓練和做政策的時候,它追求的不是一個特别大的參數量。 參數越大,模型越複雜,答案越固定,越朝着正确答案去逼近。

而對話聊天,了解的東西是通俗的,不需要一摸一樣,隻需要近似和好了解就行。

GPT1

GPT全稱Generate Pre-Training,生成式預訓練模型怎麼訓練呢?

不用給它标簽,而是輸入一句話,讓它預測下一個詞。

比如輸入“今天天氣”,預測下一個字是“真”,将“今天天氣真”輸入作為一句話,預測下一個字是“好”,就這樣一個字一個字的往外蹦。

Bert是基于“完形填空”去做的,有上下文語境。 GPT難度更大,生成式的結果不固定,可變的因素太多了,GPT是預測後文,預測未來的事。

GPT損失函數就是預測下一個詞

GPT前2代版本簡介

輸入一組權重參數和前文,來預測後文。

GPT前2代版本簡介

GPT1有一個問題,訓練了一個預訓練模型,後續怎麼應用呢?比如應用到機器翻譯、文本摘要。。

訓練好的語言模型要先了解上下文以及預測後面是什麼,但是如果想再做自己的事情,那要再連下一個任務了,即要連接配接一個輸出層,比如連接配接一個全連接配接層Linear,做分類任務。

是以GPT第一代版本不是我們所希望的,先有預訓練模型,再結合輸出層,做一步任務。即預訓練模型的基礎之上做了一個微調。

GPT2

在GPT第二代版本中,出現了zero-shot,即以不變應萬變,模型訓練完了之後,無論做什麼任務,都不需要微調,而是通過暗示的方式。

比如我想做一個分類任務,預測下“你有一雙漂亮的大眼睛”這句話是誇我還是罵我呢,則加一個暗示“這句話是誇我還是罵我呢”。 把這個提示跟上下文一起傳入到這個模型當中,模型在學習的時候,它看到了輸入的這句話,也看到了提示,那接下來回答的時候,需要參考這個提示。

這是zero shot做分類的場景。

還可以做機器翻譯,比如輸入一句話,再給它一個提示,将這句話翻譯成英文。

還可以做回歸任務,比如輸入一句話,預測下這句話中含有的單詞個數。

GPT2的思想是先有一個統一的大模型,在這個模型當中無論後續做什麼,做哪個領域的任務,都可以過來問這個模型,都可以加個提示,加了提示之後,模型在回答的時候圍繞着前文的輸入,再根據提示繼續往下生成。

從GPT2開始,大家看到希望了,在NLP這個領域又統一成了一個生成式的大模型,而不是有很多小的下遊任務進行微調。

GPT如何增加多樣性?

基于前面的詞,預測下一個詞,再根據前面兩個詞預測第三個詞,再根據前面三個詞預測第四個詞。。。

在預測的時候會陷入一個死循環,比如成語接龍的時候,

GPT前2代版本簡介

生成的東西都一樣,就是死循環。

再比如

GPT前2代版本簡介

不能老說“然後”,希望有點多樣性,對于模型來說也是如此,前面總在說的東西 後面就别再重複了。

GPT是通過“溫度Temperature”來提高多樣性的,對預測結果進行機率重新選擇。

GPT生成的結果并不是唯一的,比如你問GPT“今天晚上吃什麼?”,結果可能是“吃香蕉”(輸出機率是0.1)、“吃蔬菜(機率0.2)”、“吃雞肉(機率0.3)”、“吃羊肉(機率0.4)”。

在這個任務當中,它每次一定輸出機率最高的嗎? 吃羊肉的機率最高,不能天天吃羊肉吧。

GPT實際上是做一個采樣,跟買彩票一樣,雖然中獎的機率低,但并不是說是不可能事件,隻是采樣到的可能性比較低。

計算各類别預測結果,但是要在不同類别預測結果的基礎之上做一個采樣,機率最高的采樣到的可能性越大,機率低的采樣到的可能性低。

GPT前2代版本簡介

輸入“1、2、3、4”,将輸入通過softmax轉換成機率值,數字越大,機率越高,數字越小,機率越低。

能不能改變機率的分布呢?

除上一個小于0的數比如0.5之後,之前的數值就會放大,比如之前最高的機率是0.6439除以0.5變成了0.8650,機率值被放大,變得越高,越容易被輸出,準備越準。

T越小于1或小于1的程度越大,越想得到什麼就是越準的,越準的那一個得分越高 ,得分越高,機率值越高。

是以GPT3中溫度設定的越低,輸出就越固定,今天晚上吃羊,明天再問還是吃羊,因為羊的機率實在太高了。

溫度為1預設是softmax值,溫度越高,多樣性越豐富,溫度越低,相當于越希望得到最準的那個。

Top k 和 Top p

但是并不是說什麼結果都能輸出來,還需要設定2個參數Top k和Top p。

生成一個詞,有10萬種可能性,并不是說所有詞都能生成出來,不可能“今天吃啥”,輸出“吃個大理石”、“吃個耳機”,這些詞别給采樣出來。

Top k在任務中就選機率前10個來采樣,後面都給設定成0,後面的太離譜了,就别往外輸出了。

Top p是累加,就是取前多少個,能讓累加機率得到0.9以上或0.95以上。