©PaperWeekly 原创 · 作者|苏剑林

单位|追一科技

研究方向|NLP、神经网络

深度学习如此成功的一个巨大原因就是基于梯度的优化算法(SGD、Adam 等)能有效地求解大多数神经网络模型。然而,既然是基于梯度,那么就要求模型是可导的,但随着研究的深入,我们时常会有求解不可导模型的需求,典型的例子就是直接优化准确率、F1、BLEU 等评测指标,或者在神经网络里边加入了不可导模块(比如“跳读”操作)。

▲ Gradient

本文将简单介绍两种求解不可导的模型的有效方法:强化学习的重要方法之一策略梯度(Policy Gradient),以及干脆不需要梯度的零阶优化(Zeroth Order Optimization)。表面上来看,这是两种思路完全不一样的优化方法,但本文将进一步证明,在一大类优化问题中,其实两者基本上是等价的。

形式描述

首先,我们来形式地定义我们需要解决的问题。以监督学习为例,训练数据


















,模型为



















是待优化参数,其维度为 d,假设模型本身是可导的,其的一般形式为



























,其中




称为温度参数,没有特别注明的情况下默认






假如真实标签是







,预测标签是







,那么单个样本的得分记为















,训练目标希望总得分越大越好,即:

看上去挺复杂的,但事实上它的含义很直观清晰:我们想求出参数




,使得整个数据集的得分















尽可能大,而 ,说明模型预测时输出的是概率最大的那一个。说白了,我们希望“预测概率最大的那一个 y 就是评测得分最高的那一个 y”。

这个形式对应着相当多的机器学习任务,在 NLP 中包括文本分类、序列标注、文本生成等,甚至回归问题也可以对应上去,可以说是很有代表性了。其困难之处就是










这一步无法提供有效的梯度,因此不好直接用基于梯度的优化算法优化。

策略梯度

策略梯度的想法很直接,既然原始的目标(1)没法求梯度,那换个跟它强相关的、可求梯度的目标就行了,比如:

2.1 排序不等式

很明显,上述定义的目标并没有包含










之类的算子,因此它是可导的。那么我们首先想要知道的是上式跟原始目标(1)有什么关系呢?差异又在哪呢?这需要用数学中的“排序不等式”来回答:

排序不等式:对于



















以及



















,并假设











































的任一排列,那么:

也就是说“同序积和 ≥ 乱序积和 ≥ 倒序积和”。

排序不等式是很经典的不等式,网上很容易找到它的证明(一般用数学归纳法),这里就不证了。

根据排序不等式我们可以知道,如果目标(2)达到最大值,那么































是同序的,也就是说确实可以实现“预测概率最大的那一个 y 就是评测得分最高的那一个 y” 这个目标,但是同时还实现了“预测概率第二大的那一个y就是评测得分第二高的那一个 y”、“预测概率第三大的那一个 y 就是评测得分第三高的那一个 y” 等目标,而这些并不是原始目标所必须的。

所以,目标(2)跟原始目标是强相关的,但是要求更多一些。

注意到,排序不等式没有要求












都是非负数,所以实际的打分函数












有可能是负数的。

2.2 采样估计梯度

确定目标(2)是可行的之后,我们可以求它的梯度:

一般来说,求梯度























并不困难,而







才是主要的困难,因为它要对所有候选类别求和,而实际上的候选类别数目可能大到难以承受,相关讨论在之前的《漫谈重参数:从正态分布到 Gumbel Softmax》[1] 也出现过。因此,比较好的办法是转化为采样估计的形式,即:

这样原则上我们就只需要采样适当数目的 y 估计上式了,最后的结果便称为“策略梯度”。有了梯度,就可以套用现成的优化器来完成优化了。

2.3 降低方差

刚才我们说,往












里加上一个常数,并不会改变最终的结果。但是,它有可能改变采样估算的效率,用统计的语言来说,就是它能改变采样的方差。举个简单的例子,[4, 5, 6] 和 [-10, 10, 15],它们的均值都是 5(代表我们要估算的目标),但是它们的方差分别为 0.67 和 116.67,也就是后者方差远大于前者。

如果我们只从中采样一个样本,那么前者与目标的最大误差也不过是 1,后者最大误差能达到 15,最小误差都有 5,所以虽然理论上最终的均值都是一样的,但是前者的估算效率要远远高于后者(采样更少的样本,得到更高的估算精度)。

