用Excel感受梯度下降的数据变化

梯度下降法是神经网络计算的基础,也是神经网络里面最有力的数学武器。为了更好地感受数据的变化,下面对函数 z = x 2 + y 2 z=x^2+y^2 使用梯度下降法求出函数x和y的最小值。
其实就是找到某个特定函数的最小值

首先求出梯度 ( z x z y ) = ( 2 x 2 y ) (\frac{\partial z}{\partial x},\frac{\partial z}{\partial y}) = (2x,2y)

1. 初始设定

随便给出初始位置 ( x i , y i ) ( i = 0 ) (x_i,y_i)(i=0) 与学习率 η \eta
图 1.1

2. 计算位移量

( Δ x i Δ y i ) = η ( z x z y ) = η ( 2 x i 2 y i ) (\Delta x_i,\Delta y_i) = -\eta(\frac{\partial z}{\partial x},\frac{\partial z}{\partial y}) = -\eta(2x_i,2y_i) ,这个位移量可以看作是通过小步长来找出局部最小值。
图 1.2

3. 更新位置

当 i = 0 时,将当前位置 ( x 0 y 0 ) = ( 3.00 2.00 ) (x_{0},y_{0}) = (3.00,2.00) 与当前计算得到的位移向量(-0.60,-0.40)相加得到(2.40,1.60)
( x i + 1 , y i + 1 ) = ( x i , y i ) + ( Δ x i Δ y i ) (x_{i+1},y_{i+1})=(x_{i},y_{i})+(\Delta x_i,\Delta y_i)
图 1.3

4. 反复执行2-3的操作

反复执行2-3的操作30次后得出坐标 ( x 30 , y 30 ) (x_{30},y_{30}) 的值。这个2-3反复过程地按照负梯度的倍数输入到 z z 函数的过程被称为梯度下降。
图 1.4
使得函数 z z 在点(0,0)处取得最小值 0

5. 关于学习率 η \eta 与步长

η \eta 看作步长实际上是不正确的,梯度下降法的步长是不均匀的,梯度在不同的位置大小不同。梯度下降让函数向局部最小值收敛,正如图1.5沿着山谷下降的过程一样。此处列举的山谷下降过程与上述的图1.4坐标数据是不同的,实际情况下人工神经网络的代价函数是非常复杂的。
假设特定函数的山谷下降过程 1.5
如果将上面第二步的式子

变形为


将梯度修改为单位向量,就可以将 η \eta 看作步长了。
以上公式的定义都是由其可微性推导出来的,在微分学中,

在这里面要把 A和B分别看作为


或者

其实就是用式子 A d x + B d y Adx+Bdy 的线性增量近似值去逼近 Δ z \Delta z ,而 Δ z \Delta z 的真实增量是式子

注意 d z ( x 0 , y 0 ) dz|_{(x_0,y_0)} 只是逼近 Δ z \Delta z ,并不能说它们等价,会存在误差

这样就能推导出

Δ x , Δ y \Delta x,\Delta y 分别趋近于0时,取极限

当分子比分母更高阶无穷小时,等式为0。由于我要求出负梯度的值,现在我把式子变成

由变量 η \eta 的取值决定函数要迈出步子有多大,这样把梯度修正为单位向量也就能将 η \eta 看作步长了。

以上列举的内容只是为了以后更好地理解代价函数对权重、偏置的微小变化有多敏感。

Δ x Δ y \Delta x,\Delta y 看作是函数 z z 在某点处的瞬时变化率,而 z x \frac{\partial z}{\partial x} 理解为代价函数 z z Δ x \Delta x 微小变化的敏感度,或者换句话说,求 z z x i x_i 的偏导数,可以把 z x \frac{\partial z}{\partial x} 当做改变 Δ x \Delta x z z 函数值造成的变化,这两个数的比值,从概念上来说就是 Δ x \Delta x 的微小变化会导致 z z 函数产生一些变化,如果这个 z z 函数是一个很复杂的复合函数,那么它也会像神经网络单元一样导致隐含层产生微小的变化,最终影响到代价函数值。上面的描述对 z y \frac{\partial z}{\partial y} 同理。

写于2020.03.01 18:49:24