人工神经网络之激活函数 -Sigmoid函数

时间:2022-03-02 17:02:06

Sigmoid函数

     Sigmoid 是使用范围最广的一类激活函数,具有指数函数形状 。正式定义为:

人工神经网络之激活函数 -Sigmoid函数

代码:

x=-10:0.001:10; 
%sigmoid和它的导数
sigmoid=1./(1+exp(-x));
sigmoidDer=exp(-x)./((1+exp(-x)).^2);
figure;
plot(x,sigmoid,‘r‘,x,sigmoidDer,‘b--‘);
axis([-10 10 -1 1]);
grid on;
title(‘Sigmoid函数(实线)及其导数(虚线)‘);
legend(‘Sigmoid原函数‘,‘Sigmid导数‘);
set(gcf,‘NumberTitle‘,‘off‘);
set(gcf,‘Name‘,‘Sigmoid函数(实线)及其导数(虚线)‘);

输出:

人工神经网络之激活函数 -Sigmoid函数

   可见,sigmoid 在定义域内处处可导,且两侧导数逐渐趋近于0,即:

人工神经网络之激活函数 -Sigmoid函数

    Bengio 教授等将具有这类性质的激活函数定义为软饱和激活函数。与极限的定义类似,饱和也分为左侧软饱和与右侧软饱和:

左侧软饱和:

人工神经网络之激活函数 -Sigmoid函数

右侧软饱和:

人工神经网络之激活函数 -Sigmoid函数

    与软饱和相对的是硬饱和激活函数,即:f‘(x)=0,当 |x| > c,其中 c 为常数。

    同理,硬饱和也分为左侧硬饱和和右侧硬饱和。常见的ReLU 就是一类左侧硬饱和激活函数。

Sigmoid 的软饱和性,使得深度神经网络在二三十年里一直难以有效的训练,是阻碍神经网络发展的重要原因。具体来说,由于在后向传递过程中,sigmoid向下传导的梯度包含了一个f‘(x) 因子(sigmoid关于输入的导数),因此一旦输入落入饱和区,f‘(x) 就会变得接近于0,导致了向底层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失。一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象[Understanding the difficulty of training deep feedforward neural networks]。梯度消失问题至今仍然存在,但被新的优化方法有效缓解了,例如DBN中的分层预训练,Batch Normalization的逐层归一化,Xavier和MSRA权重初始化等代表性技术。

    Sigmoid 的饱和性虽然会导致梯度消失,但也有其有利的一面。例如它在物理意义上最为接近生物神经元。(0, 1) 的输出还可以被表示作概率,或用于输入的归一化,代表性的如Sigmoid交叉熵损失函数。


sigmoid函数

σ(x)=11+exσ(x)=(1σ(x))σ(x)

证明

σ(x)x=ex(1+ex)2=(1+ex11+ex)(11+ex)=(1σ(x))σ(x)(7)(8)(9)