Pytorch机器学习——3 神经网络(二)

outline

  1. 神经元与神经网络
  2. 激活函数
  3. 前向算法
  4. 损失函数
  5. 反向传播算法
  6. 数据的准备
  7. PyTorch实例:单层神经网络实现

3.2 激活函数

在神经元中输入信息通过一个非线性函数产生输出,这个函数决定哪些信息保留以传递给后面的神经元,这个函数就是激活函数,又被称为非线性函数,对于给定的输入,激活函数执行固定的数学运算得到输出结果。
激活函数要具有以下性质:

  • 非线性
  • 连续可微性
  • 值域有限
  • 单调性:激活函数是单调的时候,单层的神经网络才保证是凸函数。
  • 具有单调导数的光滑函数:奥卡姆剃刀原理(简单有效原理)
  • 函数值和输入近似相等:满足这个条件的激活函数,当权重初始化成很小的随机数时,神经网络的训练将会很高效,如果不满足这个条件则需要很小心地初始化神经网络权重。

下面介绍几种常见的激活函数:

3.2.1 Sigmoid

sigmoid函数也叫Logistic函数,用于隐层神经元输出,取值范围为 ,它可以将一个实数映射到 的区间,可以用来做 二分类。在特征相差比较复杂或是相差不是特别大时效果比较好。
Sigmoid函数由下列公式定义

其对x的导数可以用自身表示:

Sigmoid函数的图形如s曲线,又称s函数

image.png

Sigmoid作为激活函数有以下优缺点:

  • 优点:平滑、易于求导。
  • 缺点:
    • 梯度消失: 从图形上可以看出,当输入变量特别大或者特别小的时候,函数曲线变化趋于平缓,也就是说函数的梯度变得越来越小,直到接近于0,这会导致经过神经元的信息会很少,无法完成深层网络的训练。
    • 激活函数计算量大:函数求导涉及除法,在神经网络训练,也就是反向传播求误差梯度的时候计算量大。
import torch
m=torch.nn.Sigmoid()
_input = torch.autograd.Variable(torch.rand(2))
print(_input)
print(m(_input))

有用就留个赞吧^_^

你可能感兴趣的:(Pytorch机器学习——3 神经网络(二))