# L1: Introduction
## Machine Learning
機器學習架構圖

* x: 資料集
* φ(x): data representation。從原始資料轉換而來,更有用的表示。對模型的能力有很大影響
* y: 模型輸出。將 data representation 與模型參數相乘後,再通過 sigmoid 函數做為模型輸出

* w: 模型參數
* σ(s): sigmoid 函數。負責將輸入轉成 0~1
* 也可以透過機率的角度來解讀 y。p(t = 1|x; w) 表示給定資料集 x 跟模型以學到的知識 w,來預測 t=1 的機率
* t: ground truth
* Cost: y 跟 t 之間的距離
## Deep Learning
* 相較於 Machine Learning 透過領域知識來手動決定 φ(x),Deep Learning 交給模型自行學習

* 多層的 Deep Learning 模型以函數型式可以表示如上
* 其中,w, $θ_n$, ..., $θ_1$ 是不同層的模型參數
# L5: MachineLearningBasics
## Learning Algorithms --- Linear Regression
線性回歸 (Linear Regression) 模型的訓練誤差 $MSE^{(train)}$

* $m^{(train)}$: 訓練樣本數
* $\hat{y}^{(train)}$: 模型的預測值

* 把每一筆訓練資料 $x_i$,都經過特徵轉換 (ϕ) 後,結果組合而成的矩陣
* 還需要乘以 w,即模型權重
* $y^{(train)}$: label。即目標值
* $\left\lVert \mathbf{...} \right\rVert_2^2$ 指的是 "每個其中的元素先平方再加總"
### 線性回歸的目標
找到權重 w,使得 $MSE^{(train)}$ 最小 (相當於 MSE 對 w 的梯度為 0)

最後,w 有公式解

上述的$\hat{y}$ 還可以繼續推廣,加入常數 b

為了因應常數 b 對應要乘的那一項,需要稍微修改原本 w 跟 φ(x) 的定義,變成 $\tilde{w}$ 及 $\tilde{φ(x)}$

## Generalization
* 模型的泛化能力 (Generalization) 指的是能在沒看過資料上表現好的能力
* Generalization error: 對於完全沒看過之輸入的錯誤期望值
* Bayes error: 理論上最小的 Generalization error
## Overfitting

* 理論上 train set 跟 test set 都是從同一個 distribution 中 sample 出來的,模型表現會相同。但實際上由於 overfitting 的原因,train set 的表現通常較好
* 從上圖中可以看到,隨著模型的複雜度變高 (x 軸向右)
* train loss 持續下降
* 但 Generalization error 下降後反而逐漸升高
### Overfitting 解決方法: 使用 weight decay

* $w^Tw$ 為懲罰項,為當前權重的平方
* 透過 λ 這個 hyper parameter 調整懲罰項的比例
* λ 越大,懲罰項越大,Loss 越大
* 這時權重太大反而會導致 loss 變高,如此一來便能限制權重值不能太大,減少 Overfitting 的情況
## Estimators --- 以 Bernoulli distribution 為例
* Bernoulli distribution: 一次試驗只有兩種結果: 1 or 0
* Point estimation: 給定一堆樣本,從中估計出 "一個參數"
* 例如給定一堆丟擲硬幣的數據,估計一棵硬幣出現正面的機率
* i.i.d = independent and identically distributed。即每次試驗間都是獨立的

* 上圖是一個 mean 為 θ 的 Bernoulli distribution

* 一種常見的估計方法是使用平均值
* $\hat{θ_m}$ 便是一個 point estimator。可以視做一個函數,將觀測到的樣本轉成估計值
* 本身也是隨機變數
### Bias

* 定義: estimator 的期望值,扣掉真實的參數 θ
* 
* 帶公式後可知,上述使用平均值的估計方法,計算出的estimator 期望值剛好為 θ
* 因此由 bias 的定義可知,bias=0
* bias=0 的 estimator 又稱為 unbiased estimator
### consistency

* 定義: 當 m (樣本數) 趨近於無限,則對於任意一個 point estimator $\hat{θ_m}$ 與真實參數 θ 超出誤差的機率會趨近於 0
## Maximum Likelihood (ML) Estimation

