()
这是一个临时链接,仅用于预览文章,短期内无效
“来吧,和我一起填表学习吧。”
专注于2017-11-19量子比特的报道
原作slav伊凡诺v
Root编译从Slav发来的几篇博客
量子出品|公众号QbitAI
Slav Ivanov是后规划者(提高社交媒体影响力的APP )的首席执行官。 成为黑客后,成为企业家的大叔,结合自己的创业经验,向大家分享他认为好的迁移学习的资料。 以下是他的原文。
现在很多深度学习的应用都依赖于迁移学习,特别是在计算机视觉领域,本文主要介绍什么是迁移学成,如何完成迁移学习,以及可能存在的缺点。
我最初接触迁移的学习是因为企业家要用。
不如开个公司吧?
有一天,朋友和我们聊起了脑袋大开的想法。 他希望做下一个爆款社交媒体,宠物版的脸书。 人们可以展示他们主人的照片,也可以看到别人的喵喵和旺财。 我们都是第一反应,认为这个想法不错。
我们认为“没有人不想整天看萌萌的照片”。
我们马上筹集了资金,开始了潜在的用户调查。 问了几个喜欢宠物的人之后,我注意到了喜欢猫的人不太喜欢看狗的照片的问题。 养鹦鹉的人也不喜欢看猫的照片,养金鱼的人只喜欢看别人养的金鱼。
现在到了2017年,我们不用再苦苦地逐一询问人们喜欢看什么宠物的照片了。 我们利用直接机器学习的方法,自动识别人们看到的照片上拍的是什么宠物。 然后根据他们看到的照片宠物进行分类。
卷积神经网络(CNN,Convolutional Neural Networks)
我们把我们的计划分享给了刚拿到机器学习PhD的rxdyg。 他建议我们用CNN解决这个问题。因为hhdxtg有自觉的飞鸟Krizhevsky带头,通过CNN获得了当年的ImageNet挑战赛(大致相当于计算机视觉的年度奥运会),将分类误差记录从26 )降到15 )。 CNN的活跃当时震惊了世界。
从此,CNN成为了计算机视觉中的主流算法。 也应用于其他深度学习领域。
如果您想了解更多关于深度学习的概述,建议您访问fast.ai上的“用于编解码器的科学深度学习”的第一部分和第二部分。 这篇文章中记载的所有学习资料的链接都在最后呢。 以后自作自受。 这些资料都是开放的。
在卷积神经网络的情况下,要分类的图像数据是输入。 然后,根据分类的不同,将学习后调整权重的参数称为滤波器和通道。 这些过滤器有好几层重叠,网络的最后一层有输出,告诉我们这张图是猫、狗、鸟等。
CNN的入门
。所以我们用fast.ai的资料,然后自己构建CNN。 我知道深度学习需要大量的数据,所以下载了ImageNet数据库。 那里有几百万张图,当然也包括犬猫和金鱼。
我们开始利用这些数据训练我们的模型,并使用随机梯度下降算法(stochastic Gradient Descental Gorithm )进行了优化。 不久,我们的CNN就能区分猫和鹦鹉了。 我们给这个模型起了名字。 宠物可以识别宠物感染病毒。
其实,已经有很多前辈在ImageNet上做了很多工作,训练了很多CNN模型。 这些预先训练的神经网络都是开放的。 如果有兴趣,请去看pretrainedmodelsonkerasandtorchvisionforpytorch。
CNN模型的第一层滤波器现在可以识别边界、渐变、实心区域。 第二层过滤器可以联系从第一层得到的数据,判断哪个是条纹,哪个是直角,哪个是圆。
三楼已经能分辨人、鸟、车的车轮等了。
最后,神经网络的输出层给出了最后的分类结果。
就这样,我们的Pet-cognizer解决了!
新的任务
我们试运行的项目被建议,如果能按照我们喜欢的灯泡的品种进行分类就更好了。 所以,我们又继续摆弄模型。 这种能够识别愉快的灯泡品种的模型称为Breed-cognizer。 但问题是,我们找不到几百张欢乐灯泡的照片来训练新模型。 我们的数据集有120个数据源,每个数据源有100张图。 我们打算先用这个小数据训练我们的CNN,但是结果很差。 ="https://p6.toutiaoimg.com/origin/46ee0002608e788a39b0?from=pc">△ 从零开始训练,所有结果都不对
Reddit上有一个板块专门是迁移学习,探讨怎么把之前建模的知识迁移到另一个任务里。
迁移学习,字面上看就是我们要做的事。所以我们决定重新考虑在已经训练好的Pet-cognizer®上,看看怎么改改再用。
场景1:新的数据集和hhdxtg的数据集是相似的。
我们的Breed-cognizer®所需的数据集,包含了真实世界里的图片(而不是文档的图片或者医学类的扫描),这一点和我们第一次训练用的ImageNet很像。所以是可以再用之前CNN的过滤器的。我们不用再学一次了。
对于Breed-cognizer®来说,我们仅仅把网络最后一层换了。因为我们现在要知道的,不再是这张图片是什么小动物,而是喜悦的灯泡是什么品种。
因为最后一层权重是hhdxtg训练的时候随机设的,所以要训练最后一层并且调参的话,可能会改变上面几层的过滤器,所以我们就把除最后一层以外的所有层的权重都固定住,只优化最后一层。
△ 只训练最后一层的结果
精准微调
但是我们从训练的情况了解到,最后一层目前的参数不适合当前的任务。
比如说,模型里肯定有一些权重是倾向于更高效区分出猫和金鱼的。但是这个权重对推送喜悦的灯泡照片没什么用。为了进一步优化我们的网络,我们还解锁倒数后几层,再重新微调。
那要解锁几层呢?这要看情况,我们一层一层试过去,直到发现再无法优化结果为止。
但因为这些被解锁层都对最后结果有影响,所以我们只能慢一点点地训练,希望尽可能做到保留有用的权重,而把无关的去掉。
训练的进度会影响到我们每一次梯度下降迭代的调参程度。这样精准地微调之后,推送识别器的准确率可以达到90%(在无法增加数据样本的情况下)。
场景2:新的数据集不再和hhdxtg的数据集一样
我们视觉识别模型的效果很好,越来越多的人听说到我们的模型表现后,开始联系我们,开出各种项目需求。其中一个还是卫星图像识别,另外一个是医学初创企业。
######△ 卫星图像
这两个项目需求的数据集都和我们曾经训练宠物识别器不一样。特别是医学上的CT影像。
△ 肺部的CT扫描
这种情况,还是用预训练过的权重更好,但是需要解锁所有网络层。然后我们在用新数据集,以正常的学习率训练。另外,斯坦福CS231n李飞飞主讲的王牌课程也论述了这个问题。
迁移学系几乎是所有视觉识别研究的主场。除非你有个庞大的数据集,否则很少会一上来从0开始训练。这篇入门文章所提到的学习资源可能会给你建立一定的感觉,迁移学习大概是怎么一回事,以及它的工作原理。
原文链接:https://blog.slavv.com/a-gentle-intro-to-transfer-learning-2c0b674375a0
最后给大家个List~~汇总下前面提到的学习资源(gsdqc)و✧
a.深度学习概况:fast.ai
b.随机梯度下降算法概述:http://ruder.io/optimizing-gradient-descent/
c.更多预训练的神经网络
Pretrained Models on Keras:https://keras.io/applications/
TorchVision for PyTorch:http://pytorch.org/docs/master/torchvision/models.html
d.供参考的训练Breed-cognizer®的数据集:https://www.kaggle.com/c/dog-breed-identification/data
e.斯坦福CS231n李飞飞主讲的王牌课程
生肉:http://cs231n.github.io/transfer-learning/
熟肉:http://study.163.com/course/introduction/1003223001.htm
— 完 —
诚挚招聘
量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。
量子位 QbitAI · 头条号签约作者
վ'ᴗ' ի 追踪AI技术和产品新动态