深度神经网络问题以及解决方法

您所在的位置:网站首页 神经元坏死现象有哪些 深度神经网络问题以及解决方法

深度神经网络问题以及解决方法

2024-06-28 17:40| 来源: 网络整理| 查看: 265

深度神经网络问题以及解决方法

参考博客:深度学习中的highway network、ResNet

参考博客:神经网络梯度与归一化问题总结

一份详细讲解的代码:https://iamtrask.github.io/2015/11/15/anyone-can-code-lstm/

问题一:误差信号的多层反向传播容易产生“梯度消失”、“梯度爆炸”现象

问题二:随着深度神经网络层数的增加,训练误差没有降低反而升高

image

当神经网络层数过深的时候,会出现“退化”的现象,即在网络层数加深时,网络的loss不降反增。对于该问题,提出了高速网络(Highway network)和残差网络(Residual Network)来解决网络层数过深的问题。

highway  network

highway network 主要解决问题是:网络深度加深,梯度信息回流受阻,造成网络训练困难的问题

shortcut(或shortpath,中文“直连”或“捷径”)是CNN模型发展中出现的一种非常有效的结构, 残差连接的思想起源于中心化,在神经网络系统中,对输入数据等进行中心化转换,即将数据减去均值,被广泛验证有利于加快系统的学习速度。

1、一般一个网络, 每层网络对输入进行一个非线性映射变换

y = H(x, W_{H})

2、对于CNN网络, 定义一层网络结构如下,T 和 C 分别表示对输入的门控(0到1)和直接传送

y = H(x, W_{H}) * T(x, W_{T}) + x * (1 - T(x, W_{T}))

观察到, 对于特殊的门值T

y = H(x, W_{H})    if T(x, W_{T}) = 1

y = x                   if T(x, W_{T} ) = 0

该层的雅可比变换转换为:

\frac{dy}{dx} = H^{'}(x, W_{T})        if T(x, W_{T}) = 1

\frac{dy}{dx} = 1        if T(x, W_{T}) = 0

物理意义:假设所有的门t的均值为0.5的话,将所有原始信息一半激活、一半不变直接输入下一层, 保留了很多信息。

反向传播的时候,可以让更多的梯度信息直接回流到输入, 而不需要经过一个非线性转换。

ResNet网络

模型增加一个identity mapping(恒等映射), 将原始所需要学的函数 H(x) 转换成F(x) + x, 两种函数表达效果像如同, 但是F(x)的优化会比H(x)简单很多。图像处理中的残差向量编码 , 将一个问题分解成多个尺度直接的残差问题。

这个简单的加法并不会给网络增加额外的参数和计算量,同时却可以大大增加模型的训练速度、提高训练效果并且当模型的层数加深时,这个简单的结构能够很好的解决退化问题。因为identity map是的梯度可以直接回流到了输入层

对于shortcut的方式:

1.使用恒等映射, 如果residual block的输入输出维度不一致, 对增加的维度用0来填充

2.在block输入输出维度一致时使用恒等映射, 不一致时使用线性投影以保证维度一致

3.对于所有的block均使用线性投影

Inception

解决深度学习 参数过多、梯度消失的问题, 解决方法就是增加网络深度和宽度的同时减少参数。

Inception网络在同一层里面使用不同的卷积模板,对不同size感受野做特征提取, 即为一种混合模型; max pooling 也具有特征提取的作用, 和卷积不同, 没有参数不会过拟合,亦可作为一个分支; 使用1*1卷积核可以起到降低特征图厚度的作用(对于使用两层堆叠的3 * 3卷积核 代替一层的5 * 5卷积核, 参数量减少了, 计算量也减少了, 层数变深了, 效果变好了)

 

梯度消失/梯度爆炸的问题

神经网络训练的方法是BP算法。BP算法的基础就是导数的链式法则。在CNN以及RNN网络中会明显出现梯度消失和梯度爆炸的问题

在使用sigmoid()函数作为激活函数时, 两侧饱和区域的导数很小, 随着网络的加深, 梯度反向传播到浅层网络时, 基本不能引起数值的扰动, 浅层的网络就无法学习到新的特征。解决方法:1、更换激活函数    2、使用层归一化    3、在权重初始化上下功夫    4、构建新的网络结构

激活函数

ReLU()函数, 稀疏激活, 负数端抑制状态, 正数端兴奋激活, 没有将数据压缩, 会使得数据的范围可能会很大。

Leaky ReLU()函数, 负数端不完全抑制。

sigmoid()函数

tanh()函数

批量层归一化

BN通过将输出层的数据归一化到mean = 0, var = 1的分布中, 即使均值方差相同不代表分布也相同

归一化可以解决ReLU()函数不能把数据压缩的问题; 可以使用更高的学习率, 保证每层、每维的scale保持一致, 可以加快收敛; 归一化会破坏原本学习的特征的分布, 加入两个参数来恢复原本的分布, 新添加的两个参数, 是通过训练学习的, 最后可能恢复,也可能未恢复, 这样可以增加网络的capicity,网络中就存在多种不同的分布了。covariate shift (尚未理解)  在加入BN之后可以不使用dropout, dropout是用来正则化增强网络的泛化能力, 减少过拟合, BN是用来提升精度。 过拟合一般发生在数据边缘的噪声位置, BN把它归一化操作

 

 

 

 

 

 

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3