机器学习--梯度下降法

机器学习--梯度下降法

  • 前言
  • 一、梯度下降法是什么?
  • 二、算法流程
  • 三、算法解释
  • 总结


提示:以下是本篇文章正文内容,下面案例可供参考

前言

梯度下降法(gradient descent)是求解无约束最优化问题的一种最常用的方法,具有实现简单的优点。梯度下降法是迭代算法,每一次需要求解目标函数的梯度向量。

一、梯度下降法是什么?

假设 f ( x ) f(x) f(x) R n R^n Rn上具有一阶连续偏导数的函数。要求解的无约束最优化问题是
m i n x ∈ R n f ( x ) \underset{x\in{R^n}}{min}f(x) xRnminf(x)
x ∗ x^* x为目标函数 f ( x ) f(x) f(x)的极小点。

梯度下降法是迭代算法。选取适当的初值 x ( 0 ) x^(0) x(0),不断迭代,更新x的值,进行目标函数的极小化,直到收敛。由于负梯度方向是使函数值下降最快的方向,在迭代的每一步时,以负梯度方向更新x的值,从而达到减少函数值的目的。

二、算法流程

首先,有一个目标函数,假设为 J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0,θ1)

我们的目的是获取函数的最小值,即 m i n θ 0 , θ 1 J ( θ 0 , θ 1 ) \underset{\theta_0,\theta_1}{min}J(\theta_0,\theta_1) θ0,θ1minJ(θ0,θ1)

算法概述:

  1. 初始化值, θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1
  2. 不断迭代上述2个参数的值,直到达到函数的最小值。

算法的具体的更新流程:
t e m p 0 = θ 0 − α ∂ ∂ θ 0 J ( θ 0 , θ 1 ) temp_0 = \theta_0-\alpha\frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1) temp0=θ0αθ0J(θ0,θ1)
t e m p 1 = θ 1 − α ∂ ∂ θ 1 J ( θ 0 , θ 1 ) temp_1 = \theta_1-\alpha\frac{\partial}{\partial\theta_1}J(\theta_0,\theta_1) temp1=θ1αθ1J(θ0,θ1)
θ 0 = t e m p 0 \theta_0=temp_0 θ0=temp0
θ 1 = t e m p 1 \theta_1=temp_1 θ1=temp1

算法的具体流程中,很重要的一点要保证同步更新(simultenous update),这样才能找到局部最优解,不然智能朝着一个反向进行。

α \alpha α为学习率,它的作用是控制梯度下降时,下降的步长。

三、算法解释

机器学习--梯度下降法_第1张图片
如图所示,假设这是一个单参数的函数,其中x*代表了函数的极小值点。

如果参数 x x x处于 x ∗ x^* x的左侧,例如在 x 1 x_1 x1时,此时的导数是负数( x 1 x_1 x1所在的切线的斜率是负数),那当我们更新的时候,我们就会执行
x = x − ∂ ∂ x f ( x ) x = x-\frac{\partial}{\partial x} f(x) x=xxf(x)
我们很容易发现,他会向右移动,也就是向最小点的方向开始移动。

那当参数 x x x处于 x ∗ x^* x的左侧,例如在 x 2 x_2 x2时,此时的导数是正数( x 1 x_1 x1所在的切线的斜率是正数),当我们更新的时候,他就会向左移动,也就是向最小点的方向开始移动。

经过很多次的迭代,在条件恰当的情况下,他就会到达最优点。

那么什么是条件恰当的情况下呢,什么时候条件不恰当呢

表哥我来了喔…(不恰当的条件

我们在前面提到了学习率, α \alpha α,它是用来控制步长的,他的大小,决定了我们更新迭代的步长。假如它很小,那么也没什么,就是更新的慢嘛,别人一步走的路,俺们10步,百步慢慢走,总能走到那去的,只要功夫深,铁杵磨成针。就是效率低
那假如它很大呢,我们假设一种情况,比如在上个图中,我们一开始在 x 1 x_1 x1点,那我们是不是要更新了,我们是往右更新是吧,但是步子太大了,我们直接更新到了 x 2 x_2 x2,直接跳过了最低点,那我们又要更新了是吧,这次我们又要往左更新了,哎,这次步子又很大,更新到了一开始的 x 1 x_1 x1附近,从此就开始了反复横跳了,就一直 x 1 , x 2 , x 1 , x 2 . . . x_1,x_2,x_1,x_2... x1,x2,x1,x2...,反正就是去不到最低点,这种学习率太大了就可能造成很难收敛

总结就是呢, α \alpha α太小效率太低, α \alpha α太大,可能会造成无法收敛,达到不了最低点。
步子太小不合适,步子太大容易扯着。

你以为已经结束了吗,还没有,表哥我来了喔…

我们前面提到了表达式
t e m p 0 = θ 0 − α ∂ ∂ θ 0 J ( θ 0 , θ 1 ) temp_0 = \theta_0-\alpha\frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1) temp0=θ0αθ0J(θ0,θ1)
t e m p 1 = θ 1 − α ∂ ∂ θ 1 J ( θ 0 , θ 1 ) temp_1 = \theta_1-\alpha\frac{\partial}{\partial\theta_1}J(\theta_0,\theta_1) temp1=θ1αθ1J(θ0,θ1)
大家考虑一下,当偏导数为0时,是不是就更新不动了,就一直在那个点了。但这个梯度下降法是不是第一步是选择初始化,也就是说初始化的不同,你最终的结果是会受到影响的,但是梯度下降法最终让你达到了一个最优点,但这个最优点是局部最优点,不一定是全局最优点。

也就是极值和最值的问题,你一个区域的极值问题代表不了整个函数的最值问题,所以如果你在梯度下降法的开始选择了不同区域的点,就可能达到不一样的极值,这个点也是梯度下降法中存在的典型问题。

当目标函数为凸函数时,梯度下降法的解是全局最优解。一般情况下,其解不确保是全局最优解。

总结

本文简单介绍了梯度下降法,在学习中还会陆续更新文章内容,如有错误的地方,敬请批评指正

你可能感兴趣的:(机器学习,python)