Meta learning: How To Learn Deep Learning And Thrive In The Digital World [1 ed.]

446 98 4MB

Chinese Pages 93 [94] Year 2021

Report DMCA / Copyright

DOWNLOAD FILE

Polecaj historie

Meta learning: How To Learn Deep Learning And Thrive In The Digital World [1 ed.]

Citation preview

订阅DeepL Pro以翻译大型文件。 欲了解更多信息,请访问www.DeepL.com/pro。

如何深入学习 学习和茁壮成长 数字世界

目录 绪论 ...................................................................................................................................................2 这本书是为谁写的? .......................................................................................................................5 如何阅读此书 ...................................................................................................................................6 从不会编程到深度学习专家 ...........................................................................................................7 理论与实践.....................................................................................................................................14 理论的问题 ..............................................................................................................................15 为了达到最佳效果,用一杯理论,一杯实践。冲洗和 重复 ..........................................................................................................................................19 实践每次都能获胜 ..................................................................................................................21 编程是关于你要表达的东西 .........................................................................................................23 优秀开发者的秘密.........................................................................................................................25 作为一个开发者,提高的最好方法.............................................................................................28 如何使用你的工具来达到流动的状态.........................................................................................30 将现实作为你的镜子.....................................................................................................................32 做真正的工作(它是复合的)。.................................................................................................35 机器学习的隐藏游戏.....................................................................................................................37 如何构建一个机器学习项目.........................................................................................................38 如何在Kaggle中获胜 ....................................................................................................................43 最适合深度学习的硬件.................................................................................................................48 轻松调试是一种超能力.................................................................................................................51 自己的时间.....................................................................................................................................52 你不能通过学习教科书来学习一个专业.....................................................................................53 关于找工作.....................................................................................................................................55

深度学习的聚会在Twitter上 .......................................................................................................57 分享你的工作.................................................................................................................................61 何时开始分享你的工作.................................................................................................................63 我很害怕分享我的作品!帮助! ......................................................................................................65 在分享你的作品时应关注什么.....................................................................................................67 不要忽略了重要的东西.................................................................................................................68 为重要的事情留出心理空间.........................................................................................................70 要启动后燃机,请找导师.............................................................................................................72 快易通学生的最大遗憾.................................................................................................................74 持久性是一切.................................................................................................................................76 改变是关于不做什么.....................................................................................................................78 学习也许就够了.............................................................................................................................79 关于指导的更多观点.....................................................................................................................80 利用社区的力量,更快学习.........................................................................................................83 激发活力.........................................................................................................................................85 美好的昔日时光 ......................................................................................................................85 扭转局势...................................................................................................................................86 形成一种习惯 ..........................................................................................................................86 你吃什么和什么时候吃很重要 ..............................................................................................87 对我有用的东西 ......................................................................................................................88 今后的发展方向 ......................................................................................................................89 谢谢你.............................................................................................................................................90

给莉莉和玫瑰

前言

1

简介 我写这本书是因为在我漫长而曲折的深度学习旅程中,我学到了一些我认为对他人有用的 东西。我所分享的许多见解可以使你的进步加快数倍。

在2012年,我不会编程。我有一份公司的工作,提供了稳定的收入来源,但这完全是无聊 的。生活中一定有比把人当成资源更重要的东西。我在某处读到这些叫做MOOCs的东西 ,我决定去看看。

到2018年,我已经做了足够多的深度学习,赢得了Kaggle比赛,[1] ,就在几个月前,我 在参加fast.ai课程时写的一篇博文被KDnuggets发表。[2]

2019年,我收到邀请,去拜访旧金山一家医疗保健创业公司Curai的同事。在大约20名工 程师中,我是他们唯一来自海外的团队成员。

图1.飞往美国拜访我的同事

当我写下这些文字时,我有一份我能想象到的最神奇的工作。作为地球物种项目的一部分 ,我可以与我所遇到的一些最令人惊奇、最有趣的人一起从事非人类交流的解码工作。

2

简介

然而,我认为我有值得与你们分享的东西的原因,与上述成就无关。

多年来,我学到了很多关于学习和有效行动的知识。这种变化--以及导致这种变化的想法-是我想告诉你们的本质。

在我的旅程开始时,我的行动非常缓慢。我学习了几个月,却发现我的深度学习能力没有 什么进展。我无法规划出一条可以把我从原地带到我想去的地方的道路。然后,在我走过 的许多弯路中,我成为了一名网络开发人员,因为我开始相信机器学习对我来说可能遥不 可及。

让我坚持下来的是我对学习的信念。即使我学得不快,我仍然在学习,这很重要。

我开始越来越多地反思什么对我有用,什么没有用。我还设法保持开放的心态,随时准备 接受建议(尽管这可能更多是出于绝望)。通常,我会把我的想法写下来,与他人分享。

图2.fast.ai社区成员的一条推特。谢谢你,Kevin!

这个反省的过程是激励我继续下去的关键。通过它,我开始采用新的想法,并完善我的方 法。

我必须覆盖很多距离,因为我没有大学学位。在我的第一个女儿即将出生时,我才开始学 习编码。这让我有了

简介

3

我先前缺乏的重点,但它也给我的时间带来了一些相当大的限制。

如果我的学习方法没有发生如此巨大的变化,我今天就不会给你们写这些话。

在这本书中,我分享了我一路走来的改变生活的想法。它们将使你在更短的时间内学习得 更快,成就更大。它们可以改变你的生活轨迹,就像它们改变了我的生活轨迹一样。

[1] FGVC5的iMaterialist挑战赛(时尚)是一个多标签、细粒度的计算机视觉问题。竞争非常激烈,但我成功地以较大优 势获得了第一名。你可以在这里阅读我的解决方案。 [2] 如何高效地进行机器学习--本文介绍了如何构建你的机器学习项目,以便在最少的时间内取得最佳效果。

4

简介

这本书 给谁看? 我写这本书是为了那些想学习深度学习但又能得到大量不切实际的建议的人。

对于那些热衷于快速学习和良好学习的人来说。

对于那些根深蒂固的学术心态和重视理解理论高于一切的人来说。我自己就深受这种折磨 。如果你不把实践放在第一位,你就无法学好理论。在这本书中,我提供了一种治疗方法 。

对于那些在12岁时还没有开始编程的人。对于那些不得不教他们的父母如何使用电脑的人 来说,而不是反过来。

对于那些怀疑技术可以改变他们的生活但还没有得到所有答案的胆小的梦想家。

这本书是为谁写的?

5

如何阅读这本《 》? "你不能向前看,你不能把这些点连起来。你只能向后看,才能把它 们连接起来" - 史蒂夫-乔布斯,2005年斯坦福大学毕业典礼讲话

本书各章关系松散,可以按任何顺序阅读。最好的方法可能是按顺序阅读,然后在一段时 间内返回并复习感兴趣的章节。

为了帮助我所描述的思想渗透到你的生活中,请与你的朋友或亲人谈论它们。在推特上发 表你同意或不同意的思想。也许可以写一篇博文,阐述其中一个概念。我不断亲身体验到 反省和与他人分享的过程是多么强大。

改变是渐进的,不会在一夜之间发生。挑选一个你想努力的领域,给它一些时间,然后, 只有在一段时间后,才转移到另一个领域。

最重要的是,对自己要温柔。大多数时候,我觉得我在原地踏步。当你从几天或几周的角 度来看待你的生活时,可能真的很难注意到进步。但是,要想开始获得成倍增长的结果, 你需要开始定期做一些不同的事情。

不需要超人的努力。以不同的方式做一些事情,很快,你将能够回顾并开始连接那些使你 达到最终目的的点。

6

如何阅读此书

从不会编程 到深度学习专家 在你学会做深度学习之前,你必须成为一名开发者。作为一名开发人员,不仅仅是指编程 。在更大的计划中,能够编写代码只是开发人员所能做的一小部分。

如果我重新开始,我将优化这部分旅程的乐趣。我想进入修修补补的心态,并开始觉得在 电脑上乱搞很舒服。要实现这一目标,没有比从事你真正喜欢的工作更好的方法了。

我会放轻松。当谈到学习时,一致性每次都胜过强度。当你刚开始做一件事时,没有比不 使自己太过劳累更好的方法来保持一致性。我仍然会取得快速的进步,因为这一次,我知 道应该关注什么。这就是本章开头要讲的内容。

我的第一站将是完成一个编程MOOCs。他们不会教你很多关于成为一名开发人员的知识 ,但他们确实教你一些关于写代码的东西。我可能会选择edx上的哈佛CS50。而且,由于 我想找点乐子,我可能会选择游戏编程方向。

哈佛CS50有一个很大的优势:除了教你如何编程,它还教你了解计算机和它是如何工作的 !这是很好的!一石二鸟。不过,无论你选择哪种MOOC或编程书,都很难出错。编程已 经教了好几代人了,而且有很多好老师。在这个阶段,你可能会犯的最大错误是做多于一 个初级编程课程。努力学好任何一种特定的编程语言将是一个错误。

从不会编程到深度学习专家

7

如果你没有什么可写的,把所有的时间都投入到学习书法上是没有意义的!如果你把所有 的时间都投入到学习书法上,是没有意义的!同样地,如果你努力建造一张桌子,但把所 有的精力都集中在一条腿上,然后抱怨桌子站不起来,这也是没有意义的!

在这个阶段,我们所需要的是对编程概念的一些熟悉--足以让我们能够进行有意义的在线 搜索。我们需要的编程技能是理解Stack Overflow的价值,文档,以及如何达到这两点。 这可能听起来很滑稽,但这些技能确实是编程生涯的核心。再加上对编程的一些基本知识 的了解,你就有了一个非常坚实的平台可以建立。

我们正在组装的桌子的下一条腿是我们在代码中有效移动的能力。这并不是大多数编程课 程所涉及的内容,但它是一项必须具备的技能。

这可以归结为学会使用一个真正好的代码编辑器。任何主要的代码编辑器都可以。有些人 发誓使用textmate、sublime text、atom、vscode、emacs或vim。你选择哪一个并不 重要。把注意力集中在学习它上,就像你写代码一样,你就会好起来。如果你完全不知道 该选哪一个,就选vscode。不要太担心这个选择--这不是一个你必须永远坚持的选择。我 不知道有哪位开发者在他们的职业生涯中没有尝试过多种编辑器。然而,我也不知道有哪 位值得尊敬的开发者不相信学习使用编辑器是一项重要的技能。

为了进行下一步的工作,我们转到版本控制。代码是在小规模的迭代中编写的,往往由一 个以上的人编写。此外,代码的制作成本很高,我们要确保我们的工作不会丢失,我们可 以探索新的方向而不破坏我们到目前为止所做的工作。如果没有专门的工具,所有这些都 很难实现。幸好,我们有一个

8

从不会编程到深度学习专家

软件解决方案可以满足上述所有需求,甚至是一些需求!

这个工具的名字是git。它是一个小的命令行程序,可以将任何目录变成一个git仓库。在 这一过程中,它赋予目录以超能力,如穿越时空或创造替代时间线的能力

Git有一个在线的对应工具,叫做GitHub。git擅长管理你电脑上的源代码,而GitHub则 适合于代码共享和与他人合作。把你的代码推送到GitHub还能为你提供一个备份。如果 你的电脑发生了什么意外,你的工作将被保存在另一个地方。

Git是软件工程的一个奇迹,但不幸的是,它所暴露的API对人类并不十分友好。值得庆幸 的是,GitHub 创建了自己的命令行工具,即 gh cli。它的学习曲线要比git温和得多。

我们四条腿的桌子的最后一条腿可能是最难构建的。这个挑战完全在于缺乏良好的学习资 源。这一部分涉及到学习如何在编写代码的背景下使用计算机。对于深度学习,这超出了 你的本地设置。你如何启动一个云虚拟机?你如何进入它?如何移动数据?你如何建立你 自己的家庭实验设备?好消息是,你不需要一次就学会所有这些。一个好的起点可能是学 习如何在你选择的操作系统上浏览文件系统。随着你对命令行的使用越来越得心应手,你 可以逐渐为你的武器库添加更多的命令。

在学习如何使用计算机方面,最突出的一个资源是麻省理工学院的《你的CS教育中缺失的 一学期》。

也许有一天,一个单一的课程将涵盖作为一个人的所有基础知识。

从不会编程到深度学习专家

9

开发者。不幸的是,现在我们必须拼凑出我们自己的课程。好消息是,只要对我上面概述 的四个学科中的每个学科有所了解就足够了;没有必要成为其中任何一个学科的专家。

到目前为止,我们所做的一切是为参加fast.ai的 "编码员实用深度学习 "课程做准备。如果 你对编程有初步的了解,并能在电脑上移动,该课程可以带你走。

为什么是fast.ai课程而不是其他课程?没有其他资源可以教给你做机器学习所需的所有知 识。许多好的课程都集中在一组特定的工具或机器学习管道的某些方面,但没有其他完整 的课程包存在[3] 。这是我所知道的唯一一门课程,它将教你如何从头到尾地解决一个机器 学习问题。

事实上,对许多人来说,课程不仅仅是向人们展示如何成为一名优秀的深度学习从业者。 通过参加fast.ai的课程,我学会了如何学习。我也开始分享我的工作,并成为深度学习社 区的积极成员。这些课程不仅教会了我几乎所有关于机器学习的实用知识,而且还告诉我 如何在数字时代茁壮成长。

如果你认真听讲,并成为fast.ai论坛或fast.ai讨论区的活跃成员,你会没事的。尽管如此 ,这些课程提出了一种对许多人来说可能是新的学习方式。虽然课程解释了这种方法,但 从我的角度来看,对其进行书面总结,在一个地方解释整个进程,可能仍然是有益的。这 就是我们在本章余下部分要研究的内容。

这一切都从观看讲座开始。下一步是打开讲座的笔记本,弄清楚所有的片段是如何组合在 一起的。我们的想法是,将每个

10

从不会编程到深度学习专家

行代码并查看输出。如果你遇到了一个你以前没有遇到过的函数,这是一个阅读其文档的 好时机。如果你传入不同的参数或稍微调整一下超参数,性能会有什么不同?

