斯坦福大學在三月份開設了一門「深度學習與天然語言處理」的課程:CS224d: Deep Learning for Natural Language Processing,授課老師是青年才俊 Richard Socher,如下爲相關的課程筆記。web
第四講:詞窗口分類和神經網絡(Word Window Classification and Neural Networks)算法
推薦閱讀材料:c#
- [UFLDL tutorial]
- [Learning Representations by Backpropogating Errors]
- 第四講Slides [slides]
- 第四講視頻 [video]
如下是第四講的相關筆記,主要參考自課程的slides,視頻和其餘相關資料。
本講概覽網絡
- 分類問題背景
- 在分類任務中融入詞向量
- 窗口分類和交叉熵偏差推導技巧
- 一個單層的神經網絡
- 最大間隔損失和反向傳播
分類問題定義機器學習
- 通常狀況下咱們會有一個訓練模型用的樣本數據集
{xi,yi}Ni=1{xi,yi}i=1Nide
- 其中xixi是輸入,例如單詞(標識或者向量),窗口內容,句子,文檔等
- yiyi是咱們但願預測的分類標籤,例如情緒指標,命名實體,買賣決定等
分類問題直窺函數
- 訓練集:{xi,yi}Ni=1{xi,yi}i=1N
- 一個簡單的例子
- 一個固定的2維詞向量分類
- 使用邏輯迴歸
- ->線性決策邊界->
- 從機器學習的角度來看:假設x是固定的,僅僅更新的是邏輯迴歸的權重W意味着僅僅修改的是決策邊界
分類問題符號定義工具
- 通常的機器學習問題: 僅僅更新邏輯迴歸的權重意味着僅僅更新的是決策邊界
- 數據集{xi,yi}Ni=1{xi,yi}i=1N的損失函數
- 其中對於每個數據對(xi,yi)(xi,yi):
- 咱們能夠將f寫成矩陣符號形式: f=Wxf=Wx
分類問題:正則化學習
- 一般狀況下任何一個數據集上完整的損失函數都會包含一個針對全部參數的正則化因子
- 正則化能夠防止過多的特徵致使的過擬合問題(另外一種解決方案是一個強有力/深度模型)
- 上圖中x軸表明了更強有力的模型後者更多的模型迭代次數
- 藍色表明訓練集偏差,紅色表明測試集偏差
機器學習優化問題
- 對於通常的機器學習問題θθ經常只包含了W的列數:
- 因此咱們僅僅更新決策邊界
引入詞向量
- 在深度學習中既要學習W也要學習詞向量x:
從新訓練詞向量會喪失泛化能力
- 例子:針對電影評價情感數據(movie review sentiment)訓練邏輯迴歸模型,在訓練集裏咱們有單詞"TV"和"telly"
- 在測試集裏咱們有單詞「television」
- 本來它們是類似的單詞(來自於已經訓練的詞向量模型)
- 當咱們從新訓練的時候會發生什麼?
從新訓練詞向量會喪失泛化能力續
- 當咱們從新訓練詞向量模型的時候會發生什麼?
- 在訓練集中的單詞會被從新安排到合適的位置
- 在已經訓練的詞向量模型中可是不在訓練集中的單詞將保留在原來的位置
- 對於上例, "TV"和"telly"會被從新安排,而"television"則保留在原位,尷尬的事情就發生了:
- 總之:
- 若是你只有一個很小的訓練集,不要訓練詞向量模型
- 若是你有一個足夠大的訓練集,那麼對於相應的任務來講訓練詞向量模型是有益的
詞向量概念回顧
- 詞向量矩陣L也被稱爲查詢表
- Word vectors(詞向量)= word embeddings(詞嵌入) = word representations(mostly)
- 相似於word2vec或者GloVe的方法獲得:
- 這就是詞特徵xwordxword
- 一般經過詞向量矩陣L和one-hot向量e相乘獲得單個的詞向量:
窗口分類
- 單個單詞的分類任務不多
- 在上下文中解決歧義問題
- 例子1:
- 例子2:
- 思路:將對一個單詞進行分類的問題擴展到對其臨近詞和上下文窗口進行分類
- 例如命名實體問題有4個類別:人名,地名,機構名和其餘
- 已經有不少方法在嘗試對一個上下文中的單詞進行分類,例如將窗口內的單詞(向量)進行平均化處理,可是這樣會失去位置信息
- 如下介紹一種經常使用的對窗口(上下文)中單詞進行分類的方法
- 對於窗口中的單詞打上標籤同時把它先後的單詞向量進行拼接而後訓練一個分類器
- 例子:對於一個句子上下文中的"Paris"進行分類,窗口長度爲2
- 結果獲得的窗口向量 xwindow=x∈R5dxwindow=x∈R5d , 是一個列向量
簡單的窗口分類器: Softmax
- 在獲得窗口向量x=xwindowx=xwindow的狀況下,咱們能夠和以前同樣使用softmax分類器
- 可是如何更新詞向量?
- 簡單的回答:和以前同樣進行求導
- 更長的回答:讓咱們一塊兒來一步一步進行推導
- 定義:
- yˆy^: softmax 機率輸出向量
- t: 目標機率分佈
- f=Wx∈Rcf=Wx∈Rc, 其中fcfc是f向量的第c個因子
- 第一次看到是否是以爲很難,下面給出一下提示(tips)
更新拼接的詞向量:Tips
- 提示1:仔細定義變量和跟蹤它們的維度
- 提示2:懂得鏈式法則(chain rule)而且記住在哪些變量中含有其餘變量
- 提示3:對於softmax中求導的部分:首先對fcfc當c=y(正確的類別)求導,而後對fcfc當c≠yc≠y(其餘全部非正確類別)求導
- 提示4:當你嘗試對f中的一個元素求導時,試試能不能在最後得到一個梯度包含的全部的偏導數
- 提示5:爲了你以後的處理不會發瘋,想象你全部的結果處理都是向量之間的操做,因此你應該定義一些新的,單索引結構的向量
- 提示6:當你開始使用鏈式法則時,首先進行顯示的求和(符號),而後再考慮偏導數,例如xixi or WijWij的偏導數
- 提示7:爲了不以後更復雜的函數(形式),確保知道變量的維度,同時將其簡化爲矩陣符號運算形式
- 提示8:若是你以爲公式不清晰的話,把它寫成完整的加和形式
更新拼接的詞向量
- 窗口向量梯度的維度是多少?
- X是整個拼接的詞向量窗口,5倍的d維度向量,因此對於x的求導後依然有相同的向量維度(5d)
- 對整個窗口向量的更新和梯度推導能夠簡單的分解到對每個詞向量的推導:
- 這將保留詞向量的原始位置信息有助於一些NLP任務,例如命名實體識別
- 例如,模型將會學習到出如今中心詞前面的xinxin經常表示中心詞是一個地名(location)
在訓練窗口向量時丟失了什麼信息?
- 梯度J相對於softmax權重W
- 步驟類似,可是先寫出偏導數WijWij
- 而後咱們就有了完整的:
矩陣實現的一些註解
- 在softmax中有兩個代價昂貴的運算: 矩陣運算 f = Wx 和 exp指數運算
- 在作一樣的數學運算時for循環永遠沒有矩陣運算有效
- 樣例代碼 -->
- 遍歷詞向量 VS 將它們拼接爲一個大的矩陣 而後分別和softmax的權重矩陣相乘
- 運行結果:
- 結果證實矩陣相乘C×XC×X更有效
- 矩陣運算更優雅更棒
- 應該更多的去測試你的代碼速度
softmax(=邏輯迴歸)並非強有力的
- softmax僅僅在原有的空間上給出線性決策邊界
- 在少許的數據上(正則化)效果會不錯
- 在大量的數據上效果會有限
- softmax僅僅給出線性決策邊界舉例:
神經網絡更勝一籌
- 神經網絡能夠學習更復雜的函數和非線性決策邊界
從邏輯迴歸到神經網絡--神經網絡解密
- 神經網絡有本身的術語定義集,就像SVM同樣
- 可是若是你瞭解softmax的運行機制,那你就已經瞭解了一個基本的神經元的運行機制
- 例子:一個神經元就是一個基礎的運算單位,擁有n(3)個輸入和一個輸出,參數是W, b
一個神經元本質上是一個二元邏輯迴歸單元
一個神經網絡等價於同時運行了不少邏輯迴歸單元
- 若是咱們給一批邏輯迴歸函數一堆輸入向量,咱們就獲得了一批輸出向量...
- 這些輸出又能夠做爲其餘邏輯迴歸函數的輸入
- 而後咱們就有了多層神經網絡
神經網絡中單層的矩陣符號表示
- 咱們有:
- 表示成矩陣符號形式:
- 其中f應用的是element-wise規則:
爲何須要非線性的f
- 例子:函數逼近,例如迴歸或者分類問題
- 沒有非線性函數,深度神經網絡相對於線性變換價值不大
- 其餘的層次會被編譯壓縮爲單個的線性變換: W1W2X=WXW1W2X=WX
- 有了更多的層次,它們能夠逼近更復雜的函數
一個更牛的窗口分類器
- 基於神經網絡進行修正
- 單個(神經網絡)層是一個線性層(函數)和非線性函數的組合
- 神經網絡激活函數αα能夠用來計算一些函數
- 例如,一個softmax機率分佈或者一個沒有歸一化的打分函數能夠是這樣的:
總結:前饋網絡計算
- 經過一個三層神經網絡計算這個窗口向量的得分:s = score(museums in Paris are amazing)
下一講
- 訓練一個基於窗口(向量)的神經網絡模型
- 進行更復雜的深度推導-->反向傳播算法
- 這樣咱們就有了全部的基礎工具去學習一個更復雜的深度模型:)
注:原創文章,轉載請註明出處及保留連接「我愛天然語言處理」:http://www.52nlp.cn