如何高效入门 PyTorch ?

PyTorch 入门,坑着实不少。咱们来谈谈,如何选个合适的教程,避开它们。

image

选择

好几位读者,都留言问我:

王老师,我想学深度学习,到底是该学 Tensorflow ,还是 PyTorch?

没有水晶球,我也不知道谁会最终胜出

从现状来看,PyTorch 的发展势头非常迅猛。在深度学习的顶会上,相关论文增速大幅超越 Tensorflow 。

Javaid Nabi 总结了一张最近两年 arxiv 机器学习论文中提及 PyTorch 的折线图,增长趋势一目了然。

image

在机器学习顶会 NeurIPS 2019 上,PyTorch 更是被单独拿出来讨论。

image

底下的听众,是这样的。

image

而另一边,Google 的 Tensorflow 2.X 版本,在 Reddit 上正被吐槽和围观。

image

如果你是个应用机器学习前沿技术的研究者,却还对 PyTorch 的存在熟视无睹,恐怕不是一个明智的选择。

你该依赖的,是深度学习研发领域的生态系统。具体的原理,我在《学 Python ,能提升你的竞争力吗?》和《数据科学入门后,该做什么?》两篇文章里,已经给你详细阐释过了。

简单来说,别人都用来沟通和协作的东西,你一窍不通,那就没法愉快参与协作了。深度嵌入到系统的协作能力,才是你赢得竞争的秘密武器

例如,有人把 Google 的 BERT 从 Tensorflow 迁移到 PyTorch 后,就迅速开拓了一个评价高达 18.4K 颗星的项目。该项目受到学术界、工业界,乃至整个儿开发圈子的热情追捧。

image

为什么?

因为在 PyTorch 模型的基础上进行修改,非常方便,一切都是那么自然和透明。这吸引了许多研究者参与进来,一步一个脚印,利用别人做出来的东西,更进一步攀爬。

如果你做研究用到机器学习,需要站在前人的肩膀上,那 PyTorch 已经成为了你爬上别人肩膀的重要阶梯

可当你信心满满,开始认真学习 PyTorch 时,多半会……

掉在前方的陷坑里。

想想看,为什么网上为初学者展示深度学习“多么简单”的文章,举的例子除了 Keras 就是 fast.ai ,而不是 PyTorch ?

因为 PyTorch 学起来,确实没有它们那样简便。

障碍

你要学习 PyTorch ,会遇到哪些问题?

太多了。

篇幅所限,咱们只讲其中最大的两个坑

首先是面向对象(Object-Oriented Programming, OOP)。

PyTorch 的代码,当然也可以写成 Keras 那种序列化形式。

image

然而对于大部分的 PyTorch 用户的应用场景来说,写成那样,是没有什么意义的。

因为他们中的主体,是研究者。研究者不会满足于现有结果或者重复已知模型。他们要搭建自己的模型结构,尝试做自己的实验。

如果你要深度定制自己的模型架构,甚至对于一些细节作出精妙的修改(例如对不同模型层次,使用不同学习速率),那 PyTorch 写出来,就会像是这个样子。

image

看到 class 这样的陌生关键词,你可能会觉得有些发懵——用 Python 有段时间了,没见过这玩意儿啊。

Python 说简单很简单,因为它可以被当成脚本语言来使用。也就是用顺序循环判断组织起来,类似英文的操作说明。

image

然而,说复杂,它也可以变得非常复杂。因为它完全可以被当成面向对象语言来用。

许多标题里带着“入门”字样的 PyTorch 教材或者课程,往往会直接假设你已经掌握了面向对象编程的基础知识,一带而过。或者干脆告诉你,先去学习一下 OOP ,然后再回来继续学。

于是,你打开一本讲授面向对象编程的书,旋即被其中的“抽象”、“继承”、“封装”、“多态”等术语绕晕,轻松完成“从入门到放弃”。

image

