RNN淺談

RNN淺談

簡介

首先,在了解循環(huán)神經(jīng)網(wǎng)絡(luò)之前我們應(yīng)該確認(rèn)自己是否需要一個專門用于處理信息序列的網(wǎng)絡(luò)以及這些網(wǎng)絡(luò)要實(shí)現(xiàn)哪些任務(wù)。

遞歸神經(jīng)網(wǎng)絡(luò)的優(yōu)點(diǎn)在于其應(yīng)用的多樣性。當(dāng)我們處理RNN時,他們具有處理各種輸入和輸出類型的強(qiáng)大能力。
  • 情感分類 —這可以是將推文簡單地分為正面和負(fù)面情緒的任務(wù)。因此,這里的輸入將是不同長度的推文,而輸出是固定類型和大小的。

    23724ac3ca23b79ee117a287fe9ac882.png
  • 圖文字幕—這種情況我們只有一個輸入圖像,會產(chǎn)生一系列單詞或者單詞序列作為輸出。這里的圖像可能是固定大小的,但是輸出是對不同長度的描述

    c1c25bc02ec8878cbc62938a5be7f06d.png
  • 語音翻譯—利用RNN我們可以實(shí)現(xiàn)將漢語翻譯成英語等功能,每種語言都有自己的語義,并且同一句子的長度會有所不同,因此,這里的輸入和輸出長度是變化的。

    image

    因此,RNN可以用于將輸入映射到不同類型,長度的輸出并且在其應(yīng)用中相當(dāng)通用。

什么是遞歸神經(jīng)網(wǎng)絡(luò)

假設(shè)任務(wù)是預(yù)測句子中的下一個單詞,以最簡單的形式,我們有一個輸入層,一個隱藏層和一個輸出層。輸入層接收輸入,應(yīng)用隱藏層激活,然后我們最終接收輸出。
17bdbc2906a74d8cd4289de0314efc20.png
讓我們有一個更深的網(wǎng)絡(luò),其中存在多個隱藏層。因此,在這里,輸入層接收輸入,首先應(yīng)用隱藏層激活,然后將這些激活發(fā)送到下一個隱藏層,并通過這些層進(jìn)行連續(xù)激活以產(chǎn)生輸出。每個隱藏層都有自己的權(quán)重和偏差。

由于每個隱藏層都有自己的權(quán)重和激活,因此它們的行為獨(dú)立?,F(xiàn)在的目標(biāo)是確定連續(xù)輸入之間的關(guān)系。因此我們嘗試將輸入提供給隱藏層。
8b74621c4ad76cffbd9ebd2828b897bb.png
在這里,這些隱藏層的權(quán)重和偏差是不同的。因此,這些層中的每一層都是獨(dú)立運(yùn)行的,無法將其組合在一起。為了將這些隱藏層組合在一起,我們將對這些隱藏層具有相同的權(quán)重和偏差。
8e9d95c969758cc4672ea392e05566dc.png
現(xiàn)在,我們可以將這些層組合在一起,以使所有隱藏層的權(quán)重和偏差相同。所有這些隱藏層都可以在單個循環(huán)層中一起滾動。
05e6b2753d8eb1217e4a7be8eb436e4f.png

因此,就像將輸入提供給隱藏層一樣。在所有時間步長上,由于現(xiàn)在的單個神經(jīng)元,遞歸神經(jīng)元的權(quán)重將相同。因此,循環(huán)神經(jīng)元存儲先前輸入的狀態(tài),并與當(dāng)前輸入組合,從而保留當(dāng)前輸入與先前輸入的某種關(guān)系。

詳細(xì)了解復(fù)發(fā)性神經(jīng)元

首先讓我們執(zhí)行一個簡單的任務(wù)。讓我們以字符級RNN為例,其中有一個單詞“ Hello”。因此,我們提供了前4個字母,即h,e,l,l,并要求網(wǎng)絡(luò)預(yù)測最后一個字母,即“ o”。因此,這里的任務(wù)詞匯只有4個字母{h,e,l,o}。在涉及自然語言處理的真實(shí)案例中,詞匯表包括整個Wikipedia數(shù)據(jù)庫中的單詞,或一種語言中的所有單詞。為簡單起見,在這里我們只采用了很小的一組詞匯。
c22e003f91436437fec05b60ce090b02.png
讓我們看看如何使用以上結(jié)構(gòu)預(yù)測單詞“ hello”中的第五個字母。在上述結(jié)構(gòu)中,藍(lán)色RNN塊將稱為遞歸公式的內(nèi)容應(yīng)用于輸入向量及其先前狀態(tài)。在這種情況下,字母“ h”前面沒有任何內(nèi)容,讓我們以字母“ e”為例。因此,在將字母“ e”提供給網(wǎng)絡(luò)時,將遞歸公式應(yīng)用于字母“ e”和之前的狀態(tài)即字母“ h”。這些被稱為輸入的各種時間步長。因此,如果在時間t處輸入為“ e”,那么在時間t-1處輸入為“ h”。遞歸公式適用于e和h。我們得到一個新的狀態(tài)。

當(dāng)前狀態(tài)的公式可以寫成–
9498174ae6f28ee5ef1208a7c8c60279.png
在此,Ht是新狀態(tài),ht-1是先前狀態(tài),而xt是當(dāng)前輸入?,F(xiàn)在,我們有了前一個輸入的狀態(tài),而不是輸入本身,因?yàn)檩斎肷窠?jīng)元會將變換應(yīng)用于我們的前一個輸入。因此,每個連續(xù)的輸入都稱為一個時間步。

