“优化算法”面试知识点总结-损失函数总结+梯度下降法+正则化-百面机器学习系列6

提示:在准备机器学习算法工程师面试的过程中,我主要参考《百面机器学习》去巩固自己的基础知识。本系列博客将以该书为主题,并以八股文的方式去概述整本书的内容,以尽量减少读者们的阅读作量,并方便读者可以随时随地的记忆背诵。
建议:我还是认为读者们可以提前买一本《百面机器学习》,从前到后完全看一遍,然后再看我的博客去记忆背诵会更好些哈。

文章目录

    • 问题1:有监督学习的损失函数
    • 问题2:机器学习中的优化问题
    • 问题3:经典优化算法
    • 问题4:梯度验证
    • 问题5:随机梯度下降法(重点)
    • 问题6:随机梯度下降法的加速
    • 问题7:L1正则化与稀疏性

问题1:有监督学习的损失函数

1.有监督学习涉及的损失函数有哪些?并简述他们的特点?
1)0-1损失函数:当预测值和真实值不一样时损失为1。该损失函数能够直观地刻画分类的错误率,但是由于其非凸、非光滑的特点,使得算法很难直接对该函数进行优化。(损失函数公式和图像可看课本P142-P144)
2)Hinge损失函数:该损失函数是0-1损失函数相对紧的凸上界。Hinge损失在f.y=1处不可导,因此不能用梯度下降法进行优化,而是用次梯度下降法(引入次梯度用于解决此类目标函数并不总是处处可导的问题,不可导的点处可能存在多个梯度值,每个梯度值均称为次梯度,从这些次梯度中随机选择一个作为这个点的梯度值)。
3)Logistic损失函数:该损失函数也是0-1损失函数的凸上界,且该函数处处光滑,因此可以用梯度下降法进行优化。但该损失函数对所有样本点都有惩罚,因此对异常值相对敏感一些。
4)另一个常用的损失函数是交叉熵损失函数,该函数也是0-1损失函数的光滑凸上界。
5)对于回归问题,最常用的损失函数是平方损失函数。该函数是光滑函数,能够用梯度下降法进行优化。然而,当预测值距离真实值越远时,平方损失函数的惩罚力度越大,因此它对异常点比较敏感。
6)为解决平方损失函数的缺点,可采用绝对损失函数。该函数相当于在做中值回归,相比于做均值回归的平方损失函数,绝对损失函数对异常点有更好的鲁棒性。但该函数在0点处无法求导数。
7)综合考虑可导性和鲁棒性,可采用Huber损失函数。该函数在损失较小时为平方损失,在损失较大时为线性损失,处处可导且对异常点鲁棒。

问题2:机器学习中的优化问题

1.机器学习中的优化问题哪些是凸优化问题,哪些是非凸优化问题?举例说明?
1)凸函数的直观解释:凸函数曲面上任意两点连接而成的线段,其上任意一点都处于该函数曲面上方。
2)逻辑回归,对应的优化问题是凸优化问题。对于凸优化问题,所有的局部极小值都是全局极小值,这类问题较容易求解。
3)由于主成分分析优化过程中的优化目标函数不满足凸函数,主成分分析对应的优化问题是非凸优化问题。但主成分分析是一个特例,它可以借助SVD直接得到主成分分析的全局极小值。
4除此之外,凸优化问题的例子还包括支持向量机、线性回归等线性模型,非凸优化问题包括低秩模型(如矩阵分解)、深度神经网络模型等。

问题3:经典优化算法

1.经典的优化算法可分为直接法和迭代法两大类。
1)直接法的使用要求目标函数满足两个条件。一,目标函数为凸函数,即存在最优解(在某点处为最优解的充要条件是目标函数在该点处的梯度为0)。二,该最优解为闭式解(闭式解又称解析解,即能够用解析表达式表达的解)
2)由于上述条件,直接法的应用范围被限制,在很多实际情况下会使用迭代法。迭代法又可分为一阶法和二阶法。
一阶法又称梯度下降法,梯度就是目标函数的一阶信息。
二阶法又称牛顿法,Hessian矩阵就是目标函数的二阶信息。二阶法的收敛速度一般要快于一阶法,但在高维情况下,Hessian矩阵求逆的计算复杂度很大,而且当目标函数非凸时,二阶法有可能会收敛到鞍点。

