前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >梯度下降算法

梯度下降算法

作者头像
DC童生
发布2018-04-28 11:41:01
7650
发布2018-04-28 11:41:01
举报
文章被收录于专栏:机器学习原理机器学习原理
  • 最优化算法的一种,解决无约束优化问题,用递归来逼近最小偏差的模型。 关于梯度的概念可参见以前的文章: 从方向导数到梯度
  • 梯度下降法迭代公式为:

image.png

x为需要求解的 值,s为梯度负方向,α为步长又叫学习率

缺点:靠近极小值的时候收敛速度比较慢;可能会”之字形”的下降;不太 适合处理比较复杂的非线性函数问题。

  • 实例: 用梯度下降的迭代算法,来逼近函数y=x**2的最值 代码如下:
代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

def f(x):
    return x**2
def h(x):
    return 2*x
X=[]
Y=[]

x=2
step=0.8
f_change=f(x)
f_current=f(x)
X.append(x)
Y.append(f_current)
while f_change>np.e**-10:
    x=x-step*h(x)
    tmp=f(x)
    f_change=np.abs(f_current-tmp)
    f_current=tmp
    X.append(x)
    Y.append(f_current)
print(X)
print(Y)
print(x,f_current)
fig = plt.figure()
a=np.arange(-2.15,2.15,0.05)
b=a**2
plt.plot(a,b)
plt.plot(X,Y,"ro--")
plt.show()

运行结果如下:

image.png

  • 假如目标函数有未知参数的情况,步骤如下:

image.png

  • 如何选择梯度下降的步长和初始值 不同的步长得表现:

image.png

image.png

  • 学习率的选择:学习率过大,表示每次迭代更新的时候变化比较大,有可能会跳过 最优解;学习率过小,表示每次迭代更新的时候变化比较小,就会导致迭代速度过 慢,很长时间都不能结
  • 算法初始参数值的选择:初始值不同,最终获得的最小值也有可能不同,因为梯度 下降法求解的是局部最优解,所以一般情况下,选择多次不同初始值运行算法,并 最终返回损失函数最小情况下的结果值
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.02.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档