Seq2Seq、Attention、以及Transformer介紹

Seq2Seq(Sequence To Sequence)

Seq2seq 由Google首次引入機(jī)器翻譯。在此之前,翻譯工作非常幼稚。您以前鍵入的每個(gè)單詞都被轉(zhuǎn)換為其目標(biāo)語(yǔ)言,而不考慮其語(yǔ)法和句子結(jié)構(gòu)。Seq2seq通過深度學(xué)習(xí)徹底改變了翻譯過程。它不僅在翻譯時(shí)考慮了當(dāng)前單詞/輸入,還考慮了其??鄰域。

如今,它可用于各種不同的應(yīng)用程序,例如圖像字幕,會(huì)話模型,文本摘要等。

Seq2seq工作:

  • Seq2Seq將一系列單詞(句子或句子)作為輸入,并生成一個(gè)輸出單詞序列。它通過使用遞歸神經(jīng)網(wǎng)絡(luò)(RNN)來實(shí)現(xiàn)。盡管很少使用RNN的原始版本,但使用了更高級(jí)的版本,即LSTM或GRU。這是因?yàn)镽NN存在梯度消失的問題。Google提出的版本使用LSTM。它通過在每個(gè)時(shí)間點(diǎn)進(jìn)行兩次輸入來發(fā)展單詞的上下文。一個(gè)來自用戶,另一個(gè)來自其先前的輸出,因此名稱為recurrent(輸出作為輸入)。
  • Seq2Seq是用于序列預(yù)測(cè)任務(wù)(例如語(yǔ)言建模和機(jī)器翻譯)的模型。這個(gè)想法是使用一個(gè)LSTM編碼器一次一次讀取輸入序列,以獲得較大的固定維矢量表示(上下文矢量),然后使用另一個(gè)LSTM解碼器提取輸出。該向量的序列。第二個(gè)LSTM本質(zhì)上是遞歸神經(jīng)網(wǎng)絡(luò)語(yǔ)言模型,除了它以輸入序列為條件。

它主要有兩個(gè)部分,即編碼器和解碼器,因此有時(shí)被稱為編碼器-解碼器網(wǎng)絡(luò)

編碼器: 它使用深層神經(jīng)網(wǎng)絡(luò)層并將輸入的單詞轉(zhuǎn)換為相應(yīng)的隱藏向量。每個(gè)向量代表當(dāng)前單詞和該單詞的上下文。

解碼器: 類似于編碼器。它以編碼器生成的隱藏矢量,其自身的隱藏狀態(tài)和當(dāng)前單詞作為輸入,以生成下一個(gè)隱藏矢量并最終預(yù)測(cè)下一個(gè)單詞。

編輯器-解碼器 架構(gòu)

除了這兩個(gè)之外,還有其他優(yōu)化引導(dǎo)seq2seq的組件:

Attention:解碼器的輸入是單個(gè)向量,必須存儲(chǔ)有關(guān)上下文的所有信息。這對(duì)于大序列來說是一個(gè)問題。因此,應(yīng)用了attention機(jī)制,其允許解碼器選擇性地查看輸入序列。
Beam Search:解碼器選擇最高概率詞作為輸出。但是,由于貪婪算法的基本問題,這并不總是能產(chǎn)生最佳結(jié)果。因此,應(yīng)用Beam Search,建議在每個(gè)步驟可能進(jìn)行平移。這樣就形成了具有最高k個(gè)結(jié)果的樹。
Buckting: seq2seq模型中的可變長(zhǎng)度序列是可能的,因?yàn)閷?duì)輸入和輸出都進(jìn)行了0填充。但是,如果我們?cè)O(shè)置的最大長(zhǎng)度為100,而句子的長(zhǎng)度僅為3個(gè)字,則會(huì)浪費(fèi)大量空間。因此,我們使用Bucking的概念。我們制作不同大小的存儲(chǔ)桶,例如(4,8)(8,15),依此類推,其中4是我們定義的最大輸入長(zhǎng)度,而8是定義的最大輸出長(zhǎng)度。

Attention

Self-attention機(jī)制:

Self-Attention

