迴圈神經網路(一般RNN)推導
本文章的例子來自於WILDML
vanillaRNN是相比於LSTMs和GRUs簡單的迴圈神經網路,可以說是最簡單的RNN。
RNN結構
RNN的一個特點是所有的隱層共享引數
RNN前向傳導
本文例子介紹:RNN語言模型
關於語言模型的介紹就不說了,是NLP基礎。這裡只說說輸入和輸出的內容。
語言模型的生成屬於無監督學習,只需要大量的文字即可生成。我們只需要做的是構造訓練資料。
構造過程:
1. 生成詞典vocab。(分詞、去掉低頻詞)
2. 將語料中的句子轉為word_id序列,並在頭尾加上開始和結束id。
3. 生成訓練資料:對於每個句子,輸入為前len(sent)-1的序列,輸出為後len(sent)-1的序列(也就是輸入一個詞就預測下一個詞)
如,“我 在 沙灘 上 玩耍”輸入的向量為
假設我們的詞彙有8000個,採用one-hot向量,則每個輸入
則列出網路所有引數和輸入輸出的shape,方便推導:
總引數量為
損失函式(loss function)採用交叉熵:
其中
反向傳播
反向傳播目的就是求預測誤差
如下圖所示,每個時刻t預測的詞都有相應的誤差,我們需要求這些誤差關於引數的所有梯度,最後進行引數的下降調整操作(由於目標是降低Loss function,所以是梯度下降,如果是目標是最大似然,則為梯度上升)。
我們這裡以計算