这个简单的例子告诉我们要提高估算效率,就要想办法得到方差更小的估计量。这时候我们往












里边减去一个常数 b(称为 baseline,“常数”是指不依赖于 y,但可以依赖于 x):

最终的结果(均值)不会产生变化:

但是它方差有可能变,我们希望最小化方差,根据































知最小化方差等价于最小化二阶矩:

这只不过是一个二次函数最小值问题,解得最优的 b 是:

即以





























为权重对














求加权期望。但是要获取每个候选类别的梯度成本会比较大,我们通常不考虑这个权重,而使用一个简化的版本:

结合式(6),我们可以发现思想其实很直观:就是要从

















里边采样若干个 y,然后算出














的均值 b,大于这个均值的执行梯度上升(强化效果),小于这个均值的执行梯度下降(削弱效果)。

2.4 一言以蔽之

简单来说,策略梯度就是在遇到有







操作等不可导目标函数时,换一个可导的目标(2),这时候用强化的语言来说,y 称为“策略”,

















称为“决策模型”,















就是“奖励”,然后配合采样估计和降低方差技巧,得到原模型的一个有效的梯度估计,从而完成模型的优化。

零阶优化

零阶优化泛指所有不需要梯度信息的优化方法,而一般情况下它指的是基于参数采样和差分思想来估计参数更新方向的优化算法。

从形式上来看,它是直接在参数空间中进行随机采样,不依赖于任何形式的梯度,因此理论上能求解的目标是相当广泛的;不过也正因为它直接在参数空间中进行采样,只是相当于一种更加智能的网格搜索,因此面对高维参数空间时(比如深度学习场景),它的优化效率会相当低,因此使用场景会很受限。

不过就算这样,也不妨碍我们学习零阶优化的思想,毕竟技多不压身。此外,深度学习虽然往往参数量很大,但是通常来说我们设计的模型大部分模块都是可导的,不可导的可能只有一小部分,因此也许有可能让可导部分直接用梯度优化器来优化,不可导的部分才用零阶优化,这便是它的应用场景之一了,这样的思想在很多 NAS 的论文中都出现过。

3.1 零阶梯度

零阶优化不需要我们通常意义下所求的梯度,但是它定义了一个基于采样和差分的“替代品”,我们暂且称为“零阶梯度”:

对于标量函数 f(x),定义它在 x 处的零阶梯度为:

其中




是事先给定的小正数,







则是事先指定的均值为 0、协方差矩阵为单位矩阵的分布,通常我们会使用标准正态分布。

可以看到,只需要从







中采样若干个点,就可以对零阶梯度进行估算,而有了零阶梯度之后,我们就可以把它当作普通的梯度来套用基于梯度的优化器,这便是零阶优化的基本思想。

特别地,如果







本身是可导的,那么 ,所以当






时:

也就是说


















等于普通的梯度,所以


















确实是普通梯度的合理推广之一。

3.2 也有basline

善于推导的读者可能会发现,在定义(11)中,由于







的均值为 0,所以








其实不影响最终结果,即:

那么








的作用是什么呢?其实跟前面策略梯度一样,都是为了降低方差,我们同样可以引入 b,然后最小化二阶矩(等价于最小化方差):

解得最优的 b 为:

实验的时候,可以直接用有限个样本估计上式。事实上,如果







是可导的话,可以用泰勒展开近似完成积分,结果是

















,从这个角度看直接取









也是一个合理的选择,这就说明了引入








项的必要性与合理性。

3.3 一言以蔽之

零阶优化方法主要是基于差分来定义了一个梯度的合理推广,由于算差分不需要函数的可导性,因此自然能适用于可导/不可导目标的优化。

当然,由于 u 的维度就是全体参数




的维度,对于深度学习这样的参数量巨大的模型,其实更新过程中的方差会很大,不好收敛,所以通常来说零阶优化只用来优化模型的一小部分参数,或者作为辅助优化手段(比如“可导目标+普通梯度+大学习率”与“不可导目标+零阶梯度+小学习率”交替更新)。

对于直接在高维空间中应用零阶优化方法,也有一定的研究工作(比如Gradientless Descent: High-Dimensional Zeroth-Order Optimization [2] ),但还不算很成功。

