【深度学习】循环神经网络(RNN)简易教程
文章來源于磐創(chuàng)AI,作者VK
? 磐創(chuàng)AI分享??
作者 | Renu Khandelwal?
編譯 | VK?
來源 | Medium
我們從以下問題開始
循環(huán)神經(jīng)網(wǎng)絡(luò)能解決人工神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)存在的問題。
在哪里可以使用RNN?
RNN是什么以及它是如何工作的?
挑戰(zhàn)RNN的消梯度失和梯度爆炸
LSTM和GRU如何解決這些挑戰(zhàn)
假設(shè)我們正在寫一條信息“Let’s meet for___”,我們需要預(yù)測下一個單詞是什么。下一個詞可以是午餐、晚餐、早餐或咖啡。我們更容易根據(jù)上下文作出推論。假設(shè)我們知道我們是在下午開會,并且這些信息一直存在于我們的記憶中,那么我們就可以很容易地預(yù)測我們可能會在午餐時見面。
當(dāng)我們需要處理需要在多個時間步上的序列數(shù)據(jù)時,我們使用循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)
傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)和CNN需要一個固定的輸入向量,在固定的層集上應(yīng)用激活函數(shù)產(chǎn)生固定大小的輸出。
例如,我們使用128×128大小的向量的輸入圖像來預(yù)測狗、貓或汽車的圖像。我們不能用可變大小的圖像來做預(yù)測
現(xiàn)在,如果我們需要對依賴于先前輸入狀態(tài)(如消息)的序列數(shù)據(jù)進(jìn)行操作,或者序列數(shù)據(jù)可以在輸入或輸出中,或者同時在輸入和輸出中,而這正是我們使用RNNs的地方,該怎么辦。
在RNN中,我們共享權(quán)重并將輸出反饋給循環(huán)輸入,這種循環(huán)公式有助于處理序列數(shù)據(jù)。
RNN利用連續(xù)的數(shù)據(jù)來推斷誰在說話,說什么,下一個單詞可能是什么等等。
RNN是一種神經(jīng)網(wǎng)絡(luò),具有循環(huán)來保存信息。RNN被稱為循環(huán),因為它們對序列中的每個元素執(zhí)行相同的任務(wù),并且輸出元素依賴于以前的元素或狀態(tài)。這就是RNN如何持久化信息以使用上下文來推斷。
RNN是一種具有循環(huán)的神經(jīng)網(wǎng)絡(luò)
RNN在哪里使用?
前面所述的RNN可以有一個或多個輸入和一個或多個輸出,即可變輸入和可變輸出。
RNN可用于
分類圖像
圖像采集
機(jī)器翻譯
視頻分類
情緒分析
RNN是如何工作的?
先解釋符號。
h是隱藏狀態(tài)
x為輸入
y為輸出
W是權(quán)重
t是時間步長
當(dāng)我們在處理序列數(shù)據(jù)時,RNN在時間步t上取一個輸入x。RNN在時間步t-1上取隱藏狀態(tài)值來計算時間步t上的隱藏狀態(tài)h并應(yīng)用tanh激活函數(shù)。我們使用tanh或ReLU來表示輸出和時間t的非線性關(guān)系。
將RNN展開為四層神經(jīng)網(wǎng)絡(luò),每一步共享權(quán)值矩陣W。
隱藏狀態(tài)連接來自前一個狀態(tài)的信息,因此充當(dāng)RNN的記憶。任何時間步的輸出都取決于當(dāng)前輸入以及以前的狀態(tài)。
與其他對每個隱藏層使用不同參數(shù)的深層神經(jīng)網(wǎng)絡(luò)不同,RNN在每個步驟共享相同的權(quán)重參數(shù)。
我們隨機(jī)初始化權(quán)重矩陣,在訓(xùn)練過程中,我們需要找到矩陣的值,使我們有理想的行為,所以我們計算損失函數(shù)L。損失函數(shù)L是通過測量實際輸出和預(yù)測輸出之間的差異來計算的。用交叉熵函數(shù)計算L。
RNN,其中損失函數(shù)L是各層所有損失的總和
為了減少損失,我們使用反向傳播,但與傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)不同,RNN在多個層次上共享權(quán)重,換句話說,它在所有時間步驟上共享權(quán)重。這樣,每一步的誤差梯度也取決于前一步的損失。
在上面的例子中,為了計算第4步的梯度,我們需要將前3步的損失和第4步的損失相加。這稱為通過Time-BPPT的反向傳播。
我們計算誤差相對于權(quán)重的梯度,來為我們學(xué)習(xí)正確的權(quán)重,為我們獲得理想的輸出。
因為W在每一步中都被用到,直到最后的輸出,我們從t=4反向傳播到t=0。在傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)中,我們不共享權(quán)重,因此不需要對梯度進(jìn)行求和,而在RNN中,我們共享權(quán)重,并且我們需要在每個時間步上對W的梯度進(jìn)行求和。
在時間步t=0計算h的梯度涉及W的許多因素,因為我們需要通過每個RNN單元反向傳播。即使我們不要權(quán)重矩陣,并且一次又一次地乘以相同的標(biāo)量值,但是時間步如果特別大,比如說100個時間步,這將是一個挑戰(zhàn)。
如果最大奇異值大于1,則梯度將爆炸,稱為爆炸梯度。
如果最大奇異值小于1,則梯度將消失,稱為消失梯度。
權(quán)重在所有層中共享,導(dǎo)致梯度爆炸或消失
對于梯度爆炸問題,我們可以使用梯度剪裁,其中我們可以預(yù)先設(shè)置一個閾值,如果梯度值大于閾值,我們可以剪裁它。
為了解決消失梯度問題,常用的方法是使用長短期記憶(LSTM)或門控循環(huán)單元(GRU)。
在我們的消息示例中,為了預(yù)測下一個單詞,我們需要返回幾個時間步驟來了解前面的單詞。我們有可能在兩個相關(guān)信息之間有足夠的差距。隨著差距的擴(kuò)大,RNN很難學(xué)習(xí)和連接信息。但這反而是LSTM的強大功能。
長短時記憶網(wǎng)絡(luò)(LSTM)
LSTMs能夠更快地學(xué)習(xí)長期依賴關(guān)系。LSTMs可以學(xué)習(xí)跨1000步的時間間隔。這是通過一種高效的基于梯度的算法實現(xiàn)的。
為了預(yù)測消息中的下一個單詞,我們可以將上下文存儲到消息的開頭,這樣我們就有了正確的上下文。這正是我們記憶的工作方式。
讓我們深入了解一下LSTM架構(gòu),了解它是如何工作的
LSTMs的行為是在很長一段時間內(nèi)記住信息,因此它需要知道要記住什么和忘記什么。
LSTM使用4個門,你可以將它們認(rèn)為是否需要記住以前的狀態(tài)。單元狀態(tài)在LSTMs中起著關(guān)鍵作用。LSTM可以使用4個調(diào)節(jié)門來決定是否要從單元狀態(tài)添加或刪除信息。
這些門的作用就像水龍頭,決定了應(yīng)該通過多少信息。
LSTM的第一步是決定我們是需要記住還是忘記單元的狀態(tài)。遺忘門使用Sigmoid激活函數(shù),輸出值為0或1。遺忘門的輸出1告訴我們要保留該值,值0告訴我們要忘記該值。
第二步?jīng)Q定我們將在單元狀態(tài)中存儲哪些新信息。這有兩部分:一部分是輸入門,它通過使用sigmoid函數(shù)決定是否寫入單元狀態(tài);另一部分是使用tanh激活函數(shù)決定有哪些新信息被加入。
在最后一步中,我們通過組合步驟1和步驟2的輸出來創(chuàng)建單元狀態(tài),步驟1和步驟2的輸出是將當(dāng)前時間步的tanh激活函數(shù)應(yīng)用于輸出門的輸出后乘以單元狀態(tài)。Tanh激活函數(shù)給出-1和+1之間的輸出范圍
單元狀態(tài)是單元的內(nèi)部存儲器,它將先前的單元狀態(tài)乘以遺忘門,然后將新計算的隱藏狀態(tài)(g)乘以輸入門i的輸出。
最后,輸出將基于單元狀態(tài)
從當(dāng)前單元狀態(tài)到前一單元狀態(tài)的反向傳播只有遺忘門的單元相乘,沒有W的矩陣相乘,這就利用單元狀態(tài)消除了消失和爆炸梯度問題
LSTM通過決定忘記什么、記住什么、更新哪些信息來決定何時以及如何在每個時間步驟轉(zhuǎn)換記憶。這就是LSTMs如何幫助存儲長期記憶。
以下LSTM如何對我們的消息進(jìn)行預(yù)測的示例
GRU,LSTM的變體
GRU使用兩個門,重置門和一個更新門,這與LSTM中的三個步驟不同。GRU沒有內(nèi)部記憶
重置門決定如何將新輸入與前一個時間步的記憶相結(jié)合。
更新門決定了應(yīng)該保留多少以前的記憶。更新門是我們在LSTM中理解的輸入門和遺忘門的組合。
GRU是求解消失梯度問題的LSTM的一個簡單變種
原文鏈接:https://medium.com/datadriveninvestor/recurrent-neural-network-rnn-52dd4f01b7e8
?------------------------------------------------
看到這里,說明你喜歡這篇文章,請點擊「在看」或順手「轉(zhuǎn)發(fā)」「點贊」。
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊深度學(xué)習(xí)筆記專輯《統(tǒng)計學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯獲取一折本站知識星球優(yōu)惠券,復(fù)制鏈接直接打開:https://t.zsxq.com/yFQV7am本站qq群1003271085。加入微信群請掃碼進(jìn)群:總結(jié)
以上是生活随笔為你收集整理的【深度学习】循环神经网络(RNN)简易教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python】值得推荐的12个jupy
- 下一篇: 【机器学习基础】数学推导+纯Python