《Python深度學(xué)習(xí)》第一部分 深度學(xué)習(xí)基礎(chǔ)

第一章 什么是深度學(xué)習(xí)

人工智能
1 符號主義人工智能
2 專家系統(tǒng)
3 機器學(xué)習(xí)

  • 輸入數(shù)據(jù)點
  • 預(yù)期輸出的示例
  • 衡量算法好壞的方法
    衡量結(jié)果是一種反饋信號,用于調(diào)節(jié)算法的工作方式。這個調(diào)節(jié)步驟就是我們所說的學(xué)習(xí)(learning)。學(xué)習(xí)指的是尋找更好數(shù)據(jù)表示(representation)的自動搜索過程。

機器學(xué)習(xí)和深度學(xué)習(xí)的核心問題在于有意義地變換數(shù)據(jù)。在于學(xué)習(xí)輸入數(shù)據(jù)的有用表示,這種表示可以讓數(shù)據(jù)更接近預(yù)期輸出。
機器學(xué)習(xí):在預(yù)先定義好的可能性空間(假設(shè)空間)中,利用反饋信號的指引來尋找輸入數(shù)據(jù)的有用表示。
深度學(xué)習(xí)是機器學(xué)習(xí)的一個分支領(lǐng)域。深度學(xué)習(xí)中的深度(depth)指的一系列連續(xù)的表示層(layer)。現(xiàn)代深度學(xué)習(xí)通常包含數(shù)十個或者數(shù)百個連續(xù)的層,其他機器學(xué)習(xí)方法的重點往往是僅僅學(xué)習(xí)一兩層的數(shù)據(jù)表示。
深度學(xué)習(xí):數(shù)據(jù)表示的多級方法。
深度學(xué)習(xí)將特征工程完全自動化。

機器學(xué)習(xí)簡史

  • 概率建模(probabilistic modeling)
    樸素貝葉斯算法
    logistic 回歸(logistic regression,簡稱 logreg)
  • 早期神經(jīng)網(wǎng)絡(luò)(neural network)
    反向傳播(backpropagation)算法
    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks, CNN)
  • 核方法(kernel method)
    支持向量機(Support Vector Machine,SVM)
  • 決策樹、隨機森林與梯度提升機
  • 深度神經(jīng)網(wǎng)絡(luò)
    長短期算法(Long Short-Term Memory,LSTM)
    深度卷積神經(jīng)網(wǎng)絡(luò)

處理結(jié)構(gòu)化數(shù)據(jù)問題-梯度提升機[XGBoost庫]
圖像分類等感知問題-深度學(xué)習(xí)[Keras庫]

第二章 神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)基礎(chǔ)

張量(tensor)【Numpy數(shù)組(arrays)】

矩陣是二維張量,張量是矩陣向任意維度的推廣。張量的維度(dimension)通常叫作軸(axis)。張量軸的個數(shù)叫作階(rank)。

  1. 標(biāo)量(0D 張量)
  2. 向量(1D 張量)
  3. 矩陣(2D 張量)
  4. 3D 張量與更高維張量

關(guān)鍵屬性:

  • 階ndim
  • 形狀shape(一個整數(shù)元組)
  • 數(shù)據(jù)類型dtype

張量切片(tensor slicing)

現(xiàn)實世界中的數(shù)據(jù)張量
第一個軸(0軸):
樣本軸(sample axis )或樣本維度
批量軸(batch axis)或批量維度

  • 向量數(shù)據(jù):2D張量,形狀為 (samples, features) 。
  • 時間序列數(shù)據(jù)或序列數(shù)據(jù):3D張量,形狀為 (samples, timesteps, features) 。
  • 圖像:4D張量,形狀為 (samples, height,wdith, channels) 或 (samples, channels,height,wdith) 。
    顏色通道channels/color_depth:灰度圖像1,彩色圖像3[R,G,B]
  • 視頻:5D張量,形狀為 (samples, frames, height,wdith, channels) 或 (samples, frames, channels,height,wdith) 。

