热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python语言描述随机梯度下降法

这篇文章主要介绍了Python语言描述随机梯度下降法,具有一定借鉴价值,需要的朋友可以参考下

1.梯度下降

1)什么是梯度下降?

因为梯度下降是一种思想,没有严格的定义,所以用一个比喻来解释什么是梯度下降。

简单来说,梯度下降就是从山顶找一条最短的路走到山脚最低的地方。但是因为选择方向的原因,我们找到的的最低点可能不是真正的最低点。如图所示,黑线标注的路线所指的方向并不是真正的地方。

既然是选择一个方向下山,那么这个方向怎么选?每次该怎么走?

先说选方向,在算法中是以随机方式给出的,这也是造成有时候走不到真正最低点的原因。

如果选定了方向,以后每走一步,都是选择最陡的方向,直到最低点。

总结起来就一句话:随机选择一个方向,然后每次迈步都选择最陡的方向,直到这个方向上能达到的最低点。

2)梯度下降是用来做什么的?

在机器学习算法中,有时候需要对原始的模型构建损失函数,然后通过优化算法对损失函数进行优化,以便寻找到最优的参数,使得损失函数的值最小。而在求解机器学习参数的优化算法中,使用较多的就是基于梯度下降的优化算法(GradientDescent,GD)。

3)优缺点

优点:效率。在梯度下降法的求解过程中,只需求解损失函数的一阶导数,计算的代价比较小,可以在很多大规模数据集上应用

缺点:求解的是局部最优值,即由于方向选择的问题,得到的结果不一定是全局最优

步长选择,过小使得函数收敛速度慢,过大又容易找不到最优解。

2.梯度下降的变形形式

根据处理的训练数据的不同,主要有以下三种形式:

1)批量梯度下降法BGD(BatchGradientDescent):

针对的是整个数据集,通过对所有的样本的计算来求解梯度的方向。

优点:全局最优解;易于并行实现;

缺点:当样本数据很多时,计算量开销大,计算速度慢

2)小批量梯度下降法MBGD(mini-batchGradientDescent)

把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性

优点:减少了计算的开销量,降低了随机性

3)随机梯度下降法SGD(stochasticgradientdescent)

每个数据都计算算一下损失函数,然后求梯度更新参数。

优点:计算速度快

缺点:收敛性能不好

总结:SGD可以看作是MBGD的一个特例,及batch_size=1的情况。在深度学习及机器学习中,基本上都是使用的MBGD算法。

3.随机梯度下降

随机梯度下降(SGD)是一种简单但非常有效的方法,多用用于支持向量机、逻辑回归等凸损失函数下的线性分类器的学习。并且SGD已成功应用于文本分类和自然语言处理中经常遇到的大规模和稀疏机器学习问题。

SGD既可以用于分类计算,也可以用于回归计算。

1)分类

a)核心函数

sklearn.linear_model.SGDClassifier

b)主要参数(详细参数)

loss:指定损失函数。可选值:‘hinge'(默认),‘log',‘modified_huber',‘squared_hinge',‘perceptron',

"hinge":线性SVM

"log":逻辑回归

"modified_huber":平滑损失,基于异常值容忍和概率估计

"squared_hinge":带有二次惩罚的线性SVM

"perceptron":带有线性损失的感知器

alpha:惩罚系数

c)示例代码及详细解释

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import SGDClassifier
from sklearn.datasets.samples_generator import make_blobs

##生产数据
X, Y = make_blobs(n_samples=50, centers=2, random_state=0, cluster_std=0.60)

##训练数据
clf = SGDClassifier(loss="hinge", alpha=0.01)
clf.fit(X, Y)

## 绘图
xx = np.linspace(-1, 5, 10)
yy = np.linspace(-1, 5, 10)

