穆穆青风至 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日
  • 展开全部

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改