在這種情況下,我們有四個輸入要提供給網(wǎng)絡(luò),在遞歸公式期間,每個時間步都將相同的函數(shù)和相同的權(quán)重應(yīng)用于網(wǎng)絡(luò)。

以遞歸神經(jīng)網(wǎng)絡(luò)的最簡單形式,假設(shè)激活函數(shù)為tanh,遞歸神經(jīng)元的權(quán)重為Whh,輸入神經(jīng)元的權(quán)重為Wxh,我們可以將時間t處的狀態(tài)方程寫為–

571fc9a152483420bf4f090a21780798.png
在這種情況下,循環(huán)神經(jīng)元只是考慮了先前的狀態(tài)。對于更長的序列,方程式可以包含多個這樣的狀態(tài)。一旦計算出最終狀態(tài),我們就可以繼續(xù)產(chǎn)生輸出

現(xiàn)在,一旦計算出當(dāng)前狀態(tài),我們就可以將輸出狀態(tài)計算為:
1db1735c597c02452ecc9fe25a61db0a.png
總結(jié)一下循環(huán)神經(jīng)元中的步驟:
  • 1 輸入的單個時間步長被提供給網(wǎng)絡(luò),即xt被提供給網(wǎng)絡(luò)
  • 2 然后,我們使用當(dāng)前輸入和先前狀態(tài)的組合來計算其當(dāng)前狀態(tài),即我們計算ht
  • 3 當(dāng)前ht在下一時間步變?yōu)閔t-1
  • 4 我們可以根據(jù)問題的需要采取許多時間步驟,并結(jié)合之前所有狀態(tài)的信息
  • 5 完成所有時間步長后,將使用最終當(dāng)前狀態(tài)來計算輸出yt
  • 6 然后將輸出與實(shí)際輸出進(jìn)行比較,并產(chǎn)生錯誤
  • 7 然后將錯誤反向傳播到網(wǎng)絡(luò)以更新權(quán)重,并對網(wǎng)絡(luò)進(jìn)行訓(xùn)練

消失和爆炸梯度的問題

RNN根據(jù)信息的結(jié)果取決于其先前狀態(tài)或先前n個時間步長這一事實(shí)進(jìn)行工作。常規(guī)RNN可能難以學(xué)習(xí)遠(yuǎn)程依賴關(guān)系。例如,如果我們有一個句子,例如“吃我的披薩的男人的頭發(fā)是紫色的”。在這種情況下,紫色頭發(fā)的描述是給男人的,而不是披薩的。因此,這是一個長期依賴。

如果在這種情況下向后傳播錯誤,則需要應(yīng)用鏈?zhǔn)揭?guī)則。要在相對于第一個時間步的第三時間步后計算誤差,?E/?W=?E/?y3*?y3/?h3*?h3/?y2*?y2/?h1..并且存在長的依存關(guān)系。

在這里,我們應(yīng)用鏈?zhǔn)椒▌t,如果任何一個梯度接近0,由于相乘,所有梯度將以指數(shù)級速度快速趨于零。這樣的狀態(tài)將不再幫助網(wǎng)絡(luò)學(xué)習(xí)任何東西。這被稱為消失梯度問題。
d23088f1867356cb416707223159a218.png
與爆炸梯度問題相比,消失梯度問題更具威脅性,爆炸爆炸問題由于單個或多個梯度值變得很高而變得非常大。

消失梯度問題之所以引起更多關(guān)注,是因?yàn)榭梢酝ㄟ^將梯度剪切為預(yù)定閾值來輕松解決爆炸梯度問題。幸運(yùn)的是,還有一些方法可以解決消失的梯度問題。諸如LSTM(長期短期記憶)和GRU(門控循環(huán)單元)之類的體系結(jié)構(gòu)可用于解決梯度消失的問題。

其他RNN架構(gòu)

如我們所見,當(dāng)我們要求RNN處理長期依賴關(guān)系時,它們會遭受梯度消失的困擾。隨著參數(shù)數(shù)量變得非常大,它們也變得非常難以訓(xùn)練。如果我們展開網(wǎng)絡(luò),它會變得如此龐大,以至于其融合是一個挑戰(zhàn)。

長短期內(nèi)存網(wǎng)絡(luò)(通常稱為“ LSTM”)是一種特殊的RNN,能夠?qū)W習(xí)長期依賴關(guān)系。它們是由Hochreiter&Schmidhuber介紹的。它們在處理各種各樣的問題上表現(xiàn)出色,現(xiàn)已被廣泛使用。LSTM也具有這種鏈狀結(jié)構(gòu),但是重復(fù)模塊的結(jié)構(gòu)略有不同。而不是只有一個神經(jīng)網(wǎng)絡(luò)層,而是有多層,它們以非常特殊的方式進(jìn)行交互。它們具有輸入門,忘記門和輸出門。

另一種有效的RNN架構(gòu)是門控循環(huán)單元,即GRU。它們是LSTM的變體,但結(jié)構(gòu)更簡單且易于訓(xùn)練。它們的成功主要?dú)w功于控制網(wǎng)絡(luò)信號的門控網(wǎng)絡(luò)信號,這些信號如何使用當(dāng)前輸入和先前的內(nèi)存來更新當(dāng)前激活并產(chǎn)生當(dāng)前狀態(tài)。這些門具有自己的權(quán)重集,這些權(quán)重集會在學(xué)習(xí)階段進(jìn)行自適應(yīng)更新。我們這里只有兩個門,重置是更新門。

新的RNN架構(gòu)我還沒有很好的了解,有時間會繼續(xù)更新這兩種RNN架構(gòu)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容