神经网络常见操作

112 阅读4分钟

卷积

  • dim=d的tensor可以进行torch.nn.Convnd(in_channels,out_channels),其中n=d-1,d-2
  • 对于torch.nn.Convnd(in_channels,out_channels),改变的是tensor的倒数n+1维的大小

n维卷积指的是卷积核的空间形状是n维的,也就是滑动方向是n维的,但是在PyTorch中核张量的维度不是n维的。

无论是一维、二维还是三维卷积,每个卷积核都会作用于所有输入通道,输出通道数都等于卷积核的个数

下面是一个多通道的二维卷积图示,一共有一个卷积核,这个卷积核作用于所有的通道,也就是作用于三个通道,因为只有一个卷积核,所以生成一个特征图

{5A3D52A5-834A-406B-97AD-DBBF96A1628B}.png

维度一维卷积(nn.Conv1d二维卷积(nn.Conv2d三维卷积(nn.Conv3d
滑动方向1个(长度)2个(高度、宽度)3个(深度/时间、高度、宽度)
卷积核空间形状1D(kernel_size2D(kernel_height, width3D(kernel_depth, height, width
核张量维度3D(out_channels, in_channels//groups, kernel_size4D(out_channels, in_channels//groups, kernel_h, kernel_w5D(out_channels, in_channels//groups, kernel_depth,kernel_h, kernel_w

nn.Convnd(in_channels,out_channels,kernel_size,stride,padding,dilation,groups,bias,padding_mode)

  • In the simplest case, the output value of the layer with input size :math:(N, C_{in}, D, H, W)and output :math:(N, C_{out}, D_{out}, H_{out}, W_{out}) can be precisely described as: .. math::out(N_i, C_{out_j}) = bias(C_{out_j}) +\sum_{k = 0}^{C_{in} - 1} weight(C_{out_j}, k) \star input(N_i, k)

nn.Linear(in_features: int, out_features: int, bias: bool = True)

  • Applies a linear transformation to the incoming data: :math:y = xA^T + b
  • The shape of x is [batch_size, in_features]
  • The shape of A^T is [in_features,out_features].
  • The shape of b is [out_features].

nn.ReLU(inplace: bool = False)

  • Applies the rectified linear unit function element-wise: :math:\text{ReLU}(x) = (x)^+ = \max(0, x) ReLU(x)={x,if x>00,if x0\text{ReLU}(x) = \begin{cases} x, & \text{if } x > 0 \\ 0, & \text{if } x \leq 0 \end{cases}
  • \text{ReLU}(x) : 表示对输入 x 应用 ReLU 函数。
  • (x)^+ : 这是数学中表示“取正部”(positive part)的符号。
  • \max(0, x) : 取 0 和输入 x 两者中的最大值

nn.Sigmoid()

  • Applies the element-wise function: math::\text{Sigmoid}(x) = \sigma(x) = \frac{1}{1 + \exp(-x)}σ(x)=11+ex\sigma(x) = \frac{1}{1 + e^{-x}}
  • x: 这是输入值。
  • \exp(-x) : 这是计算自然常数 e 的 -x 次方。e 约等于 2.718。
  • 1 + \exp(-x) : 将 e 的 -x 次方与 1 相加。
  • \frac{1}{...} : 取上一步结果的倒数

归一化

LayerNorm

  • class torch.nn.LayerNorm(normalized_shapeeps=1e-05elementwise_affine=Truebias=Truedevice=Nonedtype=None)
  • 核心逻辑是对 “单个样本” 的指定维度计算统计量(均值 / 方差) ,不依赖批次内其他样本
  • 对于一个形状为(N,C,H,W)的张量,选样本内的”最后连续k个维度",k<=3,无批次依赖

BatchNorm2d

  • 核心逻辑是对 “整个批次(N 个样本)” 的 “单个通道” 计算统计量,即每个通道的统计量由该批次所有样本在该通道的所有空间像素共同决定,因此归一化维度严格绑定 N 维度(批次)  和 空间维度(H、W) ,仅对 C 维度(通道)  独立处理。
  • 对于一个形状为(N,C,H,W)的张量,是对对每个通道 c,将该通道的 N×H×W 个元素归一化

GroupNorm

  • GroupNorm 是 BatchNorm 的改进,核心逻辑是对 “单个样本” 的 “通道分组” 计算统计量—— 先将 C 个通道分成 G 个组(每组 C/G 个通道),再对每个组内的 “所有空间像素(H×W)” 计算统计量,既不依赖批次(N),也不跨组共享统计量。
    1. 通道分组:将 C 个通道分成 G 个组(需满足 C % G == 0),每组包含 C/G 个通道(记为 C_g = C/G);
    2. 统计量计算范围:对每个样本、每个通道组,收集该组内 C_g 个通道的所有空间像素(H×W 个),即范围为 (C_g, H, W)
    3. 归一化维度:对每个样本的每个通道组,将该组的 C_g×H×W 个元素归一化,且每个样本、每个组独立计算统计量

三者的使用场景

归一化类型核心适用场景关键词批次依赖通道 / 空间处理特点
BatchNorm图像 CNN、大批次数据强依赖(需 N≥8,推荐 N≥32)单通道独立归一化,不跨通道
LayerNormNLP 序列任务、小批次 / 动态批次无依赖(N=1 也可用)跨通道 + 空间归一化(样本内全局 / 局部维度)
GroupNorm图像 CNN(小批次)、医学图像(样本少)无依赖通道分组归一化(平衡通道关联性与计算效率)