FastAI 之书(面向程序员的 FastAI)(八)

第二十章:总结思考

原文:www.bookstack.cn/read/th-fastai-book/cedc7ab42349d210.md 译者:飞龙 协议:CC BY-NC-SA 4.0

恭喜!你成功了!如果你已经完成了到这一点的所有笔记本,你已经加入了一个小但不断增长的人群,他们能够利用深度学习的力量解决实际问题。你可能不会觉得这样—事实上,你可能不会。我们一再看到完成 fast.ai 课程的学生明显低估了自己作为深度学习从业者的效力。我们也看到这些人经常被具有传统学术背景的其他人低估。所以如果你要超越自己的期望和他人的期望,那么在关闭这本书后,你接下来要做的事情比你到目前为止所做的更重要。

最重要的是保持动力。事实上,从你对优化器的研究中知道,动量是可以自我增强的!所以想想你现在可以做些什么来维持和加速你的深度学习之旅。图 20-1 可以给你一些想法。

接下来要做什么
图 20-1。接下来要做什么

在这本书中,我们谈了很多关于写作的价值,无论是代码还是散文。但也许你到目前为止还没有写得像你希望的那样多。没关系!现在是一个扭转局面的好机会。此时你有很多话要说。也许你已经在一个数据集上尝试了一些实验,其他人似乎没有以同样的方式看待。告诉世界!或者你可能正在考虑尝试一些在阅读时想到的想法——现在是把这些想法转化为代码的好时机。

如果你想分享你的想法,一个相对低调的地方是fast.ai 论坛。你会发现那里的社区非常支持和乐于助人,所以请过来告诉我们你在做什么。或者看看你是否可以回答一些问题,帮助那些在学习早期的人。

如果你在深度学习之旅中取得了一些成功,无论大小,请务必告诉我们!在论坛上发布这些信息尤其有帮助,因为了解其他学生的成功可以极大地激励人们。

对许多人来说,保持与学习之旅的联系最重要的方法之一是围绕它建立一个社区。例如,你可以尝试在你当地社区设立一个小型深度学习聚会,或者一个学习小组,甚至可以在当地聚会上做一个关于你到目前为止学到的内容或者你感兴趣的某个特定方面的演讲。你现在还不是世界领先的专家也没关系——重要的是要记住你现在知道很多其他人不知道的东西,所以他们很可能会欣赏你的观点。

另一个许多人发现有用的社区活动是定期的读书俱乐部或论文阅读俱乐部。你可能已经在你的社区找到了一些,如果没有,你可以尝试开始一个。即使只有另一个人和你一起做,也会帮助你获得支持和鼓励,让你开始行动起来。

如果你不在一个容易与志同道合的人聚在一起的地方,可以去论坛,因为人们总是在组建虚拟学习小组。这些通常涉及一群人每周一次通过视频聊天讨论一个深度学习主题。

希望到这一点,你已经有了一些小项目和实验。我们建议你的下一步是选择其中一个,并尽可能把它做得更好。真正把它打磨成你能做到的最好作品——一件让你真正自豪的作品。这将迫使你更深入地了解一个主题,测试你的理解,并让你看到当你全力以赴时你能做到什么。

此外,您可能想看一下fast.ai 免费在线课程,它涵盖了与本书相同的内容。有时,以两种方式看同样的材料确实有助于澄清思路。事实上,人类学习研究人员发现,学习材料的最佳方式之一是从不同角度看同一件事,用不同的方式描述。

如果您选择接受最后的任务,那就是把这本书送给您认识的某人,并帮助另一个人开始他们自己的深度学习之旅!

附录 A. 创建博客

原文:www.bookstack.cn/read/th-fastai-book/a54eca534010f193.md 译者:飞龙 协议:CC BY-NC-SA 4.0

在第二章中,我们建议您可能希望尝试博客作为帮助消化您正在阅读和练习的信息的一种方式。但是如果您还没有博客呢?应该使用哪个平台呢?

不幸的是,当涉及博客时,似乎您必须做出一个困难的决定:要么使用一个使事情变得容易但会让您和读者受到广告、付费墙和费用的平台,要么花费数小时设置自己的托管服务并花费数周学习各种复杂的细节。也许“自己动手”方法最大的好处是,您真正拥有自己的帖子,而不是受制于服务提供商及其关于如何在未来变现您的内容的决定。

然而,事实证明,您可以兼得两全!

使用 GitHub Pages 进行博客

