早期深度神经网络的问题

引言

在神经网络最开始被提出来的时候,人们设计的网络大多是这个样子的

早期深度神经网络的问题

一个输入层,一个输出层,一个隐藏层,用这样的网络能够解决很多实际的问题。但是一层隐藏层的网络能够学习到的东西毕竟是有限的,自然而然的人们就想到将网络进行扩展,给神经网络多增加隐藏层,那么神经网络就应该能够学习到更加复杂的模型,就如下所示:

早期深度神经网络的问题

人们发现对于很多问题,增加了一层隐藏层,效果有提升哎,那就就自然而然的继续增加网络的层数,但是诡异的问题发生了,随着层数的不断增加,学习速度越来越慢(对于这一点,人们早就预料到了),但是还有另一个问题,效果不仅不提升,反而越来越劣化。

早期深度神经网络的问题

这个到底是什么原因呢?是因为网络层次多了,学不到新的东西了?还是各个隐藏层之间发生了反作用? 下面我们就来分析一下早期深度网络存在的问题。

不稳定梯度问题

在早期的多层神经网络中,人们利用下面这样的多层全连接的神经网络,利用梯度下降以及反向传播算法来学习网络的权重。

早期深度神经网络的问题

那么这种方式有什么问题呢?下面我们简化一下模型,以单个连接的多层网络来举例说明

早期深度神经网络的问题

我们来看一下按照这个网络更新权重会发生什么问题呢?

这里先定义一些参数,和之前神经网络章节的定义是一致的,aj 为第j层的**值,zj 为第j层的带权输入,因此有aj=σ(zj)zj=wjaj1+bj,假设神经网络的代价函数为C,那么根据之前推导的反向传播算法,有:

早期深度神经网络的问题

其中

Cwjkl=akl1δjl

Cbjl=δjl

且有定义:

δjl=Czjl

对于图中我们简化的神经网络来说,有:

Cb1=δ1=Cz1=Ca4a4b1

由于

aj=σ(zj)
zj=wjaj1+bj
,所以
a4b1=a4a3a3a2a2b1=w4σ(z4)w3σ(z3)w2σ(z2)σ(z1)

所以有:

Cb1=Ca4w4σ(z4)w3σ(z3)w2σ(z2)σ(z1)

这也就意味着输出层的误差(我们是根据输出层的误差来调整参数的权重,进而学习到模型的)传到第一层,已经被乘以了一堆的系数,这些系数通常会导致梯度的消失或者激增。我们来看下为什么会导致梯度的消失或者激增。

我们一般用的**函数是logistic函数,图形如下所示:

早期深度神经网络的问题

这个函数的导数图像为:

早期深度神经网络的问题

正常的场景下我们一般会采用[0,1]高斯分布来随机设置wb 的值,那么就会导致我们的w 不会大于1,那么根据
Cb1=Ca4w4σ(z4)w3σ(z3)w2σ(z2)σ(z1) 这个公式,Cb1至少会衰减为Ca4164, 这就很难学到东西了。也就意味着随机分配了权重值后,经过反向传播算法训练,最初的几层的权重值会变化很小,也就意味着最初的几层根本就学习不到任何的知识。这也就以为着最初的几层没有用处了,同时实际上还可能起到了副作用,因为将图像的像素点给做了随机的加权,破坏了图像的原始信息。

那大家可能还有一个疑问,如果我把权重w设置为很大的值呢?比如说100,这个一样的糟糕,这样就引入了梯度的激增问题,会放大最初的权重,一样的破坏了网络的结构。

因此我们可以看到,多层的全连接网络,必然会导致梯度的不稳定,梯度的不稳定就会导致权重的学习困难。

训练时间长

深度的神经网络还有另外一个问题,就是权重参数非常多,这会导致权重的训练非常耗时。但是随着技术的发展,这个倒也不算是什么大的问题了。

总结

影响深度神经网络的学习的因素非常多,包括**函数的选择,超参数的选择等等。本节主要介绍了梯度不稳定的问题,这个问题也是影响深度神经网络的一个主要问题了。