-
當(dāng)前位置:首頁(yè) > 創(chuàng)意學(xué)院 > 營(yíng)銷(xiāo)推廣 > 專(zhuān)題列表 > 正文
transformer lstm
大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于transformer lstm的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。
開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,有小程序、在線網(wǎng)頁(yè)版、PC客戶(hù)端和批量生成器
問(wèn)友Ai官網(wǎng):https://ai.de1919.com。
本文目錄:
理解Bert
離開(kāi)深度學(xué)習(xí)瞎折騰了一段時(shí)間后,我終于又回來(lái)了。
于是趕緊回顧了下18年之后NLP的發(fā)展,基本就是將遷移學(xué)習(xí)更廣泛的用于NLP領(lǐng)域,以及把17年年底的《Attention is all you need》里的思想給發(fā)揚(yáng)光大了,ELMO彌補(bǔ)了傳統(tǒng)word2vec多義詞表示的不足,GPT使用更強(qiáng)大的特征提取器Transformer取代LSTM,Bert使用雙向Transformer進(jìn)一步改進(jìn)了GPT成為這兩年發(fā)展的集大成者。
從Bert模型所帶來(lái)的NLP界里程碑式的影響和所取得的成就來(lái)看,無(wú)疑Bert將會(huì)是未來(lái)兩三年NLP應(yīng)用發(fā)展的基石,于是有必要仔細(xì)的看看其模型的結(jié)構(gòu),數(shù)據(jù)是如何流動(dòng)的,訓(xùn)練的和測(cè)試的。
不得不說(shuō)現(xiàn)在的學(xué)習(xí)環(huán)境相對(duì)幾年前好太多了,本文主要參考了以下幾篇文章,然后加了點(diǎn)自己的理解:
Dissecting BERT Part 1: The Encoder
The Illustrated Transformer
Dissecting BERT Appendix: The Decoder
它的總體框架同lstm時(shí)代的MNT或者是attention is all you need中的 transformer 一樣的 encoder-decoder 結(jié)構(gòu):
我們先來(lái)介紹一下Encoder部分。
為了理解這個(gè)架構(gòu),我們使用一個(gè)簡(jiǎn)單的具體的例子,來(lái)看一下 輸入 的數(shù)據(jù)是怎么通過(guò) encoder 一步一步變化讓后到 輸出 的。
bert的詞嵌入由三個(gè)嵌入token embedding、segment embedding,和position embedding疊加而成。
這個(gè)過(guò)程跟以往的RNNs沒(méi)什么區(qū)別,比如給定一個(gè)句子:
第一步是先將其標(biāo)記化:
然后是數(shù)字化,將每個(gè)標(biāo)記映射到語(yǔ)料詞匯表中的唯一整數(shù)編號(hào):
接下來(lái)就是得到序列中每個(gè)詞的詞嵌入,也就是將整數(shù)映射到一個(gè) 維的向量,這個(gè)向量是模型在訓(xùn)練時(shí)學(xué)習(xí)的,你可以將其視為一個(gè)查表的過(guò)程,這些向量的元素作為模型的參數(shù),像其他權(quán)重一樣通過(guò)反向傳播進(jìn)行了優(yōu)化。
在論文中是使用WordPiece tokenization 來(lái)將英文單詞轉(zhuǎn)換成768( )維的向量,轉(zhuǎn)化的過(guò)程類(lèi)似這樣:
把每個(gè)詞的向量放到一起,就得到了一個(gè) 句子長(zhǎng)度x向量維度 ( ) 尺寸的矩陣 Z :
說(shuō)明一點(diǎn),我們通常使用 填充 的方式來(lái)讓輸入序列具有相同的長(zhǎng)度,比如通過(guò)添加"<pad>" 標(biāo)記來(lái)增加某些序列的長(zhǎng)度,還是前面的例子,填充后可能變?yōu)椋?span style="display:none">U4E創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司
如果設(shè)定 設(shè)定為9,那我們就把句子從5填充到了9。
但是,上面的embedding并沒(méi)有包含詞的位置信息。于是,我們的目標(biāo)是能夠根據(jù)詞在句子中的位置適當(dāng)調(diào)整這個(gè)向量,使它帶上位置信息。
作者選擇的方法是使用預(yù)定的(非學(xué)習(xí)的)正余弦函數(shù)將 之間的數(shù)字加到前面的embedding中,即通過(guò)正余弦函數(shù)將位置表示為彼此的線性組合,從而實(shí)現(xiàn)網(wǎng)絡(luò)學(xué)習(xí)中標(biāo)記位置之間的相對(duì)關(guān)系。在Token embedding 獲得的矩陣 的基礎(chǔ)上加上位置矩陣 。
數(shù)學(xué)上,用 表示序列中標(biāo)記的位置,用 表示token embedding特征向量中的位置:
具體來(lái)說(shuō),對(duì)于給定的句子 ,其位置嵌入矩陣為:
作者解釋說(shuō),使用這種確定性方法的結(jié)果和學(xué)習(xí)位置表示(就像我們對(duì)詞嵌入那樣)的結(jié)果差不多,因此這樣反而會(huì)有一些優(yōu)勢(shì):
因此,添加了位置信息之后的矩陣是:
它是第一個(gè)encoder塊的輸入,尺寸是
共有N個(gè)編碼器塊連接在一起直到生成編碼器的輸出,特定的塊負(fù)責(zé)查找輸入表示之間的關(guān)系并將編碼在其輸出中。
直觀地,通過(guò)這些塊的迭代過(guò)程將幫助神經(jīng)網(wǎng)絡(luò)捕獲輸入序列中的詞之間的更加復(fù)雜的關(guān)系,你可以把它理解成一個(gè)整體用來(lái)捕捉輸入序列的語(yǔ)義。
encoder中使用Transformer的多頭注意力機(jī)制,這意味著它將計(jì)算 份不同權(quán)重矩陣的自注意力,然后將結(jié)果連接在一起。
這些并行注意力計(jì)算的結(jié)果稱(chēng)之為Head,我們用下標(biāo) 來(lái)表示一個(gè)特定的head和相關(guān)的權(quán)重矩陣。
如上圖所示,一旦計(jì)算了所有head,它們將被連接起來(lái),得到一個(gè)尺寸為 的矩陣,然后將它乘以一個(gè)尺寸為 的權(quán)重矩陣 進(jìn)行線性變換,就得到了一個(gè)尺寸為 的最終結(jié)果,用數(shù)學(xué)公式表示就是:
其中的 通過(guò) 乘以相應(yīng)權(quán)重矩陣 獲得,我們通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)可視化的看一下這個(gè)過(guò)程。
這圖描繪了輸入標(biāo)記通過(guò) token embedding 和 positional encoding ,再輸入到Encoder:
接下來(lái),我們?cè)賮?lái)看下Encoder中的操作過(guò)程,先看一下單頭的self-attention:
上圖描繪了一個(gè)Head的 是怎么來(lái)的,其中的 的尺寸是 , 因?yàn)镼和K需要計(jì)算相似性,所以維度應(yīng)當(dāng)是相同的, 的尺寸是 , 的維度可以相同也可以不同,在論文中 .
所謂的自注意力,就是 與 的點(diǎn)積進(jìn)行 的縮放之后通過(guò)softmax獲得一個(gè)概率權(quán)重,然后用這些權(quán)重分別乘以各自的 即可:
為了加深理解,我們選擇其中一個(gè)頭,通過(guò)圖形繼續(xù)可視化的看一下這個(gè)變化過(guò)程:
然后計(jì)算self-attention,
多頭的話就是同時(shí)有多個(gè)上述計(jì)算過(guò)程在進(jìn)行:
假設(shè)我們有8個(gè)Head,那么我們就獲得8個(gè) :
但是,顯然前饋層只需要一個(gè)矩陣 ,怎么處理呢?類(lèi)似多卷積核的處理,把這8個(gè)矩陣連起來(lái),乘以一個(gè)權(quán)重矩陣 壓縮到一個(gè)矩陣。
為了有一個(gè)更加全面直觀的認(rèn)識(shí),我們把上面整個(gè)過(guò)程放到一個(gè)圖里,
顯然,第二個(gè)encoder塊是不需要embedding過(guò)程的,只要把第一個(gè)encoder塊的輸出作為輸入即可。
經(jīng)過(guò)上面的介紹,你應(yīng)該對(duì)這個(gè)過(guò)程已經(jīng)有了足夠的了解,但是,為什么可以利用向量點(diǎn)積來(lái)計(jì)算注意力概率呢?
于是讓我們進(jìn)一步深入來(lái)了解其中的原理。
這個(gè)結(jié)構(gòu)體系的關(guān)鍵在于:
也就是每個(gè)詞的q向量與每個(gè)詞的k向量的點(diǎn)積,套用點(diǎn)積公式:
這意味著 和 的方向越相似,長(zhǎng)度越大,點(diǎn)積就越大。詞與此之間關(guān)聯(lián)越大,對(duì)于理解這個(gè)詞時(shí)得到的關(guān)注越大,跟我們的本意是相同的。
我們?cè)倏匆幌伦铋_(kāi)頭的結(jié)構(gòu)示意圖,每個(gè)encoder塊在Multi-Head Attention之后經(jīng)過(guò)一個(gè) Add & Norm層才進(jìn)入下一個(gè)塊。于是我們來(lái)看一下這一層做了些什么。
Add 實(shí)際就是一個(gè)殘差連接,將輸出加上輸入,這個(gè)在每一塊的self-attenton以及FFN之后都會(huì)有,然后跟隨一個(gè)Layer Norm 。
Norm 是一個(gè)Layer Normlization,將 正則化,就是把它縮放到一個(gè)均值為0方差為1的域里。因?yàn)?span style="display:none">U4E創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司
不過(guò)一般在這一層之前,就會(huì)有一個(gè)dropout層。
每個(gè)encoder塊都由 mulit-head atteion add & Norm feed forword network add & Norm 這樣一個(gè)過(guò)程,下面來(lái)介紹一下這個(gè)Feed-Forward Network。
這是一個(gè)全連接層,包含兩個(gè)線性變化和一個(gè)非線性函數(shù)(實(shí)際一般就是ReLu),
對(duì)于輸入的 (尺寸為 ) ,通過(guò)權(quán)重矩陣 (尺寸為 )和偏置 線性變換到隱藏層 (尺寸為 ) ,然后**ReLu **激活 ,記下來(lái)再用權(quán)重矩陣 (尺寸為 ) 和偏置 的線性變換到輸出層(尺寸為 ) ,表示成數(shù)學(xué)公式就是:
在最后一個(gè)encoder塊輸出之后連接到decoder。
Decoder和Encoder的結(jié)構(gòu)是類(lèi)似的,但是因?yàn)榭梢曅畔⒌牟煌?,又有所差別。
Transformer解決的是翻譯的問(wèn)題,將一個(gè)句子翻譯成另一種語(yǔ)言,我們希望模型能夠捕捉到輸入句子中詞之間的關(guān)系,并且將輸入句子中包含的信息與每一步已翻譯的內(nèi)容結(jié)合起來(lái)。繼續(xù)上面的例子,我們的目標(biāo)是把一個(gè)句子從英文翻譯為西班牙文,這是我們獲得的序列標(biāo)記:
我們同之前一樣來(lái)看看輸入到輸出數(shù)據(jù)是如何流動(dòng)的。
這是我們的解碼器的輸入標(biāo)記:
然后這是解碼器的期望輸出:
但是,這里存在一個(gè)問(wèn)題,比如輸入這邊我們已經(jīng)看到了'como' 的后面是'estas', 然后再用它來(lái)預(yù)測(cè)'estas' ,這顯然是不合理的,因?yàn)槟P驮跍y(cè)試的時(shí)候是看不到后面的詞的。
因此,我們需要修改注意力層,防止模型可以看到預(yù)測(cè)詞右邊的信息,與此同時(shí),它能利用已經(jīng)預(yù)測(cè)的詞,即左邊的信息。
繼續(xù)上面的例子,我們將輸入標(biāo)記轉(zhuǎn)換成矩陣的形式,并添加位置信息:
和encoder一樣,decoder塊的輸出也將是大小為 的矩陣,在逐行線性變換+softmax激活后,將生成一個(gè)舉證,其中每行的最大元素表示下一個(gè)單詞。也就是說(shuō),分配"<SS>" 的行負(fù)責(zé)預(yù)測(cè)“Hola”, 分配"Hola"的行負(fù)責(zé)預(yù)測(cè)"," ...以此類(lèi)推。比如,為了預(yù)測(cè)"estas", 我們將允許該行直接和下圖中綠色區(qū)域互動(dòng),而不能和紅色區(qū)域互動(dòng):
但是,在我們使用多頭注意力機(jī)制的時(shí)候,所有的行都會(huì)產(chǎn)生交互,因此需要在輸入的時(shí)候添加遮罩,這個(gè)遮罩會(huì)在注意力計(jì)算之后進(jìn)行:
這是 self-attention 的計(jì)算結(jié)果:
然后我們?cè)诖嘶A(chǔ)上添加遮掩,就是把矩陣上三角的位置全部設(shè)置為 :
于是,在進(jìn)行softmax激活之后,矩陣就變成了:
恰好達(dá)到了我們的要求,那些需要在訓(xùn)練時(shí)忽略的右側(cè)的詞的注意力全部變成了0。
當(dāng)將這個(gè)注意力矩陣與 相乘時(shí),預(yù)測(cè)的詞就是模型可以訪問(wèn)元素右邊的元素。注意,這里的多頭注意力輸出將是 維的,因?yàn)樗男蛄虚L(zhǎng)度是 。
這個(gè)就是 Decoder 從 target序列 的輸入,并經(jīng)過(guò) Masked Multi-Head Attention 的一個(gè)變化得到了 ,decoder的還有一部分輸入來(lái)自于源語(yǔ)句經(jīng)過(guò) Encoder 的最終輸出 (尺寸是 )。
接下來(lái),就是與encoder一樣的 Multi-Head Attention Add and Layer Norm -> FFN 的過(guò)程。
只不過(guò),現(xiàn)在的 來(lái)自于 ,而 來(lái)自于 :
計(jì)算每個(gè)query相對(duì)于key的注意力之后,得到的是一個(gè) 的矩陣, 繼續(xù)咱們的例子,比如注意力矩陣為:
如上圖所見(jiàn),這個(gè)注意力是當(dāng)前Decoder輸入與Encoder輸出的每個(gè)詞之間的注意力,咱們用這個(gè)矩陣再乘以 ,就得到了一個(gè) 的矩陣,每一行代表了源語(yǔ)句相對(duì)于當(dāng)前輸入詞匯的特征:
h個(gè)Head連接起來(lái),尺寸變?yōu)? ,它通過(guò) 的權(quán)重矩陣 線性變換到一個(gè) 的輸出。
這在多個(gè)Decoder之后,最后輸出的矩陣通過(guò)乘以權(quán)重矩陣 ( ) 進(jìn)行線性變換,變換之后再對(duì)每一行的向量softmax, 其中選擇值最大位置對(duì)應(yīng)詞表索引的詞就是預(yù)測(cè)的詞。
損失的話只需要用預(yù)測(cè)的每個(gè)詞向量與真實(shí)的詞的one-hot詞表示計(jì)算交叉熵即可。
lstm具有什么特點(diǎn)
LSTM(Long Short-Term Memory)是長(zhǎng)短期記憶網(wǎng)絡(luò),是一種時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)(RNN),主要是為了解決長(zhǎng)序列訓(xùn)練過(guò)程中的梯度消失和梯度爆炸問(wèn)題。簡(jiǎn)單來(lái)說(shuō),就是相比普通的RNN,LSTM能夠在更長(zhǎng)的序列中有更好的表現(xiàn)。 LSTM 已經(jīng)在科技領(lǐng)域有了多種應(yīng)用?;?LSTM 的系統(tǒng)可以學(xué)習(xí)翻譯語(yǔ)言、控制機(jī)器人、圖像分析、文檔摘要、語(yǔ)音識(shí)別圖像識(shí)別、手寫(xiě)識(shí)別、控制聊天機(jī)器人、預(yù)測(cè)疾病、點(diǎn)擊率和股票、合成音樂(lè)等等任務(wù)。工作原理
LSTM區(qū)別于RNN的地方,主要就在于它在算法中加入了一個(gè)判斷信息有用與否的“處理器”,這個(gè)處理器作用的結(jié)構(gòu)被稱(chēng)為cell。
一個(gè)cell當(dāng)中被放置了三扇門(mén),分別叫做輸入門(mén)、遺忘門(mén)和輸出門(mén)。一個(gè)信息進(jìn)入LSTM的網(wǎng)絡(luò)當(dāng)中,可以根據(jù)規(guī)則來(lái)判斷是否有用。只有符合算法認(rèn)證的信息才會(huì)留下,不符的信息則通過(guò)遺忘門(mén)被遺忘。
說(shuō)起來(lái)無(wú)非就是一進(jìn)二出的工作原理,卻可以在反復(fù)運(yùn)算下解決神經(jīng)網(wǎng)絡(luò)中長(zhǎng)期存在的大問(wèn)題。目前已經(jīng)證明,LSTM是解決長(zhǎng)序依賴(lài)問(wèn)題的有效技術(shù),并且這種技術(shù)的普適性非常高,導(dǎo)致帶來(lái)的可能性變化非常多。各研究者根據(jù)LSTM紛紛提出了自己的變量版本,這就讓LSTM可以處理千變?nèi)f化的垂直問(wèn)題。
Transformer和LSTM的對(duì)比
現(xiàn)在的想法是transformer模型建立依賴(lài)關(guān)系的能力可能是依舊比較差。
Transformer 長(zhǎng)程依賴(lài)的捕獲能力是比 RNN 類(lèi)結(jié)構(gòu)差的。
這點(diǎn)在最近 Transformer-XL [1] 的文章中有體現(xiàn)。
可以看的到 Transformer 是比 RNN 有明顯差距的。雖然讀了這個(gè) RECL 的定義感覺(jué)作者有強(qiáng)行定超參拉開(kāi)兩者差距之嫌,但毫無(wú)疑問(wèn)的是 Transformer 確實(shí)是最糟糕的,只是不一定有數(shù)字上好幾倍這么夸張。
但是,題目敘述中有一個(gè)誤解,我們可以說(shuō) Transformer 建立長(zhǎng)程依賴(lài)的能力差,但這不是 Self-Attention 的鍋。
但summarization(摘要)任務(wù)上需要考慮的是成篇章級(jí)別,并且長(zhǎng)距離依賴(lài),這時(shí)單靠self-attention建模依賴(lài)關(guān)系可能仍顯不足,而這時(shí)候lstm的優(yōu)勢(shì)反而凸顯出來(lái)
Self-Attention 可以使任意兩個(gè) token 間的依賴(lài)計(jì)算變?yōu)槌?shù),長(zhǎng)距離依賴(lài)上 Self-Attention 是強(qiáng)于 RNN 結(jié)構(gòu)的。要說(shuō)問(wèn)題,出也是出在 positional embedding 上,很多最近的 paper 都在嘗試調(diào)整這一部分,也證明大家確實(shí)覺(jué)得現(xiàn)在這里是有問(wèn)題的。
但另一方面, Self-Attention 其實(shí)并不是 Transformer 的全部。 個(gè)人來(lái)看, 從深度 CNN 網(wǎng)絡(luò)中借鑒而來(lái)的 FFN(全連接層) 可能更加重要。 事實(shí)上 18 年 ACL [2] 有人做過(guò)實(shí)驗(yàn),把 Transformer 里的 Self-Attention 換成 RNN 和 CNN,發(fā)現(xiàn)其實(shí)性能幾乎沒(méi)降多少。而帶來(lái)性能提高的,主要是 FFN with residual 和 multiple heads.
最后,不負(fù)責(zé)任的猜測(cè),Transformer 在 Summarization 上不夠好,其實(shí)可能更多的是數(shù)據(jù)量的問(wèn)題。 Transformer 這個(gè)結(jié)構(gòu)最牛逼的地方就在于它第一次做到了在 NLP 中把深度疊上去還能 work, 而 NMT 恰好也是一個(gè)目前數(shù)據(jù)量非常豐富且問(wèn)題尺度本身不大的一個(gè)任務(wù)了,充分發(fā)揮了 Transformer 的優(yōu)勢(shì)。而 Summarization 任務(wù),相對(duì)于其 pairphrase 本身的長(zhǎng)度,benchmark 的數(shù)據(jù)樣本總量可能就略顯不足了。
記得之前在哪看過(guò)一個(gè)圖來(lái)著,說(shuō)是 RNN 在中等數(shù)據(jù)量(幾十萬(wàn)級(jí)別以下)下效果是比較好的,忘記出處了,有同學(xué)記得的話求評(píng)論提醒哈~
Reference
[1] Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context
[2] How Much Attention Do You Need? A Granular Analysis of Neural Machine Translation Architectures
以上就是關(guān)于transformer lstm相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢(xún),客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
chatGPT國(guó)內(nèi)用不了(chatroulette在中國(guó)能用嗎)
transformer做預(yù)測(cè)不如LSTM(transformer預(yù)測(cè)過(guò)程)
ChatGPT中文版注冊(cè)教程(chatroulette怎么注冊(cè))
生鮮品牌vi設(shè)計(jì)(生鮮品牌vi設(shè)計(jì)圖)