当在现实生活中的遇到问题时,我们总是希望找到最佳的解决方案。制造软件产品也是一样的道理,最优化的程序才是最理想的产品。

最优化意味着获得最佳输出。它既是一个数学的重要分支,也在现实生活中有着重要的作用。现代的计算机科学和人工智能科学把最优化作为一个重要的领域来研究。我们也认为人工智能的一些算法,就是模拟了人类寻求实际问题最优解的过程。例如,利用人工智能算法设计软件,配合外部的电子设备例如摄像头识别人脸;利用数据挖掘和神经网络算法来寻找投资的最佳时机等等,都是利用了最优化的原理。

机器学习中的最优化和其他学科的应用比起来有轻微的差异。一般来说,在优化的同时,我们确切地知道数据的外观以及我们想要改进的地方。 但是在机器学习中,我们不知道“新数据”是怎么样的,更别提对其进行优化了。为了解决这个问题,在机器学习中,我们对训练数据(training data)执行优化,并检查由此新创造出的验证数据(validation data)。

最优化的广泛应用

  • 机械学:设计航空航天产品的表面;
  • 经济学:成本最小化;
  • 物理学:量子计算中的优化时间;
  • 决定最佳运输路线,货架空间优化等等。

许多流行的机器算法都依赖于线性回归,k最近邻,神经网络等技术。优化的应用是无限的,因此它成为了学术界和工业界广泛研究的课题。在本文中,我们将介绍一种称为梯度下降(Gradient Descent)的优化技术。 这是机器学习时最常用的优化技术。

1.什么是梯度下降?

我们来看一下经典的登山示例:假设你在山顶,你必须到达山谷最低点的一个湖。 但是你被蒙住眼睛,看不到你的目标。 那么,你会采取什么方法到达湖边?

最简单的方法是检查你附近的地面,找到土地向下倾斜的方向。 这是你该迈出第一步的方向。 沿着下坡路线一直走,很有可能你会到达湖泊。下图表示你走过的路:

现在我们来用数学术语来描述一下这个场景。

假设我们想要找出学习算法的最佳参数(θ0)和(θ1)。与上面的登山示例类似,当我们绘制成本空间J(θ)函数的3D图像时发现了类似的山脉和山谷。当z轴代表成本J(θ),x轴和z轴分别对应参数θ0和θ1时,丘陵由红色地区代表成本高,而山谷以蓝色地区代表成本低。成本空间不过是算法在某个参数选择特定值时的表现。

现在主要有两种类型的梯度下降算法:

1.1 数据摄入基准法

  1. 全批梯度下降算法(Full Batch)
  2. 随机梯度下降算法(Stochastic)

全批梯度下降算法一次使用所有数据来计算梯度,而随机梯度下降算法可以在计算梯度时进行采样。

1.2 分化技巧基准法

  1. 一阶微分
  2. 二阶微分

梯度下降需要通过成本函数J(θ)的微分方程来计算梯度。我们可以使用一阶微分或二阶微分。

2.执行梯度下降法所面临的挑战

梯度下降是一种适用于大多数情况的技术。但也有时候梯度下降也不能正常工作,或完全不能工作。发生这种情况时有三个主要原因:

2.1 来自数据的挑战

  • 如果数据的排列方式会造成非凸优化问题(non-convex optimization problem),使用梯度下降来执行优化会非常困难。
  • 即使在优化凸优化问题时,也可能存在许多最小值。最低点称为全局最小值(Global Minima),其余点称为局部最小值(Local Minima)。我们的目标是在避免局部最小值的同时到达全局最小值。
  • 还有鞍点(Saddle Point)问题。这是数据中梯度为零但不是最优点的点。目前并没有具体的方法来避免这一点,这仍然是一个非常活跃的研究领域。

2.2 来自梯度的挑战

  • 如果梯度下降执行的不正确,则可能导致像梯度消失(vanishing gradient)或梯度爆炸(exploding gradient)之类的问题。这些问题会在梯度过小或过大时发生,导致算法不会收敛(Converge)。

2.3 来自实际应用难度的挑战

  • 大多数神经网络从业人员不大关注实际应用。但是网络的资源利用率之类的事情也是非常重要的。在实施梯度下降时,具体需要多少资源是非常重要的。如果内存对于应用程序来说太小就一定会失败。
  • 此外,梯度下降算法对于浮点和硬件/软件的要求也很高。

3.梯度下降算法的变体

最常用的梯度下降算法及其实施。

3.1 Vanilla(香草)梯度下降法

这是梯度下降技术的最简单形式。香草意味着纯粹/没有任何掺假。其主要特点是通过采用成本函数的梯度向最小值方向不断迈出小步。它的伪代码如下:

update = learning_rate * gradient_of_parametersparameters = parameters - update

