你真的理解GPT嗎?
點藍(lán)色字關(guān)注“機(jī)器學(xué)習(xí)算法工程師”
設(shè)為星標(biāo),干貨直達(dá)!
如今,ML 領(lǐng)域公號也卷得厲害,最早我 reddit 灌灌水,郵件看看,就有東西寫了也不怕重,現(xiàn)在基本上能第一眼看到的東西肯定還沒動手大號們就發(fā)完了。
前段時間 DALL·E 剛出,果然還沒動手寫,無數(shù)文章就給介紹完了。對個人而言,要寫的話要不就是別人沒寫過的,要不然就是寫得比人深,不然感覺沒太大意義。
一狠心,開個大坑吧,寫寫 GPT 發(fā)家史,如何從最初少人知曉,偏居一方,直到被 BERT 點名才被大家知道,再到 GPT2 一戰(zhàn)成名。之后 OpenAI 和 GPT 相關(guān)的一舉一動就都倍受關(guān)注,一有消息,便成為熱議,比如這次 DALL·E,還有之前 GPT3 連正式博客都沒發(fā)就各種討論。
我之前算半個 GPT 黑粉,因為覺得技術(shù)創(chuàng)新不高,不像 BERT 有 MLM 這樣驚艷的想法,所以沒覺得很厲害。
之前有段時間被一個加拿大小哥纏著講 GPT,他一直說 GPT 就是未來,就是 AGI(強(qiáng)人工智能),但其實 Transformer 都不是很懂。我當(dāng)然對他是嗤之以鼻,還是最后收了 100 刀(用這錢買了一堆課)才給他把 GPT 結(jié)構(gòu)從下到上都捋了一遍,細(xì)到計算圖每個節(jié)點。
現(xiàn)在,隨著 OpenAI 一步步往上堆,到 GPT3 各種 demo 出來,再到 DALL·E 直接文本生成圖片,我也只能直呼牛比,香,真香。事實證明了不斷堅持做一件正確事情的重要性。
有趣的是, OpenAI 成立之初并非因為文本生成模型而知名,這點和 DeepMind 些許不同,后者專注強(qiáng)化學(xué)習(xí)一百年。
而 OpenAI 一開始兩條線是強(qiáng)化學(xué)習(xí)和生成模型(集中 GAN),而 GPT 開始也沒受到太大關(guān)注,而是在探索中 OpenAI 發(fā)現(xiàn)了其可能性,便開始大力投入,到現(xiàn)在基本上一大半項目都與其相關(guān)。所以,現(xiàn)今大家提起 OpenAI 相信都是馬上想起 GPT,再或者和馬一龍(Elon Musk)早期有一腿,又多少人還能想起強(qiáng)化學(xué)習(xí)和GAN呢。
因為這樣的發(fā)展,因此回顧 GPT 的發(fā)展史無疑是非常有趣的。這種始于微末,到之后野心龐大,仿佛要”天下布武“,文本音頻圖像統(tǒng)統(tǒng)都要的故事性。讓我馬上中二了,這種劇情太有戲劇性了,不正是:GPT 的野望!

接下來就來一起看看 GPT 是如何發(fā)家,一步步長大,實現(xiàn)它野望的吧!(文尾有時間線)
GPT:始于微末,偏居一方
說起 GPT 的東家 OpenAI,如上面提到的,剛成立時肯定也沒想到自己之后是靠 GPT 加入大力神教而成名。畢竟那時剛發(fā)布 OpenAI Gym 的它還想著如何用強(qiáng)化學(xué)習(xí)來搏得一席之地,更遠(yuǎn)些實現(xiàn) AGI,但如今大家也都知道了,幫他完成心愿的可能是 Hassabis 帶領(lǐng)的 DeepMind 了。

看看 OpenAI 早期成員,除 Pieter Abbeel 等做強(qiáng)化學(xué)習(xí)的,就是一眾做偏圖像生成的,比如 GAN 提出者 Ian Goodfellow 最早也是入職 OpenAI,同期入職的還有一個叫 Alec Radford 發(fā)明 DCGAN 的精神小伙。大家記住這個名字,因為他對 GPT 的發(fā)展應(yīng)該說至關(guān)重要。
所以可以看出最早 OpenAI 就是群做強(qiáng)化學(xué)習(xí)和圖像生成的人,沒啥做 NLP 的,自然也難料想自己居然是通過 NLP 來一戰(zhàn)成名。
因此 GPT 模型也是從 OpenAI 15年成立,過了三年,到 18 年才趁著改革開放四十周年的春風(fēng),哦不,Transformer 和 NLP 預(yù)訓(xùn)練模型的春風(fēng),得以出現(xiàn)。
當(dāng)時,提出 Transformer 的 Attention Is All You Need 于17年剛發(fā)表,大家尚在觀望 Transformer 的效果,筆者也還在用 LSTM 做翻譯。
而到了 18 年,亦可說是 NLP 預(yù)訓(xùn)練模型元年,開年 ULMFiT 和 ELMo 打開戰(zhàn)局,到 年底 BERT 屠榜血流成河,讓 NLP 領(lǐng)域進(jìn)入了被芝麻街支配的恐怖。

而第一代 GPT 也正是在這個風(fēng)雨交加的一年的年中誕生,其實要說先兆也不是沒有,看 OpenAI 17 年發(fā)的一篇博客 Unsupervised Sentiment Neuron,就已能看到其為之后 GPT 研究打下的基礎(chǔ)。

