作者:CHEONG

公众号:AI机器学习与知识图谱

研究方向:自然语言处理与知识图谱

阅读本文之前,首先注意以下两点:

1. 机器学习系列文章常含有大量公式推导证明,为了更好理解,文章在最开始会给出本文的重要结论,方便最快速度理解本文核心。需要进一步了解推导细节可继续往后看。

2. 文中含有大量公式,若读者需要获取含公式原稿Word文档,可关注公众号【AI机器学习与知识图谱】后回复:变分推断第三讲,可添加微信号【17865190919】进学习交流群,加好友时备注来自CSDN。原创不易,转载请告知并注明出处!

本文将先对变分推断所要解决的问题进行分析,然后给出基于随机梯度上升法的变分推断解法。

一、本文结论

结论1: 变分推断的主要思想:在给定数据集XXX下,问题是求后验概率ppp,简单情况下后验概率ppp可直接通过贝叶斯公式推导求出,但有些情况无法直接求解。因此变分推断想法是先假设另一个简单的概率分布qqq,如高斯分布,通过优化ppp和qqq之间距离最小化,让概率分布qqq逼近ppp,这样就可以用概率分布qqq近似表示后验概率ppp。

结论2: 基于随机梯度上升法主要思路就是对优化的目标函数q∗=argmaxqELBOq^*=argmax_qELBOq∗=argmaxq​ELBO求梯度的过程。最后使用MCMC采样的方式近似求出梯度,并且考虑到求解出梯度近似值的稳定性,使用了重参数化技巧Reparameterization Trick。在梯度求出之后便可使用迭代方式求出参数。

二、问题分析

在上一节详细介绍了变分推断所要解决的问题,下面我们首先重新明确优化的目标函数

其中:

为了表示方便,这里假设q(z)q(z)q(z)中zzz是关于参数ϕ\phiϕ的函数,这样优化函数就变成:

在明确了优化函数后,接下来就通过随机梯度上升法求解,因此下面通过公式推导求求梯度。

三、公式推导

下面是L(ϕ)L(\phi)L(ϕ)关于ϕ\phiϕ求梯度的过程:

这里为了方便表示,做以下赋值操作,用AAA表示公式前半部分,用BBB表示公式后半部分:

先看BBB项,其中logpθ(x,z)logp_\theta(x,z)logpθ​(x,z)与L(ϕ)L(\phi)L(ϕ)无关,所以有:

所以最终化简可得BBB项为0,所以原始公式就只剩下AAA项:

所以可以将上述式子写成qϕq_\phiqϕ​期望的形式如下:

这样我们就将L(ϕ)L(\phi)L(ϕ)关于ϕ\phiϕ的梯度求出来了,是一个关于qϕq_\phiqϕ​的期望,就可以通过MCMC采样的方式把梯度具体表示出来,知道了梯度便可以利用梯度上升法进行求解了。首先通过MCMC采样法对zzz进行采样,zl∼qϕ,l=1,2,...,Lz^l \sim q_{\phi}, l=1,2,...,Lzl∼qϕ​,l=1,2,...,L,得到L(ϕ)L(\phi)L(ϕ)关于ϕ\phiϕ的梯度为:

知道梯度后便可以通过随机梯度上升法求解参数:

但这里存在一个问题,问题就出在:

当qϕq_\phiqϕ​很小时,如在0-1之间时,log函数的结果就会有很大的波动,会导致求出来的梯度值有很大的波动,这样MCMC采样时只有让LLL取非常大时才能避免这种波动带来的高方差High Variance的问题,所以在实际使用时存在工程上的问题。解决的方案就是使用重参数化技巧来避免。

四、重参数化技巧

Reparameterization Trick,假设:

其中

则:

在使用重参数化技巧之后,我们再来求目标函数的梯度值:

这里将qϕq_\phiqϕ​可以利用重参数化技巧可以等价替换成p(ε)p(\varepsilon)p(ε):

这里就是关于p(ε)p(\varepsilon)p(ε)的期望了,所以对ϕ\phiϕ求梯度时就不会那么复杂

这里我们再使用MCMC采样法对ε\varepsilonε进行采样,εl∼p(ε),l=1,2,...,L\varepsilon^l \sim p(\varepsilon), l=1,2,...,Lεl∼p(ε),l=1,2,...,L,最终可以得出目标函数的梯度值为:

得知梯度值之后,便可以使用随机梯度上升法对参数进行迭代求解:

