机器学习之梯度下降法(机器学习基石)

从二元分类到罗吉斯回归

在预测一个病人的患病情况的时候如果我们单纯的想预测下一个病人是否患病那么就会用到二元分类。但是如果我们现在预测某个病人患病的概率是多大的话显然二元分类就满足不了我们的要求于是就诞生了Logistic Regression。

Logistic Regression的假设模型

我们现在拥有的资料并不是我们所预期的类似于(某个病人,患病的概率)这样的资料,我们拥有的是(某个病人,是否患病)这样的资料。我们会发现后者可以当做前者的有杂讯的版本(比如说前者是0.2后者给的是0,前者是0.8后者是1),这样我们可以使用相同的资料做不同的事情。

我们知道无论在二元分类中还是在线性回归中我们首先要计算一个得分函数,而在Logistic Regression中也有相同的步骤。不同的是在算出得分函数之后需要将结果投射到一个S型函数上(Sigmoid函数),函数图如下:


如上图所示S为我们的得分函数,以它为横坐标投射到右面的函数上我们就会得到一个从0到1的函数从而也就产生了一个0~1的概率值。具体来说Sigmoid函数θ与其性质如下:

假设模型h(x)的引出

首先我们明确如果一个人患病的概率是0.6那么不患病的概率就是0.4推广到更加一般的情况(设f(x)为我们的目标函数同时也是患病的概率)如下图所示:

假设现在有一笔资料(包括标签的)那么产生这笔资料的概率有多大?

单个资料来讲,产生这个资料并且患病的概率为P(x)P(o|x)(此处o代表患病)而其中的P(o|x)正是我们的目标函数在此处的预测概率,所以它可以替换为f(x)单笔资料的患病概率变成了P(x)f(x),那么产生这样一笔带有不同标签的样本产生的的概率就是单个资料(是否患病的概率)相乘的结果。

我们的目标是要得出逼近于f(x)的一个函数,我们现在知道了在f(x)的情况下产生一个我们看到的样本的概率是很大的(因为有杂讯的存在所以不能是完全产生)。现在我们换一个思路想如果我们的假设模型h(x)也能在很大的几率上产生这笔资料我们就说这时的h(x)≈f(x)。现在我们就是要找到能最大可能性产生该样本的h(x)。h(x)在这里起到一个参数的作用,我们的估计方法在统计学上称之为极大似然估计

现在我们的目的就是用h(x)表示出样本发生的概率来然后使其最大化之后求出h(x)的表达式。由于Sigmoid函数的性质我们会发现1-h(x) = h(x)。

损失(错误)函数Ein的引出

产生(某个特定的)样本的概率表示如下:

又因为我们拿到的样本本身是一定的,也就是我们在已知一个样本的情况下去估计它们分别患病的概率。所以整个式子的大小只取决于以下式子的大小:

所以现在我们的目标就是要求上式的最大值,将问题进一步细化我们求得实际上是h(x)中包含的权重W所以,我们将上式改写成W的形式得到下图(θ任为我们的Sigmoid函数):


紧接着我们将上式进行取对数(将连乘变成连加)之后再做一些取反的操作(将最大化问题变成一个最小化问题)进而得到下图:

再将θ函数的带入上式得到下图:


现在我们的目标就是找到在上式最小化的时候的W的取值。上式越小就代表h(x)与f(x)的差距越小,因此上式的最小化过程也正是Ein最小化的过程。

Ein的最小化

在前面的课程中我们学过两种最小化Ein的方式,一种是PLA的知错就改发还有一个就是线性回归的让梯度为0的直接求取法。我们通过一些数学上的推导发现Ein是一个连续、可微的凸函数所以我们也要使用错误函数为0的条件去求这个函数的最小值。

梯度表达式的求解

将Ein式子中的各个部分用一些符号代替再使用复合函数求导的法则进行梯度表达式的求解得到上图最下方的表达式。

这是一个非线性的加权求和的式子(权重为θ函数),我们令梯度等于0则满足条件的情况有两种较为简单的假设

1.(-ynxn) = 0 ,这个显然不可能除非x都为0这样将没有意义。

2.θ函数 = 0,这就要求-y*Score = -∞ 。这里面潜藏了一个条件就是y*Score>0也就是说我们的资料必须是线性可分的,显然不符合现实中的条件。

看来我们不能够投机取巧了我们只能让这个式子的和整体为0从而计算出最小的Ein。与线性回归不同的是我们的梯度表达式是非线性的,所以我们不能够使用同线性回归相同的办法一步解出结果。

伟大的梯度下降法

直观的理解

在业界有一种优化方法叫迭代优化逼近,它融合了PLA算法的迭代性与线性回归的线性。其中PLA的迭代更新是在发生错误的的时候进行的,表达式可以变形如下:

可以将上式中的η当做是每次更新的步幅(学习率),ν当做是更新的方向。借助这个思路与LogisticRegression的Ein来考虑我们也是想让我们的错误率从“高处的山头”降到“最低的谷底”,而我们又知道梯度所在的方向是函数变化最快的方向所以我们选择梯度的反方向作为我们的更新的方向。


为什么是梯度的反方向请看下图案例:

在①区梯度为想往“谷底”走就要往的方向走。

在②区梯度为想往“谷底”走就要往的方向走。

现在我们的Ein的更新表达式如下图所示:

我们知道我们在某一点的梯度下降是一条线段而非曲线,但是将曲线以极限的思维去理解也是一条条极短的线段所构成。所以我们将上式做高维度的泰勒展开的处理得到下图:

其中v是一个单位向量(因为要使得Ein下降最快所以方向相对梯度来说为负)配合后面的梯度最后构成梯度的反方向,η为学习的步幅我们自定定义。这样我们的问题就由一个非线性的问题变成一个线性的问题。将问题继续细化求出W的更新方式如下:

η的选择

如果η太小我们的学习速率会太慢,如果η太大会导致过快进而越过“谷底”,如果在梯度较大的时候走较大的步幅较小的时候走较小的步幅这样会有一个不错的效果,从经验来看在0.1附近的η也是一个不错的。

根据上图的第三种模型,我们可以将η改成一个与梯度的大小成正比的变量如下图所示:

什么时候停下来?

当Ein接近于0或者一定的时间或一定的次数后停止。停下来的时候我们就求出了我们的模型h(x)了。

延伸阅读:随机梯度下降法

在LogisticRegression中我们每进行一次梯度的更新要遍历所有的点,这样我们会很花力气

事实上我们可以将它想想成一个随机的过程,也就是我们随机抽取一个点(或者是随机抽几个点做平均)在期望上与将所有点加起来的平均大体相似。这样的话我们就可以用单个点的梯度代替平均的梯度,这样的梯度就叫随机的梯度。整体的梯度就可以看成随机梯度的期望值。

从里一个角度来看,一个随机的梯度 = 理想的梯度+一些随机的偏差。但是在资料量够大的时候在经历过多次迭代的时候我们的随机偏差会进行抵消得到的结果与平均梯度的结果很相近。改进后的算法如下图:

我们虽然在有时候犯一些错,但是这种算法计算非常快也是我们的一种选择(业界的大部分人也在使用这种方法)。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elong_Hu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值