前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >8个深度学习中常用的激活函数

8个深度学习中常用的激活函数

作者头像
deephub
发布于 2021-07-01 02:52:58
发布于 2021-07-01 02:52:58
67400
代码可运行
举报
文章被收录于专栏:DeepHub IMBADeepHub IMBA
运行总次数:0
代码可运行

激活函数,又称转换函数,是设计神经网络的关键。激活函数在某种意义上是重要的,因为它被用来确定神经网络的输出。它将结果值映射为0到1或-1到1等(取决于函数)。激活函数还有另一个名称,称为Squashing函数,当限制了激活函数的范围时使用这个名称。激活函数应用于神经网络的每个节点,并决定该神经元是否应该被“触发”/“激活”。

为什么选择激活函数是非常重要的。

当在隐藏层和输出层中实现时,激活函数的选择非常关键。模型的准确性和损失很大程度上依赖于激活函数。此外,必须根据您对模型的期望来选择它们。例如,在二值分类问题中,sigmoid函数是一种最优选择。

激活函数类型。大致可分为两类:

线性激活函数。

非线性激活函数。

为了方便展示我们导入如下库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import math as m
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

Sigmoid

sigmoid激活函数也称为logistic函数。Sigmoid函数在回归分类问题中非常流行。sigmoid函数给出的值的范围是0和1。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def sigmoid(x):
    return 1 / (1 + m.exp(-x))values_of_sigmoid = []
values_of_x = []
for i in range(-500,500,1):
    i = i*0.01
    values_of_x.append(i)
    values_of_sigmoid.append(sigmoid(i))plt.plot( values_of_x ,values_of_sigmoid)
plt.xlabel("values of x")
plt.ylabel("value of sigmoid")

tanH

这个函数非常类似于sigmoid激活函数。这个函数在-1到1的范围内接受任何实值作为输入和输出值。输入越大(越正),输出值越接近1.0,而输入越小(越负),输出越接近-1.0。Tanh激活函数计算如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def tanh(x):
    return (m.exp(x) - m.exp(-x)) / (m.exp(x) + m.exp(-x))values_of_tanh = []
values_of_x = []
for i in range(-500,500,1):
    i = i*0.001
    values_of_x.append(i)
    values_of_tanh.append(tanh(i))plt.plot( values_of_x ,values_of_tanh)
plt.xlabel("values of x")
plt.ylabel("value of tanh")

Softmax

Softmax激活函数输出一个和为1.0的值向量,可以解释为类隶属度的概率。Softmax是argmax函数的“软”版本,它允许一个“赢家通吃”函数的似然输出。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def softmax(x):
    e_x = np.exp(x - np.max(x))
    return e_x / e_x.sum()values_of_x = [i*0.01 for i in range(-500,500)]
plt.plot(scores ,softmax(values_of_x))
plt.xlabel("values of x")
plt.ylabel("value of softmax")

RELU 线性整流单元

ReLU可能是用于隐藏层的最常见的函数。它还可以有效地克服其他以前流行的激活函数(如Sigmoid和Tanh)的限制。具体来说,它不太容易受到阻止深度模型被训练的梯度下降消失问题的影响,尽管它可能会遇到诸如饱和单元等其他问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def ReLU(x):
    return max(0,x)values_of_relu = []
values_of_x = []
for i in range(-500,500,1):
    i = i*0.01
    values_of_x.append(i)
    values_of_relu.append(ReLU(i))plt.plot(values_of_x,values_of_relu)

Leaky ReLU

ReLU的问题:当给ReLU一个负值时,它立即变成零,这降低了模型合适地拟合或从数据训练的能力。这意味着ReLU激活函数的任何负输入都会在图中立即将该值转换为零,这反过来又会通过不适当地映射负值而影响结果图。

为了克服这个问题,Leaky ReLU被引入。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def leaky_ReLU(x):
    return max(0.1*x,x)values_of_L_relu = []
values_of_x = []
for i in range(-500,500,1):
    i = i*0.01
    values_of_x.append(i)
    values_of_L_relu.append(leaky_ReLU(i))plt.plot(values_of_x,values_of_L_relu)

下面几个函数都是RELU的变体基本上都是与Leaky 类似优化了激活函数负值时的返回

ELU

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
activation_elu = layers.Activation(‘elu’)x = tf.linspace(-3.0, 3.0, 100)
y = activation_elu(x) # once created, a layer is callable just like a functionplt.figure(dpi=100)
plt.plot(x, y)
plt.xlim(-3, 3)
plt.xlabel(“Input”)
plt.ylabel(“Output”)
plt.show()