這篇論文用 LSTM 在 Amazon 商品評論上訓(xùn)練單向語言模型,發(fā)現(xiàn)只通過這樣如此簡單的預(yù)訓(xùn)練目標(biāo),LSTM 就能產(chǎn)生一種情感神經(jīng)元可以反應(yīng)不同的情感。雖然當(dāng)時用預(yù)訓(xùn)練獲得表示在 SST 情感分類上取得了 SOTA,但大家更多聚焦的是它的可解釋性,以及通過情感神經(jīng)元進(jìn)行可控生成的工作,倒并沒對預(yù)訓(xùn)練給予太多關(guān)注,我最早知道該研究也是可解釋性。
不過大家馬上也看出其實這已為之后 GPT 打下了基礎(chǔ),GPT 和該研究的不同只在于將 LSTM 替換成 Transformer,還有用了更大更 general 的數(shù)據(jù)(這個套路之后也會不斷出現(xiàn)),用的仍然是”如此簡單的預(yù)訓(xùn)練目標(biāo)“。
從作者陣容也能看出,Sentiment Neuron 的兩位主要人員 Alec Radford 和 Ilya Sutskever 也在之后的 GPT 文章中一而再,再而三出現(xiàn)。倆人可堪稱為 GPT之父。
說完前身,正式看看 GPT 模型吧,也可稱其為 GPT1。
GPT 全稱為 Generative Pre-Train(查了才知道),也就顧名思義通過生成式來預(yù)訓(xùn)練。
模型結(jié)構(gòu)是 Transformer Decoder 結(jié)構(gòu),共 12 層,隱層大小 768,12 注意力頭,訓(xùn)練長度為 512 個 token 長。總計 1.1億參數(shù),和之后的模型比當(dāng)然只是個小不點,但當(dāng)時也不小了。最大的 ELMo 才9千萬參數(shù)。

用到的數(shù)據(jù)是 BooksCorpus 數(shù)據(jù)集(約5GB),大概在 8 張 P600 (內(nèi)存2GB)上訓(xùn)了一個月,可看到這時候給的資源還挺少。
效果實驗也主要在**語言理解(Language Understanding)**任務(wù)上做的,在 GLUE 上取得的效果在當(dāng)時看來也挺好的,很多任務(wù)上取得了 SOTA,但奇怪的是 GPT 似乎并沒受到太大關(guān)注,也可能只是在小領(lǐng)域內(nèi)有些名氣,但整體來說還是少被提及(或許也跟它 idea 沒太大創(chuàng)新性有關(guān))。
我最初知道 GPT,估計和大多人一樣,都是看到 BERT 論文中 pick 它出來碾壓的時候。

這時的 OpenAI 還沒有看到 GPT 真正潛力所在,只是用它來做語言理解方面任務(wù),但卻忽略了它真正潛力其實在生成。而這也正是 GPT 之后幾代亮點所在。
GPT 這篇博客 Improving Language Understanding with Unsupervised Learning,可看到 Future 一欄其中一條寫著 Scaling the approach。
there is significant room for improvement using the well-validated approach of more compute and data.
如果適當(dāng)?shù)挠酶嗨懔蛿?shù)據(jù)的話,還有很大的提升空間。
毫無疑問,這條路確實是正確的!
因為 GPT2 的到來。
GPT2:Too Dangerous To Release,一戰(zhàn)驚天下
18年在 BERT 橫空出世后的余震中結(jié)束,當(dāng)翻過一年到 19 年,正值2月14日那天,情人節(jié),一個本應(yīng)是異性戀們暴擊單身狗,給單身狗們飽喂狗糧的日子。
但科研單身狗卻來不及傷心,只因 GPT2 的出現(xiàn)給機(jī)器學(xué)習(xí)領(lǐng)域投下又一枚炸彈,造成的整動是2019年全年,隨著每次模型放出,都能成為頭條。不管是 PR 做得好,還是 GPT2 真的就是危險,但至少讓 GPT2 聞名的目的已達(dá)到。

正所謂一戰(zhàn)驚天下,如織田信長桶狹間一戰(zhàn),成功斬首今川義元,從一方小勢力成為名震天下的大名,開始其稱霸之路。GPT 也正是從 GPT-2 的知名后,開始了其稱霸之路。
大多人知曉 GPT2,還是從那句”Too Dangerous To Release(太危險了,不能給)“的回復(fù)開始。
GPT2 的成功真可以說是 AI 界最佳 PR 了,比起我司某某模型打了某某榜簡直厲害百倍。論文發(fā)出來,大家要模型,先稱太危險,利用大家對 AI 滅世論的恐懼來挑起話題。而之后放出的 Demo 也確實精彩,引起了一片論戰(zhàn),大家紛紛站邊,到底該不該開源 GPT2 模型,還都說得很有道理。此外,還依稀記得 GPT2 有蹭到流量之王馬一龍的流量,以及全年陸續(xù)開源模型的策略也不斷拉起話題,真的牛。
而要說 GPT2 所宣稱的 Misinformation(虛假信息)危險,我個人也覺得確實應(yīng)該注意,疫情期間自己還盡過一份力來打擊,但對于 GPT2,我只覺得是個幌子,之后大家也發(fā)現(xiàn)真正該防范的其實是 GAN(DeepFake)的 Misinformation,OpenAI 幾個月后自己也發(fā)了博客,根據(jù)調(diào)查好像也沒啥太大危害,哈哈哈,大家隨意大家隨意。
接下來聊聊 GPT2 的模型細(xì)節(jié),還有其所宣稱的驚人效果吧。
相比起 GPT,GPT2 主要的不同還是在于模型、數(shù)據(jù)、以及訓(xùn)練規(guī)模,更大更強(qiáng)了。