一旦你理解了大局,现在是时候重现结果了。要做到这一点,请打开一个新的笔记本,尝 试重新创建讲座所演示的训练管道。这是一个开放性的练习--如果你需要回看讲座的笔记 本也没关系,但你越少回看越好。另一方面,在阅读文档或在线搜索方面没有任何限制。 这两种活动都是被鼓励的,它们非常类似于完全由你自己完成的编程的感觉。

一旦一切准备就绪,并且你已经获得了与讲座中类似的结果,现在是时候进一步了。这一 次,我们搜索一个类似的数据集,测试一下我们刚刚学到的技术。你的想象力是这里唯一 的限制。你可以在网上寻找一个数据集,或者你可以自己组装一个��[4]另外,fast.ai图 书馆提供了许多用于研究的数据集的访问。你可以用一个命令将它们下载到你的机器上。

这个想法是为了系统地提高你的技能。你开始在讲座笔记本的控制下,学习讲座中所讨论 的技术的来龙去脉。每做一次新的练习,就会有更多的训练轮脱落,以至于你从头到尾都 是自己在做。

这种学习方法就像一种魅力。这里没有硬性规定,我们非常欢迎你边做边修改。富有创造 性地想出对你来说具有挑战性和趣味性的练习,这本身就是一项非常有价值的技能;掌握 它将使你的学习更上一层楼。其结果总是相同的:达到一个你可以

从不会编程到深度学习专家

11

舒适地将你在讲座中学到的技术应用于你以前没有见过的问题。

虽然实践是提高你解决现实生活中机器学习问题能力的唯一途径,但走向这种学习方式并 不需要你彻底改变你的生活。每天几分钟,连续几天,你就可以开始了。每连续学习一天 ,你就会产生动力。很快你就会开始注意到结果,能够做你不久前还认为遥不可及的事情 ,这让你感到非常兴奋。很快,你就会发现自己在探索这个或那个技术的过程中忘记了时 间。

从更广泛的角度来看,翻阅讲座材料是一个起点。它给了我们一个平台,我们可以在此基 础上进行建设。甚至在你完成课程之前,开始想出并完成你自己的小型项目也是一个好主 意。如果你的灵感不足,你可以看看这个惊人的论坛主题,其中有fast.ai的学生在某个课 程中所做的项目。在那里,你会发现各种各样的想法:博客文章、howtos、论坛帖子、 GitHub存储库、解释视频和Kaggle竞赛。

我上面描述的学习方式对我来说是完全陌生的。然而,在体验了它的作用后,我从未停止 过成为fast.ai的学生。任何其他方法都感觉是在浪费时间。

它并不总是这样。最初,我认为fast.ai的学习方式不可能奏效。讲座中提出的练习对我来 说不像是学习。花这么多时间去做,我怎么可能取得任何进展?对我来说,学习是这样一 个过程:你坐下来看一两个小时的书,然后从另一端出来,能够讨论一些高度复杂和抽象 的东西。

我非常幸运,因为在我发现fast.ai的时候,我已经走到了尽头。没有任何东西是有效的, 所以我准备尝试全新的东西。

12

从不会编程到深度学习专家

偶然发现fast.ai是我一生中的冒险。

[3] 在我深度学习之旅的最初阶段,只有fast.ai的讲座和论坛存在。我与他们交谈,因为这是我学习的方式。但在2020年, 一个新的竞争者到来了--备受期待的《用Fastai和PyTorch为编码者进行深度学习》:杰里米-霍华德(Jeremy Howard) 和西尔万-古格(Sylvain Gugger)的《没有博士学位的人工智能应用》。这是一本了不起的书,它是我放在书桌上的一个 珍贵的伴侣。我的建议是像学习讲座一样勤奋地学习它。 [4] 创建一个数据集是一个很好的学习方式!弄清楚要包括哪些数据以及如何分配标签,让你思考训练模型的许多重要注意 事项。在你的学习旅程中的某个时间点上包括数据集的创建是个好主意。

从不会编程到深度学习专家

13

理论与 实践 在我生活的大部分时间里,我并没有意识到机器学习的存在。然后,有一天,我在 Coursera上偶然发现了Andrew Ng的机器学习课程,我的生活从此改变。

我清楚地记得,当我看着几个完全连接的图层汇聚成一个解决方案时,我感到非常敬畏。 我在Octave中从头开始实现它们,而且操作是完全矢量化的。这是我所见过的计算机所做 的最神奇的事情。它的袖子里还有什么技巧?我必须要弄清楚。

我不知道有谁是开发者,就开始在网上搜索。很快,出现了一个课程。根据互联网的说法 ,我所要做的就是学习一些微积分、一点线性代数和一些概率论,我就可以完成了。很简 单。

微积分似乎是一个很好的起点。在这一领域,有很多新的和令人兴奋的MOOCs正在推出 。此外,世界上一些最好的大学的讲座只需在YouTube上点击即可。

但是,看啊!为了理解一些更高级的微积分证明,你真的必须弄清楚实数的构造。没有这个 ,一些高级数学就会变得手忙脚乱。所以,我需要冒险进入实数分析领域一阵子。一点问 题都没有。沃尔特-鲁丁的 "数学分析原理 "和另一套讲义救了我的命!

但这是什么?哦,天哪。现在看来,我必须学习集合理论才能完全理解发生了什么。

这一部分很有趣。我认识了坎特先生,并亲身观察了他是如何做到的。

14

理论与实践

科学已经完成。事实证明,即使是像集合理论这样抽象的东西,也是经过了几千年的演变! 如果不了解人类为达到这一目标所走过的道路,就真的很难欣赏现代的成果。

通过这一切,我的主要目标是学习深度学习,我相信我走在正确的道路上。我可以在睡梦 中推导出通过CNN中所有层的损失反向传播的方程式。我将在NumPy[5] (我不知道有 PyTorch或TensorFlow的存在)中实现科学论文,这感觉就像取得了进步。

然后,有一天,我在Kaggle上注册了。我环顾四周,并通过泰坦尼克号比赛,但除此之外 ,我迷失得难以相信。我所处理过的都是玩具数据集。你如何将这些格式奇特、经常是肮 脏的数据输入你的模型?我看了看论坛,几乎不能理解那里的人说的语言。

我为了解机器学习倾注了大量的心血和精力。为什么我那么无用?

理论的问题 "我没有失败。我只是找到了一万种不起作用的方法。" - 托马斯-A-爱迪生的灯泡发明之路

绝大多数情况下,理论跟随实践。如果你看一下发明的历史,你会发现,很少有一个新的 发现是由某人扩展一个理论并利用它来创造新的东西。

理论第一的方法中最迷人的例子之一是周期性的

理论与实践

15

表。1869年,俄罗斯化学家德米特里-门捷列夫有了一个顿悟。他决定使用原子质量作为 组织原则,而不是根据元素的特性将其组织成一个系统,这是他的前辈们所尝试的。

这种方法就像一种魅力。利用这些新的理论基础,他能够预测仍有待发现的元素的结构和 性质。例如,1871年他预测了镓,而镓直到1875年才被发现。

这个理论先行的例子之所以如此著名,正是因为它是如此的独特在绝大多数情况下,是伟 大的工匠通过实验得到了一些东西;后来才有了理论。有时,发现和理论相差很多年。

一个很好的例子是批量规范化[6] ,由Sergey Ioffe和Christian Szegedy联合开发。这两位 作者都是在谷歌大脑工作的备受赞誉的研究人员。Szegedy也是inception架构的发明者[7] ,以及对抗性例子的发现者[8] ,这两个非常重要的贡献推动了整个深度学习领域的发展。

至于批量归一化,它本身就是一项惊人的技术。它将训练一个最先进的图像分类器所需的 步骤减少了14倍,这是一个令人难以置信的结果!它不仅使训练速度大大加快,而且使训 练神经网络更加容易!它不仅使训练速度大大加快,而且还使训练神经网络变得更加容易 。使用这种新颖的技术,我们不再需要像以前那样对初始化小心翼翼。

作者是如何解释这一革命性的发现的?在论文中,性能的提高被归因于缓解了协变量的转 移。

16

理论与实践

协变量转移是指训练期间输入分布的变化。考虑一下这个问题:如果我们调整模型第一层 的权重,进入第二层的输入将不再具有相同的平均值和标准差。随着新的输入流向我们的 模型,这种影响会被放大。

输入的这种可变性减慢了我们网络的训练速度。直观地说,不仅模型要学习在我们的数据 上做一些有用的事情,而且每一层都要进行大量的计算,以继续学习如何适应其输入的变 化分布。如果我们能解决输入变化的问题,我们应该能更快更好地训练。这是一个绝妙的 见解和研究方向!但是,事实证明,直到 "批量归一化 "论文发表几年后,它之所以如此有 效的原因才被更全面地正式确定。结果发现,比起该方法的发明者最初怀疑的问题,还有 更多的问题!

关键是这一点:Ioffe和Szegedy并不是通过研究理论基础而得出这一发现的。他们是在他 们对深度学习的理解和丰富的科学知识的指导下完成的。然而,即使在这个高度算法化、 数学化的领域,理论也是跟随实践的。

而这还不是实践起主导作用的最极端例子。你可能听说过杰里米-霍华德和塞巴斯蒂安-鲁 德撰写的ULMFIT论文[9] 。这是另一篇开创性的论文,改变了整个领域的发展轨迹。鉴别 性学习率、渐进式解冻、跨越许多复杂层的转移学习!这些理论在哪里?在这篇论文发表 之前,所有这些的理论都在哪里?现在的理论又在哪里呢?所有这些技术都深深扎根于对 一个架构将如何执行的良好直觉,以及对多个领域的应用的良好理解。这些都是通过实践 和实验得出的,因此,NLP的一个新的、令人兴奋的时代诞生了。

理论与实践

17

如果你还没有完全相信实践的价值,这里有另外几个例子供你参考。

伊恩-古德费洛是该领域的巨人,也是生成式对抗网络的发明人。2014年的一个晚上,他 出去喝酒,庆祝他朋友的毕业。喝着啤酒,他的几个朋友提出了一个他们不知道如何解决 的问题:我们如何才能让计算机生成图像?古德费罗提出了一个新颖的解决方案,尽管他 的朋友们对此表示怀疑。他接下来做了什么?他回到家,启动了他的电脑,并开始工作。 当早晨来临的时候,他已经准备好了他的新架构的实现。他对它进行了测试,它成功了。 在另一个无与伦比的实验能力的例子中,一个全新的研究领域诞生了。

[10]

这样的例子可以一直持续下去。为了结束这次调查,让我们考虑一下杰弗里-辛顿,现代深 度学习无可争议的父亲之一。在八十年代和整个九十年代,没有人真正知道如何训练更深 的架构。我们是否需要求助于使用玻尔兹曼机逐层训练神经网络��[11]无论如何,神经网 络能学到什么? [12]

你如何理解相互竞争的理论,如神经表征的局部主义和分布式理论?[13]你如何在这块新

的土地上航行,根据许多有坚实理论基础的学者的说法,这块土地是不值得关注的?阅读 辛顿的论文,可以感受到他的方法是多么的经验主义。无论灵感来自于物理学[14] ,还是优 化理论[15] ,或者生物学[16] ,拓展我们所知的边界的机制总是相同的,那就是实验。

这次讨论的目的不是为了贬低理论。当然,理论是有用的,甚至对在机器学习中做任何有 价值的事情都至关重要。但是,即使你的目标是达到深度学习研究的最高层次,你首先需 要成为一个伟大的实践者

18

理论与实践

如果理论并不像许多人所描绘的那样是万能的,那么你如何在学习和发现中好好利用它? 我在与理论的关系上哪里出了问题,导致我无法取得进展?

为了达到最佳效果,用一杯理论,一杯实践。冲洗和重复 我的主要缺点是,我不知道我必须学习什么理论!我在学习,但我所学的与我想去的地方不 一致。

另一个更黑暗的影响,在这里起作用。我们可能正在阅读论文,我们可能感觉到我们的理 解在增长。但是,如果没有训练实际的模型,没有将我们所学的东西应用于现实生活中的 问题的经验,我们就错过了一个非常重要的反馈回路。这种反馈是至关重要的,因为如果 没有它,我们就没有办法知道我们最近获得的理解是否确实正确。我们没有很好的方法来 识别盲点。

作为一个学习者,我应该如何进行?假设我想学习图像分类。我应该从下载一个相对较小 的数据集开始,但最好是有一些我可以参考的基准。快手公司的Imagenette [17]

将是一个很好的候选者,因为它带有一个排行榜,并参考了工作的实现。然后我可以实

现一个基本的模型并评估结果。在Imagenette的案例中,类是平衡的,数据是干净的标签 ,所以也许我会得出结论,我改善结果的最佳选择是在我的架构上下功夫。也许我会选择 在我的模型中加入身份路径。[18]或者我已经在使用resnet架构,但想更进一步,有可能对 输入干进行改进。[19] 。或者我觉得我必须更好地了解如何优化训练过程本身。[20] 。我将 遵循这些路径中的任何一条,并在此过程中学习相关的理论。

理论与实践

19

一旦我开始得到像样的结果并感到舒适,也许就该换个环境了。也许我会遇到一个能激发 我兴趣的Kaggle计算机视觉竞赛。机会是,这个环境会产生一系列不同的挑战。也许班级 会不平衡,我需要学习更多关于解决这个问题的知识。[21]或者标签会很嘈杂。[22]

在这整个过程中,我将进行实验,这本身就是一种非常好的技能增长。我将通过模型的直 接反馈来指导我的学习,我可以把我所学到的一切付诸测试。我不一定需要完全了解我可 以应用什么改进来解决任何特定的问题,因为我可以在当下研究这个问题。fast.ai课程教 你如何处理这个问题,如果你花一些时间在fast.ai或Kaggle论坛上,你会发现人们所遇到 的主要痛点。具体细节可能会因数据集的不同而改变,但要解决的主要问题类别却不会改 变。

