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

深度学习之参数初始化—Xavier初始化 深度学习——Xavier初始化方法详细介绍,本文介绍一下深度学习参数初始化问题中耳熟能详的参数初始化方法——Xavier初始化。 阅读详情

系列文章:

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

“

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

”

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

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函数

让我们通过公式追踪一下 的变化趋势:

以小见大一下,对于上述式子,可以做一下拆解:

故:

其实可以直观地看出上述表达式是一系列如 的乘积,其中有sigmoid的导数,我们可以观察一下 的函数图像( ):

shadow-image-20201217223631570

绘图代码:

import matplotlib.pyplot as plt
import numpy as np

def sigmoid_d(x):
    y = 1 / (1 + np.exp(-x))
    return y * (1 - y)

x = np.arange(-4, 4, 0.1)
y = sigmoid_d(x)
plt.plot(x, y)
plt.show()

结合上述公式和函数图像,我们可以得出以下结论:

  1. 由于权重一般是基于均值为0方差为1的高斯分布,所以任何权重总是处于

再结合上面的表达式,当层数越多,乘积项就会越多,就会导致 更小,于是就导致了梯度消失。

“

Sigmoid作为激活函数情况下,由于梯度反向传播中的连乘效应,导致了梯度消失

”

反之,梯度爆炸的问题就是神经网络前面层比后面层梯度变化快,从而引起了梯度爆炸的问题,比如 较大导致了 ,再结合上面提到的连乘效应,就自然地梯度爆炸了。

在更加复杂⽹络中的不稳定梯度

当我们从简单的神经网络上发现了随着网络层次的加深,会造成网络权值更新不稳定的情况后,也很明确地观察到了梯度消失问题。继续扩展一下,对于那些每层包含很多神经元的更加复杂的网络来说会是怎样的情况呢?

shadow-image-20201119214431316

对于第 层的梯度:

根据连乘效应,会导致出现不稳定的梯度,和前面例子一样,会导致前面层的梯度指数级地消失。

其它深度学习的障碍

前面三节主要介绍了一大障碍:不稳定梯度(梯度消失或者梯度爆炸),实际上,不稳定梯度仅仅是深度学习的众多障碍之⼀。

下面会据一些关于什么让训练深度⽹络⾮常困难相关主题的例子,这是个相当复杂的问题:

  • 在 2010 年Glorot && Bengio发现证据表明 sigmoid 函数的选择会导致训练⽹络的 问题。特别地,他们发现sigmoid函数会导致最终层上的激活函数在训练中会聚集在 0,这也导 致了学习的缓慢。他们的⼯作中提出了⼀些取代sigmoid函数的激活函数选择,使得不会被这种聚集性影响性能。

  • 在 2013 年Sutskever, Martens, Dahl 和 Hinton研究了深度学习使⽤随机权重初始化和基于momentum的SGD⽅法。两种情形下,好的选择可以获得较⼤的差异的训练效果。

论文地址:

  • Understanding the difficulty of training deep feedforward neural networks

    • 解读——01

    • 解读——02

    • 论文解读:

    • 论文翻译:这里

  • On the importance of initialization and momentum in deep learning

⽣成对抗⽹络 GAN (Generative Adversarial Network,简称GAN)是⾮监督式学习的⼀种⽅法,通过两个神经⽹络相互博弈的⽅式进⾏学习。其本质是从数据分布上模仿另⼀批数据体。⽣成器 (⽣成)、鉴别器 (对抗)鉴别器 和 ⽣成器 可以根据数据特点进⾏设计。1. 准备要模仿对象的数据;2. 定义模型:定义⽣成器模型和鉴别器模型(⼆分类模型);3. 训练模型:同时训练⽣成器和鉴别器。 阅读详情

相关推荐

Understanding the difficulty of training deep feedforward neural networks

Understanding the difficulty of training deep feedforward neural networks

(15)[ICML13] Momentum: On the importance of initialization and momentum in deep learning

计划完成深度学习入门的126篇论文第十五篇,多伦多大学和Google的Ilya Sutskever合作研究一种在梯度下降过程中优化下降迭代速度的方式,属于AdaptiveLearning的一种。关联:Adam,AdaGrad,RMSProp,Adabound。 ABSTRACT&INTRODUCTION 摘要 深度神经网络(DNNs)和递归神经网络(RNNs)是一种强大的神经网络模型...

