[CS224n筆記] L6 Language Models, RNN, GRU and LSTM

2021-01-18 機器學習算法與自然語言處理

機器學習算法與自然語言處理出品

@公眾號原創專欄作者 徐嘯

學校 | 哈工大SCIR直博推免生


最近會逐步將博客上的 CS224n-2019 筆記搬到知乎上來,後續也會新增 CS224n-2020 裡的更新部分:CS224n-2020 並未更新 Note 部分,但課程的部分課件進行了教學順序上的調整與修改(Suggested Readings 也相應變動),需要注意的是三個 Guest Lecture 都是全新的。

本文為 Lecture 06 The probability of a sentence Recurrent Neural Networks and Language Models 與 Notes 05 Language Models, RNN, GRU and LSTM 的筆記。

Useful links

課程官網:Stanford CS224n || Stanford CS224n-2019

課程材料:LooperXX/CS224n-Resource || LooperXX/CS224n-Reading-Notes

課程視頻:YouTube

國內視頻資源:2019版|英文字幕(仍在更新) || 2019版|英文字幕(全)||2017版|中英字幕




如有疏漏之處,還望不吝賜教~

Lecture 06 The probability of a sentence Recurrent Neural Networks and Language Models

Overview

Language Modeling

其中, 可以是詞表中的任意單詞 

這樣做的系統稱為 Language Model 語言模型

還可以將語言模型看作是一個將概率分配給一段文本的系統

例如,如果我們有一段文本  則這段文本的概率(根據語言模型)為

語言模型提供的是 

n-gram Language Models

問題 :如何學習一個語言模型?

回答 (pre-DeepLearning):學習一個 n-gram 語言模型

定義 :n-gram 是 一個由n個連續單詞組成的塊

unigrams: 「the」, 「students」, 「opened」, 」their」

bigrams: 「the students」, 「students opened」, 「opened their」

trigrams: 「the students opened」, 「students opened their」

4-grams: 「the students opened their」

想法 :收集關於不同n-gram出現頻率的統計數據,並使用這些數據預測下一個單詞。

首先,我們做一個 簡化假設 : 只依賴於前面的n-1個單詞

具體含義如下圖所示

假設我們正在學習一個 4-gram 的語言模型

例如,假設在語料庫中:

「students opened their」 出現了1000次

「students opened their books」 出現了400次

「students opened their exams」 出現了100次

 

我們應該忽視上下文中的「proctor」嗎

在本例中,上下文裡出現了「proctor」,所以exams在這裡的上下文中應該是比books概率更大的。

Sparsity Problems with n-gram Language Models

問題 :如果「students open their 」 從未出現在數據中,那麼概率值為 0

(Partial)解決方案 :為每個  添加極小數  。這叫做平滑。這使得詞表中的每個單詞都至少有很小的概率。

問題 :如果「students open their」 從未出現在數據中,那麼我們將無法計算任何單詞  的概率值

(Partial)解決方案 :將條件改為「open their」。這叫做後退。

Note: n 的增加使稀疏性問題變得更糟。一般情況下 n 不能大於5。

Storage Problems with n-gram Language Models

增加 n 或增加語料庫都會增加模型大小

n-gram Language Models in practice

稀疏性問題 :概率分布的粒度不大。「today the company」 和 「today the bank」都是,都只出現過四次

Generating text with a n-gram Language Model

使用trigram運行以上生成過程時,會得到如下文本

today the price of gold per ton , while production of shoe lasts and shoe industry ,
the bank intervened just after it considered and rejected an imf demand to rebuild
depleted european stocks , sept 30 end primary 76 cts a share .

令人驚訝的是其具有語法但是是不連貫的。如果我們想要很好地模擬語言,我們需要同時考慮三個以上的單詞。但增加 n 使模型的稀疏性問題惡化,模型尺寸增大。

How to build a neural Language Model?

回憶一下語言模型任務

輸入:單詞序列 

輸出:下一個單詞的概率分布 

window-based neural model 在第三講中被用於NER問題

A fixed-window neural Language Model

