********************原文 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操作,我们就把输出层的输出规整为一个概率分布了。