* 定義: 找到一個 θ,使得 "在給定 θ 的情況下,抽樣 m 次剛好得到 m 個訓練資料樣本" 的機率最大
* 由於樣本互相獨立,故 joint probability 相當於各樣本出現機率相乘
* 由於機率乘積過小,因此取個不影響結果的對數

$θ_{ML}$ 還可以等價以期望值的方式來表示
## KL divergence
常見於生成式模型中

* 最大化 Maximum Likelihood (ML) Estimation 相當於最小化 KL divergence
* 因為在 KL divergence 的定義中,只有後面那項跟 θ 有關,而且是用扣的
* 很剛好的後面那項就是 $θ_{ML}$
# L6: Deep Feedforward Networks
* 為了處理非線性問題,引入了多層神經網路與非線性的 activation function

* max{} 中的內容是第一層神經網路
* 經過 max{0, x} 進行 ReLU 線性變換後,做為第二層神經網路的輸入
## 決定損失函數的背後原理
* 目標: 找出參數 θ,使得 再給定輸入資料 x, 以及參數 θ 的情況下,得到正確答案的機率 p(y∣x;θ) 越大越好
loss function

* 為了消除輸出層的 activation function 中,exp() 函數快速增長帶來的梯度消失問題,為 p(y∣x;θ) 取 log
* 通常在訓練時,偏好 "最小化" 誤差,因此加上一個負號
## Output Units 的選擇
* 常見的 Output Units 有三種: linear, sigmoid, and softmax
### linear
* 完全不限制神經元的輸出
* 不會有飽和 (過大或過小的輸入,使梯度趨近於 0) 的問題
### Sigmoid

* Sigmoid 將輸出嚴格控制在 0~1 間
* 適合在 Bernoulli (二分類) 問題上,做為 "預測輸入是某類的機率"
* 將 Sigmoid 代入 loss function 後,可以得到 softplus function
softplus function


* softplus function 的導數即為 Sigmoid function
* softplus function 的優勢在於,當答案是正確時梯度較小,而答案錯誤時梯度較大
* 換句話說,只有在答案正確時才會飽和
### Softmax
* 適用於多個 class 的分類問題,$\hat{y}$ 代表輸入為類別的機率
* 目標: 將 linear 神經元的輸出向量 z,轉成向量 $\hat{y}$
* 並使得 $\hat{y}$ 中的所有元素加起來為 1
Softmax function

* 上一節提到的 Sigmoid function,可被視為 Softmax function 在 n=2 的 special case
* 由於 $e^zi$ 可能會因為數值過大而 Overflow,在計算上可以略為改寫 Softmax function

* 在新的 Softmax function 中,分母及分子同時扣掉 z 向量中最大的值
## hidden Units 的選擇
* ReLU 是常見的選擇
* hidden Units 的 activation 使用 ReLU 時,為了讓神經元的輸出非 0,建議將 bias 的初始值設定成一個很小的正數
* 缺點: ReLU 在輸入為負或 0 的情況下,會導致梯度為 0,無法學習
* 也可以使用 Leaky ReLU or PReLU 等讓神經網路的複雜性提高
* 或是使用 Maxout units (ReLU 可視為 Maxout units 的 special case)


* 總是選出多種線性變化中的最大值
## Architecture Design
* 結論: 越深的神經網路
* 表現更好
* 更難訓練
## Back-Propagation
* 有系統且有效率的計算 "每個參數對最終 loss 的影響"
以 Computational Graphs 為例說明

# Convolutional Neural Networks
## 設計目的
* 符合 kernal 特徵的區域分數會較大
## Pooling
* 統整不同種類特徵的特性
## Normalization
* 能增加收斂速度、表現及穩定性
## ResNet
* 學的是輸入跟輸出之間的差異性
* 還可以解決梯度消失的問題
# Transformer
* ChatGPT 中的 GPT 指的分別是
* Generative: 生成式
* Pretrained: 預先在沒有 label 的大型資料集上 self-learning
* Transformer: Transformer 架構
Transformer 架構圖

