当前位置: 首页 > news >正文

深度学习中的激活函数

      激活函数(activation function)是应用于网络中各个神经元输出的简单变换,为其引入非线性属性,使网络能够对更复杂的数据进行建模,使其能够学习更复杂的模式。如果没有激活函数,神经元只会对输入进行枯燥的线性数学运算。这意味着,无论我们在网络中添加多少层神经元,它所能学习的内容仍然有限,因为输出始终是输入的简单线性组合。

      激活函数是应用于神经元输出的数学函数。它将非线性引入模型,使网络能够学习和表示数据中的复杂模式。激活函数就像秘密武器,通过引入非线性并允许神经网络学习复杂模式,使神经网络更加强大。如果没有非线性,即使是深度网络也只能解决简单的线性可分问题。激活函数使神经网络能够对高度复杂的数据分布进行建模并解决高级深度学习任务。添加非线性激活函数可以带来灵活性,并使网络能够从数据中学习更复杂、更抽象的模式

      激活函数还有助于根据我们的要求将神经元的输出值限制在一定范围内。这很重要,因为激活函数的输入是W*x+b,其中W是权重,x是输入,然后将偏置b添加到其中。如果不将这个值限制在某个限度内,它的数量可能会非常高,尤其是在具有数百万个参数的超深神经网络的情况下。这将导致计算问题。

      激活函数的目的是为函数(即神经网络)添加某种非线性属性。如果没有激活函数,神经网络只能执行从输入x到输出y的线性映射。如果没有激活函数,前向传播过程中唯一的数学运算就是输入向量和权重矩阵之间的点积。由于单个点积是线性运算,因此连续的点积只不过是多个线性运算一个接一个地重复。连续的线性运算可以被视为单个线性运算。通常,我们试图从中学习某些东西的数据越复杂,特征到真实标签的映射就越非线性。没有任何激活函数的神经网络在数学上无法实现如此复杂的映射,也无法解决我们希望网络解决的任务。如果没有激活函数引入的非线性,多层神经网络相当于单层神经网络。

      激活函数通常也是可微的(differentiable),这意味着可以针对给定的输入值计算一阶导数(first-order derivative)。这是必需的,因为神经网络通常使用误差(error)反向传播算法进行训练,该算法需要预测误差的导数来更新模型的权重。

      网络可能有三种类型的层:从域中(domain)获取原始输入的输入层、从另一层获取输入并将输出传递到另一层的隐藏层以及进行预测的输出层。所有隐藏层通常都使用相同的激活函数。输出层通常使用与隐藏层不同的激活函数,并且取决于模型所需的预测类型。

      激活函数的选择对神经网络的能力和性能有很大影响,模型的不同部分可能使用不同的激活函数

      线性激活函数:也称为Identity,类似于y=x定义的直线。无论神经网络包含多少层,如果它们都使用线性激活函数,则输出是输入的线性组合。

      线性激活函数只在一个地方使用,即输出层。在所有层上使用线性激活会限制网络学习复杂模式的能力。

      线性激活函数对于特定任务很有用,但必须与非线性函数结合才能增强神经网络的学习和预测能力。

      非线性激活函数(例如sigmoid、Tanh、ReLU、ELU):提供的结果与输入不成比例。因此,每种类型的激活函数都有自己独特的特性,可以在不同的场景中发挥作用。

      1.Sigmoid:

      (1).它将输入值映射到0和1之间,除了二分类中的输出层,几乎很少使用。

      (2).计算量大,容易出现梯度消失。当输入变得越来越大或越来越小时,神经元的激活接近饱和,函数的梯度会变得非常小,从而减慢深度神经网络的学习过程。在这种情况下,接近零的导数会使损失函数的梯度非常小,从而阻止权重的更新,从而阻止整个学习过程。

      (3).函数的输出不以零为中心(Non-Zero Centered)。通常,这会使神经网络的训练更加困难和不稳定。

      2.Tanh:

      (1).与Sigmoid类似,是Sigmoid的shifted版本,输出值在-1和1之间。优于Sigmoid,它通常用于隐藏层,因为它可以更好地集中数据,从而提供更强大的学习能力。

      (2).与Sigmoid一样,Tanh也会在输入变得非常大或非常小时遭受梯度消失问题。

      3.ReLU(Rectified Linear Unit):

      (1).它将所有负值设置为0,并保持所有正值不变。大多数隐藏层的默认选择,尤其在CNN中,计算量小,它通常可以加快学习速度。

      (2).具有线性、非饱和特性。

      (3).如果你不确定隐藏层要使用什么,建议使用ReLU。它有助于缓解深度神经网络中可能出现的梯度消失问题。

      (4).ReLU可能遭受称为"dying ReLU"的问题。当神经元的输入为负时,就会发生这种情况,导致神经元输出0,不会对训练过程做出贡献。如果这种情况发生得太频繁,神经元就会"dies"并停止学习。

      4.LeakyReLU:ReLU的改进版本,在一定程度上解决了"dying ReLU"问题。与ReLU(对于低于零的输入值,所有输出都为零)不同,使用Leaky ReLU时,我们会向函数添加一个小的线性分量。

      5.PReLU:alpha是一个超参,通常设置为0.01。alpha的值永远不会接近1,否则变成线性函数,将毫无用处。

      6.ReLU6:

      (1).基本上是ReLU的正向限制,定义为: f(x)=min(max(x, 0), 6)

      (2).阻止梯度爆炸(趋于无穷大)。

      7.ELU:

      (1).ReLU一样,它旨在解决梯度消失问题。

      (2).与ReLU和Tanh等其他激活函数相比,ELU已被证明可以提高训练和测试准确率。它在需要高精度的深度神经网络中特别有用。

      (3).由于指数函数而需要更多计算。

      8.Softmax:

      (1).在分类任务中预测概率分数时,最后一层应用Softmax。通常用作需要将输入分为多个类别的神经网络输出层的激活函数。它以实数向量作为输入,并返回表示每个类别可能性的概率分布。

      (2).强制输出神经元的值取0到1之间的值。

      (3).旨在处理多分类问题,它将神经网络的原始输出分数转换为概率,并确保输出概率总和为1,类别是互斥的,从而易于解释结果。它也是可微的,这使得它可以在训练期间用于反向传播。

      9.Softplus:

      (1).类似于ReLU,但没有ReLU所具有的硬零阈值(hard zero threshold)。

      (2).Softplus是一个平滑的连续函数,它避免了ReLU的尖锐不连续性。

      10.Swish:

      (1).f(x) = x*sigmoid(x)

      (2).与ReLU相比,它的性能略好一些,因为它的图与ReLU非常相似。但是,由于它不会像ReLU在x=0时那样在某一点突然改变,因此在训练时更容易收敛。

      (3).计算成本高。

      11.Hardswish:H-Swish,几乎与Swish相似,但由于它用ReLU(线性类型)取代了Sigmoid(指数函数),因此计算成本更低

      PyTorch中激活函数的实现在:torch/nn/modules/activation.py ,支持的激活函数有:Threshold, ReLU, RReLU, Hardtanh, ReLU6, Sigmoid, Hardsigmoid, Tanh, SiLU, Mish, Hardswish, ELU, CELU, SELU, GLU, GELU, Hardshrink, LeakyReLU, LogSigmoid, Softplus, Softshrink, MultiheadAttention, PReLU, Softsign, Tanhshrink, Softmin, Softmax, Softmax2d, LogSoftmax

      总结

      1.ReLU应仅用于隐藏层。当对隐藏层使用ReLU时,最好在训练之前将输入数据缩放到0-1(normalize)范围。

      2.Sigmoid和Tanh不应在隐藏层中使用,因为它们会在训练期间引起问题。

      3.隐藏层使用的激活函数:RNN中仍然普遍使用Tanh或Sigmoid,CNN及MLP中使用ReLU。

      4.输出层中使用的激活函数:

      (1).回归:Identity

      (2).二分类:Sigmoid

      (3).多类分类:Softmax

      (4).多标签分类:Sigmoid

      5.没有一刀切的解决方案,尝试不同的激活函数可以帮助你优化神经网络。

      注:以上整理的内容主要来自:

      1. https://en.wikipedia.org

      2. https://medium.com

      3. https://towardsdatascience.com

      GitHub:https://github.com/fengbingchun/NN_Test