一个很好的解决方案是在一个名为GitHub Pages的平台上托管您的博客,这是免费的,没有广告或付费墙,并以标准方式使您的数据可用,以便您随时将您的博客迁移到另一个主机。但是,我们看到的所有使用 GitHub Pages 的方法都需要了解命令行和只有软件开发人员可能熟悉的神秘工具。例如,GitHub 的官方文档中关于设置博客的说明包括安装 Ruby 编程语言,使用git命令行工具,复制版本号等一长串指令,总共有 17 个步骤!

为了减少麻烦,我们创建了一种简单的方法,允许您使用完全基于浏览器的界面来满足您所有的博客需求。您将在大约五分钟内启动并运行您的新博客。这不需要任何费用,如果您愿意,您可以轻松添加自己的自定义域名。在本节中,我们将解释如何做到这一点,使用我们创建的名为fast_template的模板。(注:请务必查看书籍网站以获取最新的博客推荐,因为新工具总是不断涌现。)

创建存储库

您需要一个 GitHub 账户,所以现在前往那里并创建一个账户(如果您还没有)。通常,GitHub 是由软件开发人员用于编写代码的,他们使用一个复杂的命令行工具来处理它,但我们将向您展示一种根本不使用命令行的方法!

要开始,请将浏览器指向https://github.com/fastai/fast_template/generate(确保您已登录)。这将允许您创建一个存储博客的地方,称为存储库。您将看到一个类似于图 A-1 的屏幕。请注意,您必须使用此处显示的确切格式输入您的存储库名称,即您的 GitHub 用户名后跟.github.io

创建新存储库的 GitHub 页面的屏幕截图
图 A-1. 创建您的存储库

一旦您输入了这些内容,以及您喜欢的任何描述,点击“从模板创建存储库”。您可以选择将存储库设为“私有”,但由于您正在创建一个希望其他人阅读的博客,希望公开可用的基础文件对您来说不会成为问题。

现在,让我们设置您的主页!

设置您的主页

当读者访问您的博客时,他们将首先看到一个名为 index.md 的文件的内容。这是一个 Markdown 文件。Markdown 是一种强大而简单的创建格式化文本的方式,比如项目符号、斜体、超链接等等。它被广泛使用,包括 Jupyter 笔记本中的所有格式,几乎 GitHub 网站的每个部分,以及互联网上的许多其他地方。要创建 Markdown 文本,您只需输入普通英语,然后添加一些特殊字符以添加特殊行为。例如,如果您在单词或短语前后输入 * 字符,那将使其变为 斜体。现在让我们试一试。

要打开文件,请在 GitHub 中点击其文件名。要编辑它,请点击屏幕最右侧的铅笔图标,如 图 A-2 所示。

显示点击编辑文件的位置的截图
图 A-2. 编辑此文件

您可以添加、编辑或替换您看到的文本。点击“预览更改”按钮(图 A-3)查看您的 Markdown 文本在博客中的样子。您添加或更改的行将在左侧显示为绿色条。

显示点击预览更改的位置的截图
图 A-3. 预览更改以捕捉任何错误

要保存更改,请滚动到页面底部,然后点击“提交更改”,如 图 A-4 所示。在 GitHub 上,提交 意味着将其保存到 GitHub 服务器。

显示点击提交更改的位置的截图
图 A-4. 提交更改以保存它们

接下来,您应该配置您的博客设置。要这样做,请点击名为 _config.yml 的文件,然后点击编辑按钮,就像您为 index 文件所做的那样。更改标题、描述和 GitHub 用户名值(参见 图 A-5)。您需要保留冒号前的名称不变,并在冒号后(和每行的空格后)输入您的新值。如果愿意,您还可以添加您的电子邮件地址和 Twitter 用户名,但请注意,如果在此处填写它们,它们将出现在您的公共博客上。

显示配置文件和如何填写的截图
图 A-5. 填写配置文件

完成后,像处理 index 文件一样提交您的更改;然后等待一两分钟,让 GitHub 处理您的新博客。将您的网络浏览器指向 .github.io(将 替换为您的 GitHub 用户名)。您应该看到您的博客,它看起来类似于 图 A-6。

显示网站用户名.github.io 的截图
图 A-6. 您的博客已上线!

创建文章

现在您已经准备好创建您的第一篇文章了。您所有的文章都将放在 _posts 文件夹中。现在点击它,然后点击“创建文件”按钮。您需要小心使用格式 ---.md 命名您的文件,就像 图 A-7 中所示,其中 是一个四位数, 和 是两位数。 可以是任何您想要的,可以帮助您记住这篇文章是关于什么的。.md 扩展名是用于 Markdown 文档的。

