关于skip gram的输出
首先,网络的目的不是要预测上下文会出现啥词,这只是一个fake task,网络的真正目的正如 @Stark Einstein 所说,是为了实现嵌入。这一点与AntoEncoder是类似的,AutoEncoder的真正目的也不是为了复现输入,而是为了获得隐层压缩的特征。
关于题主所说的权值共享问题,我从下面的角度尝试解释一下。从隐层到输出层的计算过程是:center word的词向量,与每个context的词向量进行内积,会计算一个相似度,再用softmax做一下归一化。
下面来举个例子,例如“I really love machine learning and deep learning",假如我们选择machine作为中间词,由这个句子构造出的训练集长这个样子(window_size=2的话):(machine,really),(machine,love),(machine,learning),(machine,and),也就是说通过context可以构造出4个训练样本。这个时候我们只训练一下这4个样本,意味着给定machine这个词以后,really,love,learning,and的出现的概率都一样。但是这里有个问题,我们的样本是多种多样的,我们下一个句子如果是”I like machine learning“,再训练一下,是不是给定machine这个中心词,context中出现learning的概率就更高了呢?同样的道理,如果我们训练样本足够大且无偏,根据这样训练下来的结果就会出现,给定machine这个center word,其输出的context word的概率也会有一个排序,这就意味着它对应的context的word的词向量肯定不一样。
再回过头来说,如果你的100W个句子都是”I really love machine learning and deep learning“,加上权值共享,结果就是给定machine以后,它输出really,love,learning,and这四个词的概率完全相同,这就意味着这四个词的词向量也肯定完全一样了。
■网友
实际上这个loss就是降不下来的,所以本来就不能用于真正预测上下文,而初衷也不是用于预测上下文,只是利用上下文信息去实现嵌入
■网友
感觉题主没太明白映射是怎么算的?隐层(暂且这样说,其实没有隐层,就直接是中心词的词向量作为输入)到输出层的计算过程是和多分类问题里softmax回归完全一样的,分类类别数就是词表大小: 隐层的向量和整个词表中的每个词所对应的权值向量分别做内积(也可以看做隐层词向量和整个权值向量构成的矩阵做乘法),得到一个词表那么大的向量,再用softmax对得到的这个向量做归一化,归一化之后的结果就可以看成一个概率分布列,每维代表词表里一个词的概率,在这个概率分布列里拿出上下文词所对应的概率,作负对数再加起来就是损失函数。损失函数的参数既包括输入的那个向量也就是中心词的词向量,也包括计算输出层时所乘的词表中每个词的权值向量(也就是整个权值矩阵)。
【关于skip gram的输出】 当然由于词表很大导致计算量过大,因为上述过程需要词向量和词表中所有词的权值向量做内积,所以word2vec的实现里用了负采样或者哈夫曼树做多层二分类做优化,这就不说了。
推荐阅读
- 过节■江苏省委省政府办公厅下发关于做好2021年元旦春节期间有关工作的通知
- |徐州市出台《关于优化创新创业生态系统 提升区域科技创新活力的实施意见》及实施细则
- 雨下|全球关于禁售燃油车只是理论上可行吗
- 关于用phpfsocket 写Post, 模拟http 报文怎样写入要传输的处理数据
- 智叔|很多家长还在整箱买:谈谈关于牛奶的17个真相警惕这些列入黑名单的“假牛奶”
- 关于微信小程序的思考:运营者该何去何从
- 关于人工智能虚拟人的一些问题
- 知乎上关于人生经验的介绍是否可能对青少年造成潜在危害
- 写下我关于做数据分析专员的困惑和各位的建议是
- 非物质文化遗产|市北文体中心一场关于“非遗”的盛会…