首先模型方面,GPT2 最大的模型有 48 層,1600 隱層大小,25個注意力頭,1024的上下文長度,而 GPT 的大小只相當(dāng)于 GPT2 最小那個模型。
數(shù)據(jù)方面,通過抓取 Reddit 上 3 個點贊以上鏈接的文章,進(jìn)行清洗,獲得 40GB 的文本數(shù)據(jù),稱其為 WebText.
此外模型架構(gòu)有點輕微改變,主體上還是 Transformer,但將 Layer Normalization 放到了注意力層的前面。相當(dāng)于直接給 Token 向量打通了一條直通最后一層的通路,不知是否是因為這樣會更有利于生成式訓(xùn)練。

訓(xùn)練花費上,大概用 32 塊 TPU v3(8 個核)訓(xùn)了一周,花了 4.3 萬美金。在 18 年那個大家還不是很見過世面的時候,都被驚呆了,二三十萬一個模型,乖乖。
當(dāng)然,現(xiàn)在大家都已經(jīng)習(xí)以為常,翻翻眼皮該干啥繼續(xù)干啥。
關(guān)于效果方面相信也都很清楚,這次 OpenAI 意識到了,原來 GPT2 的強(qiáng)項不在語言理解啊,所以都沒在 GLUE 上測試。而是直接展示 GPT2 真正的強(qiáng)項,生成。
論文中展示了一個 GPT2 生成的關(guān)于科學(xué)家發(fā)現(xiàn)獨角獸的故事,雖然被吐槽是 Cheery-Pick(精心挑選)出來的,但效果還是非常驚人,包括其生成的流暢性,前后的邏輯性等等。
也正是因為好效果,OpenAI 才有底氣稱 GPT2 太危險,怕被濫用。
除了故事生成,也是從 GPT2 開始 OpenAI 開始重視其用于 Zero-Shot 的可能性。首先在各個語言模型任務(wù)上不訓(xùn)練直接進(jìn)行評估,結(jié)果發(fā)現(xiàn) GPT2 語言模型強(qiáng)大到直接 Zero-Shot 情況下屠榜。
當(dāng)然語言模型任務(wù)還不是關(guān)鍵,更關(guān)鍵的是對其他任務(wù)也進(jìn)行 Zero-Shot,比如問答,翻譯,總結(jié)... 不訓(xùn)練只給出一些范例,然后讓 GPT2 基于范例文本來直接進(jìn)行生成,展示了 GPT2 的通用性。
關(guān)于 GPT2 模型開源策略,二月放出 small 模型,五月放出 medium 模型,八月才放出 larger 模型 ,十二月放出最大的 xl 模型,剛好一年。
這一年里,大家也基于 GPT2 放出的模型做了各種 demo,比如 HuggingFace 的 TalktoTransformer,和代碼補(bǔ)全的 TabNine(用過都說好,除了資源消耗大),還有其他家也訓(xùn)練了類似模型,比如 Grover,但也學(xué) OpenAI 沒放出大模型,理由直接略,同 OpenAI。

GPT2 就這樣紅了 19 年一整年,期間當(dāng)然芝麻街的各位也是你方唱罷我登場,打得不可開交。
在進(jìn)入讓所有人都難忘的 20 年前,還需要倒轉(zhuǎn)一下時間,因為從年初放出 GPT2 后,OpenAI 也沒閑著,當(dāng)然不是把所有工夫都放在”安全“問題上。
而是在 GPT2 看到的可能性上進(jìn)行進(jìn)一步的探索與準(zhǔn)備,首先第一步,為下一步的更大更強(qiáng)打好基礎(chǔ)!
練兵屯糧:OpenAI LP,Sparse Transformer... All For Scaling!
第一步,當(dāng)然是搞錢。
GPT2 的燒錢能力也是有目共睹,按照 OpenAI 的構(gòu)想還要做得更大更強(qiáng),往更多領(lǐng)域推廣,就需要大量錢來搭建自己的大規(guī)模計算系統(tǒng)(GPT2 還借的谷歌家的 TPU),勢必?zé)X速度就更快了。
因此 OpenAI 先成立了一個好搞錢的所謂 ”Capped-Profit (有上限盈利)“ 的子公司 OpenAI LP,而母公司 OpenAI 還是 non-profit。
沒過多久,就收到了微軟爸爸給的一億美金,同時合作一起開發(fā)專門給 OpenAI 用的大規(guī)模云計算資源。
在大規(guī)模分布式訓(xùn)練過程中,OpenAI 用的是 Kubernetes 搭建集群進(jìn)行實驗,也總結(jié)了大量的經(jīng)驗,包括 Scaling Kubernetes to 2,500 Nodes 和 Scaling Kubernetes to 7,500 Nodes 兩篇博客,后面提到的 GPT3、DALL-E、以及 CLIP 等模型都是在 7500 節(jié)點集群上訓(xùn)練的。
于是硬件資源就搞定了,之后是軟件方面,如果要進(jìn)一步擴(kuò)大 GPT 的規(guī)模,包括模型大小,還有建模長度,那勢必要優(yōu)化一下原始 Transformer 模型。原始 Transformer 模型的缺點總所周知,就是它的? 計算復(fù)雜度,這也是近期的一個熱門研究方向,魔改 Transformer,降低計算復(fù)雜度。
OpenAI 也給出自己的魔改方案,那就是 Sparse Transformer.
如其名 Sparse(稀疏),主要對 Transformer 中最占計算量的注意力矩陣(Attention Matrix)部分做了優(yōu)化,通過稀疏化,將計算量從? 降到了?. 具體操作就是通過觀察總結(jié)后,將原來的注意力模式,替換成設(shè)定的更有效率的注意力模式,從而將算子中一個? 降到了?.