我们通过获取旧参数的梯度来不断更新参数。把它乘以一个学习速率(learning_rate,一个常数),表明我们想要达到最低点的速度。学习速率是一个超参数(hyper-parameter),在选择它的大小时应该十分小心谨慎。

3.2动量梯度下降(Gradient Descent with Momentum)

通过调整Vanilla算法,可以在每次进行下一步之前注意前一步骤。

update = learning_rate * gradientvelocity = previous_update * momentumparameter = parameter + velocity – update

在这里,update与香草梯度下降法相同。 但是引入了一个名为velocity的新术语,它考虑了之前的update和一个称为momentum的常量。

3.3 Adagrad

Adagrad使用自适应技术进行学习速率的更新。 这个算法根据以前所有迭代的梯度变化情况来改变学习速率。伪代码如下:

grad_component = previous_grad_component + (gradient * gradient)rate_change = square_root(grad_component)+epsilonadapted_learning_rate = learning_rate * rate_changeupdate = adapted_learning_rate * gradientparameter = parameter – update

其中,epsilon是一个常量,用于保持学习速率的变化率。

3.4 Adam

Adam是一种基于Adagrad的自适应技术,进一步缓解了它的不足。 换句话说,它就是 Momentum + Adagrad。伪代码如下:

adapted_gradient = previous_gradient +  ((gradient – previous_gradient) * (1 – beta1))gradient_component = (gradient_change – previous_learning_rate)adapted_learning_rate = previous_learning_rate +  (gradient_component * (1 – beta2))update = adapted_learning_rate * adapted_gradientparameter = parameter – update

其中,beta1和beta2是常量,用于检查梯度和学习速率的变化。

4.梯度下降算法的实际应用

使用python进行梯度下降的基本应用。

接下来我们使用梯度下降优化来找到深度学习模型的最佳参数,并将其用于图像识别问题。 我们的问题是:识别来自给定的28×28图像里的数字。准备的图片中,有一部分图像用于训练,其余部分用于测试模型。

如下是定义Vanilla梯度下降的主要代码:

params = [weights_hidden, weights_output, bias_hidden, bias_output]def sgd(cost, params, lr=0.05): grads = T.grad(cost=cost, wrt=params) updates = [] for p, g in zip(params, grads): updates.append([p, p - g * lr]) return updatesupdates = sgd(cost, params)

我们来拆分理解一下这段代码。定义函数sgd作为cost,params和lr的因变量,它和如前所述的J(θ)同出一辙;而之前的θ0,θ1在这里是深度学习算法的参数和学习速率。 我们将默认学习速率设置为0.05,但该值可随时被更改。

def sgd(cost, params, lr=0.05):

然后我们定义了关于成本函数J(θ)的参数的梯度。 在这里,我们使用theano库来找到相应梯度,并且我们将theano作为T导入

grads = T.grad(cost=cost, wrt=params)

最后把所有可能的参数更新,这里应使用Vanilla梯度下降。

