优化理论:梯度下降(Gradient Descent)
-
梯度下降法的基本思路
梯度下降法是一种优化算法,目的是找到函数 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) 的值都在下降,也就是朝着局部最小点的方向移动。 -
局部极小点问题
当你每一步都保证 f ( x t + 1 ) < f ( x t ) f(x_{t+1}) < f(x_t) f(xt+1)<f(xt) ,最终会收敛到一个点,这个点就是局部极小点。
为什么呢?
这是因为梯度下降法的原理是沿着函数下降最快的方向(即负梯度方向)进行移动,而负梯度的方向是函数值减少最快的方向。因此,经过多次迭代,函数值会越来越小,最终到达一个局部极小点。这时,梯度接近 0 0 0,意味着不再有下降的空间,也就不能再继续下降了。 -
如果
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 Δx∇f(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=