2019年CS224N課程筆記-Lecture 3: Word Window Classification, Neural Networks, and Matrix Calculus

資源鏈接:https://www.bilibili.com/video/BV1r4411

正課內容

分類的介紹和概念

xi​ 是輸入,例如單詞、句子、文檔(索引或是向量),維度爲d
yi是我們嘗試預測的標籤( C個類別中的一個),例如:

以一個簡單樣例爲例:

對於上圖的訓練過程如下:

  1. 任務:固定的二維單詞向量分類 (輸入是單詞向量(2維),輸出是單詞對應的類別標籤,類似於y=ax1+bx2+c)
  2. 使用softmax/logistic迴歸進行分類
  3. 產生線性決策邊界(綠色和紅色的邊界)

傳統的方法/機器學習方法/統計學方法:假設xi是固定的,訓練邏輯迴歸權重W來確定一個邊界,官方一點就是假設 xi是固定的,使用 softmax/logistic 迴歸方法訓練的權重 W∈R(R的維度:C×d)來決定決策邊界(超平面)

具體過程如下:

目標函數

預測值計算

將權重矩陣W的第y行(類別y對應的權重)和輸入(特徵)向量 x做內積得到類別y對應的預測值:

在這裏插入圖片描述

使用softmax函數獲得歸一化的概率(當前輸入x屬於類別y的概率,當然,這是預測出來的概率)

損失函數

對於每個訓練樣本 (x,y) ,我們的目標是最大化正確類 y 的概率,或者我們可以最小化該類的負對數概率。

交叉熵損失函數

在整個數據集 上的交叉熵損失函數,是所有樣本的交叉熵損失的均值
 

我們不使用該式子:

而使用矩陣來表示 f:

(原因是:上述兩個式子其實是等價的,但是矢量計算更快~自己可以測試一下的)

(還有個問題~就是爲什麼選擇交叉熵而不是平方差作爲損失函數~這個可以自己瞭解下喲~)

傳統的ML/機器學習的優化

參數θ爲:

所以我們更新的梯度是:

神經網絡

但是這個線性分類能力有限,不能處理複雜的分類。(因爲它只能在空間上畫一條直線)

而神經網絡則可以處理複雜的數據分佈,如下圖,線性分類是無法實現的。

我們想要的結果:(這個是可以通過神經網絡來得到的,因爲神經網絡可以學習更復雜的函數和非線性決策邊界)

非線性化函數(本章節說的是sigmoid函數,其實有很多的激活函數/非線性函數,例如relu和tanh)

一個神經網絡往往由多個隱藏層構成~

(第一層是輸入層,不進行計算,其他的隱藏層+輸出層都是進行計算的)

對於一層來說:

爲什麼要引入非線形呢?或者說爲什麼需要激活函數/非線性化?

(這裏的多層感知機就可以理解成視頻中說的非線性的神經網絡)

命名實體識別/NER

任務:例如標註文本中實體的名稱/或者詞性等 ,如圖所示:

可能用途:

  • 跟蹤/識別文檔中提到的特定實體(如組織名、人名、地點、歌曲名、電影名等)
  • 對於問答,答案通常是命名實體
  • 許多需要的信息實際上是命名實體之間的關聯
  • 同樣的技術可以擴展到其他 slot-filling 槽填充分類(序列標註任務)

爲什麼命名體識別如此困難呢?

  1. 很難計算出實體的邊界,例如有一段話,包含 “First National Bank” ,那麼到底是“First National Bank”還是“ First”和“National Bank”呢?
  2. 很難知道是否某樣東西是一個實體,例如“Future School” 是名字是“Future School” 的學校還是未來的學校?
  3. 很難識別出不知道的實體,例如“Balabalahong”是個人還是一段咒語?
  4. 上下文的不同導致某些詞的意義不一樣,例如jack是人名還是劫持,需要依賴上下文語境

還有一些其他的挑戰例如:細粒度命名實體識別、嵌套命名實體識別、間隔命名實體識別等

Binary word window classification