相关文章:

深度学习中的激活函数

激活函数(activation function)是应用于网络中各个神经元输出的简单变换,为其引入非线性属性,使网络能够对更复杂的数据进行建模,使其能够学习更复杂的模式。如果没有激活函数,神经元只会对输入进行枯燥的线性数学运算。这意味着&…...

编写php项目所需环境

需要编写php项目,需要看到编写的代码展现的效果,这里我选择用xampp来展现 准备工作: https://learncodingfast.com/how-to-install-xampp-and-brackets/#Installing_and_Running_XAMPP xampp下载地址:https://www.apachefriends.…...

华为机试HJ108 求最小公倍数

首先看一下题 描述 正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。 数据范围: 1≤a,b≤100000 输入描述: 输入两个正整数A和B。 输出描述: 输出A和B的最小公…...

【Python技术】同花顺wencai涨停分析基础上增加连板分析

周末,有读者加我, 说 之前的涨停分析 是否可以增加连板分析。 这个可以加上。 先看效果 这里附上完整代码: import streamlit as st import pywencai import pandas as pd from datetime import datetime, timedelta import plotly.graph_o…...

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(五)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(五) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…...

【LeetCode】3356、零数组变换 II

【LeetCode】3356、零数组变换 II 文章目录 一、数据结构-差分-一维差分、二分1.1 数据结构-差分-一维差分、二分1.1.1 题意复述1.1.2 思路1.1.3 手写二分1.1.4 sort.Search() 二分1.1.5 sort.Find() 二分 二、多语言解法 一、数据结构-差分-一维差分、二分 1.1 数据结构-差分…...

Vue 子组件修改父组件传过来的值的三种方式

