人工神经网络之激活函数 -Sigmoid函数
来源:互联网 发布:java 7年工作经验 编辑:程序博客网 时间:2024/05/19 00:09
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 在定义域内处处可导,且两侧导数逐渐趋近于0,即:
Bengio 教授等将具有这类性质的激活函数定义为软饱和激活函数。与极限的定义类似,饱和也分为左侧软饱和与右侧软饱和:
左侧软饱和:
右侧软饱和:
与软饱和相对的是硬饱和激活函数,即: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函数
证明
- 人工神经网络之激活函数 -Sigmoid函数
- 人工神经网络之激活函数
- 神经网络之激活函数(sigmoid、tanh、ReLU)
- 神经网络之激活函数(sigmoid、tanh、ReLU)
- 人工神经网络之激活函数 -tanh函数
- 人工神经网络之激活函数 -RELU函数
- 人工神经网络之激活函数 -softmax函数
- 人工神经网络之激活函数总结
- 神经网络的激活函数sigmoid RELU
- 激活函数之sigmoid激活(1)
- 激活函数hard sigmoid
- 激活函数-sigmoid
- AI神经网络激活函数sigmoid及matlab的sigmf
- 神经网络中的sigmoid函数
- 神经网络之激活函数
- 神经网络激活函数sigmoid relu tanh 为什么sigmoid 容易梯度消失
- 激活函数之logistic sigmoid函数介绍及C++实现
- 人工神经网络中的activation function的作用以及ReLu,tanh,sigmoid激励函数的区别
- HashMap和Hashtable的详细区别
- 各种排序
- 【电力项目】s标签实现页面布局
- java(2)
- 2017 年你不能错过的 Java 类库
- 人工神经网络之激活函数 -Sigmoid函数
- HTML基础
- 利用 android mediaRecorder c++类进行视频编码
- 1013数素数
- Git 使用(4)远程库创建
- 第一章 计算机系统漫游
- 内联函数和宏定义的区别
- PAT甲级 1013. Battle Over Cities (25)
- Java序列化与反序列化(Serializable&&Externalizable)