使用和NER問題中同樣網絡結構

超越 n-gram 語言模型的 改進

存在的問題

固定窗口太小

擴大窗口就需要擴大權重矩陣 

窗口再大也不夠用

 和  乘以完全不同的權重。輸入的處理 不對稱。

我們需要一個神經結構,可以處理任何長度的輸入

Recurrent Neural Networks (RNN)

核心想法:重複使用 相同 的權重矩陣 

RNN的 優點

RNN的 缺點

遞歸計算速度 慢

在實踐中,很難從 許多步驟前返回信息

後面的課程中會詳細介紹

Training a RNN Language Model

然而:計算 整個語料庫的損失和梯度太昂貴了

在實踐中,我們通常將  看做一個 句子 或是 文檔

回憶 :隨機梯度下降允許我們計算小塊數據的損失和梯度,並進行更新。

計算一個句子的損失(實際上是一批句子),計算梯度和更新權重。重複上述操作。

Backpropagation for RNNs

問題 :關於 重複的 權重矩陣  的偏導數 

回答 :重複權重的梯度是每次其出現時的梯度的總和

Multivariable Chain Rule

對於一個多變量函數  和兩個單變量函數  和  ,其鏈式法則如下:

Backpropagation for RNNs: Proof sketch

Backpropagation for RNNs

Generating text with a RNN Language Model

就像n-gram語言模型一樣,您可以使用RNN語言模型通過 重複採樣 來 生成文本 。採樣輸出是下一步的輸入。

相比n-gram更流暢,語法正確,但總體上仍然很不連貫

食譜的例子中,生成的文本並沒有記住文本的主題是什麼

哈利波特的例子中,甚至有體現出了人物的特點,並且引號的開閉也沒有出現問題

RNN是否可以和手工規則結合?

Evaluating Language Models

這等於交叉熵損失  的指數

RNNs have greatly improved perplexity

Why should we care about Language Modeling?

Recap

RNNs can be used for tagging

e.g. part-of-speech tagging, named entity recognition

RNNs can be used for sentence classification

e.g. sentiment classification

如何計算句子編碼

使用最終隱層狀態

使用所有隱層狀態的逐元素最值或均值

RNNs can be used as an encoder module

e.g. question answering, machine translation, many other tasks!

Encoder的結構在NLP中非常常見

RNN-LMs can be used to generate text

e.g. speech recognition, machine translation, summarization

這是一個條件語言模型的示例。我們使用語言模型組件,並且最關鍵的是,我們根據條件來調整它

稍後我們會更詳細地看到機器翻譯。

A note on terminology

本課提到的RNN是 「「vanilla RNN」。下節課將會學習GRU和LSTM以及多層RNN。

本課程結束時,你會理解類似「stacked bidirectional LSTM with residual connections and self-attention」的短語

Notes 05 Language Models, RNN, GRU and LSTM

Keyphrases: Language Models. RNN. Bi-directional RNN. Deep RNN. GRU. LSTM.

1 Language Models

1.1 Introduction

語言模型計算特定序列中多個單詞的出現概率。一個 m 個單詞的序列  的概率定義為  。單詞 前有一定數量的單詞,其特性會根據它在文檔中的位置而改變,  一般只考慮前  個單詞而不是考慮全部之前的單詞。

上面的公式在語音識別和機器翻譯系統對判斷一個詞序列是否為一個輸入句子的準確翻譯起到了重要的作用。在現有的機器翻譯系統中,對每個短語/句子翻譯,系統生成一些候選的詞序列(例如,{I have,I has,I had,me have,me had}),並對其評分以確定最可能的翻譯序列。

在機器翻譯中,對一個輸入短語,通過評判每個候選輸出詞序列的得分的高低,來選出最好的詞順序。為此,模型可以在不同的單詞排序或單詞選擇之間進行選擇。它將通過一個概率函數運行所有單詞序列候選項,並為每個候選項分配一個分數,從而實現這一目標。最高得分的序列就是翻譯結果。例如,相比 small is the cat,翻譯系統會給 the cat is small 更高的得分;相比 walking house after school,翻譯系統會給 walking home after school 更高的得分。

