降采样(Downsampling)
卷积神经网络中的降采样(Downsampling)
- 通常对卷积层的输出进行降采样。
- 减少输出大小和后续层中所需的计算次数。
- 还可以提高对平移的容忍度(tolerance) - 输入的微小变化不会改变降采样的输出。
降采样是将数据从一个高的采样率减少到一个低的采样率的过程。在图像处理中,降采样通常指的是减少图像的尺寸,这意味着去除图像中的某些像素以得到一个更小的版本。降采样的主要目的是减少数据量和计算复杂性,但可能会丢失某些细节信息。
胯步卷积(Strided convolution)
- 卷积步长 = 连续卷积窗口之间的距离。
- 在CNN中,步长可以大于1。
- 假设没有填充:
- 输出大小 = ceil((输入大小 - 核大小 + 1) / 步长)。
- 有填充时:
- 输出大小 = ceil(输入大小 / 步长)。
ceil:向上取整。也就是说,它将任何给定的数值取整到最接近的整数,但该整数不小于该数值。
优势和劣势
优势:
- 高效 (Efficient): 较大的步长意味着更少的卷积操作。
劣势:
- 卷积窗口会跳过图像的部分区域,因此可能会错过重要的图像特征。
最大池化(Max pooling)&& 平均池化(Average pooling)
最大池化
-
经过卷积后,每个激活图都被单独进行降采样。
-
最大池化的步长决定了降采样的程度(输出大小 = 输入大小/步长)。
在激活图的给定窗口中,取最高值并丢弃其余的值。
经过 Max Pooling 之后:
平均池化
在激活图的给定窗口中,计算值的平均数。
经过 Average pooling 后:
优势和劣势
优势:
- 与跨步卷积或平均池化相比,最大池化更有可能保留最重要的特征。
劣势:
- 平均池化会"模糊"特征;可能会丢失重要的特征。
- 池化的速度比跨步卷积慢。
小结
- 在CNN中,降采样是常见的,目的是为了使后续层的计算更加高效 并增加平移不变性 。
- Make computation more efficient in later layers
- Increase translation invariance
- 包括的方法有跨步卷积、最大池化和平均池化。
卷积神经网络中的正则化(Regularisation)
- 由于参数数量极多,即使在大型数据集上,CNN也容易出现过拟合现象。
- 通常需要正则化来减少过拟合。
- 常见的选择有:
- L1或L2正则化
- Dropout(随机失活)
- 提前停止(Early stopping)
L1,L2 正则化
- 为损失函数添加一个额外的项,以鼓励网络参数取较小的值。
- L1正则化增加了这样的项: <math xmlns="http://www.w3.org/1998/Math/MathML"> ∑ i ∣ θ i ∣ \sum_i|\theta_i| </math>∑i∣θi∣
- 对所有参数的绝对值进行惩罚之和 (Penalise the sum of the absolute value of all parameters);
- 鼓励稀疏 (sparse) 表示 - 许多参数应为0。
- L2正则化增加了这样的项: <math xmlns="http://www.w3.org/1998/Math/MathML"> ∑ i θ i 2 \sum_i \theta_i^2 </math>∑iθi2
- 对所有参数的平方值进行惩罚之和 (Penalise the sum of the squares of all parameters);
- 鼓励参数取小的值(但不是0)。
它们都用于防止神经网络过拟合,并确保网络参数不会变得过大。
-
在添加正则化时的自由参数(Free parameters):
- 正则化项与损失函数中的其他项相比,应给予多少权重。
- 如果你给予正则化项太大的权重,模型可能会过度约束,导致欠拟合。
- 如果权重太小,则正则化效果可能不明显,模型仍可能过拟合。
- 在正则化中应包含哪些层 - 是所有层还是仅后面的层?
- 有时,仅对模型中的某些层应用正则化就足够了,特别是对于那些有大量参数的层,如全连接层。
- 有时,对所有层进行正则化可能是有益的,尤其是当我们怀疑整个网络都可能过拟合时。
- 应包含哪些参数 - 有时只包括权重,不包括偏差。
- 因为权重通常是模型中的主要参数,而偏置较少。
- 正则化项与损失函数中的其他项相比,应给予多少权重。
-
添加正则化往往会减慢训练速度 (Adding regularisation tends to slow down training)。
-
过多的正则化可能会导致欠拟合 (Too much regularisation can result in underfitting)。
Dropout
概念:
- 随机丢弃(discard)一些神经元(设置输出=0)
- 强迫神经元独立于彼此寻找有用的特征(Forces neurons to find useful features independently of each other)
- 实际上,可以并行训练多个结构(Effectively, trains multiple architectures in parallel)
- 要丢弃的神经元百分比是一个可调的参数(例如,丢弃50%或丢弃20%)
- 可以应用于所有层,或仅应用于后面的层
- 不同的层可以应用不同的丢弃百分比 --- 通常后面的层会有更多的丢弃率
- 添加dropout会使训练速度变慢
- Dropout只在训练中使用 --- 当在新数据上评估网络(验证/测试)时,所有神经元都是活跃的。
提早停止(Early stopping)
- 当网络出现过拟合的迹象时停止训练;
- 监控在验证集(validation set) 上的表现:
- 验证集是一个未在训练中看到并且不包含在测试集内的数据子集;
- 在训练过程中,定期检查模型在验证集上的表现 --- 表现下降可能意味着过拟合;
- 通过使网络参数接近其初始值(通常接近0)来鼓励网络参数取小的值
小结
- 正则化通常是为了防止过拟合所必需的
- 常见的方法包括:L1 或 L2 正则化、dropout 和早停策略
- 对于给定的优化问题,哪种方法(或组合)最有效通常并不明确,因此常见的做法是进行实验并结合它们使用。
Training an Image Recognition CNN
CNN 概览
- 典型的图像识别架构包括:
- 若干数量的卷积层,伴随着下采样
- 一个或多个全连接层
- 使用交叉熵损失的Softmax输出
- 基本思路:
- 在卷积层中进行特征嵌入feature embedding(将图像从像素转化为有用的高级特征)
- 全连接层(Fully-connected layers)实际上是一个线性分类器(或MLP),用于从高级特征预测类别。
损失函数:Softmax
- 对最后一层的输出应用Softmax函数:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> σ ( y i ) = e y i ∑ j = 1 N e y j \sigma(y_i) = \frac{e^{y_i}}{\sum^N_{j=1}e^{y_j}} </math>σ(yi)=∑j=1Neyjeyi
- 这生成了一个向量,具有概率分布的属性:
- 所有值的范围在0-1之间
- 值的总和为1
损失函数:交叉熵损失(Cross-entropy loss)
- 衡量模型预测的概率分布与实际概率分布之间的差异。(Measure of the difference between the model and ground truth probability distributions)
- 预测类别与真实类别之间的交叉熵损失:
训练过程(Training process)
- 将数据划分为训练/验证/测试集
- 将训练数据分为多个批次
- 对于 N = 1 - ?
- 预处理一批图像数据(Preprocess a batch of image data)
- 对批次进行分类,计算损失(Classify batch, compute loss)
- 通过反向传播更新模型参数(Update model parameters with backprop)
- 定期检查训练模型在验证集上的性能(用于提前停止)
图像预处理(Data preprocessing)
Image whitening (图像白化): 将每张图像缩放到0-255的范围,然后归一化,使得每个像素的均值为0,(可选的)标准差为1。主要用于预处理图像数据以便于神经网络更好地学习特征。
数据增强(Data augmentation)
- 操纵训练数据以生成更多样本
- 如果不进行数据增强,即使是较小的网络(例如,AlexNet)也会在ImageNet上出现过拟合。
常见方法包括:
- 随机裁剪(例如,从256 x 256的图像裁剪出224 x 224的图像)
- 水平反射
- 小的颜色/对比度调整(模拟不同的相机设置或一天中的不同时刻)
不太常见的方法包括:
- 随机旋转(例如,正负15度)------较慢
- 随机缩放------较慢
- 随机遮挡物
目的是通过对原始图像做些微变化来增加数据多样性,从而增强模型的泛化能力。
不包括的一些变化:
- 垂直反射(Vertical reflection):对于大多数常见的图像分类任务,垂直翻转可能不会增加有意义的变化。例如,翻转猫或狗的图片可能会产生一个不太自然的图像。然而,对于某些任务,例如卫星图像处理,垂直翻转可能是有意义的。
- 大的颜色变化:在大多数真实世界的应用中,图像的自然颜色和照明条件是很重要的。过大的颜色变化可能会导致生成的图像不再代表真实世界的场景。例如,一个完全红色的树叶可能不是很常见,因此在训练时添加这种强烈的颜色变化可能并不实用。此外,过大的颜色变化可能会导致模型在真实世界的数据上的表现下降。
训练过程(Training process)
- 初始化网络权重和偏差:
- 通常,权重初始化为来自高斯分布的、围绕零的小值。
- 偏差初始化为零或小的正值。
- 设置训练参数:
- 批次大小(Batch size)
- 优化器(Optimiser)
- 学习率及其衰减(Learning rate + decay)
- 监控训练和验证损失:
- 观察模型在训练集和验证集上的性能,确保模型没有过拟合并且正在学习。
当验证损失不再下降时停止训练:这通常是一个早停准则,当模型在验证集上的性能不再提高时,停止训练可以防止过拟合。
批次大小(Batch Size)
- Batch size (or mini-batch size):用于计算参数更新梯度的训练数据部分。
- 直接使用整个数据集计算每次更新是不切实际的:从计算的角度看,使用整个数据集进行每次的参数更新可能需要非常大的计算资源和时间。
- 数据集随机分为N个大小为b的批次:这意味着每次更新使用的是数据的一个小子集而不是整个数据集。
- N次更新 = 1个周期(每张图片已经被查看一次):一个周期意味着模型已经看过整个数据集一次。多个周期的训练意味着模型多次遍历了整个数据集。
Smaller batch size
- 更多的更新(More updates):虽然每次更新的计算速度会更快。
- 更新更嘈杂(Noisier updates):在梯度上会有高的方差。
Larger batch size
- 更新更少:但每次更新需要更长的计算时间。
- 更新更稳定:梯度的方差更小,导致更新方向更稳定。
批次大小往往受到内存限制:较大的批次需要更多的计算资源,尤其是内存。因此,在实践中选择的批次大小通常取决于可用的硬件资源,尤其是GPU或CPU的内存。
优化器(Optimiser)
- Stochastic Gradient Descent (SGD) -- 随机梯度下降
- 一种常见的优化方法,每次仅使用一个样本来估计梯度并更新模型参数。
- Root Mean Square Propagation (Rmsprop)
- 一个自适应的学习率方法,通过平均过去梯度的平方来调整学习率。
- Adaptive moment estimation (Adam)
- 保持梯度/梯度平方的移动平均值来划分学习率
- 与SGD维持一个对所有梯度都相同的单一学习率不同,这些方法可以为每个参数独立地调整学习率,尤其是在训练过程中的不同阶段。
学习率 + 衰减(learning rate + decay)
- 学习率:每次更新时网络参数变化的程度。
- 学习率过高 - 训练不稳定。
- 学习率过低 - 学习速度非常慢。
训练时间有多长?
通常,训练直到模型在验证集上的性能不再提高。