通过这一切,我也将建立一套不错的成果,我可以在任何潜在的专业合作邀请中谈论。

如果我采取这种方法,而不是在数学的各个领域中随意走一走,我的进展会快多少?

20

理论与实践

实践胜于一切 时间 "只是有一种适用于大多数领域的学习方法,一旦你发现在一个 领域获得成功,基本上说'复制粘贴'就不难了。" - David Heinemeier Hansson, 采访一个真实世界的超级学习者

边走边学的概念并不是深度学习所独有的。许多来自不同领域的高成就者会证明它的威力 。但是,由于我相信通过学习理论而获得的理解是最重要的,所以这个概念对我没有吸引 力。因此,我的进展比我本来可以做到的要慢得多。

我现在知道我错在哪里了。你不可能在一个领域达到熟练程度,无论它看起来多么理论化 ,不把实践作为你的亮点。

[5] 10个神经网络 - 基于Geoffrey Hinton的论文,在Matlab和numpy中实现10个神经网络。 [6] 批量归一化:通过减少内部协变量偏移来加速深度网络训练 [7] 更深入地了解旋转 [8] 神经网络耐人寻味的特性 [9] 用于文本分类的通用语言模型的微调 [10] GANfather:给予机器想象力天赋的人 [11] 玻尔兹曼机 [12] 图式和顺序思维过程的平行分布式模型。 [13] 学习概念的分布式表征--这是我最喜欢的论文之一,一直以来都是如此。 [14] 玻尔兹曼机的学习算法。 [15] RMSprop [16] 辍学:防止神经网络过度拟合的一个简单方法 [17] Imagenette是ImageNet中10个容易区分的类的一个子集(tench, English springer, cassette

理论与实践

21

播放器、链锯、教堂、法国号、垃圾车、汽油泵、高尔夫球、降落伞)。 [18] 用于图像识别的深度残差学习 [19] 用卷积神经网络进行图像分类的锦囊妙计 [20] 神经网络超参数的规范化方法:第1部分--学习率、批量大小、动量和权重衰减 [21] 卷积神经网络中类不平衡问题的系统研究 [22] 标签平滑化是否能减轻标签噪音?

22

理论与实践

编程是关于 ,你有什么要说的? 我的第一本编程书是《镐头》。这是一本关于Ruby语言的语法和特点的传奇手册。我花 了好几个小时来研究它,因为我相信对一种语言的详细了解是使人成为一个好程序员的原 因。哦,我是多么的错误啊!

你作为一个开发者的能力是由你能用语言表达的东西的效用来衡量的。用粗糙的石头建造 经得起时间考验的建筑物的能力,比把石头削成精致的形状,但你却无法把它们编织在一 起的能力更有价值。

此外,语言的发明是为了使编程更容易,为某种目的服务。这意味着,如果你作为一个程 序员的旅程刚刚开始,你能够真正理解一段语法的唯一方法是把它作为一个整体的一部分 来观察--一个表达式带有某种意义并以某种方式整合到一个整体中。

那么,应该如何学习编程或学习一种新的编程语言呢?最好的方法是通过阅读和编写大量 的代码。这就是你如何变得流畅的方法。对于阅读来说,通常非常有效的方法是在 GitHub上寻找小型的、有维护的资源库。对于初学者来说,任何大约100-200行的代码都 是完美的,但任何低于1000行的代码都可以。至于写作,尽情地写吧。如果你被卡住了, 可以在你选择的语言中搜索小型编程项目。

即使你把一门语言学得很好,那也最多是一个起点--你可以和你的朋友们分享的一个不错 的小道消息。曾经有一段时间,我知道如何写一点Haskell,这可以作为喝咖啡时的一个 很好的谈话点。

编程是关于你要表达的东西

23

事实是,没有人在乎!真正重要的是你能用一种语言说些什么--你是否有足够的领域知识 说些有趣的东西!真正重要的是你能用一种语言说些什么--你是否有足够的领域知识来说 些有趣的东西。

也许你想成为一名网络开发者。你研究网络应用程序是如何工作的,在这一过程中,你自 然会掌握一些Ruby或JavaScript。或者你想成为一名深度学习从业者。你广泛地研究神经 网络,并学习一些Python和PyTorch。

最大的秘密是,领域知识是第一位的。编写干净、可维护的代码是一门艺术,这一点毋庸 置疑。但你不能本末倒置。只有在你有很多话要说的时候,你才能研究命名、重构、依赖 关系反转等等。只有到那时,一种语言的更高级的功能才有意义。也只有到那时,它们才 会变得重要。

学习编程的最快方法是学习如何说一些有用的东西。

24

编程是关于你要表达的东西

优秀的 开发者的秘密 你坐下来写代码。如果代码特别具有挑战性,在你写下第一个字符之前,会有许多分钟过 去。

首先,你可能需要检查你想调用的函数在哪里被定义,以及它到底是做什么的。对于你正 在工作的代码库的一部分,你有什么测试?也许值得一读,以弄清测试的内容和事情是如 何结合在一起的。在某些时候,你可能会想起你读过的一篇博文,它为你将要实现的东西 提供了一个很好的概念性框架。你把它拉起来,开始阅读。

最后,你非常谨慎地写下了第一行代码。然后是另一行。一个小时过去了,你只写了两行 代码,但这是很好的进展。现在你已经进入了你的状态;你已经拥有了你所需要的一切, 并且达到了你的最高生产力。额外的代码行可以开始流动了。

将信息加载到你的大脑是一个有价值的重要过程。然而,这并不便宜。它需要时间和精力 。类似的事情也会发生,甚至当你在做一项非常简单的任务时,你坐下来,立即开始推送 一行又一行的代码。你要在脑海中建立一个形象,想象你写的每一行代码是如何与之前的 代码相联系的,以及它可能与接下来的代码行有什么关系。这需要大量的精神能量。

当你在研究一些复杂的东西时,也会发生类似的过程。当你继续阅读这个主题时,你开始 在脑海中形成一个复杂的结构。这么多的想法相互连接!你会发现,这些想法在你的脑海 中是如此的重要!

经过一两个小时的这种努力,你可以回过头来,对你所做的一切表示钦佩。

优秀开发者的秘密

25

但如果你被打断了怎么办?

中断是多么微不足道并不重要。也许它是你的朋友发来的一条信息,你对此作出回应。也 许它是你读到的关于你当地足球队的新闻。

当你考虑你的主要活动以外的东西时,你的思想就会转换背景。它丢掉了你在空中持有的 信息,开始加载与分心有关的信息。仅仅几分钟后,当你回到你的主要活动时,你脑海中 原来持有的一些信息就会消失。你可能不得不阅读你之前写的代码,或者回到你所依赖的 函数的定义,再读一遍。无论哪种方式,你都不会像中断前那样有效地编程或学习。为了 恢复到原来的状态,你将付出时间和精力上的代价。

开发人员将改变焦点时发生的事情称为 "上下文切换"。许多优秀的开发者认为,这种操作 的代价是非常高的。

如果你想在学习或写作上取得进展,无论是文字还是代码,我不知道有什么比长时间、不 间断的会议更好的技术。[23]

给它一个机会,一段时间。收起手机。关闭你的浏览器或把它移到另一个工作区。你会惊 讶于你会取得多大的成就。[24]

[23] 这个概念有时被称为 "深度工作"。它是如此强大,以至于仅就这一想法就写了整整一本书! [24] 一次深入的工作可能持续一个小时到两个半小时。如果你能负担得起,每天进行一次,将使任何项目取得快速进展。许 多人认为,两节课是人类可能的最大限度。我不认为连续几天每天写五个小时的代码是可以应付的。即使是一天也会成为一 个挑战。随着我们变得疲惫,我们的工作不仅质量下降,而且从长远来看可能会产生反作用。这同样适用于学习。请注意, 这涉及的是重点工作。我不把写电子邮件、参加会议或填写文书工作包括在这个类别中。在大多数专业

26

优秀开发者的秘密

设置,如果一个开发人员每天能不间断地进行一次深入的工作,那就非常幸运了。在家工作万岁!

优秀开发者的秘密

27

作为一个 开发者,提高的最好方法是 "你不能用资源、书籍或文章来磨练你的技能。你要用实践来磨 练你的技能。如果你想变得更好,就去做这件事。" - 杰森-弗里德,一条推特

与流行的观点相反,只有两种方法可以保证让你从对写代码一无所知到成为一个伟大的开 发者。它们当然不包括被动地观看YouTube视频,参加一个又一个MOOC课程,或沉迷于 计算机科学教科书。虽然所有这些都是很好的配菜,但它们是一个糟糕的主菜。

在这方面,两个经过时间考验的做法是阅读和写代码。它们是作为一个开发者的核心内容 。

你可以在GitHub上找到很多可以阅读的代码。我更倾向于规模较小、维护良好的存储库 。不要气馁,因为一开始,阅读开源代码会感觉像是在喝水。但是给它几个星期,你会惊 讶于许多事情开始变得有意义了。[25]

编写代码就更直接了。你想出一个小型项目的想法,并把它带到某种完成的状态。[26] ,你 也可以查看我所做的一些项目。

没有必要从事任何花哨的工作。此外,许多令人印象深刻的项目都是从几行代码开始的, 以探索一个有趣的想法。

28

作为一个开发者,提高的最好方法

如果你绝对被卡住了思路,你可以在网上快速搜索一下。分享迷你项目设计是博客和优酷 网友喜爱的一个主题。

而这就是它的全部内容。成为一个伟大的开发者的关键是阅读和编写大量的代码。只要你 继续阅读和写作,你在这一过程中产生的代码的质量并不重要。

[25] RailsConf 2014--Saron Yitbarek的《读好代码》提供了关于阅读代码的额外见解。这是一个强烈推荐的观看方式。 [26] 构建小型项目的技能是非常有价值的,这些项目需要几个小时到几个星期的时间来构建。这就是伟大的开发者不断学习 的方式。作为一个非常令人印象深刻的迷你项目的例子,请查看Andrej Karapthy的miniGPT或他的一些其他作品。另外, 看看fast.ai推出的许多项目。其中一些现在看起来非常令人印象深刻,但所有这些都是从几行代码开始的。有些资源库仍处 于萌芽阶段。通过它们,人们可以看到每个项目是如何既提供价值,又探索一个新的想法或方法。在我的个人网站上

作为一个开发者,提高的最好方法

29

如何使用你的工具来实现 流动的状态 当你沉浸在你的工作中时,你就处于一种流动的状态--当你和你的工作之间没有任何隔阂 ,没有其他东西进入你的意识。你采取行动,而你所工作的媒介提供了一个即时的回应。

像这样在工作中失去自我是非常令人欣慰的。这种感觉很好,你以令人印象深刻的速度生 产高质量的作品。你超越了作为一个开发者,成为一个艺术家。

实现流动状态不是必然的,但有一些方法可以使其更有可能。我们可以组织我们的工作, 消除障碍,使其从我们手中流淌出来。

这就是为什么许多程序员花大量时间研究他们的编辑器,并对那些不需要从键盘上抬起手 指的编辑器发誓的原因。当你伸手去拿鼠标的时候,你的流程就被打断了。你在你的意图 和屏幕上出现的结果之间引入了一个延迟。在你和你的工作之间出现了操作鼠标的笨拙感 。理想情况下,你不希望这两者之间有任何隔阂。

此外,我们在编写深度学习代码时,还有可能遇到许多其他分心的情况。我们可能会与我 们的虚拟机断开连接。我们可能会花过多的时间来排除一个微妙的错误。我们的无线键盘 可能会因为电池电量不足而需要充电。

不管我们有多好,我们一定会不断遇到这些情况。但是,通过计划,利用一些技巧,如创 建玩具数据集来进行实验,并很好地学习我们的工具,我们可以朝着

30

如何使用你的工具来达到流动的状态

理想。

现在是真正好的部分。我们永远不会完全处于流动状态--反过来说,我们也永远不会完全 不处于流动状态。我们总是处于这两个极端之间的某个连续体上。这意味着我们不必太担 心实现流动的完整体验。我们所能做的就是采取一些小的行动,使我们朝着理想的方向前 进。对你的工作流程或环境的任何改变都算数,即使是一个小的改变。

做一些小的调整,看看它们是如何工作的,就可以开始更经常地体验到流动。这可以将我 们的生产力提高到一个全新的水平。

如何使用你的工具来达到流动的状态

31

将现实作为你的 镜子 我在Ruby on Rails[27] 上断断续续地捣鼓了大约两年时间。我甚至在工作中用它建立了一 个用于生成自定义报告的应用程序,尽管当时我的角色是管理层。我并不奢望得到一份开 发员的工作--我没有受过教育,怎么可能得到一份工作?对我来说,程序员是神话般的生 物,拥有凡人无法企及的圣贤智慧--或者至少不是一个将空闲时间花在笔记本上创建玩具 应用程序的凡人。

幸运的是,我得了一场严重的流感,被困在家里。我没有太多的事情可做,我翻阅了我的 Facebook feed,注意到当地一家Rails商店的广告。他们正在寻找一个人加入他们。

我没有多想,就回答说我有兴趣。我很快就收到了面试邀请,很快另一家公司也向我发出 了邀请。没有什么可失去的,所以当我的情况好转后,我去参加了这两个面试。

两次面试都以当场获得工作机会而告终。我大吃一惊。我生活在我的想法的外壳里,我不 知道市场对Ruby on Rails开发人员的需求有多大。我也没有意识到,业内人士对我认为 重要的东西知之甚少,而他们在其他方面又是多么强大。事实证明,你可以用Ruby on Rails创建数百万的初创公司,而不需要窥视其源代码。但你最好是非常擅长能够快速地搅 动出代码,并使网站看起来很专业。我对就业的含义有一个完全错误的心理模式。

最后,我很幸运。由于偶然的原因,我学会了一个流 行 的框架,我具有雇员所追求的其 他特征,剩下的就是历史了。但教训依然存在--如果你想在明天过上与今天不同的生活, 你就必须让你的信念经受考验。而去

32

将现实作为你的镜子

