# L1: Introduction ## Machine Learning 機器學習架構圖 ![image](https://hackmd.io/_uploads/ByBUmnbHgx.png =80%x) * x: 資料集 * φ(x): data representation。從原始資料轉換而來,更有用的表示。對模型的能力有很大影響 * y: 模型輸出。將 data representation 與模型參數相乘後,再通過 sigmoid 函數做為模型輸出 ![image](https://hackmd.io/_uploads/SkoJE3ZHgg.png =70%x) * 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 交給模型自行學習 ![image](https://hackmd.io/_uploads/rJqovhWrle.png =80%x) * 多層的 Deep Learning 模型以函數型式可以表示如上 * 其中,w, $θ_n$, ..., $θ_1$ 是不同層的模型參數 # L5: MachineLearningBasics ## Learning Algorithms --- Linear Regression 線性回歸 (Linear Regression) 模型的訓練誤差 $MSE^{(train)}$ ![image](https://hackmd.io/_uploads/H1xp76breg.png =50%x) * $m^{(train)}$: 訓練樣本數 * $\hat{y}^{(train)}$: 模型的預測值 ![image](https://hackmd.io/_uploads/rJMlBTWBeg.png =60%x) * 把每一筆訓練資料 $x_i$,都經過特徵轉換 (ϕ) 後,結果組合而成的矩陣 * 還需要乘以 w,即模型權重 * $y^{(train)}$: label。即目標值 * $\left\lVert \mathbf{...} \right\rVert_2^2$ 指的是 "每個其中的元素先平方再加總" ### 線性回歸的目標 找到權重 w,使得 $MSE^{(train)}$ 最小 (相當於 MSE 對 w 的梯度為 0) ![image](https://hackmd.io/_uploads/B1D1qaZSxg.png =20%x) 最後,w 有公式解 ![image](https://hackmd.io/_uploads/rk8Q5T-Bex.png =50%x) 上述的$\hat{y}$ 還可以繼續推廣,加入常數 b ![image](https://hackmd.io/_uploads/rJWS_0-Hge.png =50%x) 為了因應常數 b 對應要乘的那一項,需要稍微修改原本 w 跟 φ(x) 的定義,變成 $\tilde{w}$ 及 $\tilde{φ(x)}$ ![image](https://hackmd.io/_uploads/Hko_u0Zrex.png =50%x) ## Generalization * 模型的泛化能力 (Generalization) 指的是能在沒看過資料上表現好的能力 * Generalization error: 對於完全沒看過之輸入的錯誤期望值 * Bayes error: 理論上最小的 Generalization error ## Overfitting ![image](https://hackmd.io/_uploads/S1ftsV7Hxg.png =70%x) * 理論上 train set 跟 test set 都是從同一個 distribution 中 sample 出來的,模型表現會相同。但實際上由於 overfitting 的原因,train set 的表現通常較好 * 從上圖中可以看到,隨著模型的複雜度變高 (x 軸向右) * train loss 持續下降 * 但 Generalization error 下降後反而逐漸升高 ### Overfitting 解決方法: 使用 weight decay ![image](https://hackmd.io/_uploads/S1r5h4Qrgg.png =50%x) * $w^Tw$ 為懲罰項,為當前權重的平方 * 透過 λ 這個 hyper parameter 調整懲罰項的比例 * λ 越大,懲罰項越大,Loss 越大 * 這時權重太大反而會導致 loss 變高,如此一來便能限制權重值不能太大,減少 Overfitting 的情況 ## Estimators --- 以 Bernoulli distribution 為例 * Bernoulli distribution: 一次試驗只有兩種結果: 1 or 0 * Point estimation: 給定一堆樣本,從中估計出 "一個參數" * 例如給定一堆丟擲硬幣的數據,估計一棵硬幣出現正面的機率 * i.i.d = independent and identically distributed。即每次試驗間都是獨立的 ![image](https://hackmd.io/_uploads/HyBQ-8Qrle.png =70%x) * 上圖是一個 mean 為 θ 的 Bernoulli distribution ![image](https://hackmd.io/_uploads/BJtZ-8mSgx.png =30%x) * 一種常見的估計方法是使用平均值 * $\hat{θ_m}$ 便是一個 point estimator。可以視做一個函數,將觀測到的樣本轉成估計值 * 本身也是隨機變數 ### Bias ![image](https://hackmd.io/_uploads/B1gXfUQrlg.png =50%x) * 定義: estimator 的期望值,扣掉真實的參數 θ * ![image](https://hackmd.io/_uploads/HkGjzUQBgg.png =40%x) * 帶公式後可知,上述使用平均值的估計方法,計算出的estimator 期望值剛好為 θ * 因此由 bias 的定義可知,bias=0 * bias=0 的 estimator 又稱為 unbiased estimator ### consistency ![image](https://hackmd.io/_uploads/r1aEX8mrxe.png =50%x) * 定義: 當 m (樣本數) 趨近於無限,則對於任意一個 point estimator $\hat{θ_m}$ 與真實參數 θ 超出誤差的機率會趨近於 0 ## Maximum Likelihood (ML) Estimation ![image](https://hackmd.io/_uploads/rJX0YLmrgg.png =80%x) * 定義: 找到一個 θ,使得 "在給定 θ 的情況下,抽樣 m 次剛好得到 m 個訓練資料樣本" 的機率最大 * 由於樣本互相獨立,故 joint probability 相當於各樣本出現機率相乘 * 由於機率乘積過小,因此取個不影響結果的對數 ![image](https://hackmd.io/_uploads/S1NH6DmHgg.png =50%x) $θ_{ML}$ 還可以等價以期望值的方式來表示 ## KL divergence 常見於生成式模型中 ![image](https://hackmd.io/_uploads/r1MbawQSeg.png) * 最大化 Maximum Likelihood (ML) Estimation 相當於最小化 KL divergence * 因為在 KL divergence 的定義中,只有後面那項跟 θ 有關,而且是用扣的 * 很剛好的後面那項就是 $θ_{ML}$ # L6: Deep Feedforward Networks * 為了處理非線性問題,引入了多層神經網路與非線性的 activation function ![image](https://hackmd.io/_uploads/ByPaS8cBgl.png) * max{} 中的內容是第一層神經網路 * 經過 max{0, x} 進行 ReLU 線性變換後,做為第二層神經網路的輸入 ## 決定損失函數的背後原理 * 目標: 找出參數 θ,使得 再給定輸入資料 x, 以及參數 θ 的情況下,得到正確答案的機率 p(y∣x;θ) 越大越好 loss function ![image](https://hackmd.io/_uploads/SkwBdUcSxg.png =60%x) * 為了消除輸出層的 activation function 中,exp() 函數快速增長帶來的梯度消失問題,為 p(y∣x;θ) 取 log * 通常在訓練時,偏好 "最小化" 誤差,因此加上一個負號 ## Output Units 的選擇 * 常見的 Output Units 有三種: linear, sigmoid, and softmax ### linear * 完全不限制神經元的輸出 * 不會有飽和 (過大或過小的輸入,使梯度趨近於 0) 的問題 ### Sigmoid ![image](https://hackmd.io/_uploads/rkIpEwqrlg.png =60%x) * Sigmoid 將輸出嚴格控制在 0~1 間 * 適合在 Bernoulli (二分類) 問題上,做為 "預測輸入是某類的機率" * 將 Sigmoid 代入 loss function 後,可以得到 softplus function softplus function ![image](https://hackmd.io/_uploads/Sy4BOwiHxg.png =50%x) ![image](https://hackmd.io/_uploads/S1xKuvsSlg.png =50%x) * softplus function 的導數即為 Sigmoid function * softplus function 的優勢在於,當答案是正確時梯度較小,而答案錯誤時梯度較大 * 換句話說,只有在答案正確時才會飽和 ### Softmax * 適用於多個 class 的分類問題,$\hat{y}$ 代表輸入為類別的機率 * 目標: 將 linear 神經元的輸出向量 z,轉成向量 $\hat{y}$ * 並使得 $\hat{y}$ 中的所有元素加起來為 1 Softmax function ![image](https://hackmd.io/_uploads/Hk9bg_jBge.png =50%x) * 上一節提到的 Sigmoid function,可被視為 Softmax function 在 n=2 的 special case * 由於 $e^zi$ 可能會因為數值過大而 Overflow,在計算上可以略為改寫 Softmax function ![image](https://hackmd.io/_uploads/SJ6VKx2Hlx.png) * 在新的 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) ![image](https://hackmd.io/_uploads/SyI1Ce3Hge.png) ![image](https://hackmd.io/_uploads/rJVMAx3Hee.png) * 總是選出多種線性變化中的最大值 ## Architecture Design * 結論: 越深的神經網路 * 表現更好 * 更難訓練 ## Back-Propagation * 有系統且有效率的計算 "每個參數對最終 loss 的影響" 以 Computational Graphs 為例說明 ![image](https://hackmd.io/_uploads/BkEtQZ3Hel.png =70%x) # Convolutional Neural Networks ## 設計目的 * 符合 kernal 特徵的區域分數會較大 ## Pooling * 統整不同種類特徵的特性 ## Normalization * 能增加收斂速度、表現及穩定性 ## ResNet * 學的是輸入跟輸出之間的差異性 * 還可以解決梯度消失的問題 # Transformer * ChatGPT 中的 GPT 指的分別是 * Generative: 生成式 * Pretrained: 預先在沒有 label 的大型資料集上 self-learning * Transformer: Transformer 架構 Transformer 架構圖 ![image](https://hackmd.io/_uploads/S1ZHJahSxe.png =40%x) ## Transformer 架構介紹 ### Embedding Layer (架構圖中的紅色部分) ![image](https://hackmd.io/_uploads/H19VlphBgx.png =50%x) * 本層首先給定每個 word 一個獨一無二的 index * 接著每個 index 都會對應至一個 1*512 維的 vector,表示語義關係 * 這些 vector 是 trainable 的 ### Position Encoding ![image](https://hackmd.io/_uploads/H1lI-6hBll.png =50%x) * 除了語義關係外,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 ![image](https://hackmd.io/_uploads/SkSsbIRSgx.png =40%x) * Self-Attention 的輸入跟輸出是 5(一個句子中的單字數) * 512(word embedding vector 的長度) 的向量 ![image](https://hackmd.io/_uploads/Hk-7X8ABel.png =80%x) * Q 代表的意義是 query,代表著 "查詢",每個單字的 Q 都會嘗試匹配其他單字的 K * K 代表的意義是 key,代表著 "其他人是什麼樣的資訊",若某兩個單字較為接近,則透過 Q 與 V 乘出的對應值也會較大 * V 代表的意義是 value,代表著 "資訊" 本身 ![image](https://hackmd.io/_uploads/H13rfLABxx.png =40%x) * 首先將 512 * 512 的 $W_q$、$W_k$、$W_v$ 矩陣 (參數會隨著訓練更新),乘以 Self-Attention 的輸入,得到 512 * 5 的 Q、K、V 矩陣 ![image](https://hackmd.io/_uploads/B1Xg4UCHxg.png =40%x) * 接著將 Q 與 K 相乘,計算出一個句子中的不同單字間的關係 ![image](https://hackmd.io/_uploads/HJPGE8Crle.png =40%x) * 由於是用乘的,因此對於某個單字與其他單字間的關係取 softmax,將值轉成 0~1 間的機率值 * 即上圖中的 $a_{1, 1}$ ... $a_{1, 5}$ 取一次 softmax ![image](https://hackmd.io/_uploads/ryk-HICHgx.png =40%x) * 最後將剛剛取得的 "單字之間關聯",乘以 V 矩陣,做為 Self-Attention 的輸出 ### Multi-Head Attention ![image](https://hackmd.io/_uploads/SyeLd8Arll.png =70%x) * Multi-Head Attention 的原理幾乎跟 self attention 一樣 * 差別在於 Multi-Head Attention 有多組 Q、K、V 矩陣 * 這樣一來便可以同時學習不同字之間,多種不同的關係 ### Residual Connection And Add & Norm layer ![image](https://hackmd.io/_uploads/Hkzsu8CSxe.png =15%x) * Transformer 中使用了殘差網路連接 (Multi-Head Attention 的輸出與輸入相加),這樣做的優勢包含: * 避免梯度消失問題 * 能夠更有效的保留之前學到的資訊 * 輸出與輸入相加後,使用 layer normorization ![image](https://hackmd.io/_uploads/ryOBY8CHeg.png =60%x) * 分別計算出每個單字向量的 mean 及 std,並帶公式進行 normorization ### "Masked" Multi-Head Attention ![image](https://hackmd.io/_uploads/rJLoYLABex.png =90%x) * Decoder 負責逐字生成句子的任務 * 因此,在生成當前單字時,不能看到更後面的內容 * ## BERT * BERT 模型架構使用 Transformer 的 Encoder 部分,共疊了 12 或 24 層 * 訓練方式 * 對訓練資料進行預處理,每個句子中的單字可以是 \<Mask> token、改成錯誤的其他單字、或是留著正確答案。這樣做可以訓練模型的語意理解能力 * 對於不同句子,使用以下格式訓練資料。這樣做可以訓練模型的句子結構關聯能力 * [CLS] 句子一 [SEP] 句子二 [SEP] * label 則是一個 binary 的值,表示句子一與句子二間有沒有關係 ## Vision Transformer # Introduction to Reinforcement Learning 強化學習領域架構圖 ![image](https://hackmd.io/_uploads/BJ4x7CnHgx.png) * 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 的資訊,便可以決定未來的機率 (不受歷史紀錄影響) ![image](https://hackmd.io/_uploads/rJIRp0nBeg.png =50%x) ### Markov Decision Process (MDP, 又稱為 Controll Mavkov Chain) ![image](https://hackmd.io/_uploads/SkYPb1THxg.png) * 除了狀態集合 S,還包含可採取的行動集合 A * 並重新定義狀態轉移矩陣 P,每個元素代表在目前的狀態採取某個行動後,轉移到下個狀態的機率 * 也就是相較於 Markov Chain,多了 "行動" 這個維度 ## Policy * Policy 指的是 Learner 在每個狀態下應該做什麼行動的規則書 ![image](https://hackmd.io/_uploads/S1sdmkaBlg.png =70%x) * 通常使用神經網路實作 Policy,輸入是目前的狀態,輸出是 K 個神經元 (K 表示可採取的行動數量) ## value function ![image](https://hackmd.io/_uploads/HkJCBkaHle.png =50%x) * $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)$ 的定義同理 ![image](https://hackmd.io/_uploads/HkbgVQaSex.png =70%x) * 若對於所有狀態而言,$V^π(s)$ 都比 $V^{π'}(s)$ 好,則策略 π 比策略 π′ 好 * 在特殊的情況中,對於不同的狀態,有時候 $V^π(s)$ 比 $V^{π'}(s)$ 好,但有時候相反。這時候策略 π 無法與策略 π′ 比較 * 在有限狀態及動作的 MDP 中,最佳策略 $π^*$ 總是存在 ## Value Iteration 透過 Value Iteration,總是能從 $V_0$ 找到 $V^*$ ![image](https://hackmd.io/_uploads/H1C6EeaSgg.png =60%x) * 步驟一: 一開始的 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^*$ ![image](https://hackmd.io/_uploads/Sy9w9QpSgx.png =60%x) * 步驟一: 一開始的 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 的方式實現策略 π 的更新 ![image](https://hackmd.io/_uploads/BJdcH46Blg.png =60%x) * 步驟一: 一開始的 iteration count k 為 0。並隨意的給定初始策略 * 步驟二: 接著在每個 iteration 中 計算 $π_{k+1}(s)$,持續直到收斂 (保證能收斂) * 計算使用當前策略 $π_k$ 的情況下的 Q-Value * 根據 Q-Value 貪婪的更新下一輪更好的 $π_{k+1}$ * 因為每次的改動都至少不會變差 ## Q-learning ![image](https://hackmd.io/_uploads/B1R5e5yPlg.png =80%x) ![image](https://hackmd.io/_uploads/SJjslcyvge.png =80%x) * 下面那條便是 Q-learning 的公式 * 僅僅不斷 sample P 及 R 是不夠的,這樣會使模型的訓練無法穩定收斂 * 還需要加上 α,負責調整模型對新資訊的 "接受程度"。訓練越後期,α 將會越小,模型將會更相信自己目前所學而非新資訊 ![image](https://hackmd.io/_uploads/ByEFsc1wgg.png =70%x) * 從第 1 步到無限步,加起來的 α 是無限大。這允許模型在無限步之後,無論 Q 的初始值是多少都可以更新至 $Q^*$ * $a_t$ (當前採取的行動) 的選擇 ### Off-Policy * 學習策略跟與環境互動的策略不同時,這種學習方式稱為 Off-Policy * Q-learning 便是一種 Off-Policy ### Double Q-Learning * Q-learning 可能會面臨 Overestimation (高估數值) 的問題 * Double Q-Learning 可以緩解這種情況 ![image](https://hackmd.io/_uploads/rJ_5MjyDlx.png =90%x) * 包含兩個 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 ![image](https://hackmd.io/_uploads/BknK5i1wel.png =90%x) weight update ![image](https://hackmd.io/_uploads/SyZosj1Ple.png) ## DQN ![image](https://hackmd.io/_uploads/rJOlyhyvxe.png) ## 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 ## 離散形式 ![image](https://hackmd.io/_uploads/HyKOi7Uwle.png) * 希望直接學出一個策略 pi,表示在給定環境的情況下,採取行動 的 distribution ## 連續形式 ![image](https://hackmd.io/_uploads/rJW3ZV8wel.png) * 若 action space 是連續形式,可以進一步的假設 action 是從 gussian sample 的 * 由於 gussian 太簡單。還可以使用 Reparameterization trick 進一步優化 ## 梯度計算方式 ### 方法一: Total Reward PG ![image](https://hackmd.io/_uploads/HySo7ELvgg.png) ### 方法二: REINFORCE Policy Gradient ![image](https://hackmd.io/_uploads/SyhVFNLDxx.png) * 往能使 Q 較高的梯度前進 * 可能有很多組 s, a,因此取期望值 ### 方法三: Q-Value and Discounted State Visitation ## Stochastic Policy * 給定狀態後,輸出一個機率分佈,根據這個分佈隨機 sample action 的策略 * 問題: 當有兩個梯度方向相反,但得分接近的動作時,sample action 的隨機性會導致梯度更新方向極不穩定 * 解法: ![image](https://hackmd.io/_uploads/HkdrfHUDel.png) * 加入 Baseline function,在不影響期望值的前提下,降低 varience,讓訓練更穩定 ## Deterministic Policies * sample 會產生隨機性 (varience) * 本節講述如何將 grandint 的計算改成確定性,沒有 varience 的 ![image](https://hackmd.io/_uploads/BkcyvBLwll.png) ## Monte Carlo Policy Evaluation * 問題: * 只適用於有完整 episode 的問題 * varience 過高 ## Temporal Difference (TD) Learning * 是一種在沒有整個 episode 完成之前,就可以更新預測值(如 value function) 的方法 ![image](https://hackmd.io/_uploads/S19PKr8vge.png) * 將上面公式的紅色區域,替換成下面公式的藍色區域 * 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 模型架構 ![image](https://hackmd.io/_uploads/HyobJ_Q8gg.png =80%x) * 模型的主要權重分成三個 * Input-to-hidden units (U) * Hidden-to-hidden units (W) * Hidden-to-output units (V) ## RNN Loss * 當模型的輸出是多類別時,可以使用 softmax 做為最後一層的 activation function * RNN 第 t 步的條件機率 $p_{model}$ 可表示為 ![image](https://hackmd.io/_uploads/SJPHsP78le.png =70%x) * 例如第 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 數學性質 ![image](https://hackmd.io/_uploads/S17_y_78ll.png =80%x) * RNN 的輸出 $y^{(1)}$, $y^{(2)}$ 之間是 conditionally independent 的,因此第一個等式成立,可以直接拆開相乘 * 也因為某一步的輸出跟之前的輸出無關,因此不適合用在翻譯任務上 * 由於 $y^{(t)}$ 跟 $x^{(t+1)}$, $x^{(t+2)}$ 都無關,因此第二個等式成立 ## RNN back propagation 和梯度計算 ![image](https://hackmd.io/_uploads/Hy8Ruu78el.png =50%x) * 拿 Loss function L 對每個時間點 t、每個權重 i 進行梯度的計算 * 概念與 back propagation 相同 ## RNN 模型架構延伸 ![image](https://hackmd.io/_uploads/rJyljuXUel.png =50%x) * 與傳統 RNN 不同的是,只有在最後一步才產生一個輸出 ## RNN 問題 * RNN 會遇到梯度消失或梯度爆炸的問題 * 當 input sequence t 過長時,梯度在每一步回傳的過程中都需要乘以 Jacobian (當前狀態如何影響下一個狀態) 的比例 * 當這個比例趨近 0 的時候,梯度便會消失;在 forward 的時候,太久以前的輸入也對現在要計算的 t 幾乎沒影響 * 同理,當這個比例很大的時候,梯度便會爆炸;在 forward 的時候,最近的輸入對現在要計算的 t 相對沒影響 ### 解決梯度爆炸的方法: clip grandient * 當梯度大於某個 threshold V 時,透過 normorize grandient,可以有效解決梯度過大時,訓練不穩定的問題 * 這樣的做法稱為梯度裁減 (clip grandient) ### 解決梯度消失的方法 #### Leaky Units ![image](https://hackmd.io/_uploads/rJUkVFQLgx.png =60%x) * 利用類似 gate 參數的 α 來平衡記憶保留時間 ## LSTM ![image](https://hackmd.io/_uploads/rkjWHKXUge.png =60%x) ## RNN 變體: Networks with Only Output Recurrence ![image](https://hackmd.io/_uploads/HkKtsKmIee.png =70%x) * 原本 RNN 的遞迴結構發生在隱藏層中,現在改成發生在輸出層中 ### 訓練技巧 --- teacher forcing ![image](https://hackmd.io/_uploads/rkSe2YX8eg.png =60%x) * 在 training 的時候使用 ground truth 做為下一層的輸入 * 在 testing 的時候使用模型的 prediction 做為下一層的輸入 * 問題: Open-loop issue * 在 training 跟 testing 模型看到的東西不一樣 * 解法: 在 training 時,隨機選擇要將 ground truth 做為下一層的輸入,還是使用模型的 prediction 做為下一層的輸入 ## RNN 變體: Networks both output recurrence and hidden unit connections ![image](https://hackmd.io/_uploads/r14kpF7Ixx.png =60%x) * 下一層隱藏層的輸入,同時包含了 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 架構 ![image](https://hackmd.io/_uploads/rkiC-GILgl.png =30%x) * 假設一個資料模型 * 從 p(z) 中 sample 出 z * 從 gussian distribution sample 出 ε * 將 z 進行線性變換、並加上 noise 後,就可以得到資料集分佈中的其中一張圖片 x ![image](https://hackmd.io/_uploads/HkhC2GU8ex.png =50%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 視為模型來理解的話: * 真實世界中資料的分佈通常只佔高維空間中的一小部分 * 在以下的公式中 ![image](https://hackmd.io/_uploads/B1hoDML8le.png =30%x) * 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 的生成模型中,可以進行更複雜的假設真實資料的分布,是高維空間中的一個曲面 * ![image](https://hackmd.io/_uploads/B1hoDML8le.png =30%x) * W 的 column vector 是 原始資料集分佈 x 的 Corvarience matrix 的 Eigan vector * μ 則是原始資料集分佈 x 的平均 # Autoencoders * 一種神經網路架構,包含: * Encoder: 將輸入 x 轉成 latent h * Decoder: 將 h 轉成輸出 y * 希望還原出的 y 與 x 越像越好 ![image](https://hackmd.io/_uploads/HktqWj2Lxe.png =50%x) ## Variational Autoencoders (VAE) ![image](https://hackmd.io/_uploads/B1F18j3Lgg.png =60%x) * VAE 假設資料的生成過程是由一個 * mean 為 o(z;θ),o(z;θ) 是神經網路實作的函式 * varience 為 $σ^2I$ * 的標準 gussian distribution * 其中,z 表示 latent variable;x 是輸出 ### VAE loss ![image](https://hackmd.io/_uploads/SyjfdohLgg.png) * 為了找到最佳參數 θ * 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 ![image](https://hackmd.io/_uploads/HyztB33Lxe.png =70%x) * 在訓練的時候,由於 Reconstruction 跟 Regularization 都有用到 q(Z|X) * 因此 Encoder 跟 Decoder 必須同時訓練 ### VAE conputation graph --- edit ![image](https://hackmd.io/_uploads/S1e7833Lge.png =70%x) * 為了解決 "Sample z" 操作不可微分的問題,稍微修改架構 * 改成從 gussian distribution 中 sample 出一個 noise,並乘以 varience 再加上 mean ### VAE loss --- 等價改寫 ![image](https://hackmd.io/_uploads/rkDlka3Ugl.png) * 可以將原 VAE loss 中 KL divergence 那項進一步拆分成 posterior entropy 及 cross-entropy with prior ### Conditional VAE (CVAE) ![image](https://hackmd.io/_uploads/rkjqVp28ge.png =70%x) * 略為改寫 VAE loss,加入 condition c # Generative Adversarial Networks (GAN) ![image](https://hackmd.io/_uploads/BybXwGJugx.png =30%x) * 生成式模型的本質便是從模型參數 𝜃 及從 gussian noise sample 出來的 z,生成目標 X ## GAN loss ![image](https://hackmd.io/_uploads/H1neuM1ugl.png) * 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 ![image](https://hackmd.io/_uploads/rJlt6Gydlg.png =40%x) * 將 $J^{(D)}$ 對 D(x) 微分後,可以得到上面的公式,表示最佳的 Discriminator 關於 GAN 在 distribution 上的意義 Discriminator ![image](https://hackmd.io/_uploads/r12iCMJOxx.png =70%x) * 藍線為 Discriminator 的輸出,最小值為 0,最大值為 1 * 黑線為真實資料分佈 * 綠線為 generator 預測的資料分佈 * 在 Discriminator 的訓練過程中,藍線和黑線被 Frozen,只有綠線能調整。調整目的是希望能讓真實資料分佈得分越高、generator 預測的資料分佈得分越低越好 ## 找到最佳的 Generator * 結論: 找到最佳的 Generator,就相當於最小化 $p_{data}$ 跟 $p_{g}$ 間 Jensen-Shannon divergence (JS divergence) * $p_{data}$ 是真實資料分佈 * $p_{g}$ 是 generator 預測的資料分佈 訓練目標的差異 ![image](https://hackmd.io/_uploads/Bkj8f71Oxl.png =70%x) * 值得注意的是,GAN 中 generator 的訓練目標,並不是如 VAE 等模型的 "最小化 KL Divergence" 關於 GAN 在 distribution 上的意義 Generator | | | |:-----:|:-----:| | ![圖1](https://hackmd.io/_uploads/rJcsgQk_xl.png) | ![圖2](https://hackmd.io/_uploads/HyOvJmy_gx.png) | * 在 Generator 的訓練過程中,綠線和黑線被 Frozen,只有綠線能調整。調整目的是希望能讓 Generator 預測的資料分佈得分越高越好 ## Implementation ![image](https://hackmd.io/_uploads/HyMydQ1dll.png) * 從演算法中可以觀察到,為了訓練穩定,每訓練 k 步 Discriminator,才訓練一步 Generator ## GAN 的梯度消失問題 ![image](https://hackmd.io/_uploads/HyyH9Xk_lx.png) * 當 Discriminator 表現的很好時,Generator 可能會面臨梯度消失問題 ## GAN 的 Mode Collapse Problem ![image](https://hackmd.io/_uploads/SJD2cQJdeg.png) * 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 分別想要最小跟最大化的目標) ![image](https://hackmd.io/_uploads/SkGPGr1uel.png) * 特殊之處在於 f function 的限制 (任兩個在 f function 上的點連成的線,其斜率),能夠限制梯度 ### 解 Earth Mover Distance * Earth Mover Distance (EMD) 可以被轉化為 linear progremming 問題 (給定一組線性限制條件,最大或最小化目標函數) # Diffusion ## forward process ![image](https://hackmd.io/_uploads/rJ3x6Uk_ll.png) * q 是 forward process 中的機率分佈 * 第 t 步 forward process 中的機率分佈,相當於一個高斯分佈,其中 * mean 為前一步 xt-1 乘以一個係數,varience 為乘以係數的純雜訊 * 性質: q(x2 | x1) = q(x2 | x1, x0) * 是否給定 x0 對於 x2 的機率分佈並無影響 * 因此 x2 只依賴 x1 ![image](https://hackmd.io/_uploads/By8jJvk_gl.png) * Diffusion Model 的 Forward Process 是一個一階Markov chain * Markov Chain 指的是 "未來只跟現在有關,與過去無關" ### reparametrization trick ![image](https://hackmd.io/_uploads/BJoqeP1_ge.png =25%x) ![image](https://hackmd.io/_uploads/r1f9xDkuxl.png =50%x) * 直接計算 xt 跟 x0 間的關係 ## reverse process ![image](https://hackmd.io/_uploads/r1nSqPJdeg.png) * 在 reverse process 中,q(xt | xt-1) 沒辦法直接算出來 * 因此假設其為 gussian distribution,並使用神經網路 pθ 近似 ## Training ![image](https://hackmd.io/_uploads/B1tSquJdlg.png) * 從 dataset 中隨挑一個 sample * 隨機挑一個 timestemp t * 隨機挑一個 noise ε * 在訓練過程中,比較神經網絡參測的 noise (εθ) 和真正的 noise (ε),並更新梯度 ## Sampling ![image](https://hackmd.io/_uploads/r1SBi_kueg.png) * 隨機挑一個 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,也就是訓練目標 ![image](https://hackmd.io/_uploads/S1N3vRbdel.png =80%x) ## Sampling ![image](https://hackmd.io/_uploads/B1A1uRZuel.png =40%x) * 從 normal distribution 中 smaple 出一個 z * 透過 fθ 的反函數求得結果 x ## flow model 的視覺化意義 ![image](https://hackmd.io/_uploads/BkV4jAZOle.png) * flow model (flow x -> z) 能將 distribution x mapping 至 distribution z ![image](https://hackmd.io/_uploads/ry26T0b_ll.png =60%x) * 值得注意的是,若是將 distribution x 的 CDF 做為 flow x -> z,且 distribution x 可微分,則 distribution of z 將會是 uniform distribution * 又 uniform distribution 也可以透過可逆 mapping function 轉成其他 distribution (如 gussian) * 因此,任何原始資料分佈 x,只要其 PDF 是連續的,便保證可轉成簡單的 ## Constructing flows: composition ![image](https://hackmd.io/_uploads/HkqcDyf_gg.png =70%x) * 為了提升模型的表達力,將多個 flow 串起來 (仍具備可逆的特性)