深度学习中的激活函数
激活函数(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:子组件发送emit,触发父组件修改 父组件 <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 没有重复项数字的全排列
题目链接 给出一组数字,返回该组数字的所有排列 例如: [1,2,3]的所有排列如下 [1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2], [3,2,1]. (以数字在数组中的位置靠前为优先级,按字典序排列输出。) 思路: 使用回…...
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,编写ansible的仓库(比赛已经安装,无需关注) 1、虚拟机右击---设置---添加---CD/DVD驱动器---完成---确定 2、将ansible.iso的光盘连接上(右下角呈绿色状态) 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 镜像来启动私有仓库。默认情况下,仓库会被创建在容器的 /var/lib/registry 目录…...

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

Java 从查询超时到性能提升 (实战讲解)
目录 1. 问题所示2. 原理分析3. 解决方法3.1 代码优化3.2 索引优化3.3 删数据 1. 问题所示 查询返回速度慢,导致前端页面无数据显示 前端和后端均未报错,但后端未能在合理时间内返回结果到前端 后端没有报错日志 2. 原理分析 单独分析代码中的对算法…...
《C 语言携手 PaddlePaddle C++ API:开启深度学习开发新征程》
在深度学习领域,PaddlePaddle 作为一款强大的深度学习框架,为开发者提供了丰富的功能和高效的计算能力。而 C 语言,凭借其高效性和广泛的应用场景,与 PaddlePaddle 的 C API 相结合,能够为深度学习开发带来独特的优势。…...
Mysql之存储过程
MySQL 存储过程(Stored Procedure) 1. 概念 存储过程是一组预编译的 SQL 语句集合,可以通过调用名称来执行。存储过程可以接收参数,并支持复杂的业务逻辑(如条件语句、循环、异常处理等)。它们可以提高代…...

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

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

VMware Workstation的有线连接消失了
进入/var/lib目录下 cd /var/lib 查看是否存在NetworkManager 文件 ls 将其删除,然后虚拟机reboot一下。 sudo rm -r NetworkManager reboot 解决了,可以联网...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...

PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...