从不是深度学习专家,到成为深度学习专家,可能需要质疑很多假设。这就是本书的内容 。每一章都描述了我早先持有的一个或一组想法,以及它们是如何随着经验而改变的。

你可以通过主动注意到你在什么地方妄下结论,以及不向世界的反馈开放自己来帮助这个 过程。在某种情况下,涉及的情绪越强烈,你看不清楚事情的机会就越大。

作为一个例子,让我们来看看我在发推特前持续经历的恐惧。我很担心人们会读到我写的 东西,认为我很愚蠢。或者我尊敬的人将取消对我的关注。每一条推特都感觉它可能会结 束我花了很多时间建立的、我深深关心的很多事情。所有这些都造成了很大的压力。

然后我花点时间退后一步。我慢慢地吸气,看一下情况。[28]如果我发布这条微博,最可能 出现的结果是什么?最有可能的结果是,很少有人会注意到。即使有不少人取消了对我的 关注,从长远来看,这可能也不会有太大的影响。

但对我来说,最重要的是拥有发言权和帮助他人。我想在沟通方面做得更好,而这只能通 过经验来实现。意识到这一点,我就去按了推特按钮。

即使是像发推特这样看似简单的事情,我也做了不少,我仍然需要通过自己的情绪来说服 自己,开始更多地看到事情的本质。但这种方法真正闪光的地方是让自己开放新的体验。

我从来没有写过一本书。我从来没有如此分享过我的许多想法。

将现实作为你的镜子

33

公开。我有什么值得说的吗?鉴于我不是以英语为母语的人,我是否能够使我的写作足够 清晰?到底会不会有人买这本书?我如何为我可能取得的任何销售额缴税?

现实是,我没有任何线索,这没关系。你不可能事先知道任何这些事情。当然,你可以阅 读别人的经验,这可能是有帮助的,但最终没有什么能比自己经历的事情更能远程改变你 。

在过渡到一个新领域时,你进入了一个以神秘方式运作的领域。在我之前的生活中,没有 任何东西能让我准备好在网上学习或找到一份编程工作(更不用说拥有一份了!)会是什 么样子。

但如果你采取行动并保持开放的心态,很快一些神秘感就会消失。

[27] Ruby on Rails是由David Heinemeier Hansson创建的一个网络开发框架。GitHub、Twitter、Shopify、Instacart 和其他许多网络应用都是用它建立的。汉森是一位成功的商人、程序员、业余赛车手和摄影师。他经常分享关于学习和经营 企业的见解。 [28] 这种方法非常强大,有一整个心理治疗领域--理性情绪行为疗法--基于此。其前提是直截了当的:我们对所涉及的情况 持有错误的信念,而当我们对这些信念提出异议并加以改变时,我们就会变得更加理智一些。很多时候,随着我们学会更好 地驾驭现实世界,我们会变得更加有效。

34

将现实作为你的镜子

做真正的工作(它 compounds) "读一本书而不做笔记,就像发现了一个新的领域而忘记了画地图 。" - 朱利安-夏皮罗

真正的工作使宇宙中的原子移动。

想着写一篇博文,想了几天,也就是一丁点的事。坐下来写一个提纲会更好。完成一个草 稿并与你的朋友们分享则更好。

真正的工作是复合的。你想一些事情,即使你想得很深,第二天你醒来时几乎什么都没有 留下。几天这样的思考就像在跑步机上跑步,当你试图从A点移动到B点时。

另一方面,一套小的笔记是你可以建立的东西。你可以在第二天对它们进行补充,或者根 据写下它们的经验,决定你不想再做这件事了。你在运动,在进步。

来自世界的反馈甚至更好。它可能来自你的朋友或你在网上认识的志同道合的人。它可以 让你看到哪些是有效的,哪些是无效的。你也会在你今后可能想做的事情上变得更好。 - 也就是自由分享你的工作。把真正的工作留给自己,没有什么意义。

这适用于每一种类型的活动:写文字、写软件、学习。

做真正的工作(它是复合的)。

35

你可以通过观看讲座或阅读书籍被动地学习。这构成了一些学习,而且会非常缓慢地复合 。你可以在看讲座的时候做笔记。现在我们开始有所收获了。你可以在第二天回顾你的笔 记。你的动作更快。

如果你在其中加入一些练习,你的速度会更快。如果你的练习演变成你与世界分享的小型 项目,你的速度就会非常快。

你移动的原子越多,你收到的反馈就越好,你能反思你所学到的东西的程度就越大。

36

做真正的工作(它是复合的)。

机器的隐藏游戏 学习 所有机器学习的核心是对未见过的数据进行归纳的能力。是什么让我们有可能在一定数量 的数据上训练我们的模型,并让它在其他情况下也能发挥作用?我们能在多大程度上相信 这些结果?我们如何创造一个环境,使我们能够安全地在未见过的数据上运行我们的模型 并根据结果采取行动?

这些是最重要的问题。能够回答这些问题使你成为一个熟练的实践者。了解如何得出答案 会使你成为一个伟大的人。错过任何一个问题的答案,只要一丁点,就会导致悲惨的后果 。

要深入了解对未见过的数据进行归纳的能力,最好的起点是Rachel Thomas的一篇博文: 如何(以及为什么)创建一个好的验证集。这篇文章非常实用,但它涵盖了许多微妙之处 ,其程度远远超过互联网上的其他资源。

如果想进入理论领域,我强烈推荐《从数据中学习》:Yaser S. Abu-Mostafa的短期课程 。相关MOOC的讲座也很精彩。

对于在野外部署模型,没有比fast.ai v4第1部分第3讲更好的资源涵盖所有的基础。这方面 的 一 本 好 书 是 Building Machine Learning Powered Applications : Emmanuel Ameisen的《从想法到产品》。

机器学习的隐藏游戏

37

如何构建一个 机器学习项目 "从长远来看,保持理智的唯一方法是在短期内保持偏执"。 - Radek Osmulski, 如何有效地进行机器学习

一个机器学习项目就像一朵花。假设条件合适,它有可能从一粒小种子长成一个宏伟的实 体。但是,它不能靠意志来实现。如果不能提供其中一个必要的成分,无论你付出多少努 力,它都不会成长。

一个健康的机器学习项目的主要条件是一个良好的训练--验证--测试分割。这一考虑是非常 基本的,所以我用了一整章来讨论它。

有了良好的验证策略的肥沃土壤,我们就准备好构建我们的基线。这是一颗种子,我们的 整个解决方案将从它上面生长出来。

基准线的目标是什么?越小、越简单越好。从本质上讲,我们正在寻找对我们的训练数据 进行最简单的转换,以使我们的指标在验证集上的测量结果发生变化。例如,让我们想象 一下,我们想根据一辆汽车的特征来预测它的价格,例如车龄、颜色、马力等等。我们可 以做的一件事是根据年龄把例子分成两组。一组包含2010年以前生产的汽车,另一组包含 2010年以后生产的汽车。然后,我们将采取每组的平均价格,并将其作为我们的预测。当 我们看到一个新的例子,我们会看它属于哪个年龄组,并预测其价格为该组的平均价格。 当与所有的预测相比较时

38

如何构建一个机器学习项目

零,这应该会导致在我们的验证集上的性能提高。

为什么有一个基线如此关键?它为我们提供了一个可能的指示。此外,在构建基线的过程 中,我们有可能了解到关于我们正在解决的问题的一些我们以前不知道的事情。这也是一 个很好的方法,可以让我们了解我们是否在朝着正确的方向前进。如果我们训练我们的第 一个模型--特别是在有不平衡类的更复杂的问题上--没有基线,可能就很难解释结果。[29] 。

此外,基线是验证我们所建立的东西是否有很好的机会没有错误的一个好方法。即使是一 个简单的基线也需要大量的代码。我们需要从磁盘上读取我们的例子,并给它们分配标签 ,可能是通过解读元数据文件。我们还需要实现一种在验证集上评估结果的方法。考虑到 基线有多简单,我们可以对结果的样子有一些想法。如果我们得到的东西大致上是有意义 的,那么在快速浏览了我们的代码之后,我们就可以进入下一个阶段了。如果我们得到一 个无意义的结果,我们可能在某个地方有一个错误,或者我们没有理解关于问题领域的一 些重要内容。我们写的代码越少,这两个问题就越容易解决。

机器学习代码是出了名的难写。它非常容易引入微妙的错误。我们的代码可能仍在运行, 我们可能会得到一个体面的结果,但它不会像其他方式那样好。[30]此外,如果我们没有任 何东西可以与之比较,就很难确定我们得到的结果是否好。基线是解决这两个问题的好方 法。这种思维方式是一个非常强大的工具,它将伴随我们继续进行项目工作。有了基线, 我们就可以运用同样的方法来有机地发展我们的解决方案,一点一点地,因为我们继续验 证我们每一步的工作。

如何构建一个机器学习项目

39

接下来,我们将注意力集中在我们认为可能从调整中获益最多的管道组件上。我们实施改 变并运行我们的整个管道。如果我们看到性能大幅下降,或者管道没有完成,我们可能有 一个需要解决的问题。自从上次运行我们的管道以来,我们应该只写了几行代码,因此, 变化应该是本地化的。这使我们有机会解决这个问题,而不会有太多麻烦。

然而,重要的是,我们不能仅仅为了调整超参数而进行实验,特别是在训练的早期。我们 要把时间投入到重要的地方。这通常意味着探索更大的架构集和开发诊断代码。我们对我 们的模型的表现了解得越多,就越好。此外,尝试不同的架构可以成为了解什么是可能的 一个重要来源。

当我们在基线的基础上,我们的想法是继续以小步前进。就像我们不想从没有管道到训练 一个复杂的模型一样,我们现在也不想直接跳到它。在我们训练一个复杂的、最先进的深 度学习模型之前,我们可能想尝试一下随机森林[31] ,或者一个仅由全连接层组成的简单 模型。

将这种思维方式延伸到我们最复杂的模型的实现上,我们可能不想一蹴而就地去建立它。 我们可能想从实现损失开始,把它栓在一个只由完全连接的层组成的简单模型上。下一步 可能是实现一些层的集合,并从我们的数据加载器中传递一个批处理,通过它。确保我们 得到的不是所有的零和正确形状的输出是一个非常有价值的检查。[32]

我们的想法是始终以小的增量前进,用较简单的模型作为迈向更复杂模型的垫脚石。

40

如何构建一个机器学习项目

另一个值得考虑的问题是,以这种方式发展我们的解决方案将需要定期运行我们的整个管 道。等待它完成可能是一个可怕的时间沉淀。我们还有可能在这个过程中分心。当我们致 力于发展我们的项目时,我们并不关心对性能的精确测量。我们所需要的是一些迹象,表 明我们是否可能在正确的方向上前进。最重要的是,我们要确保我们的代码在我们引入的 变化中仍然能够运行。构建一个较小的训练集可能是实现这两个目的的好方法。不要在整 个数据集上进行训练,也许只用1%或5%的数据就足够了。假设对我们的例子进行随机抽 样是合适的,切换到在我们的数据子集上运行可能只需要改变一行代码。通过一点实验, 这种方法通常可以被利用,甚至用于更复杂的问题。虽然我们可能无法判断我们的模型是 否有足够的能力来利用我们数据集中的所有信息,但在一个数据子集上运行我们的模型, 加上适当的诊断代码,仍可能提供有价值的见解,了解它与我们一直在研究的其他模型相 比有什么优势。

发展一个好的机器学习解决方案的最后一个必要条件是时间。有了足够的经验,你很可能 很快就会得出一个像样的解决方案。但是,当你冒险进入未知领域,推动可以做的事情的 边界时,你就开始了一个创造性的过程。就像学习一样,它不能被塞满。你花一些时间在 电脑屏幕前。然后你带着你的狗去散步或去慢跑。你忙着准备一顿饭。通过这一切,你的 头脑继续研究解决方案,分析下一步该怎么做。如果我们通过尽可能多地阅读有关问题领 域的资料来加强这个过程,那么这个过程就会特别有效。所有这些都需要时间,而且从人 类的角度来说,要想加速超过某一点是不可能的。我们必须留出时间,让事情进入正轨, 让我们形成关键的洞察力。

在良好的验证沃土上种下良好的基线的种子

如何构建一个机器学习项目

41

如果你有这样的策略,每天用鼓舞人心的读物来浇灌它,把你的注意力放在管道的每个组 成部分上,并系统地发展它,很快你就会有一个复杂的、表现良好的机器学习解决方案。 一个令人满意的结果的关键,很少是你选择沿途采用的任何特定架构或方法。相反,达成 解决方案的过程才是最重要的。

[29] 要了解更多信息,请参考这个fastai讲座 [30] 这是使用fastai库等框架的一个有力论据。我知道我可以手动实现我的训练循环。我喜欢这样做带来的自由。但更重要 的是,我很欣赏库中的代码有成千上万的人在运行,有很多人在看它。此外,它应该被彻底测试。通过使用高级库使我们的 代码更简单,是保持我们理智的另一个好方法。 [31] 如果有机会的话,随机森林是一个很好的算法!它训练起来非常快,而且不会过度拟合。在许多数据集上,它可以与 更复杂的方法的性能相媲美。它还能很好地进行解释。关于随机森林分类器与神经网络的性能相匹配的例子,请看这个资源 库。此外,它使人们能够更深入地了解起作用的因素,而使用RNN是很难或不可能得到这些因素的! [32] 这还可以更进一步,我们看一下间歇层的平均值和标准偏差,监测我们有多少死的ReLus,等等。在许多情况下,只 要进行一次检查就足够了,因为它为投入的时间提供了很大的价值。

42

如何构建一个机器学习项目

订阅DeepL Pro以翻译大型文件。 欲了解更多信息,请访问www.DeepL.com/pro。

如果你有这样的策略,每天用鼓舞人心的读物来浇灌它,把你的注意力放在管道的每个组 成部分上,并系统地发展它,很快你就会有一个复杂的、表现良好的机器学习解决方案。 一个令人满意的结果的关键,很少是你选择沿途采用的任何特定架构或方法。相反,达成 解决方案的过程才是最重要的。

