深度学习相关的概念

卷积

定义

可以简单理解为局部的滤镜扫描。局部的滤镜即卷积核。

在一维信号中,卷积的计算过程可以理解为卷积核反转(镜像),并不断与被卷积函数相乘加和,得到最终的卷积结果;体现的是过去影响未来。

而在二维信号中, 卷积其实体现是的数学中“互相关”的概念。在图像处理中,在大部分深度学习中,通常不进行反转操作,而直接与卷积核进行对齐相乘,这里有几个原因:

  • 常用的卷积核(高斯、均值等)都是对称的;
  • 在图像处理中,通常关注的是绝对值或者平方值,符号并不重要;

这里不进行反转可以省略一定的计算资源。但在严格的二维信号处理中,卷积仍然需要翻转。实际的操作要根据实际的需求进行考虑,这里讨论的是大部分深度学习适用情况下。

卷积后的尺寸变化

假设输入图像的尺寸(宽度或高度)为 $W$,卷积核大小为 $K$,填充(Padding)为 $P$,步长(Stride)为 $S$,那么输出尺寸 $O$ 的计算公式如下:

$$O = \frac{W - K + 2P}{S} + 1$$

注意: 计算结果通常是向下取整(Floor)。

卷积核的选择

可以选择固定的卷积核,例如高斯卷积核、均值卷积核;

但在深度学习中,卷积核的选择在一开始是采用的随机变量,可以将卷积核理解成模型参数。在训练过程中,前向传播、计算损失以及反向传播会逐渐修改卷积核中的值,体现模型训练参数改变的思路。

池化

定义

池化(Pooling),也常被称为“下采样(Downsampling)”,作用就是“提炼特征并压缩空间”。简单来说,池化就是把一张大图“缩放”成一张小图,同时尽量保留图中最重要的信息。池化将会极大的降低运算量。

池化常用的是两种方式:最大值池化或者均值池化。即输出池化窗口中的最大值或者整个区域的均值。

与卷积的不同

池化窗口滑动时,默认是不考虑重叠的情况,这与卷积不同。池化的目的在与为了压缩空间(降维),每一个区域只贡献一个代表值,区域之间互不干涉。

池化后尺寸的变化

假设输入图像的尺寸(宽或高)为 $W_{in}$,池化窗口大小(Kernel Size)为 $K$,步长(Stride)为 $S$,填充(Padding)为 $P$,输出尺寸 $W_{out}$ 的计算公式为:

$$W_{out} = \lfloor \frac{W_{in} - K + 2P}{S} \rfloor + 1$$

注意:$\lfloor \dots \rfloor$ 表示向下取整。在 PyTorch 的 MaxPool2d 中,默认行为是向下取整(ceil_mode=False)。

激活

定义

在神经网络中,一个神经元的输出并不是直接把输入加起来就完了,而是遵循这样一个公式:

$$y = f(\sum w_i x_i + b)$$

  • $\sum w_i x_i + b$:这是线性部分(加权求和)。
  • $f$:这就是激活函数

激活函数是一个作用于神经元输出端的非线性函数。它的任务是将神经元的线性累加结果进行一次“转换”,决定这个神经元产生的信号是否应该被传导给下一层,以及传导多少。激活函数最重要的目的是为了对神经网络引入非线性因素。

常用的激活函数

  • Relu函数:

$f(x) = \max(0, x)$,计算极快,解决了正区间的梯度消失问题。

  • Sigmod函数:

$\sigma(x) = \frac{1}{1 + e^{-x}}$,主要用于二分类任务的输出层(表示概率)。在中间隐藏层已很少使用,因为易导致梯度消失。

反向传播

定义

反向传播是一种高效计算神经网络中梯度(Gradient)的算法。它的目标是:计算出损失函数(Loss Function)相对于网络中每一个参数(权重 $w$ 和偏置 $b$)的偏导数。

  • 直观理解:它告诉模型,为了让最后的预测更准(Loss 更小),每一个卷积核里的每一个数字应该往大调还是往小调,以及调多少。
  • “反向”的含义:梯度的计算是从输出层(误差端)开始,按照网络层次反向传播到隐藏层,最后到达输入层的过程。

数学原理

反馈机制。利用的是微积分中的链式求导:假设模型是一个复合函数:$Loss = L(f_2(f_1(x)))$。

如果我们想知道最初的输入层参数 $f_1$ 对 $Loss$ 的影响,我们需要这样拆解:

$$\frac{\partial Loss}{\partial f_1} = \frac{\partial Loss}{\partial L} \cdot \frac{\partial L}{\partial f_2} \cdot \frac{\partial f_2}{\partial f_1}$$

训练的核心五步

  • 梯度清零
  • 前向传播
  • 计算损失
  • 反向传播
  • 更新参数