for p, g in zip(params, grads): updates.append([p, p - g * lr]

我们可以使用这个函数来为神经网络找到最佳参数。 在使用这个函数时,该神经网络出色地完成了任务,如下所示:

Prediction is: 8

在这个应用中,梯度下降法为深度学习算法找到了最优参数。

5.应用梯度下降的实用技巧

上面提到的每个梯度下降算法都有其优点和缺点。下面的一些小提示可能会帮助您选择正确的算法。

  • 为了快速建立原型,请使用Adam / Adagrad等自适应技术。他们很短时高效,并且不需要太多的超参数调整。
  • 要获得最佳效果,您应该使用Vanilla梯度下降法或Momentum。虽然计算速度超级慢,但是这些结果大多比自适应技术得来的结果更准确。
  • 如果数据很小并且适合一次迭代,则可以使用二阶技术,如l-BFGS。因为二阶技术对于足够小的数据的处理非常快速和准确。

神经网络无法成功学习的原因有很多。但是如果可以找到算法出错的地方,对未来的工作还是非常有帮助的。

在应用梯度下降法时,有以下几点常见注意事项:

  • 错误率 - 应该在特定迭代后检查训练错误率、测试错误率,并确保它们都成减小趋势。如果错误率并未减小,算法很有可能出了问题。
  • 隐藏层中的梯度流 - 检查是否有梯度消失或梯度爆炸的问题。
  • 学习速率 - 使用自适应技术时应该检查。

希望您阅读本文后,将熟练掌握有关梯度下降及其变体的基础知识。希望你觉得我对这些算法的实际应用的解读也有所帮助!

转载于:https://www.cnblogs.com/txkjai/p/10762573.html

机器学习/梯度下降算法相关推荐

  1. 机器学习——梯度下降算法

    文章目录 梯度下降算法 概念 前提条件 目标函数 训练集 训练步骤 代码表示 梯度下降的算法调优 总结 梯度下降算法 最优化算法在机器学习中是一种求解最合适的权重参数的算法,梯度下降算法就是其中的一种 ...

  2. 机器学习-梯度下降算法原理及公式推导

    目录 1.梯度下降直观理解解释 2.算法上的解释 3.常用的梯度下降法 4.梯度下降算法调优 5.其他优化算法对比 在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降算法(Gradient D ...

  3. 用Python学习吴恩达机器学习——梯度下降算法理论篇

    开篇词:(CSDN专供) 欢迎阅读我的文章,本文起先是在B站上进行投稿,一开始是采用吴恩达机器学习2012年版的,目前已经出了十二期了.现在我决定将我摸索出来的学习笔记在各个平台上进行连载,保证同时更 ...

  4. 机器学习梯度下降法应用波士顿房价预测

    目录 1 线性回归api介绍 小结 2 波士顿房价预测 2.1 案例背景介绍 2.2 案例分析 2.3 回归性能评估 2.4 代码实现 2.4.1 正规方程 2.4.2 梯度下降法 2.5 小结 1 ...

  5. 机器学习中,梯度下降算法的问题引入

    来源 | 动画讲编程 今天讲解的内容是梯度下降算法. 梯度下降算法在机器学习中的应用十分广泛,该算法的最主要目的是通过迭代的方法找到目标函数的最小值,经常用来解决线性回归和逻辑回归等相关问题.本节课主 ...

  6. 一文清晰讲解机器学习中梯度下降算法(包括其变式算法)

    本篇文章向大家介绍梯度下降(Gradient Descent)这一特殊的优化技术,我们在机器学习中会频繁用到. 前言 无论是要解决现实生活中的难题,还是要创建一款新的软件产品,我们最终的目标都是使其达 ...

  7. python梯度下降法实现线性回归_【机器学习】线性回归——多变量向量化梯度下降算法实现(Python版)...

    [向量化] 单一变量的线性回归函数,我们将其假设为:hθ(χ)=θ0+θ1χh_\theta(\chi)=\theta_0+\theta_1\chihθ​(χ)=θ0​+θ1​χ但是如果我们的变量个数 ...

  8. ng机器学习视频笔记(二) ——梯度下降算法解释以及求解θ

    ng机器学习视频笔记(二) --梯度下降算法解释以及求解θ (转载请附上本文链接--linhxx)   一.解释梯度算法 梯度算法公式以及简化的代价函数图,如上图所示. 1)偏导数 由上图可知,在a点 ...

  9. 机器学习算法(优化)之一:梯度下降算法、随机梯度下降(应用于线性回归、Logistic回归等等)...

    本文介绍了机器学习中基本的优化算法-梯度下降算法和随机梯度下降算法,以及实际应用到线性回归.Logistic回归.矩阵分解推荐算法等ML中. 梯度下降算法基本公式 常见的符号说明和损失函数 X :所有 ...

最新文章

  1. 男神女神配——alpha阶段总结
  2. Hadoop的启动顺序和停止顺序
  3. C++实现输入两个字符串,从第一字符串中删除第二个字符串中所有的字符
  4. python手机版安卓-手机随时随地写Python,还可以开发安卓APP,太厉害了!
  5. 笔迹鉴别(5) —— 笔迹判别
  6. 如何为SFP光模块搭配对应的光纤跳线?
  7. 【AutoML】激活函数如何进行自动学习和配置
  8. matlab计算斜方差_Matlab求方差,均值,均方差,协方差的函数
  9. ip地址转换pta题目_PTA「实验2-3-5 输出华氏-摄氏温度转换表」
  10. linux查看服务状态
  11. Memcached windows 下安装与应用
  12. js排序算法详解-桶排序
  13. 按键消抖Verilog
  14. hotmail手机端_hotmail邮箱app下载
  15. omi html转义,特殊字符读法
  16. LANDESK8.8版本操作说明书之服务器安装
  17. 用jQuery仿京东收货地址
  18. 蓝牙 - 技术演变史
  19. 概率论-4.3随机变量序列的两种收敛性(待补充)
  20. Logo tools

热门文章

  1. grub4dos初级教程-入门篇
  2. 用户自定义一个异常,编程创建并抛出某个异常类的实例。运行该程序并观察执行结果。
  3. Python学习之共享引用
  4. 故障解决:error while loading shared libraries: libncurses.so.5
  5. Spring.ImportSelector接口
  6. ElasticSearch7.x「新特性」
  7. C语言再学习 -- Stack Overflow(堆栈溢出)
  8. zImage与uImage的区别
  9. 【译】Why Decentralized AI Matters Part II: Technological Enablers
  10. CVE-2016-10229分析