第一章 什么是深度學(xué)習(xí)
人工智能
1 符號主義人工智能
2 專家系統(tǒng)
3 機(jī)器學(xué)習(xí)
- 輸入數(shù)據(jù)點
- 預(yù)期輸出的示例
- 衡量算法好壞的方法
衡量結(jié)果是一種反饋信號蒂教,用于調(diào)節(jié)算法的工作方式术吝。這個調(diào)節(jié)步驟就是我們所說的學(xué)習(xí)(learning)。學(xué)習(xí)指的是尋找更好數(shù)據(jù)表示(representation)的自動搜索過程挑豌。
機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的核心問題在于有意義地變換數(shù)據(jù)奈搜。在于學(xué)習(xí)輸入數(shù)據(jù)的有用表示,這種表示可以讓數(shù)據(jù)更接近預(yù)期輸出鄙麦。
機(jī)器學(xué)習(xí):在預(yù)先定義好的可能性空間(假設(shè)空間)中典唇,利用反饋信號的指引來尋找輸入數(shù)據(jù)的有用表示。
深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個分支領(lǐng)域黔衡。深度學(xué)習(xí)中的深度(depth)指的一系列連續(xù)的表示層(layer)◎酒福現(xiàn)代深度學(xué)習(xí)通常包含數(shù)十個或者數(shù)百個連續(xù)的層,其他機(jī)器學(xué)習(xí)方法的重點往往是僅僅學(xué)習(xí)一兩層的數(shù)據(jù)表示盟劫。
深度學(xué)習(xí):數(shù)據(jù)表示的多級方法夜牡。
深度學(xué)習(xí)將特征工程完全自動化。
機(jī)器學(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)
支持向量機(jī)(Support Vector Machine塘装,SVM) - 決策樹、隨機(jī)森林與梯度提升機(jī)
- 深度神經(jīng)網(wǎng)絡(luò)
長短期算法(Long Short-Term Memory影所,LSTM)
深度卷積神經(jīng)網(wǎng)絡(luò)
處理結(jié)構(gòu)化數(shù)據(jù)問題-梯度提升機(jī)[XGBoost庫]
圖像分類等感知問題-深度學(xué)習(xí)[Keras庫]
第二章 神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)基礎(chǔ)
張量(tensor)【Numpy數(shù)組(arrays)】
矩陣是二維張量蹦肴,張量是矩陣向任意維度的推廣。張量的維度(dimension)通常叫作軸(axis)猴娩。張量軸的個數(shù)叫作階(rank)阴幌。
- 標(biāo)量(0D 張量)
- 向量(1D 張量)
- 矩陣(2D 張量)
- 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) 帮辟。
張量運(yùn)算(tensor operation)
逐元素(element-wise)運(yùn)算
relu運(yùn)算:max(x, 0)
加法運(yùn)算廣播(broadcast)
兩個形狀不一樣的張量相加速址,較小的張量會被廣播:
(1) 向較小的張量添加軸(廣播軸),使其ndim與較大的張量相同
(2) 將較小的張量沿著新軸重復(fù)织阅,使其形狀與較大的張量相同張量點積tensor product
向量和向量 標(biāo)量
矩陣和向量 向量
矩陣和矩陣 矩陣張量變形tensor reshaping
改變張量的行和列壳繁,以得到想要的形狀。
轉(zhuǎn)置transposition
向量運(yùn)算的幾何解釋
幾何操作:仿射變換、旋轉(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))
隨機(jī)初始化
1數(shù)據(jù)批量
2計算預(yù)期值[前向傳播forward pass]
3計算損失
4更新權(quán)重
導(dǎo)數(shù)derivative-->梯度gradient
隨機(jī)梯度下降
真SGD
小批量SGD[小批量隨機(jī)梯度下降]
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ò)入門
三個問題:
- 二分類問題[將電影評論劃分為正面或負(fù)面]
- 多分類問題[將新聞按主題分類(單標(biāo)簽、多分類)|(多標(biāo)簽柳弄、多分類)]
- 標(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ò)進(jìn)行更新醋火,它執(zhí)行的是隨機(jī)梯度下降SGD的某個變體悠汽。
Keras:高層次的構(gòu)建模塊,模型級(model-level)的庫芥驳。
低層次的運(yùn)算由張量庫柿冲,keras的后端引擎(backend engine)完成。Keras沒有選擇單一的張量庫并將Keras實現(xiàn)與這個庫的綁定兆旬,而是以模塊化的方式處理這個問題假抄,目前Keras有三個后端實現(xiàn):TensorFlow 后端、Theano 后端和微軟認(rèn)知工具包CNTK。
TensorFlow
CPU:低層次的張量運(yùn)算庫Eigen
GPU:高度優(yōu)化的深度學(xué)習(xí)運(yùn)算庫宿饱,叫作 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)練——驗證你的方法
- 留出驗證集[監(jiān)控]
訓(xùn)練模型
繪制訓(xùn)練損失和驗證損失
繪制訓(xùn)練精度和驗證精度
從頭開始重新訓(xùn)練一個模型 - [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é)果
第四章 機(jī)器學(xué)習(xí)基礎(chǔ)
機(jī)器學(xué)習(xí)的四個分支
- 監(jiān)督學(xué)習(xí)
標(biāo)注annotation - 無監(jiān)督學(xué)習(xí)
降維dimensionallity reduction
聚類clustering - 自監(jiān)督學(xué)習(xí)
- 強(qiáng)化學(xué)習(xí)
智能體agent
評估機(jī)器學(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
評估模型的注意事項
- 數(shù)據(jù)代表性data represrntativeness[隨機(jī)打亂]
- 時間箭頭the arrow of time [時間泄露time leak]
- 數(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ù)較少的模型)
一種常見的降低過擬合的方法就是強(qiáng)制讓模型權(quán)重只能取較小的值,實現(xiàn)方法是向網(wǎng)絡(luò)損失函數(shù)中添加與較大權(quán)重值相關(guān)的成本cost[常見的成本:L1正則化锋恬;L2正則化] - 添加 dropout 正則化
對某一層使用 dropout, 就是在訓(xùn)練過程中隨機(jī)將該層的一些輸出特征舍棄(設(shè)置為0)
dropout 比率(dropout rate) 是設(shè)為0的特征所占的比例屯换,通常在 0.2~0.5 范圍內(nèi)。
機(jī)器學(xué)習(xí)的通用工作流程
- 定義問題与学,收集數(shù)據(jù)集
非平穩(wěn)過程 - 選擇衡量成功的指標(biāo)
- 確定評估方法
- 準(zhǔn)備數(shù)據(jù)
- 開發(fā)比基準(zhǔn)更好的模型
統(tǒng)計功效statistical power
純隨機(jī)的基準(zhǔn)dumb baseline
三個關(guān)鍵參數(shù):
- 最后一層的激活
- 損失函數(shù)
- 優(yōu)化配置
擴(kuò)大模型規(guī)模:開發(fā)過擬合的模型
(1)添加更多的層
(2)讓每一層變得更大
(3)訓(xùn)練更多的輪次模型正則化與調(diào)節(jié)超參數(shù)
- 添加 dropout
- 嘗試不同的構(gòu)架:增加或減少層數(shù)
- 添加L1 和/或 L2 正則化
- 嘗試不同的超參數(shù)(比如每層的單元個數(shù)或優(yōu)化器的學(xué)習(xí)率), 以找到最佳配置
- (可選)反復(fù)做特征工程:添加新特征或刪除沒有信息量的特征