[29] 要了解更多信息,请参考这个fastai讲座 [30] 这是使用fastai库等框架的一个有力论据。我知道我可以手动实现我的训练循环。我喜欢这样做带来的自由。但更重要 的是,我很欣赏库中的代码有成千上万的人在运行,有很多人在看它。此外,它应该被彻底测试。通过使用高级库使我们的 代码更简单,是保持我们理智的另一个好方法。 [31] 如果有机会的话,随机森林是一个很好的算法!它训练起来非常快,而且不会过度拟合。在许多数据集上,它可以与 更复杂的方法的性能相媲美。它还能很好地进行解释。关于随机森林分类器与神经网络的性能相匹配的例子,请看这个资源 库。此外,它使人们能够更深入地了解起作用的因素,而使用RNN是很难或不可能得到这些因素的! [32] 这还可以更进一步,我们看一下间歇层的平均值和标准偏差,监测我们有多少死的ReLus,等等。在许多情况下,只 要进行一次检查就足够了,因为它为投入的时间提供了很大的价值。

42

如何构建一个机器学习项目

如何在Kaggle中获胜

图3.在Kaggle比赛中获胜所需的步骤,总结为一个列表。

在Kaggle获胜的第一步是尽早加入一个比赛。建立一个比赛可能需要一段时间。根据你的 互联网连接情况,下载数据集可能需要几天时间。然后是弄清楚如何读入数据并将其输入 我们的模型的过程。取决于你的经验水平和可用的硬件,仅这一部分就可能需要一段时间 。

更重要的是,即使你开始训练你的模型,达成一个好的解决方案仍然需要时间。这对任何 比赛来说都是如此,即使是那些有表格数据的比赛,单个模型的训练可能只需要几分钟的 时间。处理机器学习问题是一个学习问题领域和数据的过程,并对什么有效、什么无效的 反馈做出反应。你很有可能不会从一开始就得出一个伟大的模型。随着时间的推移, Kaggle比赛的要求也越来越高,有些比赛可能非常复杂。要在比赛中取得好成绩,达到银 牌或金牌水平,就需要进行大量的实验。编写诊断代码和确定你的模型在哪里有困难也需 要时间。

但尽早参加比赛的主要原因是,在高水平上解决机器学习问题是一个创造性的过程。饼干 式的解决方案可以让你获得体面的结果。然而,虽然它们在商业环境中通常足够好,但在 Kaggle上不会让你走得太远。超越它们是乐趣和挑战的开始。

如何在Kaggle中获胜

43

人类,不同于486系列的个人电脑,没有一个涡轮增压按钮。创造力需要时间。你不能强 迫自己坐8个小时,命令自己要有创造力。寻找新的方法需要自然流露。你阅读相关的研 究论文,在代码中尝试一些东西。你可能会在开车或洗澡的时候被一个闪电击中,产生深 刻的认识。如果你阅读比赛结束后发布的表现良好的解决方案的文章,你会发现它们是非 常多样的。这也证明了要想做得好,需要有创造力。最有可能的是,要找到自己的金牌范 围,你可能需要相当多的灵感时刻。

这里就是Kaggle论坛发挥作用的地方。它们是一种不能被高估的资源。首先,如果你在挣 扎,它们,再加上人们分享的笔记本,会让你前进。另外,有机会讨论你所看到的,并与 其他人的观点进行比较,是一个巨大的灵感来源。由于这种动力,再加上人们希望真正地 提供帮助,在社区中留下自己的印记,因此非常自由地分享,仅仅关注Kaggle论坛就能使 你在80%的道路上找到非常好的解决方案。这不仅是一个非常有效的策略,而且也是一个 很好的学习方式。

但有一点要记住,人们,包括顶级Kagglers,会分享很多东西,但他们不会分享所有东西 。这是可以理解的。通常,他们会暗示什么是有效的,而你可能需要自己做一些挖掘。由 于新信息出现的速度,以及你可能需要做的后续工作的数量,每天阅读论坛是跟上时代的 唯一方法。这也让你养成了每天思考竞争的习惯,每天进行小的调整是最好的改进方式。

如果Kaggle论坛如此有用,那么要想在Kaggle比赛中获胜,你还必须利用哪些信息来源呢 ?首先,最重要的是研究论文。阅读它们是有技巧的。你不需要理解每个段落。事实上、

44

如何在Kaggle中获胜

试图在探索一个新的领域时这样做将是非常耗时的。但重要的是要了解一篇论文在谈论什 么,其本质是什么,以及所描述的技术是否有机会对你要解决的问题有用。这是一种来自 于扫描和阅读大量论文的技能。这并没有什么神奇之处。有些论文会比其他论文更容易理 解,这也是可以的。如果你很难理解某篇论文,最好先阅读相关的论文,过一段时间后再 看一看最初的论文。如果你觉得这篇论文与比赛有关,你可以做的另一件事是在论坛上发 起一个主题,请大家帮助你理解它。这样的主题很好,因为问问题的人和帮助他们的人都 能学到很多东西。

研究论文有其弟妹:博文。通常情况下,它们是开始的好地方,尽管找到关于更神秘的主 题的好博文可能很困难。尽管如此,它们仍然可以成为伟大的学习资源。博文的质量差别 很大,但有些博文和论文一样准确,阅读这些博文可以是建立对任何特定主题的直觉的一 个好方法。

现在我们有了做研究的框架,我们必须每天对我们的解决方案进行工作。我们的想法是做 一些小的调整,随着时间的推移,效果会越来越好。在任何时候,跳到排行榜的顶端似乎 都是不可能的,但是稍微改进我们的解决方案,尝试一种新的方法,是我们可以做到的。 这是我们大部分精力应该去的地方。这也是非常有用的,特别是在比赛的早期,不要过多 地关注调整超参数,而是要尝试新的架构。我们希望我们的探索是有意义的,并涵盖尽可 能多的领域。我清楚地记得,我参加了一个包括表格数据和图像的比赛。我急于利用这两 种数据创建一个模型,最终获得了第五名。我觉得,如果我花更多的时间建立更多不同的 模型,我的表现会更好。比赛结束后,发现有更多的信号

如何在Kaggle中获胜

45

在表格数据中的数据比我想象的要多得多!如果我没有直接跳到深度学习模型上,而是花一 些时间在表格数据上尝试各种架构,我就会对问题领域了解得更多。这将是一个更好的解 决问题的方法,并可能导致一个更好的结果。[33]

我们的想法是进行大量的实验,但我们如何知道我们正朝着正确的方向发展呢?为了回答 这个问题,我们需要回到起点。在比赛中,一旦我们开始写代码(应该是在我们决定加入 的那天),我们的首要任务是创建一个简单的基线。在Kaggle的背景下,基线通常是一个 Jupyter笔记本,我们在那里下载数据,弄清楚它是如何组织的,并提交一份报告。提交 的数据可以由所有的零组成,这并不重要。不过,在我们开始研究我们的模型之前,把所 有的机制都准备好是很有用的。

一切准备就绪后,我们就可以开始训练了。最初的目标是找到一个能跟踪公共排行榜的验 证分。理想情况下,你在本地得到的结果会与Kaggle上的结果一致。然而,对于很大一部 分比赛来说,这可能是无法实现的。你的本地结果与排行榜上的结果朝同一方向发展就足 够了。

为了实现这一目标,你必须研究如何最好地分割你的数据。随机抽样是否足够?你是否需 要根据类别进行分层拆分?或者,数据是有时间性的,应该根据时间戳进行分割。可能还 有其他针对特定比赛的考虑因素,需要加以考虑。适当的验证性拆分是任何好的Kaggle提 交的核心。

那么,我们如何衡量我们是否做对了呢?我们至少训练两个模型,并将它们提交到排行榜 上。排行榜上的结果应该跟踪本地结果。如果第一个模型比第二个模型做得更好,这应该 反映在两个地方。两个模型是最基本的,尽管它

46

如何在Kaggle中获胜

可能就足够了,可以开始了。不过,在你进行竞争的过程中,你必须注意排行榜是否在追 踪本地结果。如果不是,有可能你应该重新审视你的验证分割,或者其他值得调查的东西 可能在测试数据中起作用。

拼图的最后一块是合奏。它背后的想法是非常直接的。我们想把多个模型的预测结合起来 ,希望它们的错误不相互关联。如果模型A与模型B有不同的错误,其中一些会相互抵消。 使用一组不同的模型有帮助。

一个相关的技术是用交叉验证法进行训练。我们在数据上训练多个模型,扣留不同部分进 行验证,并将结果结合起来。这两种技术都非常强大,很难想象一个获胜的Kaggle方案会 不利用这两种技术。网上有许多关于这两种技术的优秀资源。[34]

而这就是全部内容。尽早参加比赛。阅读论坛,每天努力解决你的问题。你保证会赢。真 正的奖品,值得为之奋斗的,是你学到的东西。在Kaggle排行榜上名列前茅是一种有趣的 经历。奖品也是不错的。但从长远来看,考虑到满意度和经济方面,你学到的东西更有价 值。这是最终的奖励,如果你遵循我上面概述的公式,你保证每次都能赢。

[33] 谷歌AI开放图片--视觉关系追踪是我在这里提到的竞争。 [34] 我最喜欢的一篇关于合集的博文就是这篇。我想不少顶级Kagglers都是从这篇博文开始他们的旅程。

如何在Kaggle中获胜

47

最适合深度学习的硬件 有相当多的人喜欢讨论硬件。在这个过程中,他们产生了令人难以置信的大量内容。对于 每一次这样的对话,对于你阅读的每一个线程,你都要用最宝贵的货币来支付:你的时间 。

你可以对一个新的架构进行测试,并将其写进博客,观看讲座,或者继续研究你的家庭钻 机的完美配置,挤出2%的额外性能并节省20美元。最有可能的是,一次研究会是不够的 。你将交换许多讲座和许多博客文章来评估许多替代方案。

因此,我的建议是,只在你认为有娱乐性的情况下探索硬件。除了这种情况之外,道理非 常简单。如果你不知道深度学习是否适合你,那就寻找AWS或GCP的学分(我觉得GCP更 方便用户使用,特别是对初学者来说),并使 用 云虚拟机来寻找答案。在这个过程中,你 会学到很多有用的东西,这些东西在专业环境中会变得非常有价值--如何将代码从你的本 地机器转移到vm,如何连接到它,如何访问Jupyter笔记本服务器,等等。为了使事情在 最初阶段保持简单,你可能想从Google Collab或Kaggle Kernels开始。

如果你知道深度学习适合你,那么家用设备是最经济的选择。我的首选设置是一台运行 Ubuntu桌面的笔记本电脑和一台运行Ubuntu服务器的带GPU的无头桌面。我通过ssh进 入桌面,在本地网络上访问Jupyter笔记本。另一个选择是获得一个带GPU的桌面,安装 Ubuntu桌面,然后直接在上面工作。然而,我发现拥有两台独立的机器更方便。Ubuntu 服务器似乎可以

48

最适合深度学习的硬件

比Ubuntu Desktop更稳定,而且我还发现在它上面安装所有必要的CUDA和CUDNN库更 容易。

这给我们带来了问题的关键--你应该买什么GPU?这里的建议是获得你能负担得起的最大 的GPU[35] 。[36]我所说的最大,是指在内存方面[37]。

如果新的硬件超出了你能承受的范围,那么上一代的GPU或回到两代之前是完全可以接受 的。你拥有什么硬件真的并不重要。重要的是你如何使用它。

随着你继续从事深度学习项目,你将开始了解什么是重要的。也许你正在处理大型表格数 据集,可以从更快的CPU或更多的PC内存中受益。或者,也许训练计算机视觉模型是你的 一杯茶,你渴望在更高的分辨率图像上进行训练。在这种情况下,多GPU设置可能是正确 的选择。或者,你是一个GAN艺术家,有很多结果和模型权重需要整理?添加另一个驱动 器--一个更大但不一定快的驱动器--可能是一个选择。

但是,在你开始运送一个又一 个 项目之前,你不会知道这些的。第一个GPU设备就是为了 让你达到这个阶段。经过几个项目之后,你将从训练期间关注资源使用情况的行为中了解 到关于硬件的足够多的有用的东西,[38] ,为你的下一个设备挑选组件将成为一个事后的 想法。你也会了解到足够多的信息,避免为那些无关紧要的细枝末节发愁,例如你的CPU 支持多少条PCIe通道,或者你的内存的时钟速度是多少。

同时,如果你觉得学习硬件是件有趣的事,就像许多技术人员所做的那样,通过一切手段 ,进入那个兔子洞!但这不是前提条件!但这并不是一个先决条件。你可以成为一个了不 起的深度学习实践者,但对硬件却很少考虑。

值得学习的是如何优化你的硬件使用。 最适合深度学习的硬件

49

有。你是将你正在访问的数据反复加载到RAM中,还是从磁盘中读取?你是按顺序读取数 据,还是有大量的跳转?你是否为使用情况使用了适当的硬件?[39]如果你需要进行数据预 处理,你是在训练前就卸载了繁重的工作并执行了一次,还是在每次加载实例时都产生了 费用?当你训练时,你能告诉你的瓶颈在哪里吗?你是否能够为GPU提供能量,使其接近 100%的利用率?有什么办法可以使训练运行得更快?这些都是值得知道答案的问题。

拥有一辆华丽的汽车并不意味着你就是一个好司机。成为一名好司机也不需要成为一名好 的汽车修理工。但它确实需要能够将你所驾驶的任何汽车推到其极限。