張量運算(tensor operation)

  • 逐元素(element-wise)運算
    relu運算:max(x, 0)
    加法運算

  • 廣播(broadcast)
    兩個形狀不一樣的張量相加,較小的張量會被廣播:
    (1) 向較小的張量添加軸(廣播軸),使其ndim與較大的張量相同
    (2) 將較小的張量沿著新軸重復(fù),使其形狀與較大的張量相同

  • 張量點積tensor product
    向量和向量 標(biāo)量
    矩陣和向量 向量
    矩陣和矩陣 矩陣

  • 張量變形tensor reshaping
    改變張量的行和列,以得到想要的形狀。
    轉(zhuǎn)置transposition

向量運算的幾何解釋
幾何操作:仿射變換、旋轉(zhuǎn)、縮放
深度學(xué)習(xí)的幾何解釋
高維空間中非常復(fù)雜的幾何變換


目的:優(yōu)化權(quán)重或可訓(xùn)練參數(shù)。
編譯compile
損失函數(shù)loss function 或 目標(biāo)函數(shù)objective function
優(yōu)化器optimizer 或 優(yōu)化方法optimization method
指標(biāo)metric
訓(xùn)練(訓(xùn)練循環(huán))
隨機初始化
1數(shù)據(jù)批量
2計算預(yù)期值[前向傳播forward pass]
3計算損失
4更新權(quán)重


導(dǎo)數(shù)derivative-->梯度gradient
隨機梯度下降
真SGD


小批量SGD[小批量隨機梯度下降]
1數(shù)據(jù)批量
2計算預(yù)期值
3計算損失
4計算損失函數(shù)相對于權(quán)重的梯度[反向傳播backward pass];
4將權(quán)重沿著梯度的反方向移動一點。


批量SGD
變體:帶動量的SGD、Adagard、RMSProp
動量momentum解決了SGD的兩個問題:收斂速度和局部極小點。
學(xué)習(xí)率learinnig rate

鏈?zhǔn)角髮?dǎo):反向傳播算法
將鏈?zhǔn)椒▌tchain rule應(yīng)用到神經(jīng)網(wǎng)絡(luò)梯度值的計算,得到的算法叫作反向傳播backpropagation(有時也叫反式微分reverse-mode differentiation)

權(quán)重張量是層的屬性,里面保存了網(wǎng)絡(luò)所學(xué)到的知識knowledge。
在所有訓(xùn)練數(shù)據(jù)上迭代一次叫作一個輪次epoch。

第三章 神經(jīng)網(wǎng)絡(luò)入門

三個問題:

  1. 二分類問題[將電影評論劃分為正面或負(fù)面]
  2. 多分類問題[將新聞按主題分類(單標(biāo)簽、多分類)|(多標(biāo)簽、多分類)]
  3. 標(biāo)量回歸問題[根據(jù)房地產(chǎn)數(shù)據(jù)估算房屋的價格]

:深度學(xué)習(xí)的基礎(chǔ)組件
有些層是無狀態(tài)的,但大多數(shù)層是有狀態(tài)的,即層的權(quán)重。

不同的張量格式與不同的數(shù)據(jù)處理類型需要用到不同的層:

  • 簡單的向量數(shù)據(jù)保存在2D張量中,通常用密集連接層densely connected layer[ 也叫全連接層fully connected layer 或密集層dense layer,對應(yīng)Keras 中的Dense類 ]來處理。
  • 序列數(shù)據(jù)保存在3D張量中,通常用循環(huán)層recurrent layer[ 比如Keras中的LSTM層 ]來處理。
  • 圖像數(shù)據(jù)保存在4D張量中,通常用二維卷積層[ Keras 中的Conv2D ]來處理。

層兼容性layer compatibility:每一層只能接受特定形狀的輸入張量,并返回特定形狀的輸出張量。

模型:層構(gòu)成的網(wǎng)絡(luò)
深度學(xué)習(xí)模型是由層構(gòu)成的有向無環(huán)圖。
網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu):

  • 雙分支(two-branch)網(wǎng)絡(luò)
  • 多頭(multihead)網(wǎng)絡(luò)
  • Inception 模塊