此外,之前在《从采样看优化:可导优化与不可导优化的统一视角》[3] 介绍的统一视角,也可以看作是一种零阶优化方法,它是对常见优化思路的更统一的推广(通过它可以导出梯度下降、牛顿法、零阶梯度等),但原则上来说,它也存在跟零阶梯度一样的方差大等“通病”,这是零阶优化方法很难避免的。

貌离神合

看上去,策略梯度和零阶优化确实有很多相似之处,比如大家都是需要随机采样来估计梯度,大家都需要想办法降低方差,等等。当然,不相似之处也能列举出不少,比如策略梯度是要对策略空间采样,而零阶优化则是对参数空间采样;又比如策略梯度本质上还是基于梯度的,而零阶优化理论上完全不需要梯度。

那么,两者之间的关系究竟是怎样呢?接下来我们将会证明,对于本文开头提出来的优化问题(1)来说,两者基本上是等价的。证明的思路是求目标(1)的零阶梯度,经过一系列简化后发现它基本上就是策略梯度。

4.1 划分全空间

我们记:

那么根据式(13),它的零阶梯度是:

它可以转化为:

看起来很复杂,其实思想很简单,就是不同的u的预测结果 也不同,我们将预测结果同为y的所有 u 放在一起,记为














,这时候全空间









就被划分为互不相交的子集














了。

前面没有特别注明积分区域的积分默认是在全空间









进行的,划分空间后,它就等于在各个划分的子集














上的积分之和了。

4.2 示性函数

然后,我们用一个“示性函数”技巧,定义:

那么:

回顾














的含义,对于任意
















,模型




















的预测结果就是 y,在示性函数里边则输出 1,那么我们可以发现实际上就有:

其中




是 softmax 里边的温度参数(文章开头已经说明)。根据这个结论,我们可以近似地用




















代替












,然后代入上述各个式子,得到:

4.3 近似求积分

最后,由于




















是可导的,因此利用展开 代入上式完成对 u 的积分得:

对比式(4)可以发现,上式右端正是策略梯度。

所以,看起来差异蛮大的零阶梯度,最终指向的方向实际上跟策略梯度是相近的,真可谓貌离神合、殊途同归了,有种“正确的答案只有一个”的感觉。这不禁让笔者想起了列夫·托尔斯泰的名言:

幸福的家庭都是相似的,不幸的家庭各有各的不幸。

参数的更新方向也是如此。

文末小结

本文主要介绍了处理不可导的优化目标的两种方案:策略梯度和零阶优化,它们分别是从两个不同的角度来定义新的“梯度”来作为参数的更新方向。

表面上来看两者走了不同的路径,但笔者的探讨表明,在处理跟策略梯度一样的优化问题时,零阶优化所给出的更新方向跟策略梯度基本上是等价的,两者殊途同归。此外,本文也可以作为强化学习的入门资料供初学者参考。

参考文献

[1] https://kexue.fm/archives/6705

[2] https://arxiv.org/abs/1911.06317

[3] https://kexue.fm/archives/7521

更多阅读

#投 稿 通 道#

 让你的论文被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得技术干货。我们的目的只有一个,让知识真正流动起来。

???? 来稿标准:

• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志

???? 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site

• 所有文章配图,请单独在附件中发送

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通

????

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