[35] 只要确保你打算使用的深度学习库支持它就可以了!在写这篇文章的时候,只有英伟达的GPU符合条件,即使如此,一 张卡可能太古老或太奇特,不需要复杂的设置就能工作。如果你不确定,快速在线搜索会给你答案。任何在过去几年中出现 的产品几乎都能保证工作。 [36] 如果你真的想在你的预算范围内获得理想的GPU,没有比Tim Dettmers的博客更好的资源可以参考了。 [37] 训练运行多长时间并不完全重要,尽管你能越快地运行实验越好。如果你的GPU的内存太小,你可能根本无法使用某 些模型,或者训练会变得非常麻烦和低效。我现在使用的方法是选择一个GPU,然后到YouTube上看看人们用什么主板和 CPU的组合。我抓住这些模型组合,然后去一家为我组装PC的网上商店。 [38] 在运行任何计算时,都值得监测CPU利用率、RAM使用率、GPU利用率、GPU RAM使用率和磁盘IO利用率。在 Linux上,我使用htop、nvidia-smi -l(与另一个流行的选项nvidia-smi dmon相比,我更喜欢它)和iotop(仅在运行磁 盘IO重度操作时)。为了监测磁盘空间的利用率,你可以每隔一段时间运行df -h。 [39] 硬盘提供更便宜的存储空间,但从它们那里读取的速度较慢。如果你是随机访问许多小文件,这一点尤其正确。

50

最适合深度学习的硬件

轻松调试是一种超级能力 机器学习代码是出了名的难写。一旦出现了错误,就很难诊断出来。如果我们没有适当的 工具可以使用,那就更是如此了!

如果运行一个命令,就能立即被传送到错误发生的地方,这不是很好吗?在其他方面,这 可以让我们在错误发生的那一刻看一下变量的值。我们还可以尝试在原地进行一些修改, 看看是否能解决这个问题。

幸运的是,Jupyter笔记本让我们能够做到以上所有的事情,甚至更多。在这条推文中, 我描述了这些拯救生命的能力,并提供了它们的使用实例。而这里是这些信息,加上一些 补充评论,以Jupyter笔记本的形式呈现。

轻松调试是一种超级能力

51

为自己计时 记录我们在各种活动中投入多少时间是很有用的。通常情况下,我们可能会非常惊讶地发 现我们的时间都去哪儿了

这对于ML代码来说也是如此。我们要处理数以千计或数以百万计的例子,即使是每个例 子的小速度也可以转化为巨大的时间节省。

在Jupyter笔记本中工作时,最好养成使用 %timeit细胞魔法。这往往能带来有趣的洞察力。这里有一个这样的例子



下降到使用numpy而不是pandas,提供了近2000倍的性能提升!!

为你的代码计时是一个非常有用的技术,但特别是在你构建数据集和数据加载器的时候。 充分利用你的GPU的唯一方法是编写高效的代码!

52

为自己计时

你不能通过学习教科书来学习一个专业 铁匠是以各种比例混合金属的专业人员,创造合金并使用它们来创造有用的物品。

我在网上快速搜索了一下,发现铁匠们至少使用20种类型的锤子。[40]除此之外,他们还被 鼓励创造自己的特殊用途的锤子。然后是各种动力锤,可以是蒸汽动力、机械或螺丝。

我想,大多数铁匠使用这些锤子的一个子集,工匠铁匠使用更广泛的工具集。也可能有铁 匠为其他铁匠设计和制造锤子,供他们使用!但是,锤子只是一个开始!但铁锤仅仅是一 个开始。我们还有铁砧、握柄、凿子、凿子、冲头等等。

这些工具可能甚至没有那么重要。每种工具都可能有特定的使用技巧。这是最重要的。你 如何在一个东西上敲打几个小时而不伤害自己?我不知道!

如果铁匠就像深奥的学问,铁匠们会给人留下这样的印象:把冶金学学得很好,就会立即 变成一个伟大的铁匠!事实上,铁匠们会把冶金学的知识作为一种荣誉的象征!事实上, 铁匠们会把冶金学知识作为一种荣誉勋章,并会看不起那些不了解冶金学的人。然而,我 认为,当你被要求用锤子砸东西的时候,了解不同金属的特性并不是那么有用!我想,这 也是我的工作!

是什么让你成为一个好的铁匠,是一个更资深的同事在一天的时间里可以向你解释的所有 事情。你应该注意什么?为什么是

你不能通过学习教科书来学习一个专业

53

为了这个特定的目的,使用这个工具比使用那个工具更好?你如何从不知道如何拿锤子到 建立起做好这项工作所需的肌肉力量和握力的技巧?

而且,是的,我怀疑冶金学可能很重要。它可能是其中一种成分,如果与广泛的实践相结 合,将使你达到工匠水平。然而,如果你只知道冶金学,如果你把所有的精力都放在学习 冶金学上,我不相信你有机会达到那个水平。

[40] 104种铁匠工具:终极指南 锤子的类型包括:顶满锤、奶酪满锤、铁匠手锤、十字钳、德国方脸十字钳、瑞典十字钳 、法国十字钳、捷克锤、球钳、直钳、斜钳、凿钳、剪钳、刨钳、日本铁匠、圆钳、锉钳、雪橇、铁匠平钳和顶满钳。

54

你不能通过学习教科书来学习一个专业

关于找工作 就业能力是最难谈论的话题之一。根本没有直截了当的答案。

最好的方法是学习别人是如何做到的。途径会像采取这些途径的人一样多种多样。

然而,一些主题在许多故事中是共同的。世界已经改变。简历已经失去了它的大部分力量 。而对于没有理想的教育背景的人来说,[41] ,或者名字听起来很 "白 "[42] ,它首先就没有 很多功效。有更好的方法,可以把你带到更有趣的地方。

一个更好的方法是在那些能够做出或影响招聘决定的人聚集的地方与他们见面。这就是在 论坛、社交媒体、会议和聚会上,或通过你的博客文章的文字。

这个游戏只有一个名字,那就是可信度。通过展示你的工作,通过帮助他人,你不仅对世 界产生了积极的影响,而且还证明了你能做一些非同小可的事情。一些在专业环境中很有 可能有价值的事情。你正在投射出一个专业知识的光环。

此外,随着你分享的一切,你正在扩大知道你存在的人的圈子。这不会在一夜之间发生, 但人们迟早会开始向你伸出援手,告诉你一些你可能不会听到的机会,以及一般公众可能 不知道的情况。

建立你的数字财产是一个伟大的战略。然而,一个更积极的方法

关于找工作

55

也可以是有益的。

如果你正在积极寻找工作,一定要公开地告诉全世界。将这一信息添加到你在Twitter上 的名字中。把它包括在你的Twitter简介中。把它放在你的博客文章的底部。通过电子邮 件与你的熟人联系。

获得你想要的东西的最好方法是向认识你并有能力帮助你的人伸出援手。人们的善意是不 可估量的。

[41] 雇佣行为往往更多的是为了确定你是否有理想的血统,而不是测试与工作相关的技能。homebrew的创造者的这条推 特是这种现象的一个很好的例子。在面试中,他被要求完成一项与他在工作中可能会做的事情不同的任务。程序员不会花时 间在白板上写出他们可以在维基百科上找到的信息。这样做的技能是在大学环境中获得的。他没有能力完成这项任务,这超 过了他不可否认的编程专长。面试不是在测试他与工作相关的技能,而是测试他是否在一个特定的环境中获得了这些技能。 [42] 这里有两篇关于招聘过程中固有的偏见的研究,只考虑名字:Emily和Greg比Lakisha和Jamal更容易就业吗?关于劳 动力市场歧视的实地实验,新的CSI研究揭示了英国少数民族所面临的高水平的就业歧视。这个问题研究得很透彻,许多结 果都已在网上公布。

56

关于找工作

深度学习党在Twitter上 Twitter是深度学习社区的聚集地。在那里,你会发现这个领域的创始人,其中包括 Geoffrey Hinton, Yann LeCun, 和Jürgen Schmidhuber。许多你可能会读到的论文的 研究人员也在那里。然后是Kaggle大师,有丰富经验的专业人士,以及那些可能在他们的 旅程中比较早的人,但他们往往有非常有趣和有价值的见解可以分享。

这是一个很好的环境,可以成为其中的一部分。你可以聆听那些正在做惊人事情的人的声 音。通过阅读他们的信息,你可以一窥他们的世界。此外,这也是一个与研究和趋势保持 联系的好方法。这个系统并不完美,但许多最有前途的发展可能会在Twitter上浮现,并 引起你的注意。

你如何开始使用Twitter?这不是一个容易回答的问题。Twitter的许多方面并不明显。 GUI是不直观的,可能需要相当多的时间来学习人们如何互动。

你注册后要做的第一件事是挑选几个人进行跟踪。杰里米-霍华德和雷切尔-托马斯都是很 好的选择,可以列入你最初的选择。大多数研究人员只在推特上介绍他们的工作,但杰里 米和雷切尔不遗余力地扩大值得倾听的声音。

在这一点上,你可能很想跳进去,加入对话。在大多数情况下,推特作者欢迎评论,并将 乐意回答你的问题。在最坏的情况下,你的评论会被搁置。

你现在也可以与你的朋友和同事交流。如果你关注他们,很有可能他们也会关注你,并且 会

深度学习党在Twitter上

57

想听听你的意见。

好消息是,在这一点上,你已经完成了。你现在使用Twitter的方式是以最少的精力投入 带来最大的价值。

到此为止可能是好的。在你现实生活的社交圈之外增加你的追随者,虽然很有收获,但也 可能非常费力。本书中没有空间让我告诉你如何去做这件事,但如果你选择更积极地使用 Twitter,至少让我分享几个想法,希望能让你安全。

推特,就像其他社交媒体公司一样,雇佣了数十名技术高超的工程师,他们的唯一目的就 是让你紧紧地盯着屏幕。你在Twitter上花的时间越多,你看到的广告就越多,公司赚的 钱就越多。

为了达到这一目标,Twitter利用最先进的算法和它所收集的关于你的喜好的大量数据。 它不会回避向你展示会引起情绪反应的内容,而且会这样做,而不关心这些内容是否对你 有好处。在这个过程中,它采用的许多机制都是专门针对你的心理盲点而设计的。

当我们使用社交媒体时,我们实际上是将自己与可以无限获取数据的超级计算机对立起来 ,我们在这个过程中以我们的福祉为代价。这样做是一个灾难的秘诀。让我们来看看我们 可以做些什么来限制伤害。

我的第一个建议是禁用算法时间线。我仍然记得在我做出这一改变之前使用Twitter的感 觉。每一天,我都会花45分钟以上的时间滚动浏览我真正觉得有趣的信息。我将了解这个 或那个政治家对这个或那个问题的看法。

58

深度学习党在Twitter上

对我来说很重要。此外,来自互联网各地的最引人入胜的故事似乎也神奇地汇聚到我的时 间线上。我感到很高兴,也很疲惫。我可以滚动几个小时,但却没有任何东西可供展示。 从长远来看,我并没有学到任何值得了解的东西,而且插在24小时的新闻周期中让人士气 低落。

在我改用按时间顺序排列的时间轴后,大部分的烦扰都消失了。有的时候,我 在Twitter 上只花了5分钟就结束了。我再也不会因为推特认为我关注的人不够吸引人而不给我看他 们的推文了。我重新获得了大量的精神空间,可以将其用于更有价值的追求。我的注意力 是有限的,我很感激我能够多花一分钟和我的孩子们在一起,或者花在写这本书等活动上-早些时候,我会把这些时间浪费在对抗永无止境的内容冲击上。

我的第二个建议是禁用通知。否则,Twitter会把你手机的每一次振动变成非常令人上瘾 的多巴胺冲击。[43]

确保在你工作时没有打开Twitter标签也是一个好主意。每一次分心都会让你疲惫不堪, 并大大削减你提供高质量工作的能力。

了解社交媒体使用的许多策略并不能限制它们对你的情绪产生的影响。在观察了使用 Twitter对我的影响后,我现在更进一步。我的手机上不再有Twitter,我也不知道我的 Twitter密码。这样一来,我在旅途中就无法查看Twitter。我也尽量推迟在起床后看推特 的时间,而且我尽量在看推特之前做尽可能多的创造性工作。这些当然感觉是微小的变化 ,但它们使世界变得不同。

总而言之,Twitter对我来说是个奇迹。通过阅读一些最有经验的人的想法,我极大地改 变了我的思维方式。

深度学习党在Twitter上

59

我可以想象的有趣的人。这是无价之宝。

但是,尽管有许多美妙的方面,Twitter必须小心处理。如果不加控制,它将吞噬你的生活 。

[43] Your Undivided Attention "播客的前两集(第一集,第二集)对于了解使社交媒体如此上瘾的原因非常好。

60

深度学习党在Twitter上

分享你的工作 "我们 我们不





经验...

我们 学习

从对

经验的反思中"。 — 约翰-杜威

你在公共场合所做的行为在你周围织成了一张网。每当你发推特、发表博文或分享 GitHub仓库时,你就增加了一个新的部分,开始向世界传递你的信誉。但这张网也在另 一个方向起作用,让好事回到你身上。赞扬可以建立你的信心。接触到新的想法。甚至可 能是合作的邀请,这将使你的桌子上有食物,或你的车库里有更好的汽车。

这种效应被称为个人品牌效应。[44]它是一种不可忽视的力量。对许多人来说,包括我自己 ,这是一个不容易接受的概念,但它的效用是不可否认的。

然后还有其他原因来分享你的工作。

当你决定公开一些事情的时候,你就会更好地理解 "完成 "是什么样子。你有一个里程碑来 努力实现。"当我分享这个和这个的时候,我将完成这个阶段的项目,为了让我舒服地做到 这一点,这个和这个需要完成。"当你有一个最终状态的愿景时,完成一件事会更容易和更 快。

分享也自然迫使你反思你的工作。你组织你的想法,而且很多时候,你会发现你不会有的 东西。你加强了你的个人思想网络。

你要学会更好地沟通。 分享你的工作

61

你增加了你编写和组织代码的清晰度。在编写深度学习代码时保持理智的唯一方法是采取 将引入错误的机会降至最低的做法。编写更干净、更简洁的代码,是这方面的一个基石。

你会成为一个更好的编码者。代码是用来给人阅读的。通过在写作时考虑到这一意图,你 会毫不费力地成为一个更好的开发者。

