译者:一只鸟的天空 :COO、执行总编、主编、高级编译、主笔、运营总监、客户经理、咨询总监、行政助理等 9 大岗位全面开放。 简历投递:j[email protected] HR 微信:13552313024 新智元为COO和执行总编提供最高超百万的年薪激励;为骨干员工提供最完整的培训体系、高于业界平均水平的工资和奖金。 加盟新智元,与人工智能业界领袖携手改变世界。 【新智元导读】梯度下降算法是机器学习中使用非常广泛的优化算法,也是众多机器学习算法中最常用的优化方法。几乎当前每一个先进的(state-of-the-art)机器学习库或者深度学习库都会包括梯度下降算法的不同变种实现。但是,它们就像一个黑盒优化器,很难得到它们优缺点的实际解释。这篇文章旨在提供梯度下降算法中的不同变种的介绍,帮助使用者根据具体需要进行使用。 这篇文章首先介绍梯度下降算法的三种框架,然后介绍它们所存在的问题与挑战,接着介绍一些如何进行改进来解决这些问题,随后,介绍如何在并行环境中或者分布式环境中使用梯度下降算法。最后,指出一些有利于梯度下降的策略。 目录 三种梯度下降优化框架 批量梯度下降 随机梯度下降 小批量梯度下降 问题与挑战 梯度下降优化算法 Momentum Nesterov accelerated gradient Adagrad Adadelta RMSprop Adam 算法的可视化 选择哪种优化算法? 并行与分布式SDG Hogwild! Downpour SGD Delay-tolerant Algorithms for SGD TensorFlow Elastic Averaging SGD 更多的SDG优化策略 训练集随机洗牌与课程学习 批规范化 Early Stopping Gradient noise 总结 引用 三种梯度下降优化框架 梯度下降算法是通过沿着目标函数J(θ)参数θ∈R的梯度(一阶导数)相反方向??θJ(θ)来不断更新模型参数来到达目标函数的极小值点(收敛),更新步长为η。 有三种梯度下降算法框架,它们不同之处在于每次学习(更新模型参数)使用的样本个数,每次更新使用不同的样本会导致每次学习的准确性和学习时间不同。 批量梯度下降(Batch gradient descent) 每次使用全量的训练集样本来更新模型参数,即: θ=θ?η??θJ(θ) 其代码如下:
epochs 是用户输入的最大迭代次数。通过上诉代码可以看出,每次使用全部训练集样本计算损失函数 loss_function 的梯度 params_grad,然后使用学习速率 learning_rate 朝着梯度相反方向去更新模型的每个参数params。一般各现有的一些机器学习库都提供了梯度计算api。如果想自己亲手写代码计算,那么需要在程序调试过程中验证梯度计算是否正确。 批量梯度下降每次学习都使用整个训练集,因此其优点在于每次更新都会朝着正确的方向进行,最后能够保证收敛于极值点(凸函数收敛于全局极值点,非凸函数可能会收敛于局部极值点),但是其缺点在于每次学习时间过长,并且如果训练集很大以至于需要消耗大量的内存,并且全量梯度下降不能进行在线模型参数更新。 随机梯度下降(Stochastic gradient descent) 随机梯度下降算法每次从训练集中随机选择一个样本来进行学习,即: θ=θ?η??θJ(θ;xi;yi) 批量梯度下降算法每次都会使用全部训练样本,因此这些计算是冗余的,因为每次都使用完全相同的样本集。而随机梯度下降算法每次只随机选择一个样本来更新模型参数,因此每次的学习是非常快速的,并且可以进行在线更新。 其代码如下:
随机梯度下降最大的缺点在于每次更新可能并不会按照正确的方向进行,因此可以带来优化波动(扰动),如下图:
图1 SGD扰动 (责任编辑:本港台直播) |