① 随机梯度下降算法
以线性回归为例:
预测函数为:
代价函数:
重复:{
}
当数据量过大时,梯度下降的算法会变得很慢,因为要对所有的数据进行求和。因为每次重复梯度下降都是所有数据全部求和,所以梯度下降算法又称之为 批量梯度下降(Batch Gradient Descent)
随机梯度下降在每一次迭代中,不用考虑全部的样本,只需要考虑一个训练样本。
针对一个样本,它的代价函数:
而针对所有样本的代价函数可以看作是对每个样本代价函数的平均:
随机梯度下降算法如下:
第一步,先随机打乱训练集样本。
第二步,进行梯度下降:
重复 {
循环所有样本 for i=1,2,3,...,m {
}
}
一开始随机打乱数据是为了对样本集的访问是随机的,会让梯度下降的速度快一点。
该算法一次训练一个样本,对它的代价函数进行一小步梯度下降,修改参数 ,使得它对该样本的拟合会好一点;然后再对下一个样本进行运算,直到扫描完所有的训练样本,最后外部在迭代这个过程。
跟批量梯度下降算法不同的是,随机梯度下降不需要等到所有样本求和来得到梯度项,而是在对每个样本就可以求出梯度项,在对每个样本扫描的过程中就已经在优化参数了。
在梯度下降过程中,批量梯度下降的过程趋向于一条直线,直接收敛到全局最小值;而随机梯度下降不太可能收敛到全局最小值,而是随机地在其周围震荡,但通常会很接近最小值。
随机梯度下降通常需要经过1-10次外部循环才能接近全局最小值。
在批量梯度下降中,要判断是否收敛,需要在每一次迭代算法后计算 的值,根据值的变化来判断收敛。
在执行随机梯度下降时,不需要计算所有的样本的代价函数,只用在对某个样本进行梯度下降前计算该样本的代价函数 ,为了判断是否收敛,可以计算多次迭代后 的平均值,例如1000次迭代,在每次更新 前,计算最后1000次的的cost的平均值。
选择每隔多少次计算成本函数对梯度下降的过程也有影响:
上图中蓝色曲线是每1000次迭代,红色的是每隔5000次迭代。
因为随机梯度下降时会出现震荡,当迭代次数少时发现下降的曲线起伏很多,而迭代次数变大时,曲线就会变得平滑许多。缺点是每隔5000个计算,会增加计算成本。
增加迭代次数可以判断算法是否正确:
上图蓝色的是1000个迭代次数,通过这条曲线,不能很好的判断成本函数是否在下降,这时就需要添加迭代次数,当增加到5000次,则可以通过平滑的曲线判断,当下滑曲线是红色的时,说明算法是有效的,代价函数值在下降;当是紫色的曲线时,可以看到是一个平坦的线,这时判断算法可能出现问题了。
在随机梯度下降中,学习率 也会影响算法,当学习率减小时,下降曲线的震荡就会变小,而且会收敛到一个更好的解:
当看到曲线是上升的时候,可以尝试减小学习率看看效果。
在随机梯度下降中,如果想要收敛到全剧最小值,需要随着时间的变化减小学习率 的值:
学习率等于一个常数除以迭代次数加另一个常数,随着迭代次数增大,学习率会减小;但这会造成常数1和常数2的选择问题。
② SAC算法解析
上一篇文章介绍了利用确定策略来解决连续控制问题的DDPG,现在再来介绍一种非常牛的用随机策略来做连续控制的方法 Soft Actor Critic (SAC) 。它是一种以off-policy的方式来优化随机策略的算法,它的核心特点是 熵正则化 , 策略的训练在最大化预期回报和最大化熵之间作了个权衡,在这一点上实际也跟exploration还是exploitation有重大关系,增加熵会导致更多探索,这可以加速之后的学习,还可以防止策略过早地收敛到一个糟糕的局部最优。
为了防止有些人不太清楚熵的概念,在正式开始讲SAC之前,我稍微介绍一下熵的概念,以及随机策略的好处。
这里的熵指的是信息熵 ,它代表一个随机变量 所有可能取值的自信息 的加权求和:
正如上式所示,随机变量越是随机,熵就越大。根据热力学第二定律,自然界本身无时无刻不处在于一个熵增的过程之中,即不断走向混沌,而人类的奋斗进程则是对抗自然的熵减过程,他期望变得明确和有序,强化学习的过程也是如此。
一般的,强化学习的目标在于最大化奖励,即最大化动作状态价值 ,确定策略可以直接选择最大 的 来行动,但是这样就会使得操作模式是固化的,比如训练一个机械臂去捡东西,实际运动轨迹可以多种多样,而确定策略就会使这个动作变得很单调。 并且如果是在对抗的环境中,这种固定化的操作也容易被对手利用而存在漏洞,而基于策略 随机采样的动作 来行动就可以有效避免这一点,并且 的熵越大,也便代表动作越随机,越能在同一情况下做出不同的动作,让对手无法轻易预测,当然在训练时鼓励熵增带来的探索优化的好处也是不言而喻的。
actor-critic方法依赖于策略梯度,目标是利用梯度上升来让 最大化,因为期望不好求,于是就用蒙特卡洛方法来近似:
假设动作 是 维的,那么策略 使用 个高斯分布 连乘的方式来近似 :
而其中的 和 使用神经网络来近似:
相对于A3C之类的算法只给策略网络增加了熵正则,SAC给价值网络也增加了熵正则,这样鼓励产生更多的状态空间,进一步增加了探索性,使得模型更具鲁棒性。它的做法是通过修改了普通策略学习的目标函数,在每一步的回报中增加了策略的熵,于是目标就变成了
于是策略梯度就变成了:
然后训练方式基本和普通的actor-critic架构一致...
如果只是像上面那样的网络来训练,很明显会存在高估的问题,在最大化Q值时会导致高估,而在通过自身网络来计算TD目标的时候又将高估无限传导进一步导致了高估。因此,为了解决高估问题,我们必须要斩断这种传导以及最大化带来的高估。SAC采用了一个一个类似TD3算法中的clipped double-Q 技巧。
如上图所示,SAC使用两个Q网络,并通过取最小的Q值的方式来避免最大化带来的高估,并且使用延迟的价值网络(通过Polyak平均)来缓解bootstraping带来的高估无限传递。具体是这样一个训练过程:
另外,注意一点,上面提到的那个策略熵平衡系数 可以手工设置超参数,也可以使用自动的方式调整的,工业上倾向于自动的方式。
③ 瓒呭儚绱/浣撶礌鍒嗗壊绠楁硶绠浠
鍦ㄥ浘镀忓勭悊镄勫囧欎笘鐣岄噷锛岃秴镀忕礌灏卞儚鏄灏嗗儚绱犱笌锲惧儚瀵硅薄涔嬮棿镄勭晫闄愭ā绯婂寲锛屽舰鎴愪竴涓涓绮剧粏镄勫皬鍖哄烟锛屾疮涓鍖哄烟閮芥圹杞界潃楂桦害鐩镐技镄勫儚绱犵壒镐с傛兂璞′竴涓嬶纴涓寮犲浘鐗囱鍒嗗壊鎴愬ぇ灏忓悇寮傜殑瓒呭儚绱犲潡锛屼粠寰瑙傚埌瀹忚傦纴瀹冧滑涔嬮棿镄勫樊寮傚拰镵旂郴鎭板埌濂藉勚傝╂垜浠涓璧疯蛋杩涜秴镀忕礌镄勪笘鐣岋纴娣卞叆浜呜В鍏跺熀链瀹氢箟銆佸疄鐜版柟娉曚互鍙婅瘎浠锋爣鍑嗐
锘虹瀹氢箟
瓒呭儚绱狅纴椤惧悕镐濅箟锛屾槸锲惧儚涓姣斿崟涓镀忕礌澶с佹瘆鐗╀綋灏忕殑鍖哄烟銆傛疮涓鍖哄潡鍐呯殑镀忕礌鍏变韩鐩镐技镄勭壒寰侊纴渚嫔备笅锲炬墍绀猴纴阃氲繃璋冩暣涓嶅悓镄勯槇鍊硷纴鎴戜滑鍙浠ュ缑鍒颁笉钖屽ぇ灏忕殑瓒呭儚绱犲垝鍒嗭纴濡64鍧椼256鍧楁垨1024鍧楋纴杩欎簺鍒掑垎浣撶幇浜嗗儚绱犻棿镄勫眰绾х粨鏋勚
瀹炵幇鏂规硶
瓒呭儚绱/浣撶礌鍒嗗壊绠楁硶镄勪袱澶у熀鐭虫槸锘轰簬锲捐虹殑绛栫暐鍜屾搴︿笂鍗囩殑鏂规硶銆傚浘璁烘柟娉曞阀濡椤湴杩愮敤浜嗗姩镐佽勫垝鍜岃竟鐣屾椠灏勶纴鏋勫缓锲惧儚镄勫叏灞链浼樿矾寰勶纴灞旷幇鍑哄己澶х殑锲炬悳绱㈡ц兘銆傝屾搴︿笂鍗囧垯鏄浠庣矖绯欑殑鍒濆嬭仛绫诲紑濮嬶纴阃氲繃杩浠d紭鍖栵纴阃愭ョ粏鍖栬秴镀忕礌镄勮竟鐣岋纴鐩磋呖杈惧埌鏀舵暃镙囧嗳銆
瀵规瘆杩欎袱绉岖畻娉曪纴锲捐烘柟娉曟洿娉ㄩ吨鍏ㄥ眬缁撴瀯锛岃屾搴︿笂鍗囧垯寮鸿皟灞閮ㄧ殑绮剧粏璋冩暣銆傚畠浠钖勮嚜鍦ㄤ笉钖岀殑搴旂敤鍦烘櫙涓鍙戞尌镌镫鐗圭殑浣灭敤銆
璇勪环镙囧嗳
璇勪环瓒呭儚绱犲垎鍓茬殑鍑嗙‘镐э纴鎴戜滑阃氩父鍏虫敞浠ヤ笅鍑犱釜鍏抽敭鎸囨爣锛
杩欎簺鎸囨爣鍏卞悓鏋勬垚浜呜瘎浠疯秴镀忕礌/浣撶礌鍒嗗壊绠楁硶镐ц兘镄勫氩厓瑙呜掞纴甯锷╂垜浠娣卞叆浜呜В绠楁硶镄勪紭锷c
④ 近端策略优化算法(PPO)
首先我们回顾一下“策略梯度方法(PG)”和“信赖域策略优化(TRPO)”。
1.策略梯度方法(PG)
策略梯度方法通过计算燃肢策略梯度的估计并利用随机梯度上升算法来工作。 最常用的梯度估计形式为:隐锋
其中 为随机策略, 是优势函数在时间步 的估计,在使用自动微分器时,我们的损失函数为:
2.信赖域策略优化(TRPO)
要优化的目标函数如下:
3.近端策略优化算法(PPO)
PPO1:截断替代目标
首先,我们令 ,所以 。 的替代目标为
上标 指的是 中的保守政策迭代,如果没有约束,最大化 将会导致非常大幅度的梯度更新灶段晌。为了惩罚策略的变化(即 远离1,即新旧策略的KL 散度不能太大),提出了如下的目标
论文中 ,直观示意图如下
该算法的意思为:
当A>0时,如果 ,则 ;如果 ,则 ;
当A<0时,如果 ,则 ;如果 ,则 ;
PPO2:自适应KL惩罚系数
在 中,使用“自适应惩罚系数 ” 来约束KL散度,在此算法的最简单实例中,我们在每个策略更新中执行以下步骤:
实验中,PPO2的效果没有PPO1的效果好
4.算法
其中 , 是系数, 表示熵奖励, 是平方误差损失
优势估计函数为
另外,我们可以使用广义优势函数来扩广 ,当λ= 1时,它会趋近到等式(7)
使用固定长度轨迹段的近端策略优化(PPO)算法如下所示。 每次迭代时,N个actor中的每个都收集T个时间步长的数据。 然后我们在这些NT时间步长的数据上构建替代损失,并使用 minibatch SGD(或通常为了更好的性能,Adam )进行K个epochs的优化。