Attention機(jī)制允許輸出將注意力集中在輸入上,同時(shí)產(chǎn)生輸出,而Self-attention模型則允許輸入彼此交互(即,計(jì)算一個(gè)輸入對(duì)所有其他輸入的關(guān)注)。

  • 第一步是將每個(gè)編碼器輸入向量與我們?cè)谟?xùn)練過程中訓(xùn)練的三個(gè)權(quán)重矩陣\scriptstyle (W(Q),W(K),W(V))相乘。這個(gè)矩陣乘法將為我們每個(gè)輸入向量提供三個(gè)向量:關(guān)鍵(key)向量,查詢(query)向量值(value)向量
  • 第二步是將當(dāng)前輸入的查詢向量與其他輸入的關(guān)鍵向量相乘。
  • 在第三步中,我們將分?jǐn)?shù)除以關(guān)鍵向量\scriptstyle (d_k)的尺寸的平方根。其背后的原因是,如果點(diǎn)積變大,那么在將來應(yīng)用softmax函數(shù)后,這會(huì)使一些Self-attention得分變得很小。
  • 在第四步中,我們將對(duì)查詢?cè)~(此處為第一個(gè)詞)計(jì)算出的所有Self-attention得分應(yīng)用softmax函數(shù)。
  • 在第五步中,將值向量乘以上一步中計(jì)算出的向量。
  • 在最后一步中,我們總結(jié)了在上一步中獲得的加權(quán)值向量,這將為給定單詞提供Self-attention輸出。

以上過程適用于所有輸入序列。數(shù)學(xué)上,輸入矩陣\scriptstyle (Q、K、V)的自注意矩陣的計(jì)算公式為:
\text { Attention }(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V

Multi-headed-attention:

Multi-headed attention

以下是計(jì)算Multi-headed-attention機(jī)制的分步過程:

  • 接受輸入句子的每個(gè)單詞,并從中生成嵌入詞。
  • 在這種機(jī)制中,創(chuàng)建了h個(gè)不同的attention heads,每個(gè)頭具有不同的權(quán)重矩陣\scriptstyle (W(Q),W(K),W(V))。
  • 在此步驟中,將輸入矩陣與每個(gè)權(quán)重矩陣\scriptstyle (W^Q,W^K,W^V)相乘,以生成每個(gè)attention head的鍵(key),值(value)和查詢(query)矩陣。
  • 現(xiàn)在,我們將attention機(jī)制應(yīng)用于這些key,value和query矩陣,從而為我們提供了來自每個(gè)attention head的輸出矩陣。
  • 在這一步中,我們將從權(quán)重為\scriptstyle W_O的每個(gè)attention head和點(diǎn)積獲得的輸出矩陣連接起來,以生成multi-headed attention層的輸出。

數(shù)學(xué)上的Multi-headed-attention可以表示為:
\begin{array}{c} \text { MultiHead }(Q, K, V)=\operatorname{concat}\left(\text { head }_{1} \text { head }_{2} \ldots \text { head }_{n}\right) W_{O} \\ \text { where, head }_{i}=\text { Attention }\left(Q W_{i}^{Q}, K W_{i}^{K}, V W_{i}^{V}\right) \end{array}

Attention in Transformer architecture

–Transformer 架構(gòu)使用attention模型在三個(gè)步驟中使用multi-headed attention:

  • 第一個(gè)是編碼器-解碼器 attention層,在這種類型的層中,查詢來自上一個(gè)解碼器層,而鍵和值來自編碼器輸出。這允許解碼器中的每個(gè)位置都注意輸入序列的所有位置。

  • 第二種類型是編碼器中包含的self-attention層,該層從先前的編碼器層的輸出中接收鍵,值和查詢輸入。編碼器中的每個(gè)位置都可以從上一個(gè)編碼器層中的每個(gè)位置獲取attention得分。


    Self-attention in Encoder
  • 第三種是解碼器中的self-attention ,這類似于編碼器中的所有內(nèi)容,所有查詢,鍵和值都來自上一層的self-attention。self-attention解碼器允許每個(gè)位置參加直到并包括該位置的每個(gè)位置。將來的值用(-Inf)掩蓋。這就是所謂的“self-attention”。


    Self-attention in Decoder

復(fù)雜性

在NLP任務(wù)中使用self-attention層的優(yōu)勢(shì)在于,與其他操作相比,執(zhí)行該過程的計(jì)算成本較低。下表是表示不同操作的復(fù)雜性的表:

FLOPs
Self-Attention O({length}^2 \cdot dim)
RNN(LSTM) O(length \cdot {dim}^2)
Convolution O(length \cdot {dim}^2 \cdot kernel_{width})

Transformer

transformer的基本組成部分是self-attention。首先,我們需要克服順序處理,重復(fù)性和LSTM!只需更改輸入表示形式即可!

集合和標(biāo)記化

transformer 革命始于一個(gè)簡(jiǎn)單的問題:為什么不輸入整個(gè)輸入序列?隱藏狀態(tài)之間沒有依賴性!

例如,句子“hello,I love you”:


tokenization

這個(gè)處理步驟通常稱為標(biāo)記化,這是在我們將輸入輸入模型之前的三個(gè)步驟中的第一步。
因此,我們現(xiàn)在有了一組元素,而不是元素序列。
集合是不同的元素,其中集合中元素的排列并集合不是無所謂。

換句話說,順序無關(guān)緊要。我們將輸入集表示為\scriptstyle \mathbf{X}=\mathbf{x}_{1}, \mathbf{x}_{2}, \mathbf{x}_{3} \ldots, \mathbf{x}_{N}, 其中\scriptstyle \mathbf{x} \in R^{N \times d_{i n}} 。序列的元素被稱為標(biāo)記

標(biāo)記化后,我們將詞投影到一個(gè)分布的幾何空間中,或簡(jiǎn)單地構(gòu)建詞嵌入

詞嵌入

通常,嵌入是連續(xù)值向量的分布低維空間中符號(hào)(詞,字符,句子)的表示。

詞不是離散符號(hào)。它們彼此之間密切相關(guān)。這就是為什么當(dāng)我們?cè)谶B續(xù)的歐幾里德空間中投影它們時(shí),我們可以找到它們之間的關(guān)聯(lián)。

