进阶深度学习?这里有9个给程序员的建议

俗话说得好,人往高处走。

在当前人工智能火得一塌糊涂的时候,很多程序员的心思也开始活络起来了。

“要不要转行做人工智能?”

想必是很多程序员心中都有过的念头。

到底该怎么转呢?很多人查了资料之后,一脸懵逼:一边要熟练掌握线性代数、矩阵计算,一边要搞概率论,还要去研究各种库与框架等等。

实在是不知道该从何开始,就拖延了下去,然后很是焦虑。

现在,你不用焦虑了。

国外一个开发者分享了自己的学习过程,并结合自己的经历,给出了9个建议。

这名开发者名叫Alexey Gaziev,是一家社交媒体管理创业公司的CTO,原来是一名Ruby开发者,后来自己学习深度学习。

在开始之前,我们先跟着Alexey澄清一下相关的概念:机器学习是实现人工智能的一组工具,深度学习是机器学习的一个特定子集。

好了,下面正式开始。

1、不要焦虑

可能你不太喜欢数学。就我个人而言,自从八年前毕业后,在开始学习深度学习之前,都没有再碰过数学教科书了。

但在你想要转行做人工智能之前,用谷歌进行一些简单的搜索并与周围比较喜欢数学的人交谈后,你会形成这样一个认知:

你需要积累大量的数学知识,然后才能尝试用神经网络解决现实世界中的问题。

两年前我得到的印象是这样的:
● 熟练掌握线性代数、矩阵运算等;
● 掌握概率论,让托马斯·贝叶斯牧师成为你的朋友;
● 从线性回归开始,研究所有经典的机器学习概念;
● 了解如何在Python、C、C++或Java中实现这些算法;
● 了解如何制作数据集、提取特征、微调参数,并养成一种直觉,能够明白哪种算法适合手头的任务;
● 熟悉深度学习框架/库;在我开始学的时候,是Theano和Torch,现在可能是PyTorch、TensorFlow和Keras 。

一些专家认为,只有在掌握了这些技能之后,你才能去解决一些实际问题,比如区分猫和狗的图片。

如果你跟我一样,上面的清单足够让你心里打起退堂鼓,然后不停地拖延。

虽然从技术上来说,列表中的所有内容都是正确的,但这些并不是入门级的要求。

只要你会编程,你就可以开始训练模型了。

2、还是代码

看看下面这个代码:

a bunch of Python imports like:
from fastai.imports import *
data = ImageClassifierData.from_paths("./dogscats", tfms=tfms_from_model(resnet34, 224))
learn = ConvLearner.pretrained(resnet34, data, precompute=True)
learn.fit(0.01, 3)
Wait 17 seconds or so...

你能够从中看到什么?
● 这用的是Python。
● 使用了fastai深度学习库。
● 不包括导入信息的话,只有三行。
● resnet 34看上去似乎很重要,看不懂?去谷歌搜一下,就能找到答案。

这是fast.ai课程中一个非常神奇的案例。这份课程是由Jeremy Howard制作的。

他提倡的理念是:从一些抽象概念开始,然后经过一些实际的操作之后,再进行深入的学习。

上面的代码,调整了一个预先在ImageNet上训练好的图像分类模型,使用到的数据集大约有1500万张图片。

这样它就可以解决刚才提到的区分狗和猫的任务了。

只要经过3次训练,它就能达到98%的准确率。在装有GPU的电脑上训练,只需要17秒。

当然,这三行代码背后隐藏着多年的研究、数十篇学术论文和数千工时的反复试验。

但这是你现在可以直接使用的代码。一旦你掌握了它的要点,用它去区分其他图像,与区分猫和狗没有什么不同。

3、找个小伙伴

就算是一个勤奋的人,有时候也会拖延。当我准备开始学习机器学习,特别是深度学习的时候,我正沉迷于《风暴英雄》。

为了让自己能够在通往新知识的漫长道路上迈出第一步,我和朋友达成了一个协议。

因为他也想着进入人工智能行业,所以我们决定一起停止拖延,参加相同的课程,并相互监督学习进程。现在,我们经常一起参加各种活动。

如果你在身边找不到一起学习的人,你可以在线上找,线上有很多地方能帮你找到志同道合的初学者。

