百面机器学习(7)——优化算法
目录
监督学习的损失函数
机器学习算法的关键一环是模型评估,而损失函数定义了模型的评估指标。可以说,没有损失函数就无法求解模型参数。不同的损失函数优化难度不同,最终得到的模型参数也不同,针对具体的问题需要选取合适的损失函数。
1. 有监督学习涉及的损失函数有哪些?请列举并简述他们的特点(1)
对二分类问题:
0-1损失函数:非凸,非光滑的特点,使得算法很难直接对函数进行优化;
Hinge损失函数:在某处不可导不能用梯度下降法进行优化;
Logistic损失函:该损失函数对所有样本点都有所惩罚,因此对异常值相对敏感一些;
交叉熵(Cross Entropy)损失函数;
对回归问题
平方损失函数:是光滑函数,可用梯度下降法进行优化。然而当预测值与真实值越远,平方损失函数的惩罚力度越大,因此对异常点比较敏感;
绝对损失函数:相当于做中值回归,相比平方损失函数对异常点更鲁棒一些,但在f=y处无法求导数;
Huber损失函数:综合考虑可导性和对异常点的鲁棒性;
机器学习中的优化问题(凸优化基本概念)
大部分机器学习模型的参数估计问题都可以写成优化问题。 机器学习模型不同,损失函数不同,对应的优化问题也各不相同。了解优化问题的形式和特点,能帮助我们更高效地求解问题,得到模型参数,从而达到学习的目的。
1. 机器学习中的优化问题,哪些是凸优化问题,哪些是非凸优化问题?请各举一个例子(2)
凸函数:严格定义为,函数L(·)是凸函数当且仅当对定义域中的任意两点x,y和任意实数λ∈[0,1],总有
该不等式的一个直观解释是,凸函数曲面上任意两点连接而成的线段,其上的任意一点都不会处于该函数曲线的下方,如下图所示。
凸优化问题:逻辑回归,SVM,线性回归等线性模型;
非凸优化问题: 低秩模型(矩阵分解),深度神经网络模型等
一般来说,非凸优化问题被认为是比较难求解的问题,但主成分分析是一个特例,我们可以借助SVD直接得到主成分分析的全局极小值。
经典优化算法(微积分,线性代数,凸优化)
1. 无约束优化问题的优化方法有哪些?(2)
例如有一道无约束优化问题摆在你面前:
其中目标函数L(·)是光滑的。请问求解该问题的优化算法有哪些?它的适用场景是什么?
经典的优化算法可以分为直接法和迭代法两大类。
直接法:直接给出优化问题最优解的方法。要求目标函数满足两个条件。1)是凸函数;2)梯度求导有闭式解。如岭回归(Ridge Regression)
迭代法:就是迭代地修正对最优解的估计,在实际问题中更常用。
梯度验证(微积分,线性代数)
1. 如何验证求目标函数梯度功能的正确性?(3)
随机梯度下降法
1. 当训练数据量特别大时,经典的梯度下降法存在什么问题?需要做如何改进?(1)
经典的梯度下降法在每次对模型参数进行更新时,需要遍历所有的训练数据,当训练样本过大时,耗费很长的计算时间,在实际应用中基本不可行。
随机梯度下降法(Stochastic Gradient Descent, SGD)用单个训练样本的损失来近似平均损失,用单个训练数据即可对模型参数进行一次更新,大大加快了收敛速。该方法也非常适用于数据源源不断到来的在线更新场景。
为了降低随机梯度的方差,从而使得迭代算法更加稳定,也为了充分利用高度优化的矩阵运算操作,在实际应用中我们会同时处理若干训练数据,该方法被称为小批量梯度下降法(Mini-Batch Gradient Descent)
使用小批量梯度下降法,有以下三点需要注意:
1)如何选取参数m(具体批量值)?在不同的应用中,最优的 m 通常会不一样,需要通过调参选取。一般 m 取 2 的幂次时能充分利用矩阵运算操作,所以可以在 2 的幂次中挑选最优的取值,例如 32 、 64、 128 、 256 等。
2)如何挑选m个训练数据??为了避免数据的特定顺序给算法收敛带来的影响,一般会在每次遍历训练数据之前,先对所高的数据进行随机排序,然后在每次迭代时按顺序挑选 m 个训练数据直至遍历完所有的数据。
3)如何选取学习速率α?为了加快收敛速率,同时提高求解精度, 通常会采用衰减学习速率的方案:一开始算法采用较大的学习速率,当误差曲线进入平台期后,减小学习速率做更精细的调整。最优的学习速率方案也通常需要调参才能得到。
随机梯度下降法的加速
1. 随机梯度下降法失效的原因——摸着石头下山
深度学习中最常用的优化方法是随机梯度下降法,但是随机梯度下降法偶尔也会失效,无法给出满意的训练结果,这是为什么?(2)
用批量梯度下降代替随机梯度下降算法
2. 解决之道——惯性保持和环境感知(3)
为了改进随机梯度下法,研究者都做了哪些改动?提出了哪些变种方法?它们各有哪些特点?
- 动量(Momentum)方法:保持惯性 (改进方法:Nesterov Accelerated Gradient)
- AdaGrad方法:环境感知,(改进方法:AdaDelta和RMSProp)
- Adam:惯性保持和环境感知 (改进方法:AdaMax, Nadam)
L1正则化与稀疏性
为什么希望模型参数具有稀疏性呢?稀疏性,说白了就是模型的很多参数是0。这相当于对模型进行了一次特征选择,只留下一些比较重要的特征,提高模型的泛化能力,降低过拟台的可能。在实际应用中,机器学习模型的输入动辄几百上干万维,稀疏性就显得更加重要, 谁也不希望把这上干万维的特征全部搬到线上去。
1. L1正则化使得模型参数具有稀疏性的原理是什么?(3)
加入正则项就是定义了一个解空间约束
1)解空间形状角度
在二维的情况下,黄色的部分是 L2 和 L1正则项约束后的解空间,绿色的等高线是凸优化问题中目标函数的等高线,如图 7.6 所示。 由图可知, L2 正则项约束后的解空间是圆形,而 L1正则项约束的解空间是多边形。显然,多边形的解空间更容易在尖角处与等高线碰撞出稀疏解。
2)函数叠加角度
3)贝叶斯先验角度
从贝叶斯的角度来理解 L1正则化和 L2 正则化,简单的解释是,L1正则化相当于对模型参数 w 引入了拉普拉斯先验, L2 正则化相当于引入了高斯先验,而拉普拉斯先验使参数为 0 的可能性更大。
图7.8 是高斯分布曲线图。 由图可见,高斯分布在极值点( 0 点)处是平滑的,也就是高斯先验分布认为 w在极值点附近取不同值的可能性是接近的。这就是 L2 正则化只会让 w更接近 0 点,但不会等于 0 的原因。
相反,图7.9 是拉普拉斯分布曲线图。由图可见,拉普拉斯分布在极值点( 0点) 处是一个尖峰,所以拉普拉斯先验分布中参数 w 取值为0 的可能性要更高。