1.2 n-gram Language Models

為了計算這些概率,每個 n-gram 的計數將與每個單詞的頻率進行比較,這個稱為 n-gram 語言模型。例如,如果選擇 bi-gram 模型,每一個 bi-gram 的頻率,通過將單詞與其前一個單詞相結合進行計算,然後除以對應的 uni-gram 的頻率。下面的兩個公式展示了 bi-gram 模型和 tri-gram 模型的區別。

上式 tri-gram 模型的關係主要是基於一個固定的上下文窗口(即前n個單詞)預測下一個單詞。一般 n 的取值為多大才好呢?在某些情況下,前面的連續的 n 個單詞的窗口可能不足以捕獲足夠的上下文信息。例如,考慮句子(類似完形填空,預測下一個最可能的單詞)

「Asthe proctor started the clock, the students opened their ____」。如果窗口只是基於前面的三個單詞「the students opened their」,那麼急於這些語料計算的下劃線中最有可能出現的單詞就是為「books」——但是如果 n 足夠大,能包括全部的上下文,那麼下劃線中最優可能出現的單詞會是「exam」。

這就引出了 n-gram 語言模型的兩個主要問題:稀疏性和存儲。

Sparsity problems with n-gram Language models

n-gram 語言模型的問題源於兩個問題。

首先,注意公式中的分子。如果  在語料中從未出現過,那麼  的概率就是 0。為了解決這個問題,在每個單詞計數後面加上一個很小的  ,這就是平滑操作。

然後,考慮公式中的分母。如果  在語料中從未出現過,那麼  的概率將會無法計算。為了解決這個問題,這裡可以只是單獨考慮  ,這就是「backoff」操作。

增加 n 會讓稀疏問題更加嚴重,所以一般  。

Storage problems with n-gram Language models

我們知道需要存儲在語料庫中看到的所有 n-gram 的統計數。隨著 n 的增加(或語料庫大小的增加),模型的大小也會增加。

1.3 Window-based Neural Language Model

Bengio 的論文《A Neural Probabilistic Language Model》中首次解決了上面所說的「維度災難」,這篇論文提出一個自然語言處理的大規模的深度學習模型,這個模型能夠通過學習單詞的分布式表示,以及用這些表示來表示單詞的概率函數。下圖展示了對應的神經網絡結構,在這個模型中,輸入向量在隱藏層和輸出層中都被使用。

下面公式展示了由標準 tanh 函數(即隱藏層)組成的 softmax 函數的參數以及線性函數  ,捕獲所有前面 n 個輸入詞向量。

注意權重矩陣  是應用在詞向量上(上圖中的綠色實線箭頭),  是應用在隱藏層(也是綠色實線箭頭)和  是應用在詞向量(綠色虛線箭頭)。

這個模型的簡化版本如下圖所示,其中藍色的層表示輸入單詞的 embedding 拼接:  ,紅色的層表示隱藏層:  ,綠色的輸出分布是對詞表的一個 softmax 概率分布:  。

2 Recurrent Neural Networks (RNN)

傳統的翻譯模型只能以有限窗口大小的前 n 個單詞作為條件進行語言模型建模,循環神經網絡與其不同,RNN 有能力以語料庫中所有前面的單詞為條件進行語言模型建模。

下圖展示的 RNN 的架構,其中矩形框是在一個時間步的一個隱藏層 t。

每個這樣的隱藏層都有若干個神經元,每個神經元對輸入向量用一個線性矩陣運算然後通過非線性變化(例如 tanh 函數)得到輸出。在每一個時間步,隱藏層都有兩個輸入:前一個時間步的隱藏層  和當前時間步的輸入  ,前一個時間步的隱藏層  通過和權重矩陣  相乘和當前時間步的輸入  和權重矩陣  相乘得到當前時間步的隱藏層  ,然後再將  和權重矩陣  相乘,接著對整個詞表通過 softmax 計算得到下一個單詞的預測結果  ,如下面公式所示:

