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