博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
word2vec的数学原理(二)——基于huffuman softmax
阅读量:5871 次
发布时间:2019-06-19

本文共 4260 字,大约阅读时间需要 14 分钟。

一、W2V的两种模型:CBOW和Skip-gram

  W2V有两种模型,分别为CBOW和skip-gram,CBOW是根据上下文$context(w)$来预测中间词$w$,而skip-gram是根据中间词$w$来预测上下文$\displaystyle context(w)$ ;他们都有3层结构——输入层,投影层,输出层。(注:无隐藏层)

  

 

二、基于huffuman的CBOW

 1、网络结构

  H_CBOW的网络结构有3层,分别为输入层,投影层,输出层;以样本$(context(w),w)$为例,做简要说明。

  输入层:上下文的2c个词的词向量$v(context(x))$(假设上文和下文分别为c各词)

  投影层:将这个2c个向量直接求和,$\displaystyle x_{w}=\sum_{i=1}^{2C}v(context(w)_{i})$ 

  输出层:对应一棵huffuman树,它以词典中的词为叶节点,以词出现的次数为叶节点的权重来构建;其中叶节点的个数为N,非叶节点的个数为(N-1);每个非叶节点对应一个二分类器

      

   注:在以往的神经网络语言模型中,计算量高的地方在输出层矩阵运算和概率归一化,CBOW对此作出了两点改进:1、无隐藏层,输入层直接向量求和进行投影;2、输出层改为huffuman树,将原来的softmax线性搜索求极大(多分类),转化为求树的正确路径(多个二分类),大大减少计算量。

 

2、参数计算

