拓展閱讀 馬斯克開源的 grok-1 底層 Transformer 模型論文 《Attention is All You Need》 馬斯克開源的 grok-1 大模型底層 Transformer 模型到底是個啥? 馬斯克開源的 grok-1 大模型硬核源碼第 1 彈 馬斯克開源的 grok-1 大 ...
拓展閱讀
馬斯克開源的 grok-1 底層 Transformer 模型論文 《Attention is All You Need》
馬斯克開源的 grok-1 大模型底層 Transformer 模型到底是個啥?
前言
大家好,我是老馬。
網上的大部分關於 gork-1 的內容都是淺嘗輒止,本文老馬和大家一起簡單看一下馬斯克這兩天開源的 grok-1 的底層 Transformer 的提出論文。
本文翻譯自 Vaswani 等人在論文《Attention is All You Need》。
摘要
目前主導的序列轉導模型基於複雜的迴圈或捲積神經網路,包括編碼器和解碼器。
表現最佳的模型還通過註意力機制將編碼器和解碼器連接起來。
我們提出了一種新的簡單網路架構,Transformer,完全基於註意力機制,不需要迴圈和捲積。在兩個機器翻譯任務上的實驗證明,這些模型在質量上更加優越,同時更易並行化,並且訓練時間顯著縮短。
我們的模型在WMT 2014英德翻譯任務上達到了28.4 BLEU的得分,相比現有的最佳結果,包括集成模型,提高了2個BLEU以上。
在WMT 2014英法翻譯任務中,我們的模型在僅使用八個GPU進行了3.5天的訓練後,實現了新的單模型最先進BLEU得分,達到了41.8,訓練成本僅為文獻中最佳模型的一小部分。
我們展示了Transformer在其他任務上的良好泛化能力,成功地將其應用於英語句法成分解析,無論是在大規模還是有限的訓練數據上。
1 引言
迴圈神經網路,尤其是長短期記憶(LSTM)[13]和門控迴圈神經網路[7],已經被確定為序列建模和轉導問題的最先進方法,例如語言建模和機器翻譯[35, 2, 5]。
自那時以來,已經進行了大量努力,不斷推動迴圈語言模型和編碼器-解碼器架構的邊界[38, 24, 15]。
迴圈模型通常將計算沿著輸入和輸出序列的符號位置進行因式分解。將位置與計算時間步驟對齊,它們生成一個隱藏狀態序列 ht,作為先前隱藏狀態 ht−1 和位置 t 的輸入的函數。這種固有的順序性質使得在訓練示例內部無法進行並行化,這在序列長度較長時變得至關重要,因為記憶體限制限制了跨示例的批處理。最近的工作通過因數化技巧[21]和條件計算[32]實現了計算效率的顯著提高,同時在後者的情況下也提高了模型性能。然而,順序計算的基本限制仍然存在。
註意力機制已成為各種任務中引人註目的序列建模和轉導模型的一個組成部分,它允許對依賴關係進行建模,而不考慮它們在輸入或輸出序列中的距離[2, 19]。然而,在除了少數情況[27]之外,這種註意力機制通常與迴圈網路一起使用。
在這項工作中,我們提出了Transformer,這是一種模型架構,摒棄了迴圈,而完全依賴於註意力機制來繪製輸入和輸出之間的全局依賴關係。Transformer允許更多的並行化,並且在僅在八個P100 GPU上進行了12小時的訓練後,可以達到翻譯質量的新水平。
2 背景
減少順序計算的目標也構成了Extended Neural GPU[16]、ByteNet[18]和ConvS2S[9]的基礎,它們都使用捲積神經網路作為基本構建塊,在所有輸入和輸出位置上並行計算隱藏表示。在這些模型中,關聯來自兩個任意輸入或輸出位置的信號所需的操作數量隨著位置之間的距離增加而增加,對於ConvS2S是線性增長,對於ByteNet是對數增長。這使得學習遠距離位置之間的依賴關係更加困難。在Transformer中,這被減少到了一定數量的操作,儘管由於平均註意力加權位置而導致有效解析度降低,這種效果我們通過第3.2節中描述的多頭註意力來抵消。
自註意力,有時稱為內部註意力,是一種註意力機制,用於計算序列的表示以關聯單個序列的不同位置。自註意力已成功用於各種任務,包括閱讀理解、抽象摘要、文本蘊含和學習任務獨立的句子表示[4, 27, 28, 22]。
端到端記憶網路基於遞歸註意力機制,而不是序列對齊遞歸,並且已被證明在簡單語言問題回答和語言建模任務上表現良好[34]。
據我們所知,然而,Transformer是第一個完全依賴於自註意力來計算其輸入和輸出表示的轉導模型,而不使用序列對齊的RNN或捲積。
在接下來的章節中,我們將描述Transformer,提出自註意力的動機,並討論其優點,如[17, 18]和[9]等模型。
3 模型架構 Model Architectur
大多數競爭性的神經序列轉導模型都具有編碼器-解碼器結構[5, 2, 35]。
在這裡,編碼器將一系列符號表示(x1,...,xn)映射到一系列連續表示z =(z1,...,zn)。
給定z,解碼器然後生成一個符號序列(y1,...,ym),每次生成一個元素。
在每個步驟中,模型是自回歸的[10],在生成下一個元素時消耗先前生成的符號作為附加輸入。
Transformer遵循這個整體架構,使用堆疊的自註意力和逐點、全連接的層來構建編碼器和解碼器,分別顯示在圖1的左半部分和右半部分。
3.1 編碼器和解碼器堆棧 Encoder and Decoder Stack
編碼器:編碼器由N = 6個相同的層堆疊而成。每個層包含兩個子層。第一個是多頭自註意力機制,第二個是簡單的位置逐點全連接前饋網路。我們在每個子層周圍採用了一個殘差連接[11],然後進行層歸一化[1]。也就是說,每個子層的輸出是LayerNorm(x + Sublayer(x)),其中Sublayer(x)是子層本身實現的功能。為了便於這些殘差連接,模型中的所有子層以及嵌入層都產生維度為dmodel = 512的輸出。
解碼器:解碼器也由N = 6個相同的層堆疊而成。除了每個編碼器層中的兩個子層外,解碼器還插入了第三個子層,該子層對編碼器堆棧的輸出執行多頭註意力。與編碼器類似,我們在每個子層周圍採用了殘差連接,然後進行層歸一化。我們還修改瞭解碼器堆棧中的自註意力子層,以防止位置關註後續位置。這種掩碼,加上輸出嵌入向後偏移一個位置,確保位置i的預測只能依賴於位置小於i的已知輸出。
3.2 註意力 Attention
註意力函數可以描述為將一個查詢和一組鍵值對映射到一個輸出,其中查詢、鍵、值和輸出都是向量。
輸出計算為值的加權和,其中分配給每個值的權重由查詢與相應鍵的相容性函數計算。
3.2.1 縮放點積註意力 Scaled Dot-Product Attention
我們將我們特定的註意力稱為“縮放點積註意力”(圖2)。
- F2
輸入由維度為dk的查詢和鍵,以及維度為dv的值組成。我們計算查詢與所有鍵的點積,將每個點積除以√dk,並應用softmax函數以獲得值的權重。
在實踐中,我們同時在一組查詢上計算註意力函數,將其打包成矩陣Q。
鍵和值也打包成矩陣K和V。
我們計算輸出矩陣如下:
$$ \Large{Attention(Q, K, V) = softmax_k(\frac{QK^T}{\sqrt{d_k} }) V} $$
Attention(Q, K, V ) = softmax(QK^T*sqrt(d_k))V
點積註意力被縮小了深度的平方根倍。這樣做是因為對於較大的深度值,點積的大小會增大,從而推動 softmax 函數往僅有很小的梯度的方向靠攏,導致了一種很硬的(hard)softmax。
例如,假設 Q 和 K 的均值為0,方差為1。它們的矩陣乘積將有均值為0,方差為 dk。因此,dk 的平方根被用於縮放(而非其他數值),因為,Q 和 K 的矩陣乘積的均值本應該為 0,方差本應該為1,這樣會獲得一個更平緩的 softmax。
遮擋(mask)與 -1e9(接近於負無窮)相乘。這樣做是因為遮擋與縮放的 Q 和 K 的矩陣乘積相加,併在 softmax 之前立即應用。目標是將這些單元歸零,因為 softmax 的較大負數輸入在輸出中接近於零。
3.2.2 多頭註意力(Multi-head attention)
多頭註意力由四部分組成:
-
線性層並分拆成多頭。
-
按比縮放的點積註意力。
-
多頭及聯。
-
最後一層線性層。
每個多頭註意力塊有三個輸入:Q(請求)、K(主鍵)、V(數值)。這些輸入經過線性(Dense)層,並分拆成多頭。
將上面定義的 scaled_dot_product_attention 函數應用於每個頭(進行了廣播(broadcasted)以提高效率)。註意力這步必須使用一個恰當的 mask。然後將每個頭的註意力輸出連接起來(用tf.transpose 和 tf.reshape),並放入最後的 Dense 層。
Q、K、和 V 被拆分到了多個頭,而非單個的註意力頭,因為多頭允許模型共同註意來自不同表示空間的不同位置的信息。在分拆後,每個頭部的維度減少,因此總的計算成本與有著全部維度的單個註意力頭相同。
原始論文內容過於抽象:
我們發現,與使用維度為dmodel的鍵、值和查詢執行單個註意力函數相比,將查詢、鍵和值進行h次線性投影,並使用不同的學習線性投影將它們投影到維度為dk、dk和dv的空間中,會更有益。然後,在這些投影版本的查詢、鍵和值上並行執行註意力函數,得到dv維的輸出值。然後將這些輸出值串聯起來,再次進行投影,得到最終的值,如圖2所示。
多頭註意力允許模型同時關註不同位置的不同表示子空間的信息。而使用單個註意力頭時,平均會阻礙這種關註。
MultiHead(Q, K, V) = Concat(head1, ..., headh)WO
其中headi = Attention(QWQi, KWKi, VWVi)
投影是參數矩陣WQi ∈ Rdmodel×dk, WKi ∈ Rdmodel×dk, WVi ∈ Rdmodel×dv
和WO ∈ Rhdv×dmodel。
在這項工作中,我們採用了h = 8個並行註意力層或頭。對於每個註意力頭,我們使用dk = dv = dmodel/h = 64。由於每個頭的維度降低,總計算成本與具有完整維度的單頭註意力相似。
3.2.3 註意力在我們模型中的應用
Transformer在三個不同的方面使用多頭註意力:
• 在“編碼器-解碼器註意力”層中,查詢來自前一個解碼器層,而記憶鍵和值來自編碼器的輸出。這允許解碼器中的每個位置都能關註輸入序列中的所有位置。這模仿了序列到序列模型中典型的編碼器-解碼器註意力機制,如[38, 2, 9]。
• 編碼器包含自註意力層。在自註意力層中,所有的鍵、值和查詢都來自同一個地方,即編碼器中前一層的輸出。編碼器中的每個位置都可以關註編碼器前一層的所有位置。
• 同樣,解碼器中的自註意力層允許解碼器中的每個位置都可以關註到包括該位置在內的解碼器中的所有位置。我們需要防止解碼器中的左向信息流,以保持自回歸屬性。我們通過在縮放點積註意力中屏蔽(設置為−∞)softmax輸入中所有對應於非法連接的值來實現這一點。請參見圖2。
3.3 位置逐點前饋網路 Position-wise Feed-Forward Networks
除了註意力子層外,我們編碼器和解碼器中的每個層還包含一個全連接的前饋網路,該網路將每個位置獨立且相同地應用於每個位置。這由兩個線性變換和一個ReLU激活組成。
FFN(x) = max(0, xW1 + b1)W2 + b2
雖然線性變換在不同位置上是相同的,但它們在不同層之間使用不同的參數。另一種描述方法是兩個捲積核大小為1。
輸入和輸出的維度是dmodel = 512,內部層的維度是dff = 2048。
3.4 嵌入和Softmax(Embeddings and Softmax)
與其他序列轉導模型類似,我們使用學習到的嵌入將輸入標記和輸出標記轉換為維度為dmodel的向量。
我們還使用通常的學習線性變換和softmax函數將解碼器輸出轉換為預測的下一個標記的概率。
在我們的模型中,我們在兩個嵌入層和預softmax線性變換之間共用相同的權重矩陣,類似於[30]。在嵌入層中,我們將這些權重乘以√dmodel。
表1:不同層類型的最大路徑長度、每層複雜度和最小順序操作數。n是序列長度,d是表示維度,k是捲積的捲積核大小,r是受限自註意力中的鄰域大小。
Layer Type | Complexity per Layer | Sequential Operations | Maximum Path Length |
---|---|---|---|
Self-Attention | O(n^2 * d) | O(1) | O(1) |
Recurrent | O(n * d^2) | O(n) | O(n) |
Convolutional | O(k * n * d^2) | O(1) | O(log_k(n)) |
Self-Attention (restricted) | O(r * n * d) | O(1) | O(n/r) |
3.5 位置編碼 Positional Encoding
由於我們的模型不包含迴圈和捲積,為了讓模型利用序列的順序,我們必須註入有關序列中標記的相對或絕對位置的一些信息。
為此,我們在編碼器和解碼器堆棧的底部添加了“位置編碼”到輸入嵌入中。
位置編碼與嵌入具有相同的維度dmodel,因此兩者可以相加。有許多選擇的位置編碼,可以是學習的或固定的。
在這項工作中,我們使用不同頻率的正弦和餘弦函數:
PE(pos,2i) = sin(pos/10000^(2i/dmodel))
PE(pos,2i+1) = cos(pos/10000^(2i/dmodel))
其中pos是位置,i是維度。也就是說,位置編碼的每個維度對應於一個正弦波。
波長形成從2π到10000·2π的幾何級數。
我們選擇這個函數,因為我們假設它將允許模型輕鬆地通過相對位置進行註意力,因為對於任何固定的偏移k,PE(pos+k)可以表示為PE(pos)的線性函數。
我們還嘗試使用學習的位置嵌入,發現兩個版本產生幾乎相同的結果(見表3行(E))。我們選擇了正弦版本,因為它可能允許模型推廣到訓練過程中遇到的長度更長的序列。
4 為什麼選擇自註意力
在本節中,我們將自註意力層的各個方面與常用於將一個變長序列的符號表示(x1,...,xn)映射到另一個相同長度序列(z1,...,zn)的迴圈和捲積層進行比較,其中xi,zi ∈ Rd,例如典型序列轉導編碼器或解碼器中的隱藏層。在使用自註意力的動機中,我們考慮了三個要求。
一是每層的總計算複雜度。另一個是可以並行計算的數量,即所需的最小順序操作數。
第三個是網路中長程依賴之間的路徑長度。學習長程依賴是許多序列轉導任務的關鍵挑戰。影響學習這種依賴性能力的一個關鍵因素是前向和後向信號在網路中必須穿過的路徑長度。輸入序列和輸出序列中任意組合位置之間的這些路徑越短,學習長程依賴就越容易。因此,我們還比較了由不同層類型組成的網路中任意兩個輸入和輸出位置之間的最大路徑長度。
如表1所示,自註意力層連接所有位置,需要執行的操作數量是常數,而迴圈層則需要O(n)個順序操作。就計算複雜度而言,當序列長度n小於表示維度d時,自註意力層比迴圈層更快,而這在機器翻譯的最新模型中常常是句子表示的情況,例如word-piece和byte-pair表示。為了改善涉及非常長序列的任務的計算性能,自註意力可以被限製為僅考慮圍繞各自輸出位置的輸入序列中大小為r的鄰域。這將最大路徑長度增加到O(n/r)。我們計劃在將來的工作中進一步研究這種方法。
帶有寬度小於n的捲積核k的單個捲積層不會連接所有輸入和輸出位置的所有對。要做到這一點,對於連續捲積核,需要O(n/k)個捲積層的堆棧,或者對於擴張捲積,需要O(logk(n)),增加了網路中任意兩個位置之間最長路徑的長度。捲積層通常比迴圈層更昂貴,比例因數為k。然而,可分離捲積顯著降低了複雜性,變為O(k · n · d + n · d^2)。然而,即使k = n,可分離捲積的複雜性也等於我們模型中自註意力層和逐點前饋層的組合。
作為副作用,自註意力可以產生更可解釋的模型。我們檢查了我們模型的註意力分佈,併在附錄中呈現和討論了示例。
不僅個別的註意力頭清楚地學習執行不同的任務,許多看起來還表現出與句子的句法和語義結構相關的行為。
5 訓練
本節描述了我們模型的訓練方案。
5.1 訓練數據和批處理
我們在標準的WMT 2014英德數據集上進行了訓練,該數據集包含約450萬個句對。句子使用位元組對編碼進行編碼[3],具有約37000個共用的源目標辭彙標記。對於英法語,我們使用了規模更大的WMT 2014英法數據集,包含3600萬個句子,並將標記分割成一個32000個單詞片段辭彙[38]。句對被近似序列長度批量處理。每個訓練批次包含一組句對,其中大約包含25000個源標記和25000個目標標記。
5.2 硬體和訓練計劃
我們在一臺配備8個NVIDIA P100 GPU的機器上進行了模型訓練。對於使用整篇論文中描述的超參數的基礎模型,每個訓練步驟大約需要0.4秒。我們對基礎模型進行了總共10萬步或12小時的訓練。對於我們的大型模型(表3中底部行所述),步驟時間為1.0秒。大型模型進行了30萬步(3.5天)的訓練。
5.3 優化器
我們使用Adam優化器[20],其中β1 = 0.9,β2 = 0.98和ϵ = 10^-9。我們根據以下公式調整學習率,:
lrate = d^(-0.5)_model · min(step^(-0.5), step · warmup_steps^(-1.5)) (3)
這意味著前warmup_steps個訓練步驟中,學習率線性增加,之後按步驟數的倒數平方根成比例地減小。我們使用warmup_steps = 4000。
5.4 正則化
在訓練過程中,我們採用了三種類型的正則化:
- 表2:相比先前最先進的模型,在訓練成本的一小部分上,Transformer 在英譯德和英譯法的 newstest2014 測試中取得了更好的 BLEU 分數。
| Model | BLEU | Training Cost (FLOPs) |
|--------------------------------|--------|--------------------------|
| ByteNet [18] | 23.75 | |
| Deep-Att + PosUnk [39] | 39.2 | 1.0 × 10^20 |
| GNMT + RL [38] | 24.6 | 39.92 |
| | | 2.3 × 10^19 |
| ConvS2S [9] | 25.16 | 40.46 |
| | | 9.6 × 10^18 |
| MoE [32] | 26.03 | 40.56 |
| | | 2.0 × 10^19 |
| Deep-Att + PosUnk Ensemble [39]| 40.4 | 8.0 × 10^20 |
| GNMT + RL Ensemble [38] | 26.30 | 41.16 |
| | | 1.8 × 10^20 |
| ConvS2S Ensemble [9] | 26.36 | 41.29 |
| | | 7.7 × 10^19 |
| Transformer (base model) | 27.3 | 38.1 |
| Transformer (big) | 28.4 | 41.8 |
| | | 2.3 × 10^19 |
殘差丟棄(Residual Dropout):我們對每個子層的輸出應用了丟棄(dropout)[33],在將其添加到子層輸入併進行歸一化之前。此外,我們還對編碼器和解碼器堆棧中的嵌入和位置編碼的總和應用了丟棄。對於基礎模型,我們使用了 Pdrop = 0.1 的速率。
標簽平滑(Label Smoothing):在訓練過程中,我們採用了值為 ϵls = 0.1 的標簽平滑[36]。這會降低困惑度,因為模型學會更加不確定,但會提高準確性和 BLEU 分數。
6 結果
6.1 機器翻譯(Machine Translation)
在 WMT 2014 年英譯德任務中,大型 Transformer 模型(表2 中的 Transformer(big))的表現優於先前報告的最佳模型(包括集成模型),BLEU 值超過2.0,建立了一個新的最先進 BLEU 分數為 28.4。該模型的配置列在表3 的底部行中。在 8 個 P100 GPU 上訓練耗時 3.5 天。即使是我們的基礎模型,也超過了所有先前發佈的模型和集成模型,在訓練成本的一小部分上。
在 WMT 2014 年英譯法任務中,我們的大型模型實現了 41.0 的 BLEU 分數,優於先前發佈的所有單一模型,在先前最先進模型的訓練成本不到1/4。用於英譯法的 Transformer(big)模型使用了丟棄率 Pdrop = 0.1,而不是0.3。
對於基礎模型,我們使用了平均最後 5 個檢查點獲得的單一模型,這些檢查點是以 10 分鐘間隔寫入的。對於大型模型,我們平均了最後 20 個檢查點。我們使用了束搜索,束大小為 4,並且長度懲罰 α = 0.6。這些超參數是在開發集上進行實驗後選擇的。在推理期間,我們將最大輸出長度設置為輸入長度 + 50,但儘可能提前終止。
表2 總結了我們的結果,並將我們的翻譯質量和訓練成本與文獻中的其他模型架構進行了比較。我們估計訓練模型所使用的浮點運算數量,通過將訓練時間、使用的 GPU 數量和每個 GPU 的單精度浮點容量的可持續估算相乘。
6.2 模型變體(Model Variations)
為了評估 Transformer 不同組件的重要性,我們以不同方式改變了我們的基礎模型,並測量了在英譯德翻譯上性能的變化。
我們使用了 2.8、3.7、6.0 和 9.5 TFLOPS 的值分別用於 K80、K40、M40 和 P100。
表3:Transformer 架構的變體。未列出的值與基礎模型相同。所有指標均在英譯德翻譯開發集 newstest2013 上,所列困惑度是按照我們的位元組對編碼計算的每個詞片段的,並且不應與每個單詞的困惑度進行比較。
| 實驗 | N | dmodel | dff | h | dk | dv | Pdrop | ϵls | 訓練步數 | 訓練PPL | BLEU | 參數數量 |
|-----|---|--------|-----|---|----|----|-------|------|----------|---------|------|----------|
| (A) | 6 | 512 | 2048| 8 | 64 | 64 | 0.1 | 0.1 | 100K | 4.92 | 25.8 | 65 × 10^6 |
| | 1 | 512 | 512 | | | | | | | 5.29 | 24.9 | |
| | 4 | 128 | 128 | | | | | | | 5.00 | 25.5 | |
| | 16| 32 | 32 | | | | | | | 4.91 | 25.8 | |
| | 32| 16 | 16 | | | | | | | 5.01 | 25.4 | |
| (B) | 16| | | | | | | | | 5.16 | 25.1 | 58 |
| | 32| | | | | | | | | 5.01 | 25.4 | 60 |
| (C) | 2 | | | | | | | | | 6.11 | 23.7 | 36 |
| | 4 | | | | | | | | | 5.19 | 25.3 | 50 |
| | 8 | | | | | | | | | 4.88 | 25.5 | 80 |
| | 256| 32 | 32 | | | | | | | 5.75 | 24.5 | 28 |
| | 1024| 128 | 128 | | | | | | | 4.66 | 26.0 | 168 |
| | 1024| | | | | | | | | 5.12 | 25.4 | 53 |
| | 4096| | | | | | | | | 4.75 | 26.2 | 90 |
| (D) | 0.0 | | | | | | | | | 5.77 | 24.6 | |
| | 0.2 | | | | | | | | | 4.95 | 25.5 | |
| | 0.0 | | | | | | | | | 4.67 | 25.3 | |
| | 0.2 | | | | | | | | | 5.47 | 25.7 | |
| (E) | | | | | | | | | | 4.92 | 25.7 | |
| | positional embedding instead of sinusoids | | | | | | | | | | |
| big | 6 | 1024 | 4096| 16| | | 0.3 | | 300K | 4.33 | 26.4 | 213 × 10^6|
在開發集 newstest2013 上使用了束搜索,如前文所述,但沒有進行檢查點平均化。我們將這些結果呈現在表3中。
在表3的行(A)中,我們改變了註意力頭的數量以及註意力鍵和值的維度,保持了計算量恆定,如第3.2.2節所述。雖然單頭註意力比最佳設置差0.9 BLEU,但質量隨著頭數過多而下降。
在表3的行(B)中,我們觀察到減少註意力鍵大小 dk 會降低模型質量。這表明確定相容性並不容易,而且比點積更複雜的相容性函數可能會更有益。
我們在行(C)和(D)中進一步觀察到,如預期的那樣,更大的模型效果更好,並且丟棄(dropout)對於避免過擬合非常有幫助。
在行(E)中,我們用學習的位置嵌入替換了我們的正弦位置編碼[9],並觀察到與基礎模型幾乎相同的結果。
6.3 英語成分句法分析(English Constituency Parsing)
為了評估 Transformer 是否能推廣到其他任務,我們進行了英語成分句法分析的實驗。這項任務面臨著特定的挑戰:輸出受到強烈的結構約束,並且明顯比輸入更長。此外,RNN 序列到序列模型在小數據情況下無法達到最先進的結果。
我們在賓夕法尼亞樹庫(Penn Treebank)的《華爾街日報》(Wall Street Journal,簡稱 WSJ)部分上訓練了一個4層的 Transformer,其 dmodel = 1024,大約有 40K 訓練句子。我們還在半監督設置下訓練了它,使用了更大的高置信度和 BerkleyParser 語料庫,其中約有 1700 萬句子。對於僅使用 WSJ 的設置,我們使用了 16K 令牌的辭彙表,對於半監督設置,我們使用了 32K 令牌的辭彙表。
我們只進行了少量的實驗來選擇丟棄率,包括註意力和殘差(第5.4節),學習率和束大小,在第22節的開發集上,所有其他參數與英譯德基礎翻譯模型保持不變。
在推理期間,我們
表4:Transformer 在英語成分句法分析中推廣效果良好(結果在 WSJ 的第23節)
模型 | 訓練數據集 | WSJ 23 F1 |
---|---|---|
Vinyals & Kaiser el al. (2014) [37] | 僅 WSJ | 88.3 |
Petrov et al. (2006) [29] | 僅 WSJ | 90.4 |
Zhu et al. (2013) [40] | 僅 WSJ | 90.4 |
Dyer et al. (2016) [8] | 僅 WSJ | 91.7 |
Transformer (4 layers) | 僅 WSJ | 91.3 |
Zhu et al. (2013) [40] | 半監督 | 91.3 |
Huang & Harper (2009) [14] | 半監督 | 91.3 |
McClosky et al. (2006) [26] | 半監督 | 92.1 |
Vinyals & Kaiser el al. (2014) [37] | 半監督 | 92.1 |
Transformer (4 layers) | 半監督 | 92.7 |
Luong et al. (2015) [23] | 多任務 | 93.0 |
Dyer et al. (2016) [8] | 生成式 | 93.3 |
我們增加了最大輸出長度到輸入長度 + 300。對於僅使用 WSJ 和半監督設置,我們都使用了束大小為 21 和 α = 0.3。
我們在表4中的結果顯示,儘管缺乏任務特定的調整,我們的模型表現出奇好的性能,比以前報告的所有模型都要好,除了遞歸神經網路語法 [8]。
與 RNN 序列到序列模型相比 [37],即使僅在包含 40K 句子的 WSJ 訓練集上訓練,Transformer 也優於 BerkeleyParser [29]。
7 結論
在這項工作中,我們介紹了 Transformer,這是第一個完全基於註意力的序列轉導模型,用多頭自註意力取代了編碼器-解碼器架構中最常用的遞歸層。
對於翻譯任務,與基於遞歸或捲積層的架構相比,Transformer 的訓練速度可以顯著更快。在 WMT 2014 年英譯德和 WMT 2014 年英譯法翻譯任務中,我們取得了新的最先進。在前一項任務中,我們的最佳模型甚至優於以前報告的所有集成模型。
我們對基於註意力的模型的未來感到興奮,並計劃將它們應用於其他任務。我們計劃將 Transformer 擴展到涉及除文本之外的輸入和輸出模態的問題,並研究本地、受限制的註意力機制,以有效處理大量的輸入和輸出,如圖像、音頻和視頻。使生成 less sequential 是我們的另一個研究目標。
我們用於訓練和評估我們模型的代碼可在 https://github.com/tensorflow/tensor2tensor 找到。
致謝 我們感謝 Nal Kalchbrenner 和 Stephan Gouws 提供的有益評論、修正和靈感。
引用省略。
小結
感覺 AI 底層,有時候數學是基石。
很多模型都是不斷優化的,NLP 也是一個不斷發展的領域,比較強大的是,這個模型從目前 GPT 的表現來看,遠遠不止只是語言領域這麼簡單。
山長水遠,行則將至。
我是老馬,期待與你的下次重逢。