當(dāng)然 Sparse Transformer 那篇論文不光是提出了 Sparse Attention,還包括如何用它來構(gòu)建更大規(guī)模的模型,包括增加到數(shù)百層,怎么通過重計算注意力權(quán)重來減少訓(xùn)練時內(nèi)存使用,以及將稀疏注意力模式寫成 GPU 核函數(shù)提高效率,此外還有混合精度等等。
還有一個非常需要指出的就是,OpenAI 從這里就已開始將 Transformer 不光用在文本,還用在音頻和圖像序列生成上了,這也為之后的發(fā)展打下一定基礎(chǔ)。
除了上面提到的軟硬件,OpenAI 也積累了各種大規(guī)模訓(xùn)練經(jīng)驗,都是些經(jīng)(shao)驗(qian)法則,總結(jié)出模型大小,數(shù)據(jù)集大小,計算量和損失的關(guān)系,還有模型的寬度和深度比例如何處理等等。這些規(guī)律的總結(jié)無疑對 OpenAI 進(jìn)行各種實驗非常有幫組,包括如何進(jìn)行架構(gòu)參數(shù)設(shè)計,如何分配最優(yōu)計算資源。
感興趣可以查看這兩篇論文 ?Scaling Laws for Neural Language Models,Scaling Laws for Autoregressive Generative Modeling。看完這兩篇,不由深感我等之貧窮,灑下了不甘的淚水。
基礎(chǔ)都準(zhǔn)備好了,就是時候開始我們 GPT 的野望了,攻城略地,進(jìn)擊吧!!!
進(jìn)擊:音頻之音樂生成

有了 GPT2 在文本的性能展示,以及 Sparse Transfromer 的各種訓(xùn)練優(yōu)化,是時候?qū)?GPT 的腳步邁出單純的文本生成了。
第一步就是音頻,音樂生成。
其實 Sparse Transformer 有對音頻進(jìn)行直接生成的實驗,所以看到希望后,OpenAI 就開始慢慢投入人力來發(fā)展這條線。最開始對這方面進(jìn)行探索的是 Christine McLeavey Payne,做了個簡單的 demo,MuseNet.
緊接 GPT2 不久,19年四月末就發(fā)布的 MuseNet,模型結(jié)構(gòu)用的就是 Sparse Transformer 的 72 層,24頭,4096 上下文長度的模型,訓(xùn)練目標(biāo)也很簡單,將 GPT2 的文本序列換成了將 MIDI 文件的音頻給 Token 化后的序列,單向序列生成。

而訓(xùn)練數(shù)據(jù)用的是,搜集到的各種 MIDI 文件,其中包括古典音樂,爵士,流行各種風(fēng)格。還帶有各種元信息,樂器作曲家等,這樣就能加入樂器 Token 和作曲家 Token 來讓模型分清不同樂器和作曲家風(fēng)格,之后生成也就更可控。
大概訓(xùn)練數(shù)據(jù)的格式如下
bach piano_strings start tempo90 piano:v72:G1 piano:v72:G2 piano:v72:B4 piano:v72:D4 violin:v80:G4 piano:v72:G4 piano:v72:B5 piano:v72:D5 wait:12 piano:v0:B5 wait:5 piano:v72:D5 wait:12 piano:v0:D5 wait:4 piano:v0:G1 piano:v0:G2 piano:v0:B4 piano:v0:D4 violin:v0:G4 piano:v0:G4 wait:1 piano:v72:G5 wait:12 piano:v0:G5 wait:5 piano:v72:D5 wait:12 piano:v0:D5 wait:5 piano:v72:B5 wait:12
可看到,只是簡單的給 MIDI 中的信息用文本表示出來了,包括樂器,音高,音量等(樂器:音量:音高)。
而實際效果,聽了下,比較適合寫作業(yè)聽,雖然聽起來像那么回事,但一首曲子沒有完整主題,跳來跳去,風(fēng)格倒是像一聽就聽出來了。
整體來說效果還挺好的,特別想到這只是基于單向序列預(yù)測來生成的。研究生階段隔壁就是做音樂生成,看教授做的各種東西,會發(fā)現(xiàn)需要各種音樂理論,前后處理很麻煩,生成效果還不一定好。
而 MuseNet 直接無視各種理論,單向無腦輸出。可類比語言生成方面,GPT 也沒用到什么句法樹啥的語言結(jié)構(gòu)理論,只是單向輸出,卻能獲得結(jié)構(gòu)完整,邏輯還不錯的文本。
當(dāng)然 MuseNet 只是第一步,之后一年內(nèi) OpenAI 擴(kuò)大團(tuán)隊(Alec 和 Ilya 也介入),又做出了一個更棒的音樂生成產(chǎn)品,那就是恰好一年多一點的20年4月末放出的 JukeBox.

