题解|SGDM(带动量的随机梯度下降)

SGDM(带动量的随机梯度下降)

https://www.nowcoder.com/practice/c82a700515164af5867c11e09256aed3?tpId=377&tags=&title=&difficulty=0&judgeStatus=0&rp=0&sourceUrl=%2Fexam%2Foj

SGDM(带冲量的随机梯度下降)是SGD的一种改进,在SGD的基础上增加了冲量,可以加速收敛。 简单点说,就是每次更新参数时,不仅考虑当前的梯度,还考虑之前的梯度。使用动量代替梯度。 梯度下降以及批量梯度下降的原理不再赘述,这里只给出SGDM的公式:

其中, 是第 次迭代时的参数, 是学习率, 是第 次迭代时的梯度, 是冲量系数。

代码实现:

def sgdm_linear_regression(X, y, learning_rate, momentum_decay, epochs):
    m, n = X.shape
    theta = np.zeros((n, 1))
    v = np.zeros((n, 1))
    for _ in range(epochs):
        y_pred = np.dot(X, theta)  # 计算预测值
        error = y_pred - y  # 计算误差
        gradient = (1 / m) * np.dot(X.T, error)  # 计算梯度
        v = momentum_decay * v + learning_rate * gradient  # 更新动量
        theta -= v  # 更新参数
    return np.round(theta.flatten(), 2).tolist()
全部评论
该题解所给的theta更新公式不正确,会导致动量机制失效,没有历史梯度积累。应修证为以下: 动量变量 v 用于累积过去的梯度方向,并在更新时加入当前梯度。 更新公式: v_t=βv_{t−1}+η∇J(θ) θ=θ−v_t ​其中,β 是动量衰减系数(momentum_decay),η 是学习率(learning_rate)。 优点: 动量能加速收敛,减少震荡。 符合标准的 SGDM(Stochastic Gradient Descent with Momentum) 算法。
点赞 回复 分享
发布于 07-21 22:40 北京

相关推荐

09-13 08:41
服装/纺织设计
那一天的Java_J...:你第一次参加面试吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务