【深度学习】关键技术-激活函数(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 pltdef 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 pltdef 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 npdef 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 pltdef 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 等新型激活函数正在逐步取代传统激活函数,尤其在深度和复杂的网络中表现更优。

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

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

相关文章

3.flask蓝图使用

构建一个目录结构 user_oper.py from flask import Blueprint, request, session, redirect, render_template import functools # 创建蓝图 user Blueprint(xkj, __name__)DATA_DICT {1: {"name": "张三", "age": 22, "gender": …

React第二十二章(useDebugValue)

useDebugValue useDebugValue 是一个专为开发者调试自定义 Hook 而设计的 React Hook。它允许你在 React 开发者工具中为自定义 Hook 添加自定义的调试值。 用法 const debugValue useDebugValue(value)参数说明 入参 value: 要在 React DevTools 中显示的值formatter?:…

【漏洞分析】DDOS攻防分析

0x00 UDP攻击实例 2013年12月30日,网游界发生了一起“追杀”事件。事件的主角是PhantmL0rd(这名字一看就是个玩家)和黑客组织DERP Trolling。 PhantomL0rd,人称“鬼王”,本名James Varga,某专业游戏小组的…

【 PID 算法 】PID 算法基础

一、简介 PID即:Proportional(比例)、Integral(积分)、Differential(微分)的缩写。也就是说,PID算法是结合这三种环节在一起的。粘一下百度百科中的东西吧。 顾名思义,…

PyTorch使用教程(1)—PyTorch简介

PyTorch是一个开源的深度学习框架,由Facebook人工智能研究院(FAIR)于2016年开发并发布,其主要特点包括自动微分功能和动态计算图的支持,使得模型建立更加灵活‌。官网网址:https://pytorch.org。以下是关于…

PyTorch框架——基于深度学习YOLOv5神经网络水果蔬菜检测识别系统

基于深度学习YOLOv5神经网络水果蔬菜检测识别系统,其能识别的水果蔬菜有15种,# 水果的种类 names: [黑葡萄, 绿葡萄, 樱桃, 西瓜, 龙眼, 香蕉, 芒果, 菠萝, 柚子, 草莓, 苹果, 柑橘, 火龙果, 梨子, 花生, 黄瓜, 土豆, 大蒜, 茄子, 白萝卜, 辣椒, 胡萝卜,…

Mac玩Steam游戏秘籍!

Mac玩Steam游戏秘籍! 大家好!最近有不少朋友在用MacBook玩Steam游戏时遇到不支持mac的问题。别担心,我来教你如何用第三方工具Crossover来畅玩这些不支持的游戏,简单又实用! 第一步:下载Crossover 首先&…

【网络篇】IP知识

IPv4首部与IPv6首部 IPv4相对于IPv6的好处: 1.IPv6可自动配置,即使没有DHCP服务器也可以实现自动分配IP地址,实现即插即用。 2.IPv6包首部长度采用固定40字节,删除了选项字段,以及首部校验和,简化了首部…

我的年度总结

这一年的人生起伏:从曙光到低谷再到新的曙光 其实本来没打算做年度总结的,无聊打开了帅帅的视频,结合自己最近经历的,打算简单聊下。因为原本打算做的内容会是一篇比较丧、低能量者的呻吟。 实习生与创业公司的零到一 第一段工…

Vue脚手架开发 Vue2基础 VueRouter的基本使用 vue-router路由案例

vue-router路由 Vue脚手架开发,创建项目:https://blog.csdn.net/c_s_d_n_2009/article/details/144973766 Vue Router,Vue Router | Vue.js 的官方路由,Vue.js 的官方路由,为 Vue.js 提供富有表现力、可配置的、方便…

Windows远程桌面网关出现重大漏洞

微软披露了其Windows远程桌面网关(RD Gateway)中的一个重大漏洞,该漏洞可能允许攻击者利用竞争条件,导致拒绝服务(DoS)攻击。该漏洞被标识为CVE-2025-21225,已在2025年1月的补丁星期二更新中得到…

c语言----------内存管理

内存管理 目录 一。作用域1.1 局部变量1.2 静态(static)局部变量1.3 全局变量1.4 静态(static)全局变量1.5 extern全局变量声明1.6 全局函数和静态函数1.7 总结 二。内存布局2.1 内存分区2.2 存储类型总结2.3内存操作函数1) memset()2) memcpy()3) memmove()4) memcmp() 2.4 堆…

