神经网络——非线性激活

目录

非线性激活

非线性激活代码举例(ReLU)

综合代码案例


非线性激活

在神经网络中,非线性激活函数是核心组件之一,它赋予了神经网络拟合复杂非线性关系的能力。如果没有非线性激活函数,无论神经网络有多少层,最终都只能实现线性映射,无法处理图像识别、自然语言处理等复杂任务。

在神经网络中,"激活函数" 的名称源于神经科学的类比,它模拟了生物神经元的 "激活" 机制。

激活函数的核心功能是:

  1. 引入非线性:让神经网络能拟合复杂函数(如 异或问题)
  2. 控制信号传递:决定哪些信息被增强(高激活)、哪些被抑制(低激活)
  3. 归一化输出:将输入映射到特定范围(如 Sigmoid 的 (0,1)、Tanh 的 (-1,1))

为什么需要非线性激活?

神经网络的本质是通过 "线性变换 + 激活" 的堆叠来学习数据规律:

  • 线性变换(如 y = Wx + b)只能表示直线(或高维空间中的超平面),无法拟合曲线、分类边界不规则的数据(比如 "异或问题")。
  • 激活函数通过非线性变换,让神经网络可以组合多个线性变换结果,最终形成任意复杂的非线性函数。

简单说:没有非线性激活,神经网络就退化为 "多层线性回归",失去深度的意义


常见的非线性激活函数

不同激活函数有不同的特性,适用场景也不同。以下是最常用的几种:

  1. ReLU(Rectified Linear Unit,修正线性单元)
  • 公式f(x) = max(0, x)

  • 特性

    • 计算简单(仅判断是否为正),训练速度快;

    • 解决了早期 "Sigmoid 梯度消失" 问题(正区间梯度为 1,不衰减);

  • 缺点

    • "死亡 ReLU 问题":当输入长期为负时,神经元会永久 "失效"(梯度为 0,无法更新);
  • 适用场景:几乎所有深度学习模型的默认选择(尤其是卷积神经网络 CNN)。

  1. Sigmoid
  • 公式f(x) = 1 / (1 + e^(-x))

  • 特性

    • 输出范围在 (0,1) 之间,可表示 "概率"(如二分类的预测概率);

    • 非线性平滑,适合早期浅层网络;

  • 缺点

    • 梯度消失:当 x 很大或很小时,导数接近 0,深层网络中参数难以更新;

    • 输出非零均值(偏向 0.5),可能影响训练稳定性;

  • 适用场景:仅用于二分类任务的输出层(如判断 "是 / 否")。

  1. Tanh(双曲正切)
  • 公式f(x) = (e^x - e^(-x)) / (e^x + e^(-x))(输出范围 (-1,1))

  • 特性

    • 解决了 Sigmoid 的 "非零均值" 问题(输出以 0 为中心);

    • 非线性更强,适合浅层网络的隐藏层;

  • 缺点

    • 仍存在梯度消失问题(x 绝对值大时,导数接近 0);
  • 适用场景:循环神经网络(RNN)的早期版本,或对输出对称性有要求的场景。

  1. Leaky ReLU(带泄漏的 ReLU)
  • 公式f(x) = max(αx, x)(α 通常取 0.01,即 x<0 时输出 0.01x)

  • 特性

    • 解决了 ReLU 的 "死亡神经元" 问题(负区间保留微小梯度);

    • 计算简单,性能通常优于 ReLU;

  • 缺点:α 是超参数,需要手动调整;

  • 适用场景:替代 ReLU 的常用选择(尤其当训练中出现大量死亡神经元时)。

  1. Swish
  • 公式f(x) = x * sigmoid(βx)(β 是可训练参数或固定值)

  • 特性

    • 平滑的非线性函数,负区间有微小输出(类似 Leaky ReLU,但更平滑);

    • 在深层网络(如 ResNet)中表现常优于 ReLU;

  • 适用场景:需要更高精度的深层模型。

  1. Softmax
  • 公式f(x_i) = e^x_i / Σ(e^x_j)(对所有输入归一化,输出和为 1)

  • 特性

    • 将多分类的 "得分" 转换为概率分布(如判断图像是 "猫 / 狗 / 鸟" 的概率);
  • 适用场景:多分类任务的输出层。