4、避免认知过载

众所周知,学习比较难的东西非常容易让人产生挫败感。作为人类,我们倾向于逃避挫败感。

同时,学习太容易的东西也不会让人满意,很快就会让人失去任何动力。

这里的诀窍是,能消化多少,就吃多少。

刚开始的时候,我选了一个很难的深度学习课程。但没有先打好基础。

当对课程中介绍的一些概念很迷糊的时候,我开始惊慌失措了。

去网上找任何能找到的东西去学习,比如各种文章、书籍和其他的课程。

这让我不能专注于一门课程,学习我应该学习的基础材料。

事后看来,我应该坚持学习一门课程,不应该试图去并行学习。毕竟,人类不擅长同时处理多任务。

如果现在开始学习,我会先看看Howard的fast.ai,还有吴恩达的最新课程。

后者更侧重于理论,前者侧重于快速实现,这是最好的入门方式。

记住调整自己的节奏,避免同时处理多个任务,并小步快跑。

5、为自己设定目标

不要想着一口吃个大胖子。而是应该选择那些能够你更有满足感的领域。

以下是一些关于初始项目的建议:
● 如果你对视觉艺术充满热情,可以深入研究计算机视觉。用神经网络对图像中的物体进行分类,检测照片中人的情感或年龄,迁移一种艺术风格,或者是生成原创艺术品。
● 如果你对声音更感兴趣,你可以用神经网络创作音乐,对音乐流派进行分类,并像 Spotify 一样推荐新的音乐。 或者你可以探索语音风格的转换,用别人的声音说话。
● 如果你喜欢电子游戏,你绝对应该研究强化学习。你可以训练游戏AI,让它帮你打游戏。而且,你可以尽情玩游戏,没有人会说你,因为你是在搞研究。
● 如果你对用户体验和客户支持感兴趣,可以研究自然语言处理和聊天机器人。你可以在一定程度上与客户互动:从信息中推断意图,为常见的问题提供即时答案。
在尝试研究了计算机视觉之后,我和我的朋友将注意力转移到了自动语音识别( ASR )和自然语言处理上。

一方面,谷歌等巨头公司大力发展自动驾驶,计算机视觉可以说是资金非常充足的研究领域,深度学习在这个领域地位也很稳固。

在图像分类方面,神经网络预测的准确率从2010年的75%以下,增长到2018年的98 %以上。

另一方面,与语言相关的挑战,尤其是与书面语言相关的挑战,直到最近才开始从神经网络中获益。

目前最热门的领域是机器翻译(MT)。每个人都可能注意到,谷歌翻译的质量在过去几年里有了显著提高。自2015年以来,深度学习在这方面发挥了重要作用。

有一个事实,能够帮助你了解深度学习能够以多快的速度改变几十年没有变化的研究领域:

2015年,神经网络首次出现在机器翻译竞赛中。2016年,90%的参赛选手都是基于神经网络的。

你也可以从相关的学术论文中提取出大量的知识,并应用到现实世界的任务中,尤其是你的研究与文本有关系的时候。

6、参加竞赛

2010年,Kaggle,现在世界上最大的数据科学家和机器学习者社区,将黑客马拉松的精神带入到了学术领域。

从那时起,通过竞赛的方式解决机器学习的任务已经成为一种标准化的实践。

从微软到欧洲核子研究中心(CERN),公司和机构都非常乐意提供奖品,组织相关的挑战与竞赛,以换取获奖作品背后技术的授权。

机器学习竞赛是一个非常好的方式,不仅能够帮助你评估技能、在某一领域寻找“基准”的感觉、从更高级的竞争对手那里获得灵感,还能帮你找到合作伙伴、怒刷个人存在感等等。

把参加一个竞赛当做你进入人工智能行业的“成年礼”吧。对我和我的朋友来说,这发生在2017年。

因为我们想了解亚马逊,而且这也是我们进行多级图像分类的机会,再加上我们也很关心环境。

两个多月来,我们每个周末都在解决一个问题:从卫星图像中检测森林砍伐状况并区分出原因。

还有一个迹象,展示了与深度学习相关的一切有了快速进展:一年前,我们花了大量时间和精力琢磨如何在谷歌云平台以更低的成本进行实验。

