AI入門:循環神經網絡
今天我們主要討論的循環神經網絡,到底循環神經網絡能解決什么問題,它的結構是怎樣的?有什么優缺點?應該在那些領域上上?本文將跟大家一起探討。
講到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
結構圖:
由四部分組成:輸入門、輸出門、忘記門、記憶單元
- 輸入門(Input gate):決定外界能不能把數據寫入記憶單元,只有輸入門打開的時候,才能寫入數據;
- 輸出門(Output gate):決定外界能不能從記憶單元里讀取數據,只有輸出門打開的時候打,才能讀取數據;
- 忘記門(Forget gate):決定什么時候把記憶單元里的數據清除,打開的時候是不清除的,關閉的時候就會清除;
- 記憶單元(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協議。
- 目前還沒評論,等你發揮!