---
title: '深度學習理論-0.前言'
disqus: hackmd1
---
# 深度學習理論-前言
> [name=黃志勝 Chih-Sheng (Tommy) Huang]
>
**此份筆記為「Deep learning theory lecture notes」翻譯,[原始文章路徑](https://mjt.cs.illinois.edu/dlt/?fbclid=IwAR1UOFJJKbpIf2-tMiK4TQgiVupxVaCeZUFzFtQZJJhADGc2kcfqUOPpqkY#sec:apx:omitted)
原著作者為[Matus Telgarsky](mjt@illinois.edu)**
我盡量不要直譯,所以有疑問的部分我會將原文放置在內文。
---
## 基礎知識: 向前傳遞網路(feedforward networks) 和 測試錯誤分解 (test error decomposition)
### 向前傳遞網路(feedforward networks)
- 此部分如果有興趣也可以看我之前的文章[機器學習- 神經網路(多層感知機 Multilayer perceptron, MLP)運作方式](https://chih-sheng-huang821.medium.com/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF-%E5%A4%9A%E5%B1%A4%E6%84%9F%E7%9F%A5%E6%A9%9F-multilayer-perceptron-mlp-%E9%81%8B%E4%BD%9C%E6%96%B9%E5%BC%8F-f0e108e8b9af)
#### 淺層神經網路
如果我們想單純一點的範例,用一個淺層的神經網路(原文用Basic shallow network)來表示,總共三層
$$
輸入層(x)→隱藏層(h)→輸出層(y)
$$
輸入層($x, x\in R^d$)→隱藏層($h, h\in R^m$)
$$
h_j=\sigma(\sum_{i=1}^d{w_{ji}^T x_i + b_j})
$$
隱藏層($h, h\in R^m$)→輸出層($y, y\in R^1$)
$$
y=\sum_{j=1}^m a_j h_j
$$
* $(a_j, w_{ij}, b_j), \forall i,j$為模型參數(訓練得到解)。
* $h_j$為輸入到隱藏層在第j個node的輸出
* $\sigma$ 是激活函數(activation function),例如:$ReLU(x)=max(0,x)$或是$sigmoid(x)=\frac{1}{1+e^{-x}}$。
* $m$是神經網路隱藏層的node數,所以第j個node的輸出為$h_j=\sigma(w_j^Tx+b_j)$
所以我們將結構寫成矩陣來表示
$W \in R^{m \times d}$為輸入層到隱藏層權重,$\bf b=\left[
\begin{array}{}
b_1, b_2, ...,b_m
\end{array}
\right]^T$為隱藏層的bias向量,$\bf x=\left[
\begin{array}{}
x_1, x_2, ...,x_d
\end{array}
\right]^T$為輸入向量,$\bf A=\left[
\begin{array}{}
a_1, a_2, ...,a_m
\end{array}
\right]^T$為隱藏層到輸出層權重
輸入層到隱藏層:
$$
\bf h=\sigma(Wx+b)
$$
隱藏層到輸出層:
$$
\bf y=A^Th
$$
### 深層神經網路
延續前面的矩陣做法,假設有$L$層則會有L個權重矩陣和L個bias向量,分別為 $(\bf(W_1, b_1),(W_2, b_2),...,(W_L, b_L))$,則神經網路的輸出為
$$
f(\bf x; W)
= W_L h_L+b_L \\
= W_L\sigma(W_{L-1}h_{L-1}+b_{L-1})+b_L\\
= W_L\sigma(W_{L-1}(...W_2\sigma(W_1x+b_1)+b_2+...)+b_{L-1})+b_L
$$
note: 這邊的$\sigma$我沒有給index,不然方程式太複雜,原文有給予index。
- $\sigma$為映射函數(multivariate mapping),除了activate function外,也可以為softmax或是max-pooling等。
- $Wx+b$也可以表示比較複雜運算的縮寫,例如捲積層。
Note:捲積運算通會用$*$表示,也就是$W*x+b$。
- 有時候bias ($\bf(b_1,b_2,...,b_L)$)會省略(dropped)。
- 通常最後一層(L層)的$\sigma$會用單位映射方式(indentity)輸出。
- 最後一層的寬(Width)意味著輸出最大的輸出維度。
如果是最後一層是回歸預測則輸出為1(width=node=1)。
如果是利用one-hot label進行分類問題,則輸出寬度為分類類別總數,例如進行貓、狗和豬三分類問題,則輸出為3 (width=node=3)。
<font color=#FF00FF> **Remark 0.2.** </font>
淺層神經網路和深層神經網路為有向無環圖(directed acyclic graphs),其他形式的神經網路,例如循環網路(recurrent nerual network, RNN)則不能用上述公式來表示。
### 基礎監督式學習設置 (Basic supervised learning setup)
- 給定一組訓練集(training set)$((x_i, y_i), \forall i=1,...,n)$,監督式的目標就是需要找到一個模型(亦可稱為程序或函數)將$x$映射$y$ ($x \mapsto y$)。如果模型訓練的好,則未來的資料(或是測試資料)也可以映射的很好。
- 但是如果過去和未來的資料之間沒有任何關係,則就不用期待模型可以運作得很好。
**Note**: 假設模型是進行「身高預測」,過去的資料用來訓練模型我們收集小學生的數據進行建模,未來的資料我們拿大學生的數據出來運作預測模型,這樣訓練出來的模型就會很爛。也就是訓練模型的數據和實際應用時候的數據來至不同分布有偏誤造成問題的發生。
- 標準的學習理論假設訓練資料和未來資料特徵之間要IID。
**Note**: IID為獨立同分布(Independent and identically distributed)。
- 在真實資料上的實際運作,IID的假設是不會滿足的,因此演算法開發仍有許多衍生的方法。
**我們如何定義「模型可以在未來的資料運作的很好」**
- **損失函數**: 給定一筆$(x,y)$資料,然後進行預測$\hat y=f(x)$,然後採用損失(loss,$l$)評估,例如: 分類的$ln(1+e^{-\hat y y})$或是回歸的$\sqrt{\frac{(\hat y-y)^2}{2}}$
- 從整個訓練資料來看,整個訓練資料的損失差異也稱為經驗風險(empirical risk),$\hat R(f)=\frac{1}{n} \sum_i^n{l(f(x_i),y)}$
- 對於未來的資料,我們則須考慮母體(population)風險 $R(f)=E[l(f(x),y)]=\int l(f(x),y)d\mu(x,y)$
**Note**:監督式學習通常是最小化經驗風險(ERM, Empirical risk minimization)。
## <font color=#FF0000>「模型可以在未來的資料運作的很好」的問題變成「最小化$R(f)$</font> ##
藉由訓練函數/預測器($F$)找到的訓練後最適函數為$\hat f$,和同一個函數/預測器($F$)找到其他解的$\bar f \in F$,所以我們可以將訓練找到的函數$R(\hat f)$進行拆解:
<p align="right">
$R(\hat f) = (R(\hat f)-\hat R(\hat f)) \quad\quad (generalization)$
$\quad\quad\quad +(\hat R(\hat f) - \hat R(\bar f)) \quad\quad (optimization)$
$\quad\quad\quad +(\hat R(\bar f)-R(\bar f)) \quad\quad (concentration/generalization)$
$\quad\quad\quad +R(\bar f) \quad\quad\quad\quad\quad\quad (approximation)$
</p>
**Note**:雖然上式拆成四大項,但實際上看式子每一行的最後一項都可以和下一行的第一項抵銷。
我們來review上面一堆函數的意義。**最後面內容有介紹一下母體是什麼。**
1. $R$:在母體上的經驗風險(empirical risk)。
2. $\hat R$: 在訓練資料集上經驗風險(empirical risk)。
3. $\hat f$: 訓練函數/預測器($F$)後找到最適合的解
4. $\bar f$: 訓練函數/預測器($F$)中找到的其他解
回到剛剛的結論 **「模型可以在未來的資料運作的很好」的問題變成「最小化$R(f)$」**,我們換個角度看 **「模型可以在未來的資料運作的很好」的問題變成「訓練後的$\hat f$可以最小化$R(f)$」**,因此整個目標是
<center>
最小化$R(\hat f)$
</center>
而$R(\hat f)$可以拆成上述四項(**(1)generalization項、(2)optimization項、(3)concentration/generalization項、(4)approximation項**),此四項之間的關係非常重要,因為當四項皆為越小越好,結果越好。
<font color=#FF00FF> **Remark 0.3. (***sensitivity to complexity***)** </font>
- 假設存在一個低複雜度的$\bar f \in F$ 會使(4)approximation項($R(\bar f)$)很小。→這個意思是說這個預測或是分類問題非常簡單,隨便找到的$\bar f$都可以經驗讓風險很小。
所以當複雜度低的時候,則 (3)concentration/generalization項 ($\hat R(\bar f)-R(\bar f)$)也很小。
- 當$\bar f$複雜度低的時候,則我們希望藉由一個演算法找到一個複雜度比較沒有這麼大的$\hat f$去平衡(2)optimization項($\hat R(\hat f) - \hat R(\bar f)$),藉此。如果$\hat f$複雜度低,則(1)generalization項($R(\hat f)-\hat R(\hat f)$)則會小。
## 母體的意義簡述
簡單說就是所有的cases,不會有忽略掉或是漏掉的樣本,基本上我們是找不到母體的分布的,都只能用抽樣的方式來近似母體。
例如大選意向,我們要評量全台灣人的選票要投給誰,我們不可能有辦法量測到全台灣人的投票意願,所以只能用抽樣得方式來評估,新聞最常出現調查一千人之類的來表示全台灣的人口意向,這一千人就是抽樣出來評估全台灣人的意向,這一千人意向其實就類似訓練資料。而實際開票出來的結果可以想像成測試資料或是這篇文章說的未來資料,所以最好的方式是訓練資料的分布可以趨近母體,這樣的訓練資料訓練出來的模型就可以fit測試資料的結果。
假設被選舉人有A和B,沒有廢票。
新聞抽樣調查做調查,假設問卷的回答跟心理的答案是一樣的(因為有可能我說我要投A,但實際我投B)。
(I) 第一次新聞抽樣1000人做調查投A還是B。
(II)第二次新聞又抽樣1000人做調查投A還是B。
(III)實際投票開票。
**模型good-fit**:
(I)90%投給A,10%投給B → (II) 89%投給A,11%投給B → (III) 88%投給A,12%投給B
**模型underfit**:
(I)90%投給A,10%投給B → (II) 49%投給A,51%投給B → (III) 20%投給A,80%投給B
**模型overfit**:
(I)90%投給A,10%投給B → (II) 90%投給A,10%投給B → (III) 49%投給A,51%投給B
Note: 上述感覺沒有做訓練模型怎麼能拿來說model underfit或是overfit的問題,原因是在抽樣的過程我們就可以想像有個模型在幫我們抽樣,這個模型抽樣的好不好就是訓練好的模型概念。新聞怎麼抽樣,找市調公司,公司找工讀生打電話,打電話前工讀生會被訓練會問你年紀性別然後再問你投票意向,這個被訓練問你年紀性別就是模型,因為前面問得越多越能排除來自同一分布的樣本。
例如你打電話都打給幼稚園小朋友問他說你是不是每天看巧虎,90%小朋友每天都看巧虎,然後你就下結論說全台灣的人有90%每天都看巧虎
----------------
###### tags: `DeepLearningTheory`