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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

浅谈LSTM

發(fā)布時(shí)間:2025/3/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈LSTM 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??前言:網(wǎng)上關(guān)于LSTM的介紹實(shí)在太多,作為小白一個(gè),自然不能夠與大神相提并論。希望通過(guò)寫(xiě)這篇博客,整理一下自己的收獲,如有錯(cuò)誤之處,請(qǐng)各位前輩批評(píng)指正!因?yàn)樽髡咚接邢?#xff0c;只希望能夠向讀者簡(jiǎn)單的介紹下LSTM。更為詳細(xì)的過(guò)程,請(qǐng)?jiān)偃ゲ殚喯嚓P(guān)資料。(適合新手!)

??希望通過(guò)這篇文章能夠說(shuō)明以下三個(gè)問(wèn)題:
??1. 為什么要有LSTM?
??2. LSTM是什么?
??3. LSTM的簡(jiǎn)單計(jì)算過(guò)程。

??廢話少說(shuō),開(kāi)始吧!

一、 為什么要有LSTM?

??要想回答這個(gè)問(wèn)題,那就避不開(kāi)RNN。所以簡(jiǎn)單介紹一下RNN吧!

??循環(huán)神經(jīng)網(wǎng)絡(luò)RNN(Recurrent Neural Network)

??RNN的出現(xiàn)是基于一種特別的需求:如果當(dāng)前狀態(tài)不僅僅受當(dāng)前輸入的影響還受上一個(gè)狀態(tài)的影響,那常規(guī)的神經(jīng)網(wǎng)絡(luò)是無(wú)法處理的。可將其理解為==“時(shí)序”==。舉幾個(gè)應(yīng)用的例子:語(yǔ)音識(shí)別,自然語(yǔ)言處理,機(jī)器翻譯,天氣預(yù)測(cè),故障檢測(cè)等等。這些任務(wù)的特點(diǎn)都是之前的狀態(tài)可能會(huì)影響之后的狀態(tài)。而RNN就是專(zhuān)門(mén)為解決這類(lèi)問(wèn)題而設(shè)計(jì)的。說(shuō)完了RNN的背景,再來(lái)看看RNN的具體結(jié)構(gòu)吧:
??RNN的標(biāo)準(zhǔn)結(jié)構(gòu)如下圖所示:

??從這個(gè)圖中不難看到,在隱藏層構(gòu)成了一個(gè)閉環(huán)循環(huán),這即是RNN完成特定功能的方法,也是名字中“循環(huán)”兩字的由來(lái)。
??雖然標(biāo)準(zhǔn)結(jié)構(gòu)比較簡(jiǎn)潔,但不是特別易于理解,所以常常使用展開(kāi)結(jié)構(gòu)作為研究的對(duì)象(展開(kāi)結(jié)構(gòu)就是把循環(huán)變成了一個(gè)個(gè)獨(dú)立個(gè)體):

??那有一個(gè)問(wèn)題來(lái)了:為什么把RNN劃入深度神經(jīng)網(wǎng)絡(luò)模型中呢?我們都知道CNN里面確實(shí)有很多層(池化層,卷積層等),比如VGG(19層),ResNet(152層)。那RNN里面的“深度”從何說(shuō)起呢?
??其實(shí)是這樣的:RNN中循環(huán)可看作為時(shí)序,如果以每一個(gè)時(shí)鐘作為一個(gè)狀態(tài),那在一段時(shí)間內(nèi)就會(huì)存在多個(gè)狀態(tài),狀態(tài)之間可看作為層與層之間的關(guān)系,層一多,深度也就產(chǎn)生了。也可簡(jiǎn)單的理解為CNN是空間上的深度,RNN是時(shí)間上的深度(個(gè)人觀點(diǎn),不知道是否正確)。
??以上簡(jiǎn)要介紹了RNN(更為詳細(xì)的,請(qǐng)去網(wǎng)上參照更優(yōu)秀的文章)。但好像還是沒(méi)有提到為什么會(huì)有LSTM。其實(shí)LSTM是RNN的一種改進(jìn)版本,也就是LSTM也是RNN,不過(guò)略有不同。RNN同樣具有深度網(wǎng)絡(luò)學(xué)習(xí)中一個(gè)很?chē)?yán)重的問(wèn)題:梯度爆炸/梯度消失,下面簡(jiǎn)單介紹一下:

梯度爆炸/梯度消失

