想成為深度學(xué)習(xí)的高手必須要懂哪些知識(shí)?
掃描二維碼
隨時(shí)隨地手機(jī)看文章
深度學(xué)習(xí)本質(zhì)上是深層的人工神經(jīng)網(wǎng)絡(luò),它不是一項(xiàng)孤立的技術(shù),而是數(shù)學(xué)、統(tǒng)計(jì)機(jī)器學(xué)習(xí)、計(jì)算機(jī)科學(xué)和人工神經(jīng)網(wǎng)絡(luò)等多個(gè)領(lǐng)域的綜合。深度學(xué)習(xí)的理解,離不開本科數(shù)學(xué)中最為基礎(chǔ)的數(shù)學(xué)分析(高等數(shù)學(xué))、線性代數(shù)、概率論和凸優(yōu)化;深度學(xué)習(xí)技術(shù)的掌握,更離不開以編程為核心的動(dòng)手實(shí)踐。沒有扎實(shí)的數(shù)學(xué)和計(jì)算機(jī)基礎(chǔ)做支撐,深度學(xué)習(xí)的技術(shù)突破只能是空中樓閣。
所以,想在深度學(xué)習(xí)技術(shù)上有所成就的初學(xué)者,就有必要了解這些基礎(chǔ)知識(shí)之于深度學(xué)習(xí)的意義。除此之外,我們的專業(yè)路徑還會(huì)從結(jié)構(gòu)與優(yōu)化的理論維度來介紹深度學(xué)習(xí)的上手,并基于深度學(xué)習(xí)框架的實(shí)踐淺析一下進(jìn)階路徑。
最后,本文還將分享深度學(xué)習(xí)的實(shí)踐經(jīng)驗(yàn)和獲取深度學(xué)習(xí)前沿信息的經(jīng)驗(yàn)。
數(shù)學(xué)基礎(chǔ)
如果你能夠順暢地讀懂深度學(xué)習(xí)論文中的數(shù)學(xué)公式,可以獨(dú)立地推導(dǎo)新方法,則表明你已經(jīng)具備了必要的數(shù)學(xué)基礎(chǔ)。
掌握數(shù)學(xué)分析、線性代數(shù)、概率論和凸優(yōu)化四門數(shù)學(xué)課程包含的數(shù)學(xué)知識(shí),熟知機(jī)器學(xué)習(xí)的基本理論和方法,是入門深度學(xué)習(xí)技術(shù)的前提。因?yàn)闊o論是理解深度網(wǎng)絡(luò)中各個(gè)層的運(yùn)算和梯度推導(dǎo),還是進(jìn)行問題的形式化或是推導(dǎo)損失函數(shù),都離不開扎實(shí)的數(shù)學(xué)與機(jī)器學(xué)習(xí)基礎(chǔ)。
數(shù)學(xué)分析
在工科專業(yè)所開設(shè)的高等數(shù)學(xué)課程中,主要學(xué)習(xí)的內(nèi)容為微積分。對(duì)于一般的深度學(xué)習(xí)研究和應(yīng)用來說,需要重點(diǎn)溫習(xí)函數(shù)與極限、導(dǎo)數(shù)(特別是復(fù)合函數(shù)求導(dǎo))、微分、積分、冪級(jí)數(shù)展開、微分方程等基礎(chǔ)知識(shí)。在深度學(xué)習(xí)的優(yōu)化過程中,求解函數(shù)的一階導(dǎo)數(shù)是最為基礎(chǔ)的工作。當(dāng)提到微分中值定理、Taylor公式和拉格朗日乘子的時(shí)候,你不應(yīng)該只是感到與它們似曾相識(shí)。這里推薦同濟(jì)大學(xué)第五版的《高等數(shù)學(xué)》教材。
線性代數(shù)
深度學(xué)習(xí)中的運(yùn)算常常被表示成向量和矩陣運(yùn)算。線性代數(shù)正是這樣一門以向量和矩陣作為研究對(duì)象的數(shù)學(xué)分支。需要重點(diǎn)溫習(xí)的包括向量、線性空間、線性方程組、矩陣、矩陣運(yùn)算及其性質(zhì)、向量微積分。當(dāng)提到Jacobian矩陣和Hessian矩陣的時(shí)候,你需要知道確切的數(shù)學(xué)形式;當(dāng)給出一個(gè)矩陣形式的損失函數(shù)時(shí),你可以很輕松的求解梯度。這里推薦同濟(jì)大學(xué)第六版的《線性代數(shù)》教材。
概率論
概率論是研究隨機(jī)現(xiàn)象數(shù)量規(guī)律的數(shù)學(xué)分支,隨機(jī)變量在深度學(xué)習(xí)中有很多應(yīng)用,無論是隨機(jī)梯度下降、參數(shù)初始化方法(如Xavier),還是Dropout正則化算法,都離不開概率論的理論支撐。除了掌握隨機(jī)現(xiàn)象的基本概念(如隨機(jī)試驗(yàn)、樣本空間、概率、條件概率等)、隨機(jī)變量及其分布之外,還需要對(duì)大數(shù)定律及中心極限定理、參數(shù)估計(jì)、假設(shè)檢驗(yàn)等內(nèi)容有所了解,進(jìn)一步還可以深入學(xué)習(xí)一點(diǎn)隨機(jī)過程、馬爾可夫隨機(jī)鏈的內(nèi)容。這里推薦浙江大學(xué)版的《概率論與數(shù)理統(tǒng)計(jì)》。
凸優(yōu)化
結(jié)合以上三門基礎(chǔ)的數(shù)學(xué)課程,凸優(yōu)化可以說是一門應(yīng)用課程。但對(duì)于深度學(xué)習(xí)而言,由于常用的深度學(xué)習(xí)優(yōu)化方法往往只利用了一階的梯度信息進(jìn)行隨機(jī)梯度下降,因而從業(yè)者事實(shí)上并不需要多少“高深”的凸優(yōu)化知識(shí)。理解凸集、凸函數(shù)、凸優(yōu)化的基本概念,掌握對(duì)偶問題的一般概念,掌握常見的無約束優(yōu)化方法如梯度下降方法、隨機(jī)梯度下降方法、Newton方法,了解一點(diǎn)等式約束優(yōu)化和不等式約束優(yōu)化方法,即可滿足理解深度學(xué)習(xí)中優(yōu)化方法的理論要求。這里推薦一本教材,Stephen Boyd的《Convex OpTImizaTIon》。
機(jī)器學(xué)習(xí)
歸根結(jié)底,深度學(xué)習(xí)只是機(jī)器學(xué)習(xí)方法的一種,而統(tǒng)計(jì)機(jī)器學(xué)習(xí)則是機(jī)器學(xué)習(xí)領(lǐng)域事實(shí)上的方法論。以監(jiān)督學(xué)習(xí)為例,需要你掌握線性模型的回歸與分類、支持向量機(jī)與核方法、隨機(jī)森林方法等具有代表性的機(jī)器學(xué)習(xí)技術(shù),并了解模型選擇與模型推理、模型正則化技術(shù)、模型集成、Bootstrap方法、概率圖模型等。深入一步的話,還需要了解半監(jiān)督學(xué)習(xí)、無監(jiān)督學(xué)習(xí)和強(qiáng)化學(xué)習(xí)等專門技術(shù)。這里推薦一本經(jīng)典教材《The elements of StaTIsTIcal Learning》。
計(jì)算機(jī)基礎(chǔ)
深度學(xué)習(xí)要在實(shí)戰(zhàn)中論英雄,因此具備GPU服務(wù)器的硬件選型知識(shí),熟練操作Linux系統(tǒng)和進(jìn)行Shell編程,熟悉C++和Python語(yǔ)言,是成長(zhǎng)為深度學(xué)習(xí)實(shí)戰(zhàn)高手的必備條件。當(dāng)前有一種提法叫“全棧深度學(xué)習(xí)工程師”,這也反映出了深度學(xué)習(xí)對(duì)于從業(yè)者實(shí)戰(zhàn)能力的要求程度:既需要具備較強(qiáng)的數(shù)學(xué)與機(jī)器學(xué)習(xí)理論基礎(chǔ),又需要精通計(jì)算機(jī)編程與必要的體系結(jié)構(gòu)知識(shí)。
編程語(yǔ)言
在深度學(xué)習(xí)中,使用最多的兩門編程語(yǔ)言分別是C++和Python。迄今為止,C++語(yǔ)言依舊是實(shí)現(xiàn)高性能系統(tǒng)的首選,目前使用最廣泛的幾個(gè)深度學(xué)習(xí)框架,包括Tensorflow、Caffe、MXNet,其底層均無一例外地使用C++編寫。而上層的腳本語(yǔ)言一般為Python,用于數(shù)據(jù)預(yù)處理、定義網(wǎng)絡(luò)模型、執(zhí)行訓(xùn)練過程、數(shù)據(jù)可視化等。當(dāng)前,也有Lua、R、Scala、Julia等語(yǔ)言的擴(kuò)展包出現(xiàn)于MXNet社區(qū),呈現(xiàn)百花齊放的趨勢(shì)。這里推薦兩本教材,一本是《C++ Primer第五版》,另外一本是《Python核心編程第二版》。
Linux操作系統(tǒng)
深度學(xué)習(xí)系統(tǒng)通常運(yùn)行在開源的Linux系統(tǒng)上,目前深度學(xué)習(xí)社區(qū)較為常用的Linux發(fā)行版主要是Ubuntu。對(duì)于Linux操作系統(tǒng),主要需要掌握的是Linux文件系統(tǒng)、基本命令行操作和Shell編程,同時(shí)還需熟練掌握一種文本編輯器,比如VIM?;静僮鲃?wù)必要做到熟練,當(dāng)需要批量替換一個(gè)文件中的某個(gè)字符串,或者在兩臺(tái)機(jī)器之間用SCP命令拷貝文件時(shí),你不需要急急忙忙去打開搜索引擎。這里推薦一本工具書《鳥哥的Linux私房菜》。
CUDA編程
深度學(xué)習(xí)離不開GPU并行計(jì)算,而CUDA是一個(gè)很重要的工具。CUDA開發(fā)套件是NVidia提供的一套GPU編程套件,實(shí)踐當(dāng)中應(yīng)用的比較多的是CUDA-BLAS庫(kù)。這里推薦NVidia的官方在線文檔。
其他計(jì)算機(jī)基礎(chǔ)知識(shí)
掌握深度學(xué)習(xí)技術(shù)不能只滿足于使用Python調(diào)用幾個(gè)主流深度學(xué)習(xí)框架,從源碼著手去理解深度學(xué)習(xí)算法的底層實(shí)現(xiàn)是進(jìn)階的必由之路。這個(gè)時(shí)候,掌握數(shù)據(jù)結(jié)構(gòu)與算法(尤其是圖算法)知識(shí)、分布式計(jì)算(理解常用的分布式計(jì)算模型),和必要的GPU和服務(wù)器的硬件知識(shí)(比如當(dāng)我說起CPU的PCI-E通道數(shù)和GPU之間的數(shù)據(jù)交換瓶頸時(shí),你能心領(lǐng)神會(huì)),你一定能如虎添翼。
深度學(xué)習(xí)入門
接下來分別從理論和實(shí)踐兩個(gè)角度來介紹一下深度學(xué)習(xí)的入門。
深度學(xué)習(xí)理論入門
我們可以用一張圖(圖1)來回顧深度學(xué)習(xí)中的關(guān)鍵理論和方法。從MCP神經(jīng)元模型開始,首先需要掌握卷積層、Pooling層等基礎(chǔ)結(jié)構(gòu)單元,Sigmoid等激活函數(shù),Softmax等損失函數(shù),以及感知機(jī)、MLP等經(jīng)典網(wǎng)絡(luò)結(jié)構(gòu)。接下來,掌握網(wǎng)絡(luò)訓(xùn)練方法,包括BP、Mini-batch SGD和LR Policy。最后還需要了解深度網(wǎng)絡(luò)訓(xùn)練中的兩個(gè)至關(guān)重要的理論問題:梯度消失和梯度溢出。