显示创建新博客文章的正确语法的截图
图 A-7. 命名您的文章

然后,您可以输入第一篇文章的内容。唯一的规则是您的文章的第一行必须是一个 Markdown 标题。这是通过在行的开头放置 # 创建的,如 图 A-8 中所示(这将创建一个一级标题,在文档开头只需使用一次;您可以使用 ## 创建二级标题,使用 ### 创建三级标题,依此类推)。

显示博客文章开头的截图
图 A-8. 标题的 Markdown 语法

和之前一样,你可以点击预览按钮查看你的 Markdown 格式会是什么样子(图 A-9)。

显示用 HTML 解释的相同博客文章的截图
图 A-9. 之前的 Markdown 语法在你的博客上会是什么样子

你需要点击“提交新文件”按钮将其保存到 GitHub,如图 A-10 所示。

显示点击提交新文件的位置的截图
图 A-10. 提交更改以保存它们

再次查看你的博客首页,你会看到这篇文章现在已经出现了——图 A-11 展示了我们刚刚添加的示例文章的结果。请记住,你需要等待一分钟左右让 GitHub 处理请求,然后文件才会显示出来。

显示博客网站上第一篇文章的截图
图 A-11. 你的第一篇文章已发布!

你可能已经注意到我们提供了一个示例博客文章,你现在可以继续删除。像之前一样,转到你的*_posts文件夹,点击2020-01-14-welcome.md*。然后点击最右边的垃圾桶图标,如图 A-12 所示。

显示如何删除模拟文章的截图
图 A-12. 删除示例博客文章

在 GitHub 中,直到你提交,什么都不会真正改变——包括删除文件!所以,在你点击垃圾桶图标后,滚动到页面底部并提交你的更改。

你可以通过添加一行 Markdown 来在你的帖子中包含图片,就像下面这样:

代码语言:javascript
复制
![Image description](https://gitcode.net/OpenDocCN/ibooker-dl-zh/-/raw/master/docs/dl-cdr-fai-pt/img/filename.jpg)

为了使这个工作起效,你需要将图片放在你的images文件夹中。要做到这一点,点击images文件夹,然后点击“上传文件”按钮(图 A-13)。

显示如何上传新文件的截图
图 A-13. 从你的计算机上传文件

现在让我们看看如何直接从你的计算机上完成所有这些操作。

同步 GitHub 和你的计算机

有很多原因你可能想要将你的博客内容从 GitHub 复制到你的计算机上——你可能想要能够离线阅读或编辑你的帖子,或者也许你想要备份以防发生什么事情影响了你的 GitHub 存储库。

GitHub 不仅让你将存储库复制到你的计算机上;它还让你同步它与你的计算机。这意味着你可以在 GitHub 上进行更改,它们会复制到你的计算机上;你也可以在你的计算机上进行更改,它们会复制到 GitHub 上。你甚至可以让其他人访问和修改你的博客,他们的更改和你的更改将在下次同步时自动合并。

为了使这个工作起效,你需要在你的计算机上安装一个叫做GitHub 桌面的应用程序。它可以在 Mac、Windows 和 Linux 上运行。按照安装说明进行安装,当你运行它时,它会要求你登录 GitHub 并选择要同步的存储库。点击“从互联网克隆存储库”,如图 A-14 所示。

显示如何克隆你的存储库的截图
图 A-14. 在 GitHub 桌面上克隆你的存储库

一旦 GitHub 完成同步你的存储库,你就可以点击“在资源管理器中查看存储库文件”(或 Finder),如图 A-15 所示,你将看到你博客的本地副本!尝试在你的计算机上编辑其中一个文件。然后返回到 GitHub 桌面,你会看到同步按钮等待你按下。当你点击它时,你的更改将被复制到 GitHub,你将在网站上看到它们的反映。

显示克隆存储库的截图
图 A-15. 本地查看你的文件

如果你以前没有使用过git,GitHub 桌面是一个很好的开始方式。正如你将会发现的,它是大多数数据科学家使用的基本工具。我们希望你现在也喜欢的另一个工具是 Jupyter Notebook——你也可以直接用它来写博客!

博客的 Jupyter

您还可以使用 Jupyter 笔记本撰写博客文章。您的 Markdown 单元格、代码单元格和所有输出都将出现在您导出的博客文章中。在您阅读本书时,最佳方法可能已经发生了变化,因此请查看书籍网站获取最新信息。截至目前,从笔记本创建博客的最简单方法是使用fastpages,这是fast_template的更高级版本。

要使用笔记本撰写博客,只需将其放入您的博客存储库中的*_notebooks*文件夹中,它将出现在您的博客文章列表中。在撰写笔记本时,写下您希望观众看到的内容。由于大多数写作平台很难包含代码和输出,因此我们许多人习惯于包含比应该更少的真实示例。这是一个很好的方法,可以养成在写作时包含大量示例的习惯。

通常,您会希望隐藏导入语句等样板代码。您可以在任何单元格顶部添加#hide,使其不显示在输出中。Jupyter 显示单元格的最后一行的结果,因此不需要包含print。(包含不需要的额外代码会增加读者的认知负担;因此不要包含您实际不需要的代码!)

附录 B. 数据项目清单

原文:www.bookstack.cn/read/th-fastai-book/b8ffc03c29b9fdcd.md 译者:飞龙 协议:CC BY-NC-SA 4.0

创建有用的数据项目远不止培训准确的模型!当 Jeremy 做咨询时,他总是试图了解组织开发数据项目的背景,基于以下考虑,总结在图 B-1 中:

战略

组织试图做什么(目标),以及如何更好地做到(杠杆)?

数据

组织是否捕获必要的数据并使其可用?

分析

组织需要哪些见解?

实施

组织有哪些能力?

维护

有哪些系统用于跟踪运营环境的变化?

约束

在前述各个领域中需要考虑哪些约束条件?

分析价值链
图 B-1. 分析价值链

他开发了一个问卷,让客户在项目开始之前填写,然后在整个项目过程中,他会帮助他们完善答案。这份问卷基于数十年来在许多行业中进行的项目,包括农业、采矿、银行、啤酒酿造、电信、零售等。

在我们深入分析价值链之前,问卷的第一部分涉及数据项目中最重要的员工:数据科学家。

数据科学家

数据科学家应该有明确的晋升路径,同时应该有招聘计划,直接将数据专家引入高级管理职位。在一个数据驱动的组织中,数据科学家应该是薪酬最高的员工之一。应该建立系统,让整个组织的数据科学家合作并互相学习。

  • 组织目前拥有哪些数据科学技能?
  • 数据科学家是如何招聘的?
  • 如何在组织内部识别具有数据科学技能的人?
  • 正在寻找哪些技能?如何评判这些技能?这些技能是如何被选定为重要的?
  • 正在使用哪种数据科学咨询?在哪些情况下数据科学被外包?这项工作如何转移到组织中?
  • 数据科学家的薪酬是多少?他们向谁汇报?他们的技能如何保持更新?
  • 数据科学家的职业发展路径是什么?
  • 有多少高管具有较强的数据分析专业知识?
  • 数据科学家的工作是如何选择和分配的?
  • 数据科学家有哪些软件和硬件可以访问?

战略

所有数据项目都应基于解决战略重要的问题。因此,首先必须先了解业务战略。

  • 组织今天最重要的五个战略问题是什么?
  • 有哪些数据可用于帮助解决这些问题?
  • 这些问题是否采用数据驱动方法?数据科学家是否在处理这些问题?
  • 组织可以最大程度影响哪些利润驱动因素?(见图 B-2。)
组织中可能是重要利润驱动因素的因素
图 B-2. 组织中可能是重要利润驱动因素的因素
  • 对于确定的每个关键利润驱动因素,组织可以采取哪些具体行动和决策来影响该驱动因素,包括运营行动(例如,致电客户)和战略决策(例如,发布新产品)?
  • 对于最重要的行动和决策,可能有哪些数据可用(无论是组织内部的,还是来自供应商,或者未来可能收集的数据),可以帮助优化结果?
  • 根据前述分析,组织内哪些是数据驱动分析的最大机会?
  • 对于每个机会:
    • 它旨在影响哪个价值驱动因素?
    • 它将推动哪些具体行动或决策?
    • 这些行动和决策将如何与项目结果联系起来?
    • 项目的预期投资回报率是多少?
    • 有哪些时间限制和截止日期可能会对此产生影响?

数据

没有数据,我们无法训练模型!数据还需要是可用的、集成的和可验证的。

  • 组织有哪些数据平台?这些可能包括数据仓库、OLAP 立方体、数据仓库、Hadoop 集群、OLTP 系统、部门电子表格等。
  • 提供已收集的任何提供组织数据可用性概述的信息,以及当前工作和未来建立数据平台的计划。
  • 有哪些工具和流程可用于在系统和格式之间移动数据?
  • 数据来源如何被不同用户和管理员访问?
  • 组织的数据科学家和系统管理员可以使用哪些数据访问工具(例如数据库客户端、OLAP 客户端、内部软件、SAS)?每种工具有多少人使用,他们在组织中的职位是什么?
  • 用户如何被告知新系统、系统变更、新的和变更的数据元素等信息?提供例子。
  • 关于数据访问限制,如何做出决策?如何管理访问受限数据的请求?由谁管理?基于什么标准?平均响应时间是多长?有多少请求被接受?如何跟踪?
  • 组织如何决定何时收集额外数据或购买外部数据?提供例子。
  • 到目前为止,用于分析最近数据驱动项目的数据是什么?发现什么是最有用的?什么是无用的?这是如何评判的?
  • 提供哪些额外的内部数据可能为拟议项目的数据驱动决策提供有用的见解?外部数据呢?
  • 访问或整合这些数据可能存在哪些潜在的约束或挑战?
  • 在过去两年中,数据收集、编码、集成等方面发生了哪些变化,可能会影响到收集到的数据的解释或可用性?

分析

数据科学家需要能够访问适合其特定需求的最新工具。应定期评估新工具,看它们是否比当前方法有显著改进。

  • 组织使用哪些分析工具?由谁使用?它们是如何选择、配置和维护的?
  • 如何在客户机器上设置额外的分析工具?完成这个过程的平均时间是多久?有多少请求被接受?
  • 外部顾问建立的分析系统是如何转移到组织中的?是否要求外部承包商限制使用的系统,以确保结果符合内部基础设施?
  • 在什么情况下使用了云处理?使用云的计划是什么?
  • 在什么情况下使用外部专家进行专业分析?这是如何管理的?专家是如何被识别和选择的?
  • 最近项目尝试过哪些分析工具?
  • 什么有效,什么无效?为什么?
  • 提供迄今为止为这些项目所做工作的任何输出。
  • 这项分析的结果如何评判?使用了哪些指标?与哪些基准进行比较?如何知道一个模型是否“足够好”?
  • 在什么情况下,组织使用可视化,而不是表格报告,而不是预测建模(以及类似的机器学习工具)?对于更高级的建模方法,模型是如何校准和测试的?提供例子。

实施

IT 约束往往是数据项目的失败原因。要提前考虑!

  • 提供一些过去数据驱动项目的成功和失败实施的例子,并提供有关 IT 集成和人力资本挑战的详细信息,以及如何应对这些挑战。
  • 在实施之前,如何确认分析模型的有效性?它们是如何进行基准测试的?
  • 如何定义分析项目实施的性能要求(速度和准确性方面)?
  • 对于拟议的项目,提供以下信息:
    • 用于支持数据驱动决策和行动的 IT 系统是什么
    • 这种 IT 集成将如何完成
    • 有哪些可用的替代方案可能需要较少的 IT 集成
    • 哪些工作将受到数据驱动方法的影响
    • 这些员工将如何接受培训、监督和支持
    • 可能出现的实施挑战是什么
    • 哪些利益相关者将需要确保实施成功,以及他们可能如何看待这些项目及其潜在影响

维护

除非仔细跟踪模型,否则可能会发现它们导致灾难。

  • 第三方构建的分析系统如何维护?何时将其转移到内部团队?
  • 如何跟踪模型的有效性?组织何时决定重建模型?
  • 数据变更如何在内部传达,以及如何管理?
  • 数据科学家如何与软件工程师合作,以确保算法正确实施?
  • 测试用例是何时开发的,如何维护?
  • 何时对代码进行重构?在重构过程中如何维护和验证模型的正确性和性能?
  • 维护和支持需求如何记录?这些日志如何使用?

约束

对于每个正在考虑的项目,列举可能影响项目成功的潜在约束。

  • IT 系统是否需要修改或开发以使用项目的结果?是否有可以避免重大 IT 变更的更简单的实现方式?如果有,使用简化实现方式将如何显著减少影响?
  • 数据收集、分析或实施上存在哪些监管约束?最近是否已经审查了相关立法和先例?可能存在哪些变通方法?
  • 存在哪些组织约束,包括文化、技能或结构?
  • 存在哪些管理约束?
  • 是否有过去的分析项目可能会影响组织对数据驱动方法的看法?