如何評價亞馬遜的新書《動手學深度學習》
最近,亞馬遜的AI專家阿斯頓·張,李沐等合著的新書《動手學深度學習》引起了人工智慧領域的諸多關注,該書的線上預覽版本已經公開,因此能夠提前拜讀。感興趣的讀者可以直接下載對應的 ofollow,noindex">PDF 版本,也可通過其在Github上的 資源庫 編譯得到,資源庫中還包含了每個章節的程式碼,支援使用 Jupyter notebook 進行互動式學習。正如書名“動手學深度學習”,能夠學習理論的同時進行模型的除錯,以加深對所學知識的理解。官方還提供了專門的 論壇 ,方便讀者討論。

《動手學深度學習》封面
毋庸置疑,亞馬遜釋出該書的主要目的是為了推廣其深度學習框架 Apache MXNet ,書中的演算法實現均採用該框架,並提供了大量的程式碼例項。那麼除去深度學習框架部分,單純作為深度學習方面的學習資料,《動手學深度學習》是否值得一讀呢?筆者有幸通讀了全書,在此分享些對該書的主觀評價,希望對打算將該書作為學習資料的讀者提供參考。
第一部分(第1~3章)
《動手學深度學習》的第一部分內容為預備工作和基礎知識,包含三個章節,分別為引言,預備知識以及深度學習基礎。該部分篇幅不大,約佔全書的五分之一。
[ 引言 ] ① 介紹了深度學習的歷史以及最新發展情況,但並不是很全面,然後簡要說明了全書的框架。
[ 預備知識 ] ② 章節則較為詳細地講解了如何配置環境,利用Jupyter記事本使用官方釋出的資源庫來學習該書的內容。接著便講解了深度學習框架MXNet中的基本資料操作以及幫助文件的查閱。
[ 深度學習基礎 ] ③ 為第一部分的最後章節,以線性迴歸及多分類問題為起點,引出單層神經網路和多層感知機模型,闡述了深度學習的基本概念,並以房價預測( Kaggle比賽 )及影象分類( Fashion-MNIST 資料集)為例項。筆者認為安排合理,易於理解。但由於內容比較基礎,適合準備入門的讀者。對於已經有深度學習基礎的讀者,就顯得過於淺顯了。另外,如果不打算學習MXNET深度學習框架,建議程式碼實現部分可以跳過。正如書中所講:“ 儘管強⼤的深度學習框架可以減少⼤量重複性⼯作,但若過於依賴它提供的便利,我們就會很難深⼊理解深度學習是如何⼯作的。
”,通過自己去實現相應的演算法模型,能夠更好地幫助理解。
第二部分(第4~6章)
第二部內容旨在介紹現代的深度學習技術,分為深度學習計算、卷積神經網路(Convolutional Neural Netwrok, CNN)以及迴圈神經網路(Recurrent Neural Network, RNN)三個部分。
[深度學習計算] ④ 的章節名稱與實際內容不是很相稱,該章節的主要內容其實就是介紹MXNet框架中構建深度學習模型的相關操作。
[卷積神經網路] ⑤ 的內容比較明確,介紹了卷積神經網路的基本結構和相關操作,較少涉及原理。然後主要對比並實現了七種卷積神經網路結構,分別為 LeNet , AlexNet , VGG , NiN , GoogLeNet , ResNet 以及 DenseNet ,試圖說明卷積神經網路結構的設計思路。期間針對深層網路的訓練,還介紹了批量歸一化( Batch Normalization )方法。
[迴圈神經網路] ⑥ 主要介紹了迴圈神經網路的結構以及相關概念,網路結構包含了標準迴圈神經網路、長短期記憶(Long Short Term Memory)迴圈神經網路、門限迴圈單元(Gated Recurrent Unit, GRU)神經網路以及雙向迴圈神經網路(Bidirectional RNN)。應用例項選的是語言建模(Language Modeling, LM),訓練資料採用的是周杰倫的歌詞,資料量有限,因此訓練後的模型效果並不是很好。
第三部分(第7~10章)
討論深度學習模型的計算效能以及具體應用,分為優化演算法、計算效能、計算機視覺以及自然語言處理等四個章節。容易看出,書中涉及的深度學習應用例項基本就是來源於計算機視覺和自然語言處理領域,包括第一、二部分的例項也是如此。
[優化演算法] ⑦ 章節中的優化演算法是指訓練深度學習模型的學習策略,即梯度下降(Gradients Descent, GD)演算法。該章節以梯度下降演算法的基本原理開頭,然後依次介紹常用的梯度下降演算法的改進版本,包括隨機梯度下降(Stochastic Gradients Descent, SGD)演算法、動量法、 Adagrad演算法 、RMSProp演算法、 Adadelta演算法 和 Adam演算法 。
[計算效能] ⑧ 首先提到了MXNet支援命令式和符號式混合程式設計,然後介紹了MXNet如何通過非同步計算、平行計算以及多GPU計算等方式提升深度學習模型的計算效率。
[計算機視覺] ⑨ 首先介紹了計算機視覺領域的兩項泛化技術,影象增廣(Image Augmentation)和預訓練微調(Pre-train and Fine-tuning)。接著是目標檢測(Object Detection)和語義分割(Semantic Segmentation)兩項計算機視覺任務,以及對應的深度學習模型,區域卷積神經網路(Regions with CNN features, R-CNN )和全卷積網路(Fully Convolutional Network, FCN )。最後是兩個 Kaggle 上圖形相關的比賽:影象分類(CIFAR-10)和狗品種識別(ImageNet Dogs)。該章節的整體內容安排比較凌亂,沒有系統性,有拼湊的嫌疑。並且主要是如何實現模型,對於各項任務的原理較少涉及。
[自然語言處理] ⑩ 首先實現了多種詞向量的訓練模型,包含 word2vec/" target="_blank" rel="nofollow,noindex">word2vec 中的Skip-gram模型和連續詞袋模型(Continuous Bag of Words, CBOW), GloVe 和 FastText ,並利用詞向量進行了近義詞和類比詞分析。接著分別以迴圈神經網路和卷積神經網路實現了文字情感分類。最後介紹了序列至序列的編碼解碼(Seq2Seq)模型以及注意力機制(Attention),接著以機器翻譯(Machine Translation, MT)任務作為該模型的應用例項。本章內容安排上的問題與計算機視覺章節類似,並不是很合理。
總的來講,《動手學深度學習》更像是深度學習框架MXNet的Cookbook,可作為MXNet的入門學習書籍。如果以學習深度學習為目標,這本書並不是很適合,只能作為入門學習時的快速閱讀資料,幫助熟悉深度學習的基本概念,瞭解深度學習模型的建立、訓練以及測試的步驟,對深度學習建立初步印象。另外,書中提供多種深度學習模型及相關技術的例項,可以用於瞭解這些模型或技術的具體實現,並且通過調整模型引數,熟悉不同超參對模型效能的影響。如果想對深度學習的原理進行深入學習,還是建議以Goodfollow,Bengio和Courville合力編寫的《深度學習》為學習資料,然後多閱讀相關的學術論文。