有些优化算法本质上是非迭代的,只是求解一个解点。有些其他优化算法本质上是迭代的,但是应用于这一类的优化问题时,能在可接受的时间内收敛到可接受的解,并且与初始值无关。深度学习训练算法通常没有这两种奢侈的性质。深度学习模型的训练算法通常是迭代的,因此要求使用者指定一些开始迭代的初始点。此外,训练深度模型是一个足够困难的问题,以至于大多数算法都很大程度地受到初始化选择的影响。初始点能够决定算法是否收敛,有些初始点十分不稳定,使得该算法会遭遇数值困难,并完全失败。当学习收敛时,初始点可以决定学习收敛得多块,以及是否收敛到一个代价高或低的点。此外,差不多代价的点可以具有区别极大的泛化误差,初始点也可以影响泛化。

现代的初始化策略是简单的、启发式的。设定改进的初始化策略是一项困难的任务,因为神经网络优化至今还未被很好地理解。大多数初始化策略基于在神经网络初始化时实现一些很好的性质。然而,我们并没有很好地理解这些性质中的哪些会在学习开始进行后的哪些情况下得以保持。进一步的难点是,有些初始点从优化的观点看或许是有利的,但是从泛化的观点看是不利的。我们对于初始点如何影响泛化的理解是相当原始的,几乎没有提供如何选择初始点的任何指导。

也许完全确知的唯一特性是初始参数需要在不同单元间“破坏对称性”。如果具有相同激活函数的两个隐藏单元连接到相同的输入,那么这些单元必须具有不同的初始参数。如果它们具有相同的初始参数,然后应用到确定性损失和模型的确定性学习算法将一直以相同的方式更新这两个单元。即使模型或训练算法能够使用随机性为不同的单元计算不同的更新(例如使用Dropout的训练),通常来说,最好还是初始化每个单元使其和其他单元计算不同的函数。这或许有助于确保没有输入模式丢失在前向传播的零空间中,没有梯度模式丢失在反向传播的零空间中。每个单元计算不同函数的目标促使了参数的随机初始化。我们可以明确地搜索一大组彼此互不相同的基函数,但这经常会导致明显的计算代价。例如,如果我们有和输出一样多的输入,可以使用Gram-Schmidt正交化于初始的权重矩阵,保证每个单元计算彼此非常不同的函数。在高维空间上使用高熵分布来随机初始化,计算代价小并且不太可能分配单元计算彼此相同的函数。

通常情况下,我们可以为每个单元的偏置设置启发式挑选的常数,仅随机初始化权重。额外的参数(例如用于编码预测条件方差的参数)通常和偏差一样设置为启发式选择的常数。我们几乎总是初始化模型的权重为高斯或均匀分布中随机抽取的值。高斯或均匀分布的选择似乎不会有很大的差别,但也没有被详尽地研究。然而,初始分布的大小确实对优化过程的结果和网络泛化能力都有很大的影响。更大的初始权重具有更强的破坏对称性的作用,有助于避免冗余的单元。它们也有助于避免在每层线性成分的前向或反向传播中丢失信号——矩阵中更大的值在矩阵乘法中有更大的输出。如果初始权重太大,那么会在前向传播或反向传播中产生爆炸的值。在循环网络中,很大的权重也可能导致混沌(对于输入中很小的扰动非常敏感,导致确定性前向传播过程表现随机)。在一定程度上,梯度爆炸问题可以通过梯度截断来缓解(执行梯度下降步骤之前设置梯度的阈值)。较大的权重也会产生使得激活函数饱和的值,导致饱和单元的梯度完全丢失。这些竞争因素决定了权重的理想初始大小。

关于如何初始化网络,正则化和优化有着非常不同的观点。优化观点建议权重应该足够大以成功传播信息,但是正则化希望其小一点。诸如随机梯度下降这类对权重较小的增量更新,趋于停止在更靠近初始参数的区域(不管是由于卡在低梯度的区域,还是由于触发了基于过拟合的提前终止准则)的优化算法倾向于最终参数应接近于初始参数。在某些模型上,提前终止的梯度下降等价于权重衰减。在一般情况下,提前终止的梯度下降和权重衰减不同,但是提供了一个宽松的类比去考虑初始化的影响。我们可以将初始化参数θ\thetaθ为θ0\theta_0θ0​类比于强置均值为θ0\theta_0θ0​的高斯先验p(θ)p(\theta)p(θ)。从这个角度来看,选择θ0\theta_0θ0​接近0是有道理的。这个先验表明,单元间彼此互不交互比交互更有可能。只有在目标函数的似然项表达出对交互很强的偏好时,单元才会交互。此外,如果我们初始化θ0\theta_0θ0​为很大的值,那么我们的先验指定了哪些单元应互相交互,以及它们应如何交互。

