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

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

【激活函数】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 使用。

总结

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • NullPointerException 是什么, 如何修复?
  • [产品管理-23]:NPDP新产品开发 - 21 - 产品创新中的市场调研 - 市场调研对创新产品开发的意义
  • C sharp 学习 笔记
  • Datawhale------Tiny-universe学习笔记——Qwen
  • 前端项目使用js将dom生成图片、PDF
  • 每日一题——第九十四题
  • Python:抓取 Bilibili(B站)评论、弹幕、字幕等
  • go 以太坊代币查余额
  • 408算法题leetcode--第六天
  • 【系统架构设计师-2015年真题】案例分析-答案及详解
  • k8s(kubernetes)的PV / PVC / StorageClass(理论+实践)
  • 梧桐数据库(WuTongDB):RBO(Rule-Based Optimizer)优化器简介
  • COTERRORSET—— LLM训练新基准让模型从自身错误中学习
  • leetcode - 分治思想
  • 前后端数据交互 笔记03(get和post方法)
  • 时间复杂度分析经典问题——最大子序列和
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 30天自制操作系统-2
  • Angular2开发踩坑系列-生产环境编译
  • C++11: atomic 头文件
  • E-HPC支持多队列管理和自动伸缩
  • ES6系列(二)变量的解构赋值
  • input的行数自动增减
  • JS实现简单的MVC模式开发小游戏
  • Leetcode 27 Remove Element
  • React as a UI Runtime(五、列表)
  • SpiderData 2019年2月16日 DApp数据排行榜
  • webpack入门学习手记(二)
  • 复习Javascript专题(四):js中的深浅拷贝
  • 检测对象或数组
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 类orAPI - 收藏集 - 掘金
  • 每天一个设计模式之命令模式
  • 如何在GitHub上创建个人博客
  • 算法---两个栈实现一个队列
  • 听说你叫Java(二)–Servlet请求
  • 写给高年级小学生看的《Bash 指南》
  • 异步
  • puppet连载22:define用法
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • 整理一些计算机基础知识!
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # 数据结构
  • $.ajax()
  • (+4)2.2UML建模图
  • (13):Silverlight 2 数据与通信之WebRequest
  • (20050108)又读《平凡的世界》
  • (LeetCode 49)Anagrams
  • (ros//EnvironmentVariables)ros环境变量
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?