Deep Learning 3|用 Python 進行深度學習框架的開發實作

斎藤康毅 著 吳嘉芳 譯

  • Deep Learning 3|用 Python 進行深度學習框架的開發實作-preview-1
  • Deep Learning 3|用 Python 進行深度學習框架的開發實作-preview-2
  • Deep Learning 3|用 Python 進行深度學習框架的開發實作-preview-3
  • Deep Learning 3|用 Python 進行深度學習框架的開發實作-preview-4
  • Deep Learning 3|用 Python 進行深度學習框架的開發實作-preview-5
  • Deep Learning 3|用 Python 進行深度學習框架的開發實作-preview-6
  • Deep Learning 3|用 Python 進行深度學習框架的開發實作-preview-7
  • Deep Learning 3|用 Python 進行深度學習框架的開發實作-preview-8
  • Deep Learning 3|用 Python 進行深度學習框架的開發實作-preview-9
Deep Learning 3|用 Python 進行深度學習框架的開發實作-preview-1

買這商品的人也買了...

商品描述

從無到有的實作,在動手做的過程中強化對於深度學習的理解
或許您也曾經用過Tensorflow、PyTorch這類深度學習的框架(Framework),相信您也曾經對裡頭那些神奇的技術與有趣的結構嘆服不已。這本書就是為了解開這些疑問,正確瞭解這些技術而撰寫的。希望你可以從中體會這種技術性的「樂趣」。基於這個目的,本書將秉持著「從零開始製作」的方針,從無到有,一邊操作,一邊思考,透過實作加深理解,獲得審視現代深度學習框架的「新視野」。再藉由這個「新視野」,更廣泛、深入地理解深度學習。


高人氣、高評價的「Deep Learning基礎理論實作」系列第三部
《Deep Learning:用Python進行深度學習的基礎理論實作》、《Deep Learning 2|用Python進行自然語言處理的基礎理論實作》是從零開始進行深度學習,藉此瞭解相關結構。當時以單純性為優先,而「手動」設定了運算的「連結」。真正的框架是將這個部分自動化,Define-by-Run就是其中的一種手法,本書將利用從零開始製作DeZero的方式來學習這個機制。請別擔心,閱讀這本書不需要具備前作《Deep Learning:用Python進行深度學習的基礎理論實作》系列的知識。

 

<序>

受到深度學習的影響,現在各個領域都掀起了技術革新的浪潮,包括自駕車、自動診斷系統、精準機械翻譯、先進的機器人控制等。這些宛如虛構小說般描述的內容,最近卻變得真實,而且社會上也出現幾個引起關注的例子。令人驚訝的是,這些如同虛構小說中的技術,有些可能因為深度學習而有機會成真(或者逐漸變得可能)。我們可以說正處於一個被深度學習改變的時代。

在蓬勃發展的深度學習領域,創造了許多深度學習框架,諸如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式的框架,與現代化框架有著許多共通點。

作者簡介

斎藤康毅
1984年生於長崎縣對馬,畢業於東京工業大學工學院,東京大學研究所學際情報學府學士課程修畢。現在於企業內從事與電腦視覺、機器學習有關的研究開發工作。1984年生於長崎縣對馬,畢業於東京工業大學工學院,東京大學研究所學際情報學府學士課程修畢。現在於企業內從事與電腦視覺、機器學習有關的研究開發工作。

目錄大綱

第一階段 自動計算微分
STEP 1 把變數當成箱子
STEP 2 產生變數的函數
STEP 3 連結函數
STEP 4 數值微分
STEP 5 誤差反向傳播法的理論
STEP 6 手動執行誤差反向傳播法
STEP 7 誤差反向傳播法的自動化
STEP 8 從遞迴到迴圈
STEP 9 讓函數更方便
STEP 10 測試

第二階段 用自然的程式碼呈現
STEP 11 可變長度引數(正向傳播篇)
STEP 12 可變長度引數(改善篇)
STEP 13 可變長度引數(反向傳播篇)
STEP 14 重複使用相同變數
STEP 15 複雜的計算圖(理論篇)
STEP 16 複雜的計算圖(執行篇)
STEP 17 記憶體管理與循環參照
STEP 18 減少記憶體用量的模式
STEP 19 輕鬆使用變數
STEP 20 運算子多載(1)
STEP 21 運算子多載(2)
STEP 22 運算子多載(3)
STEP 23 整合成套件
STEP 24 複雜函數的微分

第三階段 計算高階微分
STEP 25 計算圖視覺化(1)
STEP 26 計算圖視覺化(2)
STEP 27 泰勒展開式的微分
STEP 28 函數最佳化
STEP 29 使用牛頓法最佳化(手動計算)
STEP 30 高階微分(準備篇)
STEP 31 高階微分(理論篇)
STEP 32 高階微分(執行篇)
STEP 33 使用牛頓法最佳化(自動計算)
STEP 34 sin 函數的高階微分
STEP 35 高階微分的計算圖
STEP 36 高階微分以外的用途

第四階段 建立類神經網路
STEP 37 處理張量
STEP 38 改變形狀的函數
STEP 39 加總函數
STEP 40 進行廣播的函數
STEP 41 矩陣乘積
STEP 42 線性迴歸
STEP 43 類神經網路
STEP 44 整合參數層
STEP 45 整合各層的整合層
STEP 46 用 Optimizer 更新參數
STEP 47 Softmax 函數與交叉熵誤差
STEP 48 多值分類
STEP 49 Dataset 類別與事前處理
STEP 50 取出小批次的 DataLoader
STEP 51 MNIST 的學習

第五階段 使用DeZero 進行挑戰
STEP 52 支援 GPU
STEP 53 儲存與載入模型
STEP 54 Dropout 與測試模式
STEP 55 CNN 的機制(1)
STEP 56 CNN 的機制(2)
STEP 57 conv2d 函數與 pooling 函數
STEP 58 具代表性的 CNN(VGG16)
STEP 59 用 RNN 處理時間序列資料
STEP 60 LSTM 與 DataLoader

APP A 原地演算法(STEP 14 的補充說明)
APP B 執行get_item 函數(STEP 47 的補充說明)
APP C 在 Google Colaboratory 執行