在做graph embedding的过程中,产生了对w2v几个疑问,索性重新回顾了一下w2v,做此总结。其中忽略了成吨的梯度更新推导,抓住主干,结论即可。

先按时间顺序附上w2v的几篇论文:

2013_Efficient Estimation of Word Representations in Vector Space

2013_Distributed Representations of Words and Phrases and their Compositionality

2014_Negative-Sampling Word-Embedding Method

2016_word2vec Parameter Learning Explained

本文不注重w2v的原因等balabala,主要是对第四篇论文的个人理解 https://arxiv.org/abs/1411.2738,以及之前对w2v的资料整理。

原文21页,内容非常多,先整理出最基本的两部分更新公式的推导。后面的优化方法有很多展开,之后整理好上传。

W2v算法原理推导

CBOW简易版:one-word context

我们通常看到的w2v原理介绍,都是下图样子,其实这是最简单的连续词袋模型(CBOW)的示意图,其中假设上下文只有一个单词(Input),来预测一个目标单词(output),就是一个二元模型,其实这也是传统的神经网络词向量语言模型,也就是下图(但是w2v从输入层到隐层的映射没有加激活函数,而是直接对所有输入词向量求和取平均)。

文章中的符号表示:

v_w: input vector ,是权重矩阵W的一行

v'_w: output vector ,是权重矩阵W‘的一列

$v{wI}$: 输入层唯一单词的input vector

特别注意,v_m​和v'_m​​只是单词w的两种不同表达而已(最终使用前者作为词向量)

至于如何更新参数,直接上结论:

  1. 在反向传播更新隐层到输出层权重W'时,对于每一个样本,需要遍历词汇表V中所有单词,把输出层矩阵W’的所有N*V个元素都更新一遍,计算量非常大;

2. 在更新输入层到隐层的权重W时,词向量矩阵W只有输入单词那一行的导数非0,其余的行在迭代过程中导数都为0,均保持不变,所以在反向传播时只更新W矩阵的一行,记做v{wI}。w_I表示输入的单词,I表示在W中输入单词那一行,是一个N维词向量。

其中 e_j = y_j - t_j, 表示输出层第j个单词的预测误差(输出层 j节点输出 减去 j节点单词真实label(0或1,当且仅当j节点是目标单词时,值才为1)) 。EH向量是一个N维向量,表示词汇表中所有单词的输出向量和预测误差的加权求和,每一维的计算如下:

输入单词I的N维词向量第i个维度(i = {1,2,...,N})的更新公式如下,x_I = 1:

词向量矩阵的反向传播的更新公式表示,输入单词的N维词向量每个维度的更新,都和输出层的词向量(W‘的每一行)与预测误差的点积结果相关,个人感觉这个点积结果可以理解对该维度的修正。

即,输入单词w_I的词向量更新,取决于它与词汇表V中所有单词的预测误差。

如果对公式有不理解,可以参考文末第二篇参考文献,用一个实际的例子模拟权重更新,博主真是有心了(第二个更新小标题写错了,是输入层-> 隐层权重的更新)。

原始paper中有一段话是这么解释训练词向量的过程

其实根据更新公式我并没有理解上面这段话,根据公式来说,输入单词的第j个维度更新是和所有词汇表单词的第j个维度的output vector 的预测误差加权和有关,其他单词的预测误差也会影响输入单词的更新。这里存疑,但是这不重要,结论更重要,理解文章的下面一段话意思即可:

在输出层,如果单词作为预测单词的概率被高估(yi > ti),那么输入单词的输入向量(W对应行向量)就会远离的输出向量(W‘的列向量),相反就会靠近。通过多个训练样本(上下文-目标单词)的训练,每个单词的输入和输出向量的相对位置趋于稳定。 (After many iterations, the relative positions of the input and output vectors will eventually stabilize.)

multi-word context(上下文有多个单词)

在one-word CBOW中,h = Wx,直接对输入向量线性加和,而在multi-word CBOW中,输入向量是把窗口中的C个OHE形式的单词向量对位相加取平均再和权重矩阵W相乘。

损失函数:

其他更新方式和one-word基本一致,不是本文重点。

Skip-Gram Model

隐藏层h的定义依然是look up 权重矩阵W中输入单词的那一行。

损失函数变为概率的连乘形式:

注意,在输出层,输出C个多项式分布来替代one-word形式的只输出一个多项式分布。最终结果取这C个多项式分布概率最高的C个单词作为输出,也就是模型预测的结果,即中心词的C个上下文单词。其中每个输出共享同一个W’权重矩阵。

日常在训练skip-gram w2v时,输入的是一个中心词和宽度为k的窗口内上下文单词(假设C个单词w1,w2...,wC),最后进入模型的是(wi, w1), (wi,w2),...,(wi,wC)这样形式,还是(wi,(w1,w2,...,wC))?

——是前者,训练C个多项式分布。只是损失函数不同,要求掌握两种形式的损失函数。

码字不易,觉得有用请点个赞,感谢。

主要参考

https://zhuanlan.zhihu.com/p/53425736