每個神經元的輸入和輸出如下圖所示:

在這裡一個有意思的地方是在每一個時間步使用相同的權重  和  。這樣模型需要學習的參數就變少了,這與輸入序列的長度無關——這從而解決了維度災難。

以下是網絡中每個參數相關的詳細信息:

一個 RNN 語言模型的例子如下圖所示。下圖中的符號有一些的不同:  等同於  ,  等同於  ,  等同於  。  表示單詞輸入  轉化為  。

在 RNN 中常用的損失函數是在之前介紹過的交叉熵誤差。下面的公式是這個函數在時間步 t 全部單詞的求和。最後計算詞表中的 softmax 計算結果展示了基於前面所有的單詞對輸出單詞  的不同選擇的概率分布。這時的輸入可以比 4 到 5 個單詞更長。

2.1 RNN Loss and Perplexity

RNN 的損失函數一般是交叉熵誤差。

在大小為 T 的語料庫上的交叉熵誤差的計算如下:

2.2 Advantages, Disadvantages and Applications of RNNs

RNN 有以下優點:

但是 RNN 也有以下缺點:

運行一層 RNN 所需的內存量與語料庫中的單詞數成正比。例如,我們把一個句子是為一個 mini batch,那麼一個有 k 個單詞的句子在內存中就會佔用 k 個詞向量的存儲空間。同時,RNN 必須維持兩對  和  矩陣。然而  的可能是非常大的,它的大小不會隨著語料庫的大小而變化(與傳統的語言模型不一樣)。對於具有 1000 個循環層的 RNN,矩陣  的大小為  而與語料庫大小無關。

RNN 可以應用在很多任務,例如標註任務(詞性標註、命名實體識別),句子分類(情感分類),編碼模塊(問答任務,機器翻譯和其他很多任務)。在後面的兩個任務,我們希望得到對句子的表示,這時可以通過採用該句子中時間步長的所有隱藏狀態的  的最大值或平均值來獲得。

下圖是一些出版物中對 RNN 模型的另外一種表示。它將 RNN 的每個隱層用一個環來表示。

2.3 Vanishing Gradient & Gradient Explosion Problems

RNN 從一個時間步傳播權值矩陣到下一個時間步。回想一下,RNN 實現的目標是通過長距離的時間步來傳播上下文信息。例如,考慮以下兩個句子:

對上面的兩個句子,根據上下文,都可以知道空白處的答案是「John」,第二個在兩個句子的上下文中均提及了好幾次的人。迄今為止我們對 RNN 的了解,在理想情況下,RNN 也是能夠計算得到正確的答案。然而,在實際中,RNN 預測句子中的空白處答案正確可能性,第一句要比第二句高。這是因為在反向傳播的階段的過程中,從前面時間步中回傳過來的梯度值會逐漸消失。因此,對於長句子,預測到「John」是空白處的答案的概率會隨著上下文信息增大而減少。下面,我們討論梯度消失問題背後的數學原因。

考慮公式在時間步 t ,計算 RNN 誤差  ,然後我們把每個時間步的誤差都加起來。也就是說,計算並累積每個時間步長 t 的 。

通過將微分鏈式法則應用於公式 (6) 和 (5) 來計算每個時間步長的誤差;公式 (11) 展示對應的微分計算。注意  是  對之前所有的 k 個時間步的偏導數。

下式 展示了計算每個  的關係;這是在時間間隔  內對所有的隱藏層的應用一個簡單的微分鏈式法則。

因為  ,每個  是 h 的 Jacobian 矩陣的元素:

將公式合起來,我們有以下關係。

下式展示了 Jacobian 矩陣的範數。這裡的  和  是這兩個矩陣範數的上界值。因此通過公式所示的關係計算在每個時間步 t 的部分梯度範數。

計算這兩個矩陣的 L2 範數。在給定的非線性函數 sigmoid 下,  的範數只能等於 1。

