AI入門:循環(huán)神經(jīng)網(wǎng)絡(luò)

JM
0 評(píng)論 8843 瀏覽 29 收藏 11 分鐘

今天我們主要討論的循環(huán)神經(jīng)網(wǎng)絡(luò),到底循環(huán)神經(jīng)網(wǎng)絡(luò)能解決什么問題,它的結(jié)構(gòu)是怎樣的?有什么優(yōu)缺點(diǎn)?應(yīng)該在那些領(lǐng)域上上?本文將跟大家一起探討。

講到AI不得不講深度學(xué)習(xí),而講到深度學(xué)習(xí),又不能不講循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network, RNN)。如果把深度學(xué)習(xí)比作中國的互聯(lián)網(wǎng)界,那循環(huán)神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)就是騰訊和阿里級(jí)別的地位。

看這篇文章之前,建議大家先看下我前面寫的兩篇文章《深度學(xué)習(xí)到底有多深?》、《入門AI:卷積神經(jīng)網(wǎng)絡(luò)》,本文討論的內(nèi)容跟前面寫的文章有很強(qiáng)的關(guān)聯(lián)性,看完可能更容易理解本文所討論的內(nèi)容。

照例,先給個(gè)概述圖:

為了方便,在下文中我們用RNN來表示循環(huán)神經(jīng)網(wǎng)絡(luò)。

一、為什么需要RNN?

我們先來看一個(gè)訂票系統(tǒng):

假設(shè)我們?cè)谟喥毕到y(tǒng)中輸入一句話“我將在7月20號(hào)去深圳”,那么訂票系統(tǒng)就會(huì)這句話中的詞進(jìn)行分類,專業(yè)術(shù)語叫填槽(slot filling)。

那訂票系統(tǒng)會(huì)把這些詞分別填到3個(gè)槽中:

  • 目的地:深圳
  • 時(shí)間:7月20號(hào)
  • 其他類型:我、將、在、去

補(bǔ)充下神經(jīng)網(wǎng)絡(luò)的知識(shí),要實(shí)現(xiàn)這個(gè)分類的話,我們可以搭一個(gè)網(wǎng)絡(luò)架構(gòu)。

當(dāng)輸入“深圳”,經(jīng)過網(wǎng)絡(luò)系統(tǒng)后,會(huì)判斷出“深圳”屬于目的地槽的概率是多少,然后決定是否屬于目的地槽。

但是,假設(shè)我們?cè)佥斎肓硗庖痪湓挕拔覍⒃?月20號(hào)離開深圳”,機(jī)器能正確處理嗎?

對(duì)于普通的神經(jīng)網(wǎng)絡(luò),同樣的輸入,肯定會(huì)是同樣的輸出,因此如果同一個(gè)網(wǎng)絡(luò)輸入這兩句的“深圳”的話,那機(jī)器肯定會(huì)把他們歸到同一個(gè)槽,這樣肯定是錯(cuò)了。

那怎么辦?假設(shè)我們?cè)谳斎搿吧钲凇钡臅r(shí)候,機(jī)器根據(jù)上下文的詞,再輸出結(jié)果。這樣是不是有可能解決問題了,沒錯(cuò),這就是RNN要做的事。

具體RNN怎么工作的,接著往下看。

二、RNN的工作原理

1. RNN的工作原理

RNN的工作原理圖:

在神經(jīng)網(wǎng)絡(luò)里,每一個(gè)神經(jīng)元的輸出,都會(huì)被記得綠色的方塊里,然后下一次輸入的時(shí)候,不僅要考慮紅色的輸入,還要考慮被記在綠色里面的值。

也就是:新的輸出是由新的輸入和被之前所記下來的值所決定的。

這樣的話,我們前面所討論的問題就可以解決了:

當(dāng)輸入第一句話的“深圳”時(shí),我們記住前面輸入的是“去”,然后就把“深圳”歸為目的地。

當(dāng)輸入第二句話的“深圳”時(shí),我們記住前面輸入的是“離開”,然后就把“深圳”歸為出發(fā)地。

因此,我們可以看到RNN最主要的兩個(gè)特點(diǎn):

  • 新的輸出是由新的輸入和之前的輸出共同決定的。
  • 對(duì)于同一個(gè)輸入,可能會(huì)輸出不同的結(jié)果。

2. RNN的其他架構(gòu)

如上左圖的架構(gòu),是每一個(gè)神經(jīng)元的輸出都會(huì)被記起來。

如上右圖的架構(gòu),是網(wǎng)絡(luò)的最終輸出的值才會(huì)被記起來。

雙向RNN:

假設(shè)我輸入一句 “7月20號(hào),深圳,我來了”,如果用我們之前討論的網(wǎng)絡(luò),就可能有問題。因?yàn)橹暗木W(wǎng)絡(luò)只能考慮輸入在“深圳”之前的內(nèi)容,沒辦法考慮在“深圳”之后的內(nèi)容,而“來”在“深圳之后”,所以網(wǎng)絡(luò)就不知道“深圳”是目的還是出發(fā)地了。

那雙向RNN就可以解決這個(gè)問題:

雙向RNN是把同一句話,按正反兩個(gè)順序一起丟到網(wǎng)絡(luò)里去訓(xùn)練,然后綜合考慮正反兩個(gè)順序再?zèng)Q定輸出結(jié)果。因此,雙向RNN不僅考慮了前文,還考慮的后文。

到此為止,我們討論的都都是最簡單的RNN,但現(xiàn)實(shí)可能存在更加復(fù)雜的場(chǎng)景。

我們前面討論的都是輸入“深圳”只會(huì)考慮跟它相鄰的那個(gè)值,如果跟它相距比較遠(yuǎn),可能就沒辦法處理了,比如:我們輸入“離開了,7月20號(hào),我美麗的深圳”。

那要怎么解決這樣的問題呢?下面我們就來介紹下,RNN中最經(jīng)典,也是現(xiàn)在最常用的模型:LSTM(Long short-term memory)。

三、 LSTM

結(jié)構(gòu)圖:

由四部分組成:輸入門、輸出門、忘記門、記憶單元

  1. 輸入門(Input gate):決定外界能不能把數(shù)據(jù)寫入記憶單元,只有輸入門打開的時(shí)候,才能寫入數(shù)據(jù);
  2. 輸出門(Output gate):決定外界能不能從記憶單元里讀取數(shù)據(jù),只有輸出門打開的時(shí)候打,才能讀取數(shù)據(jù);
  3. 忘記門(Forget gate):決定什么時(shí)候把記憶單元里的數(shù)據(jù)清除,打開的時(shí)候是不清除的,關(guān)閉的時(shí)候就會(huì)清除;
  4. 記憶單元(Memory?cell):就是存儲(chǔ)數(shù)據(jù)。

每個(gè)門什么打開,什么時(shí)候關(guān)閉?都是機(jī)器自己學(xué)的。

具體的計(jì)算邏輯:

這個(gè)是純數(shù)學(xué)邏輯了,大家看下就好,看不明白也沒關(guān)系,入門不必深究。

從上圖我們可以看出,LSTM是需要4個(gè)輸入,才會(huì)有一個(gè)輸出的。

小結(jié):

LSTM最大的特點(diǎn)就是:可以有很長時(shí)間或距離的記憶能力,而普通的RNN不能記住間距大的信息。

除此之外,LSTM對(duì)還能對(duì)梯度消失和梯度爆炸有比較好的處理效果。

備注:對(duì)于不知道什么是梯度下降的同學(xué),可以翻下之前的文章。這里簡單介紹下什么是梯度消失和梯度爆炸。

梯度消失:誤差梯度的值變化得太小,沒辦法移動(dòng)了,導(dǎo)致機(jī)器停止學(xué)習(xí);

梯度爆炸:誤差梯度變化非常大,網(wǎng)絡(luò)參數(shù)大幅更新,導(dǎo)致網(wǎng)絡(luò)不穩(wěn)定。

四、總結(jié)

1. RNN小結(jié)

RNN是根據(jù)“人的認(rèn)知是基于過往經(jīng)驗(yàn)和記憶”這一觀點(diǎn)提出的,它不僅考慮當(dāng)前時(shí)刻的輸入,還考慮對(duì)前面內(nèi)容記憶。即RNN 對(duì)之前發(fā)生在數(shù)據(jù)序列中的事是有一定記憶的,對(duì)處理有序列的問題效果比較好。

2. RNN與CNN的不同點(diǎn)

前一輸入跟下一輸入是否有關(guān)聯(lián):

  • CNN :前一個(gè)輸入和下一個(gè)輸入之間沒有任何關(guān)聯(lián),因此所有的輸出都是獨(dú)立的。
  • RNN:前一個(gè)輸入和下一個(gè)輸入之間沒有任何關(guān)聯(lián),共同決定新的輸出

前饋或反饋網(wǎng)絡(luò):

  • CNN:屬于前饋神經(jīng)網(wǎng)絡(luò)
  • RNN:屬于反饋神經(jīng)網(wǎng)絡(luò)

備注:什么是前饋網(wǎng)絡(luò)?什么是反饋網(wǎng)絡(luò)?

前饋網(wǎng)絡(luò):每一層中的神經(jīng)元接收前一層神經(jīng)元的輸出,并輸出到下一層神經(jīng)元,整個(gè)網(wǎng)絡(luò)中的信息是朝著一個(gè)方向傳播的,沒有反向的信息傳播;

反饋網(wǎng)絡(luò):反饋神經(jīng)網(wǎng)絡(luò)中神經(jīng)元不但可以接收其他神經(jīng)元的信號(hào),而且可以接收自己的反饋信號(hào)。

3. RNN的主要應(yīng)用領(lǐng)域

用RNN處理需要考慮時(shí)間先后順序的問題,效果都很不錯(cuò),例如:

  • 自然語言處理(NLP)
  • 語音識(shí)別
  • 機(jī)器翻譯
  • 圖像描述生成
  • 文本相識(shí)度處理等

好了,到這里就介紹完了RNN。

 

本文由 @Jimmy 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來自Unsplash,基于CC0協(xié)議。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 目前還沒評(píng)論,等你發(fā)揮!