JukeBox 相比起 MuseNet 最大的改進(jìn)就是————更大了。
開玩笑,確實是大了些(上下文長度擴(kuò)大到 8192),但這不是關(guān)鍵,最關(guān)鍵的兩點在于
將 MIDI 輸入變成了 32-bit 44.1kHz 的純音頻輸入,加入了編碼解碼方案來將音頻 token 化,以及還原

可基于文本(歌詞)進(jìn)行聲音的輸出
對于第一點,主要考慮,如果將純音頻輸入當(dāng)做 bit 處理,那么一個只有4分鐘的音樂就有超過1000萬個時間步,而如果想學(xué)習(xí)音樂的高層次信息又得參考全局信息,而這么長的時間步根本不可能直接用 Transformer 處理。
因此一個解決方案就是,通過將一段音頻給離散化壓縮投影到一個更低維的空間 token 化,來減少時間步。
而這里將音頻離散化以及還原的部件用的是 VQ-VAE-2,能將音頻編碼成不同層次的 token,然后再解碼回去。

對于第二點,訓(xùn)練倒不難,難在獲得歌詞與音樂的對齊數(shù)據(jù),研究人員通過一些先驗,比如每個詞固定窗口大小,或用 AutoLyricsAlign 這樣的對齊工具來處理。
效果和 MuseNet 類似,效果不差聽起來像個樣子,而且在一些小范圍還能生成一些很棒的片段,但大的像整個音樂的維度上卻差強(qiáng)人意,不能生成那種整體結(jié)構(gòu)化的東西。
此外這個模型巨慢,生成一分鐘音頻要將近 9 個小時。也找了音樂家來用,但發(fā)現(xiàn)尚沒有比較好的輔助創(chuàng)作的用途。
但整體來說還是很 impressive 的,因為畢竟是直接從純音頻來做的音樂生成,也證明了在 GPT 在音頻領(lǐng)域的能力。
進(jìn)擊:強(qiáng)化學(xué)習(xí)之加入人反饋的文本生成

在文本生成方面,OpenAI 希望能做得更好。雖然 GPT2 顯示不經(jīng)過訓(xùn)練,只用一些文本 Prompt(提示)來引導(dǎo),就能完成很多任務(wù),比如翻譯,摘要等等,但性能也理所當(dāng)然不會太好,也很難控制。
于是就 OpenAI 就準(zhǔn)備利用自己的強(qiáng)項,強(qiáng)化學(xué)習(xí),來對文本生成進(jìn)行加強(qiáng)。
第一個探索成果是,19年9月發(fā)布的 Fine-Tuning GPT-2 from Human Preference,方法非常簡單,雖然用了強(qiáng)化學(xué)習(xí)的概念,但卻是一個你我他,三歲小孩都懂的強(qiáng)化學(xué)習(xí)方法。
就是針對特定任務(wù),先給個可基于文本,然后再給出四個可能樣本,之后找眾包工具人們,做多選題,對當(dāng)前任務(wù)哪個最好,最后 GPT2 就用這個來進(jìn)行 finetune 訓(xùn)練。
非常簡單吧,名副其實的**“人工”智能**,給我一堆人,我就能生成一個宇宙。
任務(wù)包括限定風(fēng)格的文本續(xù)寫,以及文本摘要。

發(fā)現(xiàn)對續(xù)寫任務(wù),基于人反饋的 GPT2 只用非常少樣本就能生成非常好的結(jié)果。但文本摘要卻出了問題,因為人類標(biāo)注會傾向于直接抽取式的摘要結(jié)果,導(dǎo)致 GPT2 也學(xué)到了這種傾向,變得只會簡單地從文本中進(jìn)行 copy 來進(jìn)行摘要生成。
同樣剛好一年后(發(fā)現(xiàn)規(guī)律了嗎),2020年9月 OpenAI 放出一篇新博客,Learning to Summarize with Human Feedback. 正是吸取上面的經(jīng)驗后,做出的進(jìn)一步實驗。
這次用到了真正的強(qiáng)化學(xué)習(xí)。
只關(guān)注一個任務(wù),之前不太成功的文本摘要,用的是 Reddit TL;DR 數(shù)據(jù)集。效果比上次好很多,能不 finetune 直接用在 CNN/DailyMail 摘要任務(wù)上用,效果還很好,都能作為一個通用的摘要模型了。
而相比起之前最主要的改進(jìn),在于兩點
最重要的還是在于標(biāo)注質(zhì)量的提高,之前出的問題是模型會經(jīng)常只 copy 片段用于摘要,但這是由于標(biāo)注導(dǎo)致的。所以這次 OpenAI 吸取教訓(xùn),不再用眾包,直接雇了 80 個標(biāo)注合約工,不按件計費了,要注重質(zhì)量。此外,還對每個人進(jìn)行了詳細(xì)的面試入職,開發(fā)專門的標(biāo)注界面,還有專門的聊天室來咨詢問題,還會一對一打視頻電話對... 非常用心了這次,因此才能獲得比上次質(zhì)量高很多的標(biāo)注。
其次用到了真正意義上的強(qiáng)化學(xué)習(xí)算法 PPO,而 reward 不再是人直接給了,而是先用上面的高質(zhì)量標(biāo)注訓(xùn)練一個好的 reward 模型,之后再用這個 reward 模型來優(yōu)化生成策略。
整個過程就如下圖