2.1、符号的约定:

  以词典中的某个词w为例,约定一些符号

  $p^{w}$:词w对应的路径

  $l^{w}$:词w对应路径上的节点个数

  $p_{i}^{w},(i\in {1,2,...,l_{w}})$:路径$p^{w}$上的某个节点

  $[d_{2}^{w},d_{3}^{w}...d_{l_{w}}^{w}]$:词w的huffuman编码。(注:无根节点)

  $\theta_{i}^{w},(i\in {1,2,...,l_{w}-1})$:路径$p^{w}$上,内部节点的权重向量。因为每个内部节点对应一个二分类器,这些权重向量就是二分类器的参数(注:无叶节点)

        

   这里有一点需要比较注意的,hufuuman编码左边为1,右边为0;但二分类的类别相反,左边为负,右边为正。

 

 2.2、目标函数的推导

  给定一个词的$context(w)$,预测生成目标词$w$概率,相当于沿着huffuman树进行搜索,每经过一个内部节点,就进行一次二分类并生成一个概率,将路径上的所有概率连乘起来,就表示生成目标词$w$的概率;(分类时,规定分到左边为负类,huffuman编码为1;分到右边为正类,huffuman编码为0,这里有点傻逼,强行倒着来

  因此,对于目标单词$w$的条件概率为:

    $\displaystyle P(w|context(w))=\prod_{j=2}^{l_{w}} P(d_{j}^{w}|\theta_{j-1}^{w} ,x_{w})$ 

  其中,每个二分类器是一个逻辑回归分类器,概率表示为:

    $\displaystyle P(d_{j}^{w}|\theta_{j-1}^{w} ,x_{w}) = [\sigma (\theta_{j-1}^{w}\cdot x_{w})]^{1-d_{j}^{w}}+ [1-\sigma (\theta_{j-1}^{w}\cdot x_{w})]^{d_{j}^{w}}$ 

 

  参数估计的问题采用极大似然的思想,也即找到一组参数,使得根据上下文$context(w)$预测为目标词$w$的“整体概率”最大;对于给定的语料库T,整体的似然函数为:

    $\displaystyle L=\prod_{w\in T}P(w|context(w))$   #似然函数是“所有词的概率连乘”

       $\displaystyle =\prod_{w\in T}\left(\prod_{j=2}^{l_{w}} P(d_{j}^{w}|\theta_{j-1}^{w} ,x_{w}) \right )$   #每个词的概率是“路径上所有节点概率的连乘”

       $\displaystyle =\prod_{i=1}^{T}\left(\prod_{j=2}^{l_{w}}[\sigma (\theta_{i}^{w}\cdot x_{w})]^{1-d_{j}^{w}}+ [1-\sigma (\theta_{i}^{w}\cdot x_{w})]^{d_{j}^{w}}\right )$

       #每个节点的概率表示为“逻辑回归的预测形式”(1:负类,0:正类)

  对数似然函数为:

    $\displaystyle L=\sum_{w\in T}\left(\sum_{j=2}^{l_{w}}(1-d_{j}^{w})\cdot log[\sigma (\theta_{j-1}^{w}\cdot x_{w})]+ (d_{j}^{w})\cdot log[1-\sigma (\theta_{j-1}^{w}\cdot x_{w})]\right )$ 

       $\displaystyle =\sum_{w\in T}\left(\sum_{j=2}^{l_{w}}L(w,j)\right )$  #$L(w,j)$是每个二分类器的似然函数

 

 2.3、梯度上升法求解参数

  W2V其实没有直接优化上面的目标函数,而是采用随机梯度上升法,即每取一个样本$(context(w), w)$,就对所有的参数进行更新;并且优化$\displaystyle \left(\sum_{j=2}^{l_{w}}L(w,j)\right )$的方法是:独立地优化路径上每个二分类器的$ L(w,j)$,让每个$L(w,j)$同时往梯度上升的方向更新一小步,来逐步逼近整体的最大化。下面以样本$(context(w), w)$为例,推导参数的更新过程。

 

  1、更新二分类器的参数:从根节点到目标单词w,其路径上有$l^{w}-1$个二分类器,并且对于一个样本,每个二分类器都有对应的正确类别输出(往左分支预测为负,往右分支预测为正),使用随机梯度上升法来训练这条路径的每个二分类便可。

  $\displaystyle \frac{\partial L(w,j)}{\partial \theta _{j-1}^{w}}=\frac{\partial }{\partial \theta _{j-1}^{w}}\left \{ (1-d_{j}^{w})\cdot log[\sigma (\theta_{j-1}^{w}\cdot x_{w})]+ (d_{j}^{w})\cdot log[\sigma (\theta_{j-1}^{w}\cdot x_{w})] \right \}$ 

          $\displaystyle =(1-d_{j}^{w})\cdot [1-\sigma (\theta_{j-1}^{w}\cdot x_{w})]x_{w}- (d_{j}^{w})\cdot \sigma (\theta_{j-1}^{w}\cdot x_{w}) x_{w}$ 

          $\displaystyle =\left \{ (1-d_{j}^{w})\cdot [1-\sigma (\theta_{j-1}^{w}\cdot x_{w})]- (d_{j}^{w})\cdot \sigma (\theta_{j-1}^{w}\cdot x_{w}) \right \} x_{w}$ 

          $\displaystyle =[1-d_{j}^{w}-\sigma (\theta_{j-1}^{w}\cdot x_{w})]x_{w}$ 

  于是权重$\theta _{j}^{w}$的更新公式为:$\displaystyle \theta _{j-1}^{w} = \theta _{j-1}^{w} + \eta [1-d_{j}^{w}-\sigma (\theta_{j-1}^{w}\cdot x_{w})]x_{w}$ 

   

  2、更新词向量的参数:依次往梯度上升的方向,更新窗口的每个词的词向量

   $\displaystyle \frac{\partial L(w,j)}{\partial x_{w}}=[1-d_{j}^{w}-\sigma (\theta_{j-1}^{w}\cdot x_{w})]\theta_{j-1}^{w}$   

   词向量的更新公式为:$\displaystyle v(w_{i})=v(w_{i})+\eta \sum_{j=2}^{l_{w}}\frac{\alpha L(w,j)}{\alpha x_{w}},~~i\in 2C$ 

 

3、伪代码

  以样本$(context(w), w)$为例(每取一个样本就对所有的参数进行更新),下面是huffuman CBOW的参数更新过程

1.  $\displaystyle e=0$

2.  $\displaystyle x_{w}=\sum_{w\in context(w)}v(w)$

3.  $\displaystyle FOR~j=2:l^{w}~DO$

    $\displaystyle g = \eta [1-d_{j}^{w} - \sigma (\theta_{j-1}^{w}\cdot  x_{w})]$

    $\displaystyle e = e + g\theta _{j-1}^{w}$

    $\displaystyle \theta _{j-1}^{w} = \theta _{j-1}^{w} + gx_{w}$

4.   $\displaystyle FOR~i \in 2C~DO:$

    $\displaystyle v(w_{i})=v(w_{i})+e$

 

 

 

三、基于hufuman的skip-gram

 

转载于:https://www.cnblogs.com/liguangchuang/p/9738947.html

你可能感兴趣的文章
LVS + Keepalived 高可用群集
查看>>
KVM管理工具
查看>>
消失模设计与加工(FM-CAM)
查看>>
揭秘 AGV 物流机器人黑科技
查看>>
bash的配置文件
查看>>
SEO如何快速提高网站排名?
查看>>
H3C模拟器ping,tel,ssh配置
查看>>
js (jQuery) 之 取值
查看>>
私有云对企业来说有什么好处
查看>>
C语言编程数出1到100的整数中出现了多少次数字9
查看>>
手机相片删除了怎么恢复? 手机照片恢复方法汇总
查看>>
ansible 基本操作(初试)
查看>>
SQL SERVER模糊匹配查询
查看>>
进程与线程
查看>>
linux的free命令详解-内存是拿来用的不是拿来看的
查看>>
centos7安装python3
查看>>
openssl,加密,解密,https
查看>>
说说LAMP
查看>>
2013年思科万物互联IoE十大见解
查看>>
Linux学习笔记7-磁盘管理
查看>>