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

4.3 激活函数的目的

激活函数的目的(思考)

为什么神经网络需要激活函数。比如,没有激活函数的话,神经网络就只是线性变换的组合,无法处理复杂的非线性问题。所以激活函数的作用是引入非线性,让网络可以学习更复杂的模式。
ReLU和Sigmoid的具体函数形式。ReLU比较简单,就是max(0, x),但需要说明它的优缺点,比如缓解梯度消失,计算高效,但可能有神经元死亡的问题。Sigmoid的话,公式是1/(1 + e^{-x}),输出在0到1之间,适合二分类,但存在梯度消失的问题,尤其在深层网络中。
为什么选择这两种函数,或者它们适用的场景。比如ReLU在隐藏层常用,而Sigmoid多用于输出层做概率估计。

激活函数是神经网络中的核心组件之一,其目的是引入非线性特性,使网络能够学习和表示复杂的模式。以下是激活函数的核心作用及两种常见激活函数(ReLU、Sigmoid)的详细解释:


一、激活函数的目的

  1. 引入非线性
    如果神经网络仅由线性变换(如矩阵乘法)组成,无论有多少层,其整体仍是线性模型,无法解决非线性问题(如异或分类、图像识别)。激活函数通过对线性输出施加非线性变换,使网络能够拟合任意复杂的函数
  2. 控制输出范围
    激活函数可以将神经元的输出映射到特定范围(如 [0,1]、[-1,1]),避免数值爆炸或消失。
  3. 稀疏激活
    某些激活函数(如 ReLU)会使得部分神经元输出为零,从而减少参数依赖性,增强模型的鲁棒性。
  4. 梯度传递
    激活函数的导数决定了反向传播中梯度的流动方式,直接影响训练效果(如**缓解梯度消失/爆炸问题**)。

二、常见激活函数详解

1. ReLU(Rectified Linear Unit)
  • 函数形式f(x)=max⁡(0,x)f(x) = \max(0, x)f(x)=max(0,x)

或分段形式:

