损失地形(loss landscape)
/ LOSS LAND-skayp /
损失地形,是一种把训练想象成「跨越一片地形的旅程」的方式。想象模型权重每一种可能的设定,都是一张巨大地图上的一个位置,而那个设定下的损失,就是那里的海拔。高地意味着糟糕的预测;低地意味着好的预测。于是训练就是在这片地形上往下坡走、寻找谷地的过程。这是个比喻,却是个用来建立直觉时极其管用的比喻。
麻烦在于维度。一个有一百万个权重的模型,它的地形有一百万维,谁也没法真的把它想象出来——我们那幅「山丘与谷地」的图景,是某种大到无法理解的东西的二维或三维卡通。但这幅卡通抓住了一些真实的特征:有谷地(极小值)、有山口(鞍点)、有进展缓慢的平坦高原、有梯度爆炸的陡崖、还有路径来回锯齿的山脊。优化器的全部工作,就是只凭局部的坡度信息,在这片看不见的地形里导航。
为什么要在意一个比喻?因为地形的形状解释了训练为什么会有那样的表现。一片平滑、碗状(凸)的地形只有一个谷底,容易下行;深层网络那种崎岖、非凸的地形则有许多个。越来越多的研究表明,泛化得最好的那些地形,往往是宽阔、平坦的谷地(权重稍有变动几乎不抬高损失),而非又窄又尖的谷地——而像跳跃连接、归一化这类技巧之所以管用,部分原因正是它们把地形抚平成了更易于跨越的样子。
取一个只有两个权重的模型,把每一对 (w1, w2) 对应的损失画成高度。你会得到一个真正可以旋转、观看的三维曲面——有峰、有谷、有一两个鞍点。现在把这同一幅图换成一百万根轴、而非两根:那才是优化器在其中盲目导航的真实地形,它只能感觉到脚下的坡度。
我们那幅「山丘与谷地」的图,是一个百万维现实的三维卡通。
那幅平滑的「山丘与谷地」图,是一个有益的谎言。真实的高维地形,其行为方式常常被低维直觉判断错——最显著的是,平坦的鞍点比真正的坑洞多得多,而宽阔平坦的谷地往往比又窄又深的谷地泛化得更好。