跳转至

一维线性回归模型与梯度下降算法

课程大纲

本课程分为三个部分:

  • 有监督的机器学习:回归与分类
  • 高级学习算法
  • 无监督的学习、推荐器、强化学习

1


监督学习与无监督学习

  • 监督学习:有标签 \(y\),学 \(x \to y\) 的映射(回归/分类)。
  • 无监督学习:无标签,发掘数据结构(聚类、降维、异常检测)。

线性回归模型

1) 任务与符号

  • 训练集:\(\{(x^{(i)},y^{(i)})\}_{i=1}^m\)
  • 单变量:\(x\in\mathbb{R}\);多变量:\(x\in\mathbb{R}^n\)

2) 假设函数

  • 单变量: $$ f_{w,b}!\left(x^{(i)}\right)=w\,x^{(i)}+b $$
\[ \hat{y}^{(i)} = w\,x^{(i)} + b \]

3) 成本函数(均方误差)

\[ J(w,b)=\frac{1}{2m}\sum_{i=0}^{m-1}\big(f_{w,b}(x^{(i)})-y^{(i)}\big)^2 \]
\[ J(w,b)=\frac{1}{2m}\sum_{i=0}^{m-1}\Big(\hat{y}^{(i)}-y^{(i)}\Big)^2 =\frac{1}{2m}\sum_{i=0}^{m-1}\Big(w\,x^{(i)}+b-y^{(i)}\Big)^2 \]

线性回归模型的思想是将训练集代入函数中,找出最小的 \(J(w,b)\) 所对应的 \(w,b\) 。 但是如何找出最小的 \(J(w,b)\) 呢?


梯度下降算法

有一种更系统的方法来找出w与b——梯度下降算法。梯度下降在机器学习中无处不在,不仅用于线性回归,还用于训练,例如一些深度学习模型。

梯度下降算法的思想:从一个初始点出发,沿着函数值下降最快的方向前进,直到到达局部最小值。用大白话来解释就是朝着最陡的方向下山。

1) 公式

\[ w = w - \alpha \,\frac{\partial}{\partial w} J(w,b) \]
\[ b = b - \alpha \,\frac{\partial}{\partial b} J(w,b) \]

等号表示赋值,α表示学习率。

2) 正确的做法

\[ \begin{aligned} \text{tmp_w} &= w - \alpha\,\frac{\partial}{\partial w} J(w,b) \\ \text{tmp_b} &= b - \alpha\,\frac{\partial}{\partial b} J(w,b) \\ w &= \text{tmp_w} \\ b &= \text{tmp_b} \end{aligned} \]

意为同时更新w与b,在原始位置的基础上做梯度下降。

3) 学习率α

  • α不能太小,也不能太大。 太小会导致收敛过慢,太大可能会导致错过最优解,甚至发散。
  • 若J已达局部最小值,梯度下降会保持w不变。 因为此时梯度为0,更新公式变为 \(w = w - \alpha \cdot 0\),即 \(w\) 保持不变。
  • 当J接近局部最小值时,导数会变得很小,下降的梯度也会变得很小,导致每次更新的步伐也变小,从而使得 \(w\) 的变化变得非常缓慢。 这是即使α是固定值成本函数J最终也能达到局部最小值的原因。

2


线性回归的梯度下降

1) 目标函数

\[ J(w,b)=\frac{1}{2m}\sum_{i=0}^{m-1}\Big(w\,x^{(i)}+b-y^{(i)}\Big)^2 \]

2) 梯度计算

\[ \frac{\partial}{\partial w} J(w,b) = \frac{1}{m}\sum_{i=0}^{m-1}\Big(w\,x^{(i)}+b-y^{(i)}\Big)x^{(i)} \]
\[ \frac{\partial}{\partial b} J(w,b) = \frac{1}{m}\sum_{i=0}^{m-1}\Big(w\,x^{(i)}+b-y^{(i)}\Big) \]

上方两式是用微积分推导出的,推导过程如下:

\[ \begin{aligned} \frac{\partial}{\partial w}J(w,b) &= \frac{d}{dw}\,\frac{1}{2m}\sum_{i=1}^{m}\!\left(f_{w,b}\!\left(x^{(i)}\right)-y^{(i)}\right)^{2} = \frac{d}{dw}\,\frac{1}{2m}\sum_{i=1}^{m}\!\left(w\,x^{(i)}+b-y^{(i)}\right)^{2} \\[4pt] &= \frac{1}{m}\sum_{i=1}^{m}\!\left(w\,x^{(i)}+b-y^{(i)}\right)x^{(i)} = \frac{1}{m}\sum_{i=1}^{m}\!\left(f_{w,b}\!\left(x^{(i)}\right)-y^{(i)}\right)x^{(i)} \\[8pt] \frac{\partial}{\partial b}J(w,b) &= \frac{d}{db}\,\frac{1}{2m}\sum_{i=1}^{m}\!\left(f_{w,b}\!\left(x^{(i)}\right)-y^{(i)}\right)^{2} = \frac{d}{db}\,\frac{1}{2m}\sum_{i=1}^{m}\!\left(w\,x^{(i)}+b-y^{(i)}\right)^{2} \\[4pt] &= \frac{1}{m}\sum_{i=1}^{m}\!\left(w\,x^{(i)}+b-y^{(i)}\right) = \frac{1}{m}\sum_{i=1}^{m}\!\left(f_{w,b}\!\left(x^{(i)}\right)-y^{(i)}\right) \end{aligned} \]

3) 更新规则

\[ \begin{aligned} w &= w - \alpha\,\frac{\partial}{\partial w} J(w,b) \\ b &= b - \alpha\,\frac{\partial}{\partial b} J(w,b) \end{aligned} \]

w与b同时更新。

4) 线性回归的梯度下降算法

\[ w = w - \alpha \,\frac{1}{m}\sum_{i=1}^{m}\big(f_{w,b}(x^{(i)}) - y^{(i)}\big)\,x^{(i)} \]
\[ b = b - \alpha \,\frac{1}{m}\sum_{i=1}^{m}\big(f_{w,b}(x^{(i)}) - y^{(i)}\big) \]
  • 根据初始化参数w与b的不同,可能会得到不同的J的局部最小值。(如下图) 3

  • 但是事实证明,线性回归的平方误差成本函数J是一个凸函数,所以不管初始化参数w与b为何值,最终都能收敛到同一个全局最小值。

这种梯度下降算法称为批量梯度下降(Batch Gradient Descent),因为每次迭代都使用了所有训练样本来计算梯度。


梯度下降算法的运行

下图为演示实例,在本演示中初始化 w = -0.1 和 b = 900。

4

编辑于9月11日