其实,你根本用不着完全掌握 面向对象程序设计的各种要素,就可以学 PyTorch 。早有 William Falcon 等人把 PyTorch 的程序写法大卸八块,给了你模板。真正用的时候,你只需对着模板填空就好。

image

可是,一些必要的面向对象知识,还是得学。不然填空你都不知道该填的位置,容易张冠李戴。

说完了“面向对象”,咱们再说第二个坑,也就是“张量”(Tensor)。

PyTorch 让许多研究者用户大呼过瘾的奥秘,其实就在于“张量”。

image

因为高阶 API,例如 Keras, 甚至是 fast.ai ,都对张量进行了重度包裹

用户不需要理解什么是张量,也可以做图片分类,也可以分析文本的情感。

image

但是,PyTorch 不想惯你这种毛病。

想用它来搭建神经网络?你就必须直面张量。

你必须能够说清楚每一层输入和输出张量的样子。你必须知道怎么把你的原始数据,转换成这种样子。

这种负担,看似会惹恼或者吓走用户。然而我们看问题不能只看一面。它的好处在于,代码书写规则,一下子变得简洁一致

因为你早已一杆子到底,知道在 PyTorch 深度学习模型构建中,最本质的操作究竟是什么。你不需要别人每次都为你提供高层 API 包裹的拐棍

你可以随时知道怎么完成各种操作。例如怎样修改设置细节。遇到意想不到的问题,也能了解如何高效查错。

可是要理解张量,并不像 Pandas 数据框那么简单而直观。

你会看到不少 PyTorch 的书籍和教程,都干脆指引你去学会 numpy 。然后告诉你,PyTorch 可以近似看成 numpy 的一个轻量包裹。作者其实,是在寄希望于你能自学好一大块知识结构,并且还可以触类旁通

image

你怎么通?

从头学 numpy ?还是更进一步,把线性代数也学一遍?

这样做,听起来没有问题。打牢基础是好事儿嘛。但是,你可能真的等不及。

你可能是想要复现一篇论文里的结果,并且进行调整改进。

等你耐下性子,东一榔头西一棒子,学完了刚才说过的好几门基础课,别人的论文早就发出来了。

大多数时候,科学界只奖励先到者。第二名不会有任何的功劳(credit)。

况且,如果能这样学完,你至少还掌握了一项技能。

更大的可能,是你在自学相关知识体系的途中跌倒了,再也没有爬起来。

痛点

为什么 PyTorch 初学者,会遭遇这些困境?

因为现有的教程,大多与你不匹配

甚至就连 PyTorch 的预期用户,也和你不匹配。

PyTorch 的设计,显然不是为了完全不懂编程的普通用户。按照作者原先的预想,只有学过了线性代数、科学计算、数据结构和面向对象程序设计的专业人士,才是它的核心用户群体。

然而,深度学习的突破进展,像一个黑洞,吸引力异常强大。它把许多从来没有学过编程的人,都裹挟了进来。

在机器学习日新月异的进展下,太多领域存在着低垂的果实。只要你学会了应用现有深度学习工具,稍加改进就可以采摘到它们。

这种诱惑,你能抵挡吗?

对这个突然冒出来的人群,现有的教材和教程,很难做出足够快速和必要的调整。所以你学起来,会很吃力。

那么,作为一个非计算机类专业出身的研究者,你需要什么样的教程呢?

它应该至少有以下两个特点:

  • 一站式
  • 样例导向

所谓一站式,就是别只顾给出链接和线索,让读者东奔西走,甚至还得自己寻找相关的学习资源。遇到某个知识点,例如面向对象,或者张量,试图从头到尾完整学习体系知识,显然效率不高。做深度学习需要用到的,就该认真掰开揉碎讲清楚;暂时用不到的,就根本先不要提,免得让学习者被一下子涌来的信息淹没掉。

所谓样例导向,就是能有实际的例子,让学习者跟着作者讲解的进程,轻松上手操作实践。有些知识点,只要上手了,练过,犯过错,你立即就能明白其中的关窍。你从而迅速掌握,并且建立宝贵的成就感。反之,如果只是给你凭空灌输一系列的概念,或许能让你听着好像懂得了。可真正要用的时候,你立即就会感受到什么叫“书到用时方恨少”。

