美文网首页百面机器学习|学习笔记
百面机器学习|第七章优化算法知识点(一)

百面机器学习|第七章优化算法知识点(一)

作者: 蓝白绛 | 来源:发表于2019-01-29 20:06 被阅读35次

    前言

    如果你能找到这里,真是我的幸运~这里是蓝白绛的学习笔记,本集合主要针对《百面机器学习——算法工程师带你去面试》这本书。主要记录我认为重要的知识点,希望对大家有帮助。

    第七章 优化算法

    引导语

    机器学习算法=模型表征+模型评估+优化算法。
    优化算法就是要在模型表征空间中找到模型评估指标最好的模型。
    注:也就是机器学习算法=模型+目标函数+优化算法。

    1、有监督学习的损失函数

    1. 书中介绍的二分类损失函数有:0-1损失、Hinge损失、Logistic损失、交叉熵损失等,如下图。


      7-1 二分类问题损失函数.jpg
    • 0-1损失函数:即错误率,公式如下:L_{0-1}(f,y)=1_{fy\leq0}其中1_{P}为指示函数,当P为真时为1,为假时为0。
      由于其非凸非光滑的特点,使得算法很难直接对该函数进行优化。
    • Hinge损失函数:公式如下:L_{hinge}(f,y)-\max\{0,1-fy\}Hinge损失是0-1损失相对紧的凸上界,且当fy\geq1时,不做任何惩罚。Hinge损失fy处不可导,因此不能用梯度下降法进行优化,而是用次梯度下降法(Subgradient Descent Method)。
    • Logistic损失函数:公式如下:L_{logistic}(f,y)=\log_2(1+\exp(-fy))Logistic损失也是0-1损失的凸上界,该函数处处光滑,因此可以用梯度下降优化,但该损失函数对所有样本点都有惩罚,因此对异常值相对更敏感。
    • 交叉熵损失函数(cross entropy):公式如下:L_{cross_entropy}(f,y)=-\log_2(\frac{1+fy}{2})交叉熵损失函数也是0-1损失的光滑凸上界
    1. 书中介绍的回归问题损失函数有:平方损失函数、绝对损失函数、Huber损失函数。如下图:


      7-1 回归问题损失函数.jpg
    • 平方损失函数:公式如下:L_{squre}(f,y)=(f-y)^2平方损失函数是光滑函数,能用梯度下降优化。但是当预测值与真实值较远时,平方损失函数的惩罚力度越大,因此对异常点敏感
    • 绝对损失函数:公式如下:L_{absolute}(f,y)=|f-y|.为了解决平方损失函数对异常点敏感的问题,则有了绝对损失函数。绝对损失函数相当于是在做中值回归,而平方损失函数是做均值回归,所以绝对损失函数对异常点更鲁棒。但是绝对损失函数f=y处无法求导
    • Huber损失函数:公式如下:
      L_{Huber}(f,y)=\begin{cases} (f-y)^2, & |f-y|\leq\sigma \\ 2\sigma|f-y|-\sigma^2, & |f-y|>\sigma \end{cases}综合考虑了可导性和对异常点的鲁棒性。在|f-y|较小时为平方损失,在|f-y|较大时为线性损失,处处可导,且对异常点鲁棒

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

    1. 凸函数:凸函数的严格定义为:函数L(\cdot)是凸函数当且仅当对定义域中的任意两点xy和任意实数\lambda\in[0,1]总有L(\lambda x+(1-\lambda)y)\leq\lambda L(x)+(1-\lambda)L(y)直观解释是,凸函数曲面上任意两点连接而成的线段,线段上任意一点都不会处于该曲线的下方。如下图所示为凸函数。
      7-2 凸函数示意图.jpg
    2. 逻辑回归,经过对参数\theta(或为w)求二阶导数,可以得到其Hessian矩阵满足半正定的性质,因此函数L(\cdot)对应的优化问题是凸优化问题
    3. 主成分分析对应的优化问题是非凸优化问题。一般来说,非凸优化问题是比较难求解的问题,但主成分分析是一个特例,可以借助SVD奇异值分解直接得到主成分分析的全局极小值
    4. 凸优化问题有:逻辑回归、支持向量机、线性回归等线性模型。
      非凸优化问题有:主成分分析、低秩模型(如矩阵分解)、深度神经网络模型等。

    3、经典优化算法

    1. 经典的优化算法可以分为:直接法迭代法
    • 直接法:能够直接给出优化问题最优解的方法(梯度为0的点)。它不是万能的,它要求目标函数满足两个条件:凸函数和闭式解。
      (1) L(\cdot)凸函数。如果L(\cdot)是凸函数,则\theta^*是最优解的充分必要条件为L(\cdot)\theta^*处梯度为0,即\nabla L(\theta^*)=0
      (2) 为了能直接求出\theta^*,上式\nabla L(\theta^*)=0要有闭式解
      直接法的经典例子是岭回归(Ridge Regression)。
    • 迭代法:迭代地修正对最优解的估计。分为一阶法(梯度下降法)和二阶法(牛顿法)。
      (1) 一阶法:迭代公式为:\theta_{t+1}=\theta_{t}-\alpha\nabla L(\theta_t)一阶法也称梯度下降法,梯度是目标函数的一阶信息。
      (2) 二阶法:迭代公式为:\theta_{t+1}=\theta_t-\nabla^2L(\theta_t)^{-1}\nabla L(\theta_t)二阶法又称牛顿法,Hessian矩阵就是目标函数的二阶信息。
      二阶法的收敛速度一般远快于一阶法,但是在高维情况下,Hessian矩阵求逆计算复杂度很大,而且当目标函数非凸时,二阶法有可能会收敛到鞍点

    4、梯度验证

    注:这一节讲的是,写出求梯度的代码之后,如何验证自己写的代码是正确的。这里我们平常都用已有的框架,里面求梯度的代码已经写好了,所以没有考虑过这个问题。

    1. 在用梯度下降法求解优化问题时,最重要的操作就是计算目标函数的梯度。写出计算梯度的代码之后,通常要验证自己写的代码是否正确。
      这里公式较多,我只写最后的结论。我们验证下式:|\frac{L(\theta+he_i)-L(\theta-he_i)}{2h}-\frac{\partial L(\theta)}{\partial\theta_i}|\approx Mh^2其中h为一个非常小的增量,e_i为单位向量,其中只有第i个分量为1,与\theta_i对应,为了验证\theta的第i个分量。其中的M有关于L(\theta+he_i)L(\theta-he_i)泰勒展开的拉格朗日余项的差,经过推导我们认为h^2前面的数非常接近0,因此近似用常数M代替。
      h较小时,h每减小为原来的10^{-1},近似误差约为原来的10^{-2},即近似误差是h高阶无穷小
      实际应用中,我们随机初始化\theta,取h为较小的数(如10^{-7}),对i=1,2,...,n,依次验证|\frac{L(\theta+he_i)-L(\theta-he_i)}{2h}-\frac{\partial L(\theta)}{\partial\theta_i}|\leq h是否成立,如果对应某个下标i该式不成立,则有以下两种可能:
      (1) 该下标i对应的M过大。
      (2) 该梯度分量计算不正确。
      可以固定\theta,将h减少为原来的10^{-1},再次计算近似误差,若近似误差约减小为原来的10^{-2},则对应M过大这种情况,可以用更小的h再次做梯度验证。否则梯度分量计算不正确。

    5、随机梯度下降

    1. 随机梯度下降法:经典的梯度下降法采用所有训练数据的平均损失来近似目标函数,当数据量很大时,需要很大的计算量,耗费很长时间。为了解决这个问题,随机梯度下降法(Stochastic Gradient Descent,SGD)用单个训练数据的损失来近似平均损失,大大加快了收敛速度。该方法也非常适用于数据源源不断到来的在线更新场景。
    2. 小批量梯度下降法:为了降低随机梯度的方差,使迭代算法更加稳定,也为了充分利用高度优化的矩阵运算操作,在实际运用中我们用小批量梯度下降法(Mini-Batch Gradient Descent),同时处理小批量的训练数据。其中m远小于数据总量M的常数,这样能大大加快训练过程。
      小批量梯度下降法使用的注意事项:
    • 如何选取参数m。不同的应用最优的m通常不一样,需要通过调参选取。一般取2的次幂能充分利用矩阵运算操作,如32、64、128、256等。
    • 如何挑选m个训练数据。为了避免数据的特定顺序给算法收敛带来影响,一般会在每次遍历前对所有数据随机排序,在每次迭代时按顺序挑选m个训练数据直至遍历完所有数据。
    • 如何选取学习速率\alpha。为了加快收敛速率,同时提高求解精度,通常用衰减学习率的方法。最优的学习速率方案也通常需要调参才能得到。

    小结

    这是本章的第一部分,第一部分讲的内容比较容易理解,并且可能在这之前见过,稍微有些了解。例如常见的损失函数、常见的优化方法、批量梯度下降、随机梯度下降、小批量梯度下降。后面的第二部分讲了随机梯度下降的加速,即一些改进的优化方法,如动量方法、AdaGrad方法、Adam方法,还讲了L1正则化产生稀疏解的原因。第二部分涉及较多的优化技巧,放到下一篇中整理。

    结尾

    如果您发现我的文章有任何错误,或对我的文章有什么好的建议,请联系我!如果您喜欢我的文章,请点喜欢~*我是蓝白绛,感谢你的阅读!

    相关文章

      网友评论

        本文标题:百面机器学习|第七章优化算法知识点(一)

        本文链接:https://www.haomeiwen.com/subject/bgmnjqtx.html