简介

GloVe是一种非常简单快速的训练词向量的算法。与复杂的word2vec相比,其是一个log双线性模型,仅通过一个简单的损失函数就能够得到很好的结果。

(1)J=∑i,jNf(Xi,j)(viTvj+bi+bj−log(Xi,j))2

其中,vi和vj是i和j的词向量,bi和bj是两个偏差项,f是一个权重函数,N为词汇表大小
但是这个损失函数的意义却不是很直观,这里参照一篇博客写了一下对于这个损失函数的分析

思路

Glove首先会通过设置定义的窗口大小,进行统计得到词的共现矩阵。如Xi,j表示词i和j同时出现的次数。共现矩阵是一个N×N的矩阵

然后我们需要计算一些条件概率
定义

Xi=∑j=1NXi,j
Pi,k=Xi,kXi
ratioi,j,k=Pi,kPj,k

然后我们分析这里的ratio会发现一些规律


所以我们想到,如果能够通过词向量vi,vj和vk得到相似的规律的,那么说明我们的词向量是很不错的。即我们想做的是得到函数g(),使之满足

ratioi,j,k=Pi,kPj,k=g(vi,vj,vk)

那么为了使二者尽量想近,对于损失函数,一个直观的想法就是MSE,即

(2)J=∑i,j,kN(Pi,kPj,k−g(vi,vj,vk))2

不过这里的计算复杂度是N3,过于复杂,我们需要进一步分析。我们可以开始猜想一下g(vi,vj,vk)是一个什么样的形式,因为其衡量了单词i,j之间的关系,那么我们可以猜想其中含有vi−vj,又因为其中还有对k的关系且最终是一个标量,那么我们假设其存在一个内积,即(vi−vj)Tvk
那么现在我们有

Pi,kPj,k=g(vi,vj,vk)=(vi−vj)Tvk=viTvk−vjTvk

可以看到这里我们和上面的损失函数有点类似了,但是还是缺少一个exp,我们可以加上它看看,即

Pi,kPj,k=exp⁡(viTvk−vjTvk)=exp⁡(viTvk)exp⁡(vjTvk)

可以看到,加上exp之后分子分母的形式就完全一样了,我们可以将其一起考虑,即现在只需要满足

Pi,j=exp(viTvj)

两边取对数,我们的损失函数就能够转化为

(3)J=∑i,jN(log(Pi,j)−viTvj)2

这个损失函数已经更像一些了,但是还是不太一样。这是因为我们前面是存在一点问题的。根据前面我们有

和log(Pi,j)=viTvj和log(Pj,i)=vjTvi

但是实际上,上面的式子右边是相等的,但左边并不相等(并且对于这个问题来说,我们可以想到target和context其实是可以互换的,所以存在对称),即原有的对称性不满足了。我们需要进一步处理一下。我们将上面(3)的中的条件概率log(Pi,j)展开,得到

log(Pi,j)=log(Xi,j)−log(Xi)=viTvj

这里的log(Xi)是独立于j的,所以可以被吸收进bi变为

log(Xi,j)=viTvj+bi+bj

这样代价函数就变成了

J=∑i,jN(viTvj+bi+bj−log(Xi,j))2

然后加上词频越高权重越大(共现次数很少的实际上很可能是异常值,并且共现次数少的一般来说含的信息也少)

(4)J=∑i,jNf(Xi,j)(viTvj+bi+bj−log(Xi,j))2

权重函数

