机器学习中的数学笔记:微分学与梯度下降法
1.简介:数学在机器学习中的应用
模型建立与选择:对工程问题进行抽象和量化
• 涉及数学知识:综合运用微积分,线性代数,概率
统计以及组合数学的知识
• 例如:
o 各类深度模型中的网络结构与损失函数
o 支持向量机中的向量空间与度量
模型训练:
• 优化算法:高效稳定的对各类损失函数求极值
• 涉及数学知识:微积分以及优化理论
机器学习基本流程:
2.微分学基本思想和方法
2.1 微分学的核心思想:函数逼近
1.逼近是人类探讨复杂问题时经常使用的一种手段,比如:
• 人均GDP:使用常数函数来逼近收入分布函数
• 平均速度:使用线性函数来逼近实际运动轨迹
• 年化收益率:使用指数函数来逼近收益函数
2.微分学的核心思想:用熟悉且简单的函数对复杂函数进行局部逼近
3.常用作逼近的简单函数包括:
• 线性函数:函数的一阶导数 y=kx+b
•多项式函数:泰勒级数 y=ax*x+bx+c
2.2 微积分的基础语言:极限论
2.2.1 极限的表述方式
2.2.2无穷小
2.2.3两边夹定理
由两边夹定理推导重要极限:
在一个圆中:存在sinx<x<tanx
同时除以x:
得到sinx/x < 1 < sinx/x*1/cosx
得到cosx< sinx/x <1
同时除以cosx:
得到1<=lim sinx/x <=1
得到重要极限:
2.2.4 重要极限
2.3 微分学的基本手法:求导数
2.4 从线性逼近到多项式逼近:泰勒级数
2.5 从低维到高维:多元函数的梯度
3.梯度下降法和牛顿法
3.1 随机梯度下降
梯度下降法:找到梯度为0的点(极小值点、极大值点鞍点),不论值的大小。
3.2 随机梯度下降的问题与挑战
引入:随机梯度下降法–解决梯度计算
梯度计算由于随机梯度下降法的引入,我们通常将梯度下降法分为三种类型:
- 批梯度下降法(GD)
原始的梯度下降法 - 随机梯度下降法(SGD)
每次梯度计算只使用一个样本
• 避免在类似样本上计算梯度造成的冗余计算
• 增加了跳出当前的局部最小值的潜力
• 缺点:在逐渐缩小学习率的情况下,有与批梯度下降法类似的收敛速度 - 小批量随机梯度下降法(Mini Batch SGD)
每次梯度计算使用一个小批量样本
• 梯度计算比单样本更加稳定
• 可以很好的利用现成的高度优化的矩阵运算工具
注意:神经网络训练的文献中经常把 Mini Batch SGD 称为 SGD
随机梯度下降法的困难:学习率的选取
- 局部梯度的反方向不一定是函数整体下降的方向
• 对图像比较崎岖的函数,尤其是隧道型曲面,梯度下降表现不佳。 - 预定学习率衰减法的问题
• 学习率衰减法很难根据当前数据进行自适应 - 对不同参数采取不同的学习率的问题
• 在数据有一定稀疏性时,希望对不同特征采取不同的学习率 - 神经网络训练中梯度下降法容易被困在鞍点附近的问题
• 比起局部极小值,鞍点更加可怕
3.3 随机梯度下降的优化算法选讲
为什么不用牛顿法?
• 牛顿法要求计算目标函数的二阶导数(Hessian matrix),在高维特征情形下这个矩阵非常巨大,计算和存储都成问题
• 在使用小批量情形下,牛顿法对于二阶导数的估计噪音太大
• 在目标函数非凸时,牛顿法更容易收到鞍点甚至最大值点的吸引动量法(Momentum)(适用于隧道型曲面)
梯度下降法在狭长的隧道型函数上表现不佳,如下图所示:
• 函数主体缓缓向右方下降
• 在主体方向两侧各有一面高墙,导致垂直于主体方向有更大的梯度
• 梯度下降法会在隧道两侧频繁震荡。
究竟如何选择算法呢?
• 动量法与Nesterov的改进方法着重解决目标函数图像崎岖的问题
• Adagrad与Adadelta主要解决学习率更新的问题
• Adam集中了前述两种做法的主要优点目前为止 Adam 可能是几种算法中综合表现最好的
动量法:
Nesterov的改进方法:
==Adagrad ==(自动调整学习率,适用于稀疏数据)
梯度下降法在每一步对每一个参数使用相同的学习率,这种一刀切的做法不能有效的利用每一个数据集自身的特点。
Adagrad 是一种自动调整学习率的方法:
• 随着模型的训练,学习率自动衰减
• 对于更新频繁的参数,采取较小的学习率
• 对于更新不频繁的参数,采取较大的学习率
注意:Adadelta 的第一个版本也叫做 RMSprop,是Geoff Hinton独立于 Adadelta提出来的。
Adam:目前最好的算法