记录篇:【百面机器学习】第七章.优化算法

有监督学习的损失函数

在有监督学习中,损失函数刻画了模型和训练样本的匹配程度。

对二分类问题,Y={1,−1},我们希望signf(xi,θ)=yi,最自然的损失函数是0-1损失。该损失函数能够直观地刻画分类的错误率,但是由于其非凸、非光滑的特点,使得算法很难直接对该函数进行优化。

0-1 损失的一个代理损失函数是 Hinge 损失函数
0-1 损失的另一个代理损失函数是Logistic损失函数
另一个常用的代理损失函数是交叉熵(Cross Entropy )损失函数

机器学习中的优化问题

机器学习中的优化问题,哪些是凸优化问题,哪些是非凸优化问题?

逻辑回归,对应的优化问题就是凸优化问题。其他凸优化问题的例子包括支持向量机、线性回归等线性模型;非凸优化问题的例子包括低秩模型(如矩阵分解)、深度神经网络模型等

经典优化算法

无约束优化问题的优化方法有哪些?

经典的优化算法可以分为直接法和迭代法两大类。

直接法,顾名思义,就是能够直接给出优化问题最优解的方法。这个方法听起来非常厉害的样子,但它不是万能的。
迭代法就是迭代地修正对最优解的估计。

梯度验证

如何验证求目标函数梯度功能的正确性?

1.根据泰勒展开式及拉格朗日余项公式,采用更小的h重新做一次梯度验证;否则对应于第二种可能,我们应该检查求梯度的代码是否有错误

随机梯度下降法

当训练数据量特别大时,经典的梯度下降法存在什么问题,需要做如何改进?
经典的梯度下降法在每次对模型参数进行更新时,需要遍历所有的训练数据。当M 很大时,这需要很大的计算量,耗费很长的计算时间,在实际应用中基本不可行。为了解决该问题,随机梯度下降法(Stochastic Gradient Descent SGD)用单个训练样本的损失来近似平均损失。
随机梯度下降法用单个训练数据即可对模型参数进行一次更新,大大加快了收敛速率。该方法也非常适用于数据源源不断到来的在线更新场景。
为了降低随机梯度的方差,从而使得迭代算法更加稳定,也为了充分利用高度优化的矩阵运算操作,在实际应用中我们会同时处理若干训练数据,该方法被称为小批量梯度下降法(Mini-Batch Gradient Descent
对于小批量梯度下降法的使用,有以下三点需要注意的地方。
1 )如何选取参数 m ?在不同的应用中,最优的 m通常会不一样,需要通过调参选取。一般 m取2的幂次时能充分利用矩阵运算操作,所以可以在2的幂次中挑选最优的取值,例如32、64、128、256等。
2 )如何挑选 m 个训练数据?为了避免数据的特定顺序给算法收敛带来的影响,一般会在每次遍历训练数据之前,先对所有的数据进行随机排序,然后在每次迭代时按顺序挑选m 个训练数据直至遍历完所有的数据。
3 )如何选取学习速率 α ?为了加快收敛速率,同时提高求解精度,通常会采用衰减学习速率的方案:一开始算法采用较大的学习速率,当误差曲线进入平台期后,减小学习速率做更精细的调整。最优的学习速率方案也通常需要调参才能得到。
综上,通常采用小批量梯度下降法解决训练数据量过大的问题。每次更新模型参数时,只需要处理m 个训练数据即可,其中 m 是一个远小于总数据量 M 的常数,这样能够大大加快训练过程。

随机梯度下降法的加速

随机梯度下降法失效的原因 —— 摸着石头下山
深度学习中最常用的优化方法是随机梯度下降法,但是随机梯度下降法偶尔也会失效,无法给出满意的训练结果,这是为什么?
为了回答这个问题,我们先做一个形象的比喻。想象一下,你正在下山,视力很好,能看清自己所处位置的坡度,那么沿着坡向下走,最终你会走到山底。如果你被蒙上双眼,只能凭脚底踩石头的感觉判断当前位置的坡度,精确性就大大下降,有时候你认为的坡,实际上可能并不是坡,走上一段时间发现没有下山,或者曲曲折折走了好多弯路才下山。类似地,批量梯度下降法(Batch Gradient Descent BGD )就好比正常下山,而随机梯度下降法就好比蒙着眼睛下山。具体介绍一下两种方法。
为了获取准确的梯度,批量梯度下降法的每一步都把整个训练集载入进来进行计算,时间花费和内存开销都非常大,无法应用于大数据集、大模型的场景。相反,随机梯度下降法则放弃了对梯度准确性的追求,每步仅仅随机采样一个(或少量)样本来估计当前梯度,计算速度快,内存开销小。但由于每步接受的信息量有限,随机梯度下降法对梯度的估计常常出现偏差,造成目标函数曲线收敛得很不稳定,伴有剧烈波动,有时甚至出现不收敛的情况。
进一步地,有人会说深度学习中的优化问题本身就很难,有太多局部最优点的陷阱。没错,这些陷阱对随机梯度下降法和批量梯度下降法都是普遍存在的。但对随机梯度下降法来说,可怕的不是局部最优点,而是山谷和鞍点两类地形。山谷顾名思义就是狭长的山间小道,左右两边是峭壁;鞍点的形状像是一个马鞍,一个方向上两头翘,另一个方向上两头垂,而中心区域是一片近乎水平的平
地。为什么随机梯度下降法最害怕遇上这两类地形呢?在山谷中,准确的梯度方向是沿山道向下,稍有偏离就会撞向山壁,而粗糙的梯度估计使得它在两山壁间来回反弹震荡,不能沿山道方向迅速下降,导致收敛不稳定和收敛速度慢。在鞍点处,随机梯度下降法会走入一片平坦之地(此时离最低点还很远,故也称plateau)。想象一下蒙着双眼只凭借脚底感觉坡度,如果坡度很明显,那么基本能估计出下山的大致方向;如果坡度不明显,则很可能走错方向。同样,在梯度近乎为零的区域,随机梯度下降法无法准确察觉出梯度的微小变化,结果就停滞下来。
解决之道——惯性保持和环境感知
随机梯度下降法本质上是采用迭代方式更新参数,每次迭代在当前位置的基础上,沿着某一方向迈一小步抵达下一位置,然后在下一位置重复上述步骤。
动量 方法
AdaGrad 方法
Adam 方法

L1正则化与稀疏性

为什么希望模型参数具有稀疏性呢?稀疏性,说白了就是模型的很多参数是0 。这相当于对模型进行了一次特征选择,只留下一些比较重要的特征,提高模型的泛化能力,降低过拟合的可能。在实际应用中,机器学习模型的输入动辄几百上千万维,稀疏性就显得更加重要,谁也不希望把这上千万维的特征全部搬到线上去。
L1正则化使得模型参数具有稀疏性的原理是什么?
角度 1 :解空间形状机器学习的经典之作给出的解释无疑是权威且直观的 ,面试者给出的答案多数也是从这个角度出发的。
角度 2 :函数叠加第二个角度试图用更直观的图示来解释L1产生稀疏性这一现象。在一些在线梯度下降算法中,往往会采用截断梯度法来产生稀疏性,这同L1正则项产生稀疏性的原理是类似的。
角度 3:贝叶斯先验,从贝叶斯的角度来理解L1正则化和L2正则化,简单的解释是,L1正则化相当
于对模型参数 w 引入了拉普拉斯先验, L2 正则化相当于引入了高斯先验,而拉普拉斯先验使参数为0 的可能性更大。

版权声明:本文为weixin_48592695原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。