
入門(mén) | 一文簡(jiǎn)述循環(huán)神經(jīng)網(wǎng)絡(luò)
本文簡(jiǎn)要介紹了什么是循環(huán)神經(jīng)網(wǎng)絡(luò)及其運(yùn)行原理,并給出了一個(gè) RNN 實(shí)現(xiàn)示例。
什么是循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)?它們?nèi)绾芜\(yùn)行?可以用在哪里呢?本文試圖回答上述這些問(wèn)題,還展示了一個(gè) RNN 實(shí)現(xiàn) demo,你可以根據(jù)自己的需要進(jìn)行擴(kuò)展。
循環(huán)神經(jīng)網(wǎng)絡(luò)架構(gòu)
基礎(chǔ)知識(shí)。Python、CNN 知識(shí)是必備的。了解 CNN 的相關(guān)知識(shí),是為了與 RNN 進(jìn)行對(duì)比:RNN 為什么以及在哪些地方比 CNN 更好。
我們首先從「循環(huán)」(Recurrent)這個(gè)詞說(shuō)起。為什么將其稱為循環(huán)?循環(huán)的意思是:
經(jīng)常或重復(fù)出現(xiàn)
將這類(lèi)神經(jīng)網(wǎng)絡(luò)稱為循環(huán)神經(jīng)網(wǎng)絡(luò)是因?yàn)樗鼘?duì)一組序列輸入重復(fù)進(jìn)行同樣的操作。本文后續(xù)部分將討論這種操作的意義。
我們?yōu)槭裁葱枰?RNN?
也許你現(xiàn)在想的是,已經(jīng)有像卷積網(wǎng)絡(luò)這樣表現(xiàn)非常出色的網(wǎng)絡(luò)了,為什么還需要其他類(lèi)型的網(wǎng)絡(luò)呢?有一個(gè)需要用到 RNN 的特殊例子。為了解釋 RNN,你首先需要了解序列的相關(guān)知識(shí),我們先來(lái)講一下序列。
序列是相互依賴的(有限或無(wú)限)數(shù)據(jù)流,比如時(shí)間序列數(shù)據(jù)、信息性的字符串、對(duì)話等。在對(duì)話中,一個(gè)句子可能有一個(gè)意思,但是整體的對(duì)話可能又是完全不同的意思。股市數(shù)據(jù)這樣的時(shí)間序列數(shù)據(jù)也是,單個(gè)數(shù)據(jù)表示當(dāng)前價(jià)格,但是全天的數(shù)據(jù)會(huì)有不一樣的變化,促使我們作出買(mǎi)進(jìn)或賣(mài)出的決定。
當(dāng)輸入數(shù)據(jù)具有依賴性且是序列模式時(shí),CNN 的結(jié)果一般都不太好。CNN 的前一個(gè)輸入和下一個(gè)輸入之間沒(méi)有任何關(guān)聯(lián)。所以所有的輸出都是獨(dú)立的。CNN 接受輸入,然后基于訓(xùn)練好的模型輸出。如果你運(yùn)行了 100 個(gè)不同的輸入,它們中的任何一個(gè)輸出都不會(huì)受之前輸出的影響。但想一下如果是文本生成或文本翻譯呢?所有生成的單詞與之前生成的單詞都是獨(dú)立的(有些情況下與之后的單詞也是獨(dú)立的,這里暫不討論)。所以你需要有一些基于之前輸出的偏向。這就是需要 RNN 的地方。RNN 對(duì)之前發(fā)生在數(shù)據(jù)序列中的事是有一定記憶的。這有助于系統(tǒng)獲取上下文。理論上講,RNN 有無(wú)限的記憶,這意味著它們有無(wú)限回顧的能力。通過(guò)回顧可以了解所有之前的輸入。但從實(shí)際操作中看,它只能回顧最后幾步。
本文僅為了與人類(lèi)大體相關(guān)聯(lián),而不會(huì)做任何決定。本文只是基于之前關(guān)于該項(xiàng)目的知識(shí)做出了自己的判斷(我甚至尚未理解人類(lèi)大腦的 0.1%)。
何時(shí)使用 RNN?
RNN 可用于許多不同的地方。下面是 RNN 應(yīng)用最多的領(lǐng)域。
1. 語(yǔ)言建模和文本生成
給出一個(gè)詞語(yǔ)序列,試著預(yù)測(cè)下一個(gè)詞語(yǔ)的可能性。這在翻譯任務(wù)中是很有用的,因?yàn)樽钣锌赡艿木渥訉⑹强赡苄宰罡叩膯卧~組成的句子。
2. 機(jī)器翻譯
將文本內(nèi)容從一種語(yǔ)言翻譯成其他語(yǔ)言使用了一種或幾種形式的 RNN。所有日常使用的實(shí)用系統(tǒng)都用了某種高級(jí)版本的 RNN。
3. 語(yǔ)音識(shí)別
基于輸入的聲波預(yù)測(cè)語(yǔ)音片段,從而確定詞語(yǔ)。
4. 生成圖像描述
RNN 一個(gè)非常廣泛的應(yīng)用是理解圖像中發(fā)生了什么,從而做出合理的描述。這是 CNN 和 RNN 相結(jié)合的作用。CNN 做圖像分割,RNN 用分割后的數(shù)據(jù)重建描述。這種應(yīng)用雖然基本,但可能性是無(wú)窮的。
5. 視頻標(biāo)記
可以通過(guò)一幀一幀地標(biāo)記視頻進(jìn)行視頻搜索。
深入挖掘
本文按照以下主題進(jìn)行。每一部分都是基于之前的部分進(jìn)行的,所以不要跳著讀。
前饋網(wǎng)絡(luò)入門(mén)
前饋網(wǎng)絡(luò)通過(guò)在網(wǎng)絡(luò)的每個(gè)節(jié)點(diǎn)上做出的一系列操作傳遞信息。前饋網(wǎng)絡(luò)每次通過(guò)每個(gè)層直接向后傳遞信息。這與其他循環(huán)神經(jīng)網(wǎng)絡(luò)不同。一般而言,前饋網(wǎng)絡(luò)接受一個(gè)輸入并據(jù)此產(chǎn)生輸出,這也是大多數(shù)監(jiān)督學(xué)習(xí)的步驟,輸出結(jié)果可能是一個(gè)分類(lèi)結(jié)果。它的行為與 CNN 類(lèi)似。輸出可以是以貓狗等作為標(biāo)簽的類(lèi)別。
前饋網(wǎng)絡(luò)是基于一系列預(yù)先標(biāo)注過(guò)的數(shù)據(jù)訓(xùn)練的。訓(xùn)練階段的目的是減少前饋網(wǎng)絡(luò)猜類(lèi)別時(shí)的誤差。一旦訓(xùn)練完成,我們就可以用訓(xùn)練后的權(quán)重對(duì)新批次的數(shù)據(jù)進(jìn)行分類(lèi)。
一個(gè)典型的前饋網(wǎng)絡(luò)架構(gòu)
還有一件事要注意。在前饋網(wǎng)絡(luò)中,無(wú)論在測(cè)試階段展示給分類(lèi)器的圖像是什么,都不會(huì)改變權(quán)重,所以也不會(huì)影響第二個(gè)決策。這是前饋網(wǎng)絡(luò)和循環(huán)網(wǎng)絡(luò)之間一個(gè)非常大的不同。
與循環(huán)網(wǎng)絡(luò)不同,前饋網(wǎng)絡(luò)在測(cè)試時(shí)不會(huì)記得之前的輸入數(shù)據(jù)。它們始終是取決于時(shí)間點(diǎn)的。它們只會(huì)在訓(xùn)練階段記得歷史輸入數(shù)據(jù)。
循環(huán)網(wǎng)絡(luò)
也就是說(shuō),循環(huán)網(wǎng)絡(luò)不僅將當(dāng)前的輸入樣例作為網(wǎng)絡(luò)輸入,還將它們之前感知到的一并作為輸入。
我們?cè)囍⒘艘粋€(gè)多層感知器。從簡(jiǎn)單的角度講,它有一個(gè)輸入層、一個(gè)具備特定激活函數(shù)的隱藏層,最終可以得到輸出。
多層感知器架構(gòu)示例
如果在上述示例中的層數(shù)增加了,輸入層也接收輸入。那么第一個(gè)隱藏層將激活傳遞到下一個(gè)隱藏層上,依此類(lèi)推。最后到達(dá)輸出層。每一個(gè)隱藏層都有自己的權(quán)重和偏置項(xiàng)?,F(xiàn)在問(wèn)題變成了我們可以輸入到隱藏層嗎?
每一層都有自己的權(quán)重(W)、偏置項(xiàng)(B)和激活函數(shù)(F)。這些層的行為不同,合并它們從技術(shù)層面上講也極具挑戰(zhàn)性。為了合并它們,我們將所有層的權(quán)重和偏置項(xiàng)替換成相同的值。如下圖所示:
現(xiàn)在我們就可以將所有層合并在一起了。所有的隱藏層都可以結(jié)合在一個(gè)循環(huán)層中。所以看起來(lái)就像下圖:
我們?cè)诿恳徊蕉紩?huì)向隱藏層提供輸入。現(xiàn)在一個(gè)循環(huán)神經(jīng)元存儲(chǔ)了所有之前步的輸入,并將這些信息和當(dāng)前步的輸入合并。因此,它還捕獲到一些當(dāng)前數(shù)據(jù)步和之前步的相關(guān)性信息。t-1 步的決策影響到第 t 步做的決策。這很像人類(lèi)在生活中做決策的方式。我們將當(dāng)前數(shù)據(jù)和近期數(shù)據(jù)結(jié)合起來(lái),幫助解決手頭的特定問(wèn)題。這個(gè)例子很簡(jiǎn)單,但從原則上講這與人類(lèi)的決策能力是一致的。這讓我非常想知道我們作為人類(lèi)是否真的很智能,或者說(shuō)我們是否有非常高級(jí)的神經(jīng)網(wǎng)絡(luò)模型。我們做出的決策只是對(duì)生活中收集到的數(shù)據(jù)進(jìn)行訓(xùn)練。那么一旦有了能夠在合理時(shí)間段內(nèi)存儲(chǔ)和計(jì)算數(shù)據(jù)的先進(jìn)模型和系統(tǒng)時(shí),是否可以數(shù)字化大腦呢?所以當(dāng)我們有了比大腦更好更快的模型(基于數(shù)百萬(wàn)人的數(shù)據(jù)訓(xùn)練出的)時(shí),會(huì)發(fā)生什么?
另一篇文章(https://deeplearning4j.org/lstm.html)的有趣觀點(diǎn):人總是被自己的行為所困擾。
我們用一個(gè)例子來(lái)闡述上面的解釋?zhuān)@個(gè)例子是預(yù)測(cè)一系列字母后的下一個(gè)字母。想象一個(gè)有 8 個(gè)字母的單詞 namaskar。
namaskar(合十禮):印度表示尊重的傳統(tǒng)問(wèn)候或姿勢(shì),將手掌合起置于面前或胸前鞠躬。
如果我們?cè)谙蚓W(wǎng)絡(luò)輸入 7 個(gè)字母后試著找出第 8 個(gè)字母,會(huì)發(fā)生什么呢?隱藏層會(huì)經(jīng)歷 8 次迭代。如果展開(kāi)網(wǎng)絡(luò)的話就是一個(gè) 8 層的網(wǎng)絡(luò),每一層對(duì)應(yīng)一個(gè)字母。所以你可以想象一個(gè)普通的神經(jīng)網(wǎng)絡(luò)被重復(fù)了多次。展開(kāi)的次數(shù)與它記得多久之前的數(shù)據(jù)是直接相關(guān)的。
循環(huán)神經(jīng)網(wǎng)絡(luò)的運(yùn)作原理
循環(huán)神經(jīng)元
這里我們將更深入地了解負(fù)責(zé)決策的實(shí)際神經(jīng)元。以之前提到的 namaskar 為例,在給出前 7 個(gè)字母后,試著找出第 8 個(gè)字母。輸入數(shù)據(jù)的完整詞匯表是 {n,a,m,s,k,r}。在真實(shí)世界中單詞或句子都會(huì)更復(fù)雜。為了簡(jiǎn)化問(wèn)題,我們用的是下面這個(gè)簡(jiǎn)單的詞匯表。
在上圖中,隱藏層或 RNN 塊在當(dāng)前輸入和之前的狀態(tài)中應(yīng)用了公式。在本例中,namaste 的字母 n 前面什么都沒(méi)有。所以我們直接使用當(dāng)前信息推斷,并移動(dòng)到下一個(gè)字母 a。在推斷字母 a 的過(guò)程中,隱藏層應(yīng)用了上述公式結(jié)合當(dāng)前推斷 a 的信息與前面推斷 n 的信息。輸入在網(wǎng)絡(luò)中傳遞的每一個(gè)狀態(tài)都是一個(gè)時(shí)間步或一步,所以時(shí)間步 t 的輸入是 a,時(shí)間步 t-1 的輸入就是 n。將公式同時(shí)應(yīng)用于 n 和 a 后,就得到了一個(gè)新?tīng)顟B(tài)。
用于當(dāng)前狀態(tài)的公式如下所示:
h_t 是新?tīng)顟B(tài),h_t-1 是前一個(gè)狀態(tài)。x_t 是時(shí)間 t 時(shí)的輸入。在對(duì)之前的時(shí)間步應(yīng)用了相同的公式后,我們已經(jīng)能感知到之前的輸入了。我們將檢查 7 個(gè)這樣的輸入,它們?cè)诿恳徊降臋?quán)重和函數(shù)都是相同的。
現(xiàn)在試著以簡(jiǎn)單的方式定義 f()。我們使用 tanh 激活函數(shù)。通過(guò)矩陣 W_hh 定義權(quán)重,通過(guò)矩陣 W_xh 定義輸入。公式如下所示:
上例只將最后一步作為記憶,因此只與最后一步的數(shù)據(jù)合并。為了提升網(wǎng)絡(luò)的記憶能力,并在記憶中保留較長(zhǎng)的序列,我們必須在方程中添加更多的狀態(tài),如 h_t-2、h_t-3 等。最后輸出可以按測(cè)試階段的計(jì)算方式進(jìn)行計(jì)算:
其中,y_t 是輸出。對(duì)輸出與實(shí)際輸出進(jìn)行對(duì)比,然后計(jì)算出誤差值。網(wǎng)絡(luò)通過(guò)反向傳播誤差來(lái)更新權(quán)重,進(jìn)行學(xué)習(xí)。本文后續(xù)部分會(huì)對(duì)反向傳播進(jìn)行討論。
基于時(shí)間的反向傳播算法(BPTT)
本節(jié)默認(rèn)你已經(jīng)了解了反向傳播概念。如果需要對(duì)反向傳播進(jìn)行深入了解,請(qǐng)參閱鏈接:?http://cs231n.github.io/optimization-2/?。
現(xiàn)在我們了解了 RNN 是如何實(shí)際運(yùn)作的,但是在實(shí)際工作中如何訓(xùn)練 RNN 呢?該如何決定每個(gè)連接的權(quán)重呢?如何初始化這些隱藏單元的權(quán)重呢?循環(huán)網(wǎng)絡(luò)的目的是要準(zhǔn)確地對(duì)序列輸入進(jìn)行分類(lèi)。這要靠誤差值的反向傳播和梯度下降來(lái)實(shí)現(xiàn)。但是前饋網(wǎng)絡(luò)中使用的標(biāo)準(zhǔn)反向傳播無(wú)法在此應(yīng)用。
與有向無(wú)環(huán)的前饋網(wǎng)絡(luò)不同,RNN 是循環(huán)圖,這也是問(wèn)題所在。在前饋網(wǎng)絡(luò)中可以計(jì)算出之前層的誤差導(dǎo)數(shù)。但 RNN 的層級(jí)排列與前饋網(wǎng)絡(luò)并不相同。
答案就在之前討論過(guò)的內(nèi)容中。我們需要展開(kāi)網(wǎng)絡(luò)。展開(kāi)網(wǎng)絡(luò)使其看起來(lái)像前饋網(wǎng)絡(luò)就可以了。
展開(kāi) RNN
在每個(gè)時(shí)間步取出 RNN 的隱藏單元并復(fù)制。時(shí)間步中的每一次復(fù)制就像前饋網(wǎng)絡(luò)中的一層。在時(shí)間步 t+1 中每個(gè)時(shí)間步 t 層與所有可能的層連接。因此我們對(duì)權(quán)重進(jìn)行隨機(jī)初始化,展開(kāi)網(wǎng)絡(luò),然后在隱藏層中通過(guò)反向傳播優(yōu)化權(quán)重。通過(guò)向最低層傳遞參數(shù)完成初始化。這些參數(shù)作為反向傳播的一部分也得到了優(yōu)化。
展開(kāi)網(wǎng)絡(luò)的結(jié)果是,現(xiàn)在每一層的權(quán)重都不同,因此最終會(huì)得到不同程度的優(yōu)化。無(wú)法保證基于權(quán)重計(jì)算出的誤差是相等的。所以每一次運(yùn)行結(jié)束時(shí)每一層的權(quán)重都不同。這是我們絕對(duì)不希望看到的。最簡(jiǎn)單的解決辦法是以某種方式將所有層的誤差合并到一起??梢詫?duì)誤差值取平均或者求和。通過(guò)這種方式,我們可以在所有時(shí)間步中使用一層來(lái)保持相同的權(quán)重。
RNN 實(shí)現(xiàn)
本文試著用 Keras 模型實(shí)現(xiàn) RNN。我們?cè)囍鶕?jù)給定的文本預(yù)測(cè)下一個(gè)序列。
代碼地址:?https://gist.github.com/09aefc5231972618d2c13ccedb0e22cc.git?
該模型是 Yash Katariya 建的。我對(duì)該模型做了一些細(xì)微的改動(dòng)以適合本文的要求。
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專(zhuān)注于從單 ...
2025-07-09year_month數(shù)據(jù)類(lèi)型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類(lèi)型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門(mén)控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書(shū)考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專(zhuān)業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開(kāi)啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03