torch.nn — PyTorch 2.6 文档 - PyTorch 深度学习库https://pytorch.ac.cn/docs/stable/nn.html
卷积层
作用:提取局部特征
原理:下面这张图很直观!
1x1卷积作用:
1、降维/升维
2、增加非线性
可以在保持feature map尺度不变的(即不损失分辨率)的前提下大幅增加非线性特性(利用后接的非线性激活函数),把网络做的很deep。
3、跨通道信息交互
例子:使用1x1卷积核,实现降维和升维的操作其实就是channel间信息的线性组合变化,3x3,64channels的卷积核后面添加一个1x1,28channels的卷积核,就变成了3x3,28channels的卷积核,原来的64个channels就可以理解为跨通道线性组合变成了28channels,这就是通道间的信息交互。
池化层
池化操作主要用于减小特征图的尺寸,并提取出最重要的特征,它通过在特定区域内进行汇总或聚合来实现这一目标。
非线性激活层
激活函数的作用在于提供网络的非线性建模能力,如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机。
激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
常见的包括:sigmoid、relu和tanh。
全连接层
线性层它也被称为全连接层,通常所说的全连接层是指一个由多个神经元所组成的层,其所有的输出和该层的所有输入都有连接,即每个输入都会影响所有神经元的输出,在Pytorch中nn.Linear()表示线性变换。全连接层可以看作是nn.Linear()表示线性层再加上一个激活函数所构成的结构。
全连接层的应用范围非常广泛,只有全连接层组成的网络是全连接神经网络,可以用于数据的分类或回归任务,卷积神经网络和循环神经网络的末端通常会由多个全连接层组成。
归一化层
1、批归一化(Batch Normalization)
深度神经网络的训练十分复杂,因为在训练过程中随着前一层网络参数的变化,下一层网络的输入分布也会发生变化。而更低的学习率和更精细的参数初始化又会减慢模型训练速度,特别是会让具有饱和非线性的模型收敛变得十分困难,如使用Sigmoid激活函数时,容易陷入梯度消失之中。
批归一化则是通过标准化输入来解决上述问题,将归一化作为模型架构的一部分,对每次训练中的小批量样本执行归一化,使得我们可以使用更高的学习率且能降低对参数初始化的要求。同时,在某些情况下还能充当正则化使用,可以替代Dropout技术。
Ps:饱和非线性是指激活函数在输入值较大或较小时,其输出趋于恒定,导数接近于零的现象,如Sigmoid和Tanh激活函数。
2、层归一化(Layer Normalization)
批归一化的效果取决于小批量的大小,且在循环神经网络中的应用受到明显的限制。同时,批归一化也不能应用于在线学习任务或小批量必须很小的极大分布式模型。
层归一化则是通过计算单个样本中所有特征值的均值和方差来实现输入数据的归一化,可以直接应用于循环神经网络。与批归一化一样的是在归一化之后也提供了自适应偏差和增益两个可学习参数来增强模型的表达能力。与批归一化不同的是,层归一化在训练和测试的时候执行完全相同的计算。
Ps:循环神经网络中循环神经元的输入总和通常随序列长度的变化而变化,因此对其应该针对不同时间步长进行不同的统计。