最后但同样重要的是,经济人早已死亡。他只在过时的经济教科书中继续生存。我们进化 为生活在紧密的群体中,而且在大多数情况下,我们是利他主义的。[45]为了给经济学提供 数学上的严谨性并证明资本主义的合理性而发明的人,一个在任何时候都被自己的自我利 益所支配的人,在大多数情况下不是我们。[46]只有精神病患者在面对稀缺资源时才会有无 限的贪婪。

合作的倾向是我们最强烈的本能之一。当我们分享我们的工作并向他人解释如何做某事时 ,我们是在帮助别人,并且我们付出了我们的真实自我。这可以导致我们对生活的满意度 提高,并有更强的目标感。现在,谁不希望有更多这样的机会呢?

[44] 个人品牌建设可以非常强大。没有人比Rachel Thomas在她的一篇博文《与个人品牌和平相处》中更好地解释这个概 念。 [45] 见Gintis等人的《解释人类的利他行为》。 [46] 关于这一点的精彩处理,将经济学与物理学并列,从进化的角度重写经济学,见《财富的起源》:财富的起源:经济 学的彻底重塑及其对商业和社会的意义》,作者Eric D. Beinhocker。这是我读过的最好的书之一。

62

分享你的工作

何时开始分享你的工作 越早越好!

作为一个新事物,你有超能力。你注意到什么是挑战。你学会克服它。这使你有无穷无尽 的东西可写

有些文章你在以后的时间里简直是无法写的。以下是我的一个这样的例子。

当我开始使用PyTorch时,我遇到了许多对我来说似乎不直观的事情。我弄清楚了所有这 些东西的工作原理,并以我的经验水平可以理解的语言进行交流。撰写这篇文章使我能够 反思我的经验,并在更深的层次上理解PyTorch。它帮助我学习和保留信息。除此之外, 有几个人发现这篇文章很有用,并对我的工作产生了兴趣。

这个创造过程还有一个重要的层面,也是尽早开始的有力论据。

何时开始分享你的工作

63

我们每制作一件作品,都会磨练我们的沟通技巧,这可能是非常宝贵的。

图4.我在评论杰克-布彻的一条非常有见地的推文。

你还可能发现,与分享你的工作相关的负面后果非常少,如果有的话。我们经常与公开做 事相关的恐惧都没有显现出来。我们最可能面临的负面结果是人们根本不关心我们倾注了 大量心血的东西。这是令人不快的,但与我们可能想象到的一些负面后果相比,还差得很 远!

64

何时开始分享你的工作

我很害怕分享我的作品!帮助! 这没关系,我们都是如此。

这就是最好的营销人员对出版的看法:

图5.杰克-布彻的一条推特。

我们不需要为我们所尝试的事情做得那么好。

但同样的原则也适用。重点是便宜。无论我们与世界分享什么,我们得到的反馈都不会让 我们付出任何代价。我们想象中可能遭受的所有声誉成本只存在于我们的头脑中。

如果你发布的东西不是很好,或者人们没有注意到,在99.999%的情况下,其结果是沉默 。这是不愉快的,但这是就后果而言的。

图6.杰克-布彻的另一条非常有见地的推特。

我很害怕分享我的作品!帮助!

65

分享你的工作需要情感能量。但每当你对它感到低落,或每当你对你分享的东西不满意时 ,有一个解决办法。简单地删除它。没有人会注意到。没有人会介意。这是人们所做的事 情,而且做得很多。我一直都在做这件事。

做任何你需要做的事情,不仅使实验的实际成本低,而且使情感成本低。在这一过程中, 收集告诉世界你的工作的好处。

66

我很害怕分享我的作品!帮助!

在分享你的工作时应关注什么 说说你的经验。这是我们所有人都能提供的最有价值的东西之一。通过向人们展示你所做 的和如何做的,以及你一路走来的感受和取得的成果,你绘制了一张地图,其他人可以效 仿,并证明什么是可能的。这是很有价值的。

你不一定要对你的专业知识以外的话题发言。你可以,但你不一定要这样做。你不需要涉 足政治,或谈论你的午餐是什么,或告诉我们你的孩子。

你可以把你所有的情感能量集中在讲这一个目前对你的职业很重要的话题上,或者是你正 在尝试学习的东西。它可以是深度学习。它可以是GANs,也可以是图像分割的最新进展 。你可以让它成为你想要的窄范围。

你可以从一个非常安全的、非个人化的空间开始,然后从那里开始。你可以根据你的选择 分享你自己,但你不必分享任何东西。事实上,特别是在开始的时候,你越是讲你的经验 ,越是讲你获得的结果,而不是其他,你的网上旅程就越容易,也可能越有效。

在分享你的工作时应关注什么

67

不要忽视重要的东西 社交媒体上的认可可以让人陶醉。你在Kaggle比赛中表现出色而得到的赞誉可能会让你觉 得自己已经成功了。

但是千万不要忘记你为什么要做这些努力。做这些的主要原因是为了学习。

在这方面,社交媒体尤其棘手。你可能会看到所有这些账户在那里,每天发五次推特,有 一百万的粉丝。这是值得向往的事情吗?

好吧,如果作为一个内容创作者是你的事,那可能是。但以这种方式使用社交媒体往往是 一项全职工作,需要很多专业技能。更重要的是,可能对学习有很大帮助的文章和推文, 可能与旨在增加你的粉丝数量的内容有很大不同

你只需拥有少量的追随者,只得到几个喜欢,就能收获我在本书中描述的所有好处--或者 根本不使用社交媒体!你可以通过社交媒体来获得所有好处!为了说服自己,请重读本书 的任何一章,看看你是否需要大量的受众来应用我所概述的任何技术。如果我的工作做得 好,答案应该是一个响亮的否定。

社交媒体尤其危险。它向我们抛出了一切,让我们相信虚荣的指标(喜欢、粉丝数)才是 最重要的。[47]它不惜一切代价来扭曲我们对周围世界的看法。

当你在社交媒体上分享你的内容时,你是在玩火,你需要不断提醒自己这个世界的真正运 作方式。你不需要在社交媒体上大展拳脚来获得你的第一份深度学习工作。你需要

68

不要忽视重要的东西

不需要有追随者就可以利用公开学习的机会。

图7.一条关于我认识的几乎所有最好的DL工程师都有的特点的推文。

分享你的工作,与社区联系,建立你的可信度,最重要的是在这个过程中学习。

但是,不要追逐计算机中毫无意义的比特--喜欢的数量、追随者的数量--相反,你可以追逐 你的梦想。

[47] 为了实现这一目标,社交媒体利用了赌场中的用户界面元素,特别是老虎机。你可以通过收听这期《你的全神贯注》 播客来了解更多这方面的信息。

不要忽视重要的东西

69

为重要的事情留出心理空间 "心态平和是创造性工作最重要的前提条件"。 — Richard Feynman

退出Facebook的决定是我做过的最好的决定之一。

图8.我做出了有史以来最好的决定之一。

你需要心理空间,以便在任何有价值的努力中取得进展。如果你让有吸引力但质量低劣的 想法进入你的脑海,它们会挤掉其他一切。

Facebook是非常危险的,因为它有一个最先进的算法创建的Feeds。它擅长于提供那些目 前看起来对你很有趣的内容,但没有留下任何积极的长期影响。

70

为重要的事情留出心理空间

它也给你一个非常有限的能力来策划你看到的东西。你会取消与接受阴谋论的叔叔的好友 关系吗?或者你的同事只是需要分享他们的孩子有多可爱,并且每天都要分享10次?

推特更好,因为它让你有一些能力来定制你的信息。最重要的是,在取消关注某人的过程 中,几乎没有什么社会污名。你拥有你所看到的东西。定期修剪你所关注的人,并删除那 些不能为你的生活带来价值的人,这不是一个很好的选择,而是一个必须的选择。

但即使这样可能也不够。社交媒体会引起兴奋,担心别人会怎么想,以及无尽的决策。我 应该对我的一个同事的这个帖子做出反应吗?我应该对这个昨天刚评论了我的分享的人说 什么?

所有这些使你疲惫不堪。它耗尽了你可以给你重要的东西的能量。你的头脑变成了浆糊, 你失去了长期思考的能力。

我通过Twitter学到了很多东西,它为我提供了不可否认的价值。但我想尽量减少我为此 付出的代价。

一个策略是推迟你一天中第一次看Twitter的时间。

我醒来的时候有一个新鲜的头脑。我先做我最有创意的工作。只有在那时,我才会使用 Twitter。现在我已经失去了一些创造力和情感能量。我从上推特中得到了价值,而且我 已经把损害降到了最低。但即使过了这一步,我也需要确保我不是一直在Twitter上。也 许我一天会检查五次Twitter。在一个真正的好日子里,我更接近于一次。

然后,在夜里,我的头脑复位了,我准备好开始新的一天。

为重要的事情留出心理空间

71

要投入余热,就得找一个导师 一个好的导师是在你关心的事情上非常出色的人。他们还需要愿意向你详细解释如何做上 述事情,并使用一种你容易理解的语言。

导师不需要认识你,甚至不需要知道你的存在。与你的导师有直接关系是很好的,但这往 往会将你限制在你的直接朋友圈或专业熟人圈中。寻找一个正在做世界级水平的事情,并 且愿意与你分享他们的知识的人,可能更有好处。这样的人,根据你想学习的内容,可能 不会和你生活在同一个大陆上。或者这个人可能很久以前就已经去世了。

一般来说,我们要平衡两个相互竞争的方面。一方面,如果你的导师在某些重要方面与你 相似,这是件好事。这将使你更容易理解你的导师所说的内容。如果他们曾经在类似的道 路上走过,他们也将能够更好地讲述你的情况。

另一方面,你要向新的想法开放。我们的想法越多,我们就越能有效地处理任何特定的情 况。倾听那些与我们不同的人的意见是实现这一目标的最快途径。

需要认识到的一点是,一个人越是成功,就有越多的人想和他们交谈。许多成功人士希望 能得到帮助。但他们也想过正常的生活,花时间与他们的家人在一起,做日常的事情,如 睡觉、吃饭和散步。如果他们与每一个向他们伸出援手的人进行交谈,他们就无法做到这 些!

72

要投入余热,就得找一个导师

值得庆幸的是,这并不是问题所在。许多潜在的导师不遗余力地创造材料,花了相当多的 时间来创造,但可以被多少人消费而不给作者带来负担。这些材料可能是课程、书籍、 Twitter话题或访谈。这是你与你的导师最好的接触方式。

这并不是说,向人们伸出援手,向他们寻求帮助或建议是不可取的。但是要尽可能地使你 的信息简洁明了,并减少你所接触的人的负担。

此外,如果你确实与你的导师互动,通过论坛或其他一些公共媒介进行互动可能是好的。 AMAs在这方面效果很好。这样,其他人也将有机会从你收到的答案中受益。

总之,导师可以通过书籍或讲座、GitHub问题或推特进行交流。所需要的只是我们去做 工作,去翻阅与我们情况相关的材料。我们生活在一个信息可以在几毫秒内传遍全球的时 代,越来越多的人可以自由地追求他们的激情(可能是教别人),这是一个非常好的时代 ,可以找到一个在他们的工作中是世界级的导师,即使他们了解你的存在的唯一途径是你 写给他们的感谢信。或者甚至不是那样。

要投入余热,就得找一个导师

73

fast.ai学生的最大遗憾 在fast.ai的学生完成课程时,最常听到的遗憾是什么?"我希望我花更多的时间来编码和实 验,而不是花更多的时间来进行传统意义上的学习。"

我在 "从不会编程到深度学习专家 "一章中讨论了围绕这个问题的考虑。但考虑到这一点有 多重要,它值得从不同的角度再看看。请看我下面的推文、

图9.我在参加fast.ai课程时发了一条推特。

詹姆斯-克雷尔对可能阻碍我们进行更多实践的因素的观察是无价的

请注意我使用的语言--60%的实践与40%的 "真正的学习"!在我写这篇文章的时候,我已经 取得了一些进展,但我仍然非常拘泥于学校系统向我灌输的旧模式。我使用的语言让我了 解了自己的想法。

我仍然喜欢学习和了解事物的运作方式。满足我的好奇心是我所做的许多事情背后的驱动 力。这个世界是令人兴奋的,我想

74

fast.ai学生的最大遗憾

来更好地了解它!

但我现在知道,了解某件事情如何运作的最短路径是通过实践。没有实践,你可能只是在 建造沙子的城堡。只有当你采取行动时,你才能将你的理解付诸实践。此外,你可以收到 关于你的行动的直接反馈,这也是一个美妙的学习环境!

我今天要如何改写我的推文呢?为了学习新东西,我的目标是花80%的时间去做,20%的 时间去读理论。这两种活动都是真正的学习!

fast.ai学生的最大遗憾

75

持久性是一切 在他那本精彩的书(与Sylvain Gugger合著)Deep Learning for Coders with Fastai and PyTorch:没有博士学位的人工智能应用》中,杰里米-霍华德写道:

霍华德在多次采访中发表了类似的声明,其中包括这里。

我在这个旅程中已经走到了第八个年头。我赢得了Kaggle比赛,并且正在写一本关于机器 学习的书。但在大多数时候,我觉得自己是个初学者。我写的代码有bug。我 在这本书中 描述的战术执行得并不完美。在这八年里,我说过的蠢话可能比值得记住的事情还要多。

但我继续得到更好的结果。我不知道有谁会比我更惊讶于这一点!

我环顾四周,看着一路上遇到的人。他们来自不同的背景,有不同的起点。我的假设是, 如果你深入了解他们,或者深入了解我,你会对我们的平凡感到惊讶。说到我,普通甚至 不是一个好词。易受骗,被误导,关心那些与长远发展无关的事情 - 所有这些都能更好地描述我。

然而,我们在这里,你正在阅读我写的这些文字。我终于有了一份我非常满意的工作,在 一个以报酬丰厚而闻名的行业。

76

持久性是一切

我不能不同意杰里米-霍华德的观点。他遇到的人比我多得多,思想也更敏锐。唯一明显的 区别因素是一个人的坚持程度。

