前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >激活函数与神经网络------带你迅速了解sigmoid,tanh,ReLU等激活函数!!!

激活函数与神经网络------带你迅速了解sigmoid,tanh,ReLU等激活函数!!!

作者头像
小言从不摸鱼
发布于 2024-09-10 11:58:48
发布于 2024-09-10 11:58:48
16400
代码可运行
举报
文章被收录于专栏:机器学习入门机器学习入门
运行总次数:0
代码可运行

🍔 神经网络

🐻 什么是神经网络工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN),是一种模仿生物神经网络结构和功能的 计算模型。人脑可以看做是一个生物神经网络,由众多的神经元连接而成。各个神经元传递复杂的电信号,树突接收到输入信号,然后对信号进行处理,通过轴突输出信号。下图是生物神经元示意图:

当电信号通过树突进入到细胞核时,会逐渐聚集电荷。达到一定的电位后,细胞就会被激活,通过轴突发出电信号。

🐻 人工神经网络 那怎么构建人工神经网络中的神经元呢?

这个流程就像,来源不同树突(树突都会有不同的权重)的信息, 进行的加权计算, 输入到细胞中做加和,再通过激活函数输出细胞值。 接下来,我们使用多个神经元来构建神经网络,相邻层之间的神经元相互连接,并给每一个连接分配一个强度,如下图所示:

​xunsu 神经网络中信息只向一个方向移动,即从输入节点向前移动,通过隐藏节点,再向输出节点移动。其中的基本部分是:

  1. 输入层: 即输入 x 的那一层
  2. 输出层: 即输出 y 的那一层
  3. 隐藏层: 输入层和输出层之间都是隐藏层

特点是: 同一层的神经元之间没有连接。 第 N 层的每个神经元和第 N-1层 的所有神经元相连(这就是full connected的含义), 第N-1层神经元的输出就是第N层神经元的输入。每个连接都有一个权值。

🍔 网络非线性因素的理解

激活函数用于对每层的输出数据进行变换, 进而为整个网络结构结构注入了非线性因素。此时, 神经网络就可以拟合各种曲线。如果不使用激活函数,整个网络虽然看起来复杂,其本质还相当于一种线性模型,如下公式所示:

  1. 没有引入非线性因素的网络等价于使用一个线性模型来拟合
  2. 通过给网络输出增加激活函数, 实现引入非线性因素, 使得网络模型可以逼近任意函数, 提升网络对复杂问题的拟合能力.

另外通过图像可视化的形式理解:

神经网络可视化

我们发现增加激活函数之后, 对于线性不可分的场景,神经网络的拟合能力更强。

🍔 常见的激活函数

激活函数主要用来向神经网络中加入非线性因素,以解决线性模型表达能力不足的问题,它对神经网络有着极其重要的作用。我们的网络参数在更新时,使用的反向传播算法(BP),这就要求我们的激活函数必须可微。

2.1 sigmoid 激活函数

sigmoid 激活函数的函数图像如下:

从 sigmoid 函数图像可以得到,sigmoid 函数可以将任意的输入映射到 (0, 1) 之间,当输入的值大致在 <-6 或者 >6 时,意味着输入任何值得到的激活值都是差不多的,这样会丢失部分的信息。比如:输入 100 和输出 10000 经过 sigmoid 的激活值几乎都是等于 1 的,但是输入的数据之间相差 100 倍的信息就丢失了。

对于 sigmoid 函数而言,输入值在 [-6, 6] 之间输出值才会有明显差异,输入值在 [-3, 3] 之间才会有比较好的效果。

通过上述导数图像,我们发现导数数值范围是 (0, 0.25),当输入 <-6 或者 >6 时,sigmoid 激活函数图像的导数接近为 0,此时网络参数将更新极其缓慢,或者无法更新。

一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象。而且,该激活函数并不是以 0 为中心的,所以在实践中这种激活函数使用的很少。sigmoid函数一般只用于二分类的输出层。

在 PyTorch 中使用 sigmoid 函数的示例代码如下💯 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import torch
import matplotlib.pyplot as plt
import torch.nn.functional as F


