深度神经⽹络为何很难训练

系列文章:

上一章提到了神经网络的一种普遍性,比如说不管目标函数是怎样的,神经网络总是能够对任何可能的输入得到一个近似的输出。

普遍性告诉我们神经⽹络能计算任何函数;而实际经验依据提⽰深度⽹络最能适⽤于学习能够解决许多现实世界问题的函数

而且理论上我们只要一个隐藏层就可以计算任何函数,第一章我们就用如下的网络结构完成了一个手写字识别的模型:

shadow-image-20201119214307565

这时候,大家心中可能都会有这样一个想法,如果加大网络的深度,模型的识别准确率是否会提高?

shadow-image-20201119214431316

随即我们会基于反向传播的随机梯度下降来训练神经网络,但实际上这会产生一些问题,因为我们的深度神经网络并没有比浅层网络好很多。那么此处就引出了一个问题,为什么深度神经网络相对训练困难?

仔细研究会发现:

  • 如果网络后面层学习状况好的时候,前面的层次经常会在训练时停滞不前

  • 反之情况也会发生,前面层训练良好,后面停滞不前

实际上,我们发现在深度神经⽹络中使⽤基于梯度下降的学习⽅法本⾝存在着内在不稳定性,这种不稳定性使得先前或者后⾯神经网络层的学习过程阻滞。

消失的梯度问题

我们在第一章识别手写字曾经以MNIST数字分类问题做过示例,接下来我们同样通过这个样例来看看我们的神经网络在训练过程中究竟哪里出了问题。

简单回顾一下,之前我们的训练样本路径为/pylab/datasets/mnist.pkl.gz,相关案例代码在pylab都可以找到(我稍做了改动以支持Python3)。

import mnist_loader
import network2

training_data, validation_data, test_data = mnist_loader.load_data_wrapper()
# 输入层 784
# 隐藏层 30
# 输出层 10
sizes = [784, 30, 10]
net = network2.Network(sizes=sizes)

# 随机梯度下降开始训练
net.SGD(
    training_data,
    30,
    10,
    0.1,
    lmbda=5.0,
    evaluation_data=validation_data,
    monitor_evaluation_accuracy=True,
)

"""
Epoch 0 training complete
Accuracy on evaluation data: 9280 / 10000
Epoch 1 training complete
Accuracy on evaluation data: 9391 / 10000
......
Epoch 28 training complete
Accuracy on evaluation data: 9626 / 10000
Epoch 29 training complete
Accuracy on evaluation data: 9647 / 1000
"""

最终我们得到了分类的准确率为 96.47%,如果加深网络的层数会不会提升准确率呢?我们分别尝试一下几种情况:

# 准确率 96.8%
net = network2.Network([784, 30, 30, 10])
# 准确率 96.42%
net = network2.Network([784, 30, 30, 30, 10])
# 准确率 96.28%
net = network2.Network([784, 30, 30, 30, 30, 10])

这说明一种情况,尽管我们加深神经网络的层数以让其学到更复杂的分类函数,但是并没有带来更好的分类表现(但也没有变得更差)。

那么为什么会造成这种情况,这是我们接下来需要思考的问题。可以考虑先假设额外的隐藏层的确能够在原理上起到作⽤,问题是我们的学习算法没有发现正确的权值和偏置。

下图(基于[784, 30, 30, 10]网络)表⽰了每个神经元权重和偏置在神经⽹络学习时的变化速率,图中的每个神经元有⼀个条形统计图,表⽰这个神经元在⽹络进⾏学习时改变的速度。更⼤的条意味着更快的速度,而小的条则表⽰变化缓慢。

shadow-20201217162947909

可以发现,第⼆个隐藏层上的条基本上都要⽐第⼀个隐藏层上的条要⼤;所以,在第⼆个隐藏层的神经元将学习得更加快速。这并不是巧合,前⾯的层学习速度确实低于后⾯的层。

我们可以继续观察学习速度的变化,下方分别是2~4个隐藏层的学习速度变化图:

