一文概览深度学习中的激活函数

C和指针之数组编程练习5 (矩阵相乘) 1、问题 5.如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C。这个矩阵的每个元素是由下面的公式决定的: 例如: 结果矩阵中14这个值是通过2×-2加上-6×-3得到的,编写一个函数,用于执行两个矩阵的乘法。函数的原型如下: void matrix_multiply(int *m1, int *m2, int *r, i 阅读详情

编辑 :机器之心

Understanding Activation Functions in Deep Learning

1. 什么是激活函数?

生物神经网络启发了人工神经网络的发展。但是,ANN 并非大脑运作的近似表示。不过在我们了解为什么在人工神经网络中使用激活函数之前,先了解生物神经网络与激活函数的相关性是很有用处的。

典型神经元的物理结构包括细胞体(cell body)、向其他神经元发送信号的轴突(axon)和接收其他神经元发送的信号或信息的树突(dendrites)。

生物神经网络

上图中,红色圆圈代表两个神经元交流的区域。神经元通过树突接收来自其他神经元的信号。树突的权重叫作突触权值(synaptic weight),将和接收的信号相乘。来自树突的信号在细胞体内不断累积,如果信号强度超过特定阈值,则神经元向轴突传递信息。如未超过,则信号被该神经元「杀死」,无法进一步传播。

激活函数决定是否传递信号。在这种情况下,只需要带有一个参数(阈值)的简单阶梯函数。现在,当我们学习了一些新的东西(或未学习到什么)时,一些神经元的阈值和突触权值会发生改变。这使得神经元之间产生新的连接,大脑学会新的东西。

让我们再次理解这一概念,不过这次要使用人工神经元。

上图中(x_1, ..., x_n)是信号向量,它和权重(w_1, ..., w_n)相乘。然后再累加(即求和 + 偏置项 b)。最后,激活函数 f 应用于累加的总和。

注意:权重(w_1, ..., w_n)和偏置项 b 对输入信号进行线性变换。而激活函数对该信号进行非线性变换,这使得我们可以任意学习输入和输出之间的复杂变换。

过去已经出现了很多种函数,但是寻找使神经网络更好更快学习的激活函数仍然是活跃的研究方向。

2. 神经网络如何学习?

我们有必要对神经网络如何学习有一个基本了解。假设网络的期望输出是 y(标注值),但网络实际输出的是 y'(预测值)。预测输出和期望输出之间的差距(y - y')可以转化成一种度量,即损失函数(J)。神经网络犯大量错误时,损失很高;神经网络犯错较少时,损失较低。训练目标就是找到使训练集上的损失函数最小化的权重矩阵和偏置向量。

在下图中,损失函数的形状像一个碗。在训练过程的任一点上,损失函数关于梯度的偏导数是那个位置的梯度。沿偏导数预测的方向移动,就可以到达谷底,使损失函数最小化。使用函数的偏导数迭代地寻找局部极小值的方法叫作梯度下降。

人工神经网络中的权重使用反向传播的方法进行更新。损失函数关于梯度的偏导数也用于更新权重。从某种意义上来说,神经网络中的误差根据求导的链式法则执行反向传播。这通过迭代的方式来实施,经过多次迭代后,损失函数达到极小值,其导数变为 0。

我们计划在其他文章中介绍反向传播。这里主要指出的就是训练过程中出现的求导步骤。

3. 激活函数的类型

线性激活函数:这是一种简单的线性函数,公式为:f(x) = x。基本上,输入到输出过程中不经过修改。

线性激活函数

非线性激活函数:用于分离非线性可分的数据,是最常用的激活函数。非线性方程控制输入到输出的映射。非线性激活函数有 Sigmoid、Tanh、ReLU、LReLU、PReLU、Swish 等。下文中将详细介绍这些激活函数。


非线性激活函数

4. 为什么人工神经网络需要非线性激活函数?

神经网络用于实现复杂的函数,非线性激活函数可以使神经网络随意逼近复杂函数。没有激活函数带来的非线性,多层神经网络和单层无异。

