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