shadow-image-20201217163602988
shadow-image-20201217163721344
shadow-image-20201217163735287

同样的情况出现了,前⾯的隐藏层的学习速度要低于后⾯的隐藏层。这⾥,第⼀层的学习速度和最后⼀层要差了两个数量级,也就是⽐第四层慢了 100 倍。

我们可以得出一个结果,在某些深度神经⽹络中,在我们隐藏层反向传播的时候梯度倾向于变小;这意味着在前⾯的隐藏层中的神经元学习速度要慢于后⾯的隐藏层,这个现象也被称作是消失的梯度问题。

导致梯度消失的原因

核心原因在于深度神经网络中的梯度不稳定性,会造成前面层中梯度消失或者梯度爆炸

看下面这个既简单的深度神经网络,每⼀层都只有⼀ 个单⼀的神经元:

shadow-image-20201217170827163

首先回顾几个计算公式:

  • 个神经元的输出: 其中 就是Sigmoid函数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 近些年来,随着深度学习和卷积神经网络的兴起,基于卷积神经网络的显著目标检测受到了重视和研究。以全卷积神经网络为基础的显著目标检测可以实现端到端的像素级检测和分割,同时卷积神经网络还能够提取出图像的高级语义信息。 ### 回答2: 近年来,随着深度学习和卷积神经网络的兴起,基于卷积神经网络的显著目标检测受到了广泛的重视和深入的研究。这种检测方法是以全卷积神经网络为基础的,它能够实现端到端的像素级检测和分割,同时还可以提取出图像的高级语义信息。 传统的目标检测方法通常需要多个步骤来完成,例如提取特征、目标定位、分类等。而基于卷积神经网络的显著目标检测方法,通过神经网络自动学习图像的特征,无需手动设计特征提取器,从而减少了人为因素的干扰。 全卷积神经网络可以将图像转化为特征图,并通过进一步的卷积操作获得更加抽象的特征表示。这些特征表示不仅包含了丰富的低级特征,如边缘和纹理,还包含了高级语义信息,例如目标的形状、大小和位置等。 基于卷积神经网络的显著目标检测方法在许多领域有着广泛的应用,例如计算机视觉、图像处理和自动驾驶等。这种方法不仅能够准确地检测目标,还可以实现目标的像素级分割,从而提供更加精细的目标边界和轮廓信息。 总之,基于卷积神经网络的显著目标检测方法具有很大的潜力和优势。它不仅能够实现端到端的像素级检测和分割,还能够提取出图像的高级语义信息,为其他相关任务提供更多可能性。 ### 回答3: 近几年来,深度学习和卷积神经网络的兴起使得基于卷积神经网络的显著目标检测得到了广泛的重视和研究。传统的目标检测方法通常通过提取图像中物体的特征然后用分类模型进行判断,但这种方法在目标定位和语义分割方面存在许多缺陷。而基于全卷积神经网络的显著目标检测可以实现端到端的像素级检测和分割,有效解决了传统方法的缺陷。 全卷积神经网络在目标检测任务中的优势主要体现在以下几个方面。首先,它能够对图像进行端到端的像素级检测和分割,不需要额外的后处理,大大简化了目标检测的流程。其次,卷积神经网络具备自动学习特征的能力,可以从数据中提取出图像的高级语义信息,从而更准确地判断目标的位置和边界。 通过深度学习和卷积神经网络,显著目标检测在实际应用中取得了显著的进展。例如,在自动驾驶领域,显著目标检测可以准确识别道路上的交通标志和行人等重要目标,为无人驾驶车辆的安全行驶提供支持。此外,显著目标检测还可以应用于图像编辑、视频处理以及图像检索等领域,为各种应用场景提供更加精准和高效的图像分析和处理方法。 总之,基于全卷积神经网络的显著目标检测在近年来得到了广泛的关注和研究,其优势在于实现了端到端的像素级检测和分割,并能提取出图像的高级语义信息。随着技术的不断进步和应用的扩大,我们可以期待显著目标检测在各个领域的更广泛应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值