## Transformer 架構介紹
### Embedding Layer (架構圖中的紅色部分)

* 本層首先給定每個 word 一個獨一無二的 index
* 接著每個 index 都會對應至一個 1*512 維的 vector,表示語義關係
* 這些 vector 是 trainable 的
### Position Encoding

* 除了語義關係外,word 本身的位置也很重要,而位置信息則由 Position Encoding 來提供
* 對於 1\*512 維的 vector,偶數 index i 使用 sin function,奇數 index i 使用 cos function 做為產生 Position Encoding vector (同樣是 1\*512 維) 的函式
* d 指的是向量維度 512
* pos 指的是文字在整個句子中的位置
* 計算出 Position Encoding vector 後,與上一小節的 word embedding 相加做為本區的輸出
### Self-Attention

* Self-Attention 的輸入跟輸出是 5(一個句子中的單字數) * 512(word embedding vector 的長度) 的向量

* Q 代表的意義是 query,代表著 "查詢",每個單字的 Q 都會嘗試匹配其他單字的 K
* K 代表的意義是 key,代表著 "其他人是什麼樣的資訊",若某兩個單字較為接近,則透過 Q 與 V 乘出的對應值也會較大
* V 代表的意義是 value,代表著 "資訊" 本身

* 首先將 512 * 512 的 $W_q$、$W_k$、$W_v$ 矩陣 (參數會隨著訓練更新),乘以 Self-Attention 的輸入,得到 512 * 5 的 Q、K、V 矩陣

* 接著將 Q 與 K 相乘,計算出一個句子中的不同單字間的關係

* 由於是用乘的,因此對於某個單字與其他單字間的關係取 softmax,將值轉成 0~1 間的機率值
* 即上圖中的 $a_{1, 1}$ ... $a_{1, 5}$ 取一次 softmax

* 最後將剛剛取得的 "單字之間關聯",乘以 V 矩陣,做為 Self-Attention 的輸出
### Multi-Head Attention

* Multi-Head Attention 的原理幾乎跟 self attention 一樣
* 差別在於 Multi-Head Attention 有多組 Q、K、V 矩陣
* 這樣一來便可以同時學習不同字之間,多種不同的關係
### Residual Connection And Add & Norm layer

* Transformer 中使用了殘差網路連接 (Multi-Head Attention 的輸出與輸入相加),這樣做的優勢包含:
* 避免梯度消失問題
* 能夠更有效的保留之前學到的資訊
* 輸出與輸入相加後,使用 layer normorization

* 分別計算出每個單字向量的 mean 及 std,並帶公式進行 normorization
### "Masked" Multi-Head Attention

* Decoder 負責逐字生成句子的任務
* 因此,在生成當前單字時,不能看到更後面的內容
*
## BERT
* BERT 模型架構使用 Transformer 的 Encoder 部分,共疊了 12 或 24 層
* 訓練方式
* 對訓練資料進行預處理,每個句子中的單字可以是 \<Mask> token、改成錯誤的其他單字、或是留著正確答案。這樣做可以訓練模型的語意理解能力
* 對於不同句子,使用以下格式訓練資料。這樣做可以訓練模型的句子結構關聯能力
* [CLS] 句子一 [SEP] 句子二 [SEP]
* label 則是一個 binary 的值,表示句子一與句子二間有沒有關係
## Vision Transformer
# Introduction to Reinforcement Learning
強化學習領域架構圖

* Learner
* Environment:
* Model-Based RL: 可透過 environment (dynamics) model 實作。輸入為狀態及 Learner 採取的行動,輸出是下一個狀態
* Model-Free RL: 不建構環境,而是為每個可採取的行動排序好壞
* Learner 採取行動,並獲得結果
* 並根據 Reward 決定 RL 的訓練目標
* Reward 指出採取行動的好壞
* Reward 的設計是 RL 中的重大議題
## Modeling the Environment as Markov Decision Process
* Markov Chain: 包含多個狀態,及狀態間轉移機率的圖表
* 可以透過狀態集合 S 以及二維的狀態轉移矩陣 P 來表示
* Markov property: 只需要目前 state 的資訊,便可以決定未來的機率 (不受歷史紀錄影響)

