【深度学习】关键技术-激活函数(Activation Functions)

激活函数(Activation Functions)

激活函数是神经网络的重要组成部分,它的作用是将神经元的输入信号映射到输出信号,同时引入非线性特性,使神经网络能够处理复杂问题。以下是常见激活函数的种类、公式、图形特点及其应用场景。


1. 常见激活函数及其公式与代码示例

1. Sigmoid 激活函数

公式:

\sigma(x) = \frac{1}{1 + e^{-x}}

特点:
  • 输出范围为 (0, 1)。
  • 对输入较大的值趋于 1,较小的值趋于 0。
  • 常用于神经网络输出层处理二分类问题。
  • 优点
    • 将输入映射为概率值,直观且常用于概率任务。
  • 缺点
    • 梯度消失:输入很大或很小时,梯度趋近 0,导致反向传播时权重更新变慢。
    • 输出不以 0 为中心,不利于零均值数据。
代码示例:
import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# 示例
x = np.linspace(-10, 10, 100)
y = sigmoid(x)

plt.plot(x, y)
plt.title("Sigmoid Activation Function")
plt.xlabel("x")
plt.ylabel("sigmoid(x)")
plt.grid()
plt.show()
运行结果: 


2. Tanh(双曲正切)激活函数

公式:

\text{Tanh}(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}

特点:
  • 输出范围为 (-1, 1)。
  • 优点
    • 比 Sigmoid 更对称,输出以 0 为中心,更适合零均值数据。
  • 缺点
    • 梯度消失问题依然存在。
代码示例:
import numpy as np
import matplotlib.pyplot as plt
def tanh(x):
    return np.tanh(x)

x = np.linspace(-10, 10, 100)
y = tanh(x)

plt.plot(x, y)
plt.title("Tanh Activation Function")
plt.xlabel("x")
plt.ylabel("tanh(x)")
plt.grid()
plt.show()
运行结果: 


3. ReLU(Rectified Linear Unit)激活函数

公式:

f(x) = max(0, x)

特点:
  • 输出范围为 [0, +∞)。
  • 优点
    • 简单高效,计算速度快。
    • 解决了梯度消失问题,几乎是所有深度学习模型的默认选择。
  • 缺点
    • “死亡神经元”:当输入总是小于 0 时,梯度为 0,神经元可能永远不会被激活。
代码示例:
import numpy as np
import matplotlib.pyplot as plt

def relu(x):
    return np.maximum(0, x)

x = np.linspace(-10, 10, 100)
y = relu(x)

plt.plot(x, y)
plt.title("ReLU Activation Function")
plt.xlabel("x")
plt.ylabel("ReLU(x)")
plt.grid()
plt.show()
运行结果: 


4. Leaky ReLU 激活函数

公式:

f(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha x & \text{if } x \leq 0 \end{cases}

其中,α 是一个小于 1 的常数,通常取 0.01。

特点:
  • 优点
    • 解决 ReLU 的“死亡神经元”问题。
    • 在负数输入上具有小的线性斜率。
  • 缺点
    • 引入了超参数 α,需手动调节。
代码示例:
import numpy as np
import matplotlib.pyplot as plt
def leaky_relu(x, alpha=0.01):
    return np.where(x > 0, x, alpha * x)

x = np.linspace(-10, 10, 100)
y = leaky_relu(x)

plt.plot(x, y)
plt.title("Leaky ReLU Activation Function")
plt.xlabel("x")
plt.ylabel("Leaky ReLU(x)")
plt.grid()
plt.show()
运行结果: 


5. ELU(Exponential Linear Unit)激活函数

公式:

f(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha (e^x - 1) & \text{if } x \leq 0 \end{cases}

其中,α 通常取 1。

特点:
  • 优点
    • 负数部分平滑处理,有助于减少梯度消失问题,训练更稳定。
    • 能加速模型收敛。
  • 缺点
    • 计算复杂度稍高。
代码示例:
import numpy as np
import matplotlib.pyplot as plt
def elu(x, alpha=1.0):
    return np.where(x > 0, x, alpha * (np.exp(x) - 1))

x = np.linspace(-10, 10, 100)
y = elu(x)

plt.plot(x, y)
plt.title("ELU Activation Function")
plt.xlabel("x")
plt.ylabel("ELU(x)")
plt.grid()
plt.show()
运行结果: 


6. Softmax 激活函数

公式:

\text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=1}^n e^{x_j}}

特点:
  • 将输入映射为概率分布,适用于多分类问题,常用于多分类问题的最后一层。
  • 输出范围为 (0, 1),且总和为 1。
代码示例:
import numpy as np

def softmax(x):
    exp_x = np.exp(x - np.max(x))  # 防止数值溢出
    return exp_x / np.sum(exp_x)

# 示例
x = np.array([1.0, 2.0, 3.0, 6.0])
y = softmax(x)

print("Softmax Output:", y)
print("Sum of Softmax Output:", np.sum(y))  # 确保总和为 1
运行结果:
Softmax Output: [0.00626879 0.01704033 0.04632042 0.93037047]
Sum of Softmax Output: 1.0


