深度学习-5.深度模型的优化
优化
- 优化函数
- 经验风险最小化
- 代理损失函数
- 批量算法和小批量算法
- 神经网络优化中的挑战
- 基本算法
- 随机梯度下降
- 动量
- 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]=m1i=1∑mL(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ω1x
我们进行一步更新得到的新值是
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∑iHi,:, σ = δ + 1 m ∑ i ( H − μ ) i 2 \sigma=\sqrt{\delta+\frac1m\sum_i(H-\mu)^2_i} σ=δ+m1∑i(H−μ)i2 , δ \delta δ是一个很小的正值,强制避免遇到梯度为零时产生的一些未定义的问题。
坐标下降
将优化问题分成几部分,每次只优化一个维度或几个维度。
Polyak平均
每次迭代时,会找到其所经过的点的平均。使用这种方法具有较强的收敛保证。
深度学习-5.深度模型的优化相关推荐
- TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络
TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络 转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnote ...
- 深度学习CTR预估模型凭什么成为互联网增长的关键?
本文是王喆在InfoQ开设的原创技术专栏"深度学习CTR预估模型实践"的第一篇文章(以下"深度学习CTR预估模型实践"简称"深度CTR模型" ...
- 深度学习 vs. 概率图模型 vs. 逻辑学
深度学习 vs. 概率图模型 vs. 逻辑学 发表于2015-04-30 21:55|6304次阅读| 来源quantombone|1 条评论| 作者Tomasz Malisiewicz 深度学习de ...
- 工程之道,深度学习推理性能业界最佳优化实践
MegEngine「训练推理一体化」的独特范式,通过静态图优化保证模型精度与训练时一致,无缝导入推理侧,再借助工业验证的高效卷积优化技术,打造深度学习推理侧极致加速方案,实现当前业界最快运行速度.本文 ...
- 从FM推演各深度学习CTR预估模型
本文的PDF版本.代码实现和数据可以在我的github取到. 1.引言 点击率(click-through rate, CTR)是互联网公司进行流量分配的核心依据之一.比如互联网广告平台,为了精细化权 ...
- 【实践】Angel深度学习在广告推荐训练优化中的实践.pdf(附下载链接)
猜你喜欢 0.[免费下载]2021年11月热门报告盘点&下载1.如何搭建一套个性化推荐系统?2.从零开始搭建创业公司后台技术栈3.全民K歌推荐系统算法.架构及后台实现4.微博推荐算法实践与机器 ...
- 深度学习的推荐模型(DLRMs):设计孪生掩码层高效学习维度自适应的Embedding...
猜你喜欢 0.2021年10月份热门报告免费下载1.如何搭建一套个性化推荐系统?2.从零开始搭建创业公司后台技术栈3.全民K歌推荐系统架构.算法及后台设计4.微博推荐算法实践与机器学习平台演进5.腾讯 ...
- Angel深度学习在广告推荐训练优化中的实践.pdf(附下载链接)
今天给大家带来腾讯应用研究员郭跃超先生所做的分享<Angel深度学习在广告推荐训练优化中的实践>,Angel是腾讯自研的分布式高性能的机器学习平台,支持机器学习.深度学习.图计算以及联邦学 ...
- 推荐系统深度学习篇-NFM 模型介绍(1)
一.推荐系统深度学习篇-NFM 模型介绍(1) NFM是2017年由新加披国立大学提出的一种模型,其主要优化点在于提出了Bi-Interaction,Bi-Interaction考虑到了二阶特征组合, ...
- 打开深度学习的潘多拉魔盒(模型可视化)
打开深度学习的潘多拉魔盒(模型可视化) - v3.x 深度学习原理与实践(开源图书)-总目录,建议收藏,告别碎片阅读! 深度学习在各个领域攻城略地,在诸多领域秒杀传统算法,但是其运作细节一直是个黑盒. ...
最新文章
- element-UI中手动调用table排序
- 如何查看AWS实例上使用的key value pair名称
- wamp php imagick,如何在wamp for Windows中安装和启用Imagick扩展 php psd 生成缩略图
- turtle 函数 方法_学python第十一节:turtle深入 了解
- Drools创建Maven工程
- 2021年 RSA 大会:产品发布概览(第1天)
- Python 脚本 pyautogui——实现键盘鼠标的自动操作
- Procdump+Mimikatz获取Windows明文密码
- 解决 invalid DSN: missing the slash separating the database name
- Feb16 小白《Linux就该这么学》学习笔记3
- ThinkPad T450 笔记本电脑 Fn + F8 组合键失效后开启无线网络的办法
- 软件测试这个行业能干到多少岁?
- Adobe read X安装过程中出现无法将数值DisableExceptionChainValidation写入键
- ANSYS018.1案例 三维冷热水混合器流体仿真
- 尚硅谷docker基础篇 2018版
- 域名解析ip地址的过程
- 牛客网:两两配对值最小
- Bitly野心彰显,发布实时热门链接引擎Realtime
- 原来,“空三加密”竟是加了这些“密”!
- 如何在面试中介绍自己的项目经验(面向java改进版)
热门文章
- ChatGPT 自动化办公系列教程 - 提问篇:协助制作 PPT
- C++-inserter
- LeetCode刷题剑指 Offer 10- II. 青蛙跳台阶问题
- SA-SSD那点事儿
- Android 插件化,qihoo360插件方案。集成简单实用方便,兼容性高
- BetterScroll 使用
- 《Linux防火墙(第4版)》——2.3 对一个数据包的驳回(Rejecting)VS拒绝(Denying)...
- 我们参观机器人产业园的感想_产业园观后感
- 什么是“声音”和“超声波”
- 环信集成服务端封装类-聊天室