損失函數(shù)優(yōu)化器:配置學(xué)習(xí)過程的關(guān)鍵
損失函數(shù)(目標(biāo)函數(shù))——在訓(xùn)練過程中需要將其最小化。它能衡量當(dāng)前任務(wù)是否已經(jīng)成功完成。
[二分類問題:二元交叉熵(binary crossentropy)損失函數(shù)
多分類問題:分類交叉熵(categorical crossentropy)損失函數(shù)
回歸問題:均方誤差(mean-aquared error)損失函數(shù)
序列學(xué)習(xí)問題:聯(lián)結(jié)主義時序分類(CTC,connectionist temporal classification)損失函數(shù)
... ...
]
優(yōu)化器(優(yōu)化方法)——決定如何基于損失函數(shù)對網(wǎng)絡(luò)進行更新,它執(zhí)行的是隨機梯度下降SGD的某個變體。


Keras:高層次的構(gòu)建模塊,模型級(model-level)的庫。
低層次的運算由張量庫,keras的后端引擎(backend engine)完成。Keras沒有選擇單一的張量庫并將Keras實現(xiàn)與這個庫的綁定,而是以模塊化的方式處理這個問題,目前Keras有三個后端實現(xiàn):TensorFlow 后端、Theano 后端和微軟認(rèn)知工具包CNTK。
TensorFlow
CPU:低層次的張量運算庫Eigen
GPU:高度優(yōu)化的深度學(xué)習(xí)運算庫,叫作 NVIDA CUDA神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)庫(cuDNN)


加載數(shù)據(jù)集

準(zhǔn)備數(shù)據(jù)
數(shù)據(jù)向量化
1列表轉(zhuǎn)換成張量[1.填充列表2.one-hot編碼]
2輸入數(shù)據(jù)的每個特征都有不同的取值范圍[對每個特征做標(biāo)準(zhǔn)化]
標(biāo)簽向量化
1整數(shù)張量
2one-hot編碼

構(gòu)建網(wǎng)絡(luò)

  • 模型
    激活函數(shù)[relu整流線性單元,hanh,sigmoid,softmax]
    隱藏單元hidden unit, 信息瓶頸
  • 損失函數(shù)和優(yōu)化器
    優(yōu)化器optinizer
    損失函數(shù)loss
    [binary_crossentropy,
    categorical_crossentropy(sparse_categorical_crossentropy),
    mse]
    指標(biāo)metrics
    [accuracy,
    mae]

訓(xùn)練——驗證你的方法

  1. 留出驗證集[監(jiān)控]
    訓(xùn)練模型
    繪制訓(xùn)練損失和驗證損失
    繪制訓(xùn)練精度和驗證精度
    從頭開始重新訓(xùn)練一個模型
  2. [K折交叉驗證:數(shù)據(jù)點很少]
    K折驗證
    保存每折的驗證結(jié)果
    計算所有輪次中的K折驗證分?jǐn)?shù)平均值
    繪制驗證分?jǐn)?shù)
    繪制驗證分?jǐn)?shù)(刪除前幾個數(shù)據(jù)點)
    訓(xùn)練最終模型

測試——使用訓(xùn)練好的網(wǎng)絡(luò)在新數(shù)據(jù)上生成預(yù)測結(jié)果

第四章 機器學(xué)習(xí)基礎(chǔ)

機器學(xué)習(xí)的四個分支

  1. 監(jiān)督學(xué)習(xí)
    標(biāo)注annotation
  2. 無監(jiān)督學(xué)習(xí)
    降維dimensionallity reduction
    聚類clustering
  3. 自監(jiān)督學(xué)習(xí)
  4. 強化學(xué)習(xí)
    智能體agent

評估機器學(xué)習(xí)模型

過擬合overfit
泛化generalize
訓(xùn)練集、驗證集和測試集
在訓(xùn)練數(shù)據(jù)上訓(xùn)練模型,在驗證數(shù)據(jù)上評估模型,在測試數(shù)據(jù)上測試模型。

