文章目录

  • 1.1、sigmoid函数
  • 1.2、tanh函数
  • 1.3、ReLU函数
  • 1.4、softmax函数

激活函数在神经网络中的作用有很多,主要作用是给神经网络提供非线性建模能力。如果没有激活函数,那么再多层的神经网络也只能处理线性可分问题。常用的激活函数有 sigmoidtanhrelusoftmax等。

1.1、sigmoid函数

sigmoid函数将输入变换为(0,1)上的输出。它将范围(-inf,inf)中的任意输入压缩到区间(0,1)中的某个值:
sigmoid(x)=11+exp(−x)sigmoid(x)=\frac{1}{1+exp(-x)}sigmoid(x)=1+exp(−x)1​
sigmoid函数是⼀个⾃然的选择,因为它是⼀个平滑的、可微的阈值单元近似。当我们想要将输出视作⼆元分类问题的概率时, sigmoid仍然被⼴泛⽤作输出单元上的激活函数(你可以将sigmoid视为softmax的特例)。然而, sigmoid在隐藏层中已经较少使⽤,它在⼤部分时候被更简单、更容易训练的ReLU所取代。下面为sigmoid函数的图像表示,当输入接近0时,sigmoid更接近线形变换。

import torch
from d2l import torch as d2l
%matplotlib inlinex=torch.arange(-8.0,8.0,0.1,requires_grad=True)
sigmoid=torch.nn.Sigmoid()
y=sigmoid(x)d2l.plot(x.detach(),y.detach(),'x','sigmoid(x)',figsize=(5,2.5))



sigmoid函数的导数为下面的公示:
ddxsigmoid(x)=exp(−x)(1+exp(−x))2=sigmoid(x)(1−sigmoid(x))\frac{d}{dx}sigmoid(x)=\frac{exp(-x)}{(1+exp(-x))^2}=sigmoid(x)(1-sigmoid(x))dxd​sigmoid(x)=(1+exp(−x))2exp(−x)​=sigmoid(x)(1−sigmoid(x))
sigmoid函数的导数图像如下所示。当输入值为0时,sigmoid函数的导数达到最大值0.25;而输入在任一方向上越远离0点时,导数越接近0。

#清除以前的梯度
#retain_graph如果设置为False,计算图中的中间变量在计算完后就会被释放。
y.backward(torch.ones_like(x),retain_graph=True)
d2l.plot(x.detach(),x.grad,'x','grad of sigmoid')



1.2、tanh函数

与sigmoid函数类似,tanh函数也能将其输入压缩转换到区间(-1,1)上,tanh函数的公式如下:
tanh(x)=1−exp(−2x)1+exp(−2x)tanh(x)=\frac{1-exp(-2x)}{1+exp(-2x)}tanh(x)=1+exp(−2x)1−exp(−2x)​
tanh函数的图像如下所示,当输入在0附近时,tanh函数接近线形变换。函数的形状类似于sigmoid函数,不同的是tanh函数关于坐标系原点中心对称。

import torch
from d2l import torch as d2l
%matplotlib inlinex=torch.arange(-8.0,8.0,0.1,requires_grad=True)
tanh=torch.nn.Tanh()
y=tanh(x)d2l.plot(x.detach(),y.detach(),'x','tanh(x)',figsize=(5,2.5))



tanh函数的导数是:
ddxtanh(x)=1−tanh2(x)\frac{d}{dx}tanh(x)=1-tanh^2(x)dxd​tanh(x)=1−tanh2(x)
tanh函数的导数如下,当输入接近0时,tanh函数的导数接近最大值1。与sigmoid函数图像中看到的类似,输入在任一方向上远离0点,导数越接近0。

y.backward(torch.ones_like(x),retain_graph=True)
d2l.plot(x.detach(),x.grad,'x','grad of tanh',figsize=(5,2.5))



1.3、ReLU函数

线性整流单元(ReLU),ReLU提供了一种非常简单的非线性变换。给定元素xxx,ReLU函数被定义为该元素与0的最大值。
ReLU(x)=max(x,0)ReLU(x)=max(x,0)ReLU(x)=max(x,0)
ReLU函数通过将相应的活性值设为0,仅保留正元素并丢弃所有负元素。如下为ReLU函数的曲线图。