??神經(jīng)網(wǎng)絡(luò)的模型訓(xùn)練大致可分為兩部分:前向預(yù)測(cè)過(guò)程和反向訓(xùn)練過(guò)程。梯度爆炸/梯度消失就發(fā)生在反向訓(xùn)練的過(guò)程。基于前面的時(shí)序結(jié)構(gòu)和神經(jīng)網(wǎng)絡(luò)模型的特性,前面神經(jīng)元對(duì)后面神經(jīng)元的影響體現(xiàn)在層與層權(quán)重乘法上。這種說(shuō)法沒(méi)有得到老師的贊同,說(shuō)是一種表面的理解,希望有的大神能給我一個(gè)更有效地解答
??梯度計(jì)算的詳細(xì)過(guò)程可參考博客:https://zhuanlan.zhihu.com/p/28687529

??最后可得到梯度計(jì)算的表達(dá)式如下圖:

??梯度可分為兩部分tanh’和W(s)。
??注:tanh是激活函數(shù)的一種,此處對(duì)其求導(dǎo)。可證明tanh’的取值范圍為[0,1]。W(s)是梯度的輸入。

??梯度消失:

??當(dāng)W(s)較小時(shí),每一梯度都在[0,1]范圍。當(dāng)t較大時(shí),得到的結(jié)果就會(huì)趨近于0。可類(lèi)比于0.1^100=0

??梯度爆炸:

??當(dāng)W(s)較大時(shí),每一梯度都大于1。當(dāng)t較大時(shí),得到的結(jié)果就會(huì)趨近于無(wú)窮大。可類(lèi)比于10^100=∞
??上面從數(shù)學(xué)上解釋了一下梯度爆炸和消失。那到底是什么意思呢?看下面這個(gè)圖:

??之前介紹到RNN以時(shí)序?yàn)榛A(chǔ),前面狀態(tài)會(huì)影響后面狀態(tài)。那影響大小呢?就近似可以理解為梯度大小。在長(zhǎng)期依賴(lài)(兩個(gè)狀態(tài)離的較遠(yuǎn))的情況下如果梯度太小,發(fā)生了梯度消失現(xiàn)象說(shuō)明前面狀態(tài)對(duì)當(dāng)前狀態(tài)因?yàn)閷訑?shù)太多/相差太遠(yuǎn)影響消失。這種影響消失可能不是我們所期望的,所以問(wèn)題就產(chǎn)生了!同理,梯度爆炸則是前面狀態(tài)對(duì)當(dāng)前狀態(tài)的影響過(guò)于巨大,相對(duì)改變了離當(dāng)前狀態(tài)較近的狀態(tài)影響。
??換一種角度理解梯度消失/梯度爆炸:梯度消失就是對(duì)于具有長(zhǎng)期依賴(lài)關(guān)系的神經(jīng)元影響較小,當(dāng)前狀態(tài)被短期依賴(lài)關(guān)系的神經(jīng)元所左右。梯度爆炸就是對(duì)于具有長(zhǎng)期依賴(lài)關(guān)系的神經(jīng)元影響太大,當(dāng)前狀態(tài)被長(zhǎng)期依賴(lài)關(guān)系的神經(jīng)元左右,而忽略掉了短期依賴(lài)關(guān)系的神經(jīng)元影響。(有點(diǎn)兒繞,不過(guò)意思很直接~)
??LSTM的目的就是為了緩解傳統(tǒng)RNN網(wǎng)絡(luò)中梯度爆炸/梯度消失這一現(xiàn)象

二、 什么是LSTM?

??長(zhǎng)短期記憶網(wǎng)絡(luò)LSTM(Long short-term memory )
??Ps:這里有個(gè)點(diǎn)需要注意下:單橫線一定要放在short和term之間,不能放在long和short之間。LSTM本質(zhì)還是short-term,只不過(guò)比較long~
??我們先從功能上理解LSTM,也就是LSTM是怎么緩解梯度消失/梯度爆炸的?
??再次必須明確一個(gè)概念:LSTM只是緩解了梯度消失/梯度爆炸,而不是完全解決,原因會(huì)在后面進(jìn)行解釋。
??我簡(jiǎn)單將其總結(jié)為:乘法變加法。梯度爆炸/梯度消失的原因就是不斷乘法,最終導(dǎo)致參數(shù)呈現(xiàn)指數(shù)級(jí)增長(zhǎng)和下降,進(jìn)而產(chǎn)生了不好影響。而加法則不會(huì)有這種問(wèn)題,加法基本不會(huì)改變數(shù)量級(jí)。下面來(lái)更詳細(xì)闡述如何實(shí)現(xiàn)的:
??下面分析下LSTM的具體結(jié)構(gòu):

??LSTM在RNN標(biāo)準(zhǔn)模型的基礎(chǔ)上增加了三個(gè)門(mén):遺忘門(mén)(forget gate),輸入門(mén)(input gate),輸出門(mén)(output gate)。三個(gè)門(mén)恰好可以把LSTM分成三部分結(jié)構(gòu),整個(gè)LSTM的實(shí)現(xiàn)也是圍繞這三個(gè)門(mén)來(lái)的。
??上面那個(gè)圖有點(diǎn)兒抽象,找不到門(mén),我又找了一張更清晰的:

??從兩張圖可以清晰的看到,神經(jīng)元的核心操作變成了+(也就是最中間的圈加一個(gè)+),這個(gè)+也是連接逐個(gè)模塊的樞紐。
??看到這兒為止!你可能還會(huì)說(shuō)還是不懂LSTM,你也沒(méi)說(shuō)明白LSTM是神馬啊。別急,相信看完LSTM的計(jì)算過(guò)程后,你會(huì)找到答案的。

三、 LSTM的簡(jiǎn)單計(jì)算過(guò)程

??看看這個(gè)圖,找找LSTM有幾個(gè)輸入,幾個(gè)輸出?

??結(jié)果就是三個(gè)輸入,三個(gè)輸出。那都代表什么呢?X(t)代表當(dāng)前神經(jīng)元的輸入,h(t-1)和C(t-1)代表前一神經(jīng)元的輸入。C(t)和h(t斜)代表當(dāng)前神經(jīng)元要提供給下一神經(jīng)元的(也就是下個(gè)階段的h(t)和c(t-1)),即下一層訓(xùn)練的輸入。另外一個(gè)h(t)就是當(dāng)前神經(jīng)元的細(xì)胞輸出。
??那有個(gè)問(wèn)題來(lái)了:**為什么上一神經(jīng)元會(huì)給兩個(gè)輸入呢?**其實(shí)這就是LSTM保持遠(yuǎn)端狀態(tài)的奧秘所在。C(t-1)叫做long-term memory,h(t-1)叫做work-memory。從上面的圖可以看到,c(t)和c(t-1)連接是一條直線,而h(t)和h(t-1)則相對(duì)曲折。當(dāng)很多個(gè)時(shí)序連在一起時(shí)c(t-1)這條直線更容易追溯到遠(yuǎn)端的情況,而h(t-1)則更多反應(yīng)了上一神經(jīng)元的狀態(tài)。
??再多問(wèn)個(gè)為什么?為什么這里面是c和h(是其他24個(gè)英文字母不香嗎?)。其實(shí)都有其代表的含義:c代表cell,以細(xì)胞狀態(tài)來(lái)描述當(dāng)前神經(jīng)元的狀態(tài)。H代表hide,即隱藏層,也就是上一神經(jīng)元的輸入。(隱藏層一般指深度網(wǎng)絡(luò)中除了輸入和輸出的其他層,這里的隱藏層可以理解為相對(duì)于本層的直接輸入層)明白這個(gè)更能理解c(t-1)和h(t-1)的關(guān)系了吧。
??下面再詳細(xì)的分析一下計(jì)算步驟:

??我先把這個(gè)計(jì)算式子列出來(lái),看不懂沒(méi)關(guān)系。看完后面的內(nèi)容再回來(lái)看就很清晰了。
??我先解釋下里面參數(shù)的含義,并且計(jì)算也需要一些先修知識(shí),我也介紹一下。
????W(f),W(i),W?,W(o)為權(quán)重矩陣
????b(f),b(i),b?,b(o)為偏置常數(shù)
??以上兩部分都是神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練的必要部分,也是模型訓(xùn)練的修改對(duì)象。
??那tanh和σ 呢?其實(shí)這是兩種激活函數(shù):
??σ (sigmoid)

??對(duì)于sigmoid激活函數(shù)現(xiàn)在通常被Relu激活函數(shù)替代,因?yàn)閟igmoid激活函數(shù)容易造成梯度消失,所以后人設(shè)計(jì)了Relu激活函數(shù)。但經(jīng)典中仍是sigmoid。
??tanh

??這兩種激活函數(shù)都是比較常見(jiàn)的,但在此處我們只需要了解它們的取值范圍即可。對(duì)于激活函數(shù)更詳細(xì)的內(nèi)容可以上網(wǎng)去查查資料,會(huì)有很多。
??下面伴隨結(jié)構(gòu)來(lái)描述下計(jì)算過(guò)程:
??計(jì)算過(guò)程可分為三大部分(正好對(duì)應(yīng)于三個(gè)門(mén)),第二大部分里面又可分為兩個(gè)部分。
??(一) 計(jì)算對(duì)上一輸入的遺忘程度(上一神經(jīng)元對(duì)本神經(jīng)元的影響)