如果你有一张好的地形图,我希望这本书可以提供,你可以比我更快地到达有趣的结果。 尽管如此,有一件事是肯定的。在任何特定时刻,当你投入工作时,你几乎无法注意到你 的生活有什么不同。但你坚持的时间越长,这段旅程就越有意义。学习是复杂的,在你开 始看到指数级的结果之前,你需要给它时间。

将坚持与社区参与结合起来,你就无法被阻止。

持久性是一切

77

改变是关于不做什么 我们是习惯的创造者。

要采用更好的做事方式,挑战不仅在于采取新的方法,更在于停止我们到现在为止的做事 方式。后者往往比前者更难。

或者,换句话说,为了迎接新的事物,我们需要和旧的事物说再见。

这如何转化为学习呢?让我们设想一下,我们希望更多关注实践,更少关注理论学习。如 果到现在为止,你每天花一小时阅读教科书,其余时间看电视,那么解决方案不是在你的 一天中增加更多的时间。你只有有限的精力和时间储备。你需要首先从你的一天中抽出一 些东西,这样你才能用新的东西来取代它们。

要离开我们所处的轨道是非常困难的,所以要转向一个新的目的地,把你不再做的事情列 出来是有帮助的。仅仅是意识到哪些行为对追求你的目标不再有帮助这一行为,就会非常 有价值。

我在参加fast.ai课程时无意中发现了这个想法。专注于不做什么对我来说真的很有效。你 可以在这里阅读更多关于我所做的事情。

以下是基本相同的概念,但从另一位fast.ai学生Sanyam Bhutani的角度讨论。

78

改变是关于不做什么

学习可能就够了 从我决定离开公司的职业生涯到我接到第一个自由职业者任务的6年时间里,我的战略包 括100%的学习。

有许多其他的活动,我可以专注于此。网络。写博客。然而,当我刚开始的时候,所有这 些似乎都是可怕的,不合理的。

在我的学习过程中,我认识了一两个人。我还写了几篇帖子。然而,重点一直是学习。碰 巧的是,在这个过程中,有几个人了解了我正在从事的工作,或者说,写帖子最终成为学 习的一个好方法。

我想说的是这个:即使你只专注于学习,无论学习对你意味着什么,你都有很大的机会会 好起来。

一个很好的学习策略是这样的,我已经很不完美地遵循了这一策略:

• 观察你是否得到了你想要的结果 • 如果你不是,就改变你的方法

将你的精力投入到这种方法中,可能是你需要做的唯一一件事,从长远来看是没有问题的 ,不管你可能或不可能做任何其他事情。

学习可能就够了

79

关于指导的更多观点 接受指导,直接向更有经验的人学习,接受他们的教导,接受直接的帮助--所有这些都是 一个成功、充实的职业生涯的核心。

毫无疑问,上述说法是正确的。我们可以尽力而为,但如果没有那些拥有强大网络、技能 或资本的人向我们伸出援手,要想利用我们的努力就会难上加难。

在这个小章节中,我想与大家分享关于指导的三个观点,这些观点非常有价值。在你扮演 学生角色的情况下,他们可以向你展示有效的前进方式。在你是老师的情况下,他们可以 向你展示你可以对他人的生活产生什么积极影响。

我在 "要调动余热,就得找导师 "一章中分享了关于辅导的一个观点。然而,这是一个有细 微差别的问题,倾听其他声音对我们有利。以下是这些声音。

当你在寻找一个导师时,开始的一个方法是无许可学徒制。你通过首先给予价值来获得价 值。这可能看起来是一个突破性的真理,但它是每一种关系的核心所在。

是否有其他方法来吸引志同道合者的注意?你可以不直接问他们就开放自己接受行业内最 好的人的教导吗?是的,你可以。你可以在这里读到这个想法,它被编入 "公开学习 "的名 称。

这个想法到底有多强大?

80

关于指导的更多观点

图10.杰里米-霍华德关于 "公开学习 "博文中提出的观点。

现在,如上所述的关系在实践中会如何展开?这里有一种可能性。

图11.Hamel Husain分享他通过开放源码接受指导的经验。

这里可能是对导师可用的各种行动的最好、最简洁的描述:

关于指导的更多观点

81

图12.克里斯-阿尔本的专职导师能做什么。

最后,这一切都归结为一个人抬起另一个人。

图13.人们成名的部分原因是有人决定让他们成名,作者是雷切尔-托马斯。

82

关于指导的更多观点

利用社区的力量,更快地学习 当我们成为学习者社区的一部分时,我们学习得最快。我们观察别人是如何做事的,并掌 握一些微妙但改变游戏规则的细节,这是我们从书本上无法学到的。我们不需要重新发明 轮子来做每一件事,而是改编由许多其他学习者在我们之前微调的蓝图。

观察一个和你一样的人,并且做你希望能够做的事情,有一种纯粹的魔力。你会受到启发 。你不再需要在黑暗中寻找处理事情的方法;相反,你可以适应那些明显有效的策略。

最重要的是,我们以最少的努力获得所有这些好处。我们进化到作为社区的一部分生活。 这是我们的自然环境。当然,在线社区并不完全模仿我们所习惯的线下团体。根据你居住 的地方,也可能有文化差异在起作用。但在大多数情况下,成为一个受欢迎的团体的一部 分是有动力和乐趣的。许多友好的在线社区将欢迎你,无论你有多活跃。你可以尽情地分 享,或者你可以只是闲逛和阅读(尽管一般来说,你越活跃,你将获得更多的价值)。

你和一群友好的人混在一起,不费吹灰之力就能吸收许多宝贵的东西。有什么不爱的呢?

现在,一些在线社区确实是有毒的。但对于我所接触到的机器学习社区来说,这并不是事 实。在这方面,作为机器学习从业者,我觉得我们非常幸运。

利用社区的力量,更快地学习

83

就个人而言,我是一个性格内向的人,总是会对与人交谈感到紧张。我从来没有预料到, 我可以从成为团体的一部分中受益。当我开始学习编程和做机器学习时,我的想法是只专 注于获取知识,不参与任何互动。然后我开始在fast.ai论坛上提问。我慢慢地开始敞开心 扉,与那些和我非常相似的人交谈,他们正在学习和我一样的东西,遇到了同样的障碍。 随着时间的推移,我开始看到这些交流的价值,我的方法也改变了。

尽管我现在很欣赏社区的作用,但它并不总是这样的。而且无论如何,我不是这个问题的 专家。因此,我决定联系社区领导人,即我所钦佩的人,以分享他们的见解,我们都可以 从中学习。以下是他们告诉我的情况。

84

利用社区的力量,更快地学习

激发活力 在这一章中,我分享了我的一部分故事,它给了我写这本书的能量。

然而,在我们深入讨论之前,我想谈谈两件事。首先,我不是一个医学专家。虽然我写的 东西是以个人经验和研究为基础的,但它不是医疗建议。如果你计划对生活方式进行重大 改变,请咨询你的医生。

第二,我所概述的具体情况和解决方案都不是很重要。然而,最重要的主题是。虽然你的 情况可能与我大不相同,但很可能你还是可以从学习我如何养成新的健身习惯和更加注意 饮食的过程中受益。

在我的深度学习旅程中,最有力的经历是发现了fast.ai课程。我下面概述的内容有可能与 之匹配。

过去的美好时光 不久前,我还拥有世界上所有的精力。我在上下班途中学习,并做了一整天的编码工作。 然后我回到家,吃了晚饭,和我的家人在一起。一旦我家里的每个人都很快睡着了,我就 拿起一瓶啤酒或一杯威士忌,然后开始晚上的学习课程。我喜欢这其中的每一秒钟。

写下这些文字,我觉得我是在描述别人,而不是我。我不想再做那么多工作了。但即使我 这样做,我也无法做到这一点。

随着几个月过去,我开始经历更多的压力。我开始睡不好觉

激发活力

85

并不得不多喝咖啡。在电脑屏幕前呆了近30年后,我的背部开始疼痛。不久,我在举起很 重的东西时,背部受到了严重伤害。

我感到很痛苦,整天都很痛苦。花了几个星期才恢复。即使如此,我也很难坐超过一个小 时。这种情况持续了几个月。在某些日子里,我几乎不能强迫自己做两个小时的工作。我 的思维很迟钝,一切都感觉不集中。我所有的精力都用在了过日子上。

扭转局势 我尝试了几件事,但都没有太好的效果。我做的第一件事是限制我对身体的伤害程度。我 买了一张站立式办公桌和一个坐球,并举起了我的显示器。[48]然而,虽然我不再给自己造 成太大的伤害,但我仍然感到很疲惫。

我尝试了几种活动,如跑步、游泳、瑜伽课,以及与私人教练一起训练。但效果甚微。事 后看来,我怀疑问题的部分原因是,每周进行一两次训练就不可能取得有意义的进展。

大的转折是在我达到不同的目的时发生的。我决定从周一到周五,每天在家里做瑜伽。我 把周末留给康复和与家人的户外活动。我也觉得已经准备好尝试一种全新的心理方法。

形成一种习惯 我每天都以瑜伽为优先事项开始。其他一切都在其次。我有一些工作上的事情要做吗?瑜 伽是第一位的。当我的妻子出差参加培训时,我是否要独自照顾孩子几天?只要是

86

激发活力

孩子们都吃饱了,很高兴,前几分钟都在做瑜伽。

要说服自己采取这种方法并不容易。然而,我在绳索上,愿意尝试任何事情。

我采用了另一个关键因素:我不再逼迫自己。我尽可能地让自己避免失败。有些时候,我 只练习了5分钟--这也没什么!其他时候,我就练习了10分钟!在其他日子里,我练习了 10分钟。然而,这些日子导致了像现在这样的一周。最短的课程是20分钟,但45分钟的课 程并不觉得是什么负担。

惊人的事情开始发生了。每天移动你的身体似乎与每天学习有同样的效果。而且,事实证 明,如果你让自己容易成功,你就会成功。

今天我完成了我的第16周,没有错过任何一天。我现在睡得更好,不再有背痛的感觉。把 这种练习作为我一天的核心,改变了我的生活。我的乐观情绪、清晰的思维和能量水平已 经慢慢恢复。然而,我最近又遇到了另一种练习,它在这三个方面给我带来了令人难以置 信的直接提升。

你吃什么和什么时候吃很重要 有更多的精力是好的。不受背痛之苦也很好。但是,我的一小部分人仍然珍视精神敏锐度 高于一切。

如果今天有人来问我,"拉狄克,在未来48小时内完成最高量的脑力劳动的最佳方法是什 么?",我的回答很简单:"停止进食"。

我们没有进化到在所有清醒的时间里都要消化一些东西。森林里没有卖小吃的小卖部。几 步之遥的地方没有冰箱 激发活力

87

离我们睡觉的地方很远。

我们的身体是极其复杂的、自我调节的机制。然而,如果我们不按规则行事,我们就会给 工作带来麻烦。

最近的很多科学都支持我的说法,而且结果很吸引人。虽然我在这本书中没有空间涵盖所 有内容,但我将描述对我有效的方法,也会向你推荐你可以学到更多的资源。

对我有用的东西 我醒来后喝水或咖啡。我只有在感到饥饿时才进食,有时直到中午或下午1点才进食。无 论如何,我不会在上午10点之前吃第一餐,而且我尽量不在下午6点之后进食。

这被称为时间限制的饮食,其主要好处是恢复荷尔蒙平衡。它使你的身体从消化中得到休 息,并停止将胰岛素泵入你的血液。

我做出的第二个微小改变是限制我的糖摄入量。糖会产生快速的胰岛素反应;不幸的是, 研究表明,人工甜味剂在这方面可能更糟糕。果糖是另一种需要注意的化合物。它完全绕 过你的荷尔蒙,直接进入肝脏,在那里被储存为脂肪。除此之外,我试图避免加工碳水化 合物,主要是白面。就这样吧。

在大多数情况下,我遵守这些规则,但肯定不是一直如此。本周六我将有一次长途驾驶, 我很确定我会在麦当劳吃饭。晚上9点和家人一起看电影时,我会沉迷于他们可能吃的任 何零食。大多数时候坚持遵守规则就足够了。

88

激发活力

每当我吃得少时,我就觉得......很兴奋。我可以更长时间地专注于工作,而且在一天结束 时不会感到那么累。

今后的发展方向 我的医生向我推荐的两本书是迈克尔-莫斯利博士的《快速800》和冯杰博士的《肥胖密码 》。

营养学背后的科学是迷人的,但我仍然认为自己是一个相当朴实的人。为此,我想把一位 伟大的绩效教练Brad Stulberg的一条推文留给大家。

Namaste! [48] 在家工作的基本建议:廉价和简单的人体工程学设置是Rachel Thomas的一篇文章,详细介绍了一个伟大的人体工程 学设置可能是什么样子,无论你的预算是多少。

激发活力

89

谢谢你 首先,感谢你,亲爱的读者。正是因为有你,我才得以探索我的一个梦想。

最重要的是,我想感谢我最伟大的老师,杰里米-霍华德。我所知道的关于机器学习的几乎 所有实用知识,都是从他那里学到的。此外,他还启发我研究我们如何学习。他鼓励我写 作和分享我的工作。他不顾自己的声誉,分享了我的各种作品,这些作品往往并不那么好 。这对我的工作产生了兴趣,对我坚持下去很有帮助。他的支持已经改变了我的生活。他 对我的帮助和启发之多,无法一一列举。

我还要感谢Rachel Thomas,她通过她极具指导意义的博客文章和推特与我分享了关键的 见解,没有她,我一开始就不会了解fast.ai。

我还要感谢我的父母。他们向我灌输了这样的信念:学习,即使是以正规教育的低级形式 ,也是重要的。我的父亲已经去世,他有一种企业家精神。很可能,他与我分享了他的一 些倾向,对此我很感激。

最后但同样重要的是,我要感谢我的家人。我的妻子继续为我们的小组注入爱,并创造了 滋润的环境,使写这样一本书成为可能。我的孩子们使写这本书和其他许多事情变得有价 值。

90

谢谢你