當  足夠大和  遠遠小於 1 或者遠遠大於 1,指數項  的值就很容易變得非常小或者非常大。由於單詞之間的距離過大,用一個很大的  評估交叉熵誤差可能會出現問題。在反向傳播的早期就出現梯度消失,那麼遠處單詞對在時間步長 t 預測下一個單詞中,所起到的作用就會變得很小。

在實驗的過程中,一旦梯度的值變得非常大,會導致在運行過程中容易檢測到其引起的溢出(即 NaN);這樣的問題稱為梯度爆炸問題。然而,當梯度接近為 0 的時候,梯度近乎不再存在,同時降低模型對語料庫中的遠距離的單詞的學習質量;這樣的問題稱為梯度消失問題。如果相對梯度消失問題的有更直觀的了解,你可以訪問這個樣例網站。

2.4 Solution to the Exploding & Vanishing Gradients

現在我們知道了梯度消失問題的本質以及它在深度神經網絡中如何表現出來,讓我們使用一些簡單實用的啟發式方法來解決這些問題。

為了解決梯度爆炸的問題,Thomas Mikolov 等人首先提出了一個簡單的啟發式解決方案,每當梯度大於一個閾值的時候,將其截斷為一個很小的值,具體如下面算法中的偽代碼所示。

下圖可視化了梯度截斷的效果。它展示了一個權值矩陣為  和偏置項為  的很小的 RNN 神經網絡的決策界面。該模型由一個單一單元的循環神經網絡組成,在少量的時間步長上運行;實心箭頭闡述了在每個梯度下降步驟的訓練過程。當在梯度下降的過程中,模型碰到目標函數中的高誤差壁時,梯度被推到決策面上的一個遙遠的位置。截斷模型生成了虛線,在那裡它將誤差梯度拉回到靠近原始梯度的地方。

為了解決梯度消失問題,我們提出兩個技術。第一個技術是不去隨機初始化  ,而是初始化為單位矩陣。

第二個技術是使用 Rectified Linear(ReLU)單元代替 sigmoid 函數。ReLU 的導數是 0 或者 1。這樣梯度傳回神經元的導數是 1,而不會在反向傳播了一定的時間步後梯度變小。

2.5 Deep Bidirectional RNNs

到目前為止,我們已經討論了用 RNN 如何使用過去的詞來預測序列中的下一個單詞。同理,可以通過令 RNN 模型向反向讀取語料庫,根據未來單詞進行預測。Irsoy 等人展示了一個雙向深度神經網絡;在每個時間步 t,這個網絡維持兩個隱藏層,一個是從左到右傳播而另外一個是從右到左傳播。為了在任何時候維持兩個隱藏層,該網絡要消耗的兩倍存儲空間來存儲權值和偏置參數。最後的分類結果  ,是結合由兩個 RNN 隱藏層生成的結果得分產生。下圖展示了雙向 RNN 的網絡結構。

而下式展示了給出了建立雙向RNN隱層的數學公式。兩個公式之間唯一的區別是遞歸讀取語料庫的方向不同。最後一行展示了通過總結過去和將來的單詞表示,顯示用於預測下一個單詞的分類關係。

RNN也可以是多層的。下圖展示一個多層的雙向 RNN,其中下面的隱藏層傳播到下一層。如圖所示,在該網絡架構中,在時間步 t,每個中間神經元從前一個時間步(在相同的 RNN 層)接收一組參數和前一個 RNN 隱藏層的兩組參數;這兩組參數一組是從左到右的 RNN 輸入,另外一組是從右到左的 RNN 輸入。

為了構建一個 L 層的深度 RNN,上述的關係要修改為在公式中的關係,其中在第  層的每個中間神經元的輸入是在相同時間步 t 的 RNN 第  層的輸出。最後的輸出  ,每個時間步都是輸入參數通過所有隱層傳播的結果。

2.6 Application: RNN Translation Model

傳統的翻譯模型是非常複雜的:它們包含很多應用在語言翻譯流程的不同階段的機器學習算法。在本節中,我們討論採用 RNN 作為傳統翻譯模型的替代方法的潛力。考慮下圖中展示的 RNN 模型;其中德語短語 Echt dicke Kiste 翻譯為 Awesome sauce。

