首页 > 编程知识 正文

神经网络的激活函数的作用,神经网络中激活函数的作用

时间:2023-05-03 10:19:43 阅读:234963 作者:2147

一、激活函数的作用

激活函数(activation function)的作用是去线性化,神经网络节点的计算就是加权求和,再加上偏置项:
a i = ∑ i x i w i + b a_i=sum_ix_iw_i+b ai​=i∑​xi​wi​+b
这是一个线性模型,将这个计算结果传到下一个节点还是同样的线性模型。只通过线性变换,所有的隐含层的节点就无存在的意义。原因如下:假设每一层的权值矩阵用 W ( i ) W^{(i)} W(i)表示。那么存在一个 W ′ W' W′使:
W ′ = W ( 1 ) W ( 2 ) … W ( n ) W'=W^{(1)}W^{(2)}…W^{(n)} W′=W(1)W(2)…W(n)
那么,n层隐含层就可以全部变成一个隐含层,隐含层的数量就没有任何意义。所以使用激活函数将其去线性化。种种情况下, W ′ = W ( 1 ) W ( 2 ) … W ( n ) W'=W^{(1)}W^{(2)}…W^{(n)} W′=W(1)W(2)…W(n)不再成立,每层隐含层都有其存在的意义。

下面有更详细的解释,改内容来自《TensorFlow实战Google深度学习框架》(第2版)。

二、常用激活函数

人工神经网络中常用到激活函数(activation function):ReLuSigmoid

2.1 ReLu

线性整流函数(Rectified Linear Unit, ReLU),又称修正线性单元。其函数表达式如下:
f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)
其函数图像图下:

其含义就是,如果输入的 x > 0 x>0 x>0,那么 f ( x ) = x f(x)=x f(x)=x;如果x<0,那么 f ( x ) = 0 f(x)=0 f(x)=0。

2.2 Sigmoid

Sigmoid函数是一个在生物学中常见的S型函数,也称为S型生长曲线。其函数表达式如下:
f ( x ) = 1 1 + e − x f(x)=dfrac{1}{1+e^{-x}} f(x)=1+e−x1​
其函数图像图下:

可以看到在趋于正无穷或负无穷时,函数趋近平滑状态,sigmoid函数因为输出范围(0,1),所以二分类的概率常常用这个函数。

sigmoid函数曾经被使用的很多,不过近年来,用它的人越来越少了。主要是因为它固有的一些缺点,下面将根据其导数对其缺点进行分析,导数图像如下:

缺点:

在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大。
如果我们初始化神经网络的权值为 [ 0 , 1 ] [0,1] [0,1]之间的随机值,由反向传播算法的数学推导可知,梯度从后向前传播时,每传递一层梯度值都会减小为原来的0.25倍,如果神经网络隐层特别多,那么梯度在穿过多层后将变得非常小接近于0,即出现梯度消失现象;当网络权值初始化为 ( 1 , + ∞ ) (1,+infty) (1,+∞)区间内的值,则会出现梯度爆炸情况。Sigmoid 的 output 不是0均值(即zero-centered)。这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。 产生的一个结果就是:如 x > 0 , f = w T x + b x>0,f=w^Tx+b x>0,f=wTx+b,那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。
当然了,如果按batch去训练,那么那个batch可能得到不同的信号,所以这个问题还是可以缓解一下的。因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的梯度消失问题相比还是要好很多的。其解析式中含有幂运算,计算机求解时相对来讲比较耗时。对于规模比较大的深度网络,这会较大地增加训练时间。

参考:https://blog.csdn.net/tyhj_sf/article/details/79932893

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。