然后,根據(jù)任務(wù),我們可以將詞嵌入推得更遠(yuǎn)或保持在一起。

理想情況下,嵌入是通過將語(yǔ)義相似的輸入并排放置在嵌入空間中來捕獲輸入的語(yǔ)義。

在自然語(yǔ)言中,我們可以找到相似的詞義甚至相似的句法結(jié)構(gòu)(即,對(duì)象聚在一起)。無論如何,當(dāng)您將它們投影到2D或3D空間中時(shí),都可以直觀地識(shí)別出某些群集。如下圖3D效果圖


位置編碼

將序列轉(zhuǎn)換為集合(標(biāo)記化)時(shí),會(huì)失去順序的概念。您是否可以從以下順序中找到單詞(標(biāo)記)的順序:“hello,I love you”?類似簡(jiǎn)短點(diǎn)可以!但是30個(gè)無序單詞呢?

機(jī)器學(xué)習(xí)與規(guī)模有關(guān)。神經(jīng)網(wǎng)絡(luò)當(dāng)然不能理解集合中的任何順序。

由于transformer將序列作為一組處理,因此從理論上講它們是置換不變的。

讓我們通過根據(jù)位置稍微更改嵌入來幫助他們有秩序感。位置編碼是一組小的常量,這些常量會(huì)在第一個(gè)self-attention層之前添加到詞嵌入向量中。

因此,如果同一單詞出現(xiàn)在不同的位置,則實(shí)際表示將略有不同,具體取決于它在輸入句子中出現(xiàn)的位置

input-processing-tokenization-embedding

