AI入門:循環神經網絡

JM
0 評論 8743 瀏覽 29 收藏 11 分鐘

今天我們主要討論的循環神經網絡,到底循環神經網絡能解決什么問題,它的結構是怎樣的?有什么優缺點?應該在那些領域上上?本文將跟大家一起探討。

講到AI不得不講深度學習,而講到深度學習,又不能不講循環神經網絡(Recurrent Neural Network, RNN)。如果把深度學習比作中國的互聯網界,那循環神經網絡和卷積神經網絡就是騰訊和阿里級別的地位。

看這篇文章之前,建議大家先看下我前面寫的兩篇文章《深度學習到底有多深?》、《入門AI:卷積神經網絡》,本文討論的內容跟前面寫的文章有很強的關聯性,看完可能更容易理解本文所討論的內容。

照例,先給個概述圖:

為了方便,在下文中我們用RNN來表示循環神經網絡。

一、為什么需要RNN?

我們先來看一個訂票系統:

假設我們在訂票系統中輸入一句話“我將在7月20號去深圳”,那么訂票系統就會這句話中的詞進行分類,專業術語叫填槽(slot filling)。

那訂票系統會把這些詞分別填到3個槽中:

  • 目的地:深圳
  • 時間:7月20號
  • 其他類型:我、將、在、去

補充下神經網絡的知識,要實現這個分類的話,我們可以搭一個網絡架構。

當輸入“深圳”,經過網絡系統后,會判斷出“深圳”屬于目的地槽的概率是多少,然后決定是否屬于目的地槽。

但是,假設我們再輸入另外一句話“我將在7月20號離開深圳”,機器能正確處理嗎?

對于普通的神經網絡,同樣的輸入,肯定會是同樣的輸出,因此如果同一個網絡輸入這兩句的“深圳”的話,那機器肯定會把他們歸到同一個槽,這樣肯定是錯了。

那怎么辦?假設我們在輸入“深圳”的時候,機器根據上下文的詞,再輸出結果。這樣是不是有可能解決問題了,沒錯,這就是RNN要做的事。

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

二、RNN的工作原理

1. RNN的工作原理

RNN的工作原理圖:

在神經網絡里,每一個神經元的輸出,都會被記得綠色的方塊里,然后下一次輸入的時候,不僅要考慮紅色的輸入,還要考慮被記在綠色里面的值。

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

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

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

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

因此,我們可以看到RNN最主要的兩個特點:

  • 新的輸出是由新的輸入和之前的輸出共同決定的。
  • 對于同一個輸入,可能會輸出不同的結果。

2. RNN的其他架構

如上左圖的架構,是每一個神經元的輸出都會被記起來。

如上右圖的架構,是網絡的最終輸出的值才會被記起來。

雙向RNN:

假設我輸入一句 “7月20號,深圳,我來了”,如果用我們之前討論的網絡,就可能有問題。因為之前的網絡只能考慮輸入在“深圳”之前的內容,沒辦法考慮在“深圳”之后的內容,而“來”在“深圳之后”,所以網絡就不知道“深圳”是目的還是出發地了。

那雙向RNN就可以解決這個問題:

雙向RNN是把同一句話,按正反兩個順序一起丟到網絡里去訓練,然后綜合考慮正反兩個順序再決定輸出結果。因此,雙向RNN不僅考慮了前文,還考慮的后文。

到此為止,我們討論的都都是最簡單的RNN,但現實可能存在更加復雜的場景。

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

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

三、 LSTM

結構圖:

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

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

每個門什么打開,什么時候關閉?都是機器自己學的。

具體的計算邏輯:

這個是純數學邏輯了,大家看下就好,看不明白也沒關系,入門不必深究。

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

小結:

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

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

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

梯度消失:誤差梯度的值變化得太小,沒辦法移動了,導致機器停止學習;

梯度爆炸:誤差梯度變化非常大,網絡參數大幅更新,導致網絡不穩定。

四、總結

1. RNN小結

RNN是根據“人的認知是基于過往經驗和記憶”這一觀點提出的,它不僅考慮當前時刻的輸入,還考慮對前面內容記憶。即RNN 對之前發生在數據序列中的事是有一定記憶的,對處理有序列的問題效果比較好。

2. RNN與CNN的不同點

前一輸入跟下一輸入是否有關聯:

  • CNN :前一個輸入和下一個輸入之間沒有任何關聯,因此所有的輸出都是獨立的。
  • RNN:前一個輸入和下一個輸入之間沒有任何關聯,共同決定新的輸出

前饋或反饋網絡:

  • CNN:屬于前饋神經網絡
  • RNN:屬于反饋神經網絡

備注:什么是前饋網絡?什么是反饋網絡?

前饋網絡:每一層中的神經元接收前一層神經元的輸出,并輸出到下一層神經元,整個網絡中的信息是朝著一個方向傳播的,沒有反向的信息傳播;

反饋網絡:反饋神經網絡中神經元不但可以接收其他神經元的信號,而且可以接收自己的反饋信號。

3. RNN的主要應用領域

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

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

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

 

本文由 @Jimmy 原創發布于人人都是產品經理。未經許可,禁止轉載。

題圖來自Unsplash,基于CC0協議。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發揮!