在前面一篇文章中写到了线性回归算法以及梯度下降算法对参数的更新:
θ i = θ i ′ − α ∂ L o s s ∂ θ \theta_i=\theta_i^{'}-\alpha\frac{\partial Loss}{\partial \theta} θi=θi′−α∂θ∂Loss
每一个算法都会有相应的数学公式推导,那么这个参数更新公式是怎么来的呢?
首先看一张函数图片:
比如说我们的初始点在 θ 0 \theta_0 θ0点,我们的下一步需要到达的点是 θ \theta θ, 现在我们要做的就是根据已知的 θ 0 \theta_0 θ0来得到下一步更新的 θ \theta θ点,就是我们的参数更新公式。
再看看,这张图是不是有些熟悉?对,就是我们高中刚学导数的时候推导的一个公式:
f ( θ ) − f ( θ 0 ) θ − θ 0 = ▽ f ( θ 0 ) \frac{f(\theta)-f(\theta_0)}{\theta-\theta_0}=\bigtriangledown f(\theta_0) θ−θ0f(θ)−f(θ0)=▽f(θ0)
当 θ \theta θ无限接近 θ 0 \theta_0 θ0的时候,对应函数值的差值与 θ \theta θ与 θ 0 \theta_0 θ0的差值的比值就是函数在 θ 0 \theta_0 θ0点的梯度值,就是导数。
其实吧,这公式更严格地说来自泰勒展开式:
f ( x ) = ∑ i = 0 n f i ( x 0 ) i ! ( x − x 0 ) i f(x)=\sum_{i=0}^{n}\frac{f^{i}(x_0)}{i!}(x-x_0)^i f(x)=∑i=0ni!fi(x0)(x−x0)i
当 i i i=1时,就会得到上述公式,也就是泰勒一阶展开式。
那接下来就要对公式进行变换,将分子项移到右边
f ( θ ) − f ( θ 0 ) = ( θ − θ 0 ) ▽ f ( θ 0 ) f(\theta)-f(\theta_0)=(\theta-\theta_0)\bigtriangledown f(\theta_0) f(θ)−f(θ0)=(θ−θ0)▽f(θ0)
对每次更新 θ \theta θ值都希望使 f ( θ ) f(\theta) f(θ)值更小,所以可以得到
f ( θ ) − f ( θ 0 ) < 0 f(\theta)-f(\theta_0)<0 f(θ)−f(θ0)<0
即 ( θ − θ 0 ) ▽ f ( θ 0 ) < 0 (\theta-\theta_0)\bigtriangledown f(\theta_0)<0 (θ−θ0)▽f(θ0)<0.
下面重点来了, θ − θ 0 \theta-\theta_0 θ−θ0是一个很小的矢量,他的大小我们规定是我们每更新一个参数力度 η \eta η(可以比作下山时每一步走的多少),那么单位向量我们定义为 v v v,则上述公式可变为
η v ▽ f ( θ 0 ) < 0 \eta v\bigtriangledown f(\theta_0)<0 ηv▽f(θ0)<0
η
\eta
η是标量而且一般设定为正值,所以
η
\eta
η可以忽略,所以不等式变成
v
▽
f
(
θ
0
)
<
0
v\bigtriangledown f(\theta_0)<0
v▽f(θ0)<0
根据两个向量数量积公式可以得到
∣ v ∣ ∣ ▽ f ( θ ) ∣ c o s ( β ) < 0 |v||\bigtriangledown f(\theta)|cos(\beta)<0 ∣v∣∣▽f(θ)∣cos(β)<0
可知当 c o s ( β ) = − 1 cos(\beta)=-1 cos(β)=−1的时候 v 与 ▽ f ( θ ) v与\bigtriangledown f(\theta) v与▽f(θ)的方向完全相反即是梯度的负方向的时候,即使 v ▽ f ( θ 0 ) v\bigtriangledown f(\theta_0) v▽f(θ0)小于0且是局部最小值。因为 v v v是单位向量又是梯度的反方向,所以
v = − ▽ f ( θ ) ∣ ▽ f ( θ ) ∣ v=-\frac{\bigtriangledown f(\theta)}{|\bigtriangledown f(\theta)|} v=−∣▽f(θ)∣▽f(θ)
代如 θ − θ 0 = η v \theta-\theta_0=\eta v θ−θ0=ηv中
θ = θ 0 − η ▽ f ( θ 0 ) ∣ ▽ f ( θ 0 ) ∣ \theta=\theta_0-\eta \frac{\bigtriangledown f(\theta_0)}{|\bigtriangledown f(\theta_0)|} θ=θ0−η∣▽f(θ0)∣▽f(θ0)
一般 ∣ ▽ f ( θ 0 ) ∣ |\bigtriangledown f(\theta_0)| ∣▽f(θ0)∣是标量,可以并入到 η \eta η中简化为
θ = θ 0 − η ▽ f ( θ 0 ) \theta=\theta_0-\eta\bigtriangledown f(\theta_0) θ=θ0−η▽f(θ0)