殊途同归的策略梯度与零阶优化相关推荐

  1. 冯·诺伊曼奖得主Jorge Nocedal:增强学习中零阶优化方法及其应用(附演讲视频和PPT)

    2020 北京智源大会 本文属于2020北京智源大会嘉宾演讲的整理报道系列.北京智源大会是北京智源人工智能研究院主办的年度国际性人工智能高端学术交流活动,以国际性.权威性.专业性和前瞻性的" ...

  2. 陈丹琦团队提出低内存高效零阶优化器MeZO,单卡A100可训练300亿参数模型

    深度学习自然语言处理 原创 作者:辰宜 今天下午突然发现了一篇陈丹琦大佬的巨作~ 大家一起来简单瞅瞅. 本文旨在介绍一种用于fine-tuning语言模型(LM)的低内存优化器--MeZO,内存减少多 ...

  3. Proximal Policy Optimization (PPO) 算法理解:从策略梯度开始

    近端策略优化(PPO)算法是OpenAI在2017提出的一种强化学习算法,被认为是目前强化学习领域的SOTA方法,也是适用性最广的算法之一.本文将从PPO算法的基础入手,理解从传统策略梯度算法(例如R ...

  4. 强化学习(九)- 策略梯度方法 - 梯度上升,黑箱优化,REINFORCE算法及CartPole实例

    策略梯度方法 引言 9.1 策略近似和其优势 9.2 策略梯度定理 9.2.1 梯度上升和黑箱优化 9.2.2 策略梯度定理的证明 9.3 REINFORCE:蒙特卡洛策略梯度 9.3.1 轨迹上的R ...

  5. 损失函数与优化器理解+【PyTorch】在反向传播前为什么要手动将梯度清零?optimizer.zero_grad()

    目录 回答一: 回答二: 回答三: 传统的训练函数,一个batch是这么训练的: 使用梯度累加是这么写的: 回答一: 一句话,用来更新和计算影响模型训练和模型输出的网络参数,使其逼近或达到最优值,从而 ...

  6. THOR:MindSpore 自研高阶优化器源码分析和实践应用

    摘要:这篇文章跟大家分享下THOR的实践应用.THOR算法的部分内容当前已经在MindSpore中开源 本文分享自华为云社区<MindSpore 自研高阶优化器源码分析和实践应用>,原文作 ...

  7. PARL源码走读——使用策略梯度算法求解迷宫寻宝问题

    前不久,百度发布了基于PaddlePaddle的深度强化学习框架PARL.git传送门 作为一个强化学习小白,本人怀着学习的心态,安装并运行了PARL里的quick-start.不体验不知道,一体验吓 ...

  8. 【RL】策略梯度(VPG)与Actor-critic的思想与推导

    获取更多内容,请访问博主的个人博客 爱吃猫的小鱼干的Blog 一 RL学习什么 动作值函数(Q函数). 以Q-Learning.DQN为代表,这个系列的算法学习最优动作值函数 Q∗(s,a)Q^*(s ...

  9. 策略梯度模型 (Policy Gradient)原理与实现

    作者:陆平 1. 智能体与环境 策略梯度(Policy Gradient)模型是强化学习中的一个经典基础模型.它用来在某种环境下训练智能体.对于一些简单场景,我们可以把智能体与环境及关系抽象为: 智能 ...

最新文章

  1. CRichEditCtrl 好象没有复制、粘贴的功能(Ctrl+C、Ctrl+v都不好用
  2. 【正则】匹配html标签里的内容,不含标签
  3. 卡顿严重_王者峡谷:S20出现bug?卡顿十分严重
  4. 计算机科学最重要的32个算法
  5. emlog充值插件_常用十大必备Emlog插件
  6. palindromic java_LeetCode(java)5. Longest Palindromic Substring
  7. 关于scanf和cin的大数据读入效率
  8. 作者:桑基韬(1985-),男,博士,中国科学院自动化研究所副研究员
  9. silverlight 自定义资源整理(待后续补充)
  10. java 表达式2004的值_javaSE习题 第三章 运算符、表达式和语句
  11. rabbitmq python 发送失败_python rabbitmq no_ack=false
  12. hdu1166 敌兵布阵 线段树
  13. MySQL 03-MySQL安装-直接解压二进制文件(CentOS6)
  14. Hadoop在运行几个T数据量时报堆内存溢出
  15. 编程基本功:如果可能,不用if,尽量使用switch
  16. Know Difference between Oracle Reserved Words and Keywords
  17. 计算机-库win10,Win10如何在资源管理器中显示“库”
  18. app内录屏开发 ios_iOS端屏幕录制Replaykit项目实践
  19. C#技术交流④群正式开建,诚邀各路大佬莅临指导
  20. windows和android双系统平板,平板电脑双系统和安卓单系统,哪个好用?

热门文章

  1. Angularjs(一)
  2. json txt格式转换器_SpringBoot项目中如何定制HTTP消息转换器
  3. log4j控制台乱码解决办法
  4. 今天写一个关于浮动的页面,页面高度不能设置。用元素将他撑开。
  5. 【C++】【TinyXml】xml文件的读写功能使用——写xml文件
  6. 最常用的13条mysql语句
  7. /usr/local/php-5.2.14/sbin/php-fpm start Starting php_fpm –fpm-config
  8. 利用SQL中的递归返回多行数据的连接
  9. php协程实现mysql异步_swoole与php协程实现异步非阻塞IO开发
  10. java成果_JAVA WEB期末项目第二阶段成果