梯度下降算法——theta参数更新公式的数学理解

(notice:粗体以示向量)

一、引出算法

在学习 Linear Regression 算法时,经典案例就是房价预测。在通过一系列预处理操作后,得到一个带有特征变量 x x x和可学习参数 θ \theta θ的假设函数:
h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 h_\theta(\textbf{x}) = \theta_0 + \theta_1{x_1} +\theta_2 {x_2} hθ(x)=θ0+θ1x1+θ2x2

一般式:

h θ ( x ) = ∑ i = 0 n θ i x i = θ T ⋅ x ( n 为 特 征 数 ) h_\theta(\textbf{x})=\sum_{i=0}^{n}\theta_{i}x_{i}=\boldsymbol{\theta}^{T}·\textbf{x} (n 为特征数) hθ(x)=i=0nθixi=θTxn
下一步要做的就是,构造一个均方损失函数:

J ( θ ) = 1 2 ∑ k = 1 m ( h θ ( x k ) − y k ) 2 ( m 为 训 练 集 样 本 数 量 ) J(\boldsymbol\theta) = \frac{1}{2}\sum_{k=1}^{m} (h_\theta(\textbf{x}^k) - y^k)^2 (m 为训练集样本数量) J(θ)=21k=1m(hθ(xk)yk)2m

h θ ( x k ) − y k h_\theta(\textbf{x}^{k}) - y^k hθ(xk)yk
表示第 k 个样本的实际预测值和其真实值的差异,即“训练误差”。所有样本的训练误差之和为损失函数 J ( θ ) J(\boldsymbol{\theta}) J(θ) J ( θ ) J(\boldsymbol{\theta}) J(θ) 越小,则说明可学习参数 θ \boldsymbol{\theta} θ调整的越好,算法泛化能力有可能也越好。


想让损失函数 J ( θ ) J(\boldsymbol{\theta}) J(θ) 变小,就只能迭代优化可学习参数 θ \boldsymbol{\theta} θ

而想要优化参数 θ \boldsymbol{\theta} θ,就可以使用梯度下降算法


二、梯度下降算法直观理解

梯度下降算法——theta参数更新公式的数学理解_第1张图片


直观看,假如损失函数的起始位置在上图 “1”的位置。由坐标轴刻度可知,此时的损失函数 J ( θ ) J(\boldsymbol{\theta}) J(θ)的位置很高,数值很大。需要调整可学习参数 θ \boldsymbol{\theta} θ以减小在训练集上 J ( θ ) J(\boldsymbol{\theta}) J(θ)的数值。
如图所示,损失函数 J ( θ ) J(\boldsymbol{\theta}) J(θ)不断的寻找比当前位置更低的地方作为下一步驻留地,最后在位置“2”处停止寻找。此时便得到一个局部最优解 θ \boldsymbol\theta θ.

这使用的就是下面这个更新公式:
θ i : = θ i − α ∂ ∂ θ i J ( θ ) \theta_i := \theta_i - \alpha \frac{\partial}{\partial \theta_i} J(\boldsymbol{\theta}) θi:=θiαθiJ(θ)
其中:(注意区分粗体)
∂ ∂ θ i J ( θ ) = ∂ ∂ θ i 1 2 ∑ k = 1 m ( h θ ( x k ) − y k ) 2 {\frac{\partial}{\partial \theta_i} J(\boldsymbol{\theta}) = \frac{\partial}{\partial \theta_i} \frac{1}{2}\sum_{k=1}^m(h_\theta(\textbf{x}^k) - y^k)^2} θiJ(θ)=θi21k=1m(hθ(xk)yk)2

= ∂ ∂ θ i 1 2 ∑ k = 1 m ( θ T ⋅ x k − y k ) 2 =\frac{\partial}{\partial \theta_i} \frac{1}{2}\sum_{k=1}^m(\boldsymbol{\theta}^T·\textbf{x}^k - y^k)^2 =θi21k=1m(θTxkyk)2