首先,前三個時間步的隱藏層 編碼 德語單詞為一些語言的單詞特徵(  )。後面兩個時間步解碼  為英語單詞輸出。下式分別展示了編碼階段和解碼階段(後兩行)。

一般可以認為使用交叉熵函數的 RNN 模型可以生成高精度的翻譯結果。在實際中,在模型中增加一些擴展方法可以提升翻譯的準確度表現。

擴展 1:在訓練 RNN 的編碼和解碼階段時,使用不同的權值。這使兩個單元解耦,讓兩個 RNN 模塊中的每一個進行更精確的預測。這意味著在公式 (23) 和 (24) 在  函數中是使用不同的  矩陣。

擴展 2:使用三個不同的輸入計算解碼器中的每個隱藏狀態

前一個隱藏狀態 (標準的)

編碼階段的最後一個隱藏層(上圖中的 )

前一個預測的輸出單詞 

將上述的三個輸入結合將之前公式的解碼函數中的  函數轉換為下式的  函數。上圖展示了這個模型。

擴展 3:使用多個 RNN 層來訓練深度循環神經網絡。神經網絡的層越深,模型的就具有更強的學習能力從而能提升預測的準確度。當然,這也意味著需要使用大規模的語料庫來訓練這個模型。

擴展 4:訓練雙向編碼器,提高準確度。

擴展 5:給定一個德語詞序列 A B C,它的英語翻譯是 X Y。在訓練  時不使用 A B C  X Y,而是使用 C B A  X Y。這麼處理的原因是 A 更有可能被翻譯成 X。因此對前面討論的梯度消失問題,反轉輸入句子的順序有助於降低輸出短語的錯誤率。

3 Gated Recurrent Units

除了迄今為止討論的擴展方法之外,我們已經發現 RNN 通過使用更複雜的激活單元來獲得表現更好。到目前為止,我們已經討論了從隱藏狀態  向  轉換的方法,使用了一個仿射轉換和  的非線性轉換。在這裡,我們討論門激活函數的使用並修改 RNN 結構。雖然理論上 RNN 能捕獲長距離信息,但實際上很難訓練網絡做到這一點。門控制單元可以讓 RNN 具有更多的持久性內存,從而更容易捕獲長距離信息。讓我們從數學角度上討論 GRU 如何使用  和 來生成下一個隱藏狀態  。然後我們將深入了解 GRU 架構。

上述的共識可以認為是 GRU 的四個基本操作階段,下面對這些公式作出更直觀的解釋,下圖展示了 GRU 的基本結構和計算流程:

1. New memory generation:一個新的記憶  是由一個新的輸入單詞  和過去的隱藏狀態 共同計算所得。這個階段是將新輸入的單詞與過去的隱藏狀態  相結合,根據過去的上下文來總結得到向量  。

2. Reset Gate:復位信號  是負責確定  對總結  的重要程度。如果確定  與新的記憶的計算無關,則復位門能夠完全消除過去的隱藏狀態(即忽略之前隱藏的信息)。

3. Update Gate:更新信號  負責確定有多少  可以向前傳遞到下一個狀態。例如,如果 ,然後  幾乎是完全向前傳遞到下一個隱藏狀態。反過來,如果  ,然後大部分的新的記憶  向前傳遞到下一個隱藏狀態。

4. Hidden state:利用更新門的建議,使用過去的隱藏輸入  和新生成的記憶  生成隱藏狀態  。

需要注意的是,為了訓練 GRU,我們需要學習所有不同的參數: 。這些參數同樣是通過反向傳播算法學習所得。

4 Long-Short-Term-Memories

Long-Short-Term-Memories 是和 GRU 有一點不同的另外一種類型的複雜激活神經元。它的作用與 GRU 類似,但是神經元的結構有一點區別。我們首先來看看 LSTM 神經元的數學公式,然後再深入了解這個神經元的設計架構:

下圖是LSTM的計算圖示

