序
受到深度學習的影響,現在各個領域都掀起了技術革新的浪潮,包括自駕車、自動診斷系統、精準機械翻譯、先進的機器人控制等。這些宛如虛構小說般描述的內容,最近卻變得真實,而且社會上也出現幾個引起關注的例子。令人驚訝的是,這些如同虛構小說中的技術,有些可能因為深度學習而有機會成真(或者逐漸變得可能)。我們可以說正處於一個被深度學習改變的時代。
在蓬勃發展的深度學習領域,創造了許多深度學習框架,諸如PyTorch、Chainer、TensorFlow、Caffe等。這個領域有著各式各樣的框架,而且每天仍持續開發著,世界上的研究人員及技術人員得以利用這些框架有效率地解決問題。深度學習框架可說是支撐、推動先進技術不可或缺的重要關鍵。
拿起這本書的你,或許就曾使用過深度學習框架。最近深度學習的資料不僅豐富,執行環境也很完整,使得編寫與深度學習有關的程式碼變得易如反掌。我們僅用數十行(或數行)的程式碼,就能展現強大的技術,也都是拜框架所賜。
那麼,這種有許多人使用、能在各種場合發揮作用的「真正」框架,究竟是以何種結構在運作?使用了哪些技術,背後的概念為何?在這些疑問的驅使下,開始了這段新的旅程!
動手實作才能體會
在深度學習框架中,充滿著許多令人驚訝的技術以及有趣的結構。這本書就是為了解開這些疑問,正確瞭解這些技術而撰寫的。希望你可以從中體會這種技術性的「樂趣」。基於這個目的,本書將秉持著「從零開始製作」的方針,從無到有,一邊操作,一邊思考,透過實作加深理解。藉由這種經驗,發現深度學習框架的本質。
在製作框架的過程中,有許多必須學習的知識。「原來可以使用這種技術啊!」、「這個點子可以這樣執行啊!」使用現成的工具是無法體會這些樂趣的。有時得實際動手做了之後,才會有新的發現。
舉個例子來說,可能有部分讀者認為深度學習框架不過是純粹收集「函數」的函式庫。事實上,深度學習框架沒有那麼簡單。它是一種程式語言,更精準來說,是一個擁有微分運算功能的程式語言(最近也稱作「可微分的程式語言」)。這一點在閱讀本書時,透過「從零開始製作的過程」就可以理解。
本書的原創框架
在黎明期,深度學習框架的差異甚遠,但是現在的深度學習框架已經進入成熟階段。事實上,PyTorch、Chainer、TensorFlow等知名框架皆朝著相同方向發展(這些框架各具特色,介面亦不相同,但是設計概念卻是共通的)。基於這些共通項目及教育層面,本書設計了一個小框架,並將這個框架命名為「DeZero」。
DeZero以Chainer為基礎,加入PyTorch的設計,具有以下的特色:
.精簡:DeZero是以重視易讀性而設計的框架,盡可能只使用必要的外部函式庫,並盡量簡化程式碼。因此你不需要花太多時間來瞭解整個DeZero的程式碼。
.純Python:深度學習框架通常會使用多種語言(例如Python與C++等),但是我們只用Python執行DeZero。因此具備Python相關知識的人,可以毫無壓力地閱讀DeZero的說明。由於是純Python,所以能在智慧型手機上執行DeZero,或使用Google Golaboratory等服務,輕鬆在雲端上運作。
.現代化的功能性:PyTorch、Chainer、TensorFlow等現代化框架擁有許多共通的功能。最重要的共通項目之一,就是Define-by-Run。Define-by-Run是指依照執行運算的時機,建立深度學習運算「連結」的結構(這個部分會在內文詳細說明)。本書製作的DeZero是Define-by-Run式的框架,與現代化框架有著許多共通點。