深入理解批量归一化与残差连接
1. 批量归一化简介
批量归一化(Batch Normalization)是现代许多架构中非常重要的组件。其主要目的是解决“内部协变量偏移”(Internal Covariate Shift)问题,即不同层的激活值具有不同的分布。我们希望所有层产生的激活值具有相似的分布,理想情况下是均值为零、标准差为一。
批量归一化与特征标准化有相似之处,但也存在重要差异:
- 特征标准化是对整个模型的输入进行标准化,而批量归一化是对层的激活值(即下一层的输入)进行标准化,使其均值为零、标准差为一。
- 特征标准化计算整个训练集的统计信息(均值和标准差),而批量归一化计算每个小批量的统计信息。
- 批量归一化可以对标准化后的输出进行可选的仿射变换,即对其进行缩放并加上一个常数,缩放因子和常数都是模型学习的参数。
以下是一个简单的 BasicConv2d 类的实现,其中包含了批量归一化:
import torch
import torch.nn as nn
import torch.nn.functional as F
class BasicConv2d(nn.Module):
def __init__(self, in_channels, out_channels, **kwargs):
super(BasicConv2d, self).__init__()
self.conv = nn.Conv2d(
in_channels, out_channels, bi
超级会员免费看
订阅专栏 解锁全文
967

被折叠的 条评论
为什么被折叠?



