Pytorch學(xué)習(xí)系列教程:入門簡介
導(dǎo)讀
新的一年還是要肝起來啊,這個公眾號節(jié)前節(jié)后沉寂了快兩個月了,許久沒更新原創(chuàng)推文,自己感覺不能再這樣墮落下去了。所以最近一直在思考寫些什么推文:既要符合當(dāng)下工作所需,倒逼成長;也要于廣大讀者有益,而非單純的推銷運營。
于是,終于決定“染指”深度學(xué)習(xí)方向,并打算先更新一波Pytorch學(xué)習(xí)教程。當(dāng)然,這會是一個系列。

torch,原意“火炬”

網(wǎng)圖,侵刪
這里,深度學(xué)習(xí)的深度主要體現(xiàn)為構(gòu)建的模型層數(shù)較多,故稱之為“深”;但其實這里隱藏著一個重要假設(shè),就是構(gòu)建的模型都以神經(jīng)元作為網(wǎng)絡(luò)的最小單元,所以嚴謹?shù)闹v應(yīng)叫做基于神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)。自然,也可以不基于神經(jīng)網(wǎng)絡(luò),比如周志華團隊前幾年探索提出了深度隨機森林模型,可謂是提出了深度學(xué)習(xí)的一個新的研究思路。
從理論研究到工業(yè)應(yīng)用,其中必然少不了成熟的工業(yè)級實現(xiàn)。以python語言為基礎(chǔ),對于經(jīng)典的機器學(xué)習(xí)模型,那么必然人人皆知scikit-learn;而若提及深度學(xué)習(xí),則相應(yīng)的工具包則不那么“集中和統(tǒng)一”,甚至稱得上是大廠紛爭之地。其中,最具代表性和廣泛使用的當(dāng)屬TensorFlow和Pytorch,前者源于google,后者發(fā)于Facebook;前者以工業(yè)應(yīng)用居多,后者則流行于學(xué)術(shù)界。當(dāng)然,單論學(xué)術(shù)界還是工業(yè)界而言,二者也沒有明確的界限。
起初,在了解到TensorFlow廣泛應(yīng)用工業(yè)界,而自己早已遠離院校所以就直接入坑了TensorFlow,當(dāng)了一段時間的TF boy,尤其是了解到TensorFlow2.0克服了早期1.0版本飽受詬病的靜態(tài)圖問題,所以也不認為TensorFlow有啥缺點。但后來,隨著學(xué)習(xí)的深入,加之通過周邊同事的了解,發(fā)現(xiàn)Pytorch有著更為優(yōu)秀的特點:比如與Numpy的設(shè)計更為接近,語法風(fēng)格更加Pythonic等等。所以,個人也就果斷轉(zhuǎn)投Pytorch陣營。
本文作為第一篇,僅用來介紹Pytorch能干什么,以及對為什么這么設(shè)計的個人理解。
Torch是一個老牌的深度學(xué)習(xí)框架,最早是基于lua語言開發(fā)的,由于其開發(fā)語言的小眾性,所以其發(fā)展和應(yīng)用也是受到了很多限制。自從Facebook開源了Python生態(tài)圈的Torch工具包——Pytroch之后,其就一直是匹敵TensorFlow的一個重量級工具。目前Pytroch在GitHub上獲得54k star(TensorFlow目前在GitGHub上獲得163k star,差距還是比較大的,大概有3倍之多)。
也正是由于深度學(xué)習(xí)最廣泛的舞臺在于圖像和語音以及文本等應(yīng)用方向,所以與Pytorch配套的三個工具包以及一個模型服務(wù)工具包:
torchvision
torchtext
torchaudio

當(dāng)然,Pytorch仍然是基礎(chǔ)和核心

即:
支持GPU加速的Tensor計算能力
支持自動求導(dǎo)的深度神經(jīng)網(wǎng)絡(luò)構(gòu)建
那么問題來了:都說Pytorch是一個深度學(xué)習(xí)工具,為什么其核心功能設(shè)計為如上兩點?對此,個人理解如下:
其一:Tensor是深度學(xué)習(xí)模型構(gòu)建和訓(xùn)練的基礎(chǔ),其地位就好比是array之于Numpy、DataFrame之于Pandas,其本身是一種數(shù)據(jù)結(jié)構(gòu),但卻構(gòu)成了Pytorch的靈魂所在。這里,Tensor英文原義為“張量”,其實就是對應(yīng)一個多維數(shù)組,本質(zhì)上跟numpy的ndarray是一致的。
從這一角度來看,Pytorch可視作是numpy的升級版,這里的升級主要體現(xiàn)為可以利用GPU的強力并行計算能力。如果有Numpy基礎(chǔ),學(xué)習(xí)Pytorch其實可以很簡單;另一方面,學(xué)Pytorch也完全可以作為是對Numpy的一個補充,而不去考慮構(gòu)建深度學(xué)習(xí)模型的用途。
其二:Pytorch定位為一個深度學(xué)習(xí)工具,其更為主體的功能在于支持深度學(xué)習(xí)模型的構(gòu)建和訓(xùn)練。與此同時,與經(jīng)典機器學(xué)習(xí)中有成熟模型不同的是,深度學(xué)習(xí)網(wǎng)絡(luò)大多沒有固定的模型或范式,而一般由使用者將多個基礎(chǔ)模塊靈活搭配來組成(當(dāng)然,其實也有一些成熟的模型,例如LeNet-5、AlexNet和VGGNet等,但更普遍的仍然需要使用者自己去定制),所以Pytorch對深度學(xué)習(xí)的支持不在于集成了多少成熟的模型,而在于提供了基礎(chǔ)的深度學(xué)習(xí)模塊,這些就好似腳手架一般,可以任意組合搭配,從而實現(xiàn)更為自由定制化的功能。

本篇推文就寫這么多,對標(biāo)從工具入門到模型建模,后續(xù)將每周更新一篇Pytorch學(xué)習(xí)系列推文。

相關(guān)閱讀:
