大模型--BN 批量正则化--33

1. 参考

详解归一化、标准化、正则化以及batch normalization
论文

Batch Normalization

BatchNorm层通常在激活函数之前应用。
它会自动计算每个特征的均值和方差,并根据小批量数据的统计信息进行归一化处理,在使用时,需要注意训练与评估模式的切换,
训练阶段,使用mini-batch的均值和方差,
评估模式(推理模式)下,会默认使用整个批次的均值和方差。

import torch
import torch.nn as nn

class MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.fc1 = nn.Linear(784, 256)
        self.bn1 = nn.BatchNorm1d(256)  # BatchNorm1d应用于全连接层输出
        self.fc2 = nn.Linear(256, 10)

    def forward(self, x):
        x = torch.flatten(x, 1)
        x = self.fc1(x)
        x = self.bn1(x)  # bn 用于激活函数之前
        x = torch.relu(x)
        x = self.fc2(x)
        return x

理论

Batch Normalization由google在2015年提出,主要是为了解决深度神经网络训练过程中的内部协变量偏移问题,同时有助于加速网络的收敛过程。

内部协变量偏移:
Internal Covariate Shift,在深度神经网络中,每一层的输入数据分布随着网络的训练而发生变化,这被称为内部协变量偏移。
这种变化可能导致每层需要不断适应前一层输出的分布变化,使得网络训练过程变得复杂和缓慢。

作用

首先,通过将特征数据的分布调整到标准正态分布,而在这分布下,激活函数的梯度比较大,能够完美解决梯度消失的问题;
其次,由于存在较大的梯度,能够加速模型的训练;
最后,由于数据被调整为比较标准的正态分布,模型能够学习到比较通用化的特征,屏蔽了距离正态分布中心较远的特征,避免了对离群特征点的使用,能够在一定程度上减弱过拟合。

posted @ 2024-12-11 17:34  jack-chen666  阅读(9)  评论(0编辑  收藏  举报