解析Tansformer—理解GPT-3, BERT和T5背后的模型(附鏈接)

大數(shù)據(jù)文摘授權(quán)轉(zhuǎn)載自數(shù)據(jù)派THU
作者:Dale Markowitz
翻譯:王可汗
校對:和中華
你知道這句話嗎,當(dāng)你有一把錘子的時(shí)候,所有東西看起來都像釘子? 在機(jī)器學(xué)習(xí)中,我們似乎真的發(fā)現(xiàn)了一種神奇的錘子。實(shí)際上,在這個(gè)模型面前所有東西都是釘子,這就是Transformer模型。Transformer模型可以用來翻譯文本、寫詩、寫文章,甚至生成計(jì)算機(jī)代碼。
事實(shí)上,我在daleonai.com上寫的很多驚人的研究都是建立在Transformer基礎(chǔ)之上,比如AlphaFold 2,它是一種從基因序列中預(yù)測蛋白質(zhì)結(jié)構(gòu)的模型,以及GPT-3、BERT、T5、Switch、Meena等功能強(qiáng)大的自然語言處理(NLP)模型。你可能會說,他們不僅僅是遇到了……呃,先往下說吧。
如果你想在機(jī)器學(xué)習(xí),特別是自然語言處理方面與時(shí)俱進(jìn),你至少要對Transformer有一點(diǎn)了解。所以在這篇文章中,我們將討論它們是什么,它們是如何工作的以及為什么它們?nèi)绱擞杏绊懥Α?/span>
Transformer是一種神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。簡單地說,神經(jīng)網(wǎng)絡(luò)是分析圖像、視頻、音頻和文本等復(fù)雜數(shù)據(jù)類型的一種非常有效的模型。針對不同類型的數(shù)據(jù)有專門優(yōu)化過的的神經(jīng)網(wǎng)絡(luò)。例如,在分析圖像時(shí),我們通常會使用卷積神經(jīng)網(wǎng)絡(luò)。大體來說,它們模仿了人腦處理視覺信息的方式。

卷積神經(jīng)網(wǎng)絡(luò),圖片來自Renanar2,wikiccommons
大約從2012年開始,我們已經(jīng)用CNN相當(dāng)成功地解決了視覺問題,比如識別照片中的物體,識別人臉,手寫數(shù)字識別。但在很長一段時(shí)間里,語言任務(wù)(翻譯、文本摘要、文本生成、命名實(shí)體識別等)都沒有較好的方法。這很不幸,因?yàn)檎Z言是我們?nèi)祟惤涣鞯闹饕绞健?/span>
在2017年推出Transformer之前,我們使用深度學(xué)習(xí)來理解文本的方法是使用一種稱為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的模型,它看起來像這樣:

循環(huán)神經(jīng)網(wǎng)絡(luò),圖片來自fdeloche,Wikimedia
假設(shè)你想把一個(gè)句子從英語翻譯成法語。RNN將一個(gè)英語句子作為輸入,一次處理一個(gè)單詞,然后按順序吐出對應(yīng)的法語單詞。這里的關(guān)鍵詞是“順序”。在語言中,單詞的順序很重要,你不能隨意打亂它們。比如下面的句子:
“Jane went looking for trouble.(簡到處找麻煩。)”意思與句子非常不同: “Trouble went looking for Jane” (麻煩到處找簡。)
因此,任何能夠理解語言的模型都必須捕捉詞序,而循環(huán)神經(jīng)網(wǎng)絡(luò)是通過在一個(gè)序列中,一次處理一個(gè)單詞來做到的。
但是RNN有問題。首先,他們很難處理冗長的文本序列,比如長段落或文章。當(dāng)他們讀到一段的結(jié)尾時(shí),他們會忘記開頭發(fā)生了什么。例如,基于RNN的翻譯模型可能很難記住長段落主語的性別。
更糟糕的是,RNN很難訓(xùn)練。它們很容易受到所謂的消失/爆炸梯度問題的影響(有時(shí)候你只能重新開始訓(xùn)練并祈禱)。更有問題的是,因?yàn)镽NN是按順序處理單詞的,所以很難并行化。這意味著你不能通過添加更多GPU來加快訓(xùn)練速度,這也意味著你不能用那么多數(shù)據(jù)來訓(xùn)練它們。
進(jìn)入Transformer
這就是Transformer大顯身手的地方。它們是谷歌和多倫多大學(xué)的研究人員在2017年開發(fā)的,最初設(shè)計(jì)用于翻譯。但與循環(huán)神經(jīng)網(wǎng)絡(luò)不同,Transformer可以非常有效地并行化。這就意味著,只要有合適的硬件,你就可以訓(xùn)練出一些非常大的模型。
有多大呢?非常之巨大!
GPT-3是一種特別令人印象深刻的文本生成模型,它的寫作能力幾乎與人類相當(dāng),它是在45TB的文本數(shù)據(jù)上訓(xùn)練而成,包括幾乎所有的公共網(wǎng)絡(luò)數(shù)據(jù)。
所以,用一句話總結(jié)Transformer,一定是這樣的: 當(dāng)一個(gè)擴(kuò)展性極佳的模型和一個(gè)巨大的數(shù)據(jù)集邂逅,結(jié)果可能會讓你大吃一驚。
Transformer是如何工作的?

Transformer,圖片出自原稿:
https://arxiv.org/abs/1706.03762
雖然原稿中的圖表有點(diǎn)嚇人,但Transformer背后的創(chuàng)新可以歸結(jié)為三個(gè)主要概念:
1. 位置編碼(Positional Encodings)
2. 注意力機(jī)制(attention)
3. 自注意力機(jī)制(Self-Attention)
位置編碼
讓我們從第一個(gè)開始,位置編碼。假設(shè)我們要把文本從英語翻譯成法語?;貞汻NN,即之前的翻譯方法,是通過按順序處理單詞來理解單詞順序。但這也是讓它們難以并行化的原因。
Transformer通過一種稱為位置編碼的創(chuàng)新方法繞過了這一障礙。其思路是將輸入序列中的所有單詞——在本例中是一個(gè)英語句子,在每個(gè)單詞后面加上一個(gè)數(shù)字,表明它的順序。所以,你為你的網(wǎng)絡(luò)提供如下序列:
[("Dale", 1), ("says", 2), ("hello", 3), ("world", 4)]
br
從概念上講,你可以把理解語序的重?fù)?dān)從神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)轉(zhuǎn)移到數(shù)據(jù)本身。
起初,在對Transformer進(jìn)行任何數(shù)據(jù)訓(xùn)練之前,它并不知道如何解釋這些位置編碼。但是隨著這個(gè)模型看到越來越多的句子和它們的編碼,它學(xué)會了如何有效地使用它們。
我在這里做了一點(diǎn)過度簡化——最初的作者使用正弦函數(shù)來進(jìn)行位置編碼,而不是簡單的整數(shù)1、2、3、4——但要點(diǎn)是相同的。將語序存儲為數(shù)據(jù),而不是靠網(wǎng)絡(luò)結(jié)構(gòu),這樣你的神經(jīng)網(wǎng)絡(luò)就更容易訓(xùn)練了。
注意力機(jī)制
Transformer的下一個(gè)重要部分叫做注意力機(jī)制。
嗨!
注意力是一種神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),在機(jī)器學(xué)習(xí)中隨處可見。事實(shí)上,2017年介紹Transformer的那篇論文標(biāo)題并不是《我們向你介紹Transformer》(We Present You the Transformer)。相反,它被稱為《注意力就是你需要的一切》(Attention is All You Need)。
Attention is All You Need
https://arxiv.org/pdf/1706.03762.pdf
在2015年文本翻譯中引入了注意力機(jī)制。要理解它,請參考原文中的例句:
關(guān)于歐洲經(jīng)濟(jì)區(qū)的協(xié)定是1992年8月簽署的。(The agreement on the European Economic Area was signed in August 1992.)
現(xiàn)在想象一下把這句話翻譯成法語:
L’accord sur la zone économique européenne a été signé en ao?t 1992.
對于翻譯這個(gè)句子,一個(gè)不好的方法是對照著英語句子中的每個(gè)單詞,然后試著把法語中的對應(yīng)單詞一次翻譯出來。出于幾個(gè)原因,這并不奏效,但其中一個(gè)原因是,法語翻譯中的一些詞顛倒過來了:英語中是“歐洲經(jīng)濟(jì)區(qū)”(European Economic Area),法語中是“l(fā)a zone économique européenne”。此外,法語是一種有陰陽性詞匯的語言。形容詞“économique”和“européenne”必須是陰性形式,以匹配陰性賓語“l(fā)a zone”。
注意力是一種機(jī)制,它允許文本模型在決定如何翻譯輸出句子中的單詞時(shí)“查看”原始句子中的每一個(gè)單詞。下圖是最初的注意力論文中的一個(gè)很好的可視化:

圖片來自論文,“Neural Machine Translation by joint Learning to Align and Translate(2015)”
https://arxiv.org/abs/1409.0473
這是一種熱力圖,顯示出當(dāng)模型輸出法語句子中的每個(gè)單詞時(shí),它“注意”的位置。如你所料,當(dāng)模型輸出“européenne”時(shí),它會重點(diǎn)關(guān)注輸入詞“European”和“Economic”。
模型如何知道在每個(gè)時(shí)間步中應(yīng)該“注意”哪些單詞呢? 這就是從訓(xùn)練數(shù)據(jù)中學(xué)到的東西。通過觀察成千上萬的法語和英語句子,該模型學(xué)會了什么類型的單詞是相互依賴的。學(xué)會了如何遵守詞性、復(fù)數(shù)和其他語法規(guī)則。
自2015年被發(fā)現(xiàn)以來,注意力機(jī)制一直是自然語言處理一個(gè)非常有用的工具,但在其原始形式中,它是與循環(huán)神經(jīng)網(wǎng)絡(luò)一起使用的。因此,2017年《Transformer》論文的創(chuàng)新之處在于,在一定程度上完全拋棄了RNN。這就是為什么2017年的論文被稱為《注意力就是你需要的一切》。
自注意力機(jī)制
Transformer的最后一點(diǎn)(也許是最具影響力的一點(diǎn))是對注意力的變式,即自注意力。
我們剛才談到的那種普通的注意力有助于在英語和法語句子中匹配單詞,這對翻譯很重要。但是,如果你不是試圖翻譯單詞,而是建立一個(gè)能夠理解語言潛在含義和模式的模型——這種模型可以用于完成任何數(shù)量的語言任務(wù)呢?
一般來說,讓神經(jīng)網(wǎng)絡(luò)強(qiáng)大的是,它們通常會自動建立起訓(xùn)練數(shù)據(jù)有意義的內(nèi)部表示。例如,當(dāng)你檢查視覺神經(jīng)網(wǎng)絡(luò)的不同層時(shí),你會發(fā)現(xiàn)不同神經(jīng)元負(fù)責(zé)“識別”不同的模式,比如邊緣、形狀,甚至像眼睛和嘴巴這樣的高級結(jié)構(gòu)。在文本數(shù)據(jù)上訓(xùn)練的模型可能自動學(xué)習(xí)了詞性、語法規(guī)則以及單詞是否同義。
神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)語言的內(nèi)部表征越好,它在任何語言任務(wù)中的表現(xiàn)就越好。事實(shí)證明,如果注意力機(jī)制應(yīng)用于輸入文本本身,它同樣是一種非常有效的方式。
例如,下面這兩個(gè)句子:
“服務(wù)員,能給我賬單嗎?”( “Server, can I have the check?”)
"我好像讓服務(wù)器崩潰了"(“Looks like I just crashed the server.”)
在這里,單詞“server”意味著兩種非常不同的意思,我們?nèi)祟惪梢酝ㄟ^查看周圍的單詞輕松地消除歧義。自注意力使神經(jīng)網(wǎng)絡(luò)能夠在單詞周圍的語境中理解單詞。因此,當(dāng)模型處理第一句話中的“服務(wù)員”(“Server”)時(shí),它可能是“注意”單詞“賬單”(“check),這有助于消除該單詞代表不同意思——服務(wù)員和服務(wù)器之間的歧義。
在第二個(gè)句子中,模型可能會注意單詞“崩潰”(“crash”),以確定這個(gè)“服務(wù)器”(“server”)指的是一臺機(jī)器。
自注意力幫助神經(jīng)網(wǎng)絡(luò)消除單詞歧義,做詞性標(biāo)注,命名實(shí)體識別,學(xué)習(xí)語義角色等等。
我們在這里高度概括和總結(jié)了一下Transformer。
如果你想要更深入的技術(shù)解釋,我強(qiáng)烈推薦你去看看Jay Alammar的博客文章The Illustrated Transformer。
Transformer能做什么?
最流行的基于Transformer的模型之一BERT,它是“來自Transformer的雙向編碼器表示”( “Bidirectional Encoder Representations from Transformers”)的縮寫。它是谷歌的研究人員在我2018年加入公司前后引入的,很快就進(jìn)入了幾乎所有的NLP項(xiàng)目,包括谷歌搜索。
BERT不僅指模型體系結(jié)構(gòu),還指經(jīng)過訓(xùn)練的模型本身,您可以在這里免費(fèi)下載和使用。
這里:
https://github.com/google-research/bert
谷歌的研究人員在一個(gè)龐大的文本語料庫上對它進(jìn)行了訓(xùn)練,它已經(jīng)成為一種用于自然語言處理的通用模型。它可以擴(kuò)展來解決一系列不同的任務(wù),比如:
——文本摘要
——問答
——分類
——命名實(shí)體識別
——文本相似度
——攻擊性信息/臟話檢測
——理解用戶的查詢
——等等
BERT證明,您可以在未標(biāo)記的數(shù)據(jù)上建立非常好的語言模型,比如從Wikipedia和Reddit中提取的文本,并且這些大型的“基礎(chǔ)”模型可以與特定領(lǐng)域的數(shù)據(jù)相適應(yīng),適用于許多不同的用例。
最近,OpenAI創(chuàng)建的模型GPT-3生成真實(shí)文本的能力讓人們大吃一驚。谷歌搜索去年推出的Meena是一個(gè)基于變形金剛的聊天機(jī)器人(akhem,對話代理),幾乎可以就任何話題進(jìn)行引人入勝的對話(其作者曾花了20分鐘與Meena爭論作為人類意味著什么)。
Tansformer也在自然語言處理之外掀起了一股浪潮,例如作曲、根據(jù)文本描述生成圖像以及預(yù)測蛋白質(zhì)結(jié)構(gòu)。
如何使用Transformer?
現(xiàn)在你已經(jīng)被Transformer的力量所吸引,你可能想知道如何在自己的應(yīng)用中使用它們。沒問題。
你可以從TensorFlow Hub下載常見的基于Transformer的模型,比如BERT。關(guān)于代碼教程,請查看我寫的關(guān)于構(gòu)建基于語義語言應(yīng)用程序的文章。
文章
https://daleonai.com/semantic-ml
但是如果你想要真正的跟隨潮流,并且你寫Python,我強(qiáng)烈推薦由HuggingFace公司維護(hù)的Transformer庫。該平臺允許您以一種非常開發(fā)人員友好的方式訓(xùn)練和使用當(dāng)今大多數(shù)流行的NLP模型,如BERT、Roberta、T5、GPT-2。
原文標(biāo)題:
Transformers, Explained: Understand the Model Behind GPT-3, BERT, and T5
原文鏈接:

