简介

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. java上传文件常见几种方式

    1.ServletFileUpload 表单提交中当提交数据类型是multipare/form-data类型的时候,如果我们用servlet去做处理的话,该http请求就会被servlet容器,包装成 ...

  2. Mybatis批量更新比较

    https://blog.csdn.net/lu1024188315/article/details/78758943

  3. 获取父窗口的xxx节点的方法

    window.parent.document.getElementById("xxx");获取父窗口的xxx节点$("#myEle", window.paren ...

  4. Problem creating zip: Execution exce ption (and the archive is probably corrupt but I could not delete it): Java heap space -> [Help 1]

    今天mvn编译的时候报错:  [ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.5.5:s ...

  5. LCD调试

    (1) 液晶显示模式 并行:MCU接口.RGB接口.Vysnc接口 串行:SPI接口.MDDI接口 (2) 屏幕颜色 实质上即为色阶的概念.色阶是表示手机液晶显示屏亮度强弱的指数标准,也就是通常所说的 ...

  6. DOTween的基本用法

    首先声明一点,不要简单的认为 DOTween 只能用在 Transform 组件上完成一些简单的动画,或者是完成一些 UI 动画,DOTween 的用途是很广的,unity中有很多组件都可以使用 DO ...

  7. Oracle去除重复(某一列的值重复),取最新(日期字段最新)的一条数据

    转自 : http://blog.csdn.net/nux_123/article/details/45037719 问题:在项目中有一张设备检测信息表DEVICE_INFO_TBL, 每个设备每天都 ...

  8. 基于MFC的socket编程

    网络编程 1.windows 套接字编程(开放的网络编程接口)添加头文件#include<windows.h> 2.套接字及其分类 socket分为两种:(1)数据报socket:无连接套 ...

  9. POJ2391 Ombrophobic Bovines

    Ombrophobic Bovines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19359   Accepted: 4 ...

  10. XML学习总结一

    1.声明 <?xml version="1.0"  encoding="gb2312"?> version属性指定该文档遵守的版本号,通常为1.0X ...