news 2026/5/10 23:51:02

激活函数简介

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
激活函数简介

激活函数(Activation Function)

激活函数是神经网络中的非线性变换函数,它决定神经元是否应该被激活(即是否将信息传递给下一层)。

为什么需要激活函数?

核心问题:线性模型的局限性

# 如果没有激活函数(或使用线性激活)# 每一层都是线性变换:y = Wx + b# 两层神经网络h=W1*x+b1 output=W2*h+b2# 最终等价于单层线性模型output=(W2*W1)*x+(W2*b1+b2)# = W' * x + b'# 结论:多层线性层可以合并成一层,无法解决复杂问题

激活函数的作用:引入非线性,让神经网络能够学习和表示复杂模式。

常见激活函数

1.Sigmoid(逻辑函数)

importtorchimporttorch.nn.functionalasF# 公式: σ(x) = 1 / (1 + e^(-x))# 输出范围: (0, 1)x=torch.tensor([-2,-1,0,1,2])y=torch.sigmoid(x)print(y)# tensor([0.1192, 0.2689, 0.5000, 0.7311, 0.8808])

特点

  • ✅ 输出可解释为概率
  • ✅ 平滑、可微
  • ❌ 梯度消失(两端饱和)
  • ❌ 输出不是零中心

应用:二分类输出层

2.Tanh(双曲正切)

# 公式: tanh(x) = (e^x - e^(-x)) / (e^x + e^(-x))# 输出范围: (-1, 1)x=torch.tensor([-2,-1,0,1,2])y=torch.tanh(x)print(y)# tensor([-0.9640, -0.7616, 0.0000, 0.7616, 0.9640])

特点

  • ✅ 零中心(利于优化)
  • ✅ 比 Sigmoid 范围更大
  • ❌ 仍有梯度消失问题

应用:RNN、传统神经网络隐藏层

3.ReLU(修正线性单元)⭐ 最常用

# 公式: ReLU(x) = max(0, x)# 输出范围: [0, ∞)x=torch.tensor([-2,-1,0,1,2])y=F.relu(x)print(y)# tensor([0, 0, 0, 1, 2])

特点

  • ✅ 计算简单快速
  • ✅ 缓解梯度消失(正区间)
  • ✅ 稀疏激活(部分神经元输出0)
  • ❌ Dead ReLU(负区间梯度为0)
  • ❌ 输出不是零中心

应用:CNN、现代深度学习隐藏层

4.Leaky ReLU

# 公式: LeakyReLU(x) = max(αx, x),通常 α=0.01# 输出范围: (-∞, ∞)x=torch.tensor([-2,-1,0,1,2])y=F.leaky_relu(x,negative_slope=0.01)print(y)# tensor([-0.0200, -0.0100, 0.0000, 1.0000, 2.0000])

特点

  • ✅ 解决 Dead ReLU 问题
  • ✅ 负区间有微小梯度
  • ❌ 需要调参 α

5.Softmax

# 公式: Softmax(x_i) = e^(x_i) / Σ e^(x_j)# 输出范围: (0, 1),所有输出和为1x=torch.tensor([2.0,1.0,0.1])y=F.softmax(x,dim=0)print(y)# tensor([0.6590, 0.2424, 0.0986])print(y.sum())# tensor(1.0000)

特点

  • ✅ 输出为概率分布
  • ✅ 突出最大值

应用:多分类输出层

可视化对比

importmatplotlib.pyplotaspltimporttorchimporttorch.nn.functionalasF x=torch.linspace(-5,5,100)# 计算各种激活函数sigmoid=torch.sigmoid(x)tanh=torch.tanh(x)relu=F.relu(x)leaky_relu=F.leaky_relu(x,0.1)plt.figure(figsize=(12,8))plt.plot(x,sigmoid,label='Sigmoid')plt.plot(x,tanh,label='Tanh')plt.plot(x,relu,label='ReLU')plt.plot(x,leaky_relu,label='Leaky ReLU')plt.grid(True,alpha=0.3)plt.legend()plt.title('常见激活函数对比')plt.xlabel('x')plt.ylabel('激活值')plt.show()

