日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于Attention的Seq2Seq

發(fā)布時間:2024/3/24 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Attention的Seq2Seq 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言


昨天有位大神在CSDN上發(fā)表了一篇題為BERT通俗筆記:從Word2Vec/Transformer逐步理解到BERT
的文章,仔細閱讀前兩章后,可謂是受益匪淺。但是在研讀時,由于自身對NLP相關(guān)知識有所缺乏,使我對一些基礎(chǔ)概念不甚理解(盡管作者的描述已經(jīng)特別簡單易懂~)。其中Attention便是其中之一,在此之前,我一直以為在Seq2Seq之后便是Self-attention(相關(guān)介紹見自注意機制(Self-attention))這一偉大的發(fā)明。查閱相關(guān)文獻后才了解到,由于Seq2Seq對于長句子具有遺忘性,在2015年ICLR會議上Bahdanau,Cho等人提出了Attention機制以解決這個問題,而Self-attention是在2016年提出的。本文主要結(jié)合B站UP主ShusenWang的所講的關(guān)于RNN模型與NLP應(yīng)用的相關(guān)內(nèi)容和自己的理解構(gòu)成。

1. 回顧Seq2Seq

Seq2Seq是基于RNN和LSTM的Encoder-Decoder結(jié)構(gòu)的網(wǎng)絡(luò),它在很多領(lǐng)域都取得了巨大的成功,比如機器翻譯,語音識別,文本摘要等。它輸入是一個序列,其輸出也是一個序列。在Encoder中,將序列轉(zhuǎn)換成一個固定長度的向量,然后通過Decoder將該向量轉(zhuǎn)換成我們想要的序列輸出出來,基本結(jié)構(gòu)如下:

但是這種模型在解碼時只有最后一個狀態(tài)向量傳遞給解碼器,即Encoder的最后一個狀態(tài),如下圖所示,由于其余位置的狀態(tài)并沒有直接參與后續(xù)的解碼任務(wù),這冥冥之中導(dǎo)致了一些信息的丟失,特別是在處理長對話時,僅僅依靠最后一個狀態(tài)難以記住語句所有的信息。

下圖是單詞量和BLEU(雙語互譯質(zhì)量評估輔助工具)的關(guān)系(挖坑:關(guān)于BLEU這些評價指標,后面我將通過一個文章進行總結(jié))。從圖可以看出,當單詞量大于20后,不帶有Attention的Seq2Seq模型的BLEU值出現(xiàn)了明顯下降;相反帶有Attention的Seq2Seq模型的BLEU值并沒有下降,這說明了Attention記住的關(guān)鍵了信息,并實現(xiàn)了較好的狀態(tài)解碼。

2. 基于Attention的Seq2Seq

2.1 相關(guān)性計算

本小節(jié)也采用和視頻RNN模型與NLP應(yīng)用一致的描述方式,對Seq2Seq model for attention做出解釋。在上一小節(jié)已經(jīng)說過,Seq2Seq的Eecoder輸出的是最后一個狀態(tài)hmh_mhm?,這也是Decoder的第一個輸入,我們利用s0=hms_0=h_ms0?=hm?來表示。而基于attention的方法最大的一個特點就是,在進行Decoder時,不僅考慮的Eecoder最后一個狀態(tài)hmh_mhm?,也考慮之前每個的輸入單詞產(chǎn)生的狀態(tài),即h1h_1h1?h2h_2h2?h3h_3h3?。。。等,如下圖所示。原始作者引入了一個權(quán)重參數(shù)α\alphaα來表示和Decoder輸入狀態(tài)的相關(guān)性。我們將Eecoder的任意輸出狀態(tài)hih_ihi?與Decoder的第一個輸入狀態(tài)s0s_0s0?的相關(guān)性記為:αi=align?(hi,s0)\alpha_i=\operatorname{align}\left(\mathbf{h}_i, \mathbf{s}_0\right) αi?=align(hi?,s0?)


