马里兰大学论文:可视化神经网络的损失函数

选自arXiv

机器之心编译

参与:黄小天、刘晓坤

在这篇论文中,研究人员提出了「过滤器归一化」方法,用于可视化损失函数的曲率,并对损失函数进行了实验性的并行对比。他们进一步探索了多种因素(网络架构、超参数、优化器等)对损失函数形态的影响,以及损失函数形态对泛化能力的影响。

神经网络的训练需要最小化高维度非凸损失函数——这是一项理论上很难、有时却易于实践的任务。尽管训练一般性神经损失函数(Blum & Rivest, 1989)是 NP-hard,简单的梯度方法却经常能找到全局最小值(global minimizer,带有零或接近于零的训练损失的参数配置),甚至在训练之前当数据和标签已被随机化时(Zhang et al., 2017)也有效。但是,这有效却不通用;神经网络的可训练性高度依赖于网络架构设计、优化器和变量初始化方式的选择,以及大量其他考虑。不幸的是,这些选择的每一个对底层损失函数的几何结构的影响还不清楚。由于评估损失函数成本高昂(需要循环遍历训练集中的所有数据点),因此该领域的研究仍然主要是理论性的。

本文目标是使用高分辨率可视化来提供神经损失函数的经验性特征,并探索不同网络架构的选择对损失函数的影响。进而,本文探索了神经损失函数的非凸结构与其可训练性的关系,以及神经极小值(即它们的尖锐度/平坦度和周遭的形状)的几何如何影响其泛化能力。

为了以有意义的方式达到目的,本文提出了一种简单的「过滤器归一化」(filter normalization)方案,能够并行比较由不同方法发现的不同极小值。然后,本文通过可视化来探索由不同方法发现的极小值的尖锐度/平坦度,以及网络架构选择(跳过连接的使用、过滤器数量、网络深度)对损失函数的影响。本文目标是理解损失函数几何形状的不同是如何影响神经网络的泛化能力的。

图 2:通过对 VGG-9 使用小批次和大批次方法得到的解的 1D 线性差值。蓝线是损失值,红线是准确率。实线是训练曲线,虚线是测试曲线。小批次在横坐标的 0,大批次在横坐标的 1。

表 1:VGG-9 使用不同的优化算法和超参数在 CIFAR-10 上的测试误差。

图 3:权重的直方图。权重衰变率为 0、批尺寸较小的时候得到的权重较大。权重衰变率不为 0、批尺寸较大的时候得到的权重较小。

图 4:使用不同的优化算法得到的极小值的形状,其中使用了不同的批尺寸和权重衰变率。每个子图的下方标出了优化器、批尺寸和测试误差。第一行使用的权重衰变率为 0,第二行使用的权重衰变率为 5e-4。

图 5:通过 SGD 和小批尺寸、大批尺寸得到的解的 2D 可视化。和图 4 类似,第一行使用的权重衰变率为 0,第二行使用的权重衰变率为 5e-4。

图 6:不同网络的解的 2D 可视化。

表 2:不同架构的损失值和误差。

图 8:优化器轨迹的无效可视化。这些可视化方法遭遇了高维空间的随机方向正交性带来的困难。

图 9:对 VGG-9 使用归一化的 PCA 方向的投影学习轨迹。每个子图中的左图使用的批尺寸为 128,右图使用的批尺寸为 8192。

结语

本文提出了一种新的、更精确的可视化技术,能够为神经网络实践者面对的众多选择的结果提供见解,包括网络架构、优化器选择和批大小。

近年来神经网络飞速发展。要在未来取得更多进展,需要对神经网络的结构有更全面的理解。本文希望通过有效的可视化技术以及理论的持续进步,可以带来更快的训练、更简单的模型以及更好的泛化。

研究表明,当神经网络很深或没有跳过连接的时候,损失函数的曲面会从凸面的、平滑的转变成杂乱的、尖锐的,进而大大降低泛化能力和可训练性。

论文:Visualizing the Loss Landscape of Neural Nets

论文链接:https://arxiv.org/abs/1712.09913

神经网络的训练依赖于寻找高度非凸损失函数的(足够好的)极小值的能力。利用特定的网络架构设计(例如,跳过连接)生成的损失函数可以使训练过程变得更简单,利用精心调整的训练参数(批尺寸、学习率、优化器)可以达到使泛化能力更好的极小值。然而,对于这些规律,以及这些因素对损失函数形态的影响,并没有得到很好的理解。在这篇论文中,我们用多种可视化方法探索了神经网络损失函数结构,以及损失函数的形态对泛化能力的影响。首先,我们介绍了一种简单的「过滤器归一化」(filter normalization)方法帮助我们可视化损失函数的曲率,并对损失函数进行有意义的并排对比。然后我们使用多种可视化方法探索了网络架构对损失函数形态的影响,以及训练参数对极小值的形态的影响。

本文为机器之心编译,转载请联系本公众号获得授权。

✄------------------------------------------------

本文来自企鹅号 - 机器之心媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏赵俊的Java专栏

从源码上分析 ArrayList

1231
来自专栏刘君君

JDK8的HashMap源码学习笔记

3638
来自专栏Phoenix的Android之旅

Java 集合 Vector

List有三种实现,ArrayList, LinkedList, Vector, 它们的区别在于, ArrayList是非线程安全的, Vector则是线程安全...

702
来自专栏xingoo, 一个梦想做发明家的程序员

20120918-向量实现《数据结构与算法分析》

#include <iostream> #include <list> #include <string> #include <vector> #include...

2026
来自专栏Java Edge

AbstractList源码解析1 实现的方法2 两种内部迭代器3 两种内部类3 SubList 源码分析4 RandomAccessSubList 源码:AbstractList 作为 Lis

它实现了 List 的一些位置相关操作(比如 get,set,add,remove),是第一个实现随机访问方法的集合类,但不支持添加和替换

1402
来自专栏拭心的安卓进阶之路

Java 集合深入理解(12):古老的 Vector

今天刮台风,躲屋里看看 Vector ! 都说 Vector 是线程安全的 ArrayList,今天来根据源码看看是不是这么相...

2637
来自专栏计算机视觉与深度学习基础

Leetcode 114 Flatten Binary Tree to Linked List

Given a binary tree, flatten it to a linked list in-place. For example, Given...

2258
来自专栏拭心的安卓进阶之路

Java 集合深入理解(6):AbstractList

今天心情比天蓝,来学学 AbstractList 吧! ? 什么是 AbstractList ? AbstractList 继承自 AbstractCollec...

21610
来自专栏后端之路

LinkedList源码解读

List中除了ArrayList我们最常用的就是LinkedList了。 LInkedList与ArrayList的最大区别在于元素的插入效率和随机访问效率 ...

21810
来自专栏desperate633

LeetCode Invert Binary Tree题目分析

Invert a binary tree. 4 / \ 2 7 / \ / \1 3 6 9 to4 / \ 7 2 / \ / \9 6 3 1 Tri...

1061

扫码关注云+社区