梯度下降计算器

目录

本文提供了一个线性回归模型 \(y = ax + b\) 的梯度下降计算器。计算得到的系数 \(a\) 和 \(b\) 将与使用基于线性最小二乘法的解析方法计算的结果进行比较。还将出于教育目的展示结果的比较。
假设我们有一组 \( n \) 个数据点 \( (x_i , y_i) \),我们需要通过最小化以下求和来找到形如 \(y = ax + b\) 的线性模型 \[ \Sigma^{n}_{i=1}(y_i - (a \cdot x_i + b))^2 \] 这是数据点与线性模型上的点之间距离的平方和,如下图所示。 线性模型 注意,在进行偏导数和其他解析计算时,使用平方和而不是绝对值是出于实际考虑。
现在我们将介绍两种计算线性模型中包含的系数 \( a \) 和 \( b \) 的方法。

梯度下降法

梯度下降法 是一种迭代优化算法,通过最小化定义的成本函数来找到参数 \(a\) 和 \(b\):

\[ J(a, b) = (1/2n) \Sigma^{n}_{i=1}(y_i - (a \cdot x_i + b))^2 \] 其偏导数在更新规则中需要,并由以下公式给出: \[ \dfrac{\partial J}{\partial a} = (1/n) \Sigma^{n}_{i=1}(- x_i (y_i - (a x_i + b))) \] \[ \dfrac{\partial J}{\partial b} = (1/n) \Sigma^{n}_{i=1}(-(y_i - (a x_i + b ))) \]

参数 \( a \) 和 \( b \) 的更新规则为:

\[ a_{k+1} = a_k - r \dfrac{\partial J}{\partial a}|_{a=a_k,b=b_k} = a_k - r (1/n) \Sigma^{n}_{i=1}(-x_i (y_i - (a_k * x_i + b_k))) \] \[ b_{k+1} = b_k - r \dfrac{\partial J}{\partial b}|_{a=a_k,b=b_k} = b_k - r (1/n) \Sigma^{n}_{i=1}(-(y_i - (a_k x_i + b_k))) \] 其中

线性最小二乘法

基于线性最小二乘法的解析方法使用从最小化平方误差和推导出的闭合公式。参数 \(a\) 和 \(b\) 的公式为:

\[ a = \dfrac{(n \cdot \displaystyle \Sigma^{n}_{i=1} (x_i \cdot y_i) - \Sigma^{n}_{i=1} x_i \cdot \Sigma^{n}_{i=1} y_i)}{ (n \cdot \Sigma^{n}_{i=1} (x_i^2) - (\Sigma^{n}_{i=1}x_i)^2) } \] \[ b = \dfrac{(\Sigma^{n}_{i=1}y_i - a \cdot \Sigma^{n}_{i=1}x_i) }{ n } \]

计算器的使用

该计算器的目的是研究学习率 \( r \) 以及系数 \( a \) 和 \( b \) 初始值对基于梯度下降算法(更新公式)迭代过程收敛性的影响。
输入点数 \( n \) 并点击“生成点”按钮,将随机生成 \( n \) 个点,然后为不同的 \( r \)、\( a_0 \) 和 \( b_0 \) 进行研究。
如果偏导数 \( \dfrac{\partial J}{\partial a} \) 和 \( \dfrac{\partial J}{\partial b} \) 接近零,则迭代过程收敛至解。
如果需要,还可以增加最大迭代次数,但计算可能需要一些时间。
数据点的散点图(红色)以及用于梯度下降法的 \( y = a x + b \) 图(蓝色)和用于线性最小二乘法的图(绿色)将显示出来。

输入点的数量: \( n = \)

迭代次数(最大迭代次数):
学习率 \( r \):
初始 \( a \) 值: \(a_0 = \)
初始 \( b \) 值: \(b_0 = \)

输出结果

\( \dfrac{\partial J}{\partial a} \) =

\( \dfrac{\partial J}{\partial b} \) =

梯度下降法的结果

\(a = \)

\(b = \)

线性最小二乘法的结果(使用上述 \( a \) 和 \( b \) 的公式)

\(a = \)

\(b = \)

成本函数 \( J(a, b) \) 的最小值:

图例: 蓝色 表示梯度下降法,绿色 表示线性最小二乘法。