def test():
    _, axes = plt.subplots(1, 2)

    # 函数图像
    x = torch.linspace(-20, 20, 1000)
    y = F.tanh(x)
    axes[0].plot(x, y)
    axes[0].grid()
    axes[0].set_title('Sigmoid 函数图像')

    # 导数图像
    x = torch.linspace(-20, 20, 1000, requires_grad=True)
    torch.sigmoid(x).sum().backward()

    axes[1].plot(x.detach(), x.grad)
    axes[1].grid()
    axes[1].set_title('Sigmoid 导数图像')

    plt.show()


if __name__ == '__main__':
    test()

2.2 tanh 激活函数

Tanh 叫做双曲正切函数,其公式如下:

Tanh 的函数图像、导数图像如下:

由上面的函数图像可以看到,Tanh 函数将输入映射到 (-1, 1) 之间,图像以 0 为中心,在 0 点对称,当输入 大概<-3 或者 >3 时将被映射为 -1 或者 1。其导数值范围 (0, 1),当输入的值大概 <-3 或者 > 3 时,其导数近似 0。

🐼 与 Sigmoid 相比:

Tanh是以 0 为中心的,使得其收敛速度要比 Sigmoid 快,减少迭代次数。然而,从图中可以看出,Tanh 两侧的导数也为 0,同样会造成梯度消失。

若使用时可在隐藏层使用tanh函数,在输出层使用sigmoid函数。

代码演示如下💯:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import torch
import matplotlib.pyplot as plt
import torch.nn.functional as F


def test():

    _, axes = plt.subplots(1, 2)

    # 函数图像
    x = torch.linspace(-20, 20, 1000)
    y = F.tanh(x)
    axes[0].plot(x, y)
    axes[0].grid()
    axes[0].set_title('Tanh 函数图像')

    # 导数图像
    x = torch.linspace(-20, 20, 1000, requires_grad=True)
    F.tanh(x).sum().backward()

    axes[1].plot(x.detach(), x.grad)
    axes[1].grid()
    axes[1].set_title('Tanh 导数图像')

    plt.show()

if __name__ == '__main__':
    test()

2.3 ReLU 激活函数

ReLU 激活函数公式如下:

函数图像如下:

从上述函数图像可知,ReLU 激活函数将小于 0 的值映射为 0,而大于 0 的值则保持不变,它更加重视正信号,而忽略负信号,这种激活函数运算更为简单,能够提高模型的训练效率。

但是,如果我们网络的参数采用随机初始化时,很多参数可能为负数,这就使得输入的正值会被舍去,而输入的负值则会保留,这可能在大部分的情况下并不是我们想要的结果。

ReLU 的导数图像如下:

ReLU是目前最常用的激活函数。 从图中可以看到,当x<0时,ReLU导数为0,而当x>0时,则不存在饱和问题。所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。然而,随着训练的推进,部分输入会落入小于0区域,导致对应权重无法更新。这种现象被称为“神经元死亡”。

🐼 与sigmoid相比,RELU的优势是:

采用sigmoid函数,计算量大(指数运算),反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。 sigmoid函数反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练。 Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。

2.4 SoftMax

softmax用于多分类过程中,它是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。

计算方法如下图所示:

Softmax 直白来说就是将网络输出的 logits 通过 softmax 函数,就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们将它理解成概率,选取概率最大(也就是值对应最大的)节点,作为我们的预测目标类别。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import torch


if __name__ == '__main__':

    scores = torch.tensor([0.2, 0.02, 0.15, 0.15, 1.3, 0.5, 0.06, 1.1, 0.05, 3.75])
    probabilities = torch.softmax(scores, dim=0)
    print(probabilities)

程序输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tensor([0.0212, 0.0177, 0.0202, 0.0202, 0.0638, 0.0287, 0.0185, 0.0522, 0.0183,
        0.7392])

🍔 小节

本小节带着大家了解下常见的激活函数,以及对应的 API 的使用。除了上述的激活函数,还存在很多其他的激活函数,如下图所示:

这么多激活函数, 我们应该如何选择呢?