一般情況下,分類單個單詞是很困難的,因爲會有一詞多義等問題(上面也說了,實體會依賴上下文的~),所以往往採取窗口分類(以分類單詞爲中心選擇一個窗口,在相鄰單詞的上下文窗口中對單詞進行分類)

簡單方法:在上下文中對單詞進行分類的一個簡單方法可能是對窗口中的單詞向量進行平均,並對平均向量進行分類。問題:這會丟失位置信息

稍微好一點的方法:訓練softmax分類器對(窗口)中心詞進行分類(打實體標籤),方法是在一個窗口內將中心詞周圍的詞向量串聯起來。如下圖所示:

損失函數:(可以使用之前的,因爲我們推到過softmax的loss了)

關於得分情況/預測值與實際值的比較:主要看中心詞的預測結果和標註的結果是否準確

關於命名實體的位置:我們選擇該窗口的中心詞作爲訓練結果比較的對象,而不是其他窗口,例如:Not all museums in Paris are amazing,假設窗口爲5,一個真正的窗口,以Paris爲中心的窗口(museums in Paris are amazing)和所有其他窗口(它們的中心詞不是位置實體,其他窗口很容易找到,而且有很多,例如Not all museums in Paris)

關於結果的計算:使用神經激活輸出 a 簡單地給出一個非標準化的分數

訓練目標:

確保對的窗口的分數最大,corrupt窗口分數最小,例如:

單個窗口的目標函數:

窗口的中心詞是位置實體時得分比窗口的中心詞不是位置實體的得分高1分,要獲得完整的目標函數:爲每個真窗口採樣幾個其他(損壞)窗口。對採樣的窗口和真實窗口進行求和,類似於負採樣,然後更新參數。

計算梯度

以一個簡單的例子爲例:給定一個函數,有1個輸出和1個輸入

在這裏插入圖片描述

斜率即導數,如下:

在這裏插入圖片描述

樣例稍微複雜一點:給定一個函數,有1個輸出和 n 個輸入 (輸入是一個向量)

在這裏插入圖片描述

x向量的維度爲n,所以對n維向量進行求導,也就是對向量中每個元素求偏導數,梯度的維度=1*n

在這裏插入圖片描述


再複雜一些:給定一個函數,有 m 個輸出和 n 個輸入

在這裏插入圖片描述

其雅可比矩陣是一個m×n的偏導矩陣(維度:輸出*輸入)

在這裏插入圖片描述

對於單變量複合函數:乘以導數

在這裏插入圖片描述


對於一次處理多個變量的複合函數:乘以雅可比矩陣:

在這裏插入圖片描述

帶激活函數的樣例:

在這裏插入圖片描述


由於權重矩陣i行乘以第i個元素,所以hi=f(zi)

函數有n個輸出和n個輸入 → n×n 的雅可比矩陣:

在這裏插入圖片描述

其他的一些求導:
在這裏插入圖片描述
關於h矩陣是否要轉置還有b是1還是1的向量(這個地方可以根據後面想乘的矩陣進行湊)

回到我們命名實體識別那一部分~


如何計算 s對b求導呢?

實際上,我們關心的是損失的梯度,但是爲了簡單起見,我們將計算分數的梯度.

做個等價變換

計算過程如下:


如何計算 s對w求導呢?

前兩項/藍色部分是重複的,無須重複計算:


其中,deltadelta 是局部誤差符號,被稱爲誤差信號和神經網絡的溝通~.

(下節課將會介紹反向傳播)

關於輸出形狀的介紹:

更新參數

如果1個輸出,n×m個輸入,按照之前說的就是1 × nm 的雅可比矩陣,這顯然不是我們想要的,所以對於上述討論的問題,而是遵循慣例:導數/梯度的形狀是參數的形狀 (形狀約定)

具體如下:

最後的形狀如何確定呢?(我還是比較建議中間計算中...根據實際矩陣運算的需要去確定。其實實際開發中,類似tensoflow和pytorch等都提供自動求導~)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章