我是如何在1天内构建一个深度学习模型并进击Kaggle比赛的

我是如何在1天内构建一个深度学习模型并进击Kaggle比赛的_第1张图片

Fast.ai是Jeremy Howard为结果导向型人群开设的深度学习在线课程。

我读过很多关于机器学习的书,也参加过不少这方面的课程,但我认为Fast.ai是迄今为止最实用的深度学习入门课程。在本文中,我将与大家分享我在学完前两课后的一些经验。

▌从数学开始学习人工智能是个错误的选择

22年前,我在斯坦福大学学习Bernie Widrow的神经网络课程,这位数字滤波器之父谆谆善诱,向我们讲解随机梯度下降的原理。

学了一半的理论课程,我还是不能完成神经网络的实现,只学会了如何用MatLab构建神经网络。后来,当我需要编写代码来训练我的网络权重时,我才终于理解了什么是随机梯度下降。

不过,这种窘境到现在也并未发生多大变化。大多数机器学习实战工程师都有着学术背景;当专业程序员问他们 “我该如何开始学习人工智能?”,多数工程师会向他们推荐一些偏重数学的学习资料,比如《深度学习》这本书(这种情况时有发生)。

对研究人员而言,Ian Goodfellow的这本书是一本很好的参考书,但对我们中的大多数人而言它并不是一本好的入门书籍。这本书关于梯度下降的章节使我回想起读研究生时遇到的窘境:

我是如何在1天内构建一个深度学习模型并进击Kaggle比赛的_第2张图片

上图为Goodfellow等人所著的《深度学习》中关于梯度下降的一页。这本书有很好的研究参考价值,但是对专业程序员而言,并不是一本实用的入门书。我在圣诞节期间读完了本书三分之二的内容,但我还是不会构建神经网络。

对于研究人员或者人工智能前沿的推进而言,理解理论是至关重要的一步。但是,对于大多数人工智能商业应用而言,数学是个很大的干扰。

为什么?因为企业面临着一些更为严峻的挑战,例如选择正确的问题,组织数据,部署解决方案等。面对市场风险和执行风险,专业程序员不得不使用成熟的技术来开发应用——因此,懂得如何实现某一解决方案要比理解该方案的工作原理更为重要

光读不练假把式,必须实践。

学习新技能的唯一方法就是:使用该技能练习构建。深度学习也一样, JeremyHoward的Fast.ai课程注重实践,是学习人工智能最快的方法。

Fast.ai让你通过实践学习深度学习

课程的联合创始人Jeremy Howard和Rachel Thomas实现了他们的承诺——“让所有人都能运用机器学习的力量”。本文不对课程进行描述,我会推荐你阅读学习者对该课程的评论并分享我早期的经验。

我为什么决定参加这个课程

在参加该课程之前,我已具备良好的深度学习理论基础,并掌握了该技术各种应用的实践知识。我参加这个课程是为了获得更多实践经验。

构建简单的解决方案能帮我更加有效地筹划项目、雇用项目人员和进行工程学权衡——这是任何领导者都须具备的技能。

但是最关键的是,我想通过构建简单的深度学习解决方案来实现理论和实践的相结合。

▌如何建立一个算法来检测入侵物种

在一天内能达到什么样的水平?

学完前两课后,我决定参加Kaggle比赛。

我的目标是:

在一天结束前进入排名的前50%。

自己动手编写每行代码,不用剪切和粘贴。

了解所有引用的库和API。

我选择了“入侵物种监测”竞赛(Invasive Species Monitoring playground competition)。 这是一个比较简单的分类问题,对初学者而言算是一个很好的起点。

还有,它听起来就很有趣。

我是如何在1天内构建一个深度学习模型并进击Kaggle比赛的_第3张图片

上图为 “入侵物种监测Kaggle竞赛”中入侵性绣球花(绣球花:一种植物的分类)。

比赛的内容是开发出识别森林和叶子图像中是否包含入侵性性绣球花的算法。

早上七点,我沏了一壶咖啡后开始工作,在亚马逊AWS上对GPU进行了加速。晚上9点,我的眼睛开始酸痛,我的大脑跟炸了一样。

我决定将我的结果提交给Kaggle……

▌我的代码

这是我在github上的完整笔记,里面记录了我工作计划的7个步骤


不用对我的代码感到惊讶——我使用的方法与课堂上学习的方法类似。任何一个具有1年工作经验(或以上)的程序员应该都能写出这样的代码。

我90%的时间都用于学习库、组织数据和评估结果——都是一些与深度学习无关的简单流程。

▌验证结果

我使用90%的图像训练我的算法,并用剩余的10%来验证结果。

预测精度

我的预测精度达到了91%。这是混淆矩阵:

我是如何在1天内构建一个深度学习模型并进击Kaggle比赛的_第4张图片

混淆矩阵显示了我的算法检测验证集的有效性。 最需要改进的的地方是漏报问题——在12个实例中算法错误地将入侵物种识别为非入侵物种。 您可以在下方查看该结果。

91%是什么概念? 就在3年前,最先进的计算机视觉识别技术也只能达到80%!我在第一次尝试中就超越了它。

包含花的图像被正确识别

我检查了被算法正确识别的图像。大蓝色绣球花似乎是关键特征。

我是如何在1天内构建一个深度学习模型并进击Kaggle比赛的_第5张图片

某些被错误识别的图像存在明显问题

这个算法错误地识别了18个图像。 这是算法需要改进的地方。

我是如何在1天内构建一个深度学习模型并进击Kaggle比赛的_第6张图片

漏报的图像似乎是未被正确识别的小花。 我认为通过裁剪照片生成更多标记样本,可以改善算法的结果。

▌胜利! 我进入了前50%!

在我的第一次尝试中,我在52位参赛者中排名第21,进入前50%。

目标达成!

我是如何在1天内构建一个深度学习模型并进击Kaggle比赛的_第7张图片

我在一天内进入了排名的前50%。

没有最好只有更好。

Fast.ai是否适合你?

如果你的目标是加入Open.ai团队或赢得ImageNet竞赛,那么Fast.ai课程并不十分适合你,因为你需要学习偏导函数。

但对于其他人,比如想要获得实用的基础知识介绍的团队领导,希望学习深度学习工程师入门知识的专业程序员,想知道如何开发AI spec的产品经理,或者任何想对一吨乐高进行分类的人员来说,Fast.ai是个很好的开始。

相关链接

GitHub地址

https://github.com/kevindewalt/ai-notebooks/blob/master/invasive_species.ipynb

Fast.ai深度学习课程地址(英文)

http://course.fast.ai/

Invasive Species Monitoring

https://www.kaggle.com/c/invasive-species-monitoring

原文地址

https://medium.com/the-business-of-ai/fast-ai-how-i-built-a-deep-learning-application-to-detect-invasive-species-in-just-1-day-and-for-38e0ced809e9

你可能感兴趣的:(我是如何在1天内构建一个深度学习模型并进击Kaggle比赛的)