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

news2025/1/17 22:23:23

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

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

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

相关文章

20.<Spring图书管理系统①(登录+添加图书)>

PS:关于接口定义 接口定义,通常由服务器提供方来定义。 1.路径:自己定义 2.参数:根据需求考虑,我们这个接口功能完成需要哪些信息。 3.返回结果:考虑我们能为对方提供什么。站在对方角度考虑。 我们使用到的…

【Sql递归查询】Mysql、Oracle、SQL Server、PostgreSQL 实现递归查询的区别与案例(详解)

文章目录 Mysql 5.7 递归查询Mysql 8 实现递归查询Oracle递归示例SQL Server 递归查询示例PostgreSQL 递归查询示例 更多相关内容可查看 Mysql 5.7 递归查询 MySQL 5.7 本身不直接支持标准 SQL 中的递归查询语法(如 WITH RECURSIVE 这种常见的递归查询方式&#xf…

vue2修改表单只提交被修改的数据的字段传给后端接口

效果: 步骤一、 vue2修改表单提交的时候,只将修改的数据的字段传给后端接口,没有修改得数据不传参给接口。 在 data 对象中添加一个新的属性,用于存储初始表单数据的副本,与当前表单数据进行比较,找出哪些…

「刘一哥GIS」系列专栏《GRASS GIS零基础入门实验教程(配套案例数据)》专栏上线了

「刘一哥GIS」系列专栏《GRASS GIS零基础入门实验教程》全新上线了,欢迎广大GISer朋友关注,一起探索GIS奥秘,分享GIS价值! 本专栏以实战案例的形式,深入浅出地介绍了GRASS GIS的基本使用方法,用一个个实例讲…

纯命令 git使用

首先我们到一个新的公司 要添加一个新的git仓库的权限 我们应该现拉去代码 配置git的仓库信息 第一 先添加权限 第二 如果不是自己电脑 需要配置信息 配置基础信息 查看本地git账号git config --global user.name git config --global user.email修改本地账号git co…

Linux系统编程:深入理解计算机软硬件体系和架构

一、硬件体系 首先我们要知道,我们最常见的计算机(笔记本)以及我们不常见的计算机(服务器)其实本质上都是一堆硬件的结合:cpu、网卡、显卡、内存、磁盘、显示器、键盘…… 但他们并不是毫无章法地放在一起…

微信小程序-Docker+Nginx环境配置业务域名验证文件

在实际开发或运维工作中,我们时常需要在 Nginx 部署的服务器上提供一个特定的静态文件,用于域名验证或第三方平台验证。若此时使用 Docker 容器部署了 Nginx,就需要将该验证文件正确地映射(挂载)到容器中,并…

HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (五、电影详情页的设计实现)

在上一篇文章中,完成了电影列表页的开发。接下来,将进入电影详情页的设计实现阶段。这个页面将展示电影的详细信息,包括电影海报、评分、简介以及相关影人等。将使用 HarmonyOS 提供的常用组件,并结合第三方库 nutpi/axios 来实现…

在 macOS 上,用命令行连接 MySQL(/usr/local/mysql/bin/mysql -u root -p)

根据你提供的文件内容,MySQL 的安装路径是 /usr/local/mysql。要直接使用 mysql 命令,你需要找到 mysql 可执行文件的路径。 在 macOS 上,mysql 客户端通常位于 MySQL 安装目录的 bin 子目录中。因此,完整的路径应该是&#xff1…

使用docker-compose安装ELK(elasticsearch,logstash,kibana)并简单使用

首先服务器上需要安装docker已经docker-compose,如果没有,可以参考我之前写的文章进行安装。 https://blog.csdn.net/a_lllk/article/details/143382884?spm1001.2014.3001.5502 1.下载并启动elk容器 先创建一个网关,让所有的容器共用此网…

解决“无法定位程序输入点 av_buffer_create 于动态链接库 XXX\Obsidian.exe 上”问题

解决“无法定位程序输入点 av_buffer_create 于动态链接库 XXX\Obsidian.exe 上”问题 问题描述 本人在使用zotero中的zotero one(青柠学术插件)的时候,使用插件跳转obsidian中的对应笔记,出现上图情况。(错误中提到的…

《小迪安全》学习笔记05

目录 读取: 写入: (其中的读取和写入时我认为比较重要的,所以单独做成了目录,这里的读取和写入是指在进行sql注入的时候与本地文件进行的交互) 好久没发博客了。。。从这篇开始的小迪安全学习笔记就开始…

Jupyter notebook中运行dos指令运行方法

Jupyter notebook中运行dos指令运行方法 目录 Jupyter notebook中运行dos指令运行方法一、DOS(磁盘操作系统)指令介绍1.1 DOS介绍1.2 DOS指令1.2.1 DIR - 显示当前目录下的文件和子目录列表。1.2.2 CD 或 CHDIR - 改变当前目录1.2.3 使用 CD .. 可以返回上一级目录1…

excel 判断某个单元格的日期,如果超过3天,则在另一个单元格显示超过三天的公式

excel 判断某个单元格的日期&#xff0c;如果超过3天&#xff0c;则在另一个单元格显示超过三天的公式&#xff0c;公式如下&#xff1a; IF(DATEDIF(C627,TODAY(),"d")<4,"3天以内","超过三天") IF(D627"超过3天","文件赶紧…

内存与缓存:保姆级图文详解

文章目录 前言1、计算机存储设备1.1、硬盘、内存、缓存1.2、金字塔结构1.3、数据流通过程 2、数据结构内存效率3、数据结构缓存效率 前言 亲爱的家人们&#xff0c;创作很不容易&#xff0c;若对您有帮助的话&#xff0c;请点赞收藏加关注哦&#xff0c;您的关注是我持续创作的…

eBay账号安全攻略:巧妙应对风险

在跨境电商的浪潮中&#xff0c;eBay宛如一座璀璨的灯塔&#xff0c;照亮了无数买卖双方的交易之路。但别忘了&#xff0c;网络安全的阴霾也在悄然蔓延&#xff0c;让eBay账号时刻处于黑客攻击、数据泄露、钓鱼诈骗等风险的阴影之下。别担心&#xff0c;今天就来为你支支招&…

宝塔php7.4安装报错,无法安装,php8以上可以安装,以下的不行,gd库什么的都正常

宝塔的依赖问题导致的问题&#xff0c;最后手动挂载后才解决。。。废了三天三夜终于搞好了。。。。无语&#xff5e; 建议&#xff1a;不要一直升级宝塔版本&#xff0c;升级前备份或者开服务商的实例镜像&#xff0c;方便恢复&#xff0c;不然&#xff0c;可就GG了&#xff5…

【大数据】机器学习 -----关于data.csv数据集分析案例

打开表 import pandas as pd df2 pd.read_csv("data.csv",encoding"gbk") df2.head()查看数据属性&#xff08;列标题&#xff0c;表形状&#xff0c;类型&#xff0c;行标题&#xff0c;值&#xff09; print("列标题:",df2.columns)Data…

【数据可视化-12】数据分析岗位招聘分析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

RabbitMQ故障全解析:消费、消息及日常报错处理与集群修复

文章目录 前言&#xff1a;1 消费慢2 消息丢失3 消息重复消费4 日常报错及解决4.1 报错“error in config file “/etc/rabbitmq/rabbitmq.config” (none): no ending found”4.2 生产者发送消息报错4.3 浏览器打开IP地址&#xff0c;无法访问 RabbitMQ&#xff08;白屏没有结…