接下來就是α\alphaα的學習,這里提供了兩種方法,第一個是原始論文的計算方法,第二個是一種更為流行的計算方法,也廣泛應(yīng)用于Transformer模型當中。

  • 第一種包含兩個可學習的參數(shù)WWWvvv,主要做法如下所示:
  • 第二種做法主要過程如下,也有兩個需要學習參數(shù)矩陣WkW_kWk?WqW_qWq?

    至此,我們可以得到m個權(quán)重α\alphaα,它對應(yīng)了m個Eecoder的輸出狀態(tài)h1h_1h1?h2h_2h2?h3h_3h3?。。。hmh_mhm?,我們將這m個權(quán)重α\alphaα與m個hih_ihi?進行加權(quán)求和,得到上下文向量(context vetor)c0c_0c0?。其實這種操作是不難理解的, 簡單講,每一個α\alphaα都表示與s0s_0s0?的相關(guān)性,較大的值表明與對應(yīng)的狀態(tài)hhhs0s_0s0?相關(guān)性較大,反之較小,我們求他們的加權(quán)平均和,自然使得重要的地方更突出,不重要的地方就不突出。
    Context?vector:?c0=α1h1+?+αmhm\text { Context vector: } \quad \mathbf{c}_0=\alpha_1 \mathbf{h}_1+\cdots+\alpha_m \mathbf{h}_m ?Context?vector:?c0?=α1?h1?+?+αm?hm?
  • 2.2 Eecoder過程

    現(xiàn)在開始介紹Eecoder的過程,這里我們將按照第一次輸入x1‘x_1^‘x1?,第二次輸入x2‘x_2^‘x2?,。。。,分步進行介紹~。首先是第一步。

  • One step。在原始的Seq2Seq中,我們的輸入有s0=hms_0=h_ms0?=hm?x1‘x_1^‘x1?,如下圖所示,

  • 而基于Attention的Seq2Seq的Eecoder操作,是在此基礎(chǔ)上級聯(lián)了之前計算得到上下文向量(context vetor)c0c_0c0?,經(jīng)過運算即可得到第一步的輸出s1s_1s1?

    2.Two step。與之前的操作類似,我們需要計算s1s_1s1?第一步的輸出),與decoder輸出的m個狀態(tài)的相關(guān)性,具體方法與上文描述一致,進而可獲得上下文向量(context vetor)c1c_1c1?,最后將x2‘x_2^‘x2?s1s_1s1?c1c_1c1?級聯(lián)送入計算單元獲得s2s_2s2?,方法見下圖:

    3. Three step。這一步和上文完全相同不在贅述。

    最終我們得到一系列輸出c1c_1c1?c2c_2c2?c3c_3c3?

    2.3 復(fù)雜度分析和權(quán)重可視化

    對于一個cjc_jcj?,我們需要計算m個α\alphaα,如果解碼有ttt個狀態(tài),則一個用mtmtmt個權(quán)重α\alphaα,所以該算法的時間復(fù)雜度是mtmtmt,這個計算壓力也是巨大的。

    下圖以英語翻譯為法語為例,通過可視化權(quán)重,來說明之前的關(guān)聯(lián)性。圖中線越粗,表示權(quán)重值越大,之間的關(guān)聯(lián)性也越大。

    比如英語單詞Arae(面積;地區(qū),地段)和法語單詞zone(區(qū)域),他們具有相同的意思,這說明了Attention的實際意義。

    3. 總結(jié)

  • 改善了Seq2Seq模型,不會造成信息的遺忘。
  • 解碼器知道關(guān)注點在哪里。
  • 需要消耗大量的計算量。
  • 參考

    BERT通俗筆記:從Word2Vec/Transformer逐步理解到BERT
    RNN模型與NLP應(yīng)用

    總結(jié)

    以上是生活随笔為你收集整理的基于Attention的Seq2Seq的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。