= ∑ k = 1 m ( θ T ⋅ x k − y k ) ⋅ x i =\sum_{k=1}^m(\boldsymbol{\theta}^T·\textbf{x}^k - y^k)·x_i =k=1m(θTxkyk)xi

= ∑ k = 1 m ( h θ ( x k ) − y k ) ⋅ x i =\sum_{k=1}^m(h_\theta(\textbf{x}^k) - y^k)·x_i =k=1m(hθ(xk)yk)xi
经推导得到可学习参数 θ \theta θ的更新公式:
θ i : = θ i + α ⋅ ∑ k = 1 m ( y k − h θ ( x k ) ) ⋅ x i k \theta_i := \theta_i + \alpha·\sum_{k=1}^m(y^k - h_\theta(\textbf{x}^k))·x_i^k θi:=θi+αk=1m(ykhθ(xk))xik
公式意思是:使用第k个样本点的数据更新 θ \boldsymbol\theta θ中的第i个 θ i \theta_i θi分量


三、疑惑

直观理解很容易,不理解的是:


为什么通过 θ i : = θ i + α ⋅ ∑ k = 1 m ( y k − h θ ( x k ) ) ⋅ x i k \theta_i := \theta_i + \alpha·\sum_{k=1}^m(y^k - h_\theta(\textbf{x}^k))·x_i^k θi:=θi+αk=1m(ykhθ(xk))xik调整 θ \boldsymbol\theta θ,就可以把损失函数 J ( θ ) J(\boldsymbol\theta) J(θ)尽可能的减小?

换言之,以cs229课程截图为例,为什么这个公式能使损失函数 J ( θ ) J(\boldsymbol\theta) J(θ) 步步走到更低点,迭代次数完成后到达一个局部最低点?

由此产生两个问题:

1、损失函数下降方向是怎么选择的?

2、 θ \boldsymbol\theta θ的更新公式为什么是这个形态?


四、证明

问题1:损失函数下降方向是怎么选择的?

证明:

梯度的概念,如下图:

(“梯度”是“梯度向量”的简称,“梯度”和“方向导数”是有本质区别和联系的)

简言之:

梯度是一个向量,其分量是由函数偏导数构成的。

梯度方向是一个函数上升最快的方向

负梯度方向是一个函数下降最快的方向


===》由此得:Gradient Descent算法选择损失函数下降方向时,是选择负梯度方向



问题2: θ \boldsymbol\theta θ的更新公式为什么是这个形态?

证明:

(1)高等数学中有一个知识点: 泰勒公式

若函数 f ( x ) f(x) f(x) x 0 x_0 x0处可导,则在 x 0 x_0 x0的领域 U ( x 0 ) U(x_0) U(x0)内有:
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + O ( x − x 0 ) f(x) = f(x_0) + f'(x_0)(x - x_0)+O(x - x_0) f(x)=f(x0)+f(x0)(xx0)+O(xx0)
也即:
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) f(x) = f(x_0) + f'(x_0)(x - x_0) f(x)=f(x0)+f(x0)(xx0)


(2)同理可得 J ( θ ) J(\boldsymbol\theta) J(θ) θ 0 \boldsymbol\theta_0 θ0某领域内的泰勒展开式
J ( θ ) = 1 2 ∑ k = 1 m ( h θ ( x k ) − y k ) 2 J(\boldsymbol\theta) = \frac{1}{2}\sum_{k=1}^{m} (h_\theta(\textbf{x}^k) - y^k)^2 J(θ)=21k=1m(hθ(xk)yk)2

J ( θ ) = J ( θ 0 ) + J ′ ( θ 0 ) ( θ − θ 0 ) J(\boldsymbol\theta) = J(\boldsymbol\theta_0) + J'(\boldsymbol\theta_0)(\boldsymbol\theta - \boldsymbol\theta_0) J(θ)=J(θ0)+J(θ0)(θθ0)

θ \boldsymbol\theta θ是向量,得求偏导数。现使用第k个样本点的数据更新第i个分量 θ i \theta_i θi为例

