如何高效入門 PyTorch ?

PyTorch 入門,坑著實(shí)不少。咱們來談?wù)劊绾芜x個(gè)合適的教程,避開它們。

image

選擇

好幾位讀者,都留言問我:

王老師,我想學(xué)深度學(xué)習(xí),到底是該學(xué) Tensorflow ,還是 PyTorch?

沒有水晶球,我也不知道誰會(huì)最終勝出

從現(xiàn)狀來看,PyTorch 的發(fā)展勢(shì)頭非常迅猛。在深度學(xué)習(xí)的頂會(huì)上,相關(guān)論文增速大幅超越 Tensorflow 。

Javaid Nabi 總結(jié)了一張最近兩年 arxiv 機(jī)器學(xué)習(xí)論文中提及 PyTorch 的折線圖,增長(zhǎng)趨勢(shì)一目了然。

image

在機(jī)器學(xué)習(xí)頂會(huì) NeurIPS 2019 上,PyTorch 更是被單獨(dú)拿出來討論。

image

底下的聽眾,是這樣的。

image

而另一邊,Google 的 Tensorflow 2.X 版本,在 Reddit 上正被吐槽和圍觀。

image

如果你是個(gè)應(yīng)用機(jī)器學(xué)習(xí)前沿技術(shù)的研究者,卻還對(duì) PyTorch 的存在熟視無睹,恐怕不是一個(gè)明智的選擇。

你該依賴的,是深度學(xué)習(xí)研發(fā)領(lǐng)域的生態(tài)系統(tǒng)。具體的原理,我在《學(xué) Python ,能提升你的競(jìng)爭(zhēng)力嗎?》和《數(shù)據(jù)科學(xué)入門后,該做什么?》兩篇文章里,已經(jīng)給你詳細(xì)闡釋過了。

簡(jiǎn)單來說,別人都用來溝通和協(xié)作的東西,你一竅不通,那就沒法愉快參與協(xié)作了。深度嵌入到系統(tǒng)的協(xié)作能力,才是你贏得競(jìng)爭(zhēng)的秘密武器

例如,有人把 Google 的 BERT 從 Tensorflow 遷移到 PyTorch 后,就迅速開拓了一個(gè)評(píng)價(jià)高達(dá) 18.4K 顆星的項(xiàng)目。該項(xiàng)目受到學(xué)術(shù)界、工業(yè)界,乃至整個(gè)兒開發(fā)圈子的熱情追捧。

image

為什么?

因?yàn)樵?PyTorch 模型的基礎(chǔ)上進(jìn)行修改,非常方便,一切都是那么自然和透明。這吸引了許多研究者參與進(jìn)來,一步一個(gè)腳印,利用別人做出來的東西,更進(jìn)一步攀爬。

如果你做研究用到機(jī)器學(xué)習(xí),需要站在前人的肩膀上,那 PyTorch 已經(jīng)成為了你爬上別人肩膀的重要階梯

可當(dāng)你信心滿滿,開始認(rèn)真學(xué)習(xí) PyTorch 時(shí),多半會(huì)……

掉在前方的陷坑里。

想想看,為什么網(wǎng)上為初學(xué)者展示深度學(xué)習(xí)“多么簡(jiǎn)單”的文章,舉的例子除了 Keras 就是 fast.ai ,而不是 PyTorch ?

因?yàn)?PyTorch 學(xué)起來,確實(shí)沒有它們那樣簡(jiǎn)便。

障礙

你要學(xué)習(xí) PyTorch ,會(huì)遇到哪些問題?

太多了。

篇幅所限,咱們只講其中最大的兩個(gè)坑

首先是面向?qū)ο?/strong>(Object-Oriented Programming, OOP)。

PyTorch 的代碼,當(dāng)然也可以寫成 Keras 那種序列化形式。

image

然而對(duì)于大部分的 PyTorch 用戶的應(yīng)用場(chǎng)景來說,寫成那樣,是沒有什么意義的。

因?yàn)樗麄冎械闹黧w,是研究者。研究者不會(huì)滿足于現(xiàn)有結(jié)果或者重復(fù)已知模型。他們要搭建自己的模型結(jié)構(gòu),嘗試做自己的實(shí)驗(yàn)。

如果你要深度定制自己的模型架構(gòu),甚至對(duì)于一些細(xì)節(jié)作出精妙的修改(例如對(duì)不同模型層次,使用不同學(xué)習(xí)速率),那 PyTorch 寫出來,就會(huì)像是這個(gè)樣子。

image

看到 class 這樣的陌生關(guān)鍵詞,你可能會(huì)覺得有些發(fā)懵——用 Python 有段時(shí)間了,沒見過這玩意兒啊。

Python 說簡(jiǎn)單很簡(jiǎn)單,因?yàn)樗梢员划?dāng)成腳本語言來使用。也就是用順序循環(huán)判斷組織起來,類似英文的操作說明。

image

然而,說復(fù)雜,它也可以變得非常復(fù)雜。因?yàn)樗耆梢员划?dāng)成面向?qū)ο?/strong>語言來用。

許多標(biāo)題里帶著“入門”字樣的 PyTorch 教材或者課程,往往會(huì)直接假設(shè)你已經(jīng)掌握了面向?qū)ο缶幊痰幕A(chǔ)知識(shí),一帶而過。或者干脆告訴你,先去學(xué)習(xí)一下 OOP ,然后再回來繼續(xù)學(xué)。

于是,你打開一本講授面向?qū)ο缶幊?/strong>的書,旋即被其中的“抽象”、“繼承”、“封裝”、“多態(tài)”等術(shù)語繞暈,輕松完成“從入門到放棄”。

image

其實(shí),你根本用不著完全掌握 面向?qū)ο蟪绦蛟O(shè)計(jì)的各種要素,就可以學(xué) PyTorch 。早有 William Falcon 等人把 PyTorch 的程序?qū)懛ù笮栋藟K,給了你模板。真正用的時(shí)候,你只需對(duì)著模板填空就好。

image

可是,一些必要的面向?qū)ο笾R(shí),還是得學(xué)。不然填空你都不知道該填的位置,容易張冠李戴。

說完了“面向?qū)ο蟆保蹅冊(cè)僬f第二個(gè)坑,也就是“張量”(Tensor)。

PyTorch 讓許多研究者用戶大呼過癮的奧秘,其實(shí)就在于“張量”。

image

因?yàn)楦唠A API,例如 Keras, 甚至是 fast.ai ,都對(duì)張量進(jìn)行了重度包裹

用戶不需要理解什么是張量,也可以做圖片分類,也可以分析文本的情感。

image

但是,PyTorch 不想慣你這種毛病。

想用它來搭建神經(jīng)網(wǎng)絡(luò)?你就必須直面張量。

你必須能夠說清楚每一層輸入和輸出張量的樣子。你必須知道怎么把你的原始數(shù)據(jù),轉(zhuǎn)換成這種樣子。

這種負(fù)擔(dān),看似會(huì)惹惱或者嚇走用戶。然而我們看問題不能只看一面。它的好處在于,代碼書寫規(guī)則,一下子變得簡(jiǎn)潔一致

因?yàn)槟阍缫岩粭U子到底,知道在 PyTorch 深度學(xué)習(xí)模型構(gòu)建中,最本質(zhì)的操作究竟是什么。你不需要?jiǎng)e人每次都為你提供高層 API 包裹的拐棍

你可以隨時(shí)知道怎么完成各種操作。例如怎樣修改設(shè)置細(xì)節(jié)。遇到意想不到的問題,也能了解如何高效查錯(cuò)。

可是要理解張量,并不像 Pandas 數(shù)據(jù)框那么簡(jiǎn)單而直觀。

你會(huì)看到不少 PyTorch 的書籍和教程,都干脆指引你去學(xué)會(huì) numpy 。然后告訴你,PyTorch 可以近似看成 numpy 的一個(gè)輕量包裹。作者其實(shí),是在寄希望于你能自學(xué)好一大塊知識(shí)結(jié)構(gòu),并且還可以觸類旁通

image

你怎么通?

從頭學(xué) numpy ?還是更進(jìn)一步,把線性代數(shù)也學(xué)一遍?

這樣做,聽起來沒有問題。打牢基礎(chǔ)是好事兒嘛。但是,你可能真的等不及。

你可能是想要復(fù)現(xiàn)一篇論文里的結(jié)果,并且進(jìn)行調(diào)整改進(jìn)。

等你耐下性子,東一榔頭西一棒子,學(xué)完了剛才說過的好幾門基礎(chǔ)課,別人的論文早就發(fā)出來了。

大多數(shù)時(shí)候,科學(xué)界只獎(jiǎng)勵(lì)先到者。第二名不會(huì)有任何的功勞(credit)。