??通過(guò)上面對(duì)于激活函數(shù)的介紹,我們可以知道f(t)是一個(gè)[0,1]之間的數(shù)值。一個(gè)這樣的數(shù)乘以上一狀態(tài)的結(jié)果是不是相當(dāng)于上一狀態(tài)的影響比例。
??舉個(gè)例子:有一個(gè)門(mén),門(mén)外是上一個(gè)狀態(tài)的結(jié)果。我可以選擇不開(kāi)門(mén)(f(t)=0)那就是完全屏蔽上一個(gè)狀態(tài)的影響,也可以選擇全部打開(kāi)(f(t)=1)那就是完全接受上一狀態(tài)。當(dāng)然,也可以0~1之間的數(shù)字,那就是不同的開(kāi)門(mén)比例。也就是不同的遺忘程度。
??LSTM中正是憑借這遺忘門(mén)這步來(lái)有效地保持前后狀態(tài)的連接。
??(二_1)計(jì)算當(dāng)前輸入對(duì)本細(xì)胞狀態(tài)的影響

??這個(gè)部分主要計(jì)算的當(dāng)前輸入的影響,i(t)也是一個(gè)[0,1]之間的數(shù)值,乘以經(jīng)過(guò)tanh計(jì)算的預(yù)備c(t)就計(jì)算出了通過(guò)輸入門(mén)后的數(shù)值。
??(二_2)確定本細(xì)胞狀態(tài)

??本細(xì)胞狀態(tài)由兩部分組成:經(jīng)過(guò)遺忘門(mén)的過(guò)去細(xì)胞狀態(tài)和經(jīng)過(guò)輸入門(mén)的當(dāng)前輸入影響。這里面有兩種操作,定義如下圖(圈中點(diǎn)和圈中x是一樣的):

??注意:圈中點(diǎn)/叉代表的是矩陣點(diǎn)乘(之前寫(xiě)了對(duì)應(yīng)位置相乘,感覺(jué)好low,hhhh),而不是矩陣相乘。因?yàn)樵谟?jì)算過(guò)程中二者都涉及到了,所以要特別進(jìn)行區(qū)分。
??截至目前為止,C(t)已經(jīng)被計(jì)算完成。
??(三)計(jì)算當(dāng)前神經(jīng)元輸出

??這步就是通過(guò)運(yùn)算最終得到兩個(gè)輸出,并分別作用于不同對(duì)象。
??到此!再回去看看那個(gè)計(jì)算式以及神經(jīng)元的結(jié)構(gòu)應(yīng)該更加清晰了吧!

??所以,我們?cè)賳?wèn)自己一個(gè)問(wèn)題?LSTM到底是怎么解決梯度爆炸和梯度消失的呢?LSTM的記憶性又體現(xiàn)在哪里呢?
??對(duì)于LSTM來(lái)說(shuō),細(xì)胞狀態(tài)c(t)的傳輸就是記憶性的體現(xiàn)。而c(t)計(jì)算中涉及兩部分(過(guò)去狀態(tài)和當(dāng)前輸入)做加法,避免了連乘的困擾,解決了梯度問(wèn)題。通過(guò)對(duì)于遺忘門(mén)的調(diào)控來(lái)決定對(duì)過(guò)去狀態(tài)的取舍。這就是LSTM。

??再解釋最后一個(gè)問(wèn)題:那為什么LSTM只是緩解而不是徹底解決呢?
??其實(shí)可以看到,當(dāng)數(shù)據(jù)流向在c(t)這條線上時(shí)是沒(méi)有問(wèn)題的,除此之外還會(huì)有一些其他的支路,如果在訓(xùn)練過(guò)程中,通過(guò)支路,仍是存在梯度爆炸/梯度消失的風(fēng)險(xiǎn)的。所以只是緩解,而不是解決。
??LSTM也不是終點(diǎn),對(duì)其的優(yōu)化仍在進(jìn)行。如GRU等等,剩下的就慢慢學(xué)習(xí)吧!

留一些好的參考資料:
1.新手入門(mén)理解
https://www.jianshu.com/p/9dc9f41f0b29
https://baijiahao.baidu.com/s?id=1573792228593933&wfr=spider&for=pc
2.三個(gè)門(mén)參數(shù)計(jì)算
https://zhuanlan.zhihu.com/p/52701603
3.三個(gè)門(mén)的計(jì)算過(guò)程:
https://blog.csdn.net/jamesjjjjj/article/details/83046491
4.RNN梯度消失和梯度爆炸
https://zhuanlan.zhihu.com/p/28687529

感謝施老師對(duì)于本篇文章的耐心修改

因作者水平有限,文章如有錯(cuò)誤之處,請(qǐng)各位高手在下方評(píng)論區(qū)批評(píng)指正,謝謝!

總結(jié)

以上是生活随笔為你收集整理的浅谈LSTM的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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