计算机在数值计算的时候主要是使用梯度下降法来计算函数极值的,之前一直认为这个过程需要用matlab或者python,c等语言编程来做,不成想在一本书上发现使用Excel就可以简单的演示梯度下降法的过程,而且由于不用写代码,每一步操作都需要人工设定,对梯度下降法的整个过程理解的也会比较细腻.

下面以求函数

极小值为例,来演示这个过程。

Excel表格如下,excel支持基础的数学计算和常用函数操作,这里面的数据并非是手动输入的,每除了初始值之外,每一个数据都是利用excel内建的公式驱动的.

我们以第一行为例:

No位置梯度位移向量函数值
ixiyi∂z/∂x∂z/∂y⊿x⊿yz
03.00 2.00 6.00 4.00 -0.06 -0.04 13.00 

开始梯度下降计算的初始位置坐标是(3.00,2.00),这是整个表中为数不多的几个不是公式驱动的数据,其它的还有学习率以及函数本身。

计算逻辑上,首先根据上图第0行的xi,yi,计算偏导得到梯度6,4,然后再乘以负学习率,得到下一行xi,yi的变化量。这里分别为-0.04和-0.04.

 递推公式如下:

根据公式,第二行为:

12.94 1.96 5.88 3.92 -0.06 -0.04 12.49 

由此迭代计算,得到整个表格,通过图标来表达整个过程如下:

可以看到函数值逐渐变小,但是貌似收敛有些慢,到最后一次(31次)迭代,仍然没有收敛到极小值坐标(0,0),仅仅到坐标(1.64,1.09)

我们调整学习率到0.1看是否会改善,得到的每次数据如下所示:

这里再次强调以下,虽然上面两张表格数据看起来完全不同,但从第一张表格到第二章表格,我只改变了学习率,其它的变化都是excel背后的公式驱动的。可以看到在第29行的时候,已经得到了极小值点,这里对应的梯度很小很小(0.01,0.01,之所以没有达到零,怀疑是精度导致,也就是xi/yi实际的值并不为0,显示在excel上是舍入后的值).

这是的收敛情况可以从下图中看出,调整学习率后,改善很多。

附,三维二次函数的图像和梯度分布:


结束!

更多推荐

用Excel体验梯度下降法计算函数极值