J ( θ ) − J ( θ 0 ) = ∂ ∂ θ i 1 2 ∑ k = 1 m ( θ 0 T ⋅ x k − y k ) 2 ( θ − θ 0 ) J(\boldsymbol{\theta}) - J(\boldsymbol{\theta_{0}}) =\frac{\partial}{\partial \theta_i} \frac{1}{2}\sum_{k=1}^m(\boldsymbol{\theta_0}^T·\textbf{x}^k - y^k)^2(\boldsymbol\theta - \boldsymbol\theta_0) J(θ)J(θ0)=θi21k=1m(θ0Txkyk)2(θθ0)

= ∑ k = 1 m ( θ 0 T ⋅ x k − y k ) ⋅ x i k ⋅ ( θ − θ 0 ) \textcolor{red}{=\sum_{k=1}^m(\boldsymbol{\theta_0}^T·\textbf{x}^k - y^k)·x_i^k}·(\boldsymbol\theta - \boldsymbol\theta_0) =k=1m(θ0Txkyk)xik(θθ0)

其中红色部分就是梯度(一元函数的导数可以看作梯度),将这部分拿出来取反,即负梯度方向

(3)参数更新公式:

f ( x ) f(x) f(x)为例:

f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) f(x) = f(x_0) + f'(x_0)(x - x_0) f(x)=f(x0)+f(x0)(xx0)

f ( x ) f(x) f(x) x 0 x_0 x0处沿着负梯度方向下降,只需要更新 x x x即可。

x = x 0 + ( − f ′ ( x 0 ) ⋅ α ) , ( α 为 学 习 率 ) x = x_0 + (-f'(x_0)·\alpha),(\alpha为学习率) x=x0+(f(x0)α),α




同理可得:

<1>现有负梯度方向:
− ∂ ∂ θ i J ′ ( θ ) = − ∑ k = 1 m ( θ T ⋅ x k − y k ) ⋅ x i k \textcolor{red}{-\frac{\partial}{\partial\theta_i}{J'(\boldsymbol\theta)} = -\sum_{k=1}^m(\boldsymbol{\theta}^T·\textbf{x}^k - y^k)·x_i^k} θiJ(θ)=k=1m(θTxkyk)xik

<2>同理可得 J ( θ ) J(\boldsymbol\theta) J(θ) θ 0 \boldsymbol\theta_0 θ0某领域内的泰勒展开式
J ( θ ) = J ( θ 0 ) + J ′ ( θ 0 ) ( θ − θ 0 ) J(\boldsymbol\theta) = J(\boldsymbol\theta_0) + J'(\boldsymbol\theta_0)(\boldsymbol\theta - \boldsymbol\theta_0) J(θ)=J(θ0)+J(θ0)(θθ0)

θ i : = θ i + ( − α ⋅ ∑ k = 1 m ( θ T ⋅ x k − y k ) ⋅ x i k ) \theta_i := \theta_i + (-\alpha·\sum_{k=1}^m(\boldsymbol{\theta}^T·\textbf{x}^k - y^k)·x_i^k) θi:=θi+(αk=1m(θTxkyk)xik)

θ i : = θ i + α ⋅ ∑ k = 1 m ( y k − θ T ⋅ x k ) ⋅ x i k \theta_i := \theta_i + \alpha·\sum_{k=1}^m(y^k - \boldsymbol{\theta}^T·\textbf{x}^k)·x_i^k θi:=θi+αk=1m(ykθTxk)xik

θ i : = θ i + α ⋅ ∑ k = 1 m ( y k − h θ ( x k ) ) ⋅ x i k \theta_i := \theta_i + \alpha·\sum_{k=1}^m(y^k - h_\theta(\textbf{x}^k))·x_i^k θi:=θi+αk=1m(ykhθ(xk))xik

θ i ( i = 0 , 1 , ⋅ ⋅ ⋅ ⋅ n ) \theta_i \quad(i = 0,1,····n) θi(i=0,1,n) 全部更新完后, θ \boldsymbol{\theta} θ整体更新完毕



===》以上便是 $\boldsymbol\theta$ 的更新公式形态的由来

你可能感兴趣的:(DM,机器学习,人工智能,算法)