outline
- 神经元与神经网络
- 激活函数
- 前向算法
- 损失函数
- 反向传播算法
- 数据的准备
- PyTorch实例:单层神经网络实现
3.2 激活函数
在神经元中输入信息通过一个非线性函数产生输出,这个函数决定哪些信息保留以传递给后面的神经元,这个函数就是激活函数,又被称为非线性函数,对于给定的输入,激活函数执行固定的数学运算得到输出结果。
激活函数要具有以下性质:
- 非线性
- 连续可微性
- 值域有限
- 单调性:激活函数是单调的时候,单层的神经网络才保证是凸函数。
- 具有单调导数的光滑函数:奥卡姆剃刀原理(简单有效原理)
- 函数值和输入近似相等:满足这个条件的激活函数,当权重初始化成很小的随机数时,神经网络的训练将会很高效,如果不满足这个条件则需要很小心地初始化神经网络权重。
下面介绍几种常见的激活函数:
3.2.1 Sigmoid
sigmoid函数也叫Logistic函数,用于隐层神经元输出,取值范围为 ,它可以将一个实数映射到 的区间,可以用来做 二分类。在特征相差比较复杂或是相差不是特别大时效果比较好。
Sigmoid函数由下列公式定义
其对x的导数可以用自身表示:
Sigmoid函数的图形如s曲线,又称s函数
Sigmoid作为激活函数有以下优缺点:
- 优点:平滑、易于求导。
- 缺点:
- 梯度消失: 从图形上可以看出,当输入变量特别大或者特别小的时候,函数曲线变化趋于平缓,也就是说函数的梯度变得越来越小,直到接近于0,这会导致经过神经元的信息会很少,无法完成深层网络的训练。
- 激活函数计算量大:函数求导涉及除法,在神经网络训练,也就是反向传播求误差梯度的时候计算量大。
import torch
m=torch.nn.Sigmoid()
_input = torch.autograd.Variable(torch.rand(2))
print(_input)
print(m(_input))
有用就留个赞吧^_^
网友评论