1. 视频学习心得及问题总结
1.1深度学习的数学基础
与BP神经网络相比:玻尔兹曼机(BM)和BP相比都是正向传播,其中,BP训练中同时改变节点状态和参数值,即训练中改变的是参数值。
自编码器:包含编码器和解码器,用于接收数据然后降维存储。
自编码器有:正则自编码器、稀疏自编码器、去噪自编码器和变分自编码器。
机器学习的三要素:模型、策略、算法;
其中模型即建模,有概率形式和函数形式,概率形式比如有指数线,函数形式比如有广义线性模型;策略即确定目标函数;算法指的是求解,比如可以求出解析解的,或者通过凸优化得到最终结果的。
对于欠拟合和过拟合的处理:
欠拟合:提高模型复杂度,决策树中可以扩展分支,神经网络中可以增加训练轮数;
过拟合:降低模型复杂度,增加dropout等或者增加数据集;
1.2卷积神经网络
卷积神经网络的应用:
分类、检索、分割、检测、人脸识别、表情识别、图像生成、图像风格转化、自动驾驶等;
卷积神经网络通过局部关联和参数共享解决了传统网络的过拟合问题。
卷积神经网络的组成:
卷积层、池化层和全连接层。
卷积是通过两个函数f 和g 生成第三个函数的一种数学算子,表征函数f 与g经过翻转和平移的重叠部分函数值乘积对重叠长度的积分。
池化层:就像一个缩放的过程,但保持原特征,保持主要通知的同时减少参数和计算量,防止过拟合,常放在卷积层和卷积层之间、全连接层和全连接层之间。池化有最大池化和平均池化。
全连接层:常放在卷积神经网络尾部。
卷积神经网络的典型结构:
1.AlexNet:使得深度学习重新兴起,其原因有:百万集数据库ImageNet的出现;Relu非线性激励函数的出现;使用Dropout解决过拟合和data augmentation进行数据增强;双GPU的实现。
2.ZFNet(ILSVRC2013年冠军 14.8%)
修改AlexNet中conv1中11*11的卷积核为7*7的卷积核,步长由4改为2;将conv3,4,5层变成了全连接。
3.VGG(ILSVRC2014定位任务的冠军(Winner),分类任务的亚军(runner-up)7.3%)
将AlexNet的8层修改为16层,共有138M个参数。
4.GoogleNet:(ILSVRC2014分类任务的冠军 6.7%)
网络共22层,还有5层池化层,没有全连接层,除了最后一层是全连接层,由于之前网络参数大多集中在全连接层,所以该网络的参数只有Alexnet网络的1/12。其突出优点有:使用了1*1卷积:减小了参数,允许增加深度;可以降维,构建瓶颈层来减小计算成本,Inception块中就是通过在3x3和5x5后面加入1x1来减小计算;增强了网络的表达能力(可以根据自己的意愿,或压缩或增加或保持通道数)。还有配合全局均值池化来代替全连接层,这个就是为了能大大减小模型的参数。
5.ResNet(ILSVRC2015冠军 3.57%)
由MSRA的何铠明等人提出,通过使用残差块训练了152层的网络,降低了错误率。解决了退化问题(plain网络随着网络加深,错误率升高),而使用残差后,随着网络加深,错误率还是能下降。
2. 代码练习
2.1 MNIST 数据集分类
下载数据集,首先在小型全连接网络上训练,然后在参数相同的卷积神经网络上训练
第一张图是在全连接网络的训练结果,第二张图是在卷积神经网络的训练结果,从结果可以看出,含有相同参数的 CNN 效果要明显优于简单的全连接网络,是因为 CNN 能够更好的挖掘图像中的信息,主要通过两个手段:
- 卷积:Locality and stationarity in images
- 池化:Builds in some translation invariance
打乱像素顺序后再次在两个网络上训练,下图是打乱像素顺序的图像输出
再次训练,下图是训练结果,在简单全连接网络的训练结果是83%,在卷积神经网络的训练结果是80%,从结果上可以看出,打乱图像像素对全连接网络的性能基本上没有影响,但是卷积神经网络的性能明显下降。这是因为对于卷积神经网络,会利用像素的局部关系,但是打乱顺序以后,这些像素间的关系将无法得到利用。
2.2 CIFAR10 数据集分类
CIFAR10数据集,它包含十个类别:‘airplane’, ‘automobile’, ‘bird’, ‘cat’, ‘deer’, ‘dog’, ‘frog’, ‘horse’, ‘ship’, ‘truck’。CIFAR-10 中的图像尺寸为3x32x32,也就是RGB的3层颜色通道,每层通道内的尺寸为32*32。
步骤:定义网络-->训练模型-->测试
上图是在整个数据集上的测试结果,准确率为64%。
2.3 使用 VGG16 对 CIFAR10 分类
VGG16模型参加2014年的 ImageNet图像分类与定位挑战赛,在分类任务上排名第二,在定位任务上排名第一。下图是VGG16的网络模型,
下面是建立 的VGG16模型
使用上面建立的VGG16模型,对之前的CIFAR10数据集进行分类,分类结果的准确率为84.92%。
2.4 使用VGG模型迁移学习进行猫狗大战
创建VGG模型
修改最后一层,冻结最后一层的参数,需要把最后的 nn.Linear 层由1000类,替换为2类。为了在训练中冻结前面层的参数,需要设置 required_grad=False。这样,反向传播训练梯度时,前面层的权重就不会自动更新了。训练中,只会更新最后一层的参数。