优化

  • 优化函数
    • 经验风险最小化
    • 代理损失函数
    • 批量算法和小批量算法
  • 神经网络优化中的挑战
  • 基本算法
    • 随机梯度下降
    • 动量
    • Nesterov动量
  • 参数初始化策略
  • 自适应学习率算法
    • AdaGrad
    • RMSProp
    • Adam
  • 二阶近似方法
    • 牛顿法
    • 共轭梯度
    • BFGS
  • 优化策略和元算法
    • 批标准化
    • 坐标下降
    • Polyak平均

优化函数

经验风险最小化

这是一种比较常见的方法,将最小化风险变成了一个可以被优化算法解决的优化问题,经验风险函数为:
E x , y ∼ p d a t a [ L ( f ( x ; θ ) , y ] = 1 m ∑ i = 1 m L ( f ( x ( i ) ; θ ) , y ( i ) ) \mathbb E _{x,y\sim p_{data}}[L(f(x;\theta),y]=\frac1m\sum^m_{i=1}L(f(x^{(i)};\theta), y^{(i)}) Ex,y∼pdata​​[L(f(x;θ),y]=m1​i=1∑m​L(f(x(i);θ),y(i))
但是,这种方式很容易过拟合。

代理损失函数

代理损失函数使原函数的替代形式,如01损失转换成负对数等。相较于之前的优化函数,他能从样本集里抽取到更多信息。

批量算法和小批量算法

使用整个训练集优化的算法被称为批量确定性梯度算法。
使用单个样本优化的算法被称为随机在线算法。
大多数深度学习算法介于二者之间,选择小批量进行优化。

  • 更大的批量会计算更精确的梯度估计,但回报小
  • 极小的批量无法充分利用多核架构
  • 在某些硬件上使用2的幂次的批量大小可以获得更少的运行时间
  • 小批量学习时可能是由于加入了噪声,会产生一些正则化效果。泛化误差在批量大小为1时最好

神经网络优化中的挑战

  • 病态
    见深度学习-1.数值计算
  • 局部极小值
    在低维空间中非凸函数很可能会出现一些局部极小值点,较为常见。
  • 高原、鞍点和其他平坦地区
    在高维空间中很少出现局部极小值点,鞍点却经常出现。此时无法使用牛顿法,而无鞍牛顿法应运而生。
  • 悬崖和梯度爆炸
    多层神经网络通常存在像悬崖一样的斜率较大的区域,遇到这种情况时可以使用梯度截断的方式。
  • 长期依赖
    神经网络学习新的样本特征时把旧的特征遗忘了。例如RNN中需要经常使用相同的权重矩阵 W t W^t Wt,假设该矩阵能够进行特征值分解,则 W t = V d i a g ( λ ) t V − 1 W^t = V diag(\lambda)^tV^{-1} Wt=Vdiag(λ)tV−1,显然当t增大时,特征值累乘会发生梯度爆炸和梯度消失的问题
  • 非精确梯度
    当目标函数难以计算梯度时,或目标函数不可解时,只能对梯度进行近似。
  • 局部和全局结构的弱对应
    例如优化函数没有局部极小值点,最小值只能在边界上寻找到时:
    随着梯度下降很有可能找不到右侧的最小值,而陷入了左侧的“最小值”
  • 优化的理论限制
    一些研究表明,任何一种深度学习优化算法都有性能上的限制。

基本算法

随机梯度下降

Require:学习率r,初始参数thetawhile 停止准则未满足:随机抽取batchsize个样本计算梯度g应用更新theta = theta - r * g
  • 总结:最为常用的优化算法,重点在于选取学习率

动量

Require: 学习率r,动量参数alpha,初始参数theta,初始速度vwhile 停止准则为满足:随机抽取batchsize个样本计算梯度g计算速度更新v = a * v - r * g应用更新theta = theta + v
  • 总结:主要是为了解决病态问题

Nesterov动量

Require: 学习率r,动量参数alpha,初始参数theta,初始速度vwhile 停止准则为满足:随机抽取batchsize个样本计算梯度g   !!(关于theta + alpha * v)!!计算速度更新v = a * v - r * g应用更新theta = theta + v
  • 总结:主要也是为了解决病态问题,在凸批量梯度的情况下收敛率从O(1/k)改进到了O(1/k^2)

参数初始化策略

  • 标准初始化: W i , j ∼ U ( − 6 m + n , 6 m + n ) W_{i,j}\sim U(-\sqrt\frac{6}{m+n},\sqrt\frac{6}{m+n}) Wi,j​∼U(−m+n6​ ​,m+n6​ ​)
  • 随机正交初始化:初始化为随机正交矩阵
  • 系数初始化:每个单元初始化为恰好有k个非零权重

自适应学习率算法

AdaGrad

  • 对于偏导大的参数增大学习率,反之减小学习率
Require:全局学习率epsilon,初始参数theta,小常数delta
初始化梯度累积变量r = 0
while 没有达到停止准则:选取样本x -> y计算梯度g累积平方梯度 r += g * g应用更新 theta -= epsilon / (delta + sqrt(r)) * g
  • 适用于凸优化问题,有令人满意的结果
  • 从训练开始时积累梯度平方和会导致有效学习率过早和过量减小

RMSProp

  • AdaGrad的改进,使其在非凸优化问题上效果变好,将梯度累计变成指数加权的移动平均
Require:全局学习率epsilon,衰减速率rho,初始参数theta,小常数delta
初始化累计变量r = 0
while 没有达到停止准则:选取样本x -> y计算梯度g累积平方梯度 r = rho * r + (1 - rho) * g * g应用更新 theta -= epsilon / (sqrt(delta + r)) * g # 逐元素计算
  • 该算法已被证明是一种有效且实用的深度神经网络优化算法

Adam

  • 另一种学习率自适应算法
Require:步长epsilon,矩估计衰减速率p1,p2(建议默认为0.9和0.99)
Require:初始参数theta,数值稳定用的小常数delta(建议默认为1e-8)
s, r = 0, 0  # 初始化一阶二阶矩变量
t = 0  # 初始化时间步
while 没有达到停止准则:选取样本x -> y计算梯度gt += 1s = p1 * s + (1 - p1) * g  # 更新一阶有偏矩估计r = p2 * r + (1 - p2) * g * g  # 更新二阶有偏矩估计ss = s / (1 - p1 ^ t)  #修正一阶矩的偏差rr = r / (1 - p2 ^ t)  #修正二阶矩的偏差theta -= epsilon * ss / (sqrt(rr) + delta)
  • 对超参数的选择相当鲁棒

二阶近似方法

牛顿法

每轮迭代参数 θ \theta θ时,使用二阶海森矩阵迭代:
θ = θ − H − 1 g \theta = \theta - H^{-1}g θ=θ−H−1g
带牛顿法在鞍点附近(海森矩阵非正定)会失效,因此需要做一个正则化来近似
θ ∗ = θ 0 − [ H ( f ( θ 0 ) ) + α I ] − 1 ∇ θ f ( θ 0 ) \theta^* = \theta_0-[H(f(\theta_0)) + \alpha I]^{-1}\nabla_\theta f(\theta_0) θ∗=θ0​−[H(f(θ0​))+αI]−1∇θ​f(θ0​)

共轭梯度

由于梯度下降法会受到病态的海森矩阵的影响,导致收敛速度非常慢,因此采用共轭梯度下降,每次迭代的方向与想以此的方向共轭,则可以拜托这种病态的影响。

BFGS

该算法由牛顿法的一些优点,但没有其计算逆矩阵的负担。

优化策略和元算法

批标准化

他不是一个优化算法,而是一个自适应的重参数化方法,试图解决训练非常深的模型的困难。
对于非常深的神经网络,每一轮迭代时由于我们同时使用了同时更新所有参数的方式,可能会造成意想不到的情况。
例如对于神经网络
f ( x ) = ω 4 ω 3 ω 2 ω 1 x f(x) = \omega_4\omega_3\omega_2\omega_1x f(x)=ω4​ω3​ω2​ω1​x
我们进行一步更新得到的新值是
f ( x ) = ( ω 4 − ϵ 4 ) ( ω 3 − ϵ 3 ) ( ω 2 − ϵ 2 ) ( ω 1 − ϵ 1 ) x f(x) = (\omega_4 - \epsilon_4)(\omega_3 - \epsilon_3)(\omega_2 - \epsilon_2)(\omega_1 - \epsilon_1)x f(x)=(ω4​−ϵ4​)(ω3​−ϵ3​)(ω2​−ϵ2​)(ω1​−ϵ1​)x
当某几项的系数较大时,很可能会出现梯度爆炸的问题。尤其当网络层数更深时尤为严重。
因此,批标准化提供李毅中几乎可以重参数化所有深度网络的优雅方法,显著见笑了多层之间协调更新的问题。
他可以应用在网络的任何输入层或隐藏层,设 H H H是需要标准化的某层的小批量激活函数,排布为设计矩阵,每个样本的激活出现在矩阵的每一行中。为了标准化 H H H,我们将其替换为 H ′ = H − μ σ H'=\frac{H-\mu}\sigma H′=σH−μ​,其中 μ = 1 m ∑ i H i , : \mu = \frac1m\sum_iH_{i,:} μ=m1​∑i​Hi,:​, σ = δ + 1 m ∑ i ( H − μ ) i 2 \sigma=\sqrt{\delta+\frac1m\sum_i(H-\mu)^2_i} σ=δ+m1​∑i​(H−μ)i2​ ​, δ \delta δ是一个很小的正值,强制避免遇到梯度为零时产生的一些未定义的问题。

坐标下降

将优化问题分成几部分,每次只优化一个维度或几个维度。

Polyak平均

每次迭代时,会找到其所经过的点的平均。使用这种方法具有较强的收敛保证。

深度学习-5.深度模型的优化相关推荐

  1. TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络

    TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络 转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnote ...

  2. 深度学习CTR预估模型凭什么成为互联网增长的关键?

    本文是王喆在InfoQ开设的原创技术专栏"深度学习CTR预估模型实践"的第一篇文章(以下"深度学习CTR预估模型实践"简称"深度CTR模型" ...

  3. 深度学习 vs. 概率图模型 vs. 逻辑学

    深度学习 vs. 概率图模型 vs. 逻辑学 发表于2015-04-30 21:55|6304次阅读| 来源quantombone|1 条评论| 作者Tomasz Malisiewicz 深度学习de ...

  4. 工程之道,深度学习推理性能业界最佳优化实践

    MegEngine「训练推理一体化」的独特范式,通过静态图优化保证模型精度与训练时一致,无缝导入推理侧,再借助工业验证的高效卷积优化技术,打造深度学习推理侧极致加速方案,实现当前业界最快运行速度.本文 ...

  5. 从FM推演各深度学习CTR预估模型

    本文的PDF版本.代码实现和数据可以在我的github取到. 1.引言 点击率(click-through rate, CTR)是互联网公司进行流量分配的核心依据之一.比如互联网广告平台,为了精细化权 ...

  6. 【实践】Angel深度学习在广告推荐训练优化中的实践.pdf(附下载链接)

    猜你喜欢 0.[免费下载]2021年11月热门报告盘点&下载1.如何搭建一套个性化推荐系统?2.从零开始搭建创业公司后台技术栈3.全民K歌推荐系统算法.架构及后台实现4.微博推荐算法实践与机器 ...

  7. 深度学习的推荐模型(DLRMs):设计孪生掩码层高效学习维度自适应的Embedding...

    猜你喜欢 0.2021年10月份热门报告免费下载1.如何搭建一套个性化推荐系统?2.从零开始搭建创业公司后台技术栈3.全民K歌推荐系统架构.算法及后台设计4.微博推荐算法实践与机器学习平台演进5.腾讯 ...

  8. Angel深度学习在广告推荐训练优化中的实践.pdf(附下载链接)​

    今天给大家带来腾讯应用研究员郭跃超先生所做的分享<Angel深度学习在广告推荐训练优化中的实践>,Angel是腾讯自研的分布式高性能的机器学习平台,支持机器学习.深度学习.图计算以及联邦学 ...

  9. 推荐系统深度学习篇-NFM 模型介绍(1)

    一.推荐系统深度学习篇-NFM 模型介绍(1) NFM是2017年由新加披国立大学提出的一种模型,其主要优化点在于提出了Bi-Interaction,Bi-Interaction考虑到了二阶特征组合, ...

  10. 打开深度学习的潘多拉魔盒(模型可视化)

    打开深度学习的潘多拉魔盒(模型可视化) - v3.x 深度学习原理与实践(开源图书)-总目录,建议收藏,告别碎片阅读! 深度学习在各个领域攻城略地,在诸多领域秒杀传统算法,但是其运作细节一直是个黑盒. ...

最新文章

  1. 陈杰院士:多无人系统协同中的人工智能安全探索
  2. Linux学习笔记-软件安装管理
  3. 解决VERSION 1.7 OF THE JVM IS NOT SUITABLE FOR THIS PRODUCT.
  4. BZOJ1008: [HNOI2008]越狱(组合数)
  5. 禁用F12和鼠标右键,防止查看控制台代码
  6. L1-008. 求整数段和-PAT团体程序设计天梯赛GPLT
  7. Android通知频道,通知点
  8. Atitit 翻页功能的解决方案与版本历史 v4 r49
  9. java quartz配置_Quartz配置参考
  10. python如何删除代码_删除代码(上)
  11. Win10 打开MSDTC
  12. 66天全部就业,最高薪资25000元!黑马Java学科真牛
  13. UIStepper (加减符号)(步进控件)
  14. 脑电分析系列[MNE-Python-7]| Python读取.edf文件
  15. ARN的内存和CPU配置
  16. 创新实践 | SaaS增长新趋势:产品驱动增长PLG(下)
  17. Kotlin 实战翻译 —— 仿微信图片选择开源库ImagePicker
  18. 【Linux】监控实时网速 查看实时网速
  19. 真正的 HTAP 对用户和开发者意味着什么?
  20. Java 网络编程学习笔记(三)—— URL 和 URI

热门文章

  1. 医院项目-预约挂号-第一部分
  2. 音乐小白乐器选择,如何学一手才艺,推荐尤克里里
  3. 生成唯一序列号 Unique ID
  4. 中国人不可不了解的常知识
  5. 一步一步理解大模型:模型组合简介
  6. 通过模拟200万次扔硬币得到的概率分布曲线(近似正态分布)
  7. 入门难,10孔布鲁斯口琴的衰落是必然的
  8. 我发现买不起自己出版的书了,这到底是咋回事?
  9. d3.js v5入门之——比例尺
  10. Learning Disentangled Representations for Timbre and Pitch in Music Audio论文阅读