先收集高質(zhì)量人類標(biāo)注 再用標(biāo)注訓(xùn)練 reward 模型 最后用 reward 模型來訓(xùn)練生成策略,進(jìn)行摘要生成
這套流程 OpenAI 非常熟悉,之前就有相關(guān)成果。
除了前面說的克服了之前模型 copy 的缺點,還發(fā)現(xiàn)通過強(qiáng)化學(xué)習(xí)策略,能讓小模型比大模型有監(jiān)督效果更好,比如通過該方式訓(xùn)練 13億 參數(shù)模型,比120億參數(shù)直接監(jiān)督訓(xùn)練的摘要效果還要好。
當(dāng)然和其他 GPT 一樣缺點就是太大了,6.7B的模型用強(qiáng)化學(xué)習(xí)來 finetune 需要 320 GPU天。
進(jìn)擊:圖像之圖像生成

要說 GPT 系列里最讓人 impressive 的,還是圖像生成的成果,前段時間的 DALL-E 正是這部分的最新成果,也是 DALL-E 讓我萌生了寫這篇文章的想法。
DALL-E 和之前的 JukeBox,還有強(qiáng)化學(xué)習(xí)摘要一樣,在正式出場前,都先有一個初步探索的成果。而對于 GPT 圖像生成,這個成果就是 imageGPT 了,簡稱 iGPT.

idea 非常簡單,和 Sparse Transformer 里做法一樣,對圖片像素直接進(jìn)行序列預(yù)測,但 iGPT 為了展示 GPT 強(qiáng)大的通用性,刻意使用了和 GPT2 一樣的架構(gòu),同時也為了避免植入先驗,所以直接用的是完整版 Transformer,即計算復(fù)雜度?的版本.
這也導(dǎo)致 iGPT 的訓(xùn)練消耗很大,需要 2500 個 V100 天。因為算力需求高,這也讓 iGPT 的建模長度不能太長,所以是在三種低分辨率大小上進(jìn)行的訓(xùn)練:32x32, 48x48, 64x64.
為了進(jìn)一步減少序列長度,沒有直接用 RGB 編碼格式的圖片進(jìn)行訓(xùn)練,而是 OpenAI 自己搞出了一個 9-bit 的顏色編碼,比 RGB 格式的長度又小了三倍。
至于效果方面,如上面圖片展示,首先 iGPT 可以明顯生成可識別物體的圖片,有些創(chuàng)意還很有意思,比如中間那只貓的生成。
但 iGPT 想要強(qiáng)調(diào)的并不是其生成能力,而是想展示 GPT 的通用性,通過這樣簡單的單向序列預(yù)測目標(biāo)在圖片上進(jìn)行訓(xùn)練,也能學(xué)習(xí)到非常好的圖片特征。
利用這些圖片特征,iGPT 能在一些圖片數(shù)據(jù)集上達(dá)到 SOTA.

當(dāng)然這個 SOTA 代價也是非常大的,比對比學(xué)習(xí)的效率差太多了,但 OpenAI 表示這里只是在探索可能性,證明 GPT 的能力,爺就是壕。
以為按照同樣規(guī)律,又要過個一年后,但沒想到這次是半年后,OpenAI 在 GPT 的圖片生成上就進(jìn)一步放了一個大招:DALL-E. 還買一送一,送了個 CLIP.

DALL-E 很多細(xì)節(jié)還沒放出來,更多只是展示了它驚人的效果,太炫了簡直。
DALL-E 完成的任務(wù)用一句話來說就是,根據(jù)文本生成滿足要求的圖片。而且還能仿佛理解了文本內(nèi)容一樣,生成一些之前完全就不存在的圖片,比如長頸鹿龜

