一步步教你理解LSTM
點(diǎn)擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)
LSTM全名是Long Short-Term Memory,長(zhǎng)短時(shí)記憶網(wǎng)絡(luò),可以用來處理時(shí)序數(shù)據(jù),在自然語言處理和語音識(shí)別等領(lǐng)域應(yīng)用廣泛。和原始的循環(huán)神經(jīng)網(wǎng)絡(luò)RNN相比,LSTM解決了RNN的梯度消失問題,可以處理長(zhǎng)序列數(shù)據(jù),成為當(dāng)前最流行的RNN變體。
假設(shè)我們的模型的輸入是依次輸入一句話的每個(gè)單詞,我們需要對(duì)單詞做分類,比如有兩句話:(1)arrive Beijing on November 2nd,這里的Beijing是目的地;(2)leave Beijing on November 2nd,這里的Beijing是出發(fā)地。如果用普通的神經(jīng)網(wǎng)絡(luò),輸入是'Beijing',那么輸出一定就是確定的,但事實(shí)上我們希望在'Beijing'前面是'arrive'時(shí),'Beijing'被識(shí)別為目的地,在'Beijing'前面時(shí)'leave'時(shí),'Beijing'被識(shí)別為出發(fā)地。這里L(fēng)STM就會(huì)派上用場(chǎng),因?yàn)長(zhǎng)STM可以記住歷史信息,在讀到'Beijing'時(shí),LSTM還知道在前面是'arrive'還是'leave',根據(jù)歷史信息來做出不同的判斷,即使輸入是相同的,輸出也會(huì)不同。
普通的神經(jīng)元是一個(gè)輸入,一個(gè)輸出,如圖所示:?

對(duì)于神經(jīng)元h1來講,輸入就是x1,輸出就是y1,LSTM做的就是把普通的神經(jīng)元,替換成LSTM的單元。

從圖中可以看到LSTM有四個(gè)輸入,分別是input(模型輸入),forget gate(遺忘門),input gate(輸入門),以及output gate(輸出門)。因此相比普通的神經(jīng)網(wǎng)絡(luò),LSTM的參數(shù)量是它們的4倍。這3個(gè)門信號(hào)都是處于0~1之間的實(shí)數(shù),1代表完全打開,0代表關(guān)閉。遺忘門:決定了前一時(shí)刻中memory中的是否會(huì)被記住,當(dāng)遺忘門打開時(shí),前一刻的記憶會(huì)被保留,當(dāng)遺忘門關(guān)閉時(shí),前一刻的記憶就會(huì)被清空。輸入門:決定當(dāng)前的輸入有多少被保留下來,因?yàn)樵谛蛄休斎胫校⒉皇敲總€(gè)時(shí)刻的輸入的信息都是同等重要的,當(dāng)輸入完全沒有用時(shí),輸入門關(guān)閉,也就是此時(shí)刻的輸入信息被丟棄了。輸出門:決定當(dāng)前memroy的信息有多少會(huì)被立即輸出,輸出門打開時(shí),會(huì)被全部輸出,當(dāng)輸出門關(guān)閉時(shí),當(dāng)前memory中的信息不會(huì)被輸出。
有了上面的知識(shí),再來推導(dǎo)LSTM的公式就很簡(jiǎn)單了,圖中
代表遺忘門,
代表輸入門,
代表輸出門。C是memroy cell,存儲(chǔ)記憶信息。
代表上一時(shí)刻的記憶信息,
代表當(dāng)前時(shí)刻的記憶信息,h是LSTM單元的輸出,
是前一刻的輸出。

遺忘門計(jì)算:

這里的
是把兩個(gè)向量拼接起來的意思,用sigmoid函數(shù)主要原因是得到有個(gè)0~1之間的數(shù),作為遺忘門的控制信號(hào)。
輸入門計(jì)算:

當(dāng)前輸入:

當(dāng)前時(shí)刻的記憶信息的更新:

從這個(gè)公式可以看出,前一刻的記憶信息
通過遺忘門
,當(dāng)前時(shí)刻的輸入
通過輸入門
,加起來更新當(dāng)前的記憶信息
。
輸入門計(jì)算:

LSTM的輸出,是由輸出門和當(dāng)前記憶信息共同決定的:

這樣我們就明白了LSTM的前向計(jì)算過程。有了LSTM前向傳播算法,推導(dǎo)反向傳播算法就很容易了, 通過梯度下降法迭代更新我們所有的參數(shù),關(guān)鍵點(diǎn)在于計(jì)算所有參數(shù)基于損失函數(shù)的偏導(dǎo)數(shù),這里就不細(xì)講了。
LSTM雖然結(jié)構(gòu)復(fù)雜,但是只要理順了里面的各個(gè)部分和之間的關(guān)系,是不難掌握的。在實(shí)際使用中,可以借助算法庫如Keras,PyTorch等來搞定,但是仍然需要理解LSTM的模型結(jié)構(gòu)。
https://www.youtube.com/watch?v=rTqmWlnwz_0&index=35&list=PLJV_el3uVTsPy9oCRY30oBPNLCo89yu49
https://zybuluo.com/hanbingtao/note/581764
http://www.cnblogs.com/pinard/p/6519110.html
http://blog.echen.me/2017/05/30/exploring-lstms/
交流群
歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請(qǐng)按照格式備注,否則不予通過。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~

