本次ICML会议的tutorial安排在主会前一天。这次tutorial内容非常丰富,有微软亚研的hekaiming(已经跳去facebook)介绍深度残差网络,也有deepmind的david silver介绍强化学习,还有一系列优化相关的topic等等。笔者选取了深度残差网络,随机梯度,深度强化学习三个topic,下面简单做一下与会分享:
Deep Residual Network
He Kaiming FACEBOOK
相关介绍链接 http://kaiminghe.com/icml16tutorial/index.html。
He kaiming在这个tutorial中重点介绍了他们组最近提出的深度残差网络。在深度学习过程中,我们习惯把层数加深来获得更深的网络结构和更强的表达能力,但是层数加深往往会给模型参数优化带来困难,让整个结构不可学习。He等人的工作是设计了一套简单清晰的结构框架使得更深的网络可学习,从之前最深的22层网络进行着层数的革命提升到实际可用的100层以上。
从可学习性维度来看,层数的不同我们的设计也需要有相应的变化:如果层数小于5层,那么一般的bp可以直接使用;如果层数大于10层,那么就需要考虑一些初始化,或者batch数据规范化的方式来处理;如果层数大于30层,有效的删减链接是一种方式;如果大于100层,需要引入identity skip connection;大于1000层的方法还在研究当中。
对于初始化和batch数据规范化这里做一个简单的介绍,在Lecun et al 1998 “Efficient Backprop”一文最先提出。从线性激励函数出发,我们知道输出的方差实际上是正比于输入的方差,正比值和权重的方差有关,为了避免随着层数增加的梯度弥散现象,可以设定权重的方差初始化为1,如果是relu函数需要相应的调整。Batch数据规范化,把每层的输入按照零均值单位方差进行规范化,输出要做一下相应的调整,这样也是在一定程度上避免梯度弥散的问题,从实际效果上来讲可以加速训练,对初始化不敏感等。
但是对于构建更加深层的网络,初始化和batch数据规范化还不够,更深层可能会带来更高的训练误差,说明可学习性成为一个问题。但是反过来看,更深的网络拥有更大的解空间,相对于较浅层的网络,不应该训练误差都更大,因为即使新增加的层设计成单位层也应该可以达到和原来浅层网络一样的结构,所以困难主要集中在层数变深之后优化的困难。
基于此,He等人设计了residual net网络。传统结构中我们希望通过两层网络由输入x得到输出H(x),在residual net中,我们希望引入一个单位映射,使得H(x) = F(x) + x。这样设计的好处是两层结构学习的是残差F(x),复杂的网络不用学习完整的表达H(x),只用学习残差即可。当优化时,借助于单位映射,深层的loss可以很容易的传导到浅层。从另外一个维度来讲,引入单位映射,我们在优化时有能力忽略掉一些层。
基于100多层的网络,作者进一步从表示,优化,泛化能力三个层面探讨了深度残差网络的未来。从表达能力维度来看,残差网络并没有新增任何优点,但是可以使得模型变深;从优化维度来看,残差网络的重点突破在于使得正反向传播弥散问题得到缓解;从泛化能力来看,残差网络虽然没有明显的优点但是又深又瘦的网络结构会让泛化能力更好。
而如果要把100层的网络扩展到1000层以上,需要围绕单位映射好好做文章。如果是H(x) = F(x) + x这样的结构,那么X_L = x_l + sum_{i=l}{L-1} F(x_i),不同层之间的传导非常平滑,最后的输出可以认为是一个加性模型,而反过来如果不是残差网络,那么输入到输出是一个乘性模型,对于正反向传播都会带来问题。基于此,He等人指出对于正反向传播,不能设计乘性模型来阻碍传播,单位映射和加性模型的设计成为必然。
笔者很认可He等人在深度残差网络设计中的思想。随着模型进一步go deeper,我们的模型设计需要围绕两个方面具体展开:
表达能力,这一块具体看是否捕捉了数据的性质,深度残差网络基于的cnn基本building block已经把这一点考虑进来,而对于我们用户数据,结构上的设计还存在很大空间;
优化能力,这一块看模型是否能真正的被学习到,一个复杂不可学的模型不如一个简单可学习的模型,residual网络通过传导上的优化可以去解决梯度弥散的问题,这样的逻辑应该可以处理所有涉及反向传播的网络结构优化。
Stochastic Gradient Methods for Large-Scale Machine Learning
Leon Bottou (Facebook AI Research), Frank E. Curtis (Lehigh University), and Jorge Nocedal (Northwestern University)
这个talk主要介绍的是随机梯度法在大规模机器学习问题里面的应用,相关文章已经在arxiv上贴出来http://arxiv.org/abs/1606.04838。这个talk具体从三个方面展开,a. 随机梯度的概括,b. 理论分析,c. 二阶方法和减少噪声。
1.sg方法的概括
随机梯度法(SG方法)的思路,简单理解就是每次挑选一个样本计算梯度,然后更新权重。传统的batch learning方法是过一下所有的样本计算所有样本梯度的平均值,再更新权重。从效率层面来看,sg方法要更加优越,但从收敛性角度来看,sg方法相对于梯度下降法是sublinear的收敛速度。
2.从理论维度来看sg方法
随机梯度法的理论分析主要集中其收敛性证明,以及收敛到最优值的可能性。这一块主要偏于纯优化理论分析,如果感兴趣可以深入文章仔细看一下推导。下面分享一些结论:对于凸目标固定步长和步长减小的情况下,sg方法得到的收敛点和最优值之间的gap存在一个上界。而对于dnn所涉及的非凸优化问题,这里的理论集中在前k次迭代梯度模的期望是有上界的,且对于步长减小的情况,要到达收敛,需要步长一阶级数发善,二阶级数收敛。
对于大规模learning的问题,作者分析了batch方法和sg方法在收敛性,达到一定误差情况下所需要的迭代时间上的差异。同时他们也指出,由于通讯,同步成本的一些问题,对于分布式计算也许sg并不是一个很好的方案。
3.sg方法的改进
对于随机梯度法存在两个方面的扩展:1、从noise reduction的角度能否向batch learning方法借鉴;2、选取的方向上面能否引入二阶信息。具体来说,随机梯度法要减少每次仅采用单个样本计算梯度的noise,可以从动态采样,梯度累积,迭代平均等方面优化。梯度累积方法的思路是引入之前存储的全局梯度信息来修正由单个batch计算梯度得到的方向,例如svrg,saga方法。
SVRG方法会记录所有样本对应的梯度,然后每次挑选一个样本确定更新方向的时候,计算这个样本对应的梯度,然后更新的量等于全部的梯度加上当前这个样本梯度减去历史这个样本的梯度,在一个batch样本全部过一遍后,更新一下整体基准的w并计算其对于所有样本的梯度。
SAGA算法是采用一个table记录所有样本的梯度,然后每次随机挑选的样本会把其对应的梯度更新,然后整体上使用所有样本的平均梯度去更新。迭代平均的方法是直接使用过去k步w的平均值作为下一步的w。
选取的方向引入二阶信息是说不仅单计算梯度,也可以使用牛顿法和拟牛顿法计算更新方向,比如lbfgs要应用于随机梯度的情况中,需要考虑逼近的hessian矩阵是一个降采样的hessian矩阵。
笔者认为sg算法目前在dnn优化,大样本优化上应用较广,但是我们目前的方案确实在并行处理维度上考虑的较少,同时对sg方法在采样噪声上的考虑也较少。最近sg方法在降低噪声问题有了不少扎实的工作,例如svrg,saga方法的深入方法和理论研究。结合主会上最新的研究进展,降样本噪声的随机梯度优化方法在理论上也有了一些不错的进展,建议接下来我们可以跟进一下具体方法,可能对我们的整体算法优化有明显的效率提升。
Deep Reinforcement Learning
David Silver Google DeepMind
强化学习是一套通用的目标决策框架:在任何一个状态,用户可以采取一个行动,行动会影响用户未来的状态,并获得一个回报,目标是选择合适的行动最大化未来的收益。而深度学习是一套通用的表示学习框架。我们可以采用rl来定义目标,dl提供具体的表示方法,处理玩游戏,探索,控制,交互等问题。
在rl领域我们重点描述三点,观测的状态,采取的行动,获取的回报。对于这三点,我们采用策略来描述用户的行为函数,用价值函数来评估每一个状态和行为,用模型来建模表示环境。其中策略函数是状态到行为的映射,价值函数是对未来回报的预测,而Q-value函数描述的是状态s时采用行动a得到的预期全部回报。
通常rl的方法分为三种:
- value-based RL,希望得到每个状态下最优的Q-value function;
- policy-based RL,希望能够直接获得最优的策略;
- model-based RL,希望建模环境。这三种方法都可以引入deep nn来做表示,使用sgd方法优化损失函数。
Value-based方法又称为Q函数学习。我们直接把状态和行为当作输入,把回报当作输出构建Q网络,学习到的最优Q函数应该满足Bellman方程,采用sgd方法最小化mse。在采用神经网络描述Q函数的时候要注意两点:
样本之间的相关性,
非平稳状态的target。
具体atari游戏中,DQN是直接把游戏的图片作为输入(可以认为是状态),然后输出是不同操作对应的Q函数值,当然基于DQN的扩展也有一些工作,例如Double DQN方法修改了最后优化的目标函数,将选择action和评价action的网络参数w分开;Prioritised replay,在priority队列里面根据DQN误差存储experience;Dueling network,这个工作获得了ICML2016的best paper,具体思路就是把Q网络拆分为价值函数(和行为无关)和优势函数两个部分。基于此,deepmind构建了名为Gorila的一套RL学习的框架并应用到google的推荐系统。
Policy based的方法则需要学习等到最优的策略函数。我们将策略函数用深度网络来表示,目标函数为预期的整体收益,采用sgd方法进行整体网络优化。
Actor-Critic算法是其中一个经典方法,首先评估Q函数,给定近似最优策略我们可以得到一个近似的Q函数,然后带入Q函数我们进一步优化策略网络。针对Actor-Critic的升级也有一些方法,例如A3C,其并不是直接估计Q函数,而是先估计状态函数,从状态函数出发估计Q函数,策略网络参数和Q函数部分的优化分开。
在解决连续动作空间的问题时,DPG方法是一个不错的解法,具体思路分为3个方面:
- 采用experience replay的方法构建数据集;
- Critic部分采用DQN;
- Actor策略函数优化沿着优化Q的方向进行。
对于有多个agent 的游戏中,FSP方法考虑不同agent的策略,学习平均意义上的最优response。
对于直接建模环境的方法目前仍然存在一些挑战,研究进展不大。
笔者认为RL特别是RL和DL的结合接下来会成为机器学习领域的一个热点。当我们将目光投向真实世界时,我们面对的问题不在只是纯粹的预测,分类,聚类问题。RL区别于传统的机器学习问题有几点不同:1、回报滞后;2、序列决策,不同状态采取的决策不一样,同时也会影响下一阶段的状态,整个序列决策的过程是相互联系的,而不是互相独立的。在这个过程中,参数化的方法,dl的引入只是具体的实现手段。我们要应用RL到我们的具体业务之中,需要有准确的切入点,不能生搬硬套。怎样更好的找到业务和技术的结合点,需要大家一起集思广益碰撞出火花。