腾讯校招基础研究岗相关:请解释LR/logistic regression/对数几率回归/逻辑回归/逻辑斯蒂回归
2017-09-02 12:17
645 查看
据说每一个机器学习学习者都会写一篇有关自己对LR的理解文章,查了很多资料后,我今天就写一下我的LR。
本文的重点是:为什么要LR,为什么要用logistic函数,为什么要用对数几率,以及他们是怎么求出来的。
(我不喜欢公式,但是有的时候比文字更清楚,所以这篇文章里的公式要么就是可以忽略的,要么两个公式之间一定是可以2分钟内推出来的,也就是说是能很简单的理解“为什么从这个公式能变成这个”的)
一. 求对数几率(odds)的动机和求解
为了刻画y属于某个类的概率P(y),引入概率,但是常见的Probability受x和y的差异的影响很大
首先为了避免过大过小值带来的影响,不用probability描述事件发生的可能性,而用对数几率(odds)这是个值为线性的函数
这就是对数几率:
求这个的话,由贝叶斯:
得到:
在数据量够大的情况下,x的分布由大数定理可逼近高斯分布
所以引入一个对于某一个y,x符合正态分布的性质
因此P(y|x)符合正态分布,所以P(x|y)是高斯的,则上式等于:
因为σ1,σ0实际上对应y=1和y=0时对应的x的方差,所以假设这两个情况下x的方差相等
即σ1=σ0,二次项会抵消,我们得到一个简单的线性关系:
上式等价于“P服从sigmoid这一命题”
转换一下可以得到:
就获得了sigmoid函数
本节总结:
在x服从高斯分布而且在不同的y下方差相等的时候,y的概率服从Sigmoid函数。
而且这个Sigmoid函数中θ的值是个常数,等于y的Odds除以x
Sigmoid函数=Logistic函数
Logistics函数的作用
1.把数据做缩放,对于很大或者很小的x,都可以缩放到跟y的概率是线性的情况中,可以避免野点带来的巨大影响
2.方便求导和求log
3.方便求odds,因为会让odds等于x的线性式
4.表征P(y)的概率分布符合高斯性
二. 求二分类的最大似然函数的动机和求解
求二分类通用的log-loss函数(只要带入任意y=g(x)函数就可以求出对应log-loss函数)(也就是伯努利的二项分布的概率函数)
然后,对于二分类问题,假设y=g(x),有:
①P(y=1|x)=g(x)
②P(y=0|x)=1-g(x)
其最大似然函数:
③
【因为y要么就是0要么就是1,所以这样的写法是1和2两条式子的简写,所以称为二分类通用】
然后就对③这条式子求log,获得:
于是求-l(θ)的最小值就可以求得L(θ)的最大值。
也就是说,-l(θ)+正则项就是loss
然后,可以把g(x)=logistic函数带进去求解,求最小值
本节总结:
知道y服从Sigmoid函数后,又因为y是只有0和1两个值的二项分布,所以就可以求出其log-loss函数,对其求导可以获得最小值
三. 浅谈如何求解最小值,也就是说优化方法
最简单的方法:
批量梯度下降法(Batch
Gradient Descent)
要求θ的最小值,可以求出θ的导数,然后乘上一个长度α,表示在图中的沿导数方向前进多少,然后:
下一个θ=上一个θ-αΔθ
这样就可以获得下一个θ
公式为:
每给出一个样本就更新一次的,可以在线训练的方法:
随机梯度下降法(Stochastic Gradient Descent / SGD)
红线表示每一次所更新的新的θ,可以看到经过很多很多曲折的迭代,终于,θ到了一个很优化的位置
其式子为:
一次只用一个样本点,对于每个样本求它的梯度,然后乘以α来更新θ
优点:可以随机选择样本降低波动,一次只用一个样本点,可以在线学习
缺点:对于损失方程有比较严重的振荡,并且容易收敛到局部最小值,适用于精度要求不高的任务
算法为:
{
对数据集中每个样本
计算该样本的梯度
使用alpha乘梯度来更新回归系数
}
最新锐的在线学习方法,SGD的魔改版:
FTRL
一个SGD这样的在线训练算法的魔改版,可以产生稀疏解(降低模型体积)并保持很好的精度【并因为每个维度单独更哦学习率,能很好地利用每个样本】
业内常用LR(Logistic Regression)和FM(Factorization Machines)为点击率预估建模。对LR、FM这类模型的参数学习,传统的学习算法是batch learning算法,它无法有效地处理大规模的数据集,也无法有效地处理大规模的在线数据流。这时,有效且高效的online learning算法显得尤为重要。
FTRL是对w每一维分开训练更新的,每一维使用的是不同的学习速率,也是上面代码中lamda2之前的那一项。与w所有特征维度使用统一的学习速率相比,这种方法考虑了训练样本本身在不同特征上分布的不均匀性,如果包含w某一个维度特征的训练样本很少,每一个样本都很珍贵,那么该特征维度对应的训练速率可以独自保持比较大的值,每来一个包含该特征的样本,就可以在该样本的梯度上前进一大步,而不需要与其他特征维度的前进步调强行保持一致。
比较快的方法:牛顿法
牛顿法指出,求使f(θ)=0的θ,只需要一开始先固定一个θ,比如说θ=0,然后输入其他值使得
θ(t+1)= θt-Δθt
其中一维的情况,Δθ=f '(θt)/f(θt)(多维的情况,Δθ 前面要乘以个hassin矩阵的逆)
所以现在要求使得-l(θ)=0的θ,也就是让loss等于0 ,那么就令 f(θ)= -l(θ),带入公式进行求解即可
牛顿法是二阶收敛,而梯度下降则为一阶收敛,所以牛顿法更快。
简单来说,梯度下降是从所处位置选择一个坡度最大的方向走一步,而牛顿法则在选择方向时,不仅考虑坡度,还会考虑坡度的坡度,也就是下一步的坡度是否会变得更大。
几何上来说,牛顿法是用一个二次曲面去拟合当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面
其局限主要在于
1.矩阵的逆计算复杂度为n的立方,当规模很大时,计算量超大,通常改良做法是采用拟牛顿法如BFGS,L-BFGS等
2.如果初始值离局部极小值太远,Taylor展开并不能对原函数进行良好的近似
从物理学收到的启发:
动量法(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需要更多的训练时间以及可能会被困到鞍点的缺点,都制约了它在很多真实数据上的表现。
本文的重点是:为什么要LR,为什么要用logistic函数,为什么要用对数几率,以及他们是怎么求出来的。
(我不喜欢公式,但是有的时候比文字更清楚,所以这篇文章里的公式要么就是可以忽略的,要么两个公式之间一定是可以2分钟内推出来的,也就是说是能很简单的理解“为什么从这个公式能变成这个”的)
一. 求对数几率(odds)的动机和求解
为了刻画y属于某个类的概率P(y),引入概率,但是常见的Probability受x和y的差异的影响很大
首先为了避免过大过小值带来的影响,不用probability描述事件发生的可能性,而用对数几率(odds)这是个值为线性的函数
这就是对数几率:
求这个的话,由贝叶斯:
得到:
在数据量够大的情况下,x的分布由大数定理可逼近高斯分布
所以引入一个对于某一个y,x符合正态分布的性质
因此P(y|x)符合正态分布,所以P(x|y)是高斯的,则上式等于:
因为σ1,σ0实际上对应y=1和y=0时对应的x的方差,所以假设这两个情况下x的方差相等
即σ1=σ0,二次项会抵消,我们得到一个简单的线性关系:
上式等价于“P服从sigmoid这一命题”
转换一下可以得到:
就获得了sigmoid函数
本节总结:
在x服从高斯分布而且在不同的y下方差相等的时候,y的概率服从Sigmoid函数。
而且这个Sigmoid函数中θ的值是个常数,等于y的Odds除以x
Sigmoid函数=Logistic函数
Logistics函数的作用
1.把数据做缩放,对于很大或者很小的x,都可以缩放到跟y的概率是线性的情况中,可以避免野点带来的巨大影响
2.方便求导和求log
3.方便求odds,因为会让odds等于x的线性式
4.表征P(y)的概率分布符合高斯性
二. 求二分类的最大似然函数的动机和求解
求二分类通用的log-loss函数(只要带入任意y=g(x)函数就可以求出对应log-loss函数)(也就是伯努利的二项分布的概率函数)
然后,对于二分类问题,假设y=g(x),有:
①P(y=1|x)=g(x)
②P(y=0|x)=1-g(x)
其最大似然函数:
③
【因为y要么就是0要么就是1,所以这样的写法是1和2两条式子的简写,所以称为二分类通用】
然后就对③这条式子求log,获得:
于是求-l(θ)的最小值就可以求得L(θ)的最大值。
也就是说,-l(θ)+正则项就是loss
然后,可以把g(x)=logistic函数带进去求解,求最小值
本节总结:
知道y服从Sigmoid函数后,又因为y是只有0和1两个值的二项分布,所以就可以求出其log-loss函数,对其求导可以获得最小值
三. 浅谈如何求解最小值,也就是说优化方法
最简单的方法:
批量梯度下降法(Batch
Gradient Descent)
要求θ的最小值,可以求出θ的导数,然后乘上一个长度α,表示在图中的沿导数方向前进多少,然后:
下一个θ=上一个θ-αΔθ
这样就可以获得下一个θ
公式为:
每给出一个样本就更新一次的,可以在线训练的方法:
随机梯度下降法(Stochastic Gradient Descent / SGD)
红线表示每一次所更新的新的θ,可以看到经过很多很多曲折的迭代,终于,θ到了一个很优化的位置
其式子为:
一次只用一个样本点,对于每个样本求它的梯度,然后乘以α来更新θ
优点:可以随机选择样本降低波动,一次只用一个样本点,可以在线学习
缺点:对于损失方程有比较严重的振荡,并且容易收敛到局部最小值,适用于精度要求不高的任务
算法为:
{
对数据集中每个样本
计算该样本的梯度
使用alpha乘梯度来更新回归系数
}
最新锐的在线学习方法,SGD的魔改版:
FTRL
一个SGD这样的在线训练算法的魔改版,可以产生稀疏解(降低模型体积)并保持很好的精度【并因为每个维度单独更哦学习率,能很好地利用每个样本】
业内常用LR(Logistic Regression)和FM(Factorization Machines)为点击率预估建模。对LR、FM这类模型的参数学习,传统的学习算法是batch learning算法,它无法有效地处理大规模的数据集,也无法有效地处理大规模的在线数据流。这时,有效且高效的online learning算法显得尤为重要。
FTRL是对w每一维分开训练更新的,每一维使用的是不同的学习速率,也是上面代码中lamda2之前的那一项。与w所有特征维度使用统一的学习速率相比,这种方法考虑了训练样本本身在不同特征上分布的不均匀性,如果包含w某一个维度特征的训练样本很少,每一个样本都很珍贵,那么该特征维度对应的训练速率可以独自保持比较大的值,每来一个包含该特征的样本,就可以在该样本的梯度上前进一大步,而不需要与其他特征维度的前进步调强行保持一致。
比较快的方法:牛顿法
牛顿法指出,求使f(θ)=0的θ,只需要一开始先固定一个θ,比如说θ=0,然后输入其他值使得
θ(t+1)= θt-Δθt
其中一维的情况,Δθ=f '(θt)/f(θt)(多维的情况,Δθ 前面要乘以个hassin矩阵的逆)
所以现在要求使得-l(θ)=0的θ,也就是让loss等于0 ,那么就令 f(θ)= -l(θ),带入公式进行求解即可
牛顿法是二阶收敛,而梯度下降则为一阶收敛,所以牛顿法更快。
简单来说,梯度下降是从所处位置选择一个坡度最大的方向走一步,而牛顿法则在选择方向时,不仅考虑坡度,还会考虑坡度的坡度,也就是下一步的坡度是否会变得更大。
几何上来说,牛顿法是用一个二次曲面去拟合当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面
其局限主要在于
1.矩阵的逆计算复杂度为n的立方,当规模很大时,计算量超大,通常改良做法是采用拟牛顿法如BFGS,L-BFGS等
2.如果初始值离局部极小值太远,Taylor展开并不能对原函数进行良好的近似
从物理学收到的启发:
动量法(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需要更多的训练时间以及可能会被困到鞍点的缺点,都制约了它在很多真实数据上的表现。
相关文章推荐
- [小白式机器学习(一)] logistic regression(LR)对数几率回归 / 逻辑回归 公式推导
- 逻辑斯蒂回归(对数几率回归)
- [小白式机器学习(一)] logistic regression(LR)对数几率回归 / 逻辑回归 公式推导
- 对数几率回归(逻辑斯蒂回归)
- logistic regression(LR)对数几率回归 / 逻辑回归 公式推导
- 逻辑斯蒂回归(对数几率回归)
- 逻辑回归和牛顿法 Logistic Regression and Newton's Method
- 逻辑斯谛回归正则化 regularized logistic regression
- Stanford机器学习---第三讲. 逻辑回归和过拟合问题的解决 logistic Regression & Regularization
- 【机器学习】对数几率回归(Logistic Regression、逻辑回归)数学证明
- Stanford机器学习-- 逻辑回归和过拟合问题的解决 logistic Regression & Regularization
- 局部加权回归、最小二乘的概率解释、逻辑斯蒂回归、感知器算法——斯坦福ML公开课笔记3
- Stanford机器学习---第三讲. 逻辑回归和过拟合问题的解决 logistic Regression & Regularization
- sklearn(scikit-learn) logistic regression loss(cost) function(sklearn中逻辑回归的损失函数)
- 逻辑回归模型(Logistic Regression, LR)基础---线性回归
- 线性回归与逻辑斯谛回归(from Linear regression to logistic regression)
- Python机器学习与实战笔记之逻辑斯蒂回归Logistic Regression, LR
- Logistic and Softmax Regression (逻辑回归和Softmax回归)
- Stanford机器学习---第三讲. 逻辑回归和过拟合问题的解决 logistic Regression & Regularization
- 逻辑斯谛回归正则化 regularized logistic regression