迴圈神經網路基礎

2021-10-02 19:43:51 字數 1189 閱讀 4791

下圖展示了如何基於迴圈神經網路實現語言模型。我們的目的是基於當前的輸入與過去的輸入序列,**序列的下乙個字元。迴圈神經網路引入乙個隱藏變數 h ,用 ht 表示 h 在時間步 t 的值。 ht 的計算基於 xt 和 ht−1 ,可以認為 ht 記錄了到當前字元為止的序列資訊,利用 ht 對序列的下乙個字元進行**。

w_xh: 狀態-輸入權重

w_hh: 狀態-狀態權重

w_hq: 狀態-輸出權重

b_h: 隱藏層的偏置

b_q: 輸出層的偏置

迴圈神經網路的引數就是上述的三個權重和兩個偏置,並且在沿著時間訓練(引數的更新),引數的數量沒有發生變化,僅僅是上述的引數的值在更新。迴圈神經網路可以看作是沿著時間維度上的權值共享

在卷積神經網路中,乙個卷積核通過在特徵圖上滑動進行卷積,是空間維度的權值共享。在卷積神經網路中通過控制特徵圖的數量來控制每一層模型的複雜度,而迴圈神經網路是通過控制w_xh和w_hh中h的維度來控制模型的複雜度。

如何將乙個batch的資料轉換成時間步數個(批量大小,詞典大小)的矩陣?

每個字元都是乙個詞典大小的向量,每個樣本是時間步數個序列,每個batch是批量大小個樣本

第乙個(批量大小,詞典大小)的矩陣:取出乙個批量樣本中每個序列的第乙個字元,並將每個字元展開成詞典大小的向量,就形成了第乙個時間步所表示的矩陣

第二個(批量大小,詞典大小)的矩陣:取出乙個批量樣本中每個序列的第二個字元,並將每個字元展開成詞典大小的向量,就形成了第二個時間步所表示的矩陣

最後就形成了時間步個(批量大小,詞典大小)的矩陣,這也就是每個batch最後的形式

隨機取樣時:每次迭代都需要重新初始化隱藏狀態(每個epoch有很多詞迭代,每次迭代都需要進行初始化,因為對於隨機取樣的樣本中只有乙個批量內的資料是連續的)

相鄰取樣時:如果是相鄰取樣,則說明前後兩個batch的資料是連續的,所以在訓練每個batch的時候只需要更新一次(也就是說模型在乙個epoch中的迭代不需要重新初始化隱藏狀態)

我們通常使用困惑度(perplexity)來評價語言模型的好壞。回憶一下「softmax回歸」一節中交叉熵損失函式的定義。困惑度是對交叉熵損失函式做指數運算後得到的值。特別地,

顯然,任何乙個有效模型的困惑度必須小於類別個數。在本例中,困惑度必須小於詞典大小vocab_size。

神經網路基礎 迴圈神經網路RNN

在處理序列問題 如語言識別等 上,使用迴圈神經網路 recurrent neural networks,rnn 是很自然的方式 所謂迴圈神經網路,其實就是把上一時刻的資訊作為當前時刻輸入的一部分,從而實現資訊的傳遞 本文將先介紹基礎版rnn,並說明基礎版的問題,然後介紹改進版的迴圈神經網路lstm ...

迴圈神經網路

原文 迴圈神經網路也可以畫成下面這個樣子 對於語言模型來說,很多時候光看前面的詞是不夠的,比如下面這句話 我的手機壞了,我打算 一部新手機。可以想象,如果我們只看橫線前面的詞,手機壞了,那麼我是打算修一修?換一部新的?還是大哭一場?這些都是無法確定的。但如果我們也看到了橫線後面的詞是 一部新手機 那...

迴圈神經網路

原文 迴圈神經網路也可以畫成下面這個樣子 對於語言模型來說,很多時候光看前面的詞是不夠的,比如下面這句話 我的手機壞了,我打算 一部新手機。可以想象,如果我們只看橫線前面的詞,手機壞了,那麼我是打算修一修?換一部新的?還是大哭一場?這些都是無法確定的。但如果我們也看到了橫線後面的詞是 一部新手機 那...