穆穆青风至 2022-10-11 15:24 采纳率: 97.4%
浏览 32
已结题

梯度下降的实现,如找二次函数的极小值点


learn=0.1
# y=x**2-4*x+7
x=10
for epoch in range(20):
    gradient=2*x-4
    x-=learn*gradient
    print(x)

如找出y函数的最小值点,重点是关于x的更新,这里应该是x=x-learn*gradien,但是如果翻看别人的梯度下降的实现,写的都是x+=啥,如下这个,其它地方也是基本x+=,咋确定到底x+=啥,还是x-=啥呢

user_vector += np.multiply(learning_rate, (loss * item_vector - alpha * user_vector))    # user_vector 不断更新(根据梯度下降公式)
item_vector += np.multiply(learning_rate, (loss * user_vector - alpha * item_vector))    # item_vector 不断更新(根据梯度下降公式)

以下是新加的代码块

# (u*i-rating)**2-1/2*REG*(u*u+i*i)
for epoch in range(EPOCHS):  # 迭代一万次
    for uid, iid, real_rating in dataset.itertuples(index=False):
        u_vector = user_matrix[uid]
        i_vector = item_matrix[iid]
        error = np.float32(real_rating - np.dot(u_vector, i_vector))  # 真实值和预测值的偏差
        # 更新梯度
        u_vector += ALPHA * (error * i_vector - REG * u_vector)  # 注意这是一个numpy对象
        i_vector += ALPHA * (error * u_vector - REG * i_vector)  # 这也是一个Numpy对象
        user_matrix[uid] = u_vector
        item_matrix[iid] = i_vector

  • 写回答

1条回答 默认 最新

  • ·星辰大海 2022-10-11 16:40
    关注

    都一样,加法就是减法。
    他们一般用负梯度方向,因为国际上凸函数指的是往下凸的那种,所以一般常用负梯度方向,这样➕的话就相当于➖

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月28日
  • 已采纳回答 10月20日
  • 修改了问题 10月17日
  • 修改了问题 10月15日
  • 展开全部

悬赏问题

  • ¥40 如果update 一个列名为参数的value
  • ¥15 基于51单片机的水位检测系统设计中LCD1602一直不显示
  • ¥15 OCS2安装出现问题,请大家给点意见
  • ¥15 ros小车启动launch文件报错
  • ¥15 vs2015到期想登陆但是登陆不上
  • ¥15 IPQ5018制作烧录固件,boot运行失败(操作系统-linux)(相关搜索:操作系统)(相关搜索:操作系统)
  • ¥20 icefall在librispeech基础上加入个人数据集
  • ¥30 keepalive高可用故障运维配置询问
  • ¥15 求帮助!国家电网内网u盘突然识别不出来了。
  • ¥15 matlab语音变速变调同时实现