況且,如果能這樣學(xué)完,你至少還掌握了一項(xiàng)技能。

更大的可能,是你在自學(xué)相關(guān)知識(shí)體系的途中跌倒了,再也沒有爬起來。

痛點(diǎn)

為什么 PyTorch 初學(xué)者,會(huì)遭遇這些困境?

因?yàn)楝F(xiàn)有的教程,大多與你不匹配

甚至就連 PyTorch 的預(yù)期用戶,也和你不匹配。

PyTorch 的設(shè)計(jì),顯然不是為了完全不懂編程的普通用戶。按照作者原先的預(yù)想,只有學(xué)過了線性代數(shù)、科學(xué)計(jì)算、數(shù)據(jù)結(jié)構(gòu)和面向?qū)ο蟪绦蛟O(shè)計(jì)的專業(yè)人士,才是它的核心用戶群體。

然而,深度學(xué)習(xí)的突破進(jìn)展,像一個(gè)黑洞,吸引力異常強(qiáng)大。它把許多從來沒有學(xué)過編程的人,都裹挾了進(jìn)來。

在機(jī)器學(xué)習(xí)日新月異的進(jìn)展下,太多領(lǐng)域存在著低垂的果實(shí)。只要你學(xué)會(huì)了應(yīng)用現(xiàn)有深度學(xué)習(xí)工具,稍加改進(jìn)就可以采摘到它們。

這種誘惑,你能抵擋嗎?

對(duì)這個(gè)突然冒出來的人群,現(xiàn)有的教材和教程,很難做出足夠快速和必要的調(diào)整。所以你學(xué)起來,會(huì)很吃力。

那么,作為一個(gè)非計(jì)算機(jī)類專業(yè)出身的研究者,你需要什么樣的教程呢?

它應(yīng)該至少有以下兩個(gè)特點(diǎn):

  • 一站式
  • 樣例導(dǎo)向

所謂一站式,就是別只顧給出鏈接和線索,讓讀者東奔西走,甚至還得自己尋找相關(guān)的學(xué)習(xí)資源。遇到某個(gè)知識(shí)點(diǎn),例如面向?qū)ο螅蛘邚埩浚噲D從頭到尾完整學(xué)習(xí)體系知識(shí),顯然效率不高。做深度學(xué)習(xí)需要用到的,就該認(rèn)真掰開揉碎講清楚;暫時(shí)用不到的,就根本先不要提,免得讓學(xué)習(xí)者被一下子涌來的信息淹沒掉。

所謂樣例導(dǎo)向,就是能有實(shí)際的例子,讓學(xué)習(xí)者跟著作者講解的進(jìn)程,輕松上手操作實(shí)踐。有些知識(shí)點(diǎn),只要上手了,練過,犯過錯(cuò),你立即就能明白其中的關(guān)竅。你從而迅速掌握,并且建立寶貴的成就感。反之,如果只是給你憑空灌輸一系列的概念,或許能讓你聽著好像懂得了。可真正要用的時(shí)候,你立即就會(huì)感受到什么叫“書到用時(shí)方恨少”。

滿足上述兩個(gè)必要條件的合適教程,有嗎?

教程

不好找。

要滿足上述兩點(diǎn),教程的編寫者就需要長(zhǎng)期的技能培養(yǎng)和打磨。技能不僅包括對(duì)于 PyTorch 本身的深入理解和掌握,還得充分理解初學(xué)者的需求,知道如何把握講授的進(jìn)度節(jié)奏

這還不夠。作者還得尋找合適的樣例,用形象化的方式表述抽象概念,甚至是用動(dòng)態(tài)的效果展示張量操作與權(quán)重變化……這些,都需要耗費(fèi)大量寶貴的時(shí)間。

大部分機(jī)器學(xué)習(xí)領(lǐng)域的教材和教程,在編寫的時(shí)候,都有嚴(yán)格的時(shí)間進(jìn)度限制。這個(gè)領(lǐng)域,一直是高強(qiáng)度競(jìng)爭(zhēng)性。大家生怕自己的東西發(fā)布晚了,別人搶占先機(jī),所以很難有足夠的耐心。東西做到60分,能有一定合適的閱讀學(xué)習(xí)群體,那還不趕緊發(fā)布?等什么?