现在,谷歌提供免费的GPU,支持Jupyter笔记本电脑环境,并且提供很多服务帮你训练模型。

这次竞赛,我们没有获奖,只是进入了前15 %,犯下了每个初学者都会犯的错误。但经验是无价的:我们获得了信心,转身投入到了下一场竞赛中,这次在自然语言处理领域。

这是一个俄罗斯大型银行举办的开发问答系统的挑战,竞争者们要使用一个独特的俄语数据集。

任务是训练系统根据一段文字回答问题。模型在Docker容器中提交,RAM限制在8GB内,在给定自然语言的问题时,应该能够突出文本段落中的相关部分。

在这场竞赛中,我们需要提交的不用是一个已经训练好的模型,而是一个解决方案,然后必须在不到2小时的机器时间内进行全面训练,并对测试问题给出答案。为了确保公平竞争,测试数据集只公开了一部分。

我们的解决方案排在了第二,但我们太关注解决任务,忘了阅读规则。他们要求禁止团队合作,并且只接受个人项目。最后,我们之后只得了一个安慰奖。

现在,我告诉每个向我寻求建议的人,参加竞赛要对抗冲动,直面问题,花些时间仔细阅读规则。

我对深度学习的兴趣主要是面向实际应用的,也就是想出可以应用到业务需求的解决方案。我注意到了一个排行榜上很有趣的现象:

顶级解决方案通常是学术性的,商业部署很难,而稍低一点的解决方案通常是最有商业前途的应用。

7、跟上发展节奏

深度学习的发展速度非常快,就这篇文章来说,尽管只是介绍性的,非学术的,在某些方面都有点过时了。

跟上发展节奏最好方法,是成为一个充满同行的大型在线论坛中的一员。

如果你懂俄语,一定要加入Open Data Science社区:一个拥有超过12000个用户和超过140个公共频道的公共Slack服务。

无论是通过Reddit的r / machine learning还是Meetup.com,总有一种方法可以帮你找到相关的团体。

在Twitter上关注一些大牛,订阅一些电子邮件, 对于跟上发展节奏来说也很重要。当然,你也可以把时间投入到世界各地的各种线下训练营中。

一旦你心里有了底气,试着参加一个关于人工智能、机器学习和深度学习的重要会议:今年,我有幸参加了ICLR。

其他值得注意的国际会议有CVPR和NIPS。此外,还有一点要注意的是,在人工智能领域,一定要适应首字母缩写的词汇。

8、利用自己的编程技巧

有一个显而易见的事实:Python完全赢得了人工智能和数据科学社区的支持。

对我来说,作为一名Ruby开发人员,切换到Python不难。仅仅需要几周的练习就可以掌握了。

不过,我还是花了一些时间学习了免费的中级Python编程课程,这绝对没有坏处。

对于一名软件开发来说,编程语言“障碍”不是问题。那些不会编程的人,想要进入深度学习更难。所以你已经领先了。

但是,你不要指望这里有一些优秀的OOP代码和直观的API。大多数公共代码示例也不会经过严肃的代码审查。

即使在同一个库中,相同的功能也可能会有不同的API。

另外,不要对文档抱有很大的希望。在将学术论文翻译成代码的时候,如果遇到了异常细节,你必须得去看源代码,这并不容易。而且,测试覆盖率也经常是缺乏的。

但这也是一个发挥你编程优势的机会,你可以用公开发行的Jupyter笔记本制作一些比较好的可以重复使用的库。

9、补上数学知识

我把最重要的留到了最后。最终,你还是得填补你在数学上的空白,尤其是你想跟上技术发展节奏的时候。

幸运的是,机器学习有自己的“圣经”,是一本长达800页的教科书,由伊恩·古德费勒、优素福·本吉奥和艾伦·库尔维尔编写,被称为“Deep Learning Book”,在网上可以免费获取。

第一部分中,主要介绍线性代数、概率论和信息论、数值计算、机器学习基础等等。你看完之后,当你再跟进当前的研究时,它会让你不再感到害怕。但这一部分有130页,读起来很枯燥,但你不会后悔的。

原文链接:https://evilmartians.com/chronicles/learning-how-to-learn-deep-learning
转自:七月在线

最新文章