我們可以通過以下步驟了解 LSTM 的架構以及這個架構背後的意義:

1. New memory generation:這個階段是類似於 GRU 生成新的記憶的階段。我們基本上是用輸入單詞  和過去的隱藏狀態來生成一個包括新單詞  的新的記憶  。

2. Input Gate:我們看到在生成新的記憶之前,新的記憶的生成階段不會檢查新單詞是否重要——這需要輸入門函數來做這個判斷。輸入門使用輸入詞和過去的隱藏狀態來決定輸入值是否值得保存,從而用來進入新內存。因此,它產生它作為這個信息的指示器。

3. Forget Gate:這個門與輸入門類似,只是它不確定輸入單詞的有用性——而是評估過去的記憶是否對當前記憶的計算有用。因此,遺忘門查看輸入單詞和過去的隱藏狀態,並生成 。

4. Final memory generation:這個階段首先根據忘記門  的判斷,相應地忘記過去的記憶 。類似地,根據輸入門  的判斷,相應地輸入新的記憶  。然後將上面的兩個結果相加生成最終的記憶  。

5. Output/Exposure Gate:這是 GRU 中沒有明確存在的門。這個門的目的是從隱藏狀態中分離最終的記憶。最終的記憶  包含很多不需要存儲在隱藏狀態的信息。隱藏狀態用於 LSTM 的每個單個門,因此,該門是要評估關於記憶單元  的哪些部分需要顯露在隱藏狀態  中。用於評估的信號是  ,然後與  通過  運算得到最終的  。

Reference

以下是學習本課程時的可用參考書籍:

《Speech and Language Processing》

《基於深度學習的自然語言處理》

《神經網絡與深度學習》

以下是學習本課程時的可用參考博客:

斯坦福CS224N深度學習自然語言處理2019冬學習筆記目錄 (課件核心內容的提煉,並包含作者的見解與建議)

史丹福大學 CS224n自然語言處理與深度學習筆記匯總 (這是針對note部分的翻譯)

Notes on Stanford CS224n


重磅!憶臻自然語言處理-學術微信交流群已成立

可以掃描下方二維碼入群交流,

注意:請大家添加時修改備註為 [學校/公司 + 姓名 + 方向]

例如 —— 哈工大+張三+對話系統。

號主,微商請自覺繞道。謝謝!


推薦閱讀:

【長文詳解】從Transformer到BERT模型

賽爾譯文 | 從頭開始了解Transformer

百聞不如一碼!手把手教你用Python搭一個Transformer