🍬 对于隐藏层:

  1. 优先选择RELU激活函数
  2. 如果ReLu效果不好,那么尝试其他激活,如Leaky ReLu等。
  3. 如果你使用了Relu, 需要注意一下Dead Relu问题, 避免出现大的梯度从而导致过多的神经元死亡。
  4. 不要使用sigmoid激活函数,可以尝试使用tanh激活函数

🍬 对于输出层

  1. 二分类问题选择sigmoid激活函数
  2. 多分类问题选择softmax激活函数
  3. 回归问题选择identity激活函数
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-08-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
神经网络的激活函数
人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN),是一种模仿生物神经网络结构和功能的 计算模型。人脑可以看做是一个生物神经网络,由众多的神经元连接而成。各个神经元传递复杂的电信号,树突接收到输入信号,然后对信号进行处理,通过轴突输出信号。
@小森
2024/05/03
1690
神经网络的激活函数
【机器学习】揭开激活函数的神秘面纱
激活函数(Activation Function)是神经网络中非常关键的组成部分,主要用于在神经网络的节点(或称神经元)上引入非线性因素。这是因为神经网络的基本计算单元是线性加权和,而单纯的线性组合无法模拟现实世界中复杂的非线性关系。通过引入激活函数,神经网络能够学习并模拟各种复杂的映射关系。
小言从不摸鱼
2024/09/10
2150
【机器学习】揭开激活函数的神秘面纱
一文速学-让神经网络不再神秘,一天速学神经网络基础-激活函数(二)
前一篇文章我们具体讲述了神经网络神经元的基本构造,以及引入了神经网络一些概念性质,有了这些基础我们就能更好的理解每一层神经网络究竟要做什么,如何工作的。
fanstuck
2024/03/11
5571
一文速学-让神经网络不再神秘,一天速学神经网络基础-激活函数(二)
神经网络中的激活函数具体是什么?为什么ReLu要好过于tanh和sigmoid function?
为什么引入激活函数? 如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。 正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入(以及一些人的生物解释balabala)。
机器学习AI算法工程
2018/03/15
3K0
神经网络中的激活函数具体是什么?为什么ReLu要好过于tanh和sigmoid function?
神经网络中常见的激活函数
深度学习中已经成为了人工智能领域的必备工具,源于人工神经网络的研究,含多个隐藏层的多层感知器就是一种深度学习结构。寻找隐藏层的权重参数和偏置的过程,就是常说的“学习”过程,其遵循的基本原则就是使得网络最终的输出误差最小化。在神经⽹络中,激活函数是必须选择的众多参数之⼀,从而使神经⽹络获得最优的结果和性能。
半吊子全栈工匠
2022/12/03
1.9K0
神经网络中常见的激活函数
【深度学习实验】前馈神经网络(二):使用PyTorch实现不同激活函数(logistic、tanh、relu、leaky_relu)
前馈神经网络的优点包括能够处理复杂的非线性关系,适用于各种问题类型,并且能够通过训练来自动学习特征表示。然而,它也存在一些挑战,如容易过拟合、对大规模数据和高维数据的处理较困难等。为了应对这些挑战,一些改进的网络结构和训练技术被提出,如卷积神经网络(Convolutional Neural Networks)和循环神经网络(Recurrent Neural Networks)等。
Qomolangma
2024/07/30
2930
【深度学习实验】前馈神经网络(二):使用PyTorch实现不同激活函数(logistic、tanh、relu、leaky_relu)
5分钟了解神经网络激活函数
机器学习是一个使用统计学和计算机科学原理来创建统计模型的研究领域,用于执行诸如预测和推理之类的主要任务。这些模型是给定系统的输入和输出之间的数学关系集。学习过程是估计模型参数的过程,以便模型可以执行指定的任务。学习过程会尝试使机器具有学习能力,而无需进行显式编程。这是ANN的作用。
deephub
2020/05/09
9560
5分钟了解神经网络激活函数
python实现之激活函数
激活函数(Activation Function),就是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。
python与大数据分析
2022/03/11
4460
python实现之激活函数
深度学习中常见激活函数的原理和特点
前面一些分享文章提到了激活函数,这篇文章将介绍各种激活函数,下一篇将分享我和同事在业务中对激活函数的一些思考与应用。
自学气象人
2023/06/20
1.3K0
深度学习中常见激活函数的原理和特点
深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
深度学习基础入门篇四:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
汀丶人工智能
2023/04/12
14.6K1
神经网络,激活函数,反向传播
目录 1. 深度学习有哪些应用 2. 什么是神经网络 2.1 什么是感知器 2.2 神经网络的结构 2.3 为什么神经网络具有非线性切分能力 3. 神经网络的计算过程 3.1 计算过程 3.2 随机初
大数据技术与机器学习
2019/11/20
8310
A.深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,最终的输出都是输入的线性组合。 激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数。
汀丶人工智能
2023/04/17
1.4K0
A.深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
一文讲透神经网络的激活函数
原理上来说,神经网络模型的训练过程其实就是拟合一个数据分布(x)可以映射到输出(y)的数学函数,即 y= f(x)。
算法进阶
2022/06/02
7710
一文讲透神经网络的激活函数
入门必看!一文读懂神经网络中的激活函数(二)
看看深度学习之激活函数 本篇接着上一篇推文入门《必看!从零开始了解到训练神经网络(一)》,在介绍完神经网络的基本原理和结构之后,继续介绍神经网络中的关键之一 —— 激活函数。 树根这一部分会给大家通俗讲一下激活函数的概念,原理以及作用,还有实际应用中各种激活函数的优缺点。因为激活函数本身就是一种数学函数,推文中出现数学公式在所难免,但是树根力求讲得通俗清晰,让初学者都能读懂,轻松入门深度学习。 1 感知机 Percrptron Activation Function 感知机由Rosenblatt于1957年
企鹅号小编
2018/01/31
3K0
入门必看!一文读懂神经网络中的激活函数(二)
从ReLU到GELU,一文概览神经网络的激活函数
在计算每一层的激活值时,我们要用到激活函数,之后才能确定这些激活值究竟是多少。根据每一层前面的激活、权重和偏置,我们要为下一层的每个激活计算一个值。但在将该值发送给下一层之前,我们要使用一个激活函数对这个输出进行缩放。本文将介绍不同的激活函数。
机器之心
2019/12/23
4.9K0
机器学习 深度学习中激活函数sigmoid relu tanh gelu等汇总整理
这篇博客主要总结一下常用的激活函数公式及优劣势,包括sigmoid relu tanh gelu
大鹅
2021/09/12
3.3K0
干货 | 深入理解深度学习中的激活函数
生物神经网络是人工神经网络的起源。然而,人工神经网络(ANNs)的工作机制与大脑的工作机制并不是十分的相似。不过在我们了解为什么把激活函数应用在人工神经网络中之前,了解一下激活函数与生物神经网络的关联依然是十分有用的。
用户1150922
2019/05/27
7080
为神经网络选择正确的激活函数
来源:Deephub Imba本文共3400字,建议阅读5分钟本篇文章中我们将讨论神经网络中常见的激活函数,并使用可视化技术帮助你了解激活函数的函数定义和不同的使用场景。 我们都知道神经网络模型中使用激活函数的主要目的是将非线性特性引入到我们的网络中,强化网络的学习能力。激活函数应用于隐藏层和输出层中每个节点的称为 z 的输入加权和(此处输入可以是原始数据或前一层的输出)。 在本篇文章中我们将讨论神经网络中常见的激活函数,并使用可视化技术帮助你了解激活函数的函数定义和不同的使用场景。 在看完本文章后,你可以
数据派THU
2022/03/04
1.4K0
理解神经网络的激活函数
激活函数在神经网络中具有重要的地位,对于常用的函数如sigmoid,tanh,ReLU,不少读者都已经非常熟悉。但是你是否曾想过这几个问题:
SIGAI学习与实践平台
2018/08/07
1.2K0
理解神经网络的激活函数
神经网络常用激活函
前面我们说过神经网络的非线性主要是由激活函数实现的,如果没有激活函数的引入,那么无论多么复杂的神经网络其实都可以看成是多个单层神经网络的线性叠加,最后结果依然是线性的。
用户7569543
2020/07/20
7910
推荐阅读
相关推荐
神经网络的激活函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档