循環神經網絡
CV是和image圖片和視頻打交道;
NLP 自然語言處理是和文本打交道,文本天然的時序數據;
1. 場景與多種應用
- 模仿論文(生成序列)
- 模型Linux內核代碼“寫程序” (生成序列)| 按概率分佈去做排布
- 模仿小四的作品(生成文本序列)
- 機器翻譯
- Image to text/ 看圖說話
我們知道神經網絡結構如下:
那循環神經網絡和它是什麼關係呢?
循環神經網絡
爲什麼有BP神經網絡(多層感知器MLP),CNN,還要RNN?
- 傳統神經網絡(包括CNN),輸入和輸出都是互相獨立的;
- 圖像上的貓和狗是分隔開的,但有些任務,後序的輸出和之前的內容是相關的;
- “我是中國人,我的母語是__”
- RNN引入“記憶”的概念
- 循環2字來源於其每個元素都執行相同的任務;
- 但是輸出依賴於輸入和“記憶”
2. 層級結構
簡單來看,把序列按時間展開
語言模型,我是中國__,完形填空,人比菜出來的次數要高些;
每讀一個詞就把這個詞的信息記錄下來,直到把所有信息讀下之後去做一個融合;神經網絡是用什麼去存儲信息的?一個向量或者矩陣 St;
- Xt是時間t處的輸入;
- St是時間t處的“記憶”,St=f(UXt+WSt-1),f可以是tanh等;
- Ot是時間t處的輸出,比如是預測下個詞的話,可能是softmax輸出的屬於每個候選詞的概率,Ot=softmax(VSt)
結構細節:
- 可以把隱狀態St視作“記憶體”,捕獲了之前時間點上的信息;
- 輸出Ot由當前時間及之前所有的“記憶”共同計算得到;
- 很可惜,實際應用中,St並不能捕獲和保留之前所有信息(記憶有限?)
- 不同於CNN,這裏的RNN其實整個神經網絡都共享一組參數(U, V, W),極大減小了需要訓練和預估的參數量;
- 圖中的Ot在有些任務下是不存在的,比如文本情感分析,其實只需要最後的output結果就行;
3. 多種RNN
雙向RNN
有些情況下,當前的輸出不只依賴於之前的序列元素,還可能依賴之後的序列元素;
比如從一段話踢掉部分詞,讓你補全;
直觀理解:雙向RNN疊加;
深層雙向RNN
和雙向RNN的區別是每一步/ 每個時間點我們設定多層結構
4. BPTT算法
MPL(DNN)與CNN用BP算法求偏導
BPTT和BP是一個思路,只不過既然有step,就和時間t有關係
5. 生成模型與圖像描述
簡單image to text
圖片描述數據集
Microsoft COCO數據集: http://mscoco.org
RNN與圖片描述
部分結果
LSTM
前面提到的RNN解決了,對之前的信息保存的問題
但是!存在長期依賴的問題。
- 看電影的時候,某些情節的推斷需要依賴很久以前的一些細節;
- 很多其他的任務也一樣;
- 很可惜隨着時間間隔不斷增大時,RNN會喪失學習到連接如此遠的信息的能力;
- 也就是說,記憶容量有限,一本書從頭到尾一字不漏的去記哦,肯定離得越遠的東西忘得越多。
- 怎麼辦:LSTM
LSTM是RNN一種,大體結構幾乎一樣,區別是:
- 它的“記憶細胞”改造過;
- 該記的信息會一直傳遞,不該記的會被“門”截斷;
1. 長時依賴問題
RNN的結構
把“記憶細胞”表現的炫酷一點
LSTM呢
“記憶細胞”變得稍微複雜了一點點
2. “記憶細胞”與狀態
LSTM關鍵:“細胞狀態”
細胞狀態類似於傳送帶,直接在整個鏈上運行,只有一些少量的線性交互。信息在上面流傳保持不變會很容易。
LSTM怎麼控制“細胞狀態”?
- 通過“門”讓信息選擇性通過,來去除或者增加信息到細胞狀態;
- 包含一個sigmoid神經網絡層和一個pointwise乘法操作;
- sigmoid層輸出0到1之間的概率值,描述每個部分有多少量可以通過。0代表“不允許量通過”,1就指“運行任意量通過”
LSTM的幾個關鍵“門”與操作
- 第一步:決定從“細胞狀態”中丟棄什麼信息 => “忘記門”
- 比如完形填空中填“他” 或者“她”的問題,細胞狀態可能包含當前主語的類別,當我們看到新的代詞,我們希望忘記舊的代詞。
第二步:決定放什麼信息到“細胞狀態”中
- sigmoid層決定什麼值需要更新;
- tanh層創建一個新的候選值向量Ct ;
- 上述2步是爲狀態更新做準備;
第三步:更新“細胞狀態”
- 更新Ct-1爲Ct
- 把舊狀態與ft 相乘,丟棄掉我們確定需要丟棄的信息;
- 加上it * Ct ,這就是新的候選值,根據我們決定更新每個狀態的程度進行變化。
第四步:基於“細胞狀態”得到輸出
- 首先運行一個sigmoid層來確定細胞狀態的哪個部分將輸出;
- 接着用tanh處理細胞狀態(得到一個在-1到1之間的值),再將它和sigmoid門的輸出相乘,輸出我們確定輸出的那部分。
- 比如我們可能需要單複數信息來確定輸出“他”還是“他們”
3. LSMT的變體
變種1
- 增加“peephole connection”
- 讓門層也會接受細胞狀態的輸入;
變種2
通過使用coupled忘記和輸入門;
之前是分開確定需要忘記和添加的信息,這裏是一同做出決定。
4. GRU
Gated Recurrent Unit (GRU),2014年提出
- 將忘記門和輸入門合成了一個單一的更新門;
- 同樣還混合了細胞狀態和隱藏狀態,和其他一些改動;
- 比標準LSTM簡單;
生成模式
字符級別的生成模型
純手工擼制代碼請戳 https://gist.github.com/karpathy/d4dee566867f8291f086