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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Encoder-Decoder (based on RNNS / LSTM)用于序列学习方案

發(fā)布時(shí)間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Encoder-Decoder (based on RNNS / LSTM)用于序列学习方案 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.RNN Encoder-Decoder

? ? ? 所謂的Sequence2Sequence主要是泛指一些Sequence到Sequence的映射問題,Sequence在這里可以理解為一個字符串序列 / 圖像序列(視頻),當(dāng)我們在給定一個字符串序列后,希望得到與之對應(yīng)的字符串序列(如 翻譯、如語義對應(yīng)的)時(shí),這個任務(wù)就可以稱為Sequence2Sequence了。?

? ? ? 在現(xiàn)在的深度學(xué)習(xí)領(lǐng)域當(dāng)中,通常的做法是將輸入的源Sequence編碼到一個中間的context當(dāng)中,這個context是一個特定長度的編碼(可以理解為一個向量),然后再通過這個context還原成一個輸出的目標(biāo)Sequence。如果用人的思維來看,就是我們先看到源Sequence,將其讀一遍,然后在我們大腦當(dāng)中就記住了這個源Sequence,并且存在大腦的某一個位置上,形成我們自己的記憶(對應(yīng)Context),然后我們再經(jīng)過思考,將這個大腦里的東西轉(zhuǎn)變成輸出,然后寫下來。那么我們大腦讀入的過程叫做Encoder,即將輸入的東西變成我們自己的記憶,放在大腦當(dāng)中,而這個記憶可以叫做Context,然后我們再根據(jù)這個Context,轉(zhuǎn)化成答案寫下來,這個寫的過程叫做Decoder。其實(shí)就是編碼-存儲-解碼的過程。?

? ? ?目前來看,最經(jīng)典的Encoder-Decoder網(wǎng)絡(luò)還是基于RNNs實(shí)現(xiàn)的。



在RNN Encoder-Decoder的工作當(dāng)中,我們用一個RNN去模擬大腦的讀入動作,用一個特定長度的特征向量去模擬我們的記憶,然后再用另外一個RNN去模擬大腦思考得到答案的動作,將三者組織起來利用就成了一個可以實(shí)現(xiàn)Sequence2Sequence工作的“模擬大腦”了。

2.RNNs

? ? ? 循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Networks,RNNs)已經(jīng)在眾多自然語言處理(Natural Language Processing, NLP)中取得了巨大成功以及廣泛應(yīng)用。RNNs通常用來處理序列數(shù)據(jù)。在傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)模型中,是從輸入層到隱含層再到輸出層,層與層之間是全連接的,每層之間的節(jié)點(diǎn)是無連接的。這種神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)在很多領(lǐng)域取得了不俗的成績,但是由于其網(wǎng)絡(luò)結(jié)構(gòu)的問題,使得其在面對序列問題或者和時(shí)間密切相關(guān)的問題時(shí),表現(xiàn)不佳。例如,你要預(yù)測句子的下一個單詞是什么,一般需要用到前面的單詞,因?yàn)橐粋€句子中前后單詞并不是獨(dú)立的。RNNs之所以稱為循環(huán)神經(jīng)網(wǎng)絡(luò),即一個序列當(dāng)前的輸出與前面的輸出也有關(guān)。具體的表現(xiàn)形式為網(wǎng)絡(luò)會對前面的信息進(jìn)行記憶并應(yīng)用于當(dāng)前輸出的計(jì)算中,即隱藏層之間的節(jié)點(diǎn)不再無連接而是有連接的,并且隱藏層的輸入不僅包括輸入層的輸出還包括上一時(shí)刻隱藏層的輸出。理論上,RNNs能夠?qū)θ魏伍L度的序列數(shù)據(jù)進(jìn)行處理(不是變長度的時(shí)間序列處理)。但是在實(shí)踐中,為了降低復(fù)雜性往往假設(shè)當(dāng)前的狀態(tài)只與前面的幾個狀態(tài)相關(guān)。?在RNN中神經(jīng)元的輸出可以在下一個時(shí)間戳直接作用到自身,即第i層神經(jīng)元在m時(shí)刻的輸入,除了(i-1)層神經(jīng)元在該時(shí)刻的輸出外,還包括其自身在(m-1)時(shí)刻的輸出!表示成圖就是這樣的:?


