在机器学习的过程中,求导是一件重要的基础数学工具。尤其是对于多特征的数据、模型而言,更加注重多元函数的求导。机器学习优化参数的一个重要方法就是在方向向量的基础上求其梯度。本文介绍了梯度、方向导数的含义以及其在机器学习中的应用。
梯度的引入依靠方向向量。在多元函数中,设 u = f ( x 1 , x 2 , . . . , x n ) u=f(x_1, x_2, ...,x_n) u=f(x1,x2,...,xn)在点 x ( 0 ) = ( x 1 ( 0 ) , x 2 ( 0 ) , . . . , x n ( 0 ) ) x^{(0)}=(x^{(0)}_1, x^{(0)}_2, ...,x^{(0)}_n) x(0)=(x1(0),x2(0),...,xn(0))的一个邻域内有定义。对于给定的方向 l = ( cos α 1 , cos α 2 , . . . , cos α n ) l=(\cos\alpha_1,\cos\alpha_2,...,\cos\alpha_n) l=(cosα1,cosα2,...,cosαn),如果极限
lim ρ → 0 + f ( x 1 ( 0 ) + ρ cos α 1 , x 2 ( 0 ) + ρ cos α 2 , . . . , x n ( 0 ) + ρ cos α n ) − f ( x 1 ( 0 ) , x 2 ( 0 ) , . . . , x n ( 0 ) ) ρ \displaystyle{\lim\limits_{\rho\rightarrow0^+}\frac{f(x_1^{(0)}+\rho\cos\alpha_1,x_2^{(0)}+\rho\cos\alpha_2,...,x_n^{(0)}+\rho\cos\alpha_n)-f(x^{(0)}_1, x^{(0)}_2, ...,x^{(0)}_n)}{\rho}} ρ→0+limρf(x1(0)+ρcosα1,x2(0)+ρcosα2,...,xn(0)+ρcosαn)−f(x1(0),x2(0),...,xn(0))
存在,则称其值为函数 f ( x 1 , x 2 , . . . , x n ) f(x_1, x_2, ...,x_n) f(x1,x2,...,xn)于点 x ( 0 ) = ( x 1 ( 0 ) , x 2 ( 0 ) , . . . , x n ( 0 ) ) x^{(0)}=(x^{(0)}_1, x^{(0)}_2, ...,x^{(0)}_n) x(0)=(x1(0),x2(0),...,xn(0))沿方向 l l l的方向导数,表示的是函数 f f f在方向 l l l上的变化率。记为
∂ f ∂ l ( x 1 ( 0 ) , x 2 ( 0 ) , . . . , x n ( 0 ) ) = lim ρ → 0 + f ( x 1 ( 0 ) + ρ cos α 1 , x 2 ( 0 ) + ρ cos α 2 , . . . , x n ( 0 ) + ρ cos α n ) − f ( x 1 ( 0 ) , x 2 ( 0 ) , . . . , x n ( 0 ) ) ρ = ∂ f ∂ x 1 ( x ( 0 ) ) cos α 1 + ∂ f ∂ x 2 ( x ( 0 ) ) cos α 2 + . . . + ∂ f ∂ x n ( x ( 0 ) ) cos α n = ( ∂ f ∂ x 1 ( x ( 0 ) ) , ∂ f ∂ x 2 ( x ( 0 ) ) , . . . , ∂ f ∂ x n ( x ( 0 ) ) ) ⋅ ( cos α 1 , cos α 2 , . . . , cos α n ) = ∇ f ( x 1 ( 0 ) , x 2 ( 0 ) , . . . , x n ( 0 ) ) ⋅ ( cos α 1 , cos α 2 , . . . , cos α n ) = grad f ( x 1 ( 0 ) , x 2 ( 0 ) , . . . , x n ( 0 ) ) ⋅ ( cos α 1 , cos α 2 , . . . , cos α n ) = ∣ ∇ f ( x 1 ( 0 ) , x 2 ( 0 ) , . . . , x n ( 0 ) ) ∣ ∣ e l ∣ cos θ = ∣ ∇ f ( x 1 ( 0 ) , x 2 ( 0 ) , . . . , x n ( 0 ) ) ∣ cos θ \begin{aligned} &\displaystyle{\frac{\partial f}{\partial l}(x^{(0)}_1, x^{(0)}_2, ...,x^{(0)}_n)}\\ =&\displaystyle{\lim\limits_{\rho\rightarrow0^+}\frac{f(x_1^{(0)}+\rho\cos\alpha_1,x_2^{(0)}+\rho\cos\alpha_2,...,x_n^{(0)}+\rho\cos\alpha_n)-f(x^{(0)}_1, x^{(0)}_2, ...,x^{(0)}_n)}{\rho}}\\ =&\displaystyle{\frac{\partial f}{\partial x_1}(x^{(0)})\cos\alpha_1+\frac{\partial f}{\partial x_2}(x^{(0)})\cos\alpha_2+...+\frac{\partial f}{\partial x_n}(x^{(0)})\cos\alpha_n}\\ =&\displaystyle{(\frac{\partial f}{\partial x_1}(x^{(0)}),\frac{\partial f}{\partial x_2}(x^{(0)}),...,\frac{\partial f}{\partial x_n}(x^{(0)}))}\cdot(\cos\alpha_1,\cos\alpha_2,...,\cos\alpha_n)\\ =&\nabla f(x^{(0)}_1, x^{(0)}_2, ...,x^{(0)}_n)\cdot(\cos\alpha_1,\cos\alpha_2,...,\cos\alpha_n)\\ =&\text{grad} f(x^{(0)}_1, x^{(0)}_2, ...,x^{(0)}_n)\cdot(\cos\alpha_1,\cos\alpha_2,...,\cos\alpha_n)\\ =&|\nabla f(x^{(0)}_1, x^{(0)}_2, ...,x^{(0)}_n)|\text{ }|e_l|\cos \theta\\ =&|\nabla f(x^{(0)}_1, x^{(0)}_2, ...,x^{(0)}_n)|\cos \theta \end{aligned} =======∂l∂f(x1(0),x2(0),...,xn(0))ρ→0+limρf(x1(0)+ρcosα1,x2(0)+ρcosα2,...,xn(0)+ρcosαn)−f(x1(0),x2(0),...,xn(0))∂x1∂f(x(0))cosα1+∂x2∂f(x(0))cosα2+...+∂xn∂f(x(0))cosαn(∂x1∂f(x(0)),∂x2∂f(x(0)),...,∂xn∂f(x(0)))⋅(cosα1,cosα2,...,cosαn)∇f(x1(0),x2(0),...,xn(0))⋅(cosα1,cosα2,...,cosαn)gradf(x1(0),x2(0),...,xn(0))⋅(cosα1,cosα2,...,cosαn)∣∇f(x1(0),x2(0),...,xn(0))∣ ∣el∣cosθ∣∇f(x1(0),x2(0),...,xn(0))∣cosθ
其中,方向向量 e l e_l el的模为1, θ \theta θ为 ∇ f ( x ( 0 ) ) \nabla f(x^{(0)}) ∇f(x(0))与方向向量 l l l的夹角。
注意, ∇ f , grad f \nabla f,\text{grad}\space f ∇f,grad f均表示函数的梯度( ∇ \nabla ∇发音为nabla),且梯度是一个n维的向量,由函数对各自变量的偏导数构成。
我们记 ∇ f ( x 1 , x 2 , . . . , x n ) = ( ∂ f ∂ x 1 , ∂ f ∂ x 2 , . . . , ∂ f ∂ x n ) \nabla f(x_1, x_2, ...,x_n)=\displaystyle{(\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2},...,\frac{\partial f}{\partial x_n})} ∇f(x1,x2,...,xn)=(∂x1∂f,∂x2∂f,...,∂xn∂f)为函数的梯度。要特别注意理解一点:梯度是一个向量,这与坐标系的选取无关,不管是在直角坐标系或是球面坐标系或其他线性变换后的坐标系中,梯度都是一个向量。
由上述连等式中最后一个式子可知 ∣ ∇ f ( x 1 ( 0 ) , x 2 ( 0 ) , . . . , x n ( 0 ) ) ∣ cos θ |\nabla f(x^{(0)}_1, x^{(0)}_2, ...,x^{(0)}_n)|\cos \theta ∣∇f(x1(0),x2(0),...,xn(0))∣cosθ,表示方向导数在某点的数值由函数在该点梯度的模和梯度与方向的夹角确定。由于函数确定,在某点的偏导数确定,故某点的梯度确定。因此在给定函数、给定点的时候,方向导数的数值仅与夹角有关。当方向与梯度同向的时候 cos θ = 1 \cos\theta=1 cosθ=1,方向导数数值最大,函数在这个方向上非递减,且变化速率最大;当方向与梯度反向的时候 cos θ = − 1 \cos\theta=-1 cosθ=−1,方向导数的数值最小,函数在这个方向上非递增,且递减的速率最大;当所有方向的方向导数均为0的时候,梯度为0。这也说明了某点梯度的方向是函数在这个点变化速率最大的方向,如果想要函数最快增加,则沿着梯度方向移动;如果想要函数最快减小,则沿着梯度的反方向移动。
因此,在机器学习的过程中,评价分类器当前的错误程度,往往存在一个损失函数。梯度的应用参见我的另一篇博文机器学习(2) 感知机原理及实现。机器学习中,许多损失函数都是数值为正、希望将损失函数通过调整降低为0。我们以感知机为例,损失函数表示为误差点到用于分类的超平面距离之和,该损失函数 L ( w , b ) L(w,b) L(w,b)是一个数值为正、以 w , b w,b w,b为自变量的函数。为了使损失函数最快的降为0,我们选择沿着梯度的反方向移动自变量 w , b w,b w,b,这就是梯度在机器学习中的应用。
此外,为了防止梯度下降方法下降速度过快,导致局限在某个极小值而非全局最优值,我们也会使用学习速率 l e a r n i n g _ r a t e ∈ ( 0 , 1 ] learning\_rate\in(0,1] learning_rate∈(0,1]对梯度下降的速度加以限制。
梯度下降以优化损失函数的方法是一个通用方法,具体到每个训练的模型、不同的损失函数组成中,也会有不同的下降策略。例如在感知机模型中,误差函数是由所有的误差点构成的,则通过随机选择一个误差点的梯度,进行 w , b w,b w,b的调整,而非采用全局梯度对误差函数和参数进行调整。
参考文献:
《统计学习方法》,李航。
《大学数学——微积分》,李辉来,郭华。
《数学分析——第二册》,马富明,高文杰。