梯度下降算法

  • 最优化算法的一种,解决无约束优化问题,用递归来逼近最小偏差的模型。 关于梯度的概念可参见以前的文章: 从方向导数到梯度
  • 梯度下降法迭代公式为:

image.png

x为需要求解的 值,s为梯度负方向,α为步长又叫学习率 缺点:靠近极小值的时候收敛速度比较慢;可能会”之字形”的下降;不太 适合处理比较复杂的非线性函数问题。

  • 实例: 用梯度下降的迭代算法,来逼近函数y=x**2的最值 代码如下:
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

  • 学习率的选择:学习率过大,表示每次迭代更新的时候变化比较大,有可能会跳过 最优解;学习率过小,表示每次迭代更新的时候变化比较小,就会导致迭代速度过 慢,很长时间都不能结
  • 算法初始参数值的选择:初始值不同,最终获得的最小值也有可能不同,因为梯度 下降法求解的是局部最优解,所以一般情况下,选择多次不同初始值运行算法,并 最终返回损失函数最小情况下的结果值

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏梦里茶室

读论文系列:Object Detection ICCV2015 Fast RCNN

Fast RCNN是对RCNN的性能优化版本,在VGG16上,Fast R-CNN训练速度是RCNN的9倍, 测试速度是RCNN213倍;训练速度是SPP-ne...

40860
来自专栏机器学习、深度学习

跟踪算法基准--Tracking the Trackers: An Analysis of the State of the Art in Multiple Object Tracking

Tracking the Trackers: An Analysis of the State of the Art in Multiple Object Tr...

31060
来自专栏杂七杂八

线性分类器损失函数与最优化(上)

使用正则化一方面的优化参数,另一方面是权衡训练损失和用于测试集的泛化损失。尽管有时候会使训练集上的效果变差,甚至是分类错误,但是对于测试集的训练效果是有很大效果...

34620
来自专栏AI深度学习求索

深度学习基础学习 | 为什么要进行特征提取

在计算机中,图片以有序的多维矩阵进行存储,按颜色分为灰度图片用二维数组存储图片的像素值,和彩色图片用三维数组存储图片的三个通道颜色的像素值。

33720
来自专栏深度学习与计算机视觉

学习SVM(四) 理解SVM中的支持向量(Support Vector)

学习SVM(一) SVM模型训练与分类的OpenCV实现 学习SVM(二) 如何理解支持向量机的最大分类间隔 学习SVM(三)理解SVM中的对偶问题 ...

25980
来自专栏贾志刚-OpenCV学堂

理解CNN卷积层与池化层计算

深度学习中CNN网络是核心,对CNN网络来说卷积层与池化层的计算至关重要,不同的步长、填充方式、卷积核大小、池化层策略等都会对最终输出模型与参数、计算复杂度产生...

26410
来自专栏计算机视觉战队

详聊CNN的精髓

现在的深度学习发展速度已经超出每个人的想象,很大一部分人只是觉得我用他人的框架去实现自己的目的,并且效果很好就可以了,这也是现在一大部分的一个瓶颈。曾经有一个老...

37550
来自专栏计算机视觉

空间金字塔池化Spatial pyramid pooling net,用于语义分割

这篇文章属于小笔记类型,了解空间金字塔的作用就好。 金字塔池化层有如下的三个优点,第一:他可以解决输入图片大小不一造成的缺陷。第二:由于把一个feature m...

38960
来自专栏Pytorch实践

Pytorch实现CNN时间序列预测

本公众号曾经推出过PyTorch实现的LSTM时间序列预测,并开源了其源码。细心的童鞋可能发现了,我之前使用的LSTM是生成式模型,而不是使用判别式进行预测。换...

1.1K70
来自专栏应兆康的专栏

AdaBoost

8110

扫码关注云+社区

领取腾讯云代金券