? ? ? 在這個典型的RNN示意圖當(dāng)中,RNN包含一個輸入層Input Layer,一個隱含層Hidden Layer,一個輸出層Output Layer。其中非常值得注意的是,在Hidden Layer部分,Hidden Layer不僅連接了Input Layer Output Layer,而且也同時(shí)連接了自己本身,所以這也是稱作循環(huán)神經(jīng)網(wǎng)絡(luò)的原因所在。或許上面那張圖有點(diǎn)不太容易懂,那么如果我們將它展開看一下,或許你就會對此有一個更加清楚的理解了:


? ? ? 可以看到的是,對于每一個時(shí)刻輸入的數(shù)據(jù)xt,rnn的隱含層的Cell都會重復(fù)使用同一個參數(shù)W b 進(jìn)行計(jì)算,并且得到當(dāng)前的隱含層狀態(tài)St和一個輸出Ot,而這個Ot是之前所有輸入(x0~xt-1)的共同作用結(jié)果,這也就解決了那些當(dāng)前的輸出,要求考慮到之前n個元素的問題,rnn在某一個時(shí)刻的輸入,是之前所有輸入的共同結(jié)果。而RNN之所以是深度學(xué)習(xí)中常用的一種網(wǎng)絡(luò)結(jié)構(gòu),其深度之處就在于其網(wǎng)絡(luò)時(shí)間的長度(也就是網(wǎng)絡(luò)的深度,這里說明了一個關(guān)鍵點(diǎn),可以利用網(wǎng)絡(luò)學(xué)習(xí)一個時(shí)間正則化函數(shù),且該函數(shù)是自適應(yīng)的、隱式的)。


然而,RNNs雖然看起來在處理時(shí)間t的內(nèi)容時(shí),會綜合考慮到之前所有時(shí)刻的內(nèi)容,但是實(shí)際情況是,隨時(shí)t的增大(即輸入的序列很長的時(shí)候),其會面臨長期依賴(Long-Term Dependencies)問題,即最開始輸入到RNN的內(nèi)容對當(dāng)前Ot的影響會越來越小 (時(shí)間比重下降效應(yīng)),究其原因是一開始輸入RNN的內(nèi)容,隨著t的推進(jìn)其在不停的循環(huán)傳播,造成了信息的丟失

3.RNN面臨的“失憶”問題

形象來說,這種丟失,就像我們?nèi)说拇竽X一樣,短一點(diǎn)的句子我們看一眼還記得住,要是長一點(diǎn),我們看著看著,之前看過的就忘了,只記得附近看過的幾個?為了解決這個問題,發(fā)展了諸如GRU和LSTM在內(nèi)的機(jī)制,用于解決這個記憶問題。簡單說,GRU和LSTM并不算是一個完全獨(dú)立的結(jié)構(gòu),其看起來和上圖的RNN很像(其實(shí)也都是認(rèn)為對RNN Cell的一種改進(jìn)),GRU和LSTM主要是通過加強(qiáng)原RNN當(dāng)中隱含層的Unit,增加了多個“門”,實(shí)現(xiàn)對內(nèi)容的記憶、遺忘,一定程度改善了RNN的長句記憶問題。我們這里主要討論LSTM。 ? ? ? LSTM(Long Short Term Memory),是一種 RNN 特殊的類型,可以學(xué)習(xí)長期依賴信息。LSTM 由Hochreiter & Schmidhuber (1997)提出,并在近期被Alex Graves進(jìn)行了改良和推廣。在很多問題,LSTM 都取得相當(dāng)巨大的成功,并得到了廣泛的使用 。LSTM通過記住一些長期的記憶,來改善長期依賴的問題
? ? ? 首先需要再次強(qiáng)調(diào)的是,LSTM可以看做是RNN的一種改進(jìn)版,主要是替換了其Hidden Unit的Cell,但是其依然有每一個隱含層輸出的狀態(tài)ht,結(jié)果的輸出也是基于ht,使用方式并沒有任何改變,而改變之處在于其在循環(huán)時(shí),如何使用之前的ht-1和當(dāng)前輸入的xt去生成ht,下面這兩張圖片的對比就可以很好的說明這個問題了:?

? ? ? ? ??

標(biāo)準(zhǔn)RNN ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?LSTM


LSTM Cell結(jié)構(gòu)標(biāo)識在上面的圖例中,每一條黑線傳輸著一整個向量,從一個節(jié)點(diǎn)的輸出到其他節(jié)點(diǎn)的輸入。粉色的圈代表 pointwise 的操作,諸如向量的和,而黃色的矩陣就是學(xué)習(xí)到的神經(jīng)網(wǎng)絡(luò)層。合在一起的線表示向量的連接,分開的線表示內(nèi)容被復(fù)制,然后分發(fā)到不同的位置

