ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

优化与深度学习:《动手学深度学习》中的目标函数、经验风险与局部最小值/鞍点/梯度消失三大挑战

优化与深度学习:《动手学深度学习》中的目标函数、经验风险与局部最小值/鞍点/梯度消失三大挑战 人工智能深度学习机器学习教程【免费下载链接】d2l-zh《动手学深度学习》面向中文读者、能运行、可讨论。中英文版被70多个国家的500多所大学用于教学。项目地址https://gitcode.com/GitHub_Trending/d2/d2l-zh点击查看免费下载导读本文围绕 chapter_optimization/optimization-intro_origin.md 展开系统讲解优化与深度学习的本质区别最小化训练误差 ≠ 最小化泛化误差并以可运行代码演示经验风险与风险的关系随后深入剖析深度学习优化中最棘手的三大挑战——局部最小值、鞍点与梯度消失给出 Hessian 特征值判别规则与梯度消失的数学证据。读完本文你将理解为什么小批量随机梯度下降的天然噪声反而是一种有益特性以及 ReLU 与良好初始化为何能缓解优化停滞。本文属于《动手学深度学习》优化算法 一章的开篇内容后续将在此基础上展开凸性、梯度下降、动量法、AdaGrad、Adam 等具体算法。文中所有绘图与数值代码均可基于本仓库d2l工具包直接运行。优化与深度学习目标函数与损失函数对于任何深度学习问题我们首先定义一个损失函数loss function随后使用优化算法尝试最小化它。在优化理论的语境中这个损失函数被称为优化问题的目标函数objective function。按惯例绝大多数优化算法关注的是最小化minimization从某个初始参数出发沿目标函数下降的方向迭代更新参数。如果某类问题需要最大化目标解决方案非常简单——在目标函数前加一个负号即可把最大化问题转化为最小化问题。正如 chapter_optimization/index.md 所述优化算法使我们能够持续更新模型参数使损失函数的值最小化训练复杂的深度学习模型可能耗时数小时、数天甚至数周优化算法的性能直接决定模型训练效率而理解优化算法的原理与超参数作用是我们有针对性地调整超参数、提升模型性能的前提。优化的目标最小化训练误差并不等于最小化泛化误差虽然优化为深度学习提供了一种最小化损失的手段但二者本质目标不同优化主要关心如何最小化某个目标函数深度学习统计推断关心在给定有限数据的前提下找到合适的模型。二者的差异集中体现在训练误差与泛化误差的差别上详见 chapter_multilayer-perceptrons/underfit-overfit.md 中训练误差和泛化误差一节优化算法的目标函数通常是基于训练数据集的损失函数因此优化的目标是降低训练误差而深度学习的最终目标更广义地说是统计推断的目标是降低泛化误差。要实现后者除了使用优化算法降低训练误差还必须警惕过拟合。经验风险与风险为定量说明上述差异引入两个概念经验风险empirical risk训练数据集上的平均损失风险risk整个数据总体上的期望损失。假设我们只有有限的训练数据下面定义风险函数f与经验风险函数g。由于g基于有限样本它通常不如f平滑def f(x): return x * d2l.cos(np.pi * x) def g(x): return f(x) 0.2 * d2l.cos(5 * np.pi * x)接下来用d2l工具包绘图pytorch 版%matplotlib inline from d2l import torch as d2l import numpy as np from mpl_toolkits import mplot3d import torch def annotate(text, xy, xytext): #save d2l.plt.gca().annotate(text, xyxy, xytextxytext, arrowpropsdict(arrowstyle-)) x d2l.arange(0.5, 1.5, 0.01) d2l.set_figsize((4.5, 2.5)) d2l.plot(x, [f(x), g(x)], x, risk) annotate(min of\nempirical risk, (1.0, -1.2), (0.5, -1.1)) annotate(min of risk, (1.1, -1.05), (0.95, -0.5))运行结果清晰显示训练数据集上经验风险的最小值位置与风险泛化误差的最小值位置并不重合。这直观印证了最小化训练误差并不能保证最小化泛化误差这一核心结论。这正是优化章节与模型选择chapter_multilayer-perceptrons/underfit-overfit.md相互呼应的原因。关于解析解与数值解在深度学习中大多数目标函数都非常复杂没有解析解analytical solution必须依靠数值优化算法numerical optimization迭代逼近。本仓库优化章节chapter_optimization/index.md中介绍的梯度下降、随机梯度下降、小批量随机梯度下降、动量法、AdaGrad、RMSProp、Adam 等均属于数值优化算法这一范畴。d2l 绘图封装的源码视角上文的d2l.plot、d2l.set_figsize并非魔法而是本仓库d2l工具包的公开封装d2l/torch.py 中set_figsize约第 55 行负责设置 matplotlib 图表大小并切换 SVG 输出plot约第 76-107 行负责坐标轴标注、图例、网格与多曲线绘制meshgrid、linspace、arange等则通过别名直接指向 PyTorch 对应 API见 d2l/torch.py 末尾保证d2l命名空间下接口统一。同样的封装在 d2l/mxnet.py、d2l/tensorflow.py、d2l/paddle.py 中均有对应实现这也是本仓库支持 MXNet、PyTorch、TensorFlow、PaddlePaddle 四套后端而代码几乎无需改动的关键设计。上面示例使用 PyTorch 版若在 Jupyter 中切换为from d2l import mxnet as d2l、from d2l import tensorflow as d2l或from d2l import paddle as d2l其余代码保持不变即可运行。深度学习中的优化挑战深度学习的优化面临诸多挑战其中最令人头痛的三类问题是局部最小值local minima、鞍点saddle points和梯度消失vanishing gradients。局部最小值对于目标函数 $f(x)$若 $x$ 处的函数值小于 $x$附近任意其他点的函数值则 $f(x)$ 是一个局部最小值若 $x$ 处的函数值是整个定义域上的最小值则 $f(x)$ 是全局最小值。考虑函数$$f(x) x \cdot \text{cos}(\pi x), \quad -1.0 \leq x \leq 2.0,$$可以近似标出它的局部最小值与全局最小值x d2l.arange(-1.0, 2.0, 0.01) d2l.plot(x, [f(x), ], x, f(x)) annotate(local minimum, (-0.3, -0.25), (-0.77, -1.0)) annotate(global minimum, (1.1, -0.95), (0.6, 0.8))深度学习模型的目标函数通常含有大量局部最优解。当数值解接近某个局部最优时随着梯度趋近于零最终迭代得到的数值解可能只让目标函数局部最优而非全局最优。此时只有一定程度的噪声才有可能把参数震出局部最小值。值得注意的是这恰恰是小批量随机梯度下降minibatch SGD的有利特性之一不同小批量上梯度的自然起伏噪声能够把参数从局部最小值中带出来。关于小批量随机梯度下降统计效率与计算效率的权衡、批量大小对梯度方差的影响可进一步阅读 chapter_optimization/minibatch-sgd.md。鞍点除了局部最小值鞍点是梯度消失的另一个原因。鞍点指函数的所有梯度都消失但它既不是全局最小值也不是局部最小值的位置。考虑 $f(x) x^3$其一阶导数和二阶导数在 $x0$ 处均为零。优化算法可能在此停滞尽管该点并非最小值x d2l.arange(-2.0, 2.0, 0.01) d2l.plot(x, [x**3], x, f(x)) annotate(saddle point, (0, -0.2), (-0.52, -5.0))高维空间中的鞍点更加隐蔽。考虑 $f(x, y) x^2 - y^2$其鞍点位于 $(0, 0)$沿 $y$ 方向它是最大值沿 $x$ 方向它是最小值。它的图像形似马鞍鞍点因此得名。下面用三维线框图绘制x, y d2l.meshgrid( d2l.linspace(-1.0, 1.0, 101), d2l.linspace(-1.0, 1.0, 101)) z x**2 - y**2 ax d2l.plt.figure().add_subplot(111, projection3d) ax.plot_wireframe(x, y, z, **{rstride: 10, cstride: 10}) ax.plot([0], [0], [0], rx) ticks [-1, 0, 1] d2l.plt.xticks(ticks) d2l.plt.yticks(ticks) ax.set_zticks(ticks) d2l.plt.xlabel(x) d2l.plt.ylabel(y);用 Hessian 特征值判别驻点类型假设函数输入是 $k$ 维向量、输出是标量那么其 Hessian 矩阵黑塞矩阵将有 $k$ 个特征值相关内容参见本书数学附录中关于特征分解的章节。在梯度为零的驻点处函数的解类型可由 Hessian 特征值判定驻点处 Hessian 特征值符号驻点类型全部为正局部最小值全部为负局部最大值既有正又有负鞍点对高维问题而言至少部分特征值为负的概率相当高这使得鞍点比局部最小值更常见。下一节 chapter_optimization/convexity.md 将讨论一种例外凸函数是 Hessian 特征值永不为负的函数其局部最小值同时也是全局最小值。遗憾的是大多数深度学习问题并不属于凸问题但凸性依然是研究优化算法的绝佳工具。梯度消失梯度消失可能是最隐蔽的问题。回顾常用激活函数及其导数见 chapter_multilayer-perceptrons/mlp.md 中的激活函数讨论以最小化 $f(x) \tanh(x)$ 为例假设我们从 $x 4$ 出发此时 $f$ 的梯度已接近于零。具体地$$f(x) 1 - \tanh^2(x), \quad f(4) 0.0013.$$梯度如此之小优化将停滞很长一段时间才能取得进展x d2l.arange(-2.0, 5.0, 0.01) d2l.plot(x, [d2l.tanh(x)], x, f(x)) annotate(vanishing gradient, (4, 1), (2, 0.0))这正是 ReLU 激活函数被引入之前训练深度模型相当棘手的原因之一——sigmoid/tanh 在输入绝对值较大时导数趋近于零深层网络的反向传播会因连乘而迅速衰减。ReLU$\operatorname{ReLU}(x) \max(x, 0)$的导数在正区间恒为 1避免了梯度在正向区间衰减详见 chapter_multilayer-perceptrons/mlp.md。针对梯度消失常见的应对手段包括重参数化reparameterization重新设计问题的参数表达往往能显著改善优化路径良好的参数初始化让初始参数避开导数接近零的危险区域换用 ReLU 等导数不衰减的激活函数。小结最小化训练误差并不能保证找到最佳参数集来最小化泛化误差优化问题可能有许多局部最小值由于问题通常是非凸的优化问题可能拥有更多鞍点梯度消失可能导致优化停滞重参数化通常有所帮助对参数进行良好初始化也可能是有益的。练习考虑一个单隐藏层的简单 MLP隐藏层维度为 $d$、单个输出。证明对任意局部最小值至少存在 $d!$ 个行为完全相同的等价解提示隐藏层神经元重排不改变输出。假设 $\mathbf{M}$ 是对称随机矩阵元素 $M_{ij} M_{ji}$ 各自从某种概率分布 $p_{ij}$ 中抽取且 $p_{ij}(x) p_{ij}(-x)$对称分布证明特征值的分布也是对称的对任意特征向量 $\mathbf{v}$其关联特征值 $\lambda$ 满足 $P(\lambda 0) P(\lambda 0)$为什么上式并不蕴含 $P(\lambda 0) 0.5$你还能想到深度学习优化中哪些其他挑战提示梯度爆炸、条件数、非光滑目标、批大小与学习率耦合等假设你想在真实的马鞍上平衡一个真实的球为什么这很难你能把这种效应利用到优化算法中吗提示参考牛顿法对 Hessian 负特征值方向的修正思路延伸阅读chapter_optimization/index.md优化算法章节总览含 SGD、动量、AdaGrad、Adam、学习率调度等完整目录chapter_optimization/minibatch-sgd.md小批量随机梯度下降解释梯度噪声如何帮助参数逃离局部最小值chapter_optimization/convexity.md凸优化基础讨论凸函数不存在鞍点/局部最小值即全局最小值的例外chapter_multilayer-perceptrons/underfit-overfit.md模型选择、欠拟合与过拟合详细区分训练误差与泛化误差chapter_multilayer-perceptrons/mlp.md激活函数讨论包括 tanh 与 ReLU 的导数行为d2l/torch.pyset_figsize、plot等绘图封装的 PyTorch 实现MXNet、TensorFlow、Paddle 版本见 d2l/mxnet.py、d2l/tensorflow.py、d2l/paddle.py。赞分享人工智能深度学习机器学习教程【免费下载链接】d2l-zh《动手学深度学习》面向中文读者、能运行、可讨论。中英文版被70多个国家的500多所大学用于教学。项目地址https://gitcode.com/GitHub_Trending/d2/d2l-zh点击查看免费下载相关推荐d2l-en 优化入门指南深度学习中的优化目标、局部最小值、鞍点与梯度消失d2l en 优化入门指南深度学习中的优化目标、局部最小值、鞍点与梯度消失 导读 本文基于《Dive into Deep Learning》d2l en开文档教程人工智能深度学习NLP计算机视觉强化学习《动手学深度学习》数值稳定性与模型初始化梯度消失/爆炸的成因与 Xavier 初始化实战《动手学深度学习》数值稳定性与模型初始化梯度消失/爆炸的成因与 Xavier 初始化实战 导读 深层神经网络的训练是否收敛、收敛多快很大程度上取决于一个常被人工智能深度学习机器学习教程《动手学深度学习》数值稳定性与模型初始化从梯度消失到 Xavier 初始化的完整指南《动手学深度学习》数值稳定性与模型初始化从梯度消失到 Xavier 初始化的完整指南 本章节是《动手学深度学习》d2l zh多层感知机篇的核心内容之一系人工智能深度学习机器学习教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表