几个月前,我的五岁女儿从幼儿园回家,对我们宣称数学是愚蠢的!自那以后,我们一直在努力(至今成效显著)激发她对数学的热情,并为她的数学成就感到自豪。其中一项成功是她现在对分形产生了浓厚的兴趣,特别喜欢观看曼德布罗特集和曼德尔球分形的深度缩放视频,还喜欢吃罗马花椰菜。
女儿的兴趣让我对分形有了更多思考,并联想到我热衷的人工神经网络。
我发现生成许多分形的方法与训练神经网络的过程有相似之处:
- 都涉及反复应用一个函数到其输出上。
- 在两种情况下,该函数都有控制其行为的超参数。
- 反复应用函数会产生因超参数不同而或发散至无穷大或保持有界的状态。
这种启发下,我在神经网络训练的超参数景观中寻找分形结构,并确实发现了它!神经网络训练成功或失败的超参数边界具有(美丽、有机的)分形结构。以下细节及精彩视频。
对于更技术性的介绍,请参阅短篇论文《神经网络可训练性的边界是分形的》。
神经网络训练与超参数
为了训练人工神经网络,我们需要迭代更新其参数以提高性能。通常通过损失函数进行梯度下降来实现这一目标。损失函数衡量了神经网络的表现。通过梯度下降降低损失,我们可以找到使神经网络表现良好的参数值。
训练依赖于超参数,它们指定了参数更新步骤的执行方式和网络初始化的方式。例如,常见的超参数是学习率,它设置了每次训练步长模型参数更新的幅度。
如果学习率过大,参数更新步长就会太大,导致训练过程中参数发散(趋向无穷),进而使得训练损失变得非常糟糕。如果学习率过小,训练步长太短,需要大量的训练步骤才能训练好神经网络,这会使训练变得缓慢且成本高昂。实际上,我们通常希望在不使参数发散的情况下尽可能增大学习率。
可视化超参数空间
我们可以可视化调整超参数(如学习率)如何影响神经网络的训练速度或发散程度。在下图中,每个像素对应相同网络、相同初始化和相同数据的训练运行,但使用不同的超参数。蓝色至绿色表示训练收敛,网络成功训练;红色至黄色表示训练发散。颜色越浅,收敛或发散的速度越快。
实验中使用的神经网络简单小巧,包含输入层、tanh非线性层和输出层。图像中,x轴改变输入层参数的学习率,y轴改变输出层参数的学习率。
图1: 超参数景观:展示神经网络训练成功如何取决于学习率超参数。每个像素代表一次指定输入和输出层学习率的训练运行。蓝色-绿色表示训练收敛,红色-黄色表示训练发散。最亮的蓝绿色区域表示最佳性能的超参数,通常靠近训练收敛与发散的边界区域,这是普遍规律。
神经网络训练的最佳超参数——显示为最淡的蓝绿色,即网络训练最快的部分——接近于训练收敛和发散之间的边界。这是一个一般性质。神经网络训练的最佳超参数往往处于稳定性边缘。例如,如同上述提到的,在网格搜索中,最佳学习率通常是能收敛而非发散的最大学习率。
神经网络可训练性的边界是分形的
由于在此边界附近能找到最佳超参数,因此我们对其进行了深入研究。请播放下面的视频(建议全屏播放并提高播放分辨率):
随着我们对导致训练成功(蓝色)和失败(红色)的超参数配置边界的放大,我们在各个尺度上都发现精致的结构。神经网络可训练性的边界是分形的!
(如果您观看到视频最后,会注意到画面变得方块状。在训练网络时,我使用了float64
数值类型,它可以存储大约16位小数的精度。当放大到需要超过16位精度来区分像素时,就会出现这种情况。)
这种行为具有普适性。无论更改数据、架构还是观察的超参数,我们都能看到分形。不过,对于不同的选择,分形看起来会有所不同。网络和训练设计决策也有艺术效果!
图2: 我尝试的所有实验配置中,神经网络训练产生的分形。摘自相关论文,展示了每种实验条件下的分形部分。实验条件改变了网络中的非线性、数据集大小、批量训练与完整批处理,以及观察的超参数。
以下是图2中总结的多样化配置的剩余分形缩放视频。您可以在此Colab中找到这些实验的代码。
- 将激活函数改为恒等函数,即网络是一个深线性网络,没有非线性。
- 改变激活函数为ReLU,这个分形很有趣,因为ReLU的分段线性结构在分形的直线上明显可见,将区域划分开来。
- 使用单个数据点训练(其他实验使用与模型自由参数数量相同的训练数据点)。
- 使用16的批量大小训练(其他实验使用完整的批量训练)。
- 观察不同的超参数:添加了一个设置网络权重初始化均值的超参数。我根据这个权重初始化超参数(x轴)和单一学习率超参数(y轴)来可视化训练成功。其他实验则根据各层的学习率超参数来可视化训练成功。这个分形格外美观,我喜欢它如何呈现周期性的模式,其中看似噪声的内容在更高分辨率下解析为结构。
其实并不那么奇怪
现在我已经向您展示了令人惊讶和