f(x)={xif x>00otherwisef(x) = \begin{cases}x & \text{if } x > 0 \\ 0 & \text{otherwise} \end{cases}f(x)={x0if x>0otherwise

  • 特点
    • 计算高效:仅需判断输入是否大于零,无复杂运算。
    • 缓解梯度消失:在正区间的梯度恒为 1,反向传播时梯度不会衰减。
    • 稀疏性:负输入输出为零,使网络稀疏化,减少过拟合。
    • 缺点
      • 神经元死亡:若大量神经元输出恒为零(如学习率过大时),梯度无法更新参数。
      • 非零均值输出:可能导致后续层输入分布偏移。
  • 适用场景
    隐藏层的默认选择(尤其深层网络),如图像分类、自然语言处理等。

2. Sigmoid(Logistic 函数)
  • 函数形式f(x)=11+e−xf(x) = \frac{1}{1 + e^{-x}}f(x)=1+ex1

其输出范围为 (0, 1)。

  • 特点
    • 平滑可导:梯度计算简单,导数可表示为:
      f′(x)=f(x)(1−f(x))f'(x) = f(x)(1 - f(x))f(x)=f(x)(1f(x))
    • 概率解释:输出值可视为概率(如二分类任务的输出层)。
    • 缺点
      • 梯度消失:当输入绝对值较大时,梯度趋近于零,导致深层网络难以训练。
      • 非零均值输出:导致后续层输入分布偏移,影响收敛速度。
      • 输出范围敏感:易使神经元饱和,限制表达能力。
  • 适用场景
    二分类任务的输出层(输出概率)、早期浅层网络(现逐渐被 ReLU 替代)。

三、激活函数对比

特性ReLUSigmoid
输出范围[0, +∞)(0, 1)
计算复杂度极低(只需比较和取最大值)中(涉及指数运算)
梯度特性正区间梯度为 1,负区间为 0梯度在极端值时趋近于 0
稀疏性高(负输入被抑制)
适用场景隐藏层输出层(二分类概率)

四、其他常见激活函数

  1. Tanh(双曲正切函数)
  • 函数形式f(x)=ex−e−xex+e−xf(x) = \frac{ex - e{-x}}{ex + e{-x}}f(x)=ex+exexex
  • 输出范围:(-1, 1),零均值化,缓解 Sigmoid 的输出偏移问题,但仍有梯度消失问题。
  1. Leaky ReLU
  • 函数形式
    f(x)={xif x>0αxotherwisef(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha x & \text{otherwise} \end{cases}f(x)={xαxif x>0otherwise
  • 改进 ReLU 的“神经元死亡”问题(如设 (α=0.01\alpha=0.01α=0.01)),允许负区间的小梯度流动。
  1. Softmax
  • 函数形式f(xi)=exi∑j=1Kexjf(x_i) = \frac{e{x_i}}{\sum_{j=1}K e^{x_j}}f(xi)=j=1Kexjexi

  • 用于多分类任务的输出层,将输出归一化为概率分布。


五、如何选择激活函数?

  1. 隐藏层:优先使用 ReLU 或其变种(如 Leaky ReLU、PReLU)。
  2. 输出层
    • 二分类任务:Sigmoid(输出概率)。
    • 多分类任务:Softmax(输出概率分布)。
    • 回归任务:通常不使用激活函数(或线性激活)。
  3. 特殊场景
    • RNN 中可能使用 Tanh(因零均值特性)。
    • 需要稀疏性时使用 ReLU

六、代码示例

import numpy as np
import matplotlib.pyplot as plt# ReLU
def relu(x):return np.maximum(0, x)# Sigmoid
def sigmoid(x):return 1 / (1 + np.exp(-x))# 可视化
x = np.linspace(-5, 5, 100)
plt.figure(figsize=(10, 4))plt.subplot(1, 2, 1)
plt.plot(x, relu(x), label='ReLU')
plt.title("ReLU Activation")
plt.grid(True)plt.subplot(1, 2, 2)
plt.plot(x, sigmoid(x), label='Sigmoid')
plt.title("Sigmoid Activation")
plt.grid(True)plt.show()

通过激活函数的合理选择,神经网络能够灵活地建模复杂数据关系,成为解决实际问题的强大工具。

http://www.dtcms.com/a/293634.html

相关文章:

  • LLM 幻觉一般是由于什么产生的,在模型什么部位产生
  • 计算机组成原理——数据的表示和运算2
  • 手机开启16k Page Size
  • J2EE模式---服务定位器模式
  • JavaEE Spring框架的概述与对比无框架下的优势
  • 关于原车一键启动升级手机控车的核心信息及注意事项
  • 第五章第一节 EXTI 外部中断
  • Adobe全系列下载 官方原版补丁
  • 【Spark征服之路-3.8-Spark-SQL核心编程(七)】
  • 2025獬豸杯WP
  • 用Phi-3 Mini微调实现英文到尤达语翻译
  • 软硬件协同仿真和验证的标准接口协议SCE-MI简介
  • 避坑指南:Windows 11中 Docker 数据卷的存放位置
  • vue+element-ui实现主子表
  • Vue3 面试题及详细答案120道(61-75 )
  • 力扣146:LRU缓存
  • 使用阿里云 ESA 边缘函数转发代理 docker registry
  • 利用aruco标定板标定相机
  • 电商通用话术模板搭建指南:高效转化,服务升级
  • macOS配置maven及报错处理:zsh: permission denied: mvn
  • Transformer输入部分实现
  • 学习 Flutter(五):玩安卓项目实战 - 下
  • springcloud环境和工程搭建
  • 数组算法之【数组中第K个最大元素】
  • RK3568笔记九十:基于web显示RTSP流
  • 【第三章自定义检视面板_创建自定义编辑器_如何创建自定义PropertyDrawer(9/9)】
  • SQL 中 CASE WHEN 及 SELECT CASE WHEN 的用法
  • HF86611_VB1/HF86611Q_VB1:多通道USB HiFi音频解码器固件技术解析
  • CLI 与 IDE 编码代理比较:提升开发效率的两种路径
  • docker安装minio及配置禁止列出目录文件