gdtop的个人笔记 2399

CDH Hue连接Hbase报错TSocket read 0 bytes

问题描述 安装好CDH集群后,在Hue中查看HBase信息时,Hue界面报错如下: Api 错误:TSocket read 0 bytes Hue日志报错: exceptions_renderable ERROR Potential trace: [('/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/hue/apps/hbase/src/hbase/api.py', 46, 'query', 'return getattr(self

邢为栋 3493

深度神经网络总结

深度神经网络(Deep Neural Networks,DNN)可以理解为有很多隐藏层的神经网络,又被称为深度前馈网络(DFN),多层感知机(Multi-Layer perceptron,MLP)。 1 前向传播算法 1.1 从感知机到神经网络 感知机的模型是一个有若干输入和一个输出的模型,如下图: 输出和输入之间学习到一个线性关系,得到中间输出结果: 接着是一个神经元激活函数,...

Yasin的博客 8万+

SRAM compiler选项中 Soft Error Repair (SER)

引起的瞬时故障,可能会影响 SRAM 中存储的数据。SER 功能通过某种机制检测并修复这些错误,从而提高存储器的可靠性。在 SRAM 编译器中,

hzmscut的博客 1158

5分钟搞定CST周期性结构仿真:共面波导色散曲线快速生成技巧

本文提供了一套在CST Studio Suite中快速仿真周期性结构并生成色散曲线的标准化流程。针对共面波导设计,重点解析了周期性边界条件的核心设置、本征模求解器(JDM算法)的优化技巧,以及通过参数扫描与后处理模板实现自动化,旨在帮助射频与微波工程师在5分钟内高效完成关键性能验证。

blue的专栏 1250

【AI学习从零至壹】Pytorch神经⽹络

在深度学习中,必须要说的就是神经⽹络,或者说是⼈⼯神经⽹络(artificial neural network)。神经⽹络是⼀种⼈类受到⽣物神经细胞结构启发⽽研究出的算法体系。神经⽹络这个名字容易让⼈觉得特别神秘,不像我们接触过的程序算法那样直观,在编程的时候我们常⽤到的都是⼀些加减乘除、循环、分⽀、⽐⼤⼩、读写等等,使⽤这些基本步骤就能够完成⼀个明确的⽬标任务,然⽽神经⽹络和这种直观的⽅式还真有些不同。

weixin_53831496的博客 1739

边缘设备选型指南:从数据采集到AI推理,工业物联网硬件如何匹配你的需求?

本文提供了一份全面的工业物联网边缘设备选型指南,系统性地阐述了如何根据数据采集、协议兼容性、边缘AI推理算力及环境适应性等核心需求匹配硬件。文章深入剖析了从CPU/GPU/NPU选择到MQTT、Sparkplug B等工业协议支持的实战考量,并强调了软件生态与全生命周期成本的重要性,旨在帮助项目负责人在复杂场景中做出明智决策。

weixin_29168813的博客 88

基于卷积神经⽹络(CNN)实现垃圾分类Matlab

应⽤参数共享可以⼤量减少参数数量,参数共享基于⼀个假设:如果图像中的⼀点(x1, y1)包含的特征很重要,那么它应该和图像中的另⼀点(x2, y2)⼀样重要。这是⼀个⼀维的例⼦,左边模型输⼊单元有5个,即, 边界各补了⼀个零,即,步幅是1, 即,感受野是3,因为每个输出隐藏单元连接3个输⼊单元,即,根据上⾯公式可以计算出输出隐藏单元的个数是:,与图⽰吻合。卷积运算的⽬的是提取输⼊的不同特征,第⼀层卷积层可能只能提取⼀些低级的特征如边缘、线条和⾓等层级,更多层的⽹络能从低级特征中迭代提取更复杂的特征。

2401_84457171的博客 1225

【AutoCAD中实现双击文本编辑功能】

例如:以下是官方博客例子浅析先加入相关的头文件和库文件。在AutoCAD中有一个很重要的功能,就是双击图形尺寸或文本后会出现一个文本编辑框,用户可在该编辑框中修改文字。本文介绍了如何使用AcEdInplaceTextEditor来实现该功能。实现cad的消息监听。创建一个消息监听的类并在cad中注册来实现消息监听。主要是监听键盘输入。提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了的函数和方法。

我的博客 1149

YOLOv11涨点改进 | 全网独家创新,注意力改进篇 | TGRS 2025 | 引入APCM自适应像素级协同机制,动态增强目标区域、抑制背景噪声,助力YOLOv11做红外小目标检测有效涨点

本文提出了一种基于APCM模块改进的YOLOv11网络模型,通过像素级局部-全局协同建模增强目标特征并抑制背景噪声。APCM模块采用轻量化设计,无需复杂参数,能有效提升小目标检测性能。文章详细介绍了APCM的原理、优势及其在红外小目标检测中的应用,包括模块结构、核心代码实现和YAML配置文件修改方法。实验结果表明,该方法在NUAA-SIRST和IRSTD-1K数据集上优于现有技术,显著提高了复杂场景下的检测精度与鲁棒性。

Ai缝合怪、助力小伙伴高效发论文 118

d2l-ai深度学习日记(五)-卷积神经⽹络

前言:这个博客《d2l-ai深度学习日记》将记录我在深度学习领域的学习与探索,特别是基于《动手学深度学习》这本经典教材的学习过程。在这个过程中,我不仅希望总结所学,还希望通过分享心得,与志同道合的朋友一起交流成长。这不仅是对知识的沉淀,也是我备战研究生考试、追逐学术进阶之路的一部分。

Wyh666a的博客 1582

【docker】--- 详解 WSL2 中的 Ubuntu 和 Docker Desktop 的区别和关系!

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。

秋知叶i 1314

卷积神经网络之 - 残差⽹络(RESNET)

本文建议阅读时间 8 min 本文作者:铜豌豆& Leong残差神经网络 (ResNet) 是由微软研究院的何恺明、张祥雨、任少卿、孙剑等人提出的。ResNet 在 2015 ...

zandaoguang的博客 8653

YOLOv11全方位改进指南:卷积层、轻量化、注意力、损失函数等创新优化一览

YOLOv11通过八大核心模块的创新设计,在保持YOLO系列实时性的同时显著提升检测精度。本文提出的可变形卷积DCNv4多模态注意力动态解耦头等创新方案,已在工业质检、自动驾驶、无人机巡检等领域成功应用。完整项目地址预训练模型:包含从nano到x六个规格在线演示创新声明首次在YOLO系列集成DCNv4,小目标检测AP提升8.2%提出多模态混合注意力(MMAttention),兼顾通道与空间关系动态标签分配策略使训练效率提升40%

QQ_778132974的博客 1019

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

数据安全比赛AI大模型-神经⽹络模型投毒训练

本文针对水果电商平台情感分析系统的安全风险展开研究,重点探讨神经网络模型投毒训练攻击问题。通过构造精心设计的投毒样本并注入训练数据,研究如何最大化模型在验证集上的情感标签翻转率。研究采用在线投毒训练平台,提供上传投毒样本、参数调优及模型验证功能,最终以导出的模型文件在1000条验证样本上的标签翻转率作为评分标准。该研究对提升AI模型在电商领域的数据安全性具有重要实践意义,参赛选手需关注投毒样本构造和模型训练优化,在10次提交机会中争取最高分数。

Aluxian_的博客 1121

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

《神经⽹络与深度学习》-自学笔记01

最近在工作中遇到一个用传统的规则模型无法很好解决的问题,于是才又想起了人工神经网络。终于在好奇心的驱使下,在网上找到了这本很多程序员都推荐的机器学习入门书籍《神经⽹络与深度学习》(英文书名:Neural Networks and Deep Learning),作者Michael Nielsen。目前这本书有团队已经翻成中文了,更加方便学习,知乎上的链结,跳转前麻烦双击屏幕给点赞:红...

328

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【图像识别】基于卷积神经⽹络(CNN)实现垃圾分类Matlab

应⽤参数共享可以⼤量减少参数数量,参数共享基于⼀个假设:如果图像中的⼀点(x1, y1)包含的特征很重要,那么它应该和图像中的另⼀点(x2, y2)⼀样重要。这是⼀个⼀维的例⼦,左边模型输⼊单元有5个,即, 边界各补了⼀个零,即,步幅是1, 即,感受野是3,因为每个输出隐藏单元连接3个输⼊单元,即,根据上⾯公式可以计算出输出隐藏单元的个数是:,与图⽰吻合。卷积运算的⽬的是提取输⼊的不同特征,第⼀层卷积层可能只能提取⼀些低级的特征如边缘、线条和⾓等层级,更多层的⽹络能从低级特征中迭代提取更复杂的特征。

GPT_code的博客 2018

深度卷积神经⽹络(ALEXNET)

《动手学深度学习pytorch》部分学习笔记,仅用作自己复习。 深度卷积神经⽹络(ALEXNET) 在LeNet提出后的将近20年里,神经网络⼀度被其他机器学习方法超越,如支持向量机。虽然LeNet可以在早期的⼩数据集上取得好的成绩,但是在更大的真实数据集上的表现并不尽如⼈意。 一⽅面,神经网络计算复杂。虽然20世纪90年年代也有过⼀些针对神经网络的加速硬件,但并没有像之后GPU那样⼤量普及。因此,训练⼀个多通道、多层和有⼤量参数的卷积神经网络在当年年很难完成。另一⽅面,当年研究者还没有大量深入研究参

dujuancao11的博客 565

⼿把⼿教你实现神经⽹络

假设你熟悉基本的微积分和机器学习概念,例 如:知道什么是分类和正规化。理想情况下,您还可以了解梯度下降等优化技术的⼯作原理。 但是为什么要从头开始实施神经⽹络呢?它可以帮助我们了解神经⽹络的⼯作原理,这对于设计有效模型⾄关 重要。

技术专家 405

深度学习基础-----神经⽹络与深度学习((美)MichaelNielsen )

于是到了训练输出,会发现过拟合的现象,即对于训练数据有很好的拟合效果,而对于验证数据/测试数据没有很好的拟合现象,于是引入规范化(正则化),常用的有L1规范化,L2规范化,Dropout,实际是在损失函数减去一个与当前结点权值有关的正项,即对于大权中参数会使当前损失函数变大,即叫做惩罚,以使对于大权重参数的影响变小。输入数据经过神经结点的权重和激活函数计算后,输出结果,由于表现并不好,于是引入损失函数进行对于找到合适权重的量化即也就是学习的过程,损失函数有很多种,如二次损失函数,交叉熵损失函数。

Ao_Tian的博客 1394

NNDL: 改进神经⽹络的学习⽅法

万丈高楼平地起,反向传播是深度学习这栋大厦的基石,所以在这块花多少时间都是值得的前面一章,我们深入理解了反向传播算法如何工作,本章的主要目的是改进神经网络的学习方法,本章涉及的技术包括:交叉熵代价函数四种称为规范化的⽅法(L1 和 L2 规范化,弃权和训练数据的⼈为扩展)更好的权重初始化⽅法如何选择神经网络的超参数交叉熵代价函数通过前面的学习,我们知道,神经网络一直在努力地让代价函数变小,现在我们...

howie6879's blog 736

【图像识别】基于卷积神经⽹络(CNN)

应⽤参数共享可以⼤量减少参数数量,参数共享基于⼀个假设:如果图像中的⼀点(x1, y1)包含的特征很重要,那么它应该和图像中的另⼀点(x2, y2)⼀样重要。这是⼀个⼀维的例⼦,左边模型输⼊单元有5个,即, 边界各补了⼀个零,即,步幅是1, 即,感受野是3,因为每个输出隐藏单元连接3个输⼊单元,即,根据上⾯公式可以计算出输出隐藏单元的个数是:,与图⽰吻合。卷积运算的⽬的是提取输⼊的不同特征,第⼀层卷积层可能只能提取⼀些低级的特征如边缘、线条和⾓等层级,更多层的⽹络能从低级特征中迭代提取更复杂的特征。

m0_55395440的博客 106
上一篇: 我的TTT内训师培训经历
下一篇: k8s学习之路【01.安装】
老胡的储物柜
博客等级 码龄12年 1145粉丝 284原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值