相關焦點

  • 用純NumPy碼一個RNN、LSTM:這是最好的入門方式了
    repo 中還包括 RNN(rnn-numpy.py) 和 LSTM (lstm-numpy.py) 的實現,一些外部數據(ptb, wiki)需要分別下載。[t] = gs[t][3*HN:4*HN,:] * gs[t][0:HN,:] + gs[t][2*HN:3*HN,:] * cs[t-1]# mem cell - nonlinearity cs[t] = np.tanh(cs[t])# new hidden state hs[t] = gs[t][HN:2*HN,:] * cs[t]# unnormalized log probabilities
  • PyTorch:Bi-LSTM的文本生成
    代碼段1-預處理def read_dataset(file): letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m', 'n','o','p','q','r','s','t','u','v','w','x','y','z','
  • 斯坦福CS224n《基於深度學習的NLP》課程更新,C.Manning主講
    新智元報導 來源:Stanford編輯:大明【新智元導讀】史丹福大學官方公布cs224n課程《基於深度學習的自然語言處理》詳細安排,主講人為史丹福大學人工智慧實驗室主任,著名計算機科學家Christopher Manning教授,1月份課程閱讀材料已公布。本課程自2017 年起開設,2017年該課程視頻已公開放出。
  • 【Hello NLP】CS224n筆記[4]:自然語言中的依存分析(Dependency Parsing)
    CS224n筆記[4]:自然語言中的依存分析(Dependency Parsing)作者:郭必揚什麼是依存分析自然語言處理任務中,有很重要的一塊,就是分析語言的結構。語言的結構,一般可以有兩種視角:前者,主要關心的是句子是怎麼構成的,詞怎麼組成短語。
  • 手寫GRU-[TensorFlow]
    當前時刻標籤的標註是會基於上一時刻的標註結果,其實個人感覺就是循環神經網絡的機制可以完成,然而循環神經網絡輸出為隱藏單元的狀態,直接將這種狀態作為標籤應該是不夠準確的,所以大多論文中會在最後一層網絡中添加一層MLP什麼的,對隱藏單元序列進行解碼輸出所謂標籤,然而作為TensorFlow菜雞,一直就用人家封裝好的函數如下:with tf.variable_scope('GRU-cell'): gru_cell_fw
  • 從基礎到 RNN 和 LSTM,NLP 取得的進展都有哪些?
    bigram模型將其標記為兩個單詞的組合,輸出將是「自然語言、語言處理、處理對、對計算機、計算機科學、科學至關重要」類似地,trigram模型將其分解為「自然語言處理、語言處理對、處理對計算機、對計算機科學、計算機科學至關重要」,而n-gram模型將一個句子標記為n個單詞的組合。將一門自然語言分解成n-gram是保持句子中出現的單詞數量的關鍵,而句子是自然語言處理中使用的傳統數學過程的主幹。
  • 用金庸、古龍群俠名稱訓練LSTM,會生成多麼奇葩的名字?
    http://magicly.me/2017/04/07/rnn-lstm-generate-name/?utm_source=tuicool&utm_medium=referralMagicly:之前翻譯了一篇介紹RNN的文章,一直沒看到作者寫新的介紹LSTM的blog,於是我又找了其他資料學習。
  • 在 TensorFlow 上使用 LSTM 進行情感分析
    1) Training a word vector generation model (such as Word2Vec) or loading pretrained word vectors2) Creating an ID's matrix for our training set (We'll discuss this a bit later)3) RNN (With
  • 時間序列的LSTM模型預測——基於Keras
    DataFramefrom pandas import concatfrom sklearn.preprocessing import MinMaxScalerfrom sklearn.preprocessing import LabelEncoderfrom sklearn.metrics import mean_squared_errorfrom keras.models
  • 貌離神合的RNN與ODE:花式RNN簡介
    事實上,在 (4) 中我們可以以 h 為時間單位,記 t=nh,那麼 (4) 變成了:可以看到現在 (6) 中的時間變量 n 也是整數了。這樣一來,我們就知道:ODE 的歐拉解法 (4) 實際上就是 RNN 的一個特例罷了。
  • 使用LSTM深度學習模型進行溫度的時間序列單步和多步預測
    =1)如我們所見,X矩陣的形狀是6個樣本,3個時間步長和7個特徵。換句話說,我們有6個觀測值,每個觀測值都有3行數據和7列。 之所以有6個觀測值,是因為前3個滯後被丟棄並且僅用作X數據,並且我們預測提前1步,因此最後一個觀測值也會丟失。上圖中顯示了X和Y的第一個值對。
  • LSTM實現詳解
    我們需要以下幾層:nn.Identity() - 傳遞輸入(用來存放輸入數據)nn.Dropout(p) - 標準的dropout模塊(以1-p的概率丟棄一部分隱層單元)nn.Linear(in, out) - 從in維到out維的一個仿射變換nn.Narrow(dim, start, len) - 在第dim方向上選擇一個子向量,下標從start開始,長度為lennn.Sigmoid
  • 插座上的n和l是什麼意思 插座上的n和l哪個接火線
    那麼,插座上的n和l是什麼意思?插座上的n和l代表什麼?插座上的n和l哪個接火線?下面一起來看看吧。一、插座上的n和l是什麼意思如果家裡的插座不夠用,一般我們都會去超市購買插座,這樣就可以為多個電器提供電源,保證家中多種電器的正常運行。我們在給插座接線時,細心的人會在它的底盒總能看到n和l這樣的字母,那麼插座上的n和l是什麼意思? 下面我們一起來看看吧。