机器学习入门笔记——关于梯度下降参数更新的理解

梯度下降中参数更新公式的数学逻辑


大部分的机器学习模型(或者严格来说,统计学习方法)从结构上可以被抽象为三个基本要素:模型、策略、算法。其中策略作为评判模型好坏的标准,最直观的表述便是损失函数。在神经网络和大部分的机器学习模型中,对损失函数有这样的定义:
C ( w , b ) = 1 2 n ∑ x ∣ ∣ y ( x ) − a ∣ ∣ 2 C(w, b) = \frac{1}{2n}\sum_{x}||y(x)-a||^2 C(w,b)=2n1xy(x)a2
其中 w w w b b b都是模型 y ( x ) y(x) y(x)的参数,在神经网络中的S型神经元中,则被看做是激活函数的 权重偏置

更一般的,损失函数往往都是 C ( v 1 , v 2 , . . . , v n ) C(v_1,v_2,...,v_n) C(v1,v2,...,vn)的形式,其中 v i ( i = 1 , 2 , . . . , n ) v_i (i=1,2,...,n) vi(i=1,2,...,n)是模型的参数

但损失函数仅仅是给出了当前模型优劣程度的一个定量表达,这对于指导我们改进模型,提高拟合程度没有直接帮助。梯度下降算法则是希望利用损失函数 C ( w , b ) C(w,b) C(w,b),寻找模型参数 w w w b b b的更新方向,以极小化损失函数为目标,达到提高模型精确程度的目的。而参数更新一般都有如下公式:
v i ← v i − η ∂ C ∂ v i v_i←v_i-\eta\frac{\partial C}{\partial v_i} viviηviC

不失一般性,将损失函数看做是关于向量 v = ( v 1 , v 2 , . . . , v n ) v=(v_1,v_2,...,v_n) v=(v1,v2,...,vn)的函数 C ( v ) C(v) C(v),则损失函数在当前模型参数 v 0 v_0 v0附近有泰勒展开
C ( v ) = ∑ x = 0 ∞ ( v − v 0 ) n n ! C ( n ) ( v 0 ) C(v)=\sum_{x=0}^\infty\frac{(v-v_0)^n}{n!}C^{(n)}(v_0) C(v)=x=0n!(vv0)nC(n)(v0)
那么损失函数的一阶展开有如下形式
C ( v ) = C ( v 0 ) + ( v − v 0 ) C ′ ( v 0 ) C(v)=C(v_0)+(v-v_0)C'(v_0) C(v)=C(v0)+(vv0)C(v0)

可以看出,我们希望损失函数变小,也就意味着希望在 v 0 v_0 v0附近找到一个点 v v v,使得 C ( v ) < C ( v 0 ) C(v)C(v)<C(v0),即 C ( v ) − C ( v 0 ) < 0 C(v)-C(v_0)<0 C(v)C(v0)<0,即 ( v − v 0 ) C ′ ( v 0 ) < 0 (v-v_0)C'(v_0)<0 (vv0)C(v0)<0

记向量 a ⃗ = v − v 0 \vec a = v-v_0 a =vv0 b ⃗ = C ′ ( v 0 ) \vec b=C'(v_0) b =C(v0),若要使得以上不等式成立并且值最小(趋向于负数),则有 ∣ ∣ a ⃗ ∣ ∣ × ∣ ∣ b ⃗ ∣ ∣ c o s α < 0 ||\vec a||\times||\vec b||cos\alpha<0 a ×b cosα<0,即 a ⃗ \vec a a b ⃗ \vec b b 的方向相反时成立。那么我们可以用 b ⃗ \vec b b 来表示 a ⃗ \vec a a ,即 a ⃗ = − η b ⃗ \vec a = -\eta\vec b a =ηb

带入此等式,有 v − v 0 = − η C ′ ( v 0 ) v-v_0=-\eta C'(v_0) vv0=ηC(v0),那么我们就得到了梯度下降的参数更新公式:
v = v 0 − η C ′ ( v 0 ) v=v_0-\eta C'(v_0) v=v0ηC(v0)

你可能感兴趣的:(机器学习入门笔记——关于梯度下降参数更新的理解)