更多 demo,可以去原貼看,還是一句,很驚人。比之前 GPT2 的文本展示給人的沖擊力大多了。
按照博客里的說法,DALL-E 卻并沒用 GAN-loss,只是單純用和 GPT 一樣預(yù)測下一個 token 的最大似然損失。僅僅只是這樣就能用文本進(jìn)行圖片生成,真的有點難以想象。所以說到底還是,Attention Is All Your Need! Transformer 結(jié)構(gòu)真如 Sutton 教授在 The Bitter Lesson 里說的,是一種可以充分撬動算力來進(jìn)行 Scaling 的方法。
接下來介紹關(guān)于 DALL-E 的模型細(xì)節(jié)。
首先,DALL-E 整個就是一個 GPT3 的圖像版本,關(guān)于 GPT3 下一節(jié)會再介紹,主要還是更大更強(qiáng)了。而 DALL-E 用到的數(shù)據(jù)集,應(yīng)該和 CLIP 一樣,是 OpenAI 在網(wǎng)上爬取的大量圖片與文本的成對數(shù)據(jù)。
之后,再將這些成對數(shù)據(jù)構(gòu)建成 token 序列,前面是 256 個 token 長度的文本序列,而緊接著的是 token 化成 1024 個 token 的圖片。
至于如何 token 化,還記得 JukeBox 的同學(xué)馬上就能想到,沒錯,就是 VQVAE. 先將圖片預(yù)處理成 256x256 的圖片,之后預(yù)訓(xùn)練 VAE 將 256x256 像素大小的圖片,壓縮成 32x32 的離散隱編碼,如此就剛好獲得 1024=32x32 長度的圖片 token 表示。
對前面的文本序列,Attention 采用的就是標(biāo)準(zhǔn)單向語言模型的 mask,而對圖片序列部分,用的是 SparseTransformer 里提到的各種注意力模式。
對圖片與文本之間,每個圖片 token 都會看到所有的文本信息,之后訓(xùn)練也按照這樣的安排,來進(jìn)行單向 token 預(yù)測。
目前看到的就是這么簡單的方式,之后加上超大的 GPT3,再加上可能也超大的文本圖片對數(shù)據(jù),就能夠獲得驚人效果的 DALL-E 了。
而 DALL-E 的缺點,還是之前所有 GPT 的缺點。
第一,計算量 super 大,先不說 GPT3 這樣 Inference 一次,之后還得將生成的圖片 token 用 VAE 還原成圖片,還得 sample 多次,最后再用 CLIP(同樣巨大),對這些圖片進(jìn)行 rerank,再挑出滿意的圖片。而且生成過程還得調(diào),這就涉及到第二點。
第二,可控性差,雖然 GPT3 在大量數(shù)據(jù)上訓(xùn)完后的能力很強(qiáng),但也讓它像是一頭難以控制的巨獸(初號機(jī)),要控制其產(chǎn)生令人滿意的生成,需要不斷嘗試給它合適的文本引導(dǎo) prompt。所以才會看到 demo 里有些 prompt 很奇怪,同樣的話要說好幾遍。
隨著 GPT 的成功,估計之后 prompt engineering 也會成為一門學(xué)科(aka: GPT控制學(xué))
商業(yè)化:GPT3 君臨
基于數(shù)次提到的 GPT 的缺點,尤其是模型過大,算力需求大,所以之前想法也是這個肯定不太好投入實用上線。
結(jié)果 OpenAI 就在 20 年年中放出了一個 API 接口,而這其實也就是 GPT3,以及用它做的商業(yè)化。

可以清晰看到,相比起 GPT2,這次 GPT3 真是一點沒宣傳模型,還不如 GPT,至少 GPT 還專門發(fā)了篇博客,而 GPT3 只是悄咪咪地發(fā)了篇論文,然后在 OpenAI API 博文里稍微提了一嘴。
但即便如此,GPT3 一出來還是受到了很大關(guān)注,引起了很多爭議。最大爭議當(dāng)然就是來自一眾對 GPT 報以巨大期望的人,以為 GPT3 一定能在 GPT2 基礎(chǔ)上進(jìn)行巨大創(chuàng)新,結(jié)果一看還是老路子,模型方面沒有太大創(chuàng)新,繼續(xù)燒錢!更大!更強(qiáng)!
模型更大了,從 GPT2 的 1.5B 給擴(kuò)大到 175 B,96層,12288隱層大小,96頭,真正的巨無霸,訓(xùn)練 batch size 還是 3.2M。數(shù)據(jù)也更大了,包括之前的 WebText 的加強(qiáng)版,還有一些開源高質(zhì)量數(shù)據(jù)集,Books1,Books2,Wikipedia,此外還加入清洗過的 Common Crawl 數(shù)據(jù),光純文本就 570 GB 大小。
當(dāng)然一定要說結(jié)構(gòu)上沒改動,也不是,其實就是之前提到過的 Sparse Transformer,GPT3 里的 Transformer 應(yīng)該用了 Sparse 結(jié)構(gòu)。
GPT3 論文長 75 頁,大都是在做各種實驗來探索它的性質(zhì),而其中主要關(guān)注的就如其標(biāo)題 Language Models are Few-Shot Learners,提到的 Few-shot learning。