【机器学习系列】变分推断第三讲:基于随机梯度上升法SGD的变分推断解法相关推荐

  1. 基于随机梯度下降法的手写数字识别、epoch是什么、python实现

    基于随机梯度下降法的手写数字识别.epoch是什么.python实现 一.普通的随机梯度下降法的手写数字识别 1.1 学习流程 1.2 二层神经网络类 1.3 使用MNIST数据集进行学习 注:关于什 ...

  2. 机器学习:随机梯度下降(SGD)与梯度下降(GD)的区别与代码实现。

    机器学习:随机梯度下降(SGD)与梯度下降(GD)的区别与代码实现. 梯度下降法(GD) 随即梯度下降(SGD) 代码实现 如果想细致的了解:-> 梯度下降法 梯度下降法(GD) 假设函数fx, ...

  3. 监督学习——随机梯度下降算法(sgd)和批梯度下降算法(bgd)

    线性回归 首先要明白什么是回归.回归的目的是通过几个已知数据来预测另一个数值型数据的目标值. 假设特征和结果满足线性关系,即满足一个计算公式h(x),这个公式的自变量就是已知的数据x,函数值h(x)就 ...

  4. 梯度下降(BGD)、随机梯度下降(SGD)、Mini-batch Gradient Descent、带Mini-batch的SGD

    原文:http://blog.csdn.net/llx1990rl/article/details/44001921 梯度下降(BGD).随机梯度下降(SGD).Mini-batch Gradient ...

  5. DistBelief 框架下的并行随机梯度下降法 - Downpour SGD

    本文是读完 Jeffrey Dean, Greg S. Corrado 等人的文章 Large Scale Distributed Deep Networks (2012) 后的一则读书笔记,重点介绍 ...

  6. 机器学习(四):批量梯度下降法(BGD)、随机梯度下降法(SGD)和小批量梯度下降法(MBGD)

    本文基于吴恩达老师的机器学习课程.看了吴恩达老师的机器学习课程,收获很多,想把课上学做的笔记结合自己的理解以及找到的一些资料综合起来做一个总结.大家感兴趣也可以自己去看一看吴恩达老师的课,这套课程,被 ...

  7. 深度学习系列之随机梯度下降(SGD)优化算法及可视化

    补充在前:实际上在我使用LSTM为流量基线建模时候,发现有效的激活函数是elu.relu.linear.prelu.leaky_relu.softplus,对应的梯度算法是adam.mom.rmspr ...

  8. 机器学习:SVM、软间隔、随机梯度下降SVM线性算法

    文章目录 SVM目标函数 SVM目标函数推导 函数间隔: 几何间隔: 软间隔.松弛 HingeLoss和软间隔 随机梯度下降算法 线性SVM的算法描述: 线性SVM算法实现: SVM目标函数 SVM目 ...

  9. 机器学习之梯度下降法(GD)、随机梯度下降法(SGD)和随机平均梯度下降法(SAGD)

    目录 基本原理 梯度下降法(Gradient Descent) 随机梯度下降法(Stochastic Gradient Descent,SGD)

  10. 深度学习必备:随机梯度下降(SGD)优化算法及可视化

    补充在前:实际上在我使用LSTM为流量基线建模时候,发现有效的激活函数是elu.relu.linear.prelu.leaky_relu.softplus,对应的梯度算法是adam.mom.rmspr ...

最新文章

  1. 数据结构之python实现顺序表
  2. Java中常见数据结构Map之HashMap
  3. Stanford机器学习笔记-5.神经网络Neural Networks (part two)
  4. mate30pro 优化 开发者选项_10 个开发者必知的 MySQL 8.0 新功能
  5. 网络编程套接字API
  6. 画春天的景色计算机教案,大班绘画春天来了教案
  7. BZOJ.3575.[HNOI2014]道路堵塞(最短路 动态SPFA)
  8. XP无法显示经典模式控制面板
  9. centos 的php5.3.3 升级5.5.3
  10. 异常的继承关系与捕获关系(只有直系的继承关系时,下面的类才能被捕获,和辈分无关!!)
  11. 下两个网段转发的路由设置_一台路由器下如何实现多个网络互通
  12. java linux 时间戳转时间_java算法unix时间戳转换(java算法)
  13. django前端页面下拉选择框默认值设置
  14. RALL机制的线程锁
  15. javascript 如何正确使用getElementById,getElementsByName(), and getElementsByTagName()
  16. break在c语言中的应用,c语言中break的用法
  17. 小米1S MIUI V5刷回V4教程
  18. 看完沐神的装机视频,原来还能这么玩?
  19. 一点体会:找工作这事儿
  20. springboot controller 中新建一个控制器类 提示该类从未被使用

热门文章

  1. Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!
  2. struts2中的action获取web资源
  3. leetcode 336. Palindrome Pairs
  4. 阿里云数据库使用初体验
  5. Java中Session详解
  6. http | 状态码
  7. 项不会计算为接受 0 个参数的函数_玩转excel函数:详解四种计数函数,从基础到提高...
  8. oracle转类型sql,[转]SQL Server 和Oracle 数据类型对应
  9. 口袋操作系统_从Windows CE到Windows 10X:盘点微软移动端操作系统
  10. java radix sort_Java RadixSort