自学内容网 自学内容网

机器学习 | 回归算法原理——最速下降法(梯度下降法)

Hi,大家好,我是半亩花海。接着上次的最小二乘法继续更新《白话机器学习的数学》这本书的学习笔记,在此分享最速下降法(梯度下降法)这一回归算法原理。本章的回归算法原理基于《基于广告费预测点击量》项目,欢迎大家交流学习!

目录

一、最速下降法概述

二、案例分析

1. 设置问题

2. 定义模型

3. 最速下降法


一、最速下降法概述

最速下降法是梯度下降法的一种更具体实现形式,它的原理是:在每次迭代搜索中选择合适的步长 \alpha_k,沿着梯度的反方向,总可以找到一个 x^{(k+1)}=x^k-\alpha_k \cdot \nabla f\left(x^{(k)}\right),使得目标函数值能够得到最大程度的减少,最终在这个方向 f\left(x^{(k+1)}\right) 取到最小值,即\alpha_{(k)}=\operatorname{argmin} f\left(x^k-\alpha \cdot \nabla f\left(x^{(k)}\right)\right)


二、案例分析

在上一节中,我们要让 E(\theta) 越来越小,不过一边随意修改 \theta 的值,一边计算 E(\theta) 并与之前的值相比较的做法实在是太麻烦了。所以我们要使用前面简单提到过的微分来求它。

微分是计算变化的快慢程度时使用的方法。我们在学微分的时候,应该对一个概念比较熟悉,那就是增减表

1. 设置问题

我们简单举一个例子,比如有一个表达式为 g(x) = (x - 1)^2 的二次函数,如下图所示。可以看出,当 x = 1 时,出现最小值是 g(x) = 0

将 g(x) 展开,有 (x-1)^2=x^2-2 x+1,再对函数进行微分,结果如下:

\frac{\mathrm{d}}{\mathrm{d} x} g(x)=2 x-2

为了写出增减表,我们看一下导数的符号(只要看 2x−2 的符号就行):

由上表可以看出,在 x < 1 时,g(x) 的图形向右下方延伸,反之当 x > 1 时,g(x) 的图形向右上方延伸,换句话说就是从左下方开始延伸的。

比如在 x = 3 这一点,如下图所示,为了使 g(x)的值变小,我们需要向左移动 x,也就是必须减小 x同理,如果是在另一侧的 x = −1 这一点,如下图所示,为了使 g(x) 的值变小,我们需要向右移动 x,也就是必须增加 x

2. 定义模型

从上面两个例子可以总结出,我们可以根据导数的符号来决定移动 x 的方向。要向与导数的符号相反的方向移动 xg(x) 就会自然而然地沿着最小值的方向前进了,即自动更新参数

上述内容用表达式展示出来,如下式。这也被称为最速下降法(或称为梯度下降法)。

x:=x-\eta \frac{\mathrm{d}}{\mathrm{d} x} g(x)

其中,A:=B 形式即为通过 B 来定义 A\eta 是学习率(正的常数,读作“伊塔”)。根据学习率的大小(学习率可调节)到达最小值的更新次数也会发生变化。换种说法就是收敛速度会不同。有时候甚至会出现完全无法收敛,一直发散的情况。

从上述两张图可以看出,如果 \eta 较大,那么 x:=x-\eta(2 x-2) 会在两个值上跳来跳去,甚至有可能远离最小值这就是发散状态;而当 \eta 较小时,移动量也变小,更新次数就会增加,但是值确实是会朝着收敛方向而去。

3. 最速下降法

在上一节的最小二乘法中提到目标函数的表达式是:E(\theta)=\frac{1}{2} \sum_{i=1}^n\left(y^{(i)}-f_\theta\left(x^{(i)}\right)\right)^2

这个目标函数 E(\theta) 和上述问题中的 g(x) 同样是开口向上的形状, 所以刚才讨论的内容也同样适用于它。不过这个目标函数中包含 f_\theta(x),而从 f_\theta(x)=\theta_0+\theta_1 x 这个表达式又可以看出,f_\theta(x) 拥有 \theta_0 和 \theta_1 两个参数。也就是说这个目标函数 E(\theta) 是拥有 \theta_0 和 \theta_1 的双变量函数,所以不能用普通的微分,而要用偏微分。如此一来,更新表达式如下:

\begin{aligned} & \theta_0:=\theta_0-\eta \frac{\partial E}{\partial \theta_0} \\ & \theta_1:=\theta_1-\eta \frac{\partial E}{\partial \theta_1} \end{aligned}

我们知道,E(\theta) 中有 f_\theta(x),而 f_\theta(x) 中又有 \theta_0,所以我们可以使用复合函数的微分分别去考虑它们。

\begin{aligned} & u=E(\theta) \\ & v=f_\theta(x) \end{aligned}

对上述两个式子进行阶梯性地微分:

先从 u 对 v 微分的地方开始计算,把函数展开后再分别求微分(可以发现,在最后一行,常数与 \frac{1}{2} 相抵消了,微分后的表达式变简单了吧? 这就是一开始乘以 \frac{1}{2} 的理由。):

\begin{aligned} \frac{\partial u}{\partial v} & =\frac{\partial}{\partial v}\left(\frac{1}{2} \sum_{i=1}^n\left(y^{(i)}-v\right)^2\right) \\ & =\frac{1}{2} \sum_{i=1}^n\left(\frac{\partial}{\partial v}\left(y^{(i)}-v\right)^2\right) \\ & =\frac{1}{2} \sum_{i=1}^n\left(\frac{\partial}{\partial v}\left(y^{(i)^2}-2 y^{(i)} v+v^2\right)\right) \\ & =\frac{1}{2} \sum_{i=1}^n\left(-2 y^{(i)}+2 v\right) \\ & =\sum_{i=1}^n\left(v-y^{(i)}\right) \end{aligned}

下面就是 v 对 \theta_0 进行微分的部分:

\begin{aligned} \frac{\partial v}{\partial \theta_0} & =\frac{\partial}{\partial \theta_0}\left(\theta_0+\theta_1 x\right) \\ & =1 \end{aligned}

接下来,依照复合函数的微分表达式 \frac{\partial u}{\partial \theta_0}=\frac{\partial u}{\partial v} \cdot \frac{\partial v}{\partial \theta_0},将两个微分的结果相乘,就可以得到对 \theta_0 进行微分的结果了,最后,不要忘了把表达式中的 v 替换回 f_\theta(x)

\begin{aligned} \frac{\partial u}{\partial \theta_0} & =\frac{\partial u}{\partial v} \cdot \frac{\partial v}{\partial \theta_0} \\ & =\sum_{i=1}^n\left(v-y^{(i)}\right) \cdot 1 \\ & =\sum_{i=1}^n\left(f_\theta\left(x^{(i)}\right)-y^{(i)}\right) \end{aligned}

接下来,同理,再算一下对 \theta_1 进行微分的结果:

u 对 v 微分的部分与上述完全相同,所以这次只要计算 v 对 \theta_1 微分的部分即可。

\begin{aligned} \frac{\partial v}{\partial \theta_1} & =\frac{\partial}{\partial \theta_1}\left(\theta_0+\theta_1 x\right) \\ & =x \end{aligned}

最终 u 对 \theta_1 微分的结果:

\begin{aligned} \frac{\partial u}{\partial \theta_1} & =\frac{\partial u}{\partial v} \cdot \frac{\partial v}{\partial \theta_1} \\ & =\sum_{i=1}^n\left(v-y^{(i)}\right) \cdot x^{(i)} \\ & =\sum_{i=1}^n\left(f_\theta\left(x^{(i)}\right)-y^{(i)}\right) x^{(i)} \end{aligned}

所以参数 \theta_0\theta_1 的更新表达式如下:

\begin{aligned} & \theta_0:=\theta_0-\eta \sum_{i=1}^n\left(f_\theta\left(x^{(i)}\right)-y^{(i)}\right) \\ & \theta_1:=\theta_1-\eta \sum_{i=1}^n\left(f_\theta\left(x^{(i)}\right)-y^{(i)}\right) x^{(i)} \end{aligned}

只要根据这个表达式来更新 \theta_0\theta_1 ,就可以找到正确的一次函数 f_\theta(x) ,进而得出最终符合图像规律的f_\theta(x)=\theta_0+\theta_1 x。此时,我们输入任意的广告费(即横坐标),就可以得到相应的点击量(即纵坐标),于是我们就能根据广告费预测点击量。


原文地址:https://blog.csdn.net/ttrr27/article/details/140640811

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!