激活函数的选择原则

  1. 隐藏层:优先用 ReLU 或其变种(Leaky ReLU、Swish),计算快且不易梯度消失;

  2. 输出层

    • 二分类:Sigmoid(输出单个概率值);

    • 多分类:Softmax(输出概率分布);

    • 回归任务:可不用激活(直接输出连续值)或用 ReLU(确保输出非负);

  3. 特殊场景

    • 循环神经网络(RNN):避免用 ReLU(可能导致梯度爆炸),可用 Tanh 或 Sigmoid;

    • 深层模型:优先用 Swish 等更平滑的函数,减少训练波动。


非线性激活代码举例(ReLU)

参数inplace的作用:是否直接在原内存地址上修改输入数据,还是创建新的内存空间存储输出。

inplace默认是False

python 复制代码
import torch
from torch import nn
from torch.nn import ReLU

input = torch.tensor([[1, -0.5],
                      [-1, 3]])
intput = torch.reshape(input, (-1, 1, 2, 2))
print(intput.shape)


class MyModule(nn.Module):
    def __init__(self):
        super().__init__()
        self.relu = ReLU()

    def forward(self, input):
        output = self.relu(input)
        return output


module = MyModule()
output = module(input)
print("input", input)
print("output", output)

运行结果:


综合代码案例

python 复制代码
import torchvision
from torch import nn
from torch.nn import Sigmoid
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

dataset = torchvision.datasets.CIFAR10("../torchvision_dataset", train=False,
                                       transform=torchvision.transforms.ToTensor(),
                                       download=True)

dataloader = DataLoader(dataset, batch_size=64)


class MyModule(nn.Module):
    def __init__(self):
        super().__init__()
        self.sigmoid = Sigmoid()

    def forward(self, input):
        output = self.sigmoid(input)
        return output


writer = SummaryWriter("logs_test7")
module = MyModule()
step = 1
for data in dataloader:
    imgs, targets = data
    writer.add_images("激活前", imgs, step)
    output = module(imgs)
    writer.add_images("激活后", output, step)
    step += 1

writer.close()
相关推荐
工藤学编程1 分钟前
零基础学AI大模型之旅游规划智能体之react_agent实战
人工智能·react.js·旅游
djimon2 分钟前
06年老电脑复活Ubuntu14.04配置Python网站爬自动化
开发语言·python·自动化
好奇龙猫6 分钟前
【人工智能学习-AI入试相关题目练习-第一次】
人工智能·学习
Java后端的Ai之路8 分钟前
【阿里AI大赛】-二手车价格预测使用五折交叉验证
人工智能·深度学习·机器学习·二手车价格预测·天池
wang6021252188 分钟前
本地docker的解释器在pycharm进行调试
python·pycharm·fastapi
数说星榆1819 分钟前
在线简单画泳道图工具 PC端无水印
大数据·论文阅读·人工智能·架构·流程图·论文笔记
过河卒_zh156676611 分钟前
情感型AI被“立规矩”,AI陪伴时代进入下半场
人工智能·算法·aigc·生成式人工智能·算法备案
工业HMI实战笔记11 分钟前
拯救HMI×施耐德电气|以AI重塑工业人机交互新范式
人工智能·ui·信息可视化·自动化·人机交互·交互
张彦峰ZYF12 分钟前
多智能体(Multi-Agent)系统在人工智能中的应用与发展
人工智能·autogen·metagpt·multi-agent·agentscope·camel ai·agentverse
启途AI13 分钟前
2026年课件制作新范式:AI PPT工具深度解析
大数据·人工智能·powerpoint·ppt