有些启发式方法可用于选择权重的初始大小。一种初始化mmm个输入和nnn输出的全连接层的权重的启发式方法是从分布Wi,j∼U(−1m,1m)W_{i, j}\sim U(-\frac{1}{\sqrt{m}}, \frac{1}{\sqrt{m}})Wi,j​∼U(−m​1​,m​1​)中采样权重,而Glorot andBengio建议使用标准初始化(Normalized Initialization):
Wi,j∼U(−6m+n,6m+n)W_{i, j}\sim U(-\frac{6}{\sqrt{m+n}}, \frac{6}{\sqrt{m+n}})Wi,j​∼U(−m+n​6​,m+n​6​)

后一种启发式方法初始化所有的层,折衷于使其具有相同激活方差和使其具有相同梯度方差之间。这假设网络是不含非线性的链式矩阵乘法,据此推导得出。现实的神经网络显然会违反这个假设,但很多设计于线性模型的策略在其非线性对应中的效果也不错。

Saxe等人推荐初始化为随机正交矩阵,仔细挑选负责每一层非线性缩放或增益因子ggg。他们得到了用于不同类型的非线性激活函数的特定缩放因子。这种初始化方案也是启发于不含非线性的矩阵相乘序列的深度网络。在该模型下,这个初始化方案保证了达到收敛所需的训练迭代总数独立于深度。

增加缩放因子ggg将网络推向网络前向传播时激活范数增加,反向传播时梯度范数增加的区域。Sussillo表明,正确设置缩放因子足以训练深达1000层的网络,而不需要使用正交初始化。这种方法的一个重要观点是,在前馈网络中,激活和梯度会在每一步前向传播或反向传播中增加或缩小,遵循随机游走行为。这是因为前馈网络在每一层使用了不同的权重矩阵。如果该随机游走调整到保持范数,那么前馈网络能够很大程度地避免相同权重矩阵用于每层的梯度消失与爆炸问题。

可惜,这些初始权重的最佳准则往往不会带来最佳效果。这可能有三种不同的原因。首先,我们可能使用了错误的标准——它实际上并不利于保持整个网络信号的范数。其次,初始化时强加的性质可能在学习开始进行后不能保持。最后,该标准可能成功提高了优化速度,但意外地增大了泛化误差。在实践中,我们通常需要将权重范围视为超参数,其最优值大致接近,但并不完全等于理论预测。

数值范围准则的一个缺点是,设置所有的初始权重具有相同的标准差,例如1m\frac{1}{\sqrt{m}}m​1​,会使得层很大时每个单一权重会变得极其小。Martens提出了一种被称为稀疏初始化(Sparse Initialization)的替代方案,每个单元初始化为恰好有kkk个非零权重。这个想法保持该单元输入的总数量独立于输入数目mmm,而不使单一权重元素的大小随mmm缩小。稀疏初始化有助于实现单元之间在初始化时更具多样性。但是,获得较大取值的权重也同时被加了很强的先验。因为梯度下降需要很长时间缩小“不正确”的大值,这个初始化方案可能会导致某些单元出问题,例如Maxout单元有几个过滤器,互相之间必须仔细调整。

如果计算资源允许,将每层权重的初始数值范围设为超参数通常是个好主意,如随机搜索,挑选这些数值范围。是否选择使用密集或稀疏初始化也可以设为一个超参数。作为替代,我们可以手动搜索最优初始范围。一个好的挑选初始数值范围的经验法则是观测单个小批量数据上的激活或梯度的幅度或标准差。如果权重太小,那么当激活值在小批量上前向传播于网络时,激活值的幅度会缩小。通过重复识别具有小得不可接受的激活值的第一层,并提高其权重,最终有可能得到一个初始激活全部合理的网络。如果学习在这点上仍然很慢,观测梯度的幅度或标准差可能也会有所帮助。这个过程原则上是自动的,且通常计算量低于基于验证集误差的超参数优化,因为它是基于初始模型在单批数据上的行为反馈,而不是在验证集上训练模型的反馈。由于这个协议很长时间都被启发式使用,最近Mishkin and Matas更正式地研究了该协议。

目前为止,我们关注在权重的初始化上。幸运的是,其他参数的初始化通常更容易。设置偏置的方法必须和设置权重的方法协调。设置偏置为零通常在大多数权重初始化方案中是可行的。存在一些我们可能设置偏置为非零值的情况:

  • 如果偏置是作为输出单元,那么初始化偏置以获取正确的输出边缘统计通常是有利的。要做到这一点,我们假设初始权重足够小,该单元的输出仅由偏置决定。这说明设置偏置为应用于训练集上输出边缘统计的激活函数的逆。例如,如果输出是类上的分布,且该分布是高度偏态分布,第iii类的边缘概率由某个向量ccc的第iii个元素给定,那么我们可以通过求解方程softmax(b)=c\text{softmax}(b)=csoftmax(b)=c来设置偏置向量bbb。这不仅适用于分类器,也适用于其它的模型,例如自编码器和玻尔兹曼机。这些模型拥有输出类似于输入数据x的网络层,非常有助于初始化这些层的偏置以匹配xxx上的边缘分布。
  • 有时,我们可能想要选择偏置以避免初始化引起太大饱和。例如,我们可能会将ReLU的隐藏单元设为0.1而非0,以避免ReLU在初始化时饱和。尽管这种方法违背不希望偏置具有很强输入的权重初始化准则。例如,不建议使用随机游走初始化。
  • 有时,一个单元会控制其他单元能否参与到等式中。在这种情况下,我们有一个单元输出uuu,另一个单元h∈[0,1]h\in[0,1]h∈[0,1],那么我们可以将hhh视作门,以决定uh≈1uh\approx1uh≈1还是uh≈0uh≈0uh≈0。在这种情形下,我们希望设置偏置hhh,使得在初始化的大多数情况下h≈1h\approx 1h≈1。否则,uuu没有机会学习。例如,Jozefowicz等人提议设置LSTM模型遗忘门的偏置为1。

另一种常见类型的参数是方差或精确度参数。例如,我们用以下模型进行带条件方差估计的线性回归:
p(y∣x)=N(y∣xTx+b,1β)p(y|x)=N(y|x^Tx+b, \frac{1}{\beta})p(y∣x)=N(y∣xTx+b,β1​)

其中β\betaβ是精确度参数。通常我们能安全地初始化方差或精确度参数为1。另一种方法假设初始权重足够接近零,设置偏置可以忽略权重的影响,然后设定偏置以产生输出的正确边缘均值,并将方差参数设置为训练集输出的边缘方差。

除了这些初始化模型参数的简单常数或随机方法,还有可能使用机器学习初始化模型参数。我们还可以用无监督模型训练出来的参数来初始化监督模型。我们也可以在相关问题上使用监督训练。即使是在一个不相关的任务上运行监督训练,有时也能得到一个比随机初始化具有更快收敛率的初始值。这些初始化策略有些能够得到更快的收敛率和更好的泛化误差,因为它们编码了模型初始参数的分布信息。其他策略显然效果不错的原因主要在于它们设置参数为正确的数值范围,或是设置不同单元计算互相不同的函数。

