计算机在数值计算的时候主要是使用梯度下降法来计算函数极值的,之前一直认为这个过程需要用matlab或者python,c等语言编程来做,不成想在一本书上发现使用Excel就可以简单的演示梯度下降法的过程,而且由于不用写代码,每一步操作都需要人工设定,对梯度下降法的整个过程理解的也会比较细腻.
下面以求函数
极小值为例,来演示这个过程。
Excel表格如下,excel支持基础的数学计算和常用函数操作,这里面的数据并非是手动输入的,每除了初始值之外,每一个数据都是利用excel内建的公式驱动的.

我们以第一行为例:
| No | 位置 | 梯度 | 位移向量 | 函数值 | |||
| i | xi | yi | ∂z/∂x | ∂z/∂y | ⊿x | ⊿y | z |
| 0 | 3.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.
递推公式如下:
根据公式,第二行为:
| 1 | 2.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实现梯度下降法:直观理解与数值优化

本文通过Excel演示了如何使用梯度下降法求解三维二次函数极小值的过程,展示了在不编写代码的情况下,利用Excel内置公式进行数值计算的步骤。通过调整学习率,观察收敛速度,解释了学习率对收敛效果的影响,并通过图表直观呈现了迭代过程。最终,优化后的学习率使得在第29次迭代时接近极小值点。
3988

被折叠的 条评论
为什么被折叠?



