当前位置: 首页 > 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;可以联网...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...