可视化深度神经网络的损失景观......但我们能相信它们吗?
点击上方关注,All in AI中国
介绍
近年来,已经开发出一种方法来可视化深度神经网络的损失情况。我个人认为这是一个巨大的突破,但是,我对创建的可视化的有效性感到有点怀疑。今天我将研究作者的可视化方法,并介绍一些我认为很酷的其他方法。
方法
创造损失景观的整个过程非常简单直接。
- 训练网络
- 创建随机指示
- 向固定权重添加不同数量的扰动,并查看损失值是如何变化的
唯一需要注意的是如何创建随机方向。让我们来看看作者的方法。
他们的方法被称为“过滤器归一化”,它很容易理解。 (这是作者代码的链接https://github.com/tomgoldstein/loss-landscape)。基本上,对于具有4维的tensor,例如(64,3,3,3),我们将使标准方面与第一维相匹配,因此(64,1,1,1)在权重的范数和随机方向之间。 (在更简化的术语中,我们可以将其理解为匹配权重和随机方向之间的比例)。
以上是运行authors代码时的部分结果。现在我们可以利用tensor运算来简化整个过程。 (我将在稍后展示)
网络
绿球→输入图像(64,64,3)
蓝色矩形→卷积+ ReLU激活
红色矩形→软最大输出
对于这篇文章,我在CIFAR 10数据集上训练了三个九层完全卷积神经网络(如上所示)。没有任何规范化,具有批量标准化和本地响应规范化。
从上面的图中,我们可以看到具有批量标准化的网络已经实现了最高性能。
从现在开始,我将按照以下方式调用每个网络
Normal:没有任何规范化层的网络
Batch Norm:具有批量标准化层的网络
Local Norm:具有本地响应规范化层的网络
滤波器归一化
上面的代码片段显示了如何使用tensor操作进行过滤器归一化。
当我们使用滤波器归一化方法来可视化损失景观时,我们可以看到每个景观看起来并没有那么不同。只有在我们以对数尺度显示景观的情况下,我们才能看到,实际上,局部响应规范化的格局要更加清晰。
当我们将所有三个图以原始比例叠加在一起时,我们可以看到它们看起来有多相似。
过滤正交化
上述方法只是作者方法的一个简单修改,我们从简单的高斯分布生成随机方向,但是通过QR分解我们使方向正交化。
当我们将方向与不同维度正交化时,我们可以立即看到创建的损失景观之间是如何彼此不同的。与作者的方法相比,我们可以看到三个网络之间的损失情况存在差异。
正交权重投影
这与滤波器正交化大致相同,唯一的区别在于,在收敛权重的不同维度上执行ZCA白化,而不是由高斯分布生成。
与Filter Orthogonalization类似,我们可以看到生成的可视化之间存在一些差异。
权重的原理方向
最后的方法是在第一个主要方向上扰动权重,仅在不同维度之间。
我们可以清楚地看到生成的损失格局之间的差异。
讨论
我发这篇文章的唯一原因是为了表明,根据我们使用的方向,创建的损失格局可能会发生巨大变化。因此,我们需要质疑生成的损失格局的有效性,它们是否真正反映了受过训练的网络的特征。
代码
要访问用于创建可视化的代码,请单击此处Daily-Neural-Network-Practice-3/0 create viz.ipynb at master · JaeDukSeo/Daily-Neural-Network-Practice-3 · GitHub
要访问整个博客文章的代码,请单击此处Daily-Neural-Network-Practice-3/Loss LanScape at master · JaeDukSeo/Daily-Neural-Network-Practice-3 · GitHub
编译出品