### Markov Decision Process (MDP, 又稱為 Controll Mavkov Chain)

* 除了狀態集合 S,還包含可採取的行動集合 A
* 並重新定義狀態轉移矩陣 P,每個元素代表在目前的狀態採取某個行動後,轉移到下個狀態的機率
* 也就是相較於 Markov Chain,多了 "行動" 這個維度
## Policy
* Policy 指的是 Learner 在每個狀態下應該做什麼行動的規則書

* 通常使用神經網路實作 Policy,輸入是目前的狀態,輸出是 K 個神經元 (K 表示可採取的行動數量)
## value function

* $G_t(τ)$:
* 𝜏 是一條 [狀態1, 行動1, 狀態二, 行動2, ...] 的行動軌跡
* 而 $G_t(τ)$ 表示採取這條行動軌跡,累積的總 reward
* $V^π(s)$: 從狀態 s 出發,採取策略 π 能得到的 reward 期望值
* $Q^π(s, a)$: 從狀態 s 出發,先採取行動 a 後,之後都採取策略 π 能得到的 reward 期望值
* $V^π(s)$ 及 $Q^π(s, a)$ 可互相轉換
## Optimal Value Functions
* $V^*(s)$: 策略 π 可能有很多個。$V^*(s)$ 指的是採取最佳策略 $π^*$ 後能獲得的最大 $V^π(s)$
* $Q^*(s, a)$ 的定義同理

