深度学习中的优化是一项极度复杂的任务,本文是一份基础指南,旨在从数学的角度深入解读优化器。一般而言,神经网络的整体性能取决于几个因素。通常最受关注的是网络架构,但这只是众多重要元素之一。还有一个常常被忽略的元素,就是用来拟合模型的优化器。 为了说明优化的复杂性,此处以 ResNet 为例。ResNet18 有 11,689,512 个参数。寻找最佳参数配置,也就是在 11,689,512 维的空间中定位一个点。如果暴力搜索的话,可以把这个空间分割成网格。假设将每个维度分成十格,那么就要检查 10^11689512(10 的 11689512 次方)组可能的配置,对每一组配置都要计算损失函数,并找出损失最小的配置。 10 的 11689512 次方是一个什么概念?已知宇宙中的原子才只有 10^83 个,宇宙的年龄只有 4.32 x 10^17 秒(约 137 亿年)。如果从大爆炸开始,每秒检查 10^83 个原子,我们现在才检查了 4.32*10^1411 个,远远小于上述网格可能的配置数。 所以优化器非常重要。它们就是用来处理这种难以理解的复杂性的。 有了它,你就可以将训练网络的时间压缩在几天内,而不是数十亿年间 。下文将从数学角度深入研究优化器,并了解它们是如何完成这一看似不可能的任务的。 优化的基础 我们从简单的地方开始。假设要最大化单变量函数。(在机器学习中,通常以最小化损失函数为目标,不过最小化就等同于最大化函数的负值。) 定义: 对函数作图: 最直观的方法是将这条线划分成网格,检查每个点的值,然后选择函数值最大的点 。正如引言中所说,这是不可扩展的,因此要找其他解决方案。将这条线想象成一座要爬到顶峰的山。假设位于红点处: 如果要到达山峰,该往哪个方向走?当然,应该向斜率增加的地方前进。这个概念对应的是函数的导数。在数学上,导数定义为: 乍看之下,导数非常神秘,但它的几何意义非常简单。仔细看一下求导的点: 对任何 x 和 y,通过 f(x) 和 f(y) 的这条线定义为: 一般而言,如果用 at+b 定义一条直线,那称 a 为这条线的斜率。这个值既可以是正值也可以是负值,斜率为正,直线向上走;斜率为负,直线向下走。绝对值越大,直线越陡。如果像导数定义中一样,让 y 越来越接近 x,那么这条线就会成为 x 处的切线。 (图注)在 x=-2.0 时,f(x)的切线和逼近线。 切线为: 切线方向记为向量(1,f’(x))。 如果从 x_0=-2.0 的位置开始登山,应该沿切线上升的方向前进。如果切线的斜率较大,可以大步迈进;如果斜率接近零,应该小步小步往上爬,以免越过峰值。如果用数学语言表示,我们应该用下面这种方式定义下一个点:
帕累托最优生活例子_深度学习中的优化:梯度下降,确定全局最优值或与之接近的局部最优值...
最新推荐文章于 2022-09-09 12:15:00 发布
本文探讨了深度学习中的优化问题,通过梯度下降寻找全局最优或局部最优,同时结合图网络和表示学习的最新研究,阐述了无监督、半监督、弱监督及元学习等机器学习方法。
摘要由CSDN通过智能技术生成