梯度下降法

大多数机器学习或者深度学习算法都涉及某种形式的优化。 优化指的是改变 特征x以最小化或最大化某个函数 f(x)  的任务。 我们通常以最小化 f(x) 指代大多数最优化问题。 最大化可经由最小化算法最小化 ​​​​​​​-f(x) 来实现。

我们把要最小化或最大化的函数称为目标函数或准则。 当我们对其进行最小化时,我们也把它称为损失函数或误差函数

下面,我们假设一个损失函数为 ,其中 然后要使得最小化它。

梯度下降:梯度的方向是函数在给定点上升最快的方向,那么梯度的反方向就是函数在给定点下降最快的方向,因此我们在做梯度下降的时候,应该是沿着梯度的反方向进行权重的更新,可以有效的找到全局的最优解。这个参数的更新过程可以描述为:

随机梯度下降法

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

SGD算法是从样本中随机抽出一组,训练后按梯度更新一次,然后再抽取一组,再更新一次,在样本量及其大的情况下,可能不用训练完所有的样本就可以获得一个损失值在可接受范围之内的模型了。(重点:每次迭代使用一组样本。)
为什么叫随机梯度下降算法呢?这里的随机是指每次迭代过程中,样本都要被随机打乱,这个也很容易理解,打乱是有效减小样本之间造成的参数更新抵消问题。

对于权值的更新不再通过遍历全部的数据集,而是选择其中的一个样本即可。一般来说其步长的选择比梯度下降法的步长要小一点,因为梯度下降法使用的 是准确梯度,所以它可以朝着全局最优解(当问题为凸问题时)较大幅度的迭代下去,但是随机梯度法不行,因为它使用的是 近似梯度,或者对于全局来说有时候它走的也许根本不是梯度下降的方向,故而它走的比较缓,同样这样带来的好处就是相比于梯度下降法,它不是那么容易陷入到局部最优解中去。
更新公式:

分类

随机梯度下降算法通常还有三种不同的应用方式,它们分别是SGD、Batch-SGD、Mini-Batch SGD
1.SGD是最基本的随机梯度下降,它是指每次参数更新只使用一个样本,这样可能导致更新较慢;
2.Batch-SGD是批随机梯度下降,它是指每次参数更新使用所有样本,即把所有样本都代入计算一遍,然后取它们的参数更新均值,来对参数进行一次性更新,这种更新方式较为粗糙;
3.Mini-Batch-SGD是小批量随机梯度下降,它是指每次参数更新使用一小批样本,这批样本的数量通常可以采取trial-and-error的方法来确定,这种方法被证明可以有效加快训练速度

优点:
(1)由于不是在全部训练数据上的损失函数,而是在每轮迭代中,随机优化某一条训练数据           上的损失函数,这样每一轮参数的更新速度大大加快

缺点:

(1)准确度下降。由于即使在目标函数为强凸函数的情况下,SGD仍旧无法做到线性收敛。
(2)可能会收敛到局部最优,由于单个样本并不能代表全体样本的趋势。
(3)不易于并行实现

SGD的python实现

def SGD_LR(data_x, data_y, alpha=0.1, maxepochs=10000,epsilon=1e-4):xMat = np.mat(data_x)yMat = np.mat(data_y)m, n = xMat.shapeweights = np.ones((n, 1))  # 模型参数epochs_count = 0loss_list = []epochs_list = []while epochs_count < maxepochs:rand_i = np.random.randint(m)  # 随机取一个样本loss = cost(xMat,weights,yMat) #前一次迭代的损失值hypothesis = sigmoid(np.dot(xMat[rand_i,:],weights)) #预测值error = hypothesis -yMat[rand_i,:] #预测值与实际值误差grad = np.dot(xMat[rand_i,:].T,error) #损失函数的梯度weights = weights - alpha*grad #参数更新loss_new = cost(xMat,weights,yMat)#当前迭代的损失值print(loss_new)if abs(loss_new-loss)<epsilon:breakloss_list.append(loss_new)epochs_list.append(epochs_count)epochs_count += 1print('迭代到第{}次,结束迭代!'.format(epochs_count))plt.plot(epochs_list,loss_list)plt.xlabel('epochs')plt.ylabel('loss')plt.show()return weights