7. Swish 激活函数

公式:

f(x) = x \cdot \text{Sigmoid}(\beta x)

其中,β 是可学习参数,通常默认为 1。

特点:
  • 优点
    • 平滑可微,能捕获复杂特征。
    • 在深度网络中比 ReLU 表现更优。
代码示例:
import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1 / (1 + np.exp(-x))
def swish(x, beta=1.0):
    return x * sigmoid(beta * x)

x = np.linspace(-10, 10, 100)
y = swish(x)

plt.plot(x, y)
plt.title("Swish Activation Function")
plt.xlabel("x")
plt.ylabel("Swish(x)")
plt.grid()
plt.show()
运行结果: 


2. 激活函数的选择与应用

任务导向的选择:
  • 分类问题:
    • 二分类:Sigmoid 或 Softmax。
    • 多分类:Softmax。
  • 回归问题:
    • 使用线性激活函数或无激活函数。
  • 深度学习(卷积网络、RNN 等):
    • 通常采用 ReLU 及其变种(Leaky ReLU、ELU)。
层次结构的选择:
  • 隐藏层:
    • 一般使用 ReLU 或其变种。
  • 输出层:
    • 分类:Softmax 或 Sigmoid。
    • 回归:线性激活函数。

3.激活函数对比总结

激活函数输出范围是否有梯度消失是否有“死亡神经元”常见应用场景
Sigmoid(0, 1)二分类输出
Tanh(-1, 1)RNN 或零均值数据
ReLU[0, +∞)深层网络的隐藏层
Leaky ReLU(−∞, +∞)深层网络
ELU(−α, +∞)深度网络
Softmax(0, 1)多分类输出层
Swish(−∞, +∞)深度网络或复杂任务

通过结合理论和代码示例,可以根据任务特点选择合适的激活函数以优化模型性能。


4. 未来趋势

  • 现代深度学习中,激活函数的发展更加注重可学习性性能优化
  • 像 Swish 和 GELU 等新型激活函数正在逐步取代传统激活函数,尤其在深度和复杂的网络中表现更优。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图数据库 | 18、高可用分布式设计(中)

上文我们聊了在设计高性能、高可用图数据库的时候,从单实例、单节点出发,一般有3种架构演进选项:主备高可用,今天我们具体讲讲分布式共识,以及大规模水平分布式。 主备高可用、分布式共识、大规模水平分布式&#xff…

Oracle 终止正在执行的SQL

目录 一. 背景二. 操作简介三. 投入数据四. 效果展示 一. 背景 项目中要求进行性能测试,需要向指定的表中投入几百万条数据。 在数据投入的过程中发现投入的数据不对,需要紧急停止SQL的执行。 二. 操作简介 👉需要DBA权限👈 ⏹…

Datawhale组队学习笔记task1——leetcode面试题

文章目录 写在前面刷题流程刷题技巧 Day1题目1、0003.无重复字符的最长子串解答:2.00004 寻找两个正序数组的中位数解答:3.0005.最长回文子串解答4.0008.字符串转换整数解答: Day2题目1.0151.反转字符串中的单词解答2.0043.字符串相乘解答3.0…

K3二开:在工业老单工具栏增加按钮,实现打印锐浪报表

在上次实现用GridRepot报表实现打印任务单后,在想着能不能给将生产任务单原来要通过点击菜单栏,打印任务单的功能,在工具栏上也增加按钮实现,这样就不需要多点了。 原本是需要点击菜单栏才能实现的 现在在工具栏上增加按钮实现同…

[计算机网络]一. 计算机网络概论第一部分

作者申明&#xff1a;作者所有文章借助了各个渠道的图片视频以及资料&#xff0c;在此致谢。作者所有文章不用于盈利&#xff0c;只是用于个人学习。 1.0推荐动画 【网络】半小时看懂<计算机网络>_哔哩哔哩_bilibili 1.1计算机网络在信息时代的作用 在当今信息时代&…

机器学习之支持向量机SVM及测试

目录 1 支持向量机SVM1.1 概念1.2 基本概念1.3 主要特点1.4 优缺点1.5 核函数1.6 常用的核函数1.7 函数导入1.8 函数参数 2 实际测试2.1 二维可视化测试代码2.2 多维测试 1 支持向量机SVM 1.1 概念 支持向量机&#xff08;Support Vector Machine&#xff0c;简称SVM&#xff…

云服务信息安全管理体系认证,守护云端安全

在数据驱动的时代&#xff0c;云计算已成为企业业务的超级引擎&#xff0c;推动着企业飞速发展。然而&#xff0c;随着云计算的广泛应用&#xff0c;信息安全问题也日益凸显&#xff0c;如同暗流涌动下的礁石&#xff0c;时刻威胁着企业的航行安全。这时&#xff0c;云服务信息…

