1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        完全圖解RNN、RNN變體、Seq2Seq、Attention機(jī)制

        共 3296字,需瀏覽 7分鐘

         ·

        2020-12-23 20:34

        作者:何之源

        鏈接:https://zhuanlan.zhihu.com/p/28054589


        本文主要是利用圖片的形式,詳細(xì)地介紹了經(jīng)典的RNN、RNN幾個(gè)重要變體,以及Seq2Seq模型、Attention機(jī)制。希望這篇文章能夠提供一個(gè)全新的視角,幫助初學(xué)者更好地入門。


        一、從單層網(wǎng)絡(luò)談起

        在學(xué)習(xí)RNN之前,首先要了解一下最基本的單層網(wǎng)絡(luò),它的結(jié)構(gòu)如圖:

        ? ? ? ?

        輸入是x,經(jīng)過(guò)變換Wx+b和激活函數(shù)f得到輸出y。相信大家對(duì)這個(gè)已經(jīng)非常熟悉了。

        ?

        二、經(jīng)典的RNN結(jié)構(gòu)(N vs N)

        在實(shí)際應(yīng)用中,我們還會(huì)遇到很多序列形的數(shù)據(jù):

        ? ? ? ?

        如:

        • 自然語(yǔ)言處理問(wèn)題。x1可以看做是第一個(gè)單詞,x2可以看做是第二個(gè)單詞,依次類推。

        • 語(yǔ)音處理。此時(shí),x1、x2、x3……是每幀的聲音信號(hào)。

        • 時(shí)間序列問(wèn)題。例如每天的股票價(jià)格等等

        ?

        序列形的數(shù)據(jù)就不太好用原始的神經(jīng)網(wǎng)絡(luò)處理了。為了建模序列問(wèn)題,RNN引入了隱狀態(tài)h(hidden state)的概念,h可以對(duì)序列形的數(shù)據(jù)提取特征,接著再轉(zhuǎn)換為輸出。先從h1的計(jì)算開(kāi)始看:

        ? ? ? ?? ? ??

        圖示中記號(hào)的含義是:

        • 圓圈或方塊表示的是向量。

        • 一個(gè)箭頭就表示對(duì)該向量做一次變換。如上圖中h0和x1分別有一個(gè)箭頭連接,就表示對(duì)h0和x1各做了一次變換。

        在很多論文中也會(huì)出現(xiàn)類似的記號(hào),初學(xué)的時(shí)候很容易搞亂,但只要把握住以上兩點(diǎn),就可以比較輕松地理解圖示背后的含義。h2的計(jì)算和h1類似。要注意的是,在計(jì)算時(shí),每一步使用的參數(shù)U、W、b都是一樣的,也就是說(shuō)每個(gè)步驟的參數(shù)都是共享的,這是RNN的重要特點(diǎn),一定要牢記。

        ? ? ? ?

        依次計(jì)算剩下來(lái)的(使用相同的參數(shù)U、W、b):

        ? ? ?

        ?

        我們這里為了方便起見(jiàn),只畫出序列長(zhǎng)度為4的情況,實(shí)際上,這個(gè)計(jì)算過(guò)程可以無(wú)限地持續(xù)下去。

        我們目前的RNN還沒(méi)有輸出,得到輸出值的方法就是直接通過(guò)h進(jìn)行計(jì)算:

        ? ? ?

        正如之前所說(shuō),一個(gè)箭頭就表示對(duì)對(duì)應(yīng)的向量做一次類似于f(Wx+b)的變換,這里的這個(gè)箭頭就表示對(duì)h1進(jìn)行一次變換,得到輸出y1。

        剩下的輸出類似進(jìn)行(使用和y1同樣的參數(shù)V和c):

        ? ? ?

        OK!大功告成!這就是最經(jīng)典的RNN結(jié)構(gòu),我們像搭積木一樣把它搭好了。它的輸入是x1, x2, .....xn,輸出為y1, y2, ...yn,也就是說(shuō),輸入和輸出序列必須要是等長(zhǎng)的。

        由于這個(gè)限制的存在,經(jīng)典RNN的適用范圍比較小,但也有一些問(wèn)題適合用經(jīng)典的RNN結(jié)構(gòu)建模,如:

        • 計(jì)算視頻中每一幀的分類標(biāo)簽。因?yàn)橐獙?duì)每一幀進(jìn)行計(jì)算,因此輸入和輸出序列等長(zhǎng)。

        • 輸入為字符,輸出為下一個(gè)字符的概率。這就是著名的Char RNN(詳細(xì)介紹請(qǐng)參考:The Unreasonable Effectiveness of Recurrent Neural Networks,Char RNN可以用來(lái)生成文章,詩(shī)歌,甚至是代碼,非常有意思)。

        三、N VS 1

        有的時(shí)候,我們要處理的問(wèn)題輸入是一個(gè)序列,輸出是一個(gè)單獨(dú)的值而不是序列,應(yīng)該怎樣建模呢?實(shí)際上,我們只在最后一個(gè)h上進(jìn)行輸出變換就可以了:

        ? ? ?

        這種結(jié)構(gòu)通常用來(lái)處理序列分類問(wèn)題。如輸入一段文字判別它所屬的類別,輸入一個(gè)句子判斷其情感傾向,輸入一段視頻并判斷它的類別等等。


        四、1 VS N

        輸入不是序列而輸出為序列的情況怎么處理?我們可以只在序列開(kāi)始進(jìn)行輸入計(jì)算:

        ? ? ?

        還有一種結(jié)構(gòu)是把輸入信息X作為每個(gè)階段的輸入:

        ? ? ? ?

        下圖省略了一些X的圓圈,是一個(gè)等價(jià)表示:

        ? ? ? ?? ? ??

        這種1 VS N的結(jié)構(gòu)可以處理的問(wèn)題有:

        • 從圖像生成文字(image caption),此時(shí)輸入的X就是圖像的特征,而輸出的y序列就是一段句子

        • 從類別生成語(yǔ)音或音樂(lè)等

        ?

        五、N vs M

        下面我們來(lái)介紹RNN最重要的一個(gè)變種:N vs M。這種結(jié)構(gòu)又叫Encoder-Decoder模型,也可以稱之為Seq2Seq模型。

        原始的N vs N RNN要求序列等長(zhǎng),然而我們遇到的大部分問(wèn)題序列都是不等長(zhǎng)的,如機(jī)器翻譯中,源語(yǔ)言和目標(biāo)語(yǔ)言的句子往往并沒(méi)有相同的長(zhǎng)度。為此,Encoder-Decoder結(jié)構(gòu)先將輸入數(shù)據(jù)編碼成一個(gè)上下文向量c

        ? ? ?

        ?

        得到c有多種方式,最簡(jiǎn)單的方法就是把Encoder的最后一個(gè)隱狀態(tài)賦值給c,還可以對(duì)最后的隱狀態(tài)做一個(gè)變換得到c,也可以對(duì)所有的隱狀態(tài)做變換。分別對(duì)應(yīng)上面的(1)、(2)、(3)。拿到c之后,就用另一個(gè)RNN網(wǎng)絡(luò)對(duì)其進(jìn)行解碼,這部分RNN網(wǎng)絡(luò)被稱為Decoder。具體做法就是將c當(dāng)做之前的初始狀態(tài)h0輸入到Decoder中:

        ? ? ?

        還有一種做法是將c當(dāng)做每一步的輸入:

        ? ? ?

        由于這種Encoder-Decoder結(jié)構(gòu)不限制輸入和輸出的序列長(zhǎng)度,因此應(yīng)用的范圍非常廣泛,比如:

        • 機(jī)器翻譯。Encoder-Decoder的最經(jīng)典應(yīng)用,事實(shí)上這一結(jié)構(gòu)就是在機(jī)器翻譯領(lǐng)域最先提出的

        • 文本摘要。輸入是一段文本序列,輸出是這段文本序列的摘要序列。

        • 閱讀理解。將輸入的文章和問(wèn)題分別編碼,再對(duì)其進(jìn)行解碼得到問(wèn)題的答案。

        • 語(yǔ)音識(shí)別。輸入是語(yǔ)音信號(hào)序列,輸出是文字序列。…………

        六、Attention機(jī)制

        在Encoder-Decoder結(jié)構(gòu)中,Encoder把所有的輸入序列都編碼成一個(gè)統(tǒng)一的語(yǔ)義特征c再解碼,因此,c中必須包含原始序列中的所有信息,它的長(zhǎng)度就成了限制模型性能的瓶頸。如機(jī)器翻譯問(wèn)題,當(dāng)要翻譯的句子較長(zhǎng)時(shí),一個(gè)c可能存不下那么多信息,就會(huì)造成翻譯精度的下降。

        Attention機(jī)制通過(guò)在每個(gè)時(shí)間輸入不同的c來(lái)解決這個(gè)問(wèn)題,下圖是帶有Attention機(jī)制的Decoder:

        ? ? ? ?

        每一個(gè)c會(huì)自動(dòng)去選取與當(dāng)前所要輸出的y最合適的上下文信息。具體來(lái)說(shuō),我們用aij衡量Encoder中第j階段的hj和解碼時(shí)第i階段的相關(guān)性,最終Decoder中第i階段的輸入的上下文信息?ci就來(lái)自于所有hj對(duì)aij的加權(quán)和。

        ?

        以機(jī)器翻譯為例(將中文翻譯成英文):

        ? ? ?

        ?

        輸入的序列是“我愛(ài)中國(guó)”,因此,Encoder中的h1、h2、h3、h4就可以分別看做是“我”、“愛(ài)”、“中”、“國(guó)”所代表的信息。在翻譯成英語(yǔ)時(shí),第一個(gè)上下文c1應(yīng)該和“我”這個(gè)字最相關(guān),因此對(duì)應(yīng)的 a11就比較大,而相應(yīng)的??a12、?a13?、a14??就比較小。c2應(yīng)該和“愛(ài)”最相關(guān),因此對(duì)應(yīng)的a22就比較大。最后的c3和h3、h4最相關(guān),因此 a33、a34的值就比較大

        ?

        至此,關(guān)于Attention模型,我們就只剩最后一個(gè)問(wèn)題了,那就是:這些權(quán)重 aij 是怎么來(lái)的?

        事實(shí)上, aij 同樣是從模型中學(xué)出的,它實(shí)際和Decoder的第i-1階段的隱狀態(tài)、Encoder第j個(gè)階段的隱狀態(tài)有關(guān)。

        同樣還是拿上面的機(jī)器翻譯舉例,?a1j?的計(jì)算(此時(shí)箭頭就表示對(duì)h'和 hj 同時(shí)做變換):

        ? ? ? ? ?

        ?

        a2j 的計(jì)算:

        ? ? ? ?

        a3j 的計(jì)算:

        ?

        ? ? ?

        以上就是帶有Attention的Encoder-Decoder模型計(jì)算的全過(guò)程。

        ?

        七、總結(jié)

        本文主要講了N vs N,N vs 1、1 vs N、N vs M四種經(jīng)典的RNN模型,以及如何使用Attention結(jié)構(gòu)。希望能對(duì)大家有所幫助。

        可能有小伙伴發(fā)現(xiàn)沒(méi)有LSTM的內(nèi)容,其實(shí)是因?yàn)長(zhǎng)STM從外部看和RNN完全一樣,因此上面的所有結(jié)構(gòu)對(duì)LSTM都是通用的,想了解LSTM內(nèi)部結(jié)構(gòu)的可以參考這篇文章:Understanding LSTM Networks,寫得非常好,推薦閱讀。


        推薦閱讀:
        Python字典詳解-超級(jí)完整版
        全面理解Python集合,17個(gè)方法全解,看完就夠了
        ↓內(nèi)推、加群

        掃描關(guān)注本號(hào)↓




        瀏覽 55
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            美女又黄又爽网站 | 透逼视频| 宝贝腿开大点我添添3p视频 | 操逼2211 | 成年人免费性爱视频 | 骚婷婷视频 | 警察直男被gay猛男狂cao | 禁忌伦理6| 日本少妇videos高潮 | 十八毛片|