随机梯度下降法(stochastic gradient descent,SGD)相关推荐

  1. 【转载】深度学习数学基础(二)~随机梯度下降(Stochastic Gradient Descent, SGD)

    Source: 作者:Evan 链接:https://www.zhihu.com/question/264189719/answer/291167114 来源:知乎 著作权归作者所有.商业转载请联系作 ...

  2. python实现次梯度(subgradient)和近端梯度下降法 (proximal gradient descent)方法求解L1正则化

    l1范数最小化 考虑函数,显然其在零点不可微,其对应的的次微分为: 注意,的取值为一个区间. 两个重要定理: 1)一个凸函数,当且仅当,为全局最小值,即 为最小值点  : 2)为函数(不一定是凸函数) ...

  3. ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)

    引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等,主要学习资料来自网上的免费课程和一些经典书籍,免费课 ...

  4. [机器学习] ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)

    本文转自:https://blog.csdn.net/walilk/article/details/50978864 引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记, ...

  5. 近端梯度下降法 (proximal gradient descent)

    本文参考了知乎的文章 机器学习 | 近端梯度下降法 (proximal gradient descent), 写的非常棒,但感觉有些微的赘余, 因此以这篇博客,希望更精简地介绍 近端梯度下降法 这种略 ...

  6. 50行代码,带你理解梯度下降法(Gradient Descent Method)

    梯度下降法是一种常见的优化算法,在机器学习中应用很广泛.本文从代码的角度,带你理解梯度下降法. 优化算法 优化指的是改变x以最小化或最大化某个函数 f(x) 的任务.通常以最小化 f(x) 指代大多数 ...

  7. LASSO近端梯度下降法Proximal Gradient Descent公式推导及代码

    文章目录 LASSO by Proximal Gradient Descent Proximal Gradient Descent Framework近端梯度下降算法框架 Proximal Gradi ...

  8. 随机梯度下降法,批量梯度下降法和小批量梯度下降法以及代码实现

    前言 梯度下降法是深度学习领域用于最优化的常见方法,根据使用的batch大小,可分为随机梯度下降法(SGD)和批量梯度下降法(BGD)和小批量梯度下降法(MBGD),这里简单介绍下并且提供Python ...

  9. 【数据挖掘】神经网络 后向传播算法 ( 梯度下降过程 | 梯度方向说明 | 梯度下降原理 | 损失函数 | 损失函数求导 | 批量梯度下降法 | 随机梯度下降法 | 小批量梯度下降法 )

    文章目录 I . 梯度下降 Gradient Descent 简介 ( 梯度下降过程 | 梯度下降方向 ) II . 梯度下降 示例说明 ( 单个参数 ) III . 梯度下降 示例说明 ( 多个参数 ...

  10. 三种梯度下降法对比(Batch gradient descent、Mini-batch gradient descent 和 stochastic gradient descent)

    梯度下降(GD)是最小化风险函数.损失函数的一种常用方法,随机梯度下降(stochastic gradient descent).批量梯度下降(Batch gradient descent)和mini ...

最新文章

  1. 计算机安装双系统后系统引导修复的方法
  2. MySQL的binary类型操作
  3. Windows 10 UWP开发:如何不让界面卡死
  4. 【Linux】6.服务器会话的screen用法
  5. 使用SecureCRT的SFTP在WINDOWS与LINUX之间传输文件(转载)
  6. java获取请求的url地址
  7. 在MacOS和iOS系统中使用OpenCV
  8. 【腾讯云的1001种玩法】 Laravel 整合微视频上传管理能力,轻松打造视频App后台...
  9. mac mysql降版本_Mac卸載mysql並安裝mysql升級到8.0.13版本
  10. Sublime Text3 直接运行js调试控制台
  11. APM代码学习笔记1
  12. web平台安装程序_来了来了!开源车间调度平台正式上线!
  13. 《批判性思维工具》—— 阅读内化(5)
  14. Windows HTTP服务(WinHTTP)介绍
  15. 1.1各种编程语言的介绍
  16. 思岚S2激光雷达2—SDK和实例程序的编译
  17. RTKLIB专题学习(七)---精密单点定位实现初识(三)
  18. Visual Studio番茄助手 Visual Assist X for VS2015-2019
  19. win10如何删除microsoft账户并免密登录
  20. 十张漫画让你清楚究竟啥是云计算

热门文章

  1. 业务员应熟记的应酬劝酒词大全
  2. 你的深度思考能力,是如何一步步被毁掉的?
  3. excel三种查重方法
  4. 行业缩减他却增加!海尔智家研发投入创新高
  5. 倪海厦天纪笔记16_倪海厦《天纪》——人间道听课笔记
  6. 时光机特效在哪里?推荐这三个实用软件给你
  7. 简单介绍一下web开发中用到的一些技术
  8. 国产FPGA研究框架
  9. VMWare下载安装以及创建虚拟机教程
  10. cocos creater 使用.max文件/.max文件转换为.fbx文件