在變壓器論文中,作者提出了用于位置編碼的正弦函數(shù)。正弦函數(shù)告訴模型要注意特定的波長(zhǎng)\scriptstyle \lambda,給定信號(hào) \scriptstyle y(x)=sin(ks)波長(zhǎng)將是 \scriptstyle k=\frac{2 \pi}{\lambda}。在我們的情況下\scriptstyle \lambda 將取決于句子中的位置。 \scriptstyle i用于區(qū)分奇數(shù)和偶數(shù)位置。
數(shù)學(xué)上:
\begin{array}{c} P E_{(p o s, 2 i)}=\sin \left(\frac{\text { pos }}{10000^{2 i / 512}}\right) \\ P E_{(p o s, 2 * i+1)}=\cos \left(\frac{\text { pos }}{10000^{2 i / 512}}\right) \end{array}
作為記錄,\scriptstyle 512=d_{model},這是嵌入向量的維數(shù)。
A 2D Vizualization of a positional encoding

高維空間中的向量相似度

在幾何中,內(nèi)部矢量積被解釋為矢量投影。定義矢量相似度的一種方法是通過計(jì)算歸一化內(nèi)積。在低維空間中,如下面的2D示例,這將對(duì)應(yīng)于余弦值。

vector-similarity

數(shù)學(xué)公式:
\operatorname{sim}(\mathbf{a}, \mathbf)=\cos (\mathbf{a}, \mathbf)=\frac{\mathbf{a} \mathbf}{|\mathbf{a}||\mathbf|}=\frac{1}{s} * \mathbf{a} \mathbf

我們可以通過計(jì)算縮放的點(diǎn)積(即角度的余弦)來關(guān)聯(lián)表示任何事物(即動(dòng)物)的向量之間的相似性。

在transformer中,這是最基本的操作,由我們前面提到的self-attention層處理。接下來我們進(jìn)一步對(duì)self-attention做補(bǔ)充學(xué)習(xí)。

self-attention

自我注意,有時(shí)也稱為內(nèi)部注意,是一種與單個(gè)序列的不同位置相關(guān)聯(lián)的注意力機(jī)制,目的是計(jì)算序列的表示形式。

self-attention使我們能夠找到表示句子的句法和上下文結(jié)構(gòu)的輸入的不同單詞之間的相關(guān)性。

讓我們以輸入序列“hello,I love you”為例。經(jīng)過訓(xùn)練的self-attention層會(huì)將“l(fā)ove”一詞與“I”和“you”一詞聯(lián)系起來,其權(quán)重要高于“hello”一詞。從語(yǔ)言學(xué)的角度來看,我們知道這些單詞共享主語(yǔ)-動(dòng)詞-賓語(yǔ)的關(guān)系,這是一種理解self-attention的直觀方法。

實(shí)際上,Transformer使用3種不同的表示形式:嵌入矩陣的query,key和value。這可以很容易地通過乘以我們的輸入來完成\scriptstyle \mathbf{X} \in R^{N \times d_{k}} 3種不同的重量矩陣 , \scriptstyle \mathbf{W}_{Q}, \quad \mathbf{W}_{K}\scriptstyle \mathbf{W}_{V} \in R^{d_{k} \times d_{\text {model }}}。本質(zhì)上,它只是初始詞嵌入中的矩陣乘法。

key-query-value

有了query,vakue和key矩陣,我們現(xiàn)在可以將self-attention層應(yīng)用為:
\operatorname{Attention}(\mathbf{Q}, \mathbf{K}, \mathbf{V})=\operatorname{softmax}\left(\frac{\mathbf{Q K}^{T}}{\sqrt{d_{k}}}\right) \mathbf{V}

\scriptstyle \sqrt{d_k}只是作為比例因子,以確保矢量不會(huì)爆炸。

我們已經(jīng)區(qū)分了按鍵\scriptstyle K從值\scriptstyle V作為不同的表示形式。因此,最終的表示是self-attention矩陣\scriptstyle \operatorname{softmax}\left(\frac{\mathrm{QK}^{T}}{\sqrt{d_{k}}}\right)乘以值\scriptstyle V矩陣。

首先,我們有矩陣而不是向量,結(jié)果是矩陣乘法。其次,我們不按向量大小按比例縮小,而是按矩陣大小按比例縮小\scriptstyle \sqrt{d_k},(即句子中的詞數(shù)!句子大小各不相同:)

接下來要做規(guī)范化和短跳轉(zhuǎn)連接,類似于在卷積或遞歸后處理張量

