腾讯校招基础研究岗相关:请解释LR/logistic regression/对数几率回归/逻辑回归/逻辑斯蒂回归
据说每一个机器学习学习者都会写一篇有关自己对LR的理解文章,查了很多资料后,我今天就写一下我的LR。
本文的重点是:为什么要LR,为什么要用logistic函数,为什么要用对数几率,以及他们是怎么求出来的。
(我不喜欢公式,但是有的时候比文字更清楚,所以这篇文章里的公式要么就是可以忽略的,要么两个公式之间一定是可以2分钟内推出来的,也就是说是能很简单的理解“为什么从这个公式能变成这个”的)
一. 求对数几率(odds)的动机和求解
因为σ1,σ0实际上对应y=1和y=0时对应的x的方差,所以假设这两个情况下x的方差相等
即σ1=σ0,二次项会抵消,我们得到一个简单的线性关系:
上式等价于“P服从sigmoid这一命题”
转换一下可以得到:
-
求二分类通用的log-loss函数(只要带入任意y=g(x)函数就可以求出对应log-loss函数)(也就是伯努利的二项分布的概率函数)
②P(y=0|x)=1-g(x)
优点:可以随机选择样本降低波动,一次只用一个样本点,可以在线学习
{
对数据集中每个样本
计算该样本的梯度
使用alpha乘梯度来更新回归系数
}
FTRL是对w每一维分开训练更新的,每一维使用的是不同的学习速率,也是上面代码中lamda2之前的那一项。与w所有特征维度使用统一的学习速率相比,这种方法考虑了训练样本本身在不同特征上分布的不均匀性,如果包含w某一个维度特征的训练样本很少,每一个样本都很珍贵,那么该特征维度对应的训练速率可以独自保持比较大的值,每来一个包含该特征的样本,就可以在该样本的梯度上前进一大步,而不需要与其他特征维度的前进步调强行保持一致。
牛顿法指出,求使f(θ)=0的θ,只需要一开始先固定一个θ,比如说θ=0,然后输入其他值使得
动量法(Momentum)
为了克服SGD振荡比较严重的问题,Momentum将物理中的动量概念引入到SGD当中,通过积累之前的动量来替代梯度。即:
在更新量中,加入“上一次的变化量v(t-1)×衰减参数gamma”
相较于SGD,Momentum就相当于在从山坡上不停的向下走,带有加速度的效果,当没有阻力的话,它的动量会越来越大,但是如果遇到了阻力,速度就会变小。也就是说,在训练的时候,在梯度方向不变的维度上,训练速度变快,梯度方向有所改变的维度上,更新速度变慢,这样就可以加快收敛并减小振荡。
一开始大步迈进,后面小心挪动
Adagrad
相较于SGD,Adagrad相当于对学习率多加了一个约束,即:
Adagrad的优点是,在训练初期,由于gt较小,所以约束项能够加速训练。而在后期,随着gt的变大,会导致分母不断变大,最终训练提前结束。
最好用的非在线算法,各种批量下降的魔改版:
Adam
Adam是一个结合了Momentum与Adagrad的产物,它既考虑到了利用加速度来加速训练过程,又考虑到对于学习率的约束。利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。其公式为:
其中:
(这里不解释这些公式,如果理解不了Adam的话请从批量梯度下降到这块看一遍,一脉相承的,一定能理解的)
本节总结
在线学习方法比如SGD,FTRL经常用于在线LR系统的训练,具有很好的效果。
而虽然深度学习跟LR不是一样的东西,但是也要求解某一个误差的最优值,这个时候一般用Adam
通过实践证明,Adam结合了Adagrad善于处理稀疏梯度和Momentum善于处理非平稳目标的优点,相较于其他几种优化器效果更好。同时,我们也注意到很多论文中都会引用SGD,Adagrad作为优化函数。但相较于其他方法,在实践中,SGD需要更多的训练时间以及可能会被困到鞍点的缺点,都制约了它在很多真实数据上的表现。