循環神經網絡 (RNN) 是一種流行的「序列數據」算法,被 Apple 的 Siri 和 Google 的語音搜索使用。RNN使用內部存儲器(internal memory)來記住其輸入,這使其非常適合涉及序列數據的機器學習問題。
本文介紹引入RNN的問題--Language Model,並介紹RNN的重要公式,作為Stanford cs224n lecture6的總結和補充。
1. Language Model在介紹RNN之前,我們先介紹最初引入RNN的問題---「Language Modeling」。
「定義:」 Language Modeling就是預測下一個出現的詞的概率的任務。(Language Modeling is the task of predicting what word comes next.)
即:
1.1 統計學方法:n-gram language model簡化:一個詞出現的概率只和它前面的n-1個詞有關係,這就是"n-gram"的含義。因此有:
n-gram model 是不使用深度學習的方法,直接利用「條件概率」來預測下一個單詞是什麼。但這個模型有幾個問題:
由於丟棄了比較遠的單詞,它不能夠把握全局信息。例如,「as the proctor started the clock」 暗示這應該是一場考試,所以應該是students opened their 「exam」. 但如果只考慮4-gram,的確是book出現的概率更大。sparsity problem. 有些短語根本沒有在語料中出現過,比如"student opened their petri-dishes". 所以,petri-dishes的概率為0. 但是這的確是一個合理的情況。解決這個問題的辦法是做拉普拉斯平滑,對每個詞都給一個小權重。sparsity problem的一個更加糟糕的情況是,如果我們甚至沒有見過"student open their",那麼分母直接就是0了。對於這種情況,可以回退到二元組,比如"student open".這叫做backoff1.2 neural language model想要求"the students opened their"的下一個詞出現的概率,首先將這四個詞分別embedding,之後過兩層全連接,再過一層softmax,得到詞彙表中每個詞的概率分布。我們只需要取概率最大的那個詞語作為下一個詞即可。
「優點:」
解決了sparsity problem, 詞彙表中的每一個詞語經過softmax都有相應的概率。解決了存儲空間的問題,不用存儲所有的n-gram,只需存儲每個詞語對應的word embedding即可。「缺點:」
窗口的大小還是不能無限大,不能涵蓋之前的所有信息。更何況,增加了窗口大小,就要相應的增加「權重矩陣W」的大小。每個詞語的word embedding只和權重矩陣W對應的列相乘,而這些列是完全分開的。所以這幾個不同的塊都要學習相同的pattern,造成了浪費。2. RNN正因為上面所說的缺點,需要引入RNN。
2.1 RNN模型介紹「RNN的結構:」
首先,將輸入序列的每個詞語都做embedding,之後再和矩陣