SELU

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
activation_selu = layers.Activation('selu')x = tf.linspace(-3.0, 3.0, 100)
y = activation_selu(x) # once created, a layer is callable just like a functionplt.figure(dpi=100)
plt.plot(x, y)
plt.xlim(-3, 3)
plt.xlabel("Input")
plt.ylabel("Output")
plt.show()

Swish

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
activation_swish = layers.Activation(‘swish’)x = tf.linspace(-3.0, 3.0, 100)
y = activation_swish(x) # once created, a layer is callable just like a functionplt.figure(dpi=100)
plt.plot(x, y)
plt.xlim(-3, 3)
plt.xlabel(“Input”)
plt.ylabel(“Output”)
plt.show()

总结

常用于隐藏层激活函数:

一般递归神经网络使用Tanh或sigmoid激活函数,甚至两者都使用。例如,LSTM通常对循环连接使用Sigmoid激活,对输出使用Tanh激活。

1.多层感知器(MLP): ReLU激活函数。

2.卷积神经网络(CNN): ReLU激活函数。

3.递归神经网络:Tanh和/或Sigmoid激活函数。

如果你不确定使用哪个激活函数,你肯定可以尝试不同的组合,并寻找最适合的,但是可以从RELU开始

输出层激活功能:

输出层激活函数必须根据你要解决的问题类型来选择。例如,如果你有一个线性回归问题,那么线性激活函数将是有用的。下面是您可能面临的一些常见问题和使用的激活函数。

二进制分类:一个节点,sigmoid激活。

多类分类:每个类一个节点,softmax激活。

多标签分类:每个类一个节点,sigmoid激活。

以下是一些常用激活函数的公式和可视化显示,希望对你有帮助

作者:Rishabh sharma

原文地址:https://rishabh-sharma1103.medium.com/deep-learning-activation-functions-their-mathematical-implementation-b620d536d39b

