赞
踩
目录
4.在平均值估计中的应用(Application to mean estimation)
四.随机梯度下降(stochastic gradient descent,SDG)
2.实例和应用(Example and application)
5.一种确定性表述(A deterministic formulation)
背景:
为什么?
在本次课中:
本节课内容:
这部分介绍一个 mean estimation 的算法,如何通过迭代的方式去求一个期望(expectation)
重温上节课学过的平均值估计问题(Revisit the mean estimation problem)
为什么我们如此在意平均值估计问题(mean estimation problem)?
强化学习(RL)中的许多量,如动作值和梯度(action values and gradients),都被定义为期望值,都需要用数据去估计
新问题:如何计算平均值 ?
有两种方法:
第一种方法:很简单,就是收集所有样本,然后计算平均值。
第二种方法:可以避免这一缺点,因为它是以递增(增量式的)(incremental)和迭代(iterative)的方式计算平均值的。基本思路就是来几个就先计算几个,这样效率更高。
下面详细介绍第二种方法
关于该算法的说明:
此外,这个算法也可以进一步推广:
还可以考虑一种表达式更一般的算法:
是随机近似理论(Stochastic Approximation)中非常经典的一个算法
随机近似(Stochastic approximation,SA)究竟是什么:
Robbins-Monro (RM) 算法:
问题陈述: 假设我们想找出方程的根
其中 w∈R 是待解变量,g : R → R 是一个函数。w 和 g 全都是标量
如何求解 g(w) = 0 的根?
有两种情况:
基于模型: 如果已知 g 或者其导数的表达式,有很多数值算法可以解决这个问题。If the expression of g or its derivative is known, there are many numerical algorithms that can solve this problem.
无模型: 如果函数 g 的表达式未知呢?例如,函数由人工神经元网络表示。可以通过神经网络求解,y = g(w),这个神经网络的输入是 w,输出是 y,神经网络里面其实就是 g(w)。常见的全连接神经网络其实就是做一个函数的近似,神经网络中我是不知道表达式的,现在问题就是输入什么样的 w 能得到一个 0 的输出?
求解 g(w)=0 这样的问题(求这个方程的根)可以用 RM 算法来求解,下面正式介绍 RM 算法:
目标是求解 g(w)=0,假设最优解是 w*
RM算法是个迭代式的算法,对 w* 第 k 次的估计是 wk,第 k+1 次的估计是 wk+1
用图片表示如下,有一个黑盒是 g(w),当我们输入 w 之后,有一个输出 y,但是这个 y 我们不能直接测量,还要加上一个噪音,这个噪音我们也不知道,反正能测量到的就是 g~。输入一个 w 就输出一个 g~
最开始的时候我输入 w1,得到 g~1,然后带入到下式的右侧,得到 w2,再把 w2 输入,再得到 g~2,再带入下式的右侧,得到 w3,以此类推。最后我们会得到 {wk} 的序列和 {g~k} 的序列。RM 算法就是通过这样一种方式来求解的。
这里与之前介绍的基于模型的强化学习和不基于模型的强化学习一样,有模型的时候不需要数据,没有模型就需要数据
刚才我们通过例子看到 RM 能找到那个解,下面分析为什么能找到解
g(w)=0 的解 w* 标在下图上,要求的就是这个最优解 w*
思路基本上是,我给一个 w 看一下输出,如果我发现输出是大于 0 的,那么 g(w) 就小一点,然后输出就会小一点,一直小到输出等于 0 的时候,w 就停止了。但是主要的精髓是每次小要小多少,这个就是 RM 算法给出的,小 ak×g 这么多
上述分析 RM 算法为什么能够收敛是直观的,但并不严谨。下面给出了严格的收敛结果。
对三个条件的解释:
下面对第二个条件再进行进一步的讨论,因为在未来的 Temporal-Difference learning 中,以及在看论文的时候也会经常看到这个条件:
什么样的 ak 满足条件 2 呢?
在 RM 算法中,三个条件若是有一个不满足,算法可能无法运行。
在实际中,虽然 1/k 满足条件 2,但是我们不总是让 ak =1/k,也不总是让 ak 趋向于 0。在许多 RL 算法中,ak 通常被选为一个足够小的常数。虽然在这种情况下第二个条件无法满足
在这种情况下,算法仍能有效运行。
把 RM 算法应用到 mean estimation 问题中
回忆之前(第一部分)介绍的 mean estimation 算法:(当时在 αk ≠ 1/k 的时候,这个算法的收敛性没法得到证明)
我们知道:
接下来,我们将证明该算法是 RM 算法的一个特例。然后,它的收敛性自然也就水到渠成了。
下面介绍一个更加复杂的 stochastic sequence 的收敛性的证明
第一部分(激励性实例中)介绍的 mean estimation 算法是第二部分介绍的 RM 算法的特殊情况
SGD 是 RM 算法的特殊情况,mean estimation 算法也是 SGD 的特殊情况
接下来,我们将介绍随机梯度下降(SGD)算法:
接下来看一下 SGD 算法要解决的问题是什么:
假设我们的目标是解决以下优化问题:
求解这个问题有多种方法,下面给出三种方法:
方法1:梯度下降(gradient descent,GD)
因为我们的目标是最小化一个目标函数,所以要用梯度下降;如果目标是最大化一个目标函数,就要用梯度上升。
缺点:难以获得期望值(expected value)。对此有两种解决方法:第一种方法,如果有模型就可以求出来;第二种方法,如果没有模型,用数据求
方法2:批量梯度下降(batch gradient descent,BGD)
接下来看看没有模型,用数据如何求
缺点:每次迭代都需要对每个 wk 进行多次采样。在每次更新 wk 的时候都要采样 n 次或者多次。这在实际中还是不实用,那么来到了方法3
方法3:随机梯度下降(stochastic gradient descent,SGD)
在 batch gradient descent 中,要采样很多次,如果采样越多,对期望估计的就越准,但是问题是也需要很多数据;在 stochastic gradient descent 中,只用了一个数据,估计的肯定是不精确的。之后会介绍它究竟不精确到什么程度,还能否解决优化问题?
考虑下面这样一个例子
有三个问题:
问题1:证明最优解为 w* = E[X].
问题2:写出解决这个问题的 GD 算法。
问题3:写出解决这个问题的 SGD 算法。
先知道 gradient descent,GD 算法,知道里面要有期望,把期望去掉就直接得到 SGD
请注意:
为什么 SGD 能够是有效的
SGD 的基本思路就是从 GD 出发, GD 中的期望 E 是不知道的,干脆把它去掉,用一个采样来近似这个 E,这个就是 SGD。用的这个采样有一个名字,叫 stochastic gradient;GD 中的期望叫 true gradient
用 stochastic gradient 去近似 true gradient,那么它们之间肯定是存在一个误差的,他俩之间的关系式如下:
stochastic gradient 肯定不是准确的,在这种情况下,用 SGD 是否能找到最优解 w* 呢?答案是肯定的,下面看一下怎样去找。
分析的基本思想是证明 SGD 是一个特殊的 RM 算法,RM 算法在满足一定条件下是可以收敛的,我们就知道 SGD 在满足什么条件下也是能够收敛的(若是不依赖于 RM 算法,直接去证明 SGD 的收敛性,会非常复杂)
下面看看如何证明 SGD 是一个特殊的 RM 算法:
SGD 要解决的问题是去最小化下面这样一个目标函数(objective function)
这个优化问题可以转化为一个寻根问题(a root-finding problem),就是求解一个方程的问题,因为上面的目标函数要达到最优的话,必要条件是它的梯度(gradient)等于 0:
如果让 g(w) 等于梯度(gradient),那么求解上上个图片的最优问题就变成了求解一个方程 g(w)=0 的问题。
那么 g(w)=0 可以用一个 RM 算法来求解。为了求解 RM 算法需要用到数据,也就是 g(w) 算法的表达式我们不知道,但是我们有一些测量,这个测量用 g~ 表示,g~ 是 w 和噪音的函数。在这里面,g~ 是 stochastic gradient:
所以,求解 g(w)=0 的 RM 算法是:
所以这个 RM 算法就是一个 SGD 算法,反过来说,SGD 算法是求解这样一个特殊问题的 RM 算法,相应的收敛性也可以用 RM 算法的收敛性结论来分析。
由于 SGD 是一种特殊的 RM 算法,那么 RM 算法的收敛性也可以应用到 SGD 的收敛性分析当中,它的收敛性自然也就不言而喻了。有下面一个结论:
分析它在收敛过程中有意思的行为
问题:SGD 是把 GD 当中的 true gradient 用 stochastic gradient 来代替,stochastic gradient 是有随机性的,会不会造成 SGD 的收敛随机性比较大呢。由于随机梯度(stochastic gradient)是随机的,因此近似是不准确的,那么 SGD 的收敛速度是慢还是随机的?
为了回答这个问题,我们考虑了随机梯度(stochastic gradient)和批量梯度(batch gradient)之间的相对误差(relative error):(分子是两者的绝对误差,分母是)
注意到:
上式表明,SGD 的收敛模式非常有趣。
下面看一个例子:
结果如下:
考虑下面的优化问题:
求解这个问题的梯度下降方法(gradient descent algorithm)是:
假设集合 {xi} 很大,我们每次只能获取一个数字 xi。在这种情况下,我们可以使用下面的迭代算法:把上式求平均的 xi 用 xk 代替
问题1:这个算法看起来与 SGD 非常类似,但这种算法是 SGD 吗?
问题2:
我们应该按照一定的顺序排列这些数字,然后一个一个地使用它们吗?还是随机抽样,还是以某种概率分布随机使用呢?能否重复使用一些数?
要快速回答上述问题,我们可以手动引入一个随机变量(introduce a random variable manually),将刚才一个不涉及随机变量的问题变成一个涉及随机变量的问题,将 SGD 的确定性公式(deterministic formulation)转换为随机公式(stochastic formulation)。
这里研究的问题依然是,有一个目标函数 J(w),有 n 个采样 xi,我要用这样一组数据优化目标函数,有三种方法:BGD,MBGD 和 SGD
BGD 每次都要用到 n 个所有的采样,在这个基础上求平均,这个可以说最接近于真实的期望(expectation);MBGD 不用所有的采样,每次只用全部采样中的一部分,选取一组数使用(总集合的子集),这组数的集合称为 Ik,这组数有 m 个,我在这一组数上进行平均;SGD 就是从集合 {xi} 中随机选择一个 采样出来。
比较 MBGD,BGD和 SGD
下面用例子例证这三个算法:
有 n 个数字,我们的目标是求平均值,求平均值的问题可以等价为一个优化问题:
更进一步的,如果 αk =1/k,可以把 wk 显式的形式给求解出来,对于 BGD 的情况,
下面通过一个仿真的例子看一下:
与之前的仿真类似,有一个 20×20 的区域,要在里面均匀的采 100 个点,用这 100 个点的数据放到刚才的三个算法中,看一下它们的收敛情况。
红色的线是 SGD,可以看出它的收敛速度还可以;紫色的线和蓝色的线的的区别是 batch size 不同,紫色的线的 batch size 每次是 5 个,蓝色的线的 batch size 每次是 50 个,蓝色的线收敛速度更快。右图的横轴是迭代的次数,纵轴是到达目标的距离。
这些结果是有用的:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。