服务器数据恢复—Zfs文件系统数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台zfs文件系统的服务器&#xff0c;管理员误操作删除了服务器上的数据。 服务器数据恢复过程&#xff1a; 1、将故障服务器中所有硬盘做好标记后取出&#xff0c;硬件工程师检测后没有发现有硬盘存在硬件故障。以只读方式将所有硬盘…

​​​​​​​​​​​​​​★3.3 事件处理

★3.3.1 ※MouseArea Item <-- MouseArea 属性 acceptedButtons : Qt::MouseButtons containsMouse : bool 【书】只读属性。表明当前鼠标光标是否在MouseArea上&#xff0c;默认只有鼠标的一个按钮处于按下状态时才可以被检测到。 containsPress : bool curs…

GIS大模型:三维重建与建模

文章目录 数据收集预处理特征提取深度估计点云生成表面重建纹理映射大模型的角色 大模型在三维重建与建模方面&#xff0c;尤其是在处理低空地图数据时&#xff0c;展现了其强大的能力。通过使用深度学习算法&#xff0c;特别是那些基于卷积神经网络&#xff08;CNNs&#xff0…

wireshark抓路由器上的包 抓包路由器数据

文字目录 抓包流程概述设置抓包配置选项 设置信道设置无线数据包加密信息设置MAC地址过滤器 抓取联网过程 抓包流程概述 使用Omnipeek软件分析网络数据包的流程大概可以分为以下几个步骤&#xff1a; 扫描路由器信息&#xff0c;确定抓包信道&#xff1b;设置连接路由器的…

阿里云无影云电脑的使用场景

阿里云无影云电脑是一种安全、高效的云上虚拟桌面服务&#xff0c;广泛应用于多种场景&#xff0c;包括教育、企业办公、设计与视频制作、客服中心等。以下是九河云总结的无影云电脑的几个典型使用场景&#xff1a; #### 1. 教育机构 - **业务痛点**&#xff1a; - 学生实践操…

力扣 查找元素的位置

二分查找经典例题。 题目 要是只是从数组中用二分查找对应的元素&#xff0c;套一下模板一下就可以得出了&#xff0c;然后这题就在于其中会有多个目标元素&#xff0c;要用不同的方式在找到第一个元素时再做偏移。 时间复杂度&#xff1a;O(log n)&#xff0c;空间复杂度&am…

Profibus DP转Modbus TCP协议转换网关模块功能详解

Profibus DP 和 Modbus TCP 是两种不同的工业现场总线协议&#xff0c;Profibus DP 常用于制造业自动化领域&#xff0c;而 Modbus TCP 则在工业自动化和楼宇自动化等领域广泛应用。实现 Profibus DP 转 Modbus TCP 功能&#xff0c;通常需要特定的网关设备&#xff0c;以下为你…

SQL Prompt 插件

SQL Prompt 插件 注&#xff1a;SQL Prompt插件提供智能代码补全、SQL格式化、代码自动提示和快捷输入等功能&#xff0c;非常方便&#xff0c;可以自行去尝试体会。 1、问题 SSMS&#xff08;SQL Server Management Studio&#xff09;是SQL Server自带的管理工具&#xff0c…

OpenCV基础:矩阵的创建、检索与赋值

本文主要是介绍如何使用numpy进行矩阵的创建&#xff0c;以及从矩阵中读取数据&#xff0c;修改矩阵数据。 创建矩阵 import numpy as npa np.array([1,2,3]) b np.array([[1,2,3],[4,5,6]]) #print(a) #print(b)# 创建全0数组 eros矩阵 c np.zeros((8,8), np.uint8) #prin…

【Flink系列】9. Flink容错机制

9. 容错机制 在Flink中&#xff0c;有一套完整的容错机制来保证故障后的恢复&#xff0c;其中最重要的就是检查点。 9.1 检查点&#xff08;Checkpoint&#xff09; 9.1.1 检查点的保存 1&#xff09;周期性的触发保存 “随时存档”确实恢复起来方便&#xff0c;可是需要我…

于灵动的变量变幻间:函数与计算逻辑的浪漫交织(上)

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。 这一节我们主要来学习函数的概念&#xff0c;了解库函数中的标准库、头文件&#xff0c;了解自定义函数…

【CSS】---- CSS 实现超过固定高度后出现展开折叠按钮

1. 实现效果 2. 实现方法 使用 JS 获取盒子的高度&#xff0c;来添加对应的按钮和样式&#xff1b;使用 CSS 的浮动效果&#xff0c;参考CSS 实现超过固定高度后出现展开折叠按钮&#xff1b;使用容器查询 – container 语法&#xff1b;使用 clamp 函数进行样式判断。 3. 优…

STM32F407接HX711称重传感器

在许多嵌入式项目中&#xff0c;如智能家居、物流管理等&#xff0c;都需要用到精确的重量测量功能。STM32F407作为一款高性能的微控制器&#xff0c;搭配HX711称重传感器&#xff0c;可以轻松实现这一需求。本文将详细介绍如何将STM32F407与HX711称重传感器进行连接和编程&…