f(x)={(x/xmax)0.75,if x<xmax1,if x>=xmax

引用

  1. Pennington J, Socher R, Manning C. Glove: Global vectors for word representation[C]//Proceedings of the 2014 conference on empirical methods in natural language processing (EMNLP). 2014: 1532-1543.
  2. https://blog.csdn.net/codertc/article/details/73864097

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 

GloVe损失函数的理解的更多相关文章

  1. 【转载】深度学习中softmax交叉熵损失函数的理解

    深度学习中softmax交叉熵损失函数的理解 2018-08-11 23:49:43 lilong117194 阅读数 5198更多 分类专栏: Deep learning   版权声明:本文为博主原 ...

  2. 【深度学习】一文读懂机器学习常用损失函数(Loss Function)

    最近太忙已经好久没有写博客了,今天整理分享一篇关于损失函数的文章吧,以前对损失函数的理解不够深入,没有真正理解每个损失函数的特点以及应用范围,如果文中有任何错误,请各位朋友指教,谢谢~ 损失函数(lo ...

  3. 深度学习:Sigmoid函数与损失函数求导

    1.sigmoid函数 ​ sigmoid函数,也就是s型曲线函数,如下: 函数: 导数: ​ 上面是我们常见的形式,虽然知道这样的形式,也知道计算流程,不够感觉并不太直观,下面来分析一下. 1.1 ...

  4. Logistic Regression理论总结

    简述: 1. LR 本质上是对正例负例的对数几率做线性回归,因为对数几率叫做logit,做的操作是线性回归,所以该模型叫做Logistic Regression. 2. LR 的输出可以看做是一种可能 ...

  5. [目标检测]YOLO原理

    1 YOLO 创新点: 端到端训练及推断 + 改革区域建议框式目标检测框架 + 实时目标检测 1.1 创新点 (1) 改革了区域建议框式检测框架: RCNN系列均需要生成建议框,在建议框上进行分类与回 ...

  6. 深度学习与计算机视觉系列(3)_线性SVM与SoftMax分类器

    作者: 寒小阳 &&龙心尘 时间:2015年11月. 出处: http://blog.csdn.net/han_xiaoyang/article/details/49949535 ht ...

  7. Paper Reading:word2vec Parameter Learning Explained

    论文:word2vec Parameter Learning Explained 发表时间:2016 发表作者:Xin Rong 论文链接:论文链接 为了揭开Word2vec的神秘面纱,不得不重新整理 ...

  8. CornerNet 算法笔记

    论文名称:CornerNet: Detecting Objects as Paired Keypoints 论文链接:https://arxiv.org/abs/1808.01244 代码链接:htt ...

  9. 目标检测入门论文YOLOV1精读以及pytorch源码复现(yolov1)

    结果展示 其中绿线是我绘制的图像划分网格. 这里的loss是我训练的 0.77 ,由于损失函数是我自己写的,所以可能跟大家的不太一样,这个不重要,重要的是学习思路. 重点提示 yolov1是一个目标检 ...

随机推荐

  1. JS中的instanceof和typeof,以及特殊引用类型

    1.instanceof是用于测试对象类型,通常格式为:a instanceof b,返回true或falise,表示为对象a是否是类型b的实例. typeof则是用于测试基本类型,包括undefin ...

  2. MySQL中 DECIMAL FLOAT DOUBLE的区别

    第一篇文章: MySQL中Decimal类型和Float Double等区别 MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型. 其区别在于,float,d ...

  3. abaqus重新划分网格

    首先建立了几何体: 装配并划分网格: 下面对单元操作: 删除单元: 单元中删除某条边: 单元 拆分边: 单元 交换对角线: 单元 拆分四边形到三角形: 单元 交换对角线: 单元 合并: 网格 网格 去 ...

  4. 去除最后一个li的样式

    推荐::::方法一,使用:first-child    纯css的:first-child伪类就可以胜任此任务,操作很方便,代码量忽略不计.支持IE7+,不支持IE6 :first-child /:l ...

  5. kvm-qcow2派生镜像的远程备份的方法!

    在虚拟化环境中,关于虚拟机的远程备份是一个比较重要的环节,这个是有关于整个机房挂掉之后,仍然可以恢复的最后一招. 在kvm中这种情况可以通过直接备份虚拟机的镜像文件(qcow2)到远端存储解决. 但有 ...

  6. Java实现对文本文件MD5加密并ftp传送到远程主机目录

    需求描述: 客户出完账之后需要把出账的数据以文本文件的方式传送给收入管理系统,客户以前是通过本地的一个工具软件上传的,由于安全监管的原因,不允许在本地使用工具上传,因此客户希望我们在已经上线使用的系统 ...

  7. input type='file'文件上传自定义样式

    使用场景: 在未使用UI库时免不了会用到各种上传文件,那么默认的上传文件样式无法达到项目的要求,因此重写(修改)上传文件样式是必然的,下面的效果是最近项目中自己写的一个效果,写出来做个记录方便以后使用 ...

  8. 二进制安装mysql5.7

    1.创建用户和组 groupadd mysql useradd -r -g mysql mysql 2.上传二进制包至/usr/local下解压并改名为mysql tar zxvf mysql-5.7 ...

  9. 史上最完整的MySQL注入

    原文作者: Insider 免责声明:本教程仅用于教育目的,以保护您自己的SQL注释代码. 在阅读本教程后,您必须对任何行动承担全部责任. 0x00 ~ 背景 这篇文章题目为“为新手完成MySQL注入 ...

  10. 《设计模式》学习&理解&总结

    教程地址:http://www.runoob.com/design-pattern/design-pattern-tutorial.html 教程书籍:<Android 设计模式解析与实战> ...