接上部分讨论:8. 深度学习实践:优化
SGD及其变种很可能是一般ML中应用最多的优化算法。
关键参数:学习率。最好的选择方法:监测目标函数值随时间变化的学习曲线。与其科学,更像艺术。实践中有必要随时间逐渐降低学习率。
SGD(1998年就有了)、小批量、基于梯度优化的在线学习算法,一个重要性质:每一步更新的计算时间不依赖于训练样本数目的多寡。
SGD的学习过程有时会很慢。动量法(1964年)旨在加速学习。积累了之前梯度指数级衰减的移动平均,并且继续沿着该方向移动。
普通的梯度步骤会浪费时间在峡谷的窄轴上来回移动:
动量正确的纵向穿过峡谷:
动量主要针对两个问题:一是海森矩阵的病态条件,二是随机梯度的方差。该图直观解释了第一个问题。红色路径表示动量学习规则所遵循的路径,黑色箭头表示梯度下降将在该点采取的步骤。
动量版算法引入了变量 v 充当速度角色,代表参数移动的方向和速率。速度被设定为负梯度的指数衰减平均。动量一词是物理类比,负梯度是移动参数空间中粒子的力。假设是单位质量,则速度向量 v 可看作是粒子的动量。 α 决定了之前梯度的贡献衰减得有多大,越大则之前梯度对现在方向的影响也越大(放大了之前梯度的效果)。
例如,当 α 为 0.9 时,对应着最大速度10倍于梯度下降算法。当许多连续的梯度指向相同的方向时,步长最大。马太效应的感觉。梯度下降算法基于每个梯度简单的更新一步。动量算法则使用力改变粒子的速度。
受Nesterov加速梯度算法(1983,2004)启发,Sutskever(2013)提出了动量算法的一个变种。和标准动量体现在梯度计算上。梯度计算在施加当前速度之后。
有的优化算法是非迭代的,仅是求解一个解点(例如,求二次函数的最小值)。有的本质上是迭代的,但优化时能在可接受时间内收敛到可接受的解,并且与初始值无关(凸优化,不论从哪走,都可以到碗底)。
DL训练算法通常没有这两种奢侈的性质。通常是迭代的,需要指定初始点。训练网络足够困难,大多数算法很大程度地受到初始化选择的影响。初始点能够决定算法是否收敛。当学习收敛时,初始点可决定学习收敛得有多快,以及是否收敛到一个代价高或低的点。
现代的初始化策略是简单的、启发式的。设定改进的初始化策略很困难,因为NN优化至今尚未很好理解。机理不知,没有指导。一个比较确知的特性是:初始参数需要在不同单元间破坏对称性。若相同激活函数的两个隐藏单元连接到相同的输入,则这些单元必须具有不同的初始参数。
本书讲了2页。理解没到,看了仅是字面意思,暂不做笔记。
学习率是难以设置的超参数之一。若我们相信方向敏感度有些轴对齐(互相正交吗?),则每个参数设置不同的学习率。在整个学习过程中自动适应这个学习率是有道理的。
以下讨论内容,是基于梯度优化方法(学习率是超参数),本节做的改进的算法,对基本形式做了各种调整,学习率(步长)在训练过程中成了一个变化着的值,谓之自适应。
2011年。思路:独立的适应所有模型参数的学习率,缩放每个参数反比于其所有梯度历史平方值总和的平方根(平方根值越大,缩得越美,学习率越小了)。
原来的参数更新,对于所有参数都使用相同的学习率。某一个参数向量变化为:
θt+1,i=θt,i−ϵ⋅g
现在,学习率随着每次迭代,根据历史梯度变化:
θt+1,i=θt,i−ϵr√+δ⋅g
r是d*d的对角矩阵,每个对角线位置i对应某个参数,i的值累加到t次迭代的对应参数的梯度平方和。平方根是因为实践中发现效果更好。
具有损失最大偏导的参数,则相应的有一个快速下降的学习率(缩得厉害)。具有小偏导的参数,在学习率上有相对较小的下降(缩得轻,学习率仍较大)。净效果是参数空间中更平缓的倾斜方向上(小偏导)取得更大的进步(学习率较大),越是陡急的方向上步子小一些。( 这块公式上还是没有倒清楚 )
凸优化时,该算法还行。然而经验上已发现,对于训练DL模型时,从训练开始时就积累梯度平方会导致有效学习率过早和过量的减小。
2012年,Hinton修改AdaGrad算法,以在非凸设定下效果更好,改变梯度累积,为指数加权的移动平均。当训练非凸函数的NN时,Ada的学习轨迹可能穿过了很多不同钢结构,最终到达一个局部是凸碗的区域。Ada根据平方梯度的整个历史收缩学习率,可能使得学习率在达到这样的凸结构前就变得很小了,从而胜利的前夜脚步慢了。
RMSProp使用指数衰减平均,以丢弃遥远故去的历史,使其能够在找到凸碗结构后快速收敛,就像一个初始化于该碗状结构的Ada算法实例。
算法标准形式:
加上了一个衰减速率,代表着对以前结果的考虑,若为0.5,则历史和现在都考虑着,若未0.1,则历史考虑1份,现在考虑9份。用来控制移动平均的长度范围。其余一样。
结合Nesterov动量的形式:
在动量中,步长因子上,考虑了累计梯度的效果。该法已被证明行之有效,目前常用。
2014年提出,源自“adaptive moments”,另一种学习率自适应的优化算法。
主要是基于RMSProp法来做。Adam中,动量直接并入了梯度一阶矩的估计(结合动量使用没有明确的理论动机)。其次,Adam中包括偏置修正,修正从原点初始化的一阶矩(动量项)和二阶矩估计。RMSProp也采用了二阶矩估计,但缺失了修正因子。Adam通常被认为对超参数的选择相当鲁棒。
没有一致共识。具有自适应学习率的算法族表现很好,但没有那个脱颖而出。
当前最流行的优化算法:SGD,动量SGD,RMSProp,动量RMSProp,Adam和AdaDelta。选择哪个算法:取决于你对哪个较熟悉,以便调节超参数。
暂不做详细阅读和笔记。
设H是需要标准化的某层的小批量激活函数,排布为设计矩阵。每个样本的激活出现在矩阵的每一行中。为了标准化H,将其替换为:
H′=H−μδ
μ 是包含每个单元均值的向量, δ 是包含每个单元标准差的向量。应用于矩阵H的每一行,每行内是逐元素运算。
本节暂不做详细笔记。
某些情况下,将优化问题分解可更快解决。我们相对于某个单一变量 xi 最小化 f(x) ,然后相对于另一个变量 xj 等,反复循环所有变量,达到局部极小值。称之为:坐标下降法。更一般的,块坐标下降法,是指我们对于某个子集(子集中只有一个元素时就是单个坐标下降了)的变量同时最小化。
当优化问题中的不同变量们,可以清楚分成相对独立的组时,坐标下降最有意义。举例,有代价函数为:
这是稀疏编码的学习问题。目标是寻求一个权重矩阵W(字典),可以线性解码激活值矩阵H(稀疏表示),以重构训练集X(原本样本)。第一项说H要尽量稀疏(非0元尽量少),第二项说尽可能编码X。以前做过笔记见《西瓜书》笔记11:特征选择与稀疏表示(三)。
代价函数非凸,但如果将训练算法的输入分成两个集合:字典W和表示H。最小化二者之一的任意一组变量的目标函数都是凸。块坐标下降允许我们高效的凸优化算法,交替做:固定H优化W,固定W优化H。
当然了,当一个变量的值很大程度地影响另一个变量的最优值时,坐标下降不是一个很好的方法。
Polyak平均(1992年)会平均优化算法在参数空间访问轨迹中的几个点。若t次迭代梯度下降访问了点 θ(1),...,θ(t) ,则Polyak平均算法的输出是 θ^(t)=1t∑iθ(i) 。
应用其到非凸问题时,通常会用指数衰减来计算平均值:
模型如果太复杂,难以优化。任务如果很困难,直接训练模型来解决的挑战很大。那么,可以训练一个较简单的模型来求解问题,然后逐步加大模型的复杂度可能会有效。训练模型求解一个简单问题,转移到大问题上,有时也会有效。
预训练:在直接训练目标模型求解目标问题之前,训练简单模型求解简单问题的方法(pretraining)。
贪心算法:将问题分解为许多部分,然后独立在每个部分求解最优值。但是,结合各个最佳部分不能保证得到一个最佳的完整解。然而,贪心算法计算上比求解最优联合解高效得多,而且我们常会接受该解。贪心也可紧接一个 精调(fine-tuning)阶段,联合优化算法搜索全问题的最优解。使用贪心解,来初始化联合优化算法,可以加大加速算法。
贪心预训练,在DL中普遍存在。greedy supervised pretraining。在2007年Bengio的原始版本中,每个隐藏层,以先前训练的隐藏层的输出,为输入。
2015年有版本是预训练深度卷积网络(11层),然后使用该网络前4层、最后3层初始化更深的网络(多达19层),并非一次预训练一层。非常深的新网络的中间层是随机初始化的。然后联合训练新网络。等等。
2007年Bengio提出的假说:有助于更好地指导深层结构的中间层的学习。
默默无闻的中间层,有机会被拉出来重点关注下,因此它们挺开心,表现也很好。
迁移学习 想法:2014年在一组任务上,预训练了一个8层权重的深度卷积网络(ImageNet数据集的子集)。然后用该网络的前k层初始化了一个同样规模的网络。然后第二个网络的所有层,联合训练以执行不同的任务(ImageNet数据集的另一个子集),但训练样本小于第一个任务。(似乎是第一个捕捉到了某种神秘信息,迁移地用到了第二个上)
实践中,选择一族容易优化的模型,比使用一个强大的优化算法更重要。NN在过去30年的大多数进步主要来自于改变模型族,而非改变优化过程。1980年代用于训练NN的带动量的SGD,仍然是现代NN的前沿算法。
现代NN的设计选择体现在:层之间的线性变换,几乎处处可导的激活函数,大部分定义域都有明显的梯度。LSTM,ReLU,maxout单元都比先前的模型使用更多的线性函数。
其他的模型设计策略还包括:层之间的线性路径,跳跃连接,减少了从较低层参数到输出最短路径的长度,缓解了梯度消失问题(2015年)。这是预训练策略的替代方法。以这种方式,可在一个阶段联合训练所有层,不改变架构,使得中间层,低层,可通过更短路径得到一些如何更新的有用信息。
暂不做详细笔记。