import torch
from d2l import torch as d2l
%matplotlib inlinex=torch.arange(-8.0,8.0,0.1,requires_grad=True)
relu=torch.nn.ReLU()
y=relu(x)d2l.plot(x.detach(),y.detach(),'x','relu',figsize=(5,2.5))



当输入为负时,reLU函数的导数为0,而当输入为正时,ReLU函数的导数为1。当输入值等于0时,ReLU函数不可导。如下为ReLU函数的导数:
f′(x)={1,x≥0 0,x<0f^{'}(x) = \begin{cases} 1, & \text{ x≥0 } \\ 0, & \text{x<0} \end{cases}f′(x)={1,0,​ x≥0 x<0​

#retain_graph如果设置为False,计算图中的中间变量在计算完后就会被释放。
y.backward(torch.ones_like(x),retain_graph=True)
d2l.plot(x.detach(),x.grad,'x','grad of relu',figsize=(5,2.5))



ReLU函数的求导表现的很好:要么让参数消失,要么让参数通过。ReLU减轻了神经网络的梯度消失问题。ReLU函数有很多变体,如LeakyReLU,pReLU等。

1.4、softmax函数

在二分类任务时,经常使用sigmoid激活函数。而在处理多分类问题的时候,需要使用softmax函数。它的输出有两条规则。

  • 每一项的区间范围的(0,1)
  • 所有项相加的和为1.

假设有一个数组V,ViV_iVi​代表V中的第i个元素,那么这个元素的softmax值的计算公式为:
Si=ei∑jejS_i=\frac{e^i}{\sum_j e^j}Si​=∑j​ejei​

下图为更为详细的计算过程:

如上图所示,输入的数组为[3,1,-3]。那么每项的计算过程为:

当输入为3时,计算公式为e3e3+e1+e−3≈0.88\frac{e^3}{e^3+e^1+e^{-3}}\approx 0.88e3+e1+e−3e3​≈0.88

当输入为1时,计算公式为e1e3+e1+e−3≈0.12\frac{e^1}{e^3+e^1+e^{-3}}\approx 0.12e3+e1+e−3e1​≈0.12

当输入为-3时,计算公式为e−3e3+e1+e−3≈0\frac{e^{-3}}{e^3+e^1+e^{-3}}\approx 0e3+e1+e−3e−3​≈0

下面使用代码实现这一计算过程。

x=torch.Tensor([3.,1.,-3.])
softmax=torch.nn.Softmax(dim=0)
y=softmax(x)
print(y)
tensor([0.8789, 0.1189, 0.0022])

那么在搭建神经网络的时候,应该如何选择激活函数?

  1. 如果搭建的神经网络的层数不多的时候,选择sigmoid、tanh、relu都可以,如果搭建的网络层数较多的时候,选择不当不当会造成梯度消失的问题,此时一般不宜选择sigmoid、tanh激活函数,最好选择relu激活函数。
  2. 在二分类问题中,网络的最后一层适合使用sigmoid激活函数;而多分类任务中,网络的最后一层使用softmax激活函数。

激活函数(sigmoid、tanh、ReLU、softmax)相关推荐

  1. 三种激活函数——Sigmoid,Tanh, ReLU以及卷积感受野的计算

    1. 三种激活函数--Sigmoid, Tanh, ReLU 1.1 Sigmoid 1.1.1 公式 S ( x ) = 1 1 + e − x S(x) = \frac{1}{1 + e^{-x} ...

  2. 激活函数--Sigmoid,tanh,RELU,RELU6,Mish,Leaky ReLU等

    激活函数 目前自己使用比较多的激活函数RELU, RELU6; LeakyReLU; SELU; Mish :激活函数看:计算量:准确率: 大多数激活函数pytorch里有已经包装好了: Non-li ...

  3. 【Pytorch神经网络理论篇】 07 激活函数+Sigmoid+tanh+ReLU+Swish+Mish+GELU

    ①激活函数:主要通过加入非线性因素,你不线性模型表达能力不足的缺陷,因为神经网络中的数学基础是处处可微分的函数,故要求激活函数也应该保证数据的输入与输出是可微分. ②激活函数可以分为饱和激活函数与不饱 ...

  4. DL之DNN优化技术:采用三种激活函数(sigmoid、relu、tanh)构建5层神经网络,权重初始值(He参数初始化和Xavier参数初始化)影响隐藏层的激活值分布的直方图可视化

    DL之DNN优化技术:采用三种激活函数(sigmoid.relu.tanh)构建5层神经网络,权重初始值(He参数初始化和Xavier参数初始化)影响隐藏层的激活值分布的直方图可视化 目录

  5. 【深度学习】激活函数:原理+常见激活函数(Sigmoid\Tanh\ReLU\Leaky ReLU\Softmax)

    首先需要知道为什么要引入激活函数:激活函数是用来加入非线性因素的,因为线性模型的表达能力不够.引入非线性激活函数,可使深层神经网络的表达能力更加强大. 在深度学习中,线性模型只需要简单的全连接层就能实 ...

  6. 常用的激活函数汇总-Sigmoid, tanh, relu, elu

    激活函数(又叫激励函数,后面就全部统称为激活函数)是模型整个结构中的非线性扭曲力,神经网络的每层都会有一个激活函数.那他到底是什么,有什么作用?都有哪些常见的激活函数呢? 深度学习的基本原理就是基于人 ...

  7. 激活函数总结sigmoid,tanh,relu,Leaky ReLU,RRelu,ELU,PRelu,SELU,swish

    本文总结深度学习的损失函数及其优缺点. 激活函数是深度学习模型的重要成分,目的是将线性输入转换为非线性.常见的激活函数有sigmoid,tanh,ReLU等 1.sigmoid Sigmoid 非线性 ...

  8. Matlab绘制激活函数sigmoid,Relu

    激活函数主要是神经网络中用到,它的公式为: 下面用matlab来绘制一下 clc clear all x = linspace(-10.0,10.0); % 设置x范围为-10到10 sigmoid ...

  9. 深度学习- 激活函数总结(Sigmoid, Tanh, Relu, leaky Relu, PReLU, Maxout, ELU, Softmax,交叉熵函数)

    激活函数是用来加入非线性因素的,解决线性模型所不能解决的问题 激活函数通常有以下性质 – 非线性 – 可微性 – 单调性 –

  10. 常用的激活函数sigmoid,relu,tanh

    1.什么是激活函数? 在神经网络中,我们经常可以看到对于某一个隐藏层的节点,该节点的激活值计算一般分为两部: (1)输入该节点的值为x1,x2时,在进入这个隐藏节点后,会先进行一个线性变换,计算出值z ...

最新文章

  1. MFC给按钮添加皮肤
  2. Alpha Go 之父恩师Tomaso Poggio:深度学习需要从炼金术走向化学
  3. Internet Explorer 8 Beta2 常见问题解答
  4. 1.8 简单的文件输入输出
  5. 设置ComboBox控件的小箭头颜色.
  6. ubuntu虚拟机联网
  7. 仿ios桌面vivo_vivo全新OriginOS细节曝光:系统UI大变样
  8. SpringBoot2.1.5(33)---SpringBoot整合 Thymeleaf 模板引擎
  9. html设置导入字体样式表,HTML CSS@face 导入字体
  10. hive建表设置如果为null_Hive表中的NULL值处理
  11. mysql预编译表名_JDBC预编译语句表名占位异常
  12. 【论文阅读】Rich feature hierarchies for accurate object detection and semantic segmentation
  13. adb服务无法开启问题解决方法
  14. 实现IP地址归属地显示功能、号码归属地查询
  15. DLL注入——使用全局钩子
  16. python提取文字的轮廓_opencv 轮廓提取文字
  17. 数据存储服务(存储服务器搭建细谈)
  18. Python的seek函数
  19. 华为交换机配置consol密码及vty密码
  20. 源码:批量修改喜马拉雅下载节目的文件名

热门文章

  1. 【华为机试真题 Python实现】考古学家【2022 Q2 | 100分】
  2. 2021最新版RabbitMQ完整教程学习笔记
  3. mybatis日志==> Preparing在哪里打印的
  4. Pyspark 报错 “系统找不到指定的路径“
  5. 通用格式HDMap --- 测绘学报50卷--通用化高精地图数据模型
  6. 测绘(gis,rs)类核心期刊
  7. 什么是线性结构,什么是非线性结构?
  8. 详解线性结构和非线性结构
  9. 视频教程-桫哥-GOlang-12数据库-Go语言
  10. Android 适配手机和平板