deephub翻译组

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DeepHub IMBA 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【动手学深度学习笔记】之多层感知机(MLP)
多层感知机在单层神经网络的基础上引入了一到多个隐藏层(hidden layer)。如图所示的隐藏层一共有5个隐藏单元。由于输入层不涉及计算,因此这个多层感知机的层数为2。如图所示的多层感知机中的隐藏层和输出层都是全连接层。
树枝990
2020/08/20
2.7K0
深度学习中的激活函数完全指南:在数据科学的诸多曲线上进行现代之旅
原文:Towards Data Science deephub翻译组:zhangzc
deephub
2020/05/09
1.2K0
深度学习中的激活函数完全指南:在数据科学的诸多曲线上进行现代之旅
深度学习基础知识(一)--激活函数
在神经网络中加入激活函数存在的意义就是为网络增加非线性因素,比如全卷积神经网络,不加入激活函数,就是一堆线性操作矩阵运算,对于复杂任务仅用线性操作而不用复杂的函数表示肯定效果不会好。
languageX
2022/05/04
4.6K1
神经网络编程 - 前向传播和后向传播(附完整代码)
【导读】本文的目的是深入分析深层神经网络,剖析神经网络的结构,并在此基础上解释重要概念,具体分为两部分:神经网络编程和应用。在神经网络编程部分,讲解了前向传播和反向传播的细节,包括初始化参数、激活函数
WZEARW
2018/04/16
1.5K0
神经网络编程 - 前向传播和后向传播(附完整代码)
【激活函数合集】盘点当前最流行的激活函数及选择经验
在阅读DarkNet源码的时候发现作者定义了大量从古至今流行的损失函数,本着科普的态度我打算做一个全面的总结,所以就有了这篇文章。
BBuf
2020/02/26
2.9K0
一文概览深度学习中的激活函数
生物神经网络启发了人工神经网络的发展。但是,ANN 并非大脑运作的近似表示。不过在我们了解为什么在人工神经网络中使用激活函数之前,先了解生物神经网络与激活函数的相关性是很有用处的。
小小詹同学
2019/09/17
7350
一文速学-让神经网络不再神秘,一天速学神经网络基础-激活函数(二)
前一篇文章我们具体讲述了神经网络神经元的基本构造,以及引入了神经网络一些概念性质,有了这些基础我们就能更好的理解每一层神经网络究竟要做什么,如何工作的。
fanstuck
2024/03/11
5331
一文速学-让神经网络不再神秘,一天速学神经网络基础-激活函数(二)
【深度学习实验】前馈神经网络(二):使用PyTorch实现不同激活函数(logistic、tanh、relu、leaky_relu)
前馈神经网络的优点包括能够处理复杂的非线性关系,适用于各种问题类型,并且能够通过训练来自动学习特征表示。然而,它也存在一些挑战,如容易过拟合、对大规模数据和高维数据的处理较困难等。为了应对这些挑战,一些改进的网络结构和训练技术被提出,如卷积神经网络(Convolutional Neural Networks)和循环神经网络(Recurrent Neural Networks)等。
Qomolangma
2024/07/30
2340
【深度学习实验】前馈神经网络(二):使用PyTorch实现不同激活函数(logistic、tanh、relu、leaky_relu)
从ReLU到GELU,一文概览神经网络的激活函数
在计算每一层的激活值时,我们要用到激活函数,之后才能确定这些激活值究竟是多少。根据每一层前面的激活、权重和偏置,我们要为下一层的每个激活计算一个值。但在将该值发送给下一层之前,我们要使用一个激活函数对这个输出进行缩放。本文将介绍不同的激活函数。
机器之心
2019/12/23
4.6K0
关于深度学习系列笔记六(激活函数、损失函数、优化器)
关于激活函数、损失函数、优化器也是深度学习重要的构建,不同的激活函数、损失函数、优化器适用于不同的应用场景,目前只对损失函数的场景有一定了解,其他待探索。
python与大数据分析
2022/03/11
4770
关于深度学习系列笔记六(激活函数、损失函数、优化器)
五万字总结,深度学习基础。「建议收藏」
人工神经网络(Artificial Neural Networks,简写为ANNs)是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的,并具有自学习和自适应的能力。神经网络类型众多,其中最为重要的是多层感知机。为了详细地描述神经网络,我们先从最简单的神经网络说起。
全栈程序员站长
2022/08/31
1K0
五万字总结,深度学习基础。「建议收藏」
激活函数activation
激活函数在深度学习中扮演着非常重要的角色,它给网络赋予了非线性,从而使得神经网络能够拟合任意复杂的函数。
lyhue1991
2020/07/20
1.1K0
激活函数activation
21种NLP任务激活函数大比拼:你一定猜不到谁赢了
项目:https://github.com/UKPLab/emnlp2018-activation-functions
机器之心
2019/04/29
7210
21种NLP任务激活函数大比拼:你一定猜不到谁赢了
深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
深度学习基础入门篇四:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
汀丶人工智能
2023/04/12
13.4K1
AI知识点(1)--激活函数
激活函数是神经网络中非常重要的一个内容,神经网络是受到生物神经网络的启发,在生物神经网络中也存在着激活函数,而且激活函数决定了神经元之间是否要传递信号,而在人工的神经网络中,激活函数的作用则主要是给网络添加非线性因素,使得网络可以逼近任意复杂的函数,一个简单的神经元如下图所说,其中 f 表示的就是激活函数。
kbsc13
2019/12/31
1.3K0
AI知识点(1)--激活函数
caffe详解之激活函数层
在激活层中,对输入数据进行激活操作,是逐元素进行运算的,在运算过程中,没有改变数据的大小,即输入和输出的数据大小是相等的。神经网络中激活函数的主要作用是提供网络的非线性建模能力,如不特别说明,激活函数一般而言是非线性函数。假设一个示例神经网络中仅包含线性卷积和全连接运算,那么该网络仅能够表达线性映射,即便增加网络的深度也依旧还是线性映射,难以有效建模实际环境中非线性分布的数据。加入(非线性)激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。因此,激活函数是深度神经网络中不可或缺的部分。
AI异构
2020/07/29
8641
caffe详解之激活函数层
深度学习: 激活函数 (Activation Functions)
激活函数(activation function)层又称 非线性映射 (non-linearity mapping) 层,作用是 增加整个网络的非线性(即 表达能力 或 抽象能力)。
JNingWei
2018/09/27
3K0
深度学习: 激活函数 (Activation Functions)
深度学习激活函数TensorFlow版本
书中的第四章介绍了很多深度学习的激活函数,其中有一些激活函数是在pytorch中常见的,但是有一些激活函数是第一次见到,所以还是记录一下
Tom2Code
2022/11/21
2690
深度学习中常见激活函数的原理和特点
前面一些分享文章提到了激活函数,这篇文章将介绍各种激活函数,下一篇将分享我和同事在业务中对激活函数的一些思考与应用。
自学气象人
2023/06/20
1.3K0
深度学习中常见激活函数的原理和特点
激活函数其实并不简单:最新的激活函数如何选择?
如今,机器学习领域的科学进步速度是前所未有的。除非局限在一个狭窄的细分市场,否则要跟上时代的步伐是相当困难的。每天都有新论文出现并声称自己取得了一些最先进的成果。但是这些新发现中的大多数从来没有成为默认的首选方法,有时是因为它们没有最初希望的那么好,有时只是因为它们最终在新进展的洪流中崩溃了。
deephub
2021/09/15
1.3K0
激活函数其实并不简单:最新的激活函数如何选择?
推荐阅读
相关推荐
【动手学深度学习笔记】之多层感知机(MLP)
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验