方式1&#xff1a;子组件发送emit&#xff0c;触发父组件修改 父组件 <template><div><son :count"count" updateCount"updateCount" /></div> </template><script> import son from "./son"; export def…...

4.Python 数字类型

Python 数字类型总结 文章目录 Python 数字类型总结1. 数字类型概述特点 2. 数字类型的创建与赋值3. 数字类型转换4. 数学运算与函数math 模块cmath 模块 5. 随机数生成6. 三角函数7. 数学常量 总结 Python 提供了多种数字类型来存储和操作数值数据。这些类型包括整数、浮点数、…...

MacOs 日常故障排除troubleshooting

1. 关闭开机自启动 app X macOs 15.1 System settings -> General -> Login Items & Extensions->Open at Login -> Select app X and click -...

(补)算法刷题Day19:BM55 没有重复项数字的全排列

题目链接 给出一组数字&#xff0c;返回该组数字的所有排列 例如&#xff1a; [1,2,3]的所有排列如下 [1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2], [3,2,1]. &#xff08;以数字在数组中的位置靠前为优先级&#xff0c;按字典序排列输出。&#xff09; 思路&#xff1a; 使用回…...

golang中的值传递与引用传递,如何理解结构体的方法?

先从一个例子说起 type Counter struct {count int }func (c Counter) Inc() {c.count }func test1() {c : Counter{}do : func() {for i : 0; i < 10; i {c.count}fmt.Println("done")}go do()go do()time.Sleep(3 * time.Second)fmt.Println(c.count) }func te…...

linux部署ansible自动化运维

ansible自动化运维 1&#xff0c;编写ansible的仓库&#xff08;比赛已经安装&#xff0c;无需关注&#xff09; 1、虚拟机右击---设置---添加---CD/DVD驱动器---完成---确定 2、将ansible.iso的光盘连接上&#xff08;右下角呈绿色状态&#xff09; 3、查看光盘挂载信息 df -h…...

docker—私有仓库搭建

docker—私有仓库搭建 HTTP 部署 docker run -d \-p 5000:5000 \--restartalways \--name registry \-v /opt/data/registry:/var/lib/registry \registry:2使用官方的 registry​ 镜像来启动私有仓库。默认情况下&#xff0c;仓库会被创建在容器的 /var/lib/registry​ 目录…...

【SpringAOP】深入浅出SpringAOP从原理到源码

AOP对象是如何创建的 对于熟悉Spring IOC流程源码的同学来说&#xff0c;一定了解bean的整个生命周期&#xff0c;也就是从实例化、属性填充、初始化三个过程。那么对于Bean 工厂来说&#xff0c;是如何保证需要创建代理的对象创建代理的呢。 从图中可以看到&#xff0c;本质…...

Java 从查询超时到性能提升 (实战讲解)

目录 1. 问题所示2. 原理分析3. 解决方法3.1 代码优化3.2 索引优化3.3 删数据 1. 问题所示 查询返回速度慢&#xff0c;导致前端页面无数据显示 前端和后端均未报错&#xff0c;但后端未能在合理时间内返回结果到前端 后端没有报错日志 2. 原理分析 单独分析代码中的对算法…...

《C 语言携手 PaddlePaddle C++ API:开启深度学习开发新征程》

在深度学习领域&#xff0c;PaddlePaddle 作为一款强大的深度学习框架&#xff0c;为开发者提供了丰富的功能和高效的计算能力。而 C 语言&#xff0c;凭借其高效性和广泛的应用场景&#xff0c;与 PaddlePaddle 的 C API 相结合&#xff0c;能够为深度学习开发带来独特的优势。…...

Mysql之存储过程

MySQL 存储过程&#xff08;Stored Procedure&#xff09; 1. 概念 存储过程是一组预编译的 SQL 语句集合&#xff0c;可以通过调用名称来执行。存储过程可以接收参数&#xff0c;并支持复杂的业务逻辑&#xff08;如条件语句、循环、异常处理等&#xff09;。它们可以提高代…...

XV6 开发环境搭建

Step 1 搭建ubuntu 20.04 虚拟机 注意&#xff1a;一定要使用ubuntu 20.04&#xff0c;该版本可以直接通过deb安装gnu编译工具链。 安装完虚拟机后&#xff0c;换apt源。 ubuntu20.04镜像下载链接 设置root账户密码: sudo passwd root Step 2 下载解压qemu 5.1.0 wget ht…...

Windows 系统下 Python 环境安装

一、引言 Python 作为一种广泛应用的编程语言&#xff0c;在数据分析、人工智能等领域发挥着重要作用。本文将详细介绍在 Windows 系统上安装 Python 环境的步骤。 二、安装前准备 系统要求 Windows 7 及以上版本一般都能支持 Python。硬件方面&#xff0c;通常 2GB 内存、几…...

VMware Workstation的有线连接消失了

进入/var/lib目录下 cd /var/lib 查看是否存在NetworkManager 文件 ls 将其删除&#xff0c;然后虚拟机reboot一下。 sudo rm -r NetworkManager reboot 解决了&#xff0c;可以联网...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...