殘留短跳轉(zhuǎn)連接

在語(yǔ)言中,有一個(gè)重要的概念是對(duì)世界和我們將思想結(jié)合起來的能力有更廣泛的了解。人類廣泛利用這些自上而下的影響(我們的期望)來組合不同上下文中的單詞。跳過連接以一種非常粗糙的方式賦予了Transformer很小的能力,使不同級(jí)別的處理表示形式可以交互。

通過形成多條路徑,我們可以將對(duì)最后一層的高級(jí)理解“傳遞”到先前的層。這使我們能夠重新調(diào)整我們對(duì)輸入的理解。同樣,這是與人類自上而下的理解相同的想法,無非是期望。

規(guī)范化層

在規(guī)范化層(Layer Norm-LN)中,均值和方差是在通道和空間暗淡之間計(jì)算的。在語(yǔ)言中,每個(gè)單詞都是一個(gè)向量。由于我們要處理向量,因此我們只有一個(gè)空間維度。
\begin{array}{c} \mu_{n}=\frac{1}{K} \sum_{k=1}^{K} x_{n k} \\ \sigma_{n}^{2}=\frac{1}{K} \sum_{k=1}^{K}\left(x_{n k}-\mu_{n}\right)^{2} \\ \hat{x}_{n k}=\frac{x_{n k}-\mu_{n}}{\sqrt{\sigma_{n}^{2}+\epsilon}}, \hat{x}_{n k} \in R \\ \mathrm{LN}_{\gamma, \beta}\left(x_{n}\right)=\gamma \hat{x}_{n}+\beta, x_{n} \in R^{K} \end{array}

在具有合并空間尺寸的4D張量中,我們可以使用下圖將其可視化:


layer-norm

在應(yīng)用規(guī)范化層并形成殘余跳轉(zhuǎn)連接之后:


encoders-attention-with-normalizarion

即使這可能是一個(gè)獨(dú)立的構(gòu)建塊,該Transformer的創(chuàng)建者也會(huì)在頂部添加另一個(gè)線性層,并將其與另一個(gè)跳轉(zhuǎn)連接一起重新規(guī)范化

線性層

\mathbf{y}=\mathbf{x} \mathbf{W}^{T}+\mathbf

\scriptstyle \mathbf{W}是矩陣,\scriptstyle \mathbf{y,x,b}
這是具有N個(gè)此類構(gòu)造塊的Transformer的編碼器部分,如下所示:

encoder-without-multi-head

實(shí)際上,這幾乎是Transformer的編碼器。有一個(gè)區(qū)別:multi-head attention

Multi-head attention 和 并行應(yīng)用

我們將key,query,value矩陣的獨(dú)立集合映射到不同的較低維空間中,并在那里計(jì)算attention(輸出稱為“head”)。通過將每個(gè)矩陣與單獨(dú)的權(quán)重矩陣相乘來實(shí)現(xiàn)映射,表示為\scriptstyle \mathbf{W}_{i}^{K}, \mathbf{W}_{i}^{Q} \in R^{d_{\text {model }} \times d_{k}}\scriptstyle \mathbf{W}_{i}^{V} \in R^{d_{\text {model }} \times d_{k}}

為了補(bǔ)償額外的復(fù)雜性,將輸出矢量大小除以head數(shù)量。具體來說,在香草變壓器中,他們使用 \scriptstyle d_{model}=512\scriptstyle h=8 頭,這給了我們64的矢量表示?,F(xiàn)在,該模型具有多個(gè)獨(dú)立的路徑(方式)來理解輸入。

然后使用平方權(quán)重矩陣將這些頭連接起來并進(jìn)行變換\scriptstyle W^O \in R^{d_{model} \times{d_{model}} },因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=%5Cscriptstyle%20d_%7Bmodel%7D%3Dhd_k" alt="\scriptstyle d_{model}=hd_k" mathimg="1"> 放在一起,我們得到:

