深度学习基础理论探索(一):激活函数、梯度消失

来源:互联网 发布:软考初级程序员真题 编辑:程序博客网 时间:2024/06/05 15:46

谈到深度学习,就会想到多层神经网络。最基本的结果便是 wx+b 再加非线性激励。

那么问题来了,为什么要加这个非线性激励,也就是激活函数呢?

1.增加非线性激励,可以使网络有更好的表达能力。可以拟合各种函数。

2.更重要的是:

多层神经网络如果没有这个激活函数就是 :第一层的矩阵(权重(w)矩阵乘输入,加偏置(b)矩阵) 乘 第二层的矩阵。。。一直乘到最后一层矩阵。多个矩阵相乘其实就等于一个矩阵,那么多层神经网络就只相当与一层神经网络,没有意义。

过去我们常用的激活函数是sigmoid函数:


当该网络的损失函数是传统的quadratic cost function时

即:


会出现梯度消失的情况。

那么到底发生了什么?


首先我们知道,训练网络的基本方法就是反向传递,选择合适的梯度下降,一遍遍的迭代,直到损失函数小到我们可以接受的程度。

那么,下降的速度主要取决于w,b即权重和偏置相对于损失函数的偏导数。偏导越大,梯度下降越快。

Ok,我们掏出一坨公式:


这两个求偏导的公式说明,他们下降的速度只与激活函数的导数有关

而激活函数sigmoid函数的导数是


他是个二次函数,函数的最大值为0.25.也就是说每一层的变化率最高为0.25,多层之后,比如10层之后,第十层的变化率最高为0.25的10次方。这是一个非常小的数了,w和b很难变化了,所以根本训练不出来了。这就是梯度消失。

所以过去的教科书会说神经网络不会超过三层。

为了克服这个问题,我们从两个方向入手。

1.改激活函数(现在用rule多一些)

2.改损失函数,这样就有了我们后面要说的cross-entroy。

为什么选了cross-entroy我们下一篇说。



阅读全文
0 0
原创粉丝点击