结课总结
2020.4.1-2020.4.8期间参加了百度AI Studio的“深度学习7日入门-CV疫情特辑”课程,这是今年自新冠疫情以来参加的第一次线上课程,偶尔通过paddlepaddle的公众号推送获得该课程的开课信息。该课程主要通过教师网络直播,学生在AI STUDIO上完成作业和竞赛,通过群里讨论的方式来开展,通过该课程,基本了解的深度学习的基本概念,在完成作业的基础上了解了深度学习的工作流程和具体的应用。总体来说,受益匪浅。
本次开课一共七天,下面简单罗列自己在这七天内的学习内容。
第一天,紧跟当前新冠疫情的发展趋势,使用python爬虫爬取丁香园网站所公布的我国各省份新冠感染人数,并使用pyecharts来可视化这些数据。第一次接触pyecharts绘图库,这个库由于由百度开发维护,因此特别适用于我们国人。参考该工具包,可谓良心,documentation和API相当详尽,有时间再好好研究下。
第二天,“手势识别”,即给定一张大小为100×100的手部图片,识别出该图片指示的数字是什么。开课的内容和课后作业均围绕该主题来进行。从这次课程内容后,我了解到识别是深度学习中的一个重要应用,识别过程需要依次进行以下三个步骤,即 建立模型-损失函数-优化算法 。其中建立模型使用了早期的 前馈神经网络(输入层与隐藏层,隐藏层与输出层之间均使用全连接实现,输出层使用softmax激活函数,其他层不使用激活函数);损失函数则使用了最简单的误差平方和(常用的还有交叉熵损失函数); 优化算法则借助链式法则计算变量的梯度值,并用分批次的梯度下降算法来更新每次的参数值。
在实际做作业过程中,发现尽管在训练过程中得到的训练精度很高(基本在1.0附近产生微小波动)、损失值很低(0.04712838),但在测试时的精度偏低,在群中讨论后的结果是,应该是产生了过拟合的现象,即参数“过于完美”地拟合了训练数据,但一旦应用到测试集时效果就大打折扣。经过讨论,使用dropout丢weight和在loss function上加入正则项的方法,在不改变epoch的情况下测试accuracy有了显著提升。(调参也不是一门毫无技巧的学问)
第三天,开课内容和课后作业都是围绕 “车牌识别” 展开。尽管与第二天的内容同为识别,但今天的内容相对来说更进一步,主要表现在“手势识别”使用的是前馈神经网络,而今天的内容则使用 LeNet-5(无激活函数), 完成了从全连接神经网络到卷积神经网络的过渡。概括来说,前者的模型结构灵活度不足(处理不同大小的图片时无法使用同一个模型),参数过多(权重之间是全连接的关系)。对此,卷积神经网络采用局部连接,参数共享和pooling的方式来解决以上三个问题。确定了训练模型后,接下来是损失函数的确定,通过介绍可知,损失函数的选定不是千篇一律的,而是依赖于具体的工作任务,即如果要计算分类损失,则采用交叉熵(cross entropy)损失函数(loss(p,q)=−Σni=1p(xi)log(q(xi))
loss(p,q)=−Σi=1np(xi)log(q(xi)),其中p
p为set {0,1} label, q为predicted 概率);若是回归损失,则采用误差平方和(Mean Square Error, MSE) 损失函数(简单,不列)。
第四天,“口罩分类”,开课内容和课后作业均围绕此进行。今天课程的内容在LeNet的基础上,引入其他经典网络结构,或者说,介绍了其他经典CNN结构的发展过程。详细地说,AlexNet引入了Dropout和ReLU,使用了Data augmentation, 为2013 ILSVRC冠军,2014冠军 GoogLeNet引入了Inceptive v2, BN,借鉴了NIN, 效果优于VGG网络(但该网络在其他任务中因表现出色而广泛使用),2015年冠军 ResNet加入残差机制。除此以外,还介绍了计算机视觉的几大主要任务,图像分类/目标检测/图像语义分割/图像实例分割,他们之间的联系如下图所示。
通过一个口罩分类的案例,理解并掌握了如何使用paddlepaddle动态图来搭建一个 经典的卷积神经网络 。
第五天 的任务是学习paddlepaddle 的PaddleHub库,该库是实现迁移学习的良好去处,但由于学习得不够精深,此处先不做评论,等以后深入学习,再展开详细讨论。本次的课后作业是结合一个竞赛 “人流密度检测” 来完成的,由于数据标注的多样性和数据集足够大,因此完成的难度不小,目前还在进行中,借鉴了群里很多大佬的意见,希望能尽快跑出一个baseline再在它的基础上慢慢将精度提上去。
最后一天 正式学习的任务是paddleSlim, 这个库是对模型进行压缩的封装良好的库函数,有益于模型在终端平台的部署(考虑到了不同平台的硬件性能)。尽管实际用途很大, 但该库也是第一次听(有时候我们是不是越有用的知识接触得越少?),因此在牢牢掌握前面五个课程的基础上,还需花费一番功夫去学习啊。通过老师讲授,可知道,所谓的模型压缩其目标是降低模型总的参数、提高小模型的精度,从而减少计算量和提高计算效率。具体的方法可分为四类,即 剪裁(剪去网络通道数)、量化(变浮点型计算为整形计算)、蒸馏(迁移大模型的知识到小模型上,让大模型监督小模型的训练)、NAS(Network Architecture Search, 与硬件、搜索策略有关)。最后,通过作业体验了paddleSlim的易用性。
总结: 本次课程在4.8晚上的总结会后完满结束了,这门课使我大致了解了深度学习的发展过程,了解了很多以前听过但没有深入了解的概念。感谢paddlepaddle这个框架和aistudio这个平台带来的便捷性(免去了配置环境的烦恼)。同时还有在群里讨论的这种氛围对学习的促进作用很明显(偶尔在里面调侃也是有的)。期待下次继续参加aistudio组织的公开课。
加油,共同进步。
期待论文复现课