满足上述两个必要条件的合适教程,有吗?

教程

不好找。

要满足上述两点,教程的编写者就需要长期的技能培养和打磨。技能不仅包括对于 PyTorch 本身的深入理解和掌握,还得充分理解初学者的需求,知道如何把握讲授的进度节奏

这还不够。作者还得寻找合适的样例,用形象化的方式表述抽象概念,甚至是用动态的效果展示张量操作与权重变化……这些,都需要耗费大量宝贵的时间。

大部分机器学习领域的教材和教程,在编写的时候,都有严格的时间进度限制。这个领域,一直是高强度竞争性。大家生怕自己的东西发布晚了,别人抢占先机,所以很难有足够的耐心。东西做到60分,能有一定合适的阅读学习群体,那还不赶紧发布?等什么?

另外,拥有这种技能的作者,往往机会成本非常高。能够全心全意投入教学,而不选择拿着自己高超的深度学习应用技能出去赚快钱,也非易事。

我最开始学 PyTorch 时,尝试了若干主流 MOOC 平台,还见识了不少网红教师的教程。可惜,不仅学得效率低,过程也很痛苦。

后来,我终于找到一套视频课程,真的可以满足上述两点要求。

image

譬如说,它将张量和面向对象知识的介绍,包含在了课程里面。作者用浅明易懂的例子,让你了解必要概念和技能后,迅速上手。

为了让你能够做一个图像分类深度学习模型,作者真的精心设计,帮你把它拆分成若干前后联系紧密的模块,一一娓娓道来。

视频中使用了不少特效和动画。例如帮助你理解一张图片如何转化成张量,如何经由你自行构造的模型加以转化,最终支持机器判断类别,以及如何计算损失,迭代改进,让你的分类模型越变越聪明。

image

甚至,对于为什么 GPU 可以加速深度学习,都有专门的章节,给你娓娓道来。

image

每一个视频,大约都是10分钟-20分钟的长度。足够慢慢谈透一个知识点,也不会让你觉得疲倦。

大部分视频,都结合代码来介绍。你可以打开 Google Colab 或者 Kaggle Notebook ,利用免费的 GPU ,尝试自己建构和运行。

image

视频末尾,还总是有一些有趣的彩蛋。为了不剥夺你的乐趣,就不剧透了,你自己看。

为了保证视频的品质,这套教程精细打磨。从2018年秋天开始发布第一个视频起,一直持续更新了一年多的时间,才算全部制作完毕。

我学的时候,看教程是很愉快的。但是等候更新如同追剧,总是让人觉得时间过得太慢,很难熬。

好消息是,你现在不用等了。因为该教程所有的篇章都已齐备。你只需学就好了。

羡慕你。

在我的公众号“玉树芝兰”后台,回复“pytorch”,我会发给你全套视频教程的链接。

小结

这篇文章里,咱们谈到了以下知识点,我帮你梳理一下。

  • PyTorch 在科研领域作用日益重要,你如果做深度学习科研,恐怕是不得不学习它;
  • PyTorch 包含了一些面向对象、张量操作等前导知识要求,初学者会有不小的学习障碍。所以选择好的教程很重要;
  • 在良莠不齐的 PyTorch 教程中,我把自己已发现的最精良一个视频教程推荐给你。希望它也能帮你快速上手 PyTorch,助你早日做出自己的优秀研究成果。论文发表了,别忘请我喝杯咖啡。

祝深度学习愉快!

读过本文,如果觉得有收获,请点赞

要读更多的文章,微信关注我的公众号“玉树芝兰”(nkwangshuyi)。别忘了加星标,以免错过新推送提示。

如果本文对你身边的亲友有帮助,也欢迎你把本文通过微博或朋友圈分享给他们。

延伸阅读

你可能也会对以下话题感兴趣。点击链接就可以查看。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容