实际应用示例

importtorch.nnasnnclassSimpleNN(nn.Module):def__init__(self,input_size,hidden_size,num_classes):super().__init__()self.fc1=nn.Linear(input_size,hidden_size)self.fc2=nn.Linear(hidden_size,hidden_size)self.fc3=nn.Linear(hidden_size,num_classes)# 激活函数self.relu=nn.ReLU()self.softmax=nn.Softmax(dim=1)defforward(self,x):# 隐藏层使用 ReLUx=self.relu(self.fc1(x))x=self.relu(self.fc2(x))# 输出层根据任务选择# 二分类:Sigmoid# 多分类:Softmax# 回归:无激活函数x=self.fc3(x)returnself.softmax(x)# 使用示例model=SimpleNN(784,256,10)# MNIST手写数字识别

选择指南

任务类型隐藏层推荐输出层推荐
分类(二分类)ReLU / Leaky ReLUSigmoid
分类(多分类)ReLU / Leaky ReLUSoftmax
回归ReLU / Tanh无(线性)
图像处理ReLU / Leaky ReLU根据任务
序列数据Tanh / ReLUSoftmax
概率预测ReLUSigmoid

常见问题

Q: 为什么不能只用 ReLU?

  • ReLU 在负区间输出0,可能导致神经元"死亡"
  • 某些任务需要负值输出(如 Tanh)

Q: 梯度消失是什么?

  • Sigmoid/Tanh 在两端导数接近0
  • 深层网络反向传播时梯度逐渐消失
  • 导致浅层权重无法更新

Q: 可以自定义激活函数吗?

# 可以,但需要可微classSwish(nn.Module):defforward(self,x):returnx*torch.sigmoid(x)

核心要点:激活函数让神经网络从线性模型变成通用函数逼近器,能够学习任意复杂的模式!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 1:39:14

Nanbeige 4.1-3B Streamlit WebUI实战教程:添加Markdown渲染支持

Nanbeige 4.1-3B Streamlit WebUI实战教程:添加Markdown渲染支持 1. 引言 如果你已经体验过那个极简清爽的Nanbeige 4.1-3B Streamlit WebUI,可能会发现一个美中不足的地方:AI回复的内容都是纯文本格式。当模型输出代码块、列表、标题等Mar…

作者头像 李华
网站建设 2026/4/17 8:36:44

ESP01S待机功耗从1.8W降到0.5W:HomeKit智能开关省电改造全记录

ESP01S待机功耗深度优化:从1.8W到0.5W的智能开关改造实战 智能家居设备的24小时待机功耗一直是玩家们关注的焦点。以ESP01S为核心的HomeKit智能开关为例,原方案待机功耗高达1.8W,一年下来仅待机就要消耗近16度电。经过系统改造后,…

作者头像 李华
网站建设 2026/4/16 20:48:33

StructBERT中文语义匹配:手把手教你搭建本地应用

StructBERT中文语义匹配:手把手教你搭建本地应用 1. 工具概述与核心价值 StructBERT中文语义匹配工具是基于阿里达摩院开源的StructBERT-Large模型开发的本地化解决方案。这个工具专门针对中文文本相似度计算场景,能够精准判断两个句子在语义层面的相似…

作者头像 李华
网站建设 2026/4/16 12:50:07

网盘下载太慢?这款直链助手让你告别龟速时代

网盘下载太慢?这款直链助手让你告别龟速时代 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅…

作者头像 李华
网站建设 2026/4/17 23:54:57

解锁144帧体验:EldenRingFPSUnlockAndMore全面优化指南

解锁144帧体验:EldenRingFPSUnlockAndMore全面优化指南 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_mirrors/el/El…

作者头像 李华