训练softmax分类器实例_CS224N NLP with Deep Learning(四):Window分类器与神经网络
Softmax分類器
我們來回顧一下機器學習中的分類問題。首先定義一些符號,假設我們有訓練集
,其中 為輸入, 為標簽,共包括 個樣本; 表示第 個樣本,是一個 維的向量; 表示第 個樣本的標簽,它的取值是 個類別的其中一個。對于簡單的二分類問題,我們可以用簡單的邏輯回歸來訓練。而對于多分類問題,則可以用OVR (one-vs-rest) 等方法構造多個邏輯回歸,或者用更簡潔一些的softmax分類器,接下來我們就來介紹一下softmax分類器。設 權重矩陣,那么softmax分類器預測的概率為其中
表示 的第 行。顯然我們希望我們預測的概率分布與真實的分布盡量相似,而在信息論中,KL散度(KL divergence)是一種用來衡量兩個分布的差異的方法,那么也就是說我們想讓預測分布和真實分布的KL散度最小。對于 ,如果用 表示其類別的真實分布,則 ,即類 的概率為 ,其他類的概率為 。如果我們預測的概率分布為 ,則 與 的KL散度為注意到其中
是一個常數(shù),因此最小化 和 的KL散度相當于最小化 叫做交叉熵(cross entropy)損失函數(shù)。由于這里只有 ,因此這時交叉熵與負對數(shù)似然 等價。接下來我們就通過交叉熵來定義softmax分類器的損失函數(shù)其中
。而在實踐中我們通常還要在損失函數(shù)中加上一個正則化項來防止過擬合,即過擬合通常
是模型中的所有參數(shù)組成的向量,這里 是 的所有列向量組成的向量,即而在更新時,我們需要求
而如果我們需要同時訓練詞向量的話,我們則需要求
這時其維數(shù)達到了
,當詞匯量很大時,將會很容易過擬合。那么我們需不需要自己訓練詞向量呢?我們來看下面的例子。考慮一個用邏輯回歸做單詞分類問題。假設我們有預訓練的詞向量,其中單詞“TV”、“telly”和“television”這幾個詞很接近,此時直接用邏輯回歸得到的結果如下
而如果我們的訓練集中有“TV”和“telly”,而沒有“television”,并且在這個訓練集上重新訓練詞向量的話,那么“TV”和“telly”的詞向量就會有一定的偏移,但“television”的詞向量卻沒有變化。即
這顯然不是我們想要的結果。那么也就是說需不需要自己訓練詞向量取決于數(shù)據(jù)集。如果你只有一個很小的訓練集,那么不要自己訓練詞向量,直接用預訓練的詞向量效果就會很好;而如果你有充足的訓練集,那么自己訓練詞向量效果可能會更好一些。
Window Classification
對一個單詞進行分類的問題并不常見,但是在判斷多義詞的詞義時還是會用到。有些多義詞可以同時表達兩個相反的意思,比如“to sanction”的含義可能是“to permit”,也可能是“to punish”;“to seed”可能表示“to place seeds”,也可能表示“to remove seeds”。有些多義詞則可能表示兩個完全不相關的事物,比如“Paris”可能是法國巴黎,也可能是“Paris Hilton”(帕麗斯·希爾頓);“Hathaway”可能是“Berkshire Hathaway”(伯克希爾·哈撒韋公司),也可能是“Anne Hathaway”(安妮·海瑟薇女神!)。想要判斷多義詞在文中到底是哪個意思,就需要上下文的幫助。一個簡單的方法就是Window Classification,即考慮一定窗口大小內的上下文。
比如一個命名實體識別(Named Entity Recognition, NER)任務,通常是四分類(人名、地名、機構名、None)任務,假設我們判斷單詞“Paris”,如果選取大小為2的窗口,那么我們需要考慮包括“Paris”在內的五個單詞,即
我們把這五個單詞的詞向量拼在一起,得到
,之后我們通過softmax分類器來判斷其詞義了。令 表示真實的類 的預測概率,則然后同樣用交叉熵作為損失函數(shù)
其中
。接下來我們來推導損失函數(shù)的梯度,首先其中
是我們預測的分布, 是真實分布(One-hot向量)。從而得到簡化一下,就是
這就是損失函數(shù)對
的導數(shù)了,也就是說 。同樣我們可以求出損失函數(shù)對權重 的梯度 ,將兩個梯度拼在一起就是 。然后就可以使用梯度下降來訓練模型了。Neural Network
softmax雖然簡單有效,但只能擬合線性的決策邊界,無法解決線性不可分的問題。接下來我們來看看能夠擬合非線性決策邊界神經(jīng)網(wǎng)絡。一個簡單的單層神經(jīng)網(wǎng)絡可以表示為
其中
是激活函數(shù),通常使用非線性的sigmoid函數(shù)或ReLU等。損失函數(shù)通常也使用上文提到的交叉熵損失函數(shù)。為了對神經(jīng)網(wǎng)絡有一個更深入的了解,我們來考慮一個簡化版的NER任務:判斷單詞是不是地名。如果我們用一個簡單的單層神經(jīng)網(wǎng)絡來建模,輸入仍是
,而輸出層只有一個神經(jīng)元 表示其得分,那么如果我們用
表示正確窗口(即中心詞是地名)的得分,用 來表示錯誤窗口(即中心詞不是地名)的得分,那么自然地會希望 要比 大。這時候我們就不需要交叉熵損失函數(shù)了,我們可以使用更簡單的Max-margin loss(也稱hinge loss,常用于SVM),即當
的時候 ,而當 時, 。也就是說,我們不僅希望 比 大,而且至少要大 ,這樣才能更好的判斷結果。上面是對于單個窗口的損失函數(shù),而完整的損失函數(shù)則要對每個正確窗口采樣幾個錯誤窗口,然后再求和。這與Word2Vec的負采樣類似。
接下來我們來推導其反向傳播,首先
之后
這一步是對矩陣
求導,不理解的同學可以先考慮對單個元素 求導,由于 只出現(xiàn)在 中,因此繼續(xù)推導可得
也就是說
,拼成整個矩陣就是 。類似的,我們可以推導出對于
,求導的過程也類似,在此不再贅述。至此我們成功推導了一個簡單的單層神經(jīng)網(wǎng)絡的前向傳播和反向傳播,對于更復雜的神經(jīng)網(wǎng)絡,我們之后再詳細說明。相關閱讀:
TJH:CS224N NLP with Deep Learning(一):Introduction?zhuanlan.zhihu.comTJH:CS224N NLP with Deep Learning(二):詞向量之Word2Vec?zhuanlan.zhihu.comTJH:CS224N NLP with Deep Learning(三):詞向量之GloVe?zhuanlan.zhihu.comTJH:CS224N NLP with Deep Learning(四):Window分類器與神經(jīng)網(wǎng)絡?zhuanlan.zhihu.comTJH:CS224N NLP with Deep Learning(番外1):fastText?zhuanlan.zhihu.comTJH:CS224N NLP with Deep Learning(五):反向傳播?zhuanlan.zhihu.comTJH:CS224N NLP with Deep Learning(五):依存分析?zhuanlan.zhihu.comTJH:CS224N NLP with Deep Learning(六):語言模型與循環(huán)神經(jīng)網(wǎng)絡?zhuanlan.zhihu.com總結
以上是生活随笔為你收集整理的训练softmax分类器实例_CS224N NLP with Deep Learning(四):Window分类器与神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python使用redis_python
- 下一篇: 通过图注意力神经网络进行多智能体游戏抽象