这两天看了本大神写的魏秀参——《解析卷积神经网络——深度学习时间手册》,在此写下我的一点总结,有助于巩固总结知识。
一、卷积的基本组成
- 卷积操作:获取的是图像的局部信息
- Pooling: ①特征不变性;②特征降维;③缓解一定程度的过拟合
- 激活函数:增加了网络的非线性表达能力
- 全连接层:分类层,可用卷积的方式实现,分前面是卷积层和全连接层两种形式
- 感受野:相对于大的卷积核,使用小卷积核增加深度,减少参数
- 特点:分布式表示,大量的神经元通过不同的组合,形成了对海量特征的描述。相同模式的特征可能是不同卷积核的响应,同一卷积核可能响应不同的模式。
二、典型网络结构
- Alex首个应用到计算机视觉的卷积网络
局部响应规范化(LRN):同一层相邻channel的feature map的加权平均
- VGG:更小的卷积核,更深的网络
- Network-In-Network(NIN)
全局汇合操作(global averagepooling),将每个feature map的值平均,不用全连接
- 高速公路网络(Highway network)
变换门控制变换的强度,携带门控制输入信号的保留强度。
- 深度残差网络
梯度信息可以在多个神经网络层之间有效传播,解决难更深的网络难训练的问题
- 数据扩充
- 中心化数据:计算训练集图像像素值,再用到训练集、些实际、验证集。
- 最终参数的理想期望是0,初始化参数时,假设服从高斯分布,随机初始化。但输出数据分布的方差会随着输入神经元的个数变化,在初始化的同时加入方差的规范,即Xavier初始化方法√n,He等人进行√(n⁄2) 改进。
- 假设均匀分布
- 使用预训练模型
在网络中引入非线性,使网络产生强大的表达能力。常用的是ReLu。
七、损失函数
- 分类
交叉熵损失函数(softmax)
- 回归:L1是绝对值,l2是平方和
- 标记的分布(label distribution),对不确定问题的确定,衡量预测与真实label之间分布的差别,kl散度
七、网络正则化
- L2正则化=权重衰减(weight decay)
- L1正则化
- 随机失活dropout,降低了神经元之间的依赖,避免过拟合的发生。训练阶段,以概率p随机失活,在测试阶段,要将权重*(1-p),保证参数的期望一致,也就是输出结果*(1-p)(倒置随机失活)。pytorch框架会有train、eval模式。每次相当于训练一个全新的网络,测试结果相当于多个网络的平均集成。
- 验证集:一般在每轮或几批之后,计算训练集和验证集的精度,验证模型泛化能力。
(a)增加层数、调整激活函数增加非线性,减小模型的正则化等增加模型复杂度
(b)过拟合,增加模型正则化;及时早停,选取验证集精度最高的一轮训练结果。
八、训练技巧
- 输入图像的大小:2的次幂
- 卷积层:卷积核(3/5,补零1/2,步长为1,)个数也是2的次幂
- 汇合层:大小为2,步长为2
- Shuffle:打乱数据,确保不同轮次相同批次看到的数据不同。
- 学习速率:开始为0.01或0.001,随着训练的进行,进行衰减
黄色:爆炸,大幅减小学习速率
绿色:使用较小学习速率,在训练后几轮减小学习速率
蓝色:增大学习速率
- 批规范化操作(batch normalization):使得输出的均为0,方差为1,消除梯度弥散,拉大小梯度的尺度。针对收敛速度慢,梯度爆炸等问题使用。
优化方法:推荐使用Adagrad,Adadelta,RMSProp,Adam等。
微调:网络已经别的数据集上收敛过,再次训练,用更小的学习速率;浅层小学习率,深层大一些。跟原始数据不相似,数据量又小的情况比较麻烦,多目标学习框架对预训练模型进行微调。