【机器学习导引】ch3-线性模型-2

时间:2024-10-10 13:24:45

优化理论:梯度下降(Gradient Descent)

  1. 梯度下降法的基本思路
    梯度下降法是一种优化算法,目的是找到函数 f ( x ) f(x) f(x) 的最小值。图中提到“如果能找到一个序列 x 0 , x 1 , x 2 , … x_0, x_1, x_2, \dots x0,x1,x2, ” ,使得每一步都满足: f ( x t + 1 ) < f ( x t ) f(x_{t+1}) < f(x_t) f(xt+1)<f(xt)
    这意味着每一步更新 x x x 的时候,函数 f ( x ) f(x) f(x) 的值都在下降,也就是朝着局部最小点的方向移动。
  2. 局部极小点问题
    当你每一步都保证 f ( x t + 1 ) < f ( x t ) f(x_{t+1}) < f(x_t) f(xt+1)<f(xt) ,最终会收敛到一个点,这个点就是局部极小点。
    为什么呢?
    这是因为梯度下降法的原理是沿着函数下降最快的方向(即负梯度方向)进行移动,而负梯度的方向是函数值减少最快的方向。因此,经过多次迭代,函数值会越来越小,最终到达一个局部极小点。这时,梯度接近 0 0 0,意味着不再有下降的空间,也就不能再继续下降了。
  3. 如果 f ( x ) f(x) f(x) 是凸函数,局部极小点就是全局最小点为什么呢?
    这是凸函数的一个重要性质:对于凸函数,局部极小点和全局极小点是重合的。换句话说,如果函数是凸的,那它只有一个最小值,且该最小值一定是全局最小值。梯度下降法在凸函数上的应用就显得特别有效,因为它能够确保找到的局部极小点就是全局最小点。

总结一下:

  • 如果每次更新都让函数值下降,你会找到一个局部极小点。
  • 如果函数是凸的,这个局部极小点就是全局最小点。

梯度下降法的核心就是通过不断迭代,使得目标函数的值逐渐减小,直到找到最小值或者停滞在某个点(即梯度为 0 0 0)。

1. 方向选择

  • 对于一元函数 f ( x ) f(x) f(x) 来说,变量 x x x 的变化有两个方向:
    • 向右(即 Δ x > 0 \Delta x > 0 Δx>0
    • 向左(即 Δ x < 0 \Delta x < 0 Δx<0

2. 泰勒展开式

  • 泰勒展开是用来近似函数的一种方法。对于函数 f ( x ) f(x) f(x) ,它可以展开为:

    f ( x + Δ x ) = f ( x ) + f ′ ( x ) Δ x + f ( 2 ) ( x ) 2 ! Δ x 2 + ⋯ + o ( Δ x n ) f(x + \Delta x) = f(x) + f'(x) \Delta x + \frac{f^{(2)}(x)}{2!} \Delta x^2 + \dots + o(\Delta x^n) f(x+Δx)=f(x)+f(x)Δx+2!f(2)(x)Δx2++o(Δxn)

    其中 f ′ ( x ) f'(x) f(x) f ( x ) f(x) f(x) 的一阶导数, f ( 2 ) ( x ) f^{(2)}(x) f(2)(x) 是二阶导数,依此类推。

  • Δ x \Delta x Δx 足够小时,泰勒展开式可以简化为:

    f ( x + Δ x ) ≈ f ( x ) + f ′ ( x ) Δ x f(x + \Delta x) \approx f(x) + f'(x) \Delta x f(x+Δx)f(x)+f(x)Δx

3. 如何让函数值下降?

  • 梯度下降的目标是让 f ( x + Δ x ) < f ( x ) f(x + \Delta x) < f(x) f(x+Δx)<f(x) ,即在每一步迭代中,让函数值下降。
  • 要实现这一点,需要保证 f ′ ( x ) Δ x < 0 f'(x) \Delta x < 0 f(x)Δx<0 ,也就是说,导数 f ′ ( x ) f'(x) f(x) Δ x \Delta x Δx 的乘积必须为负值。
    • 如果 f ′ ( x ) > 0 f'(x) > 0 f(x)>0 ,我们选择 Δ x < 0 \Delta x < 0 Δx<0
    • 如果 f ′ ( x ) < 0 f'(x) < 0 f(x)<0 ,我们选择 Δ x > 0 \Delta x > 0 Δx>0
  • f ( x ) f(x) f(x) 为多元函数时,梯度 ∇ f ( x ) \nabla f(x) f(x) 替代一元函数的导数,梯度的方向是函数增长最快的方向。因此,我们需要沿着梯度的相反方向移动,使得函数值下降。

4. 如何选择步长?

  • 我们定义 Δ x = − η ∇ f ( x ) \Delta x = -\eta \nabla f(x) Δx=ηf(x) ,其中 η \eta η 为步长,表示每次更新时移动的距离。步长 η \eta η 必须是一个较小的正数。

  • 这样,更新的方向就是沿着梯度的反方向,即函数值减少的方向。通过这个公式,可以保证每次迭代后函数值都会下降:

    Δ x ∇ f ( x ) = − η ( ∇ f ( x ) ) 2 < 0 \Delta x \nabla f(x) = -\eta (\nabla f(x))^2 < 0 Δxf(x)=η(f(x))2<0

5. 梯度下降的更新公式

  • 通过这个思路,最终的梯度下降法的更新公式就是:

    x t + 1 = x t − η ∇ f ( x t ) x_{t+1} = x_t - \eta \nabla f(x_t) xt+1=xtηf(xt)

    这表示在每次迭代时,用当前点的梯度乘以一个步长 η \eta η ,然后从当前点 x t x_t xt 减去这个值,得到下一个点 x t + 1 x_{t+1} xt+1

总结

  • 梯度下降的核心思想是通过沿着梯度的反方向移动,使得每一步迭代后的函数值都比前一步的值更小。
  • 使用泰勒展开式可以解释为什么小步移动能够使函数值下降。
  • 选择合适的步长 η \eta η 能够控制更新的幅度,确保算法稳定收敛。

算法原理

1. 线性回归模型的输出

图中提到,线性回归模型的输出可以表示为:

z = w T x + b z = w^T x + b z=wTx+b

其中:

  • z z z 是线性模型的输出值
  • w T w^T wT 是权重向量
  • x x x 是输入特征向量
  • b b b 是偏置

这个公式表示的是一个简单的线性组合。对于分类任务,我们希望输出值 y y y 0 0 0 1 1 1

2. 单位阶跃函数(Unit-Step Function)

理想情况下,我们希望通过线性回归的输出值 z z z 来决定 y y y 的取值。如果 z > 0 z > 0 z>0 ,那么 y = 1 y = 1 y=1 ,表示属于某一类;如果 z < 0 z < 0 z<0 ,那么 y = 0 y = 0 y=0 ,表示属于另一类。这就是 单位阶跃函数 的定义:

y = { 1 , z > 0 0.5 , z = 0 0 , z < 0 y = \begin{cases} 1, & z > 0 \\ 0.5, & z = 0 \\ 0, & z < 0 \end{cases} y=