另外,擁有這種技能的作者,往往機(jī)會(huì)成本非常高。能夠全心全意投入教學(xué),而不選擇拿著自己高超的深度學(xué)習(xí)應(yīng)用技能出去賺快錢,也非易事。

我最開始學(xué) PyTorch 時(shí),嘗試了若干主流 MOOC 平臺(tái),還見識(shí)了不少網(wǎng)紅教師的教程。可惜,不僅學(xué)得效率低,過程也很痛苦。

后來,我終于找到一套視頻課程,真的可以滿足上述兩點(diǎn)要求。

image

譬如說,它將張量和面向?qū)ο笾R(shí)的介紹,包含在了課程里面。作者用淺明易懂的例子,讓你了解必要概念和技能后,迅速上手。

為了讓你能夠做一個(gè)圖像分類深度學(xué)習(xí)模型,作者真的精心設(shè)計(jì),幫你把它拆分成若干前后聯(lián)系緊密的模塊,一一娓娓道來。

視頻中使用了不少特效和動(dòng)畫。例如幫助你理解一張圖片如何轉(zhuǎn)化成張量,如何經(jīng)由你自行構(gòu)造的模型加以轉(zhuǎn)化,最終支持機(jī)器判斷類別,以及如何計(jì)算損失,迭代改進(jìn),讓你的分類模型越變?cè)铰斆鳌?/p>

image

甚至,對(duì)于為什么 GPU 可以加速深度學(xué)習(xí),都有專門的章節(jié),給你娓娓道來。

image

每一個(gè)視頻,大約都是10分鐘-20分鐘的長(zhǎng)度。足夠慢慢談透一個(gè)知識(shí)點(diǎn),也不會(huì)讓你覺得疲倦。

大部分視頻,都結(jié)合代碼來介紹。你可以打開 Google Colab 或者 Kaggle Notebook ,利用免費(fèi)的 GPU ,嘗試自己建構(gòu)和運(yùn)行。

image

視頻末尾,還總是有一些有趣的彩蛋。為了不剝奪你的樂趣,就不劇透了,你自己看。

為了保證視頻的品質(zhì),這套教程精細(xì)打磨。從2018年秋天開始發(fā)布第一個(gè)視頻起,一直持續(xù)更新了一年多的時(shí)間,才算全部制作完畢。

我學(xué)的時(shí)候,看教程是很愉快的。但是等候更新如同追劇,總是讓人覺得時(shí)間過得太慢,很難熬。

好消息是,你現(xiàn)在不用等了。因?yàn)樵摻坛趟械钠露家妖R備。你只需學(xué)就好了。

羨慕你。

在我的公眾號(hào)“玉樹芝蘭”后臺(tái),回復(fù)“pytorch”,我會(huì)發(fā)給你全套視頻教程的鏈接。

小結(jié)

這篇文章里,咱們談到了以下知識(shí)點(diǎn),我?guī)湍闶崂硪幌隆?/p>

  • PyTorch 在科研領(lǐng)域作用日益重要,你如果做深度學(xué)習(xí)科研,恐怕是不得不學(xué)習(xí)它;
  • PyTorch 包含了一些面向?qū)ο蟆埩坎僮鞯惹皩?dǎo)知識(shí)要求,初學(xué)者會(huì)有不小的學(xué)習(xí)障礙。所以選擇好的教程很重要;
  • 在良莠不齊的 PyTorch 教程中,我把自己已發(fā)現(xiàn)的最精良一個(gè)視頻教程推薦給你。希望它也能幫你快速上手 PyTorch,助你早日做出自己的優(yōu)秀研究成果。論文發(fā)表了,別忘請(qǐng)我喝杯咖啡。

祝深度學(xué)習(xí)愉快!

讀過本文,如果覺得有收獲,請(qǐng)點(diǎn)贊

要讀更多的文章,微信關(guān)注我的公眾號(hào)“玉樹芝蘭”(nkwangshuyi)。別忘了加星標(biāo),以免錯(cuò)過新推送提示。

如果本文對(duì)你身邊的親友有幫助,也歡迎你把本文通過微博或朋友圈分享給他們。

延伸閱讀

你可能也會(huì)對(duì)以下話題感興趣。點(diǎn)擊鏈接就可以查看。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評(píng)論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,497評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,305評(píng)論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評(píng)論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,727評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,193評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,411評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,945評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,777評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,978評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,216評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評(píng)論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,657評(píng)論 3 391
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,960評(píng)論 2 373

推薦閱讀更多精彩內(nèi)容