博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
早期深度神经网络的问题
阅读量:2377 次
发布时间:2019-05-10

本文共 2042 字,大约阅读时间需要 6 分钟。

引言

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

这里写图片描述

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

这里写图片描述

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

这里写图片描述

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

不稳定梯度问题

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

这里写图片描述

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

这里写图片描述

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

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

这里写图片描述

其中

Cwljk=al1kδlj ∂ C ∂ w j k l = a k l − 1 δ j l

Cblj=δlj ∂ C ∂ b j l = δ j l

且有定义:

δlj=Czlj δ j l = ∂ C ∂ z j l

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

Cb1=δ1=Cz1=Ca4a4b1 ∂ C ∂ b 1 = δ 1 = ∂ C ∂ z 1 = ∂ C ∂ a 4 ∂ a 4 ∂ b 1

由于

aj=σ(zj) a j = σ ( z j )
zj=wjaj1+bj z j = w j a j − 1 + b j
,所以
a4b1=a4a3a3a2a2b1=w4σ(z4)w3σ(z3)w2σ(z2)σ(z1) ∂ a 4 ∂ b 1 = ∂ a 4 ∂ a 3 ∂ a 3 ∂ a 2 ∂ a 2 ∂ b 1 = w 4 σ ′ ( z 4 ) w 3 σ ′ ( z 3 ) w 2 σ ′ ( z 2 ) σ ′ ( z 1 )

所以有:

Cb1=Ca4w4σ(z4)w3σ(z3)w2σ(z2)σ(z1) ∂ C ∂ b 1 = ∂ C ∂ a 4 w 4 σ ′ ( z 4 ) w 3 σ ′ ( z 3 ) w 2 σ ′ ( z 2 ) σ ′ ( z 1 )

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

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

这里写图片描述

这个函数的导数图像为:

这里写图片描述

正常的场景下我们一般会采用[0,1]高斯分布来随机设置 w w b b 的值,那么就会导致我们的 w w 不会大于1,那么根据

Cb1=Ca4w4σ(z4)w3σ(z3)w2σ(z2)σ(z1) ∂ C ∂ b 1 = ∂ C ∂ a 4 w 4 σ ′ ( z 4 ) w 3 σ ′ ( z 3 ) w 2 σ ′ ( z 2 ) σ ′ ( z 1 ) 这个公式, Cb1 ∂ C ∂ b 1 至少会衰减为 Ca4 ∂ C ∂ a 4 164 1 64 , 这就很难学到东西了。也就意味着随机分配了权重值后,经过反向传播算法训练,最初的几层的权重值会变化很小,也就意味着最初的几层根本就学习不到任何的知识。这也就以为着最初的几层没有用处了,同时实际上还可能起到了副作用,因为将图像的像素点给做了随机的加权,破坏了图像的原始信息。

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

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

训练时间长

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

总结

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

你可能感兴趣的文章
有关在对话框上创建视图上的再探索
查看>>
读史可以明智
查看>>
VC常用代码之创建进程
查看>>
如何保住一个人一生的劳动果实
查看>>
并行处理系统测试正式启动
查看>>
bcg库使用心得两则
查看>>
我和CSDN的那些事
查看>>
阅读分几种
查看>>
cannot connect to host的解决办法
查看>>
怎样在C++工程中集成C#窗口
查看>>
语言就是建立自己和世界的联系
查看>>
Cleanup failed to process the following paths错误的解决
查看>>
易康(eCognition)的野心
查看>>
从同事的一个提问想到的学习途径
查看>>
sqlite学习笔记之sqlite3_open函数的使用
查看>>
一种无线网络的搭建方案
查看>>
技术应用涉及到的四个方面的问题
查看>>
最近看了三本励志书
查看>>
一种结合hudson的算法自动化测试构想
查看>>
MSDN值得学习的地方
查看>>