? ? ? 可以看到,無論是原始的RNN還是LSTM,其基本的網(wǎng)絡(luò)結(jié)構(gòu)都是一樣的,都是一個循環(huán)的網(wǎng)絡(luò)結(jié)構(gòu),而不同在于標(biāo)準(zhǔn)RNN的在處理一個元素時(shí)其Cell的結(jié)構(gòu)很簡單,即將上一個時(shí)間的隱含層狀態(tài)h(這里是h,上面的圖是s,這里的h不是上面圖的o,注意區(qū)分),同當(dāng)前輸入的x,使用tanh函數(shù)計(jì)算得到當(dāng)前時(shí)間狀態(tài)的h。而在LSTM當(dāng)中就復(fù)雜了許多,可以看到其由各種五花八門的“門”構(gòu)成,想了解更多細(xì)節(jié)可以參考我的另外一篇博客:LSTM。

? ? ? 首先,LSTM的核心在于如何維護(hù)每一個Cell的狀態(tài)(記憶),首先這里在每一個Cell當(dāng)中,我們用Ct來標(biāo)識當(dāng)前的一個細(xì)胞狀態(tài),你可以理解為Cell的狀態(tài)是LSTM單元實(shí)現(xiàn)記憶的核心因素。在每一個LSTM Cell中,其基本的處理流程如下圖,從Ct-1輸入上一個狀態(tài),途徑了兩個操作:第一個是“忘記門:忘記一部分之前的知識”第二個是“更新門:記住當(dāng)前時(shí)間輸入的內(nèi)容”


忘記門 ?forget gate

? ? ? 通俗解釋就是,因?yàn)橐粋€Cell的記憶內(nèi)容是有限的,所以在記住新的內(nèi)容(Xt)之前,勢必需要忘記一部分內(nèi)容,才能記住新的內(nèi)容。那么在LSTM中,使用上一個LSTM里原RNN部分的隱藏層狀態(tài)ht,和當(dāng)前的輸入xt,結(jié)合sigmod函數(shù)輸出一個0~1的值,確定需要忘記的幅度ft(所以你看第一個操作就是 Ct-1 * ft)。
? ? ? 確定了如何忘記后,就來看下如何將新的內(nèi)容xt添加到Cell記憶中?


? ? ? 在這里,我們同樣是用ht-1和xt以及sigmod tanh函數(shù)去計(jì)算,這里包含兩個部分。1. sigmoid 層稱 “輸入門層” 決定什么值我們將要更新。2. tanh 層, 創(chuàng)建一個新的候選值向量。?隨后,我們確定好了需要更新的內(nèi)容后,就可以添加到記憶當(dāng)中(同部分忘記后的記憶內(nèi)容相加),然后就可以得到新的記憶Ct。


好了,當(dāng)我們得到細(xì)胞狀態(tài)后,我們也可以相應(yīng)的計(jì)算出當(dāng)前隱藏層的狀態(tài)ht了:


4.總結(jié)

? ? ? Encoder-Decoder模型中,Encoder部分負(fù)責(zé)依次讀入輸入序列的每個單位,將其編碼成一個模型的中間表示(一般為一個向量),在這里我們將其稱為上下文向量c,Decoder部分負(fù)責(zé)在給定上下文向量c的情況下預(yù)測出輸出序列。 并且在在自然語言處理應(yīng)用中,Encoder和Decoder部分通常選擇了RNN(LSTM)實(shí)現(xiàn)

? ? ??為什么我們要選擇以RNN為基礎(chǔ)的結(jié)構(gòu)去實(shí)現(xiàn)Encoder-Decoder呢?:首先,RNN可以方便地處理可變長序列的數(shù)據(jù)。其次,由于RNN中的隱層狀態(tài)隨著按時(shí)序讀取的輸入單元而不斷發(fā)生變化,因此它具有對序列順序的建模的能力,體現(xiàn)在自然語言處理任務(wù)中,即為對詞序的建模能力。而詞序也恰恰是自然語言處理任務(wù)中需要建模的重點(diǎn)。最后,RNN可以作為一個語言模型來預(yù)測出給定前文的基礎(chǔ)上下一個字符出現(xiàn)的概率,這個特性使得其可以應(yīng)用在各種文本生成任務(wù)中預(yù)測出語法正確的輸出序列,從而實(shí)現(xiàn)Decoder的功能。

引用:https://blog.csdn.net/mebiuw/article/details/53341404

總結(jié)

以上是生活随笔為你收集整理的Encoder-Decoder (based on RNNS / LSTM)用于序列学习方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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