【激活函数】Activation Function——在卷积神经网络中的激活函数是一个什么样的角色??

news2024/9/18 20:06:06

【激活函数】Activation Function——在卷积神经网络中的激活函数是一个什么样的角色??

Activation Function——在卷积神经网络中的激活函数是一个什么样的角色??


文章目录

  • 【激活函数】Activation Function——在卷积神经网络中的激活函数是一个什么样的角色??
  • 激活函数
    • CNN中为什么必须要用激活函数呢?
    • 激活函数的主要作用:
  • 常用的激活函数及其应用
    • 1.Sigmoid 函数
    • 2.Tanh 函数
    • 3.ReLU (Rectified Linear Unit) 函数
    • 4.Leaky ReLU 函数
    • 5.ELU (Exponential Linear Unit) 函数
    • 6.Swish 函数
    • 7.Softmax 函数
  • 激活函数的选择依据
  • 总结


激活函数

  • 激活函数(Activation Function)是深度学习中将输入信号的加权和转化为输出信号的非线性变换。激活函数的引入解决了线性模型中无法处理复杂模式的问题,确保神经网络具有表达复杂函数、捕捉非线性关系的能力。

CNN中为什么必须要用激活函数呢?

  • 如果不使用激活函数,神经网络层与层之间的输出将是线性的组合,等效于单一的线性模型。无论网络多么深,最终的输出都是输入的线性变换,无法解决复杂的模式识别问题。因此,激活函数引入了非线性,使神经网络能够拟合复杂的高维数据。

激活函数的主要作用:

  • 引入非线性:神经网络通过激活函数引入非线性,能够拟合复杂的非线性函数,解决复杂问题。

  • 保证梯度传播:通过适当的激活函数可以使得梯度能够良好地反向传播,从而有效地进行参数更新。

  • 特征压缩与选择:激活函数通常可以对输入信号进行压缩,抑制不重要的信号并突出关键的特征。

常用的激活函数及其应用

1.Sigmoid 函数

公式

f ( x ) = 2 1 + e − x f(x)=\frac{2}{1+e^{-x}} f(x)=1+ex2

作用

  • 将输入值映射到 0 到 1 之间的概率区间。
  • 常用于二分类问题的输出层。

优缺点

  • 优点:常用于二分类问题的输出层。
  • 缺点:当输入值绝对值过大时,梯度趋于 0,导致梯度消失问题,无法有效训练深层网络。

代码示例

import tensorflow as tf

# Sigmoid 激活函数
x = tf.random.normal([1, 5])
output = tf.nn.sigmoid(x)
print(output)

适用场景

  • 二分类任务(例如:Logistic 回归的输出层)。
  • 小型网络,不适用于深度网络。

2.Tanh 函数

公式

f ( x ) = 2 1 + e − 2 x − 1 f(x)=\frac{2}{1+e^{-2x}}-1 f(x)=1+e2x21

作用

  • 将输入值映射到 -1 到 1 的区间。
  • Tanh 函数对 0 的输入是对称的,即它是零中心化的。

优缺点

  • 优点:零中心化,更适合处理有负数输入的特征。
  • 缺点:同样存在梯度消失问题,当输入值很大或很小时,梯度趋近于 0。

代码示例

import tensorflow as tf

# Tanh 激活函数
x = tf.random.normal([1, 5])
output = tf.nn.tanh(x)
print(output)

适用场景

  • 自然语言处理等需要处理负值的场景。
  • 常用于 RNN 和 LSTM 中。

3.ReLU (Rectified Linear Unit) 函数

公式

f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)

作用

  • 当输入大于 0 时,ReLU 输出输入值本身;当输入小于或等于 0 时,输出 0。
  • 引入非线性,并且计算非常简单,收敛速度快。

优缺点

  • 优点:引入非线性,并且计算非常简单,收敛速度快。
  • 缺点:当输入小于 0 时,神经元可能会死亡(即无法再激活),这叫做 “ReLU 死亡” 问题。

代码示例

import tensorflow as tf

