RNN與語言模型

2021-10-20 05:57:38 字數 1956 閱讀 1708

語言模型是給乙個句子分配概率的任務,例如:看到"the lazy dog barked loadly"的概率有多大呢?

語言模型對機器翻譯有用,比如在單詞順序的選擇問題上,語言模型得到句子"the cat is samll"的概率應該大於"small the is cat"的概率。

當前很難為所有可能的語序計算出精確概率,所以通常會嘗試根據它前面的n個單詞**下乙個單詞。這屬於乙個相對簡單的馬爾可夫**:在n個前序子組的基礎上假設下乙個單詞。基於字組計數的方法可以計算出w1出現的情況下w2出現的概率,或者w1,w2均出現的情況下w3出現的概率,如下:

可以看出當單詞數量增加時,計算機記憶體需求也隨之增加。

現在很多模型用迴圈神經網路,該模型根據之前的單詞**下乙個單詞,前乙個時間步和後乙個時間步之前傳遞的是乙個隱藏狀態,模型圖如下所示:

其中x[t]是t時刻的輸入,h(t-1)是t-1時刻輸出的隱含層狀態向量。假設隱含層狀態維度是dh,單詞個數是r|v|,輸入向量維度是d的話,上面3個矩陣的維度如下所示:

顧名思義,梯度消失就是指反向傳播時梯度傳遞到前面的層時梯度非常小,反之,梯度**是指梯度傳遞到前面的層時梯度非常大。為了更加方便說明問題,這裡將上面介紹的模型中的sigmod和softmax函式去掉,簡化後的模型圖如下:

假設誤差函式是e,則所有時刻的誤差的導數之和是:

根據鏈式求導法則,上述公式可以轉換為如下公式:

上面的連乘公式的每乙個乘子都是乙個jacobain雅可比矩陣,雅可比矩陣的公式如下:

對於雅可比矩陣而言,我們可以得到它的範數的上界,其中β是對應的範數上界:

因為梯度是一系列雅可比矩陣的連乘,所以我們可以得到對應的範數上界:

從上述公式可以看出,如果我們初始時設定的β是大於1的,那麼最終得到的梯度會無窮大,也就是所謂的梯度**;反之,當初始時設定的梯度小於1,最終梯度會變得無窮小,也就是所謂的梯度消失。

下面給出乙個梯度消失的例子,假如有2個rnn,其中乙個的啟用函式是relu,另乙個是sigmod。分別畫出2層的梯度如下圖所示:

可以看出2個模型中第一層的梯度小於第二層,因此,很有可能會發生梯度消失問題。

方法比較簡單,當梯度值大於某個最大的值時,就將梯度設定為乙個固定的值。有人將這個裁剪的效果畫了出來,他們建立了乙個簡單模型,只有乙個隱含層,之後將每次更新的結果畫了出來,如下所示:

實線是應用演算法之前的梯度更新,可以看出當撞到牆(遇到乙個很大的梯度)時,引數跳到了乙個很遠的未知的位置。而當應用裁剪演算法之後,即虛線畫出的部分,當撞到牆(遇到乙個很大的梯度)時,引數還在乙個合理的範圍內,所以說這個裁剪演算法是有效的。

這個方法剛開始初始化權重矩陣為單位矩陣,並且用relu做為啟用函式。這個方法意味著在剛開始的時候,憑直覺你什麼都不知道,我們不要在引數空間中做瘋狂的隨機**,我們只做平均。也就是隱藏狀態僅僅是詞向量的移動平均值,然後我再開始做一些更新。

RNN應用 基於RNN的語言模型

rnn迴圈神經網路,具有處理序列資料的能力,也就是前面的資料跟後面的資料出現順序是有關係的。以下內容來自 我 昨天 上學 遲到 了 神經網路的輸出如下圖所示 其中,s和e是兩個特殊的詞,分別表示乙個序列的開始和結束。使用這種向量化方法,我們就得到了乙個高維 稀疏的向量 稀疏是指絕大部分元素的值都是0...

用 RNN 建立語言模型

今天來看迴圈神經網路的乙個重要的應用 語言模型。什麼是語言模型?語言模型的應用?為什麼用基於 rnn 的語言模型?rnn 是如何實現語言模型的?rnn 是如何實現 character level 語言模型的?character level 語言模型的具體應用 生成莎士比亞風格的文字 語言模型,它的任...

從RNN到LSTM GRU 語言模型

rnn最重要的是特徵就是每一時刻的結構和引數都是共享的。先放一張盜圖 rnn就好像天生為序列而生的神經網路,舉個簡單的例子,序列標註,比如詞性標註,如圖所示,x是我們輸入,h是我們的輸出,也就是詞性。有人可能就會說,我們使用一般的神經網路也可以做到這樣。乙個詞乙個樣本就可以了,這裡的話就破壞了句子的...