\begin{aligned} \text { MultiHead }(\mathbf{Q}, \mathbf{K}, \mathbf{V}) &=\text { Concat }\left(\text { head }_{1}, \ldots, \text { head }_{\mathrm{h}}\right) \mathbf{W}^{O} \\ \text { where head }_{\mathbf{i}} &=\text { Attention }\left(\mathbf{Q} \mathbf{W}_{i}^{Q}, \mathbf{K} \mathbf{W}_{i}^{K}, \mathbf{V} \mathbf{W}_{i}^{V}\right) \end{aligned}

然后
\mathbf{W}_{i}^{Q}, \mathbf{W}_{i}^{K}, \mathbf{W}_{i}^{V} \in R^{d_{\text {model }} \times d_{k}}

由于head是彼此獨(dú)立的,因此我們可以在不同的worker上并行執(zhí)行self-attention計(jì)算:

parallel-multi-head-attention

multi-head attetion背后的直覺是,它使我們每次都可以不同地關(guān)注序列的不同部分。這實(shí)際上意味著:

  • 該模型可以更好地捕獲位置信息,因?yàn)槊總€(gè)head都將參與輸入的不同部分。它們的組合將為我們提供更強(qiáng)大的表示。
  • 通過以獨(dú)特的方式關(guān)聯(lián)單詞,每個(gè)head也將捕獲不同的上下文信息。

multi-head attention使模型可以共同關(guān)注來自不同位置的不同表示子空間的信息。簡(jiǎn)單的attention head,取平均值可以抑制這種情況

我們將在以下圖表中描述multi-head self-attention:


multi-head-attention

總結(jié):Transformer編碼器

要處理一個(gè)句子,我們需要以下三個(gè)步驟:

  • 輸入句子的詞嵌入是同時(shí)計(jì)算的。

  • 然后,將位置編碼應(yīng)用于每個(gè)嵌入,從而生成詞矢量,該詞矢量還包含位置信息。

  • 詞向量被傳遞到第一編碼器塊。

每個(gè)塊均由以下幾層按相同順序組成:

    1. multi-head self-attention,用于查找每個(gè)單詞之間的相關(guān)性
    1. 規(guī)范化層
    1. 前兩個(gè)子層周圍的殘余跳轉(zhuǎn)連接
    1. 線性層
    1. 第二規(guī)范化層
    1. 第二個(gè)殘余跳轉(zhuǎn)連接

上述塊可以復(fù)制多次以形成編碼器。在這里中,編碼器由6個(gè)相同的塊組成。


encoder

Transformer 解碼器

解碼器包括所有上述組件以及兩個(gè)新穎的組件。像之前一樣:

  • 輸出序列將全部輸入,并計(jì)算單詞嵌入
  • 再次應(yīng)用位置編碼
  • 并將向量傳遞到第一個(gè)解碼器塊

每個(gè)解碼器塊包括:

  • Masked multi-head self-attention層
  • 緊隨殘差連接規(guī)范化層
  • 新的multi-head self-attention(Encoder-Decoder attention)
  • 第二次規(guī)劃層和殘差連接
  • 線性層和第三次殘差連接

解碼器塊再次出現(xiàn)6次。最終輸出通過最終線性層進(jìn)行轉(zhuǎn)換,并使用標(biāo)準(zhǔn)softmax函數(shù)計(jì)算輸出概率


decoder

輸出概率預(yù)測(cè)輸出語(yǔ)句中的下一個(gè)標(biāo)記。本質(zhì)上,我們?yōu)榉ㄕZ(yǔ)中的每個(gè)單詞分配一個(gè)概率,我們只保留得分最高的單詞。

Masked Multi-head attention

果您尚未意識(shí)到,在解碼階段,我們會(huì)預(yù)測(cè)一個(gè)單詞(標(biāo)記)一個(gè)接一個(gè)。在諸如機(jī)器翻譯之類的NLP問題中,順序標(biāo)記預(yù)測(cè)是不可避免的。結(jié)果,需要修改self-attention層,以便僅考慮到目前為止已生成的輸出語(yǔ)句。

在我們的翻譯示例中,解碼器在第三遍的輸入將為“ Bonjour”,“ je”…………”。

