【问题标题】:Gradient Descent Algorithm, Gradient stepping function梯度下降算法,梯度步进函数
【发布时间】:2018-07-14 03:23:51
【问题描述】:

我正在尝试理解梯度下降算法。

这里的代码应该选择一个更优化的最佳拟合线,给定另一条最佳拟合线。该函数将当前最佳拟合线的斜率和 y 截距作为输入,以及一个名为“点”的二维数据集和一个 learningRate。这是我正在使用的代码:

def step_gradient(b_current, m_current, points, learningRate):
    b_gradient = 0                                                      #Initialize b_gradient to 0
    m_gradient = 0                                                      #Initialize m_gradient to 0
    N = float(len(points))                                              #Let N be the number of data points
    for i in range(0, len(points)):                                     #Iterate through dataset "Points"
        x = points[i,0]
        y = points[i,1]
        b_gradient += -(2/N) * (y - ((m_current * x) + b_current))      #gradient is calculated as the derivative
        m_gradient += -(2/N) * x * (y - ((m_current * x) + b_current))
    new_b = b_current - (learningRate * b_gradient)
    new_m = m_current - (learningRate * m_gradient)
    return[new_b, new_m]

但是我不明白 for 循环内部发生了什么。

我知道 for 循环的前两行将迭代地将 x 和 y 分配给名为“points”的数据集中的下一个数据点。

我不明白 b_gradient 和 m_gradient 是如何计算的。

据我了解,b_gradient 是数据集中每个点关于 b 的所有偏导数之和。但是,我真正的问题是 line:

b_gradient += -(2/N) * (y - ((m_current * x) + b_current))

计算关于 b 的偏导数?

-(2/N) 是干什么用的??

谁能解释一下这行代码到底是如何表示这个数据集中一个点相对于 b 的偏导数?

m_gradient 也有同样的困惑。

【问题讨论】:

    标签: python machine-learning artificial-intelligence gradient-descent


    【解决方案1】:

    b_gradient 和 m_gradient 是成本/误差函数关于 b/m 的偏导数。这就是为什么存在 -2/N 的原因,因为 1/N 是成本/误差函数的一部分,并且在计算导数后乘以 2。

    如果您不懂微积分,那么您现在只需要学习一下。如果你这样做了,那么它很容易推导出来。

    【讨论】:

    • 哦,这很有意义。我确实知道微积分,你说得对,我只是没有在成本函数的样子之间建立联系。
    • 记住,梯度下降只是一种最小化成本函数的算法。如果您可以看到哪个方向会使您的成本函数最“下坡”(导数),您可以轻松地将其最小化为线性回归等简单的事情。
    【解决方案2】:

    您系统中每个数据点 (xi, yi) 对成本(损失)的贡献是 .

    `Li = (1/N) * (yi - (m*xi + b))**2
    

    总成本将是所有Li-s 的总和。您有 N 数据点,(1/N) 是一个标准化术语,因此即使您更改 N,您的成本值也是一致的。

    现在Li wrt m 的偏微分给出

    Li_m = (1/N) *2 * (yi - (m*xi + b)) * -xi
         =  -(2/N) * xi * (yi - (m*xi + b))
    

    Li wrt b 的偏微分给出

    Li_b = (1/N) * 2 * (yi -(m*xi + b)) * -1
         =  (-2/N) * (yi - (m*xi + b))
    

    【讨论】:

      猜你喜欢
      • 2016-06-13
      • 2021-12-18
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 2017-07-17
      • 2019-06-24
      • 1970-01-01
      相关资源
      最近更新 更多