權(quán)重:參數(shù)。[深度學(xué)習(xí)中,模型可學(xué)習(xí)的參數(shù)的個數(shù)通常稱為模型的容量capacity]
模型的層數(shù)或每層大小:超參數(shù)。

信息泄露information leak:如果基于模型在驗證集上的性能來調(diào)節(jié)模型配置,會很快導(dǎo)致模型在驗證集上過擬合,即使你并沒有在驗證集上直接訓(xùn)練模型也會如此。

三種經(jīng)典的評估方法:

  • 簡單的留出驗證hold-out validation
  • K折驗證K-fold validation
  • 帶有打亂數(shù)據(jù)的重復(fù)K折驗證iterated K-fold vaildation with shuffling

評估模型的注意事項

  1. 數(shù)據(jù)代表性data represrntativeness[隨機打亂]
  2. 時間箭頭the arrow of time [時間泄露time leak]
  3. 數(shù)據(jù)冗余redundancy in your data

數(shù)據(jù)預(yù)處理、特征工程和特征學(xué)習(xí)

神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)預(yù)處理
數(shù)據(jù)預(yù)處理的目的是使原始數(shù)據(jù)更適于用神經(jīng)網(wǎng)絡(luò)處理,包括向量化、標(biāo)準(zhǔn)化、處理缺失值和特征提取。

  • 向量化
  • 值標(biāo)準(zhǔn)化[取值較小;同質(zhì)性
    將每個特征分別標(biāo)準(zhǔn)化,使其平均值為 0;
    將每個特征分別標(biāo)準(zhǔn)化,使其標(biāo)準(zhǔn)差為 1]
  • 處理缺失值

特征工程feature engineering

過擬合與欠擬合

最優(yōu)解決方法:獲取更多的訓(xùn)練數(shù)據(jù)。
次優(yōu)解決方法:正則化regularization

  • 減小網(wǎng)絡(luò)大小
  • 添加權(quán)重正則化
    奧卡姆剃刀(Occam's razor)原理:如果一件事有兩種解釋,那么最可能正確的就是最簡單的那個,即假設(shè)更少的那個。
    這里的簡單模型simple model 是指參數(shù)值分布的熵更少的模型(或參數(shù)較少的模型)
    一種常見的降低過擬合的方法就是強制讓模型權(quán)重只能取較小的值,實現(xiàn)方法是向網(wǎng)絡(luò)損失函數(shù)中添加與較大權(quán)重值相關(guān)的成本cost[常見的成本:L1正則化;L2正則化]
  • 添加 dropout 正則化
    對某一層使用 dropout, 就是在訓(xùn)練過程中隨機將該層的一些輸出特征舍棄(設(shè)置為0)
    dropout 比率(dropout rate) 是設(shè)為0的特征所占的比例,通常在 0.2~0.5 范圍內(nèi)。

機器學(xué)習(xí)的通用工作流程

  1. 定義問題,收集數(shù)據(jù)集
    非平穩(wěn)過程
  2. 選擇衡量成功的指標(biāo)
  3. 確定評估方法
  4. 準(zhǔn)備數(shù)據(jù)
  5. 開發(fā)比基準(zhǔn)更好的模型
    統(tǒng)計功效statistical power
    純隨機的基準(zhǔn)dumb baseline
    三個關(guān)鍵參數(shù):
  • 最后一層的激活
  • 損失函數(shù)
  • 優(yōu)化配置
  1. 擴大模型規(guī)模:開發(fā)過擬合的模型
    (1)添加更多的層
    (2)讓每一層變得更大
    (3)訓(xùn)練更多的輪次

  2. 模型正則化與調(diào)節(jié)超參數(shù)

  • 添加 dropout
  • 嘗試不同的構(gòu)架:增加或減少層數(shù)
  • 添加L1 和/或 L2 正則化
  • 嘗試不同的超參數(shù)(比如每層的單元個數(shù)或優(yōu)化器的學(xué)習(xí)率), 以找到最佳配置
  • (可選)反復(fù)做特征工程:添加新特征或刪除沒有信息量的特征
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容