为什么很难训练深度神经网络?

简介: 自1994年开始,大家都认为深度神经网络难以训练的原因是由于梯度消失,然而本文作者通过深度线性网络的例子证明网络性能变差的原因并不是梯度消失,而是由于权重矩阵的退化导致模型的有效自由度减少,从而使得深度神经网络难以训练。

在这篇文章中,我将解释在深度神经网络训练中一个常见的误解。似乎大家都认为,训练深度神经网络很难的原因主要是因为梯度消失(或爆炸)的问题。“梯度消失”是指通过隐藏层从后向前看,梯度会变的越来越小。这也意味着,前面层的学习会显著慢于后面层的学习,所以学习会卡住,除非梯度变大。这个想法至少可以追溯到Bengio等人(1994年),如今这仍然被用于解释为什么很难训练深度神经网络。
我们首先考虑一个简单的情景:训练一个深度线性网络学习一个线性映射。从计算的角度来看,深度线性网络并不令人感兴趣,但是Saxe等人 (2013)认为,在线性网络学习仍然可以提供有关非线性网络学习的信息。因此,我们从这个简单的场景开始。下图是30层网络的学习曲线和初始梯度范数。
1
这些结果在图中标记为“Fold 0”。这里的梯度是关于层激活值的,网络权重通过 进行初始化。训练损失开始时迅速下降,但不会消失(或爆炸),随后达到一个稳定的次优值。随着训练的进展,他们变得越来越小,但是这是可以预料的,而且从某种意义上说,这里的梯度“太小”并不清楚:
2
为了说明收敛到局部最优解的现象和梯度范数的大小本身没有任何关系,现在我将介绍一个会增加梯度范数的方法,但会恶化性能。如下图(蓝色):
3
那么,我做了什么?我只是简单地改变了初始化。原始网络中的每个初始权重矩阵是一个64X64的矩阵(使用标准 初始化进行初始化)。在以蓝色显示的网络中,我将每个初始权重矩阵的前半部分复制到后半部分(初始权重矩阵被“Fold”一次,所以我将它们表示为“Fold 1”网络)。这降低了初始权重矩阵的秩,并使其更加退化。请注意,这种运算仅应用于初始权重矩阵,并没有加上其它对学习过程的约束,训练过程将保持不变。以下是梯度范数经过训练之后的效果:
4
这个方法总体上增大了梯度范数,但是性能明显变差了。接下来我将介绍另一种缩小梯度范数,但会大大提高性能的方法。这里是(绿色):
5
这种新的方法将权重矩阵初始化为正交。正交矩阵是固定(Frobenius)范数的矩阵中退化程度最低的,其中退化度可以用不同的方式来衡量,例如奇异值小于给定常数的比例。以下是梯度范数经过训练之后的效果:
6
如果梯度范数的大小不是训练困难的原因,那原因是什么呢?答案是模型的退化总体上决定了训练性能。为什么退化会损害训练性能?因为参数空间中学习的退化速度大大减慢,导致减少了模型的有效维数,就像上面的例子一样。所以,上面的“Fold 0”网络和“Fold 1”网络虽然梯度范数值很好,但网络的可用自由度对这些梯度范数的贡献极其不均衡:绝大多数(退化的)自由度根本没有任何贡献。正如 Saxe 等人的论文表明,随着相乘矩阵的数量(即网络深度)的增加,这种矩阵的乘积变得越来越退化。这里分别是1层,10层和100层网络的一个例子:
7
随着深度的增加,积矩阵的奇异值变得越来越集中0。这个结果不仅与线性网络有关,类似的事情也发生在非线性网络中:随着深度的增加,给定层中隐藏单元的维度变得越来越低维化,即越来越退化。事实上,在有硬饱和边界的非线性网络中(例如 ReLU 网络),随着深度增加,退化过程会变得越来越快。Duvenaud 等人 2014 年的论文里展示了关于该退化过程的可视化:
8
随着深度的增加,输入空间(左上角所示)会在输入空间中的每个点处被扭曲成越来越细的单丝,只有一个与细丝正交的方向影响网络的响应。沿着这个方向,网络实际上对变化变得非常敏感。
最后,在这一点上,我忍不住要提起我的论文。在本文中,通过一系列的实验,我认为退化问题严重地影响了非线性网络的训练,采用跳过连接(ResNet 中采用的重要方法)的方式训练深度网络可以打破这种退化。我怀疑像Batch Normalization或 layer normalization等方法除了其他潜在的独立机制外(如减少最初提出的内部变量转换),在一定程度上是通过类似的打破退化机制训练深层网络的。众所周知,分裂归一化是一种有效处理隐藏单元响应的方法,而这也可以被看作是一种打破退化的机制。

以上为译文。
**
文章原标题《Why is it hard to train deep neural networks? Degeneracy, not vanishing gradients, is the key》,译者:黄小凡,审校:袁虎。

文章为简译,更为详细的内容,请查看原文**

目录
打赏
0
0
0
0
1807
分享
相关文章
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
这篇文章介绍了如何使用PyTorch框架,结合CIFAR-10数据集,通过定义神经网络、损失函数和优化器,进行模型的训练和测试。
324 2
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
这篇文章详细介绍了如何通过可视化深度学习中每层特征层来理解网络的内部运作,并使用ResNet系列网络作为例子,展示了如何在训练过程中加入代码来绘制和保存特征图。
118 1
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
YOLOv11改进策略【模型轻量化】| 替换骨干网络为EfficientNet v2,加速训练,快速收敛
YOLOv11改进策略【模型轻量化】| 替换骨干网络为EfficientNet v2,加速训练,快速收敛
177 18
YOLOv11改进策略【模型轻量化】| 替换骨干网络为EfficientNet v2,加速训练,快速收敛
DeepSeek生成对抗网络(GAN)的训练与应用
生成对抗网络(GANs)是深度学习的重要技术,能生成逼真的图像、音频和文本数据。通过生成器和判别器的对抗训练,GANs实现高质量数据生成。DeepSeek提供强大工具和API,简化GAN的训练与应用。本文介绍如何使用DeepSeek构建、训练GAN,并通过代码示例帮助掌握相关技巧,涵盖模型定义、训练过程及图像生成等环节。
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v2,加速训练,快速收敛
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v2,加速训练,快速收敛
43 1
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
153 8
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
159 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
深度学习笔记(五):学习率过大过小对于网络训练有何影响以及如何解决
学习率是深度学习中的关键超参数,它影响模型的训练进度和收敛性,过大或过小的学习率都会对网络训练产生负面影响,需要通过适当的设置和调整策略来优化。
1019 0
深度学习笔记(五):学习率过大过小对于网络训练有何影响以及如何解决
【机器学习】揭秘反向传播:深度学习中神经网络训练的奥秘
【机器学习】揭秘反向传播:深度学习中神经网络训练的奥秘
深度学习实践:构建并训练卷积神经网络(CNN)对CIFAR-10数据集进行分类
本文详细介绍如何使用PyTorch构建并训练卷积神经网络(CNN)对CIFAR-10数据集进行图像分类。从数据预处理、模型定义到训练过程及结果可视化,文章全面展示了深度学习项目的全流程。通过实际操作,读者可以深入了解CNN在图像分类任务中的应用,并掌握PyTorch的基本使用方法。希望本文为您的深度学习项目提供有价值的参考与启示。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等