【2024年华为OD机试】 (C卷,100分)- 堆栈中的剩余数字(Java JS PythonC/C++)

一、问题描述 题目描述 向一个空栈中依次存入正整数&#xff0c;假设入栈元素 n(1<n<2^31-1)按顺序依次为 nx…n4、 n3、n2、 n1, 每当元素入栈时&#xff0c;如果 n1n2…ny(y 的范围[2,x]&#xff0c; 1<x<1000)&#xff0c;则 n1~ny 全部元素出栈&#xff0c;重…

Java安全—SPEL表达式XXESSTI模板注入JDBCMyBatis注入

前言 之前我们讲过SpringBoot中的MyBatis注入和模板注入的原理&#xff0c;那么今天我们就讲一下利用以及发现。 这里推荐两个专门研究java漏洞的靶场&#xff0c;本次也是根据这两个靶场来分析代码&#xff0c;两个靶场都是差不多的。 https://github.com/bewhale/JavaSec …

51单片机入门基础

目录 一、基础知识储备 &#xff08;一&#xff09;了解51单片机的基本概念 &#xff08;二&#xff09;掌握数字电路基础 &#xff08;三&#xff09;学习C语言编程基础 二、开发环境搭建 &#xff08;一&#xff09;硬件准备 &#xff08;二&#xff09;软件准备 三、…

基于Java的百度AOI数据解析与转换的实现方法

目录 前言 一、AOI数据结构简介 1、官网的实例接口 2、响应参数介绍 二、Java对AOI数据的解析 1、数据解析流程图 2、数据解析实现 3、AOI数据解析成果 三、总结 前言 在当今信息化社会&#xff0c;地理信息数据在城市规划、交通管理、商业选址等领域扮演着越来越重要的…

【WEB】网络传输中的信息安全 - 加密、签名、数字证书与HTTPS

文章目录 1. 概述2. 网络传输安全2.1.什么是中间人攻击2.2. 加密和签名2.2.1.加密算法2.2.2.摘要2.2.3.签名 2.3.数字证书2.3.1.证书的使用2.3.2.根证书2.3.3.证书链 2.4.HTTPS 1. 概述 本篇主要是讲解讲一些安全相关的基本知识&#xff08;如加密、签名、证书等&#xff09;&…

shell练习2

需求&#xff1a;判断192.168.1.0/24网络中&#xff0c;当前在线的ip有哪些&#xff0c;并编写脚本打印出来。 #!/bin/bashnmap -sn 192.168.1.0/24 | grep Nmap scan report for | awk {print $5} 注意&#xff1a;当运行 bash ip.sh 时出现 nmap: command not found 的错误…

【运维自动化-作业平台】魔法变量到底如何使用之主机列表类型

蓝鲸作业平台&#xff0c;以下简称作业平台或JOB平台 魔法变量&#xff1a;JOB平台执行引擎提供的特有的变量能力用法 脚本中使用&#xff0c;并且需要事先声明&#xff1a;job_import {{变量名}} 声明后&#xff0c;同样是使用 dollar 符 大括号&#xff1a;${变量名}来取值…

活动预告 | CCF开源发展委员会开源供应链安全技术研讨会(2025第一期)——“大模型时代的开源供应链安全风控技术”...

点击蓝字 关注我们 CCF Opensource Development Committee CCF开源发展委员会开源供应链安全工作组&#xff08;以下简称CCF-ODC-OSS&#xff09;将于1月17日下午在北京黄大年茶思屋举行2025年第一期开源供应链安全技术研讨会&#xff0c;此次研讨会主题为“大模型时代的开源供…