##生成二维矩阵
X1, X2 = np.meshgrid(xx, yy)
##生产一个与X1相同形状的矩阵
Z = np.empty(X1.shape)
##np.ndenumerate 返回矩阵中每个数的值及其索引
for (i, j), val in np.ndenumerate(X1):
  x1 = val
  x2 = X2[i, j]
  p = clf.decision_function([[x1, x2]]) ##样本到超平面的距离
  Z[i, j] = p[0]
levels = [-1.0, 0.0, 1.0]
linestyles = ['dashed', 'solid', 'dashed']
colors = 'k'
##绘制等高线:Z分别等于levels
plt.contour(X1, X2, Z, levels, colors=colors, linestyles=linestyles)
##画数据点
plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired,
      edgecolor='black', s=20)
plt.axis('tight')
plt.show()

d)结果图

2)回归

SGDRegressor非常适合回归问题具有大量训练样本(>10000),对于其他的问题,建议使用的Ridge,Lasso或ElasticNet。

a)核心函数

sklearn.linear_model.SGDRegressor

b)主要参数(详细参数)

loss:指定损失函数。可选值‘squared_loss'(默认),‘huber',‘epsilon_insensitive',‘squared_epsilon_insensitive'

说明:此参数的翻译不是特别准确,请参考官方文档。

"squared_loss":采用普通最小二乘法

"huber":使用改进的普通最小二乘法,修正异常值

"epsilon_insensitive":忽略小于epsilon的错误

"squared_epsilon_insensitive":

alpha:惩罚系数

c)示例代码

因为使用方式与其他线性回归方式类似,所以这里只举个简单的例子:

import numpy as np
from sklearn import linear_model
n_samples, n_features = 10, 5
np.random.seed(0)
y = np.random.randn(n_samples)
X = np.random.randn(n_samples, n_features)
clf = linear_model.SGDRegressor()
clf.fit(X, y)

总结

以上就是本文关于Python语言描述随机梯度下降法的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!


推荐阅读
  • 【跨越鸿沟】学术界与工业界的GAP有多大?
    来自:美团技术团队2020年7月31日,由中国图象图形学学会主办、视觉大数据专委会承办,北京智源人工智能研究院和美团协办的ECCV2020 ... [详细]
  • 「爆干7天7夜」入门AI人工智能学习路线一条龙,真的不能再透彻了
    前言应广大粉丝要求,今天迪迦来和大家讲解一下如何去入门人工智能,也算是迪迦对自己学习人工智能这么多年的一个总结吧,本条学习路线并不会那么 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 人工智能推理能力与假设检验
    最近Google的Deepmind开始研究如何让AI做数学题。这个问题的提出非常有启发,逻辑推理,发现新知识的能力应该是强人工智能出现自我意识之前最需要发展的能力。深度学习目前可以 ... [详细]
  • 干货 | 携程AI推理性能的自动化优化实践
    作者简介携程度假AI研发团队致力于为携程旅游事业部提供丰富的AI技术产品,其中性能优化组为AI模型提供全方位的优化方案,提升推理性能降低成本࿰ ... [详细]
  • 深度学习与神经网络——邱锡鹏
    深度学习与神经网络——邱锡鹏-一、绪论人工智能的一个子领域神经网络:一种以(人工))神经元为基本单元的模型深度学习:一类机器学习问题,主要解决贡献度分配问题知识结构:路线图:顶 ... [详细]
  • 必备核心算法神经网络通俗讲解
    深度学习传统算法VS人工智能算法传统算法:都是人为去计算人工智能算法:部分人为需要做的事情交由机器去做【把更多的问题简单化】IT的发展比较高端的就是A ... [详细]
  • 聊聊 中国人工智能科技产业 区域竞争力分析及趋势
    原文链接:聊聊中国人工智能科技产业区域竞争力分析及趋势最近看了一个关于国内AI的报告《中国新一代人工智能科技产业区域竞争力评价指数(2021ÿ ... [详细]
  • 作为机器学习最重要的一个分支,近年来深度学习(DeepLearning)发展势头迅猛,借助庞大的数据 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
author-avatar
吴碧菱乐其怡伶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有