********************原文 https://www.zhihu.com/question/52398145 **********************
目標函數和損失函數區別:
對於目標函數來說有約束條件下的最小化就是損失函數。
********************* 原文 https://www.jianshu.com/p/1405932293ea *************************
構造訓練數據
我們知道用神經網絡訓練,大體經過如下幾個步驟
准備好數據,x和y--------定義好網路結構-------定義好loss------選擇合適的優化器------進行迭代訓練---------存儲好訓練好的網絡
在word2vec訓練過程中,訓練語料是(x,y)就是一個個單詞對,比如(the ,quick)就是一個單詞對,the就是樣本數據,quick就是該條樣本的標簽。
我們以詞為單位掃描這句話,沒掃描到一個詞,就把該詞左右各兩個詞共4個詞拿出來,分別與被掃描的單詞組成單詞對,作為我們的訓練數據。
這里有一個細節,一個就是取被掃描單詞左右各2個詞,這里的2被稱為窗口尺寸,是可以調整的,用多大的窗口生成的單詞來進行訓練,具體問題需要具體分析,一般取5是很好的經驗值。也就是左右各取5個單詞,共10個單詞,
你可能會想,(fox,brown)也是一個單詞對,它輸入神經網絡后,豈不是希望神經網絡告訴我們,在8個單詞中,brown是更可能出現在fox周圍?如果是這樣,那么訓練完成后的神經網絡,輸入fox,它的輸出會是brown和jumps的哪一個呢?
答案是取決於(fox,brown)和(fox,jumps)兩個單詞對誰在訓練集中出現的次數比較多,神經網絡就會針對哪個單詞對按照梯度下降進行更多的調整,從而就會傾向於預測誰將出現在fox周圍。
***********************原文 https://cloud.tencent.com/developer/news/440206 *********************
損失函數
以cbow模型為例,訓練時最容易想的是,得到輸入序列的sum embedding之后,通過一個predict和 softmax層,計算出字典v中的每個詞的概率,再構建交叉熵之類的損失函數,然后直接對詞典里的v個詞計算相似度並歸一化。
也就是用交叉熵來衡量神經網絡的輸出與我們的label y的差異大小,也就是可以定義出loss了。
目標函數
對於word2vec中基於hierarchical softmax的cbow模型,要優化的目標函數為
對於基於Hierarchical softmax 的skip-gram模型,要優化的目標函數為
Word2vec中采用隨機梯度上升法最大化對數似然函數的做法是 每取一個樣本content(w),就是對目標函數中的所有相關參數進行一次更新,
*********************原文 https://www.jianshu.com/p/1405932293ea *********************************
hidden層沒有激活函數,但是輸出層卻用了softmax。
輸出層的神經元數量和語料中的單詞數量一樣多,每一個神經元可以認為對應每一個單詞的輸出權重,詞向量乘以該輸出權重就得到一個數,該數字代表了輸出神經元對應的單詞出現在輸入單詞周圍的可能性大小,通過對所有的輸出層神經元的輸出進行softmax操作,我們就把輸出層的輸出規整為一個概率分布了。