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

前言

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

第七章 优化算法

引导语

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

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正则化产生稀疏解的原因。第二部分涉及较多的优化技巧,放到下一篇中整理。

结尾

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容