https://blog.csdn.net/qq_41664845/article/details/82971728

https://blog.csdn.net/qq_41664845/article/details/83108222#commentBox

word2vec原理_Word2vec详细整理(1)—权重更新原理相关推荐

  1. mysql数据库视图原理_详细分析mysql视图的原理及使用方法

    前言: 在MySQL中,视图可能是我们最常用的数据库对象之一了.那么你知道视图和表的区别吗?你知道创建及使用视图要注意哪些点吗?可能很多人对视图只是一知半解,想详细了解视图的同学看过来哟,本篇文章会详 ...

  2. Java进阶3 - 易错知识点整理(待更新)

    Java进阶3 - 易错知识点整理(待更新) 该章节是Java进阶2- 易错知识点整理的续篇: 在前一章节中介绍了 ORM框架,中间件相关的面试题,而在该章节中主要记录关于项目部署中间件,监控与性能优 ...

  3. spark word2vec 源码详细解析

    spark word2vec 源码详细解析 简单介绍spark word2vec skip-gram 层次softmax版本的源码解析 word2vec 的原理 只需要看层次哈弗曼树skip-gram ...

  4. Java 最常见的 10000+ 面试题及答案整理:持续更新

    Java面试题以及答案整理[最新版]Java高级面试题大全(2021版),发现网上很多Java面试题都没有答案,所以花了很长时间搜集,本套Java面试题大全,汇总了大量经典的Java程序员面试题以及答 ...

  5. 机器学习需要掌握的数学知识点---详细整理

    机器学习需要掌握的数学知识点---详细整理 第一篇 线性代数篇 第一章 排队!排队!什么是向量 第二章 矩阵 第三章 距离 第二篇 概率偏 由暗恋引发的思考 机器学习中的概率研究 贝叶斯问题 第三篇 ...

  6. 机器学习【期末复习总结】——知识点和算法例题(详细整理)

    机器学习[期末复习总结]--知识点和算法例题(详细整理) 1.什么是机器学习,什么是训练集,验证集和测试集?(摘自ML科普系列(一)) 机器学习: 对计算机一部分数据进行学习,然后对另外一些数据进行预 ...

  7. stm32正常运行流程图_STM32单片机学习笔记(超详细整理143个问题,学习必看)...

    原标题:STM32单片机学习笔记(超详细整理143个问题,学习必看) 1.AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备 2.Stm32f ...

  8. Linux - 易错知识点整理(待更新)

    Linux - 易错知识点整理(待更新) 本文根据CSDN Linux进阶技能树整理的易错知识点(带练),参考资料Linux常用命令大全(非常全!!!),Linux面试题(2020最新版)(带问/练) ...

  9. 机器学习算法岗:常见面试问题及解答整理,持续更新

    机器学习算法岗:常见面试问题及解答整理,持续更新 一.决策树ID3和C4.5的差别?各自优点? ID3算法: C4.5算法: 差异: 二.过拟合的原因及如何防止 三.几种模型( SVM,LR,GBDT ...

最新文章

  1. C++11中的Lambda表达式
  2. NET工程师求职面试必杀技
  3. Linux ubuntu16.04 卸载搜狗输入法(sogoupinyin)
  4. hashmap 存取原理图_HashMap底层实现原理
  5. P5518-[MtOI2019]幽灵乐团【莫比乌斯反演,欧拉反演】
  6. iOS设置拍照retake和use按钮为中文简体
  7. python-函数的闭包
  8. SpringBoot整合阿里Druid数据源及Spring-Data-Jpa
  9. Hash算法中的CRC
  10. linux shell 命令记录,linux常用shell命令记录
  11. 【Angular 4】管道
  12. MyEclipse9 导入ExtJs校验报错的处理办法
  13. RS-232、RS422和RS-485的区别和各自的实现方式
  14. 【Cocos2d-Js基础教学(2)类的使用和面向对象】
  15. eplan 培训中心ppt_Eplan从入门到精通.doc
  16. 计算机怎么语音通话,微信电脑版怎么语音聊天?微信电脑版语音聊天教程
  17. 365地图java_中国气候区划在线地图(1:3200万)
  18. iOS 苹果官方Demo合集
  19. IEEE TGRS2019|【论文笔记】R2-CNN: Fast Tiny Object Detection in Large-Scale Remote Sensing Images
  20. Vue.js实战梁笔记02(第3-5章)

热门文章

  1. javaSE各阶段练习题--数组
  2. leetcode 300. Longest Increasing Subsequence | 300. 最长递增子序列(动态规划)
  3. 【Java数据库】使用properties资源文件,简化数据库连接
  4. python join函数_一行 Python 代码能实现这么多丧心病狂的功能?
  5. Spring Cloud的架构
  6. 海康威视Web端视频开发
  7. kafka_rebalance过长问题排查
  8. google怎么做(3.搜索结果重排序)
  9. 最短工期 (25 分)【拓扑排序模板】
  10. 【终极方法】Unknown initial character set index ‘255‘ received from server. Initial client characte