cs224n系列博客筆記主要基於cs224n-2019,後續也會新增 CS224n-2020 裏的更新部分:CS224n-2020 並未更新 Note 部分,但課程的部分課件進行了教學順序上的調整與修改(Suggested Readings 也相應變動),需要注意的是三個 Guest Lecture 都是全新的。
本文爲 Lecture 03 Word Window Classification,Neural Networks, and Matrix Calculus 與 Notes 03 Neural Networks, Backpropagation 的筆記。
Useful links
- 課程官網:Stanford CS224n || Stanford CS224n-2019
- 課程材料:LooperXX/CS224n-Resource || LooperXX/CS224n-Reading-Notes
- 課程視頻:YouTube
- 國內視頻資源:2019版|英文字幕(仍在更新) || 2019版|英文字幕(全)||2017版|中英字幕
Lecture 03 Word Window Classification,Neural Networks, and Matrix Calculus
Lecture Plan
- Classification review/introduction
- Neural networks introduction
- Named Entity Recognition
- Binary true vs. corrupted word window classification
- Matrix calculus introduction
提示:這對一些人而言將是困難的一週,課後需要閱讀提供的資料。
Classification setup and notation
通常我們有由樣本組成的訓練數據集
是輸入,例如單詞、句子、文檔(索引或是向量),維度爲d
是我們嘗試預測的標籤( C個類別中的一個),例如:
- 類別:感情,命名實體,購買/售出的決定
- 其他單詞
- 之後:多詞序列的
Classification intuition
訓練數據:
- 固定的二維單詞向量分類 (輸入是單詞向量(2維),輸出是單詞對應的類別標籤)
- 使用softmax/logistic迴歸
- 線性決策邊界
傳統的機器學習/統計學方法:假設 是固定的,訓練 softmax/logistic 迴歸的權重 來決定決策邊界(超平面)
方法:對每個 x ,預測:
我們可以將預測函數分爲兩個步驟:
- 將權重矩陣W的第y行(類別y對應的權重)和輸入(特徵)向量 x做內積得到類別y對應的分數:
- 使用softmax函數獲得歸一化的概率(當前輸入x屬於類別y的概率)
Training with softmax and cross-entropy loss
對於每個訓練樣本 (x,y) ,我們的目標是最大化正確類 y 的概率,或者我們可以最小化該類的負對數概率。
Background: What is “cross entropy” loss/error?
- 交叉熵”的概念來源於信息論,衡量兩個概率分佈之間的差異
- 令真實概率分佈爲 p
- 令我們計算的模型/輸出概率爲 q
- 交叉熵爲
- 假設 groud truth (or true or gold or target)的概率分佈在正確的類上爲1,在其他任何地方爲0:
- 因爲 p 是獨熱向量(one-hot),所以上述求和中唯一剩下的項是真實類的負對數概率
Classification over a full dataset
- 在整個數據集 上的交叉熵損失函數,是所有樣本的交叉熵損失的均值
我們不使用
我們使用矩陣來表示 f:
Traditional ML optimization
- 一般機器學習的參數,通常只由W的列組成(把權重矩陣W的每一列 拼接在一起 構成一個大的列向量)
- 因此,我們只通過以下方式更新決策邊界(計算每個參數的梯度,參數向量的梯度和參數是同維的)
Neural Network Classifiers
- 單獨使用Softmax(≈logistic迴歸)並不十分強大
- Softmax只給出線性決策邊界
1)這可能是相當有限的,當問題很複雜時(線性不可分)是無用的
2)改善這些侷限不是很酷嗎?
Neural Nets for the Win!
神經網絡可以學習更復雜的函數和非線性決策邊界
更高級的分類需要:
- 詞向量
- 更深層次的深層神經網絡
Classification difference with word vectors
一般在NLP深度學習中
- 我們學習了矩陣 W 和詞向量 x
- 詞向量是對獨熱向量的重新表示:即將詞向量理解爲一層神經網絡,輸入單詞的獨熱向量(或單詞索引)並獲得單詞的詞向量表示(在詞嵌入矩陣中查詢),並且我們需要對其進行更新(也是模型參數的一部分)。其中,Vd是數量很大的參數(V是詞典的大小,d是詞向量的維度)
Neural computation
An artificial neuron
- 神經網絡有自己的術語包
- 但如果你瞭解 softmax 模型是如何工作的,那麼你就可以很容易地理解神經元的操作
A neuron can be a binary logistic regression unit:
b:我們可以有一個“總是打開”的特性,它給出一個先驗類,或者將它作爲一個偏向項(偏置)分離出來
w, b: 是神經元的參數
A neural network = running several logistic regressions at the same time
如果我們輸入一個向量通過一系列邏輯迴歸函數,那麼我們得到一個輸出向量,但是我們不需要提前決定這些邏輯迴歸試圖預測的變量是什麼。
我們可以輸入另一個logistic迴歸函數。損失函數將指導中間隱藏變量應該是什麼,以便更好地預測下一層的目標。我們當然可以使用更多層的神經網絡。
Matrix notation for a layer
- f(x) 在運算時是 element-wise 逐元素的
Non-linearities (aka “f ”): Why they’re needed
例如:函數近似,如迴歸或分類
- 沒有非線性,深度神經網絡只能做線性變換
- 多個線性變換可以組成一個的線性變換(多個線性變換可以用一個線性變換等價表示) . 因爲線性變換是以某種方式旋轉和拉伸空間,多次的旋轉和拉伸可以融合爲一次線性變換
- 對於非線性函數而言,使用更多的層,他們可以近似/擬合更復雜的函數
Named Entity Recognition (NER)
- 任務:例如,查找和分類文本中的名稱 (序列標註任務的一種,對序列中每個元素打標籤)
- 可能用途
1)跟蹤/識別文檔中提到的特定實體(如組織名、人名、地點、歌曲名、電影名等)
2)對於問答,答案通常是命名實體
3)許多需要的信息實際上是命名實體之間的關聯
4)同樣的技術可以擴展到其他 slot-filling 槽填充分類(序列標註任務) - 通常後面是命名實體鏈接/規範化到知識庫/知識圖譜
Named Entity Recognition on word sequences
我們通過在上下文中對每個單詞打標籤(基於實體標籤集合進行多分類)。
Why might NER be hard?
- 很難計算出實體的邊界
第一個實體是 “First National Bank” 還是 “National Bank” - 很難知道某物是否是一個實體
是一所名爲“Future School” 的學校,還是這是一所未來的學校? - 很難知道未知/新奇實體的類別
“Zig Ziglar” ? 一個人 - 實體類是模糊的,依賴於上下文
這裏的“Charles Schwab” 是 PER 不是 ORG
最近還有一些挑戰如:細粒度命名實體識別、嵌套命名實體識別、間隔命名實體識別
Binary word window classification
爲在上下文中的語言構建分類器
- 一般來說,很少對單個單詞進行分類
- 有趣的問題,如上下文歧義出現
- 例子:auto-antonyms
1)“To sanction” can mean “to permit” or "to punish”
2)“To seed” can mean “to place seeds” or “to remove seeds” - 例子:解決模糊命名實體的鏈接
1)Paris → Paris, France vs. Paris Hilton vs. Paris, Texas
2)Hathaway → Berkshire Hathaway vs. Anne Hathaway
Window classification
- 思想:在相鄰詞的上下文窗口中對一個詞進行分類
- 例如,上下文中一個單詞的命名實體分類(人、地點、組織、非命名實體)
- 在上下文中對單詞進行分類的一個簡單方法可能是對窗口中的單詞向量進行平均,並對平均向量進行分類。問題:這會丟失位置信息
Window classification: Softmax
- 訓練softmax分類器對(窗口)中心詞進行分類(打實體標籤),方法是在一個窗口內將中心詞周圍的詞向量串聯起來
- 例子:在這句話的上下文中對“Paris”進行分類,窗口長度爲2
- 是一個列向量
Simplest window classifier: Softmax
對於,我們可以使用與之前相同的softmax分類器:
- 如何更新向量(參數)?簡而言之:就像上週那樣,求導和優化
Binary classification with unnormalized scores
- 之前的例子:
- 假設我們要對中心詞是否爲一個地點,進行分類
- 與word2vec類似,我們將遍歷語料庫中的所有位置。但這一次,它將受到監督,只有一些位置能夠得到高分。
- 例如,在他們的中心有一個實際的NER Location的位置是“真實的”位置會獲得高分
Binary classification for NER Location
- 例子:Not all museums in Paris are amazing
- 這裏:一個真正的窗口,以Paris爲中心的窗口和所有其他窗口(它們的中心詞不是位置實體)
museums in Paris are amazing - 其他窗口很容易找到,而且有很多:任何中心詞沒有在我們的語料庫中明確標記爲位置實體的窗口
Not all museums in Paris
Neural Network Feed-forward Computation
使用神經激活輸出 a 簡單地給出一個非標準化的分數:
我們用一個三層神經網絡計算一個窗口的得分。
Main intuition for extra layer
中間層學習輸入詞向量之間的非線性交互
例如:只有當“museum”是第一個向量時,“in”放在第二個位置才重要
The max-margin loss
- 關於訓練目標的想法:讓真實窗口的得分更高,而其他窗口的得分更低(直到足夠好爲止
- 單窗口的目標函數爲
- 窗口的中心詞是位置實體時得分比窗口的中心詞不是位置實體的得分高1分
- 要獲得完整的目標函數:爲每個真窗口採樣幾個其他(損壞)窗口。對所有窗口求和
- 類似於word2vec中的負抽樣
- 使用SGD更新參數
- 如何計算參數梯度
1)手工計算(本課)
2)算法:反向傳播(下一課)
Computing Gradients by Hand
- 回顧多元導數
- 矩陣微積分:完全矢量化的梯度
1)比非矢量梯度快得多,也更有用
2)但做一個非矢量梯度可以是一個很好的實踐;以上週的講座爲例
3)notes 3更詳細地涵蓋了這些材料
Gradients
-
給定一個函數,有1個輸出和1個輸入
-
斜率是它的導數
-
給定一個函數,有1個輸出和 n 個輸入 (輸入是一個向量)
-
x向量的梯度與x同維度,就是對向量中每個元素求偏導數
Jacobian Matrix: Generalization of the Gradient -
給定一個函數,有 m 個輸出和 n 個輸入
-
其雅可比矩陣是一個的偏導矩陣
Chain Rule
對於單變量函數:乘以導數
對於一次處理多個變量:乘以雅可比矩陣:
Example Jacobian: Elementwise activation Function
由於使用的是 element-wise,所以
函數有n個輸出和n個輸入 → n×n 的雅可比矩陣:
Other Jacobians
這是正確的雅可比矩陣。稍後我們將討論“形狀約定”;用它則答案是 h 。
Back to our Neural Net!
如何計算 ?
實際上,我們關心的是損失的梯度,但是爲了簡單起見,我們將計算分數的梯度.
Break up equations into simple pieces
Apply the chain rule
如何計算 ?
前兩項是重複的,無須重複計算:
其中, 是局部誤差符號.
Derivative with respect to Matrix: Output shape
- , 的形狀和W是一致的
- 1個輸出,個輸入:1 × nm 的雅可比矩陣?
不方便更新參數:
- 而是遵循慣例:導數/梯度的形狀是參數的形狀 (形狀約定)
- 的形狀是
Derivative with respect to Matrix
Why the Transposes?
What shape should derivatives be?
反向傳播:
- 算法高效地計算梯度
- 將我們剛剛手工完成的轉換成算法
- 用於深度學習軟件框架(TensorFlow, PyTorch, Chainer, etc.)