问题4:梯度验证

这部分牵扯到用公式进行计算说明,详解看课本P152-154。

问题5:随机梯度下降法(重点)

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

问题6:随机梯度下降法的加速

1.随机梯度下降法失效的原因?
1)随机梯度下降法每步仅随机采样一个(或少量)样本来估计当前梯度,计算速度快、内存开销小,但由于每步接受的信息量有限,随机梯度下降法对梯度的估计常常出现偏差,造成目标函数曲线收敛很不稳定,有时甚至出现不收敛的情况。
2)随机梯度下降法最可怕的不是局部最优点,而是山谷和鞍点两类地形。
在山谷中,准确的梯度方向是沿山道向下,稍有偏离就会撞向山壁,而粗糙的梯度估计使得它在两山壁间来回反弹震荡,不能沿山道方向迅速下降,导致收敛不稳定和收敛速度慢。
在鞍点处,随机梯度下降法会走入一片平坦之地(此时可能离最低点还很远),此时,在梯度近乎为零的区域,随机梯度下降法无法准确察觉出梯度的微小变化,结果就停滞下来了。
2.解决梯度下降法失效的方法?
1)动量方法:可以直观理解成一个小球沿着山道下降,由于惯性可防止在山壁间来回震荡并突破鞍点。 惯性就体现在对前一次更新信息的重利用上。 衰减系数扮演了阻力的作用。 与随机梯度下降法相比,动量方法的收敛速度更快,收敛曲线也更稳定。
2)AdaGrad方法:随机梯度下降法对环境的感知是指在参数空间中,根据不同参数的一些经验性判断,自适应的确定参数的学习速率,不同参数的更新步幅是不同的。例如:在处理训练词嵌入模型参数时,有的词频繁出现,有的词极少出现。数据的稀疏性导致相应参数的梯度的稀疏性,不频繁出现的词或词组的参数的梯度大多数情况下为零,从而这些参数被更新的频率很低。在应用中,我们希望更新频率低的参数可以拥有较大的更新步幅,而更新频率高的参数的步幅可以减小。AdaGrad方法采用“历史梯度平方和”来衡量不同参数的梯度的稀疏性,取值越小表明越稀疏。随着时间的推移学习率越来越小,从而保证了算法的最终收敛(详细公式可参考课本)。
3)Adam方法:该方法将惯性保持和环境感知这两个优点集于一身。一方面,Adam记录梯度的一阶矩,即过往梯度与当前梯度的平均,这体现了惯性保持;另一方面,Adam还记录了梯度的二阶矩,即过往梯度平方与当前梯度平方的平均,这类似AdaGrad方法中的环境感知能力,为不同参数产生自适应的学习率。

问题7:L1正则化与稀疏性

1.为什么希望模型参数具有稀疏性?
稀疏性,就是模型的很多参数为0。这相当于对模型进行了一次特征选择,只留下一些比较重要的特征,加快模型训练速度,提高模型的泛化能力,降低过拟合风险。
2.L1正则化使得模型参数具有稀疏性的原理是什么?(详解可看课本P164)
1)从解空间形状角度理解:如果原问题目标函数的最优解不是恰好落在解空间内,那么约束条件下的最优解一定是在解空间的边界上,L2正则化项约束后的解空间是圆形,而L1正则化项约束的解空间是多边形。显然,多边形的解空间更容易在尖角处与等高线碰撞出稀疏解。(“带正则项”和“带约束条件”是等价的,都是为了约束w的可能取值空间从而防止过拟合)。
2)从函数叠加角度理解:加入L1正则化后,对带正则项的目标函数求导,正则项部分产生的导数在左边部分是-C,在原点右边部分是C,因此只要目标函数的倒数绝对值小于C,那么带正则项的目标函数在原点左边部分始终是递减的,在原点右边部分始终是递增的,最小值点自然是原点处,此时对应的w为0,产生了稀疏性。 相反,L2正则项在原点处的导数是0,只要原目标函数在原点处的导数不为0,那么最小值点就不会在原点,所以L2只有减小w绝对值的作用,对解空间的稀疏性没有贡献。
3)在一些在线梯度下降算法中,往往会采用截断梯度法来产生稀疏性,这同L1正则项产生稀疏性的原理类似

你可能感兴趣的:(机器学习面试知识点系列,算法,人工智能)