如您所知,這里的區(qū)別在于我們不知道整個(gè)句子,因?yàn)樗€沒有產(chǎn)生出來。這就是為什么我們需要忽略未知詞。否則,模型將只復(fù)制下一個(gè)單詞!為此,我們屏蔽了下一個(gè)單詞嵌入(將它們?cè)O(shè)置為-inf)。

數(shù)學(xué)上,我們有:
\text { MaskedAttention }(\mathbf{Q}, \mathbf{K}, \mathbf{V})=\operatorname{softmax}\left(\frac{\mathbf{Q K}^{T}+\mathbf{M}}{\sqrt{d_{k}}}\right) \mathbf{V}

其中矩陣M是由0-inf組成
零將成為指數(shù)的-,而無窮變成0

這實(shí)際上具有與刪除相應(yīng)連接相同的效果。其余原理與編碼器的注意完全相同。再一次,我們可以并行實(shí)現(xiàn)它們以加快計(jì)算速度。

顯然,為了我們計(jì)算的每個(gè)新標(biāo)記,每一個(gè)mask都會(huì)更改。

編碼器-解碼器 attention

實(shí)際上,這是解碼器處理編碼表示的地方。編碼器生成的attention矩陣將與先前的Masked Multi-head attention塊的結(jié)果一起傳遞到另一個(gè)attention層。

編碼器-解碼器注意層背后的直覺是將輸入和輸出語(yǔ)句組合在一起。編碼器的輸出封裝了輸入語(yǔ)句的最終嵌入。就像我們的數(shù)據(jù)庫(kù)。因此,我們將使用編碼器輸出來生成Key和Value矩陣。另一方面,Masked Multi-head attention塊的輸出包含到目前為止生成的新句子,并在attention層中表示為Query矩陣。同樣,它是數(shù)據(jù)庫(kù)中的“搜索”。

訓(xùn)練編碼器-解碼器attention以將輸入句子與相應(yīng)的輸出詞相關(guān)聯(lián)

最終將確定每個(gè)英語(yǔ)單詞與法語(yǔ)單詞的關(guān)聯(lián)程度。這基本上就是英語(yǔ)和法語(yǔ)之間發(fā)生映射的地方。

注意,編碼器最后一個(gè)塊的輸出將在每個(gè)解碼器塊中使用

Transformer優(yōu)勢(shì)

    1. 每個(gè)塊的分布式和獨(dú)立表示:每個(gè)transformer塊都有\scriptstyle h=8情境化表示??梢詫⑵湟暈榫矸e層的多個(gè)特征圖,這些特征圖可捕獲圖像中的不同特征。卷積的不同之處在于,這里我們對(duì)其他空間有多個(gè)視圖(線性重投影)。當(dāng)然,這可以通過最初將單詞表示為歐式空間中的向量(而不是離散符號(hào))來實(shí)現(xiàn)。
    1. 含義在很大程度上取決于上下文:這正是self-attention的全部?jī)?nèi)容!我們將attention權(quán)重表示的單詞表示之間的關(guān)系關(guān)聯(lián)起來。因?yàn)槲覀冏匀粫?huì)讓模型建立全局關(guān)聯(lián),所以沒有局部性的概念。
    1. 多個(gè)編碼器和解碼器塊:模型具有更多層,可以進(jìn)行更多抽象表示。類似于堆疊遞歸或卷積塊,我們可以堆疊多個(gè)transformer塊。第一個(gè)塊將字向量對(duì),雙雙第二個(gè)對(duì),三雙第三個(gè)對(duì)等相關(guān)聯(lián),依此類推。平行地,multi-head專注于該對(duì)的不同段。這類似于接受域,但是在成對(duì)的分布式表示方面。
    1. 高級(jí)別和低級(jí)別信息的組合:當(dāng)然,還有跳轉(zhuǎn)連接!它們使自上而下的理解能夠與向后流動(dòng)的多個(gè)梯度路徑一起向后流動(dòng)。

參考

Sequence to Sequence papaerswithcode web
seq2seq model in Machine Learning
Seq2Seq code-github_1
Seq2Seq code-github_2
Self -attention in NLP
How Transformers work in deep learning and NLP: an intuitive introduction

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容