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