當(dāng)然這里的 Few-shot,和傳統(tǒng)意義上理解的找?guī)讉€例子 finetune 還不同。只是直接給 GPT3 幾個相關(guān)例子,讓 GPT3 輸出想要的結(jié)果,這個過程中沒有參數(shù)訓(xùn)練和梯度傳遞的。
之所以 OpenAI 做這樣的實驗,很大可能是因為 GPT3 的訓(xùn)練成本過大,因此如果要使用的話,更希望是能直接 inference 用,沒有 finetune 的訓(xùn)練過程。
實驗結(jié)果也給了 OpenAI 挺大信心,GPT3 能這樣在大量任務(wù)上取得還算不錯的成績,充分證明了其強(qiáng)大的泛化性。甚至在一些任務(wù)上,只通過這樣不用 finetune 訓(xùn)練的方法,就取得 SOTA 結(jié)果。
通過上述一系列 OpenAI 對 GPT3 的態(tài)度,已經(jīng)能看出 OpenAI 對 GPT3 的期望,已經(jīng)不在其所謂模型創(chuàng)新性了,更多在怎么展示它的實用性上,包括在各種任務(wù)上的通用性。此外論文里面還花了很大篇幅討論其社會影響。
當(dāng)然,最直接的還是給 API 放了出來,準(zhǔn)備商業(yè)化。讓大家可以通過申請白名單(特別難申請)來體驗 GPT3 的效果。
而申請下了 API 的大佬們,用 GPT3 做了很多超炫的 demo,包括直接根據(jù)要求生成 html 和 css 代碼,還有 AI Dungeon 直接讓 GPT3 生成游戲劇本,各種各樣。更多可參考 https://github.com/elyase/awesome-gpt3
OpenAI 商業(yè)化 GPT3 API 后,好爸爸微軟立刻就開始砸錢,讓 OpenAI 給該接口授權(quán)給它了,即使這個 API 還在 Beta 測試階段。
而至于 GPT3 可能的前景,我個人還是挺看好的,因為展示出的很多 demo 確實好。而且根據(jù)吳教授在 The Batch 里提到的一些情況,他創(chuàng)立的 Landing.ai 里已經(jīng)看到很多人開始考慮如何用 GPT3 來進(jìn)行創(chuàng)業(yè)了。
而如果文本的 GPT3 API 成功后,因為上述的各種其他模態(tài)的模型也都是基于 GPT 模型來進(jìn)行開發(fā)的,因此將這些無論是音樂生成,圖像生成,摘要生成的打包成 API,也是非常簡單。
未來隨著開發(fā)相信 OpenAI 也會隨著這些需要提供各種各樣模態(tài)的 GPT 模型,而使用者只需要提供自己的 idea,剩下的交給模型就行。
未來
至于之后的路途,其實差不多能清晰的看到了,用 GPT 的這套框架,只要給出足夠的數(shù)據(jù),無論是什么,只要能 token 化和序列化,不管是什么模態(tài),文本、音頻、圖像,甚至更遠(yuǎn)些如腦電波。GPT 這套框架都能給建模出來。
之后 OpenAI 只是想到一個應(yīng)用的 idea,然后找到大量的數(shù)據(jù),想辦法序列化,就能直接訓(xùn)練出一個該應(yīng)用的 XX-GPT 了。如之前提到的文字轉(zhuǎn)音頻,文字轉(zhuǎn)圖像,反過來 GPT 也能輕松做。
如果想要針對某個特定任務(wù)進(jìn)行加強(qiáng),那么也能用強(qiáng)化學(xué)習(xí)進(jìn)行強(qiáng)化。
當(dāng)然每個模型一個應(yīng)用也很麻煩,之后肯定得想一種方法,簡單點當(dāng)然用任務(wù) token 提示,將大量的任務(wù)放在一個模型里,最后只用一個超大模型就能完成各種任務(wù)。其實這也是 Google Brain 一直想要完成的事情,比如最近的 Switch Transformer.

多年后,可能會有一個 GPT-1000,人們想要完成什么任務(wù),比如說根據(jù)這個視頻配一段 OST,告訴它,給它輸入,它返回多個候選的創(chuàng)意,人類再在這些基礎(chǔ)上進(jìn)行調(diào)整完善,最后給這些結(jié)果反饋給 GPT,讓它不斷進(jìn)化。而模型自身也能不斷地從網(wǎng)絡(luò)上抓取數(shù)據(jù)進(jìn)行自我訓(xùn)練。
而這樣的過程不斷進(jìn)行下去,日積月累最終獲得的模型也必將近乎是一個通用型的人工智能。
時間線

18 年:
Reference
[0] Unsupervised Sentiment Neuron: Learning to Generate Reviews and Discovering Sentiment
[1] GPT: Improving Language Understanding with Unsupervised Learning
[2] GPT2:Better Language Models and Their Implications
[3] Sparse Transformer: Generative Modeling with Sparse Transformers
[4] MuseNet
[5] GPT-2: 6-Month Follow-Up,很多作者影響
[6] RL from human prefer: Fine-Tuning GPT-2 from Human Preferences, 更多人介入
[7] GPT-2: 1.5B Release
[8] Jukebox, 作者:Prafulla Dhariwal, Heewoo Jun, Christine Payne, Jong Wook Kim, Alec Radford, Ilya Sutskever
[9] OpenAI API, GPT3,都沒有成為 milestone,博客也沒發(fā),重要度下降
[10] Image GPT, Next pixel prediction
[11] Learning to Summarize with Human Feedback
[12] OpenAI Licenses GPT-3 Technology to Microsoft
[13] DALL·E: Creating Images from Text, 主導(dǎo)者,Aditya Ramesh
[14] CLIP: Connecting Text and Images
[15] Attention Is All You Need
[16] ULMFiT:Universal Language Model Fine-tuning for Text Classification
[17] ELMo: Deep contextualized word representations
[18] Scaling Laws for Neural Language Models
[19] Scaling Laws for Autoregressive Generative Modeling
[20] Microsoft Invests In and Partners with OpenAI to Support Us Building Beneficial AGI
[21] OpenAI LP
[22] Scaling Kubernetes to 2,500 Nodes
[23] Scaling Kubernetes to 7,500 Nodes
[24] Learning from Human Preferences

推薦閱讀
谷歌提出Meta Pseudo Labels,刷新ImageNet上的SOTA!
漲點神器FixRes:兩次超越ImageNet數(shù)據(jù)集上的SOTA
CondInst:性能和速度均超越Mask RCNN的實例分割模型
mmdetection最小復(fù)刻版(十一):概率Anchor分配機(jī)制PAA深入分析
MMDetection新版本V2.7發(fā)布,支持DETR,還有YOLOV4在路上!
無需tricks,知識蒸餾提升ResNet50在ImageNet上準(zhǔn)確度至80%+
不妨試試MoCo,來替換ImageNet上pretrain模型!
mmdetection最小復(fù)刻版(七):anchor-base和anchor-free差異分析
mmdetection最小復(fù)刻版(四):獨家yolo轉(zhuǎn)化內(nèi)幕
機(jī)器學(xué)習(xí)算法工程師
? ??? ? ? ? ? ? ? ? ? ? ? ??????? ??一個用心的公眾號
?