# ReLU 激活函数
x = tf.random.normal([1, 5])
output = tf.nn.relu(x)
print(output)

适用场景

  • 深度卷积神经网络(CNN)、全连接网络(FCN)等几乎所有深度学习模型中。

4.Leaky ReLU 函数

公式

f ( x ) = m a x ( 0.01 x , x ) f(x)=max(0.01x,x) f(x)=max(0.01x,x)

作用

  • 类似于 ReLU,但对于负值输入不完全为 0,而是乘以一个较小的斜率(通常为 0.01),以解决 ReLU 死亡问题。

优缺点

  • 优点:在负值区域保留小的梯度,避免了 ReLU 的死亡问题。
  • 缺点:相比 ReLU 的简单性,增加了计算量。

代码示例

import tensorflow as tf

# Leaky ReLU 激活函数
x = tf.random.normal([1, 5])
output = tf.nn.leaky_relu(x, alpha=0.01)  # alpha 是负值部分的斜率
print(output)

适用场景

  • 深度神经网络中,尤其是在 ReLU 出现大量 “死亡神经元” 的情况下。

5.ELU (Exponential Linear Unit) 函数

公式

f ( x ) = { x , i f x > 0 , α ( e x − 1 ) , i f x ≤ 0 f(x)=\begin{cases} x, &if&x>0,\\ α(e^x-1), &if&x \le 0 \end{cases} f(x)={x,α(ex1),ififx>0,x0

作用

  • 对于正值,ELU 类似于 ReLU;对于负值,它的输出为指数衰减而非零,这样可以让网络学习负数特征,同时保持梯度流动。

优缺点

  • 优点:相比 Leaky ReLU,有更好的训练表现,减少了偏差。
  • 缺点:计算稍复杂,训练速度略慢于 ReLU。

代码示例

import tensorflow as tf

# ELU 激活函数
x = tf.random.normal([1, 5])
output = tf.nn.elu(x)
print(output)

适用场景

  • 深度网络中,用于代替 ReLU,特别是需要保留负数特征的场景。

6.Swish 函数

公式

f ( x ) = x ⋅ s i g m o i d ( x ) f(x)=x·sigmoid(x) f(x)=xsigmoid(x)

作用

  • Swish 是一种自适应激活函数,结合了 Sigmoid 和 ReLU 的特性,并能平滑地处理负值输入,提供更好的表现。

优缺点

  • 优点:在一些任务上,Swish 的表现优于 ReLU。
  • 缺点:计算稍复杂,训练速度较慢。

代码示例

import tensorflow as tf

# Swish 激活函数
x = tf.random.normal([1, 5])
output = x * tf.nn.sigmoid(x)
print(output)

适用场景

  • 深层神经网络中,特别是在需要更好的训练表现时(如 EfficientNet)。

7.Softmax 函数

公式

f ( x ) = e x i ∑ j e x j f(x)=\frac{e^{x_i}}{∑_je^{x_j}} f(x)=jexjexi

作用

  • 将输入映射为一个概率分布,所有输出值的和为 1。
  • 通常用于多分类任务的输出层。

优缺点

  • 优点:用于分类问题时,能够很好地提供归一化概率。
  • 缺点:仅适用于分类任务的输出层。

代码示例

import tensorflow as tf

# Softmax 激活函数
x = tf.random.normal([1, 5])
output = tf.nn.softmax(x)
print(output)

适用场景

  • 多分类问题 的输出层,如图像分类、文本分类。

激活函数的选择依据

  • 二分类问题:一般选择 Sigmoid 作为输出层激活函数。
  • 多分类问题:常使用 Softmax 作为输出层激活函数,提供概率分布。
  • 卷积网络:通常使用 ReLU 或 Leaky ReLU,可以加快网络收敛,并处理梯度问题。
  • 深度网络:可以考虑使用 Swish 或 Leaky ReLU,在深层网络中能够避免死神经元和梯度消失。
  • 自然语言处理或时间序列处理:常见激活函数为 Tanh 或 Sigmoid,配合 LSTM 或 GRU 使用。

总结

激活函数为神经网络引入了非线性特性使得网络能够拟合复杂的数据模式和关系。选择合适的激活函数不仅能提升模型的表现,还能有效解决训练中的一些问题,如梯度消失和死神经元问题。不同的激活函数在不同场景下有各自的优势和适用性,因此在实际应用中需要根据具体任务和数据来合理选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2141477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

收购芯片设计公司Annapurna Labs后

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Linux-mysql5.7-mysql8.0安装包下载及安装教程,二合一

一、安装包下载 1、手动下载 MySQL :: Download MySQL Community Server 2、wegt下载 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 登录自己的liunx ,复制上面的命令下载。 二、手动安装 1、上传压缩包到…

Tomcat端口号被占用

1.当启动了Tomcat后再打开idea运行web项目下的Tomcat就会报这个“Tomcat端口号被占用”错误,解决办法就是关闭Tomcat(用tomcat文件里面的shutdown.bat关闭,也可以在exe程序里面关闭),再在idea中运行web项目下的Tomca …

华为OD机试真题-九宫格按键输入-2024年OD统一考试(E卷)

最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷D卷C卷)_华为od机试题库-CSDN博客 题目描述 九宫格按键输入,有英文和数字两个模式,默认是数字模式,数字模式直接输出数字,英文模式连…

在typescript浏览器端中调用C++编写的函数,WebAssembly传递指针类型的参数,以及处理指针类型的返回值。

首先要在Cmake工程中的cmakelists.txt文件中引入Emscripten工具链&#xff1a; set(CMAKE_TOOLCHAIN_FILE "D:/CppPkg/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake")直接看C代码&#xff1a; #include <emscripten/emscripten.h> #i…

服务器——装新的CUDA版本的方法

服务器——装新的CUDA版本 一、进入 CUDA 版本列表二、根据自己服务器&#xff0c;选择对应的版本和配置三、使用管理员用户&#xff0c;运行下载和安装命令四、查看显卡驱动是否安装4.1 若安装了显卡驱动4.2 若显卡驱动没安装 参考文章 一、进入 CUDA 版本列表 CUDA Toolkit …

MFC工控项目实例之十七添加手动测试界面

承接专栏《MFC工控项目实例之十六输入信号验证》 1、在JogTest.h文件中添加代码 class CJogTest : public CDialog { public:CJogTest(CWnd* pParent NULL); // standard constructorCButtonST m_btnStart[16];CFont m_font; ... } 2、在JogTest.cpp文件中添加代码 #…

【医药行业】实施SAP有哪些医药行业GXP的合规要求和注意事项

作为实施过辉瑞和赛诺菲医药行业的项目&#xff0c;总结了如下&#xff1a; 在医药行业中&#xff0c;GxP&#xff08;Good Practices&#xff0c;良好规范&#xff09;是一系列标准与指南&#xff0c;旨在确保制药、医疗设备和生物制品的质量与合规性。GxP包括多个领域&#x…

计算机网络通关学习(一)

简介 之前我通过王道的考研课进行了计算机网络的学习&#xff0c;但是在秋招准备过程中发现之前的笔记很多不足&#xff0c;学习的知识不够深入和巩固&#xff0c;所以再重新对《图解HTTP》&《图解TCP/IP》进行深度学习后&#xff0c;总结出了此篇博客&#xff0c;由于内容…

re题(27)BUUFCTF-[MRCTF2020]Transform

BUUCTF在线评测 (buuoj.cn) 先到ida&#xff0c;先看一下字符串 找到主函数 int __cdecl main(int argc, const char **argv, const char **envp) {char Str[104]; // [rsp20h] [rbp-70h] BYREFint j; // [rsp88h] [rbp-8h]int i; // [rsp8Ch] [rbp-4h]sub_402230(argc, arg…

ai扩图用什么软件?探索五大高效工具

Hey朋友们&#xff0c;最近在社交媒体上看到不少超清晰的美图&#xff0c;是不是特别羡慕&#xff1f; 别急&#xff0c;告诉你个秘密武器——ai扩图软件。这些神器能帮你智能扩展图片内容&#xff0c;让每张图都充满细节。 想知道都有哪些好用的ai扩图软件免费吗&#xff1f…

CentOS上使用rpm离线安装Mosquitto(Linux上Mqtt协议调试工具)附资源下载

场景 Windows上Mqtt服务器搭建与使用客户端工具MqttBox进行测试&#xff1a; Windows上Mqtt服务器搭建与使用客户端工具MqttBox进行测试_微软消息队列 测试工具-CSDN博客 Windows服务器上Mqtt服务器EMQX的安装使用&#xff1a; Windows服务器上Mqtt服务器EMQX的安装使用_wi…

Objects as Points基于中心点的目标检测方法CenterNet—CVPR2019

Anchor Free目标检测算法—CenterNet Objects as Points论文解析 Anchor Free和Anchor Base方法的区别在于是否在检测的过程中生成大量的先验框。CenterNet直接预测物体的中心点的位置坐标。 CenterNet本质上类似于一种关键点的识别。识别的是物体的中心点位置。 有了中心点之…

Python青少年简明教程:tkinter库入门

Python青少年简明教程&#xff1a;tkinter库入门 tkinter是Python的标准GUI&#xff08;图形用户界面&#xff09;库。它提供了一种快速而简单的方法来创建GUI应用程序。tkinter是Python自带的&#xff0c;无需额外安装&#xff0c;随 Python 安装包一起提供。 在Python 3.x中…

Leetcode—1137. 第 N 个泰波那契数【简单】

2024每日刷题&#xff08;160&#xff09; Leetcode—1137. 第 N 个泰波那契数 记忆化搜索实现代码 class Solution { public:int tribonacci(int n) {int zero 0;int one 1;int two 1;if(n 0) {return zero;}if(n 1) {return one;}if(n 2) {return two;}int ans 0;fo…

三重因素,巨人瘦身——从 IBM中国研发部裁员讲起

如何看待IBM中国研发部裁员&#xff1f;近日&#xff0c;IBM中国宣布撤出在华两大研发中心&#xff0c;引发了IT行业对于跨国公司在华研发战略的广泛讨论。这一决定不仅影响了众多IT从业者的职业发展&#xff0c;也让人思考全球化背景下中国IT产业的竞争力和未来发展方向。面对…

手机、平板电脑编程———未来之窗行业应用跨平台架构

一、平板编程优点 1. 便携性强 - 可以随时随地携带平板进行编程&#xff0c;不受地点限制&#xff0c;方便在旅行、出差或休息时间进行学习和开发。 2. 直观的触摸操作 - 利用触摸屏幕进行代码编辑、缩放、拖动等操作&#xff0c;提供了一种直观和自然的交互方式。 …

TypeScript:高级类型

一、交叉类型&#xff08;Intersection Types&#xff09; 交叉类型是将多个类型合并为一个类型。 这让我们可以把现有的多种类型叠加到一起成为一种类型&#xff0c;它包含了所需的所有类型的特性。 例如&#xff0c; Person & Serializable & Loggable同时是 Person …

建模杂谈系列256 规则函数化改造

说明 之前尝试用FastAPI来构造规则&#xff0c;碰到的问题是由于请求量过大(TPS > 1000), 从而导致微服务端口资源耗尽。所以现在的point是: 1 如何使用函数来替代微服务(同时要保留使用微服务的优点)2 进一步抽象并规范规则的执行3 等效合并规则的方法 内容 0 机制讨论…

Vue2源码解读

vue源码_哔哩哔哩_bilibili 1.Vue源码路径目录解读 Vue2源码的路径目录被设计得非常清晰&#xff0c;每个文件夹都承担着特定的职责和功能。以下是这些主要文件夹&#xff08;compiler、core、platform、server、sfc、shared&#xff09;的详细解读&#xff1a; 1. compiler …