机器学习中的数学——优化技术:参数初始化策略相关推荐

  1. 机器学习中的数学——深度学习中的优化理论

    分类目录:<机器学习中的数学>总目录 深度学习算法在许多情况下都涉及优化.例如,模型中的进行推断涉及求解优化问题.我们经常使用解析优化去证明或设计算法.在深度学习涉及的诸多优化问题中,最难 ...

  2. 机器学习中的数学——深度学习优化的挑战:局部极小值

    分类目录:<机器学习中的数学>总目录 相关文章: · 病态 · 局部极小值 · 高原.鞍点和其他平坦区域 · 梯度消失和梯度爆炸 · 非精确梯度 · 局部和全局结构间的弱对应 凸优化问题的 ...

  3. 机器学习中的数学——深度学习优化的挑战:病态

    分类目录:<机器学习中的数学>总目录 相关文章: · 病态 · 局部极小值 · 高原.鞍点和其他平坦区域 · 梯度消失和梯度爆炸 · 非精确梯度 · 局部和全局结构间的弱对应 优化通常是一 ...

  4. 机器学习中的数学 人工智能深度学习技术丛书

    作者:孙博 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2019-11-01 机器学习中的数学 人工智能深度学习技术丛书 ISBN:9787517077190

  5. 在机器学习中,怎么对超参数Hyper parameter优化?我总结了以下常见的方法

    @Author:Runsen 机器模型中一般有两类参数,一类是可以从数据中学习估计得到,我们称为参数(Parameter).还有一类参数时无法从数据中估计,只能靠人的经验进行设计指定,我们称为超参数( ...

  6. 机器学习中的数学知识(part3)--凸优化

    学习笔记,仅供参考,有错必究 文章目录 机器学习中的数学知识 凸优化 非凸优化 机器学习中的数学知识 凸优化 下面是实际问题中常见的凸集,记住它们对理解后面的算法非常有帮助. n n

  7. 机器学习中的数学(七)--凸优化的基础知识

    写在前面 <机器学习中的数学>系列主要列举了在机器学习中用到的较多的数学知识,包括微积分,线性代数,概率统计,信息论以及凸优化等等.本系列重在描述基本概念,并不在应用的方面的做深入的探讨, ...

  8. 机器学习中的数学——遗传算法(Genetic Algorithm)

    分类目录:<机器学习中的数学>总目录 相关文章: · 梯度下降法(Gradient Descent) · 随机梯度下降(Stochastic Gradient Descent, SGD) ...

  9. 机器学习中的数学:线性代数

    专栏亮点 围绕主要脉络,贯穿整个学科:紧紧围绕空间变换这个线性代数的主要脉络,深刻理解如何用空间表示数据.用空间处理数据.用空间优化数据,用一条线索贯穿整个学科的主干内容. 聚焦四大纬度,筑牢知识体系 ...

  10. 机器学习中的数学——Adam(Adaptive Moments)

    分类目录:<机器学习中的数学>总目录 相关文章: · 梯度下降法(Gradient Descent) · 随机梯度下降(Stochastic Gradient Descent, SGD) ...

最新文章

  1. 使用Sublime Text 3作为Python编辑器有关中文问题
  2. 一直认为 count(1) 比 count(*) 效果高,被同事鄙视了。
  3. Android Demos
  4. 关于HTML5中的video和audio元素
  5. python如何输入空行_在python中,如何在接受用户输入时跳过空行?
  6. spark partition
  7. 电力电子、电机控制系统的建模和仿真_电力传动控制系统:运动控制系统
  8. 2021温州市高考成绩查询,温州2021高考成绩排名榜单,温州各高中高考成绩喜报
  9. 修改mongodb oplog size
  10. Java打包JRE于exe中方法
  11. 新手如何快速上手双拼,提高打字速度-by小鹤双拼输入法QQ群友-弧
  12. 机器学习算法(一) K-Means算法简述以及在MNIST上的聚类实现
  13. Vivado synth 8-439 module““not found问题绝对解决,超简单,想解决问题就看这里。
  14. linux 脚本加密 shc
  15. 省钱又省时间的买书方法
  16. 【WAF技巧拓展】————8、我的WafBypass之道(Misc篇)
  17. 网络速率方面单位MBPS和MB的区别
  18. 工业控制信息安全资源汇总
  19. DSPF28335 SCI FIFO串口通讯
  20. hibrnate教程14~Hibernate JPA注解入门

热门文章

  1. 【C++】如何释放vector的内存空间及std::vector::shrink_to_fit用法简介
  2. MySql实验嵌套查询_MySQL数据库实验四:嵌套查询
  3. 【HTML】讲讲HTML5视频播放的方式
  4. 用python实现数度游戏
  5. 渗透测试详解及爱加密加固使用及优势
  6. java中的方法基础
  7. Mac——技巧:修复 M1 Mac Mini 蓝牙问题
  8. 【LTspice】【LTspice添加第三方***.lib文件】
  9. 使用二维码——第三方库ZBar和libqrencode的使用
  10. 猎头是怎么找到合适候选人的?