现在我们来看一个简单的例子,帮助我们了解为什么没有非线性,神经网络甚至无法逼近异或门(XOR gate)、同或门(XNOR gate)等简单函数。下图是一个异或门函数。叉和圈代表了数据集的两个类别。当 x_1、x_2 两个特征一样时,类别标签是红叉;不一样,就是蓝圈。两个红叉对于输入值 (0,0) 和 (1,1) 都有输出值 0,两个蓝圈对于输入值 (0,1) 和 (1,0) 都有输出值 1。

异或门函数的图示

从上图中,我们可以看到数据点非线性可分。也就是说,我们无法画出一条直线使蓝圈和红叉分开来。因此,我们需要一个非线性决策边界(non-linear decision boundary)来分离它们。

激活函数对于将神经网络的输出压缩进特定边界内也非常关键。神经元的输出值可以非常大。该输出在未经修改的情况下馈送至下一层神经元时,可以被转换成更大的值,这样过程就需要极大算力。激活函数的一个任务就是将神经元的输出映射到有界的区域(如,0 到 1 之间)。

了解这些背景知识之后,我们就可以了解不同类型的激活函数了。

5. 不同类型的非线性激活函数

5.1 Sigmoid

Sigmoid又叫作 Logistic 激活函数,它将实数值压缩进 0 到 1 的区间内,还可以在预测概率的输出层中使用。该函数将大的负数转换成 0,将大的正数转换成 1。数学公式为:

下图展示了 Sigmoid 函数及其导数:

Sigmoid 激活函数

Sigmoid 导数

Sigmoid 函数的三个主要缺陷:

1. 梯度消失:注意:Sigmoid 函数趋近 0 和 1 的时候变化率会变得平坦,也就是说,Sigmoid 的梯度趋近于 0。神经网络使用 Sigmoid 激活函数进行反向传播时,输出接近 0 或 1 的神经元其梯度趋近于 0。这些神经元叫作饱和神经元。因此,这些神经元的权重不会更新。此外,与此类神经元相连的神经元的权重也更新得很慢。该问题叫作梯度消失。因此,想象一下,如果一个大型神经网络包含 Sigmoid 神经元,而其中很多个都处于饱和状态,那么该网络无法执行反向传播。

2. 不以零为中心:Sigmoid 输出不以零为中心的。

3. 计算成本高昂:exp() 函数与其他非线性激活函数相比,计算成本高昂。

下一个要讨论的非线性激活函数解决了 Sigmoid 函数中值域期望不为 0 的问题。

5.2 Tanh

Tanh 激活函数

Tanh 导数

Tanh 激活函数又叫作双曲正切激活函数(hyperbolic tangent activation function)。与 Sigmoid 函数类似,Tanh 函数也使用真值,但 Tanh 函数将其压缩至-1 到 1 的区间内。与 Sigmoid 不同,Tanh 函数的输出以零为中心,因为区间在-1 到 1 之间。你可以将 Tanh 函数想象成两个 Sigmoid 函数放在一起。在实践中,Tanh 函数的使用优先性高于 Sigmoid 函数。负数输入被当作负值,零输入值的映射接近零,正数输入被当作正值。唯一的缺点是:

1. Tanh 函数也会有梯度消失的问题,因此在饱和时也会「杀死」梯度。

为了解决梯度消失问题,我们来讨论另一个非线性激活函数——修正线性单元(rectified linear unit,ReLU),该函数明显优于前面两个函数,是现在使用最广泛的函数。

5.3 修正线性单元(ReLU)

ReLU 激活函数

ReLU 导数

从上图可以看到,ReLU 是从底部开始半修正的一种函数。数学公式为:

当输入 x<0 时,输出为 0,当 x> 0 时,输出为 x。该激活函数使网络更快速地收敛。它不会饱和,即它可以对抗梯度消失问题,至少在正区域(x> 0 时)可以这样,因此神经元至少在一半区域中不会把所有零进行反向传播。由于使用了简单的阈值化(thresholding),ReLU 计算效率很高。但是 ReLU 神经元也存在一些缺点:

1. 不以零为中心:和 Sigmoid 激活函数类似,ReLU 函数的输出不以零为中心。

2. 前向传导(forward pass)过程中,如果 x < 0,则神经元保持非激活状态,且在后向传导(backward pass)中「杀死」梯度。这样权重无法得到更新,网络无法学习。当 x = 0 时,该点的梯度未定义,但是这个问题在实现中得到了解决,通过采用左侧或右侧的梯度的方式。

为了解决 ReLU 激活函数中的梯度消失问题,当 x < 0 时,我们使用 Leaky ReLU——该函数试图修复 dead ReLU 问题。下面我们就来详细了解 Leaky ReLU。

5.4 Leaky ReLU

Leaky ReLU 激活函数

该函数试图缓解 dead ReLU 问题。数学公式为:

Leaky ReLU 的概念是:当 x < 0 时,它得到 0.1 的正梯度。该函数一定程度上缓解了 dead ReLU 问题,但是使用该函数的结果并不连贯。尽管它具备 ReLU 激活函数的所有特征,如计算高效、快速收敛、在正区域内不会饱和。

Leaky ReLU 可以得到更多扩展。不让 x 乘常数项,而是让 x 乘超参数,这看起来比 Leaky ReLU 效果要好。该扩展就是 Parametric ReLU。

5.5 Parametric ReLU

PReLU 函数的数学公式为:

其中是超参数。这里引入了一个随机的超参数,它可以被学习,因为你可以对它进行反向传播。这使神经元能够选择负区域最好的梯度,有了这种能力,它们可以变成 ReLU 或 Leaky ReLU。

总之,最好使用 ReLU,但是你可以使用 Leaky ReLU 或 Parametric ReLU 实验一下,看看它们是否更适合你的问题。

5.6 Swish

Swish 激活函数

该函数又叫作自门控激活函数,它近期由谷歌的研究者发布,数学公式为:

根据论文(https://arxiv.org/abs/1710.05941v1),Swish 激活函数的性能优于 ReLU 函数。

根据上图,我们可以观察到在 x 轴的负区域曲线的形状与 ReLU 激活函数不同,因此,Swish 激活函数的输出可能下降,即使在输入值增大的情况下。大多数激活函数是单调的,即输入值增大的情况下,输出值不可能下降。而 Swish 函数为 0 时具备单侧有界(one-sided boundedness)的特性,它是平滑、非单调的。更改一行代码再来查看它的性能,似乎也挺有意思。

欢迎扫码添加小编微信加入机器学习微信群(请备注研究方向),交流算法,共同进步:

YOLOv5改进系列(二) 更换激活函数SiLU,ReLU,ELU,Hardswish,Mish,Softplus,AconC等 1.1 什么是激活函数?在接触到深度学习(Deep Learning)后,特别是神经网络中,我们会发现在每一层的神经网络输出后都会使用一个函数(比如sigmoid,tanh,Relu等等)对结果进行运算,这个函数就是激活函数(Activation Function)。那么为什么需要添加激活函数呢?如果不添加又会产生什么问题呢?首先,我们知道神经网络模拟了人类神经元的工作机理,**激活函数(Activation Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式。** 阅读详情

相关推荐

ASTRA Toolbox学习笔记-Python

ASTRA Toolbox 是一个用于处理 X 射线相干散射和 X 射线传输成像的开源算法工具箱。本文档概述了该工具箱的基本概念。

hou9021的博客 8263

干货丨 一文概览深度学习中的激活函数

文章来源:机器之心 本文从激活函数的背景知识开始介绍,重点讲解了不同类型的非线性激活函数:Sigmoid、Tanh、ReLU、LReLU、PReLU、Swish,并详细介绍了这些函数的优缺点。 本文介绍了多种激活函数,并且对比了激活函数的优劣。本文假设你对人工神经网络(AAN)有基本了解,如果没有,推荐先阅读机器之心介绍过的相关文章: 1. 什么是激活函数? 生物神

人工智能爱好者俱乐部 920

dq轴坐标系下的电路方程

dq轴坐标系下的电路方程 dq轴坐标系是一种常见的电路方程,但是再dq轴坐标系下电路元件的电压电流dq轴存在一定的耦合,本文针对三相电路推导了dq轴坐标系下的电路电路方程进行一个推导,首先先列出来派克变换的公式 派克变换 [AdAqA0]=23[cos⁡(θ)cos⁡(θ−2π/3)cos⁡(θ+2π/3)−sin⁡(θ)−sin⁡(θ−2π/3)−sin⁡(θ+2π/3)1/21/21/2][AaAbAc]\left[\begin{array}{c}A_d\\A_q\\A_0 \end{array}\ri

Mr.Young的博客 1万+

c2064 项不会计算为接受0个参数的函数_Pytorch的19个Loss Function(上)

导读 作为一名调包算法工程师,在调包的同时根据特定任务改改loss function是非常重要的,所以小老弟今天就基于Pytorch内置的函数,对损失函数做一个小总结。Pytorch 的损失函数在torch.nn下,共19个(1.7.0版本)。本篇包括L1损失、MSE损失、NLL损失、CROSSENTROPY损失、CTC损失和POISSONNLL损失,重点介绍后三个。L1 Losstor...

weixin_39835158的博客 380

Visual Studio 6.0 镜像下载全指南:从企业版到中文版

本文提供Visual Studio 6.0企业版和中文版的镜像下载全指南,包括详细版本解析、已验证的下载链接及校验信息。针对现代系统的安装技巧和兼容性处理方案,帮助开发者高效获取并运行这一经典开发工具,特别适合维护遗留系统的专业人员。

weixin_33712987的博客 1112

PaddleOCR转ONNX模型实战:5分钟搞定中文OCR推理部署(附完整代码)

本文详细介绍了将PaddleOCR模型转换为ONNX格式并进行高效推理部署的完整实战方案。通过Paddle2ONNX工具实现模型转换,利用ONNX Runtime构建跨平台推理引擎,涵盖环境配置、模型优化、批量处理及多平台部署等关键步骤,显著提升中文OCR在边缘设备上的推理性能。

weixin_29051811的博客 617

入门 | 一文概览深度学习中的激活函数

选自Medium 作者:Kailash Ahirwar 机器之心编译 参与:黄小天、刘晓坤 近日,Mate Labs 联合创始人兼 CTO 在 Medium 上撰文《Everything you need to know about Neural Networks》,从神经元到 Epoch,扼要介绍了神经网络的主要核心术语。

深度学习世界 502

DSP篇--C6678功能调试系列之SPI调试

SPI传输数据分为线上直接收发和通过EDMA的数据传输两种。第一种是直接将数据放在线上(SPIDAT1),在寄存器(SPIBUF)中写入命令实现数据的收发;第二种需要配置EDMA,将数据buffer直接作为EDMA的数据源进行传输,其需要配置的参数和中断与EDMA一致。

nanke_yh的博客 1261

一文搞懂激活函数

1、什么是激活函数 神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。 2、激活函数的用途(为什么需要激活函数)? 1. 对于y=ax+b 这样的函数,当x的输入很大时,y的输出也是无限大小的,经过多层网络叠加后,值更加膨胀的没边了,这显然不符合我们的预期,很多情况下我们希...

ytusdc的博客 1万+

基于YOLO26深度学习框架的文档表格识别系统的算法研究实现方法

本文研究了基于YOLO26深度学习框架的文档表格识别系统实现方法。系统采用YOLO26网络架构,通过数据预处理、模型训练、检测推理和表格分析四个模块实现高效表格识别。研究详细阐述了数据归一化、增强等技术处理,以及采用迁移学习策略优化模型训练过程。实验表明,该系统能有效识别多种表格结构并生成结构化数据,为文档自动化处理提供了可靠解决方案。

一键难忘的博客 976

对称式目镜设计实例

对称式目镜设计实例

weixin_72050316的博客 1163

深度学习——激活函数

当 x0 时,则不存在饱和问题。所以,ReLU 能够在 x>0 时保持梯。ReLU 激活函数将小于 0 的值映射为 0,而大于 0 的值则保持不变,它。即:Softmax 就是将网络输出的。通过 softmax 函数,就。(也就是值对应最大的)节。,这种激活函数运算更为。,那么我们将它理解成。

batian123的博客 5260

安全监控:人员行为分析_(2).人员行为分析基础理论

人员行为分析是指利用计算机视觉技术对视频中的人类行为进行实时或离线检测、识别和理解的过程。视频采集:通过摄像头等设备获取视频数据。视频预处理:对视频数据进行噪声过滤、图像增强等处理,以便后续分析。特征提取:从视频中提取出与人员行为相关的特征,如人体姿势、动作轨迹等。行为识别:利用机器学习或深度学习模型对提取的特征进行分类,识别出具体的人员行为。行为理解:对识别出的行为进行进一步分析,理解其背后的意图或状态。在人员行为分析中,常用的公开数据集包括UCF101、HMDB51、ActivityNet等。

zhubeibei168的博客 1347

深入理解深度学习中的激活函数

1. 什么是激活函数? 生物神经网络是人工神经网络的起源。然而,人工神经网络(ANNs)的工作机制与大脑的工作机制并不是十分的相似。不过在我们了解为什么把激活函数应用在人工神经网络中之前,了解一下激活函数与生物神经网络的关联依然是十分有用的。一个典型神经元的物理结构由细胞体、向其他神经元发送信息的轴突以及从其他神经元接受信号或信息的树突组成。 ...

知识搬运工的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【深度学习】Java DL4J 2024年度技术总结

在当今数字化浪潮中,深度学习作为人工智能领域的核心驱动力,正以前所未有的速度改变着我们的生活和工作方式。从图像识别到自然语言处理,从医疗诊断到金融预测,深度学习的应用场景无处不在,展现出巨大的潜力和价值。Java作为一门广泛应用于企业级开发的编程语言,以其稳定性、可移植性和丰富的类库资源,在软件开发领域占据着重要地位。然而,传统的Java开发在面对深度学习复杂的模型构建和大规模数据处理时,往往显得力不从心。的出现,为Java开发者打开了一扇通往深度学习世界的大门。DL4J是一个专为Java和Scala。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

一文掌握Sigmoid激活函数:深度学习的“隐形”英雄

Sigmoid函数,有时也称作逻辑函数或Logistic函数,是深度学习和神经网络中最初期使用的一种激活函数。其中,e是自然对数的底数(约等于2.71828),x是神经元的输入。Sigmoid函数的图形是一个S形的曲线,也被称为S曲线(S-curve)。这个函数的核心特点是能够把输入值压缩到0到1的范围内。这种压缩的效果给予了它一些特别的优点,在机器学习和统计领域被广泛利用。Sigmoid函数曾是深度学习领域的宠儿,尽管现在它可能不再是第一选择,但在某些场景下它依旧显示出其不可替代的优势。

码上飞扬的博客 3915

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

都2021年了,不会还有人连深度学习都不了解吧(一)- 激活函数篇

一、前言 本人目前研一,研究方向为基于深度学习的图像分割,转眼间已接触深度学习快1年,研一生活也即将结束,期间看了大量的英文文献,做了大量的实验,也算是对深度学习有了初步的了解吧。 二、激活函数介绍 2.1 激活函数是什么 2.2 为什么使用激活函数 三、常用的激活函数 四、激活函数的一些变体 计划 – 深度学习学习系列 都2021年了,不会还有人连深度学习基础还不了解吧?(二)-- 常用卷积方式 都2021年了,不会还有人连深度学习基础还不了解吧?(三)-- 常用损失函数 都2021年了,不会还有人连深度

奋斗の博客 9015
上一篇: 基于 Python 的 11 种经典数据降维算法
下一篇: 卷积有多少种?一文读懂深度学习的各种卷积
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值