* 若對於所有狀態而言,$V^π(s)$ 都比 $V^{π'}(s)$ 好,則策略 π 比策略 π′ 好
* 在特殊的情況中,對於不同的狀態,有時候 $V^π(s)$ 比 $V^{π'}(s)$ 好,但有時候相反。這時候策略 π 無法與策略 π′ 比較
* 在有限狀態及動作的 MDP 中,最佳策略 $π^*$ 總是存在
## Value Iteration
透過 Value Iteration,總是能從 $V_0$ 找到 $V^*$

* 步驟一: 一開始的 iteration count k 為 0。並將所有狀態的 $V_0(s)$ 初始化成 0
* 步驟二: 接著在每個 iteration 中 計算 $V_{k+1}(s)$,持續直到收斂 (保證能收斂)
* 嘗試每個動作、取得即時獎勵 (在狀態 s 下採取 a 動作能得到的獎勵 $R_s^a$) + 未來期望報酬最大的那個
## Q-Value Iteration
與上小節類似的,Q-Value Iteration 能從 $Q_0$ 找到 $Q^*$

* 步驟一: 一開始的 iteration count k 為 0。並將所有狀態的 $Q_0(s, a)$ 初始化成 0
* 步驟二: 接著在每個 iteration 中 計算 $Q_{k+1}(s, a)$,持續直到收斂 (保證能收斂)
* 嘗試每個動作、取得即時獎勵 (在狀態 s 下採取 a 動作能得到的獎勵 $R_s^a$) + 未來期望報酬最大的那個
Q-learning
* 當 Q-Value Iteration 中的 P 及 R 是未知的,可以透過 sampling s 及 r 來學到 Q,這就是 Q-learning
## Policy Iteration (PI)
透過 greedy 的方式實現策略 π 的更新

* 步驟一: 一開始的 iteration count k 為 0。並隨意的給定初始策略
* 步驟二: 接著在每個 iteration 中 計算 $π_{k+1}(s)$,持續直到收斂 (保證能收斂)
* 計算使用當前策略 $π_k$ 的情況下的 Q-Value
* 根據 Q-Value 貪婪的更新下一輪更好的 $π_{k+1}$
* 因為每次的改動都至少不會變差
## Q-learning


* 下面那條便是 Q-learning 的公式
* 僅僅不斷 sample P 及 R 是不夠的,這樣會使模型的訓練無法穩定收斂
* 還需要加上 α,負責調整模型對新資訊的 "接受程度"。訓練越後期,α 將會越小,模型將會更相信自己目前所學而非新資訊

* 從第 1 步到無限步,加起來的 α 是無限大。這允許模型在無限步之後,無論 Q 的初始值是多少都可以更新至 $Q^*$
* $a_t$ (當前採取的行動) 的選擇
### Off-Policy
* 學習策略跟與環境互動的策略不同時,這種學習方式稱為 Off-Policy
* Q-learning 便是一種 Off-Policy
### Double Q-Learning
* Q-learning 可能會面臨 Overestimation (高估數值) 的問題
* Double Q-Learning 可以緩解這種情況

* 包含兩個 Q table, $Q^A$, $Q^B$
* 使用 $Q^B$ 的 reward 來更新 $Q^A$
* 使用 $Q^A$ 的 reward 來更新 $Q^B$
## Value-based RL with Function Approximation
* 當狀態空間過大時,沒辦法把所有狀態存起來
* 使用參數 w 去近似 V、Q
* 參數 w 可以是簡單的線性近似
* 或是 Deep Network,並引入機器學習中的 Loss 及更新權重的概念
Loss

weight update

## DQN

## DQN Enhancements
### 能處理連續 action 的 DQN
* 可以使用以下的技巧處理:
1. Discretization tricks: 將連續的 action space 離散化。可以獨立離散每個維度,或只離散一些關鍵動作。
2. Normalized advantage function: 重新設計 Q function,使其在連續的 action space 下有解
3. Amortized Q-learning: 引入額外的 Network,輸出近似於最佳解的動作
# Policy-Based Reinforcement Learning
## 離散形式

* 希望直接學出一個策略 pi,表示在給定環境的情況下,採取行動 的 distribution
## 連續形式

* 若 action space 是連續形式,可以進一步的假設 action 是從 gussian sample 的
* 由於 gussian 太簡單。還可以使用 Reparameterization trick 進一步優化
## 梯度計算方式
### 方法一: Total Reward PG

### 方法二: REINFORCE Policy Gradient

* 往能使 Q 較高的梯度前進
* 可能有很多組 s, a,因此取期望值
### 方法三: Q-Value and Discounted State Visitation
## Stochastic Policy
* 給定狀態後,輸出一個機率分佈,根據這個分佈隨機 sample action 的策略
* 問題: 當有兩個梯度方向相反,但得分接近的動作時,sample action 的隨機性會導致梯度更新方向極不穩定
* 解法:

* 加入 Baseline function,在不影響期望值的前提下,降低 varience,讓訓練更穩定
## Deterministic Policies
* sample 會產生隨機性 (varience)
* 本節講述如何將 grandint 的計算改成確定性,沒有 varience 的

## Monte Carlo Policy Evaluation
* 問題:
* 只適用於有完整 episode 的問題
* varience 過高
## Temporal Difference (TD) Learning
* 是一種在沒有整個 episode 完成之前,就可以更新預測值(如 value function) 的方法

* 將上面公式的紅色區域,替換成下面公式的藍色區域
* bootstrapping 技巧
其變體為 n-Step TD: Using n-Step Return For Prediction
## Generalized Advantage Estimator (GAE)
* Using TD(λ) to Estimate Aπ (s, a)
# L10-Recurrent Neural Networks (RNN)
## RNN 模型架構

* 模型的主要權重分成三個
* Input-to-hidden units (U)
* Hidden-to-hidden units (W)
* Hidden-to-output units (V)
## RNN Loss
* 當模型的輸出是多類別時,可以使用 softmax 做為最後一層的 activation function
* RNN 第 t 步的條件機率 $p_{model}$ 可表示為

* 例如第 t 步的 ground truth $y^{(t)}$= [1, 0, 0]
* 第 t 步的模型輸出為 $\hat{y}^{(t)}$= [0.8, 0.1, 0.1]
* 則條件機率為 1 * 0.8 + 0 * 0.1 + 0 * 0.1
* RNN 第 t 步的 Loss $L^{t}$ 可表示為 $-log{p_{model}}$
* RNN 的 total Loss 即為每一步的 Loss 的加總
## RNN 數學性質

* RNN 的輸出 $y^{(1)}$, $y^{(2)}$ 之間是 conditionally independent 的,因此第一個等式成立,可以直接拆開相乘
* 也因為某一步的輸出跟之前的輸出無關,因此不適合用在翻譯任務上
* 由於 $y^{(t)}$ 跟 $x^{(t+1)}$, $x^{(t+2)}$ 都無關,因此第二個等式成立
## RNN back propagation 和梯度計算

* 拿 Loss function L 對每個時間點 t、每個權重 i 進行梯度的計算
* 概念與 back propagation 相同
## RNN 模型架構延伸

* 與傳統 RNN 不同的是,只有在最後一步才產生一個輸出
## RNN 問題
* RNN 會遇到梯度消失或梯度爆炸的問題
* 當 input sequence t 過長時,梯度在每一步回傳的過程中都需要乘以 Jacobian (當前狀態如何影響下一個狀態) 的比例
* 當這個比例趨近 0 的時候,梯度便會消失;在 forward 的時候,太久以前的輸入也對現在要計算的 t 幾乎沒影響
* 同理,當這個比例很大的時候,梯度便會爆炸;在 forward 的時候,最近的輸入對現在要計算的 t 相對沒影響
### 解決梯度爆炸的方法: clip grandient
* 當梯度大於某個 threshold V 時,透過 normorize grandient,可以有效解決梯度過大時,訓練不穩定的問題
* 這樣的做法稱為梯度裁減 (clip grandient)
### 解決梯度消失的方法
#### Leaky Units

* 利用類似 gate 參數的 α 來平衡記憶保留時間
## LSTM

## RNN 變體: Networks with Only Output Recurrence

* 原本 RNN 的遞迴結構發生在隱藏層中,現在改成發生在輸出層中
### 訓練技巧 --- teacher forcing

* 在 training 的時候使用 ground truth 做為下一層的輸入
* 在 testing 的時候使用模型的 prediction 做為下一層的輸入
* 問題: Open-loop issue
* 在 training 跟 testing 模型看到的東西不一樣
* 解法: 在 training 時,隨機選擇要將 ground truth 做為下一層的輸入,還是使用模型的 prediction 做為下一層的輸入
## RNN 變體: Networks both output recurrence and hidden unit connections

* 下一層隱藏層的輸入,同時包含了 ground truth (訓練階段,測試時需使用模型 predition)、以及上一層的 hidden unit
* 本質上,這便是一種 next word prediction,與 chatGPT 的概念相同
* 在預測第 t 個字時,會間接參考過去預測的 1~t-1 個字的資訊
* chatGPT 預測第 t 個字時,會直接透過 attention 參考過去預測的 1~t-1 個字的資訊
# L13-Linear Factor Models
Linear Factor Models 架構

* 假設一個資料模型
* 從 p(z) 中 sample 出 z
* 從 gussian distribution sample 出 ε
* 將 z 進行線性變換、並加上 noise 後,就可以得到資料集分佈中的其中一張圖片 x

* 在 smaple 出 z 的條件下,得到資料集分佈中的其中一張圖片 x 的機率,可以視為從 mean 為 Wz + μ、varience 為 $σ^2$I 的 gussian distribution 中 sample 出 x
## Probabilistic Principle Component Analysis (PPCA)
* PPCA 可視為 Linear Factor Models 的子集
* 假設 p(z) 是 gussian distribution
* 將 PPCA 視為模型來理解的話:
* 真實世界中資料的分佈通常只佔高維空間中的一小部分
* 在以下的公式中

* W 提供了資料分佈的方向資訊
* μ 提供了資料分佈的中心點
* ε 提供了資料分佈的範圍
* 透過 W、μ、ε,便可以逼近真實世界資料的分佈
* 在 PPCA 中的 x 本質上也是 gussian distribution,但相較於直接定義一個在高維空間的分佈
* 假設資料的維度是 D
* latent variable z 的維度是 M
* 由於真實世界的資料分佈通常只包含 D 維空間中,極小的特定區域 (D >> M)
* 因此直接拿較低維的 M 去描述這個資料分佈效率高
## Maximum Likelihood PCA
* 本節介紹如何使用 aximum Likelihood,求出 PPCA 這個模型的參數
* 在 PCA 的假設中,真實資料的分布是高維空間中的一個簡單的 hyper plane
* 而在現今使用 Deep network 的生成模型中,可以進行更複雜的假設真實資料的分布,是高維空間中的一個曲面
* 
* W 的 column vector 是 原始資料集分佈 x 的 Corvarience matrix 的 Eigan vector
* μ 則是原始資料集分佈 x 的平均
# Autoencoders
* 一種神經網路架構,包含:
* Encoder: 將輸入 x 轉成 latent h
* Decoder: 將 h 轉成輸出 y
* 希望還原出的 y 與 x 越像越好

## Variational Autoencoders (VAE)

* VAE 假設資料的生成過程是由一個
* mean 為 o(z;θ),o(z;θ) 是神經網路實作的函式
* varience 為 $σ^2I$
* 的標準 gussian distribution
* 其中,z 表示 latent variable;x 是輸出
### VAE loss

* 為了找到最佳參數 θ
* Reconstruction: 讓參數為 θ 的 Decoder,在給定 latent variable z 的情況下,生成資料 X 的機率分佈 p(X|Z;θ),能更接近真實輸入 X
* 使用從參數為 θ 的 Encoder sample 出的 Z 來估計期望值
* Regularization: 讓 Encoder 生成的 latent space q(Z|X) 能更接近簡單的高斯分佈 p(Z)
* 在 VAE 的延伸中,也可以假設 p(Z) 為更複雜的 GMM (多個高斯分佈組合而成的分佈) 或是其他分佈
### VAE conputation graph

* 在訓練的時候,由於 Reconstruction 跟 Regularization 都有用到 q(Z|X)
* 因此 Encoder 跟 Decoder 必須同時訓練
### VAE conputation graph --- edit

* 為了解決 "Sample z" 操作不可微分的問題,稍微修改架構
* 改成從 gussian distribution 中 sample 出一個 noise,並乘以 varience 再加上 mean
### VAE loss --- 等價改寫

* 可以將原 VAE loss 中 KL divergence 那項進一步拆分成 posterior entropy 及 cross-entropy with prior
### Conditional VAE (CVAE)

* 略為改寫 VAE loss,加入 condition c
# Generative Adversarial Networks (GAN)

* 生成式模型的本質便是從模型參數 𝜃 及從 gussian noise sample 出來的 z,生成目標 X
## GAN loss

* Discriminator cost $J^{(D)}$
* 期望模型把真資料判斷成 1,把假資料判斷成 0
* 在第一項中,x 來自真實資料,因此期望 D(x) 越接近 1 越好
* 在第一項中,G(z) 來自 generator 生成的資料,因此期望 D(G(z)) 越接近 0 越好
* Generator cost $J^{(G)}$
* $J^{(G)}$ = - $J^{(D)}$
## 找到最佳的 Discriminator

* 將 $J^{(D)}$ 對 D(x) 微分後,可以得到上面的公式,表示最佳的 Discriminator
關於 GAN 在 distribution 上的意義
Discriminator

* 藍線為 Discriminator 的輸出,最小值為 0,最大值為 1
* 黑線為真實資料分佈
* 綠線為 generator 預測的資料分佈
* 在 Discriminator 的訓練過程中,藍線和黑線被 Frozen,只有綠線能調整。調整目的是希望能讓真實資料分佈得分越高、generator 預測的資料分佈得分越低越好
## 找到最佳的 Generator
* 結論: 找到最佳的 Generator,就相當於最小化 $p_{data}$ 跟 $p_{g}$ 間 Jensen-Shannon divergence (JS divergence)
* $p_{data}$ 是真實資料分佈
* $p_{g}$ 是 generator 預測的資料分佈
訓練目標的差異

* 值得注意的是,GAN 中 generator 的訓練目標,並不是如 VAE 等模型的 "最小化 KL Divergence"
關於 GAN 在 distribution 上的意義
Generator
| | |
|:-----:|:-----:|
|  |  |
* 在 Generator 的訓練過程中,綠線和黑線被 Frozen,只有綠線能調整。調整目的是希望能讓 Generator 預測的資料分佈得分越高越好
## Implementation

* 從演算法中可以觀察到,為了訓練穩定,每訓練 k 步 Discriminator,才訓練一步 Generator
## GAN 的梯度消失問題

* 當 Discriminator 表現的很好時,Generator 可能會面臨梯度消失問題
## GAN 的 Mode Collapse Problem

* GAN 模型可能只會生成某些模式,因此生成多樣性不高
## Wasserstein GAN (WGAN)
* 當兩個 distribution 完全分開,KL divergence 跟 JS divergence 完全無法計算這種情況的差異及應該的更新方向,也就是梯度消失問題
* 因此,WGAN 引入了 Earth Mover distance
* 直觀的講,Earth Mover distance 表示將 distribution1 搬到 distribution2,所需的最小成本
* 因此,即使兩個 distribution 完全分開,梯度仍不會消失
* 引入 Earth Mover Distance 後,WGAN 的優化目標 (minmax, Generator 跟 Discriminator 分別想要最小跟最大化的目標)

* 特殊之處在於 f function 的限制 (任兩個在 f function 上的點連成的線,其斜率),能夠限制梯度
### 解 Earth Mover Distance
* Earth Mover Distance (EMD) 可以被轉化為 linear progremming 問題 (給定一組線性限制條件,最大或最小化目標函數)
# Diffusion
## forward process

* q 是 forward process 中的機率分佈
* 第 t 步 forward process 中的機率分佈,相當於一個高斯分佈,其中
* mean 為前一步 xt-1 乘以一個係數,varience 為乘以係數的純雜訊
* 性質: q(x2 | x1) = q(x2 | x1, x0)
* 是否給定 x0 對於 x2 的機率分佈並無影響
* 因此 x2 只依賴 x1

* Diffusion Model 的 Forward Process 是一個一階Markov chain
* Markov Chain 指的是 "未來只跟現在有關,與過去無關"
### reparametrization trick


* 直接計算 xt 跟 x0 間的關係
## reverse process

* 在 reverse process 中,q(xt | xt-1) 沒辦法直接算出來
* 因此假設其為 gussian distribution,並使用神經網路 pθ 近似
## Training

* 從 dataset 中隨挑一個 sample
* 隨機挑一個 timestemp t
* 隨機挑一個 noise ε
* 在訓練過程中,比較神經網絡參測的 noise (εθ) 和真正的 noise (ε),並更新梯度
## Sampling

* 隨機挑一個 noise 做為 xT
* 共跑 T 步,每步
* 將當前 noise 圖片 xt 扣除模型所預測的 noise,再加上一些 noise 後 成為 denoise 一步的結果 xt-1
# Likelihood Models: Flow Models
* 核心概念: 訓練一個一對一 mapping、可逆且可微分的 fθ,能將輸入 x 轉成 latent z
* 其中,latent z 假設為簡單的常態分佈
* 由於 fθ 可逆,因此從常態分佈中 smaple 出的 z 也可以透過 fθ 轉回 x
* x 跟 z 的維度相同
## Training
推導 max Likelihood,也就是訓練目標

## Sampling

* 從 normal distribution 中 smaple 出一個 z
* 透過 fθ 的反函數求得結果 x
## flow model 的視覺化意義

* flow model (flow x -> z) 能將 distribution x mapping 至 distribution z

* 值得注意的是,若是將 distribution x 的 CDF 做為 flow x -> z,且 distribution x 可微分,則 distribution of z 將會是 uniform distribution
* 又 uniform distribution 也可以透過可逆 mapping function 轉成其他 distribution (如 gussian)
* 因此,任何原始資料分佈 x,只要其 PDF 是連續的,便保證可轉成簡單的
## Constructing flows: composition

* 為了提升模型的表達力,將多個 flow 串起來 (仍具備可逆的特性)