Machine Learning : Support Vector Machine

Intro 尋找最大Margin的超平面 : $\text{fatness}(\mathbf{w}) = \min_{n=1,…,N} \text{distance}(\mathbf{x}_n, \mathbf{w})$ 標準型式 : Hard-Margin SVM Distance 先做投影 : $\text{distance}(\mathbf{x}, b, \mathbf{w}) = \frac{|\mathbf{w}^T (\mathbf{x} - \mathbf{x}’)|}{|\mathbf{w}|}$ 化簡完之後 : $= \frac{|\mathbf{w}^T \mathbf{x} + b|}{|\mathbf{w}|}$ 分離條件 對於所有點 $n$ 須滿足 : $y_n(\mathbf{w}^T \mathbf{x}_n + b) > 0$ (正確分類) 距離 : $\frac{y_n(\mathbf{w}^T \mathbf{x}_n + b)}{||\mathbf{w}||}$ 因為有縮放不變,可以設條件 $y_n(\mathbf{w}^T \mathbf{x}_n + b) = 1$ ,這樣margin就變成 $\frac{1}{||\mathbf{w}||}$ 最終的目標為最小化 $||\mathbf{w}||$ SVM with QP Solver SVM : $$ \begin{aligned} \text{Optimal } (b, \mathbf{w}) &= ? \ \min_{b, \mathbf{w}} & \frac{1}{2} \mathbf{w}^T \mathbf{w} \ \text{subject to } & y_n (\mathbf{w}^T \mathbf{x}_n + b) \ge 1, \quad \text{for } n = 1, 2, …, N \end{aligned} $$ ...

June 1, 2025 · 2 min

Machine Learning : Decision Tree

Intro $$ G(x) = \sum_{c=1}^{C} [b(x) = c] G_c(x) $$ Basic Decision Tree Algorithm 當還未滿足終止條件時,執行 : 學一個分割準則 $b(x)$ 當前節點分割 : $\mathcal{D}$ to $C$ parts $\mathcal{D}_c = {(x_n, y_n): b(x_n) = c}$ 分割出來的子集再做遞迴呼叫 : $G_c \leftarrow DecisionTree(\mathcal{D}_c)$ 返回當前節點的預測函數 : $G(x) = \sum_{c=1}^{C} [b(x) = c] G_c(x)$ C&RT (Classification and Regression Tree) Algorithm Branching 選擇最佳分割準則 總是創造二元樹 基於leaf的最佳常數 : $g_t(x) = E_{y|\text{optimal constant}}$ Purifying 用一個簡單的閾值做二元分類 純化節點 : $b(x) = \underset{\text{decision stumps } h(x)}{\operatorname{argmin}} [D_c \text{ with } h] \cdot \text{impurity}(D_c \text{ with } h)$ Some Metrics Regression Error : $\text{impurity}(\mathcal{D}) = \frac{1}{N} \sum_{n=1}^{N} (y_n - \bar{y})^2$ Classification Error : $1 - \max_{1 \le k \le K} \frac{\sum_{n=1}^{N} \mathbb{I}(y_n = k)}{N}$ Gini Index : $1 - \sum_{k=1}^{K} \left( \frac{\sum_{n=1}^{N} \mathbb{I}(y_n = k)}{N} \right)^2$ Algorithm 邊界條件 : 不能再做分支 學一個分割準則 : $b(x) = \underset{\text{decision stumps } h(x)}{\operatorname{argmin}} [D_c \text{ with } h] \cdot \text{impurity}(D_c \text{ with } h)$ 考慮最佳的樹樁 : $\mathcal{D}_c = {(\mathbf{x}_n, y_n) : b(\mathbf{x}_n) = c}$ ,切出兩個子集 遞迴 返回組合之後的模型 : $G(\mathbf{x}) = \sum_{c=1}^{2} \mathbb{I}(b(\mathbf{x}) = c) G_c(\mathbf{x})$ Regularize Pruning 做決策樹時,同時把複雜度加入懲罰項 先長出完全樹,再去每一步選擇能最小化 (Error + 複雜度) 的node Branching on Categorial Features 可以根據出現率 / label相關性排序,再做類似數值特徵的閾值分類 Surrogate Branch 關鍵的特徵剛好缺值 在訓練時對每個 $b(x)$ 就先算一次次要分裂,想辦法用其他特徵構造出效果差不多的樹樁 遺失資料時可以用替代路徑做分類 Properties 決策樹優勢 易於理解和視覺化 能處理數值和類別特徵 自動特徵選擇 複雜資料集處理 多維特徵空間分割 複雜決策邊界學習 Adaptive Boosting 結合弱分類器最後集成一個強大的分類器 Boostrap (Re-Weighting) 對原始資料做抽樣(有重複,不平均) 每個Learner想辦法最小化誤差 如果每次只是隨機Boostrap,Base Learner會太相似,重採樣強迫學習不同的解 ...

June 1, 2025 · 2 min

Machine Learning : Generative Model

Generative Adversarial Network Intro 把一些雜訊隨機映射到圖片裡面 Generator : 學生,生成圖像 Discriminator : 老師,判別圖像是不是假的 Generator 神經網路 Input : 高維度向量(雜訊) Output : 圖像 輸入向量的每個維度代表某些特徵 Discriminator判別器 也是個神經網路 Input : 圖像 Output : 標量值 用來判斷Generator的輸出是真的還是假的(打分數) 對抗式訓練流程 初始化Generator, Discriminator 進入循環,每個epoch重複 : 固定G、更新D,學習給真實物件高分 : $\theta_d \leftarrow \theta_d + \eta \nabla_{\theta_d} \tilde{V}(\theta_d)$ 固定D、更新G,學習產生可以騙過D的圖片 : 最小化 $-V_G = \frac{1}{m} \sum_{i=1}^{m} \log (1 - D(G(z^i)))$ , $\theta_g \leftarrow \theta_g - \eta \nabla_{\theta_g} \tilde{V}(\theta_g)$ Loss Function MinMax函數 : $\min_G \max_D V(D, G) = E_{x \sim p_{\text{data}}(x)}[\log D(x)] + E_{z \sim p_z(z)}[\log(1 - D(G(z)))]$ D學會最大會欺騙能力 G學會最大會欺騙能力 GAN Structured Learning Structured Learning 輸出 : 序列、矩陣、圖形、樹 Translation / Speech Recognition / Text to Image … Challenge One-Shot / Zero-Shot Learning 輸出空間太大 (很多類別沒有訓練資料) 規劃能力? 組件依賴性? GAN Generator : 只用來生成(組件級生成) Discriminator : 用來整題評估,找出最優解(planning) Generator / Discriminator learn by itself Generator 深度網路也可以拿來生成 (Recall : Auto-encoder) 只能模仿外觀,難以學習組件關聯 (無腦堆疊會導致無法訓練/過擬合) Discriminator 考慮整體畫面 生成問題 (負樣本從哪來?) Mode Collapsing 生成器只學到部分模式(容量不足) 多樣性不足(泛化能力差) Conditional Generation by GAN Text-to-Image 傳統監督 : 模糊圖像 Conditional GAN : 判別器接收圖片與條件,判別匹配程度 Image-to-Image 傳統監督(close) : 類似Auto encoder Conditional GAN : 判別labal與生成圖片是否為real pair Unsupervised Conditional Generation by GAN Direct Transformation 問題與解決 問題: 可能忽略輸入 解決方案: 網路設計避免問題 預訓練編碼器網路 Cycle consistency Cycle GAN 雙向轉換: $G_{X\rightarrow Y}$ 和 $G_{Y\rightarrow X}$ 循環一致性損失 Silver Hair範例 StarGAN: 多域處理 Projection to Common Space 架構 Domain X/Y各有Encoder和Decoder 共同潛在空間投影 重建誤差最小化 改進技術 參數共享: Couple GAN, UNIT Domain Discriminator Cycle Consistency: ComboGAN Semantic Consistency: DTN / XGAN Applications Image Disentanglement車輛面向轉換 混合風格生成 Collection style transfer Object transfiguration Season transfer Photo generation from paintings Photo enhancement Diffusion Model Intro ...

May 31, 2025 · 2 min

Machine Learning : Transformer

先從Auto Encoder開始 透過兩組神經網路學習資料的特徵表示法 透過decoder盡可能還原輸入 Intro 由很多部件組成,部件形成一些Block (encoder block, decoder block),堆疊這些block形成encoder, decoder Encoder & Decoder + Attention Encoder接收序列資料,透過位置編碼輸入模型,並產生Context Vector Decoder接收右移過的decoder輸出 (自回歸),並結合Encoder的Context Vector (注意力) Embedding Word Embedding : Bagging / Word2Vec Positional Embedding : 可以用訓練或是公式 $PE_{(pos, 2i)} = \sin(pos / 10000^{2i / d_{model}})$ $PE_{(pos, 2i+1)} = \cos(pos / 10000^{2i / d_{model}})$ 最後將兩者相加,得到輸入的向量表示法,用來餵給Transformer Attention Scaled Dot-Product Attention QKV矩陣 (Query, Key, Value) 最終的Attention Score是Value的加權和 Value為Key與Query的相似度,而不同的Q會產出不同的注意力 (Query Driven) $$ \text{Attention}(Q, K, V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V $$ ...

May 31, 2025 · 1 min

Machine Learning : Recurrent Neural Network

Intro 具有記憶的神經網路 適合處理序列資料 (NLP) 在每一步RNN都會通過當前的輸入與隱藏狀態計算出現在的隱藏狀態 : $$ h_t = f_W(\mathbf{h}_{t-1}, \mathbf{x}_t) $$ 然後再把隱藏狀態轉換成輸出 : $$ y_t = W_{hy}\mathbf{h}_t $$ Jordan Network Elman Network的recurrent經過延遲後作為現在這個layer的輸入,但Jordan是把輸出層當作記憶 Bidirectional Network 當序列資料整筆都是可預測的 (例如NLP任務),利用雙向RNN可以更好的理解上下文 RNN的缺點 遺忘資訊 : 因為每個時間步模型都會更新隱藏狀態 (矩陣乘法),如果權重小於1,就會導致前一個隱藏狀態的影響快速縮小 訓練不穩定 使用時間反向傳播 (BPTT),在每個時間點上展開成一個前向傳播的NN 反向傳播一直乘權重 + 激活,導致梯度消失 反之則會導致梯度指數增長,需要引入正則化 RNN的優點 高靈活性 : 可以處裡多種序列對序列的架構 (一對一、一對多、…) 用途 : 圖像描述(一對多) / 語意分類(多對一) / 翻譯(多對多) / 影片分類(多對多) / 文本生成(一對多/多對多) LSTM 用來解決長距離依賴 顯式記憶 (記憶細胞) 加上Gate來控制記憶單元的進出流量 (正則化) Memory Cell 圖中沒有標明的矩陣操作都是加法 輸入 : 當前的輸入 前一個隱藏狀態 前一個記憶 輸出 : ...

May 31, 2025 · 2 min

Machine Learning : Convolutional Neural Network

Intro 與神經網路類似, 但使用卷積取代權重向量 原本每層是 Perceptron -> Activation 現在變成 Convolution -> Activation -> Pooling 相對於NNet的參數量更少 Convolution 每個kernel(filter) 去跟 feature map 的對應區域做矩陣乘法 乘完之後移動,步數由stride決定 e.g. input=6x6, kernel=3x3, stride=1 -> 4x4 feature 可以使用超過一個kernel,就會增加feature的第三個維度 (2 kernel -> 2x4x4 feature) 例如 : RGB 3 channel 經由卷積層之後,下一個node相連的參數與kernel size相同,因此可以減少參數量 Pooling 這邊以Max Pooling為例 根據一個window去取區域內的最大值 可以做到降低特徵圖大小 -> subsampling 因保留最大值,最重要的特徵還是在,而且可以保持平移不變 減少參數量 Back Propagation (DL) 遵循以下公式: $$ \omega_i \leftarrow \omega_i - \eta \frac{\partial E}{\partial \omega_i} + \alpha \omega_i - \lambda \eta \omega_i $$ ...

April 15, 2025 · 4 min

Machine Learning : Neural Network

Intro 把許多神經元合成一個layer 藉由多個layer去把input映射到output 對整個模型的權重 $W_{ij}$ 去做學習 為深度學習之基礎 Activation function 用來決定一個節點是否要激活 同時用於normalize節點輸出 共分為以下三類 Binary step Linear step : 無法用於預測不同input對應的weight Non-Linear step : 允許堆疊layer, backpropagation 常見的非線性激活函數 : Sigmoid, tanh, ReLU, Leaky ReLU Sigmoid 輸出介於0與1 用於概率輸出 由於輸出中心非0, 會造成梯度下降時方向偏移, 而影響收斂速度 Tanh 輸出介於-1與1 (以0作為中心) 相較Sigmoid有更大動態範圍 輸入過大時, 也容易發生梯度消失 ReLU 實作上非常簡單: $$ f(x) = max(0, x) $$ 可緩解梯度消失 在負區為零可提升特徵表示之泛化能力 不過若輸入包含大量負數, 會導致死亡ReLU Leaky ReLU 與ReLU非常雷同, 不過在負區時加入一個斜率 額外的參數可能影響performance Architecture of Deep Learning 在每層layer要對下一層進行輸出時, 會在權重上再額外加上一個常數維度, 舉例: 在 3-5-1 的NNet中, 共有如下數目的weight: ...

March 22, 2025 · 2 min

Machine Learning : Perceptron, Linear Regression

Perceptron Intro 深度學習基礎單元(神經元) Linear classifier Perceptron Learning Algorithm 基本定義 資料 : $ (x, y) \Rightarrow (x_1, x_2) $ 方程式 : $ w_0c + w_1x_1 + w_2x_2 = (w_0, w_1, w_2) \cdot (c, x_1, x_2) = 0 $ 資料點位於直線右側時, 等式結果為正, 反之則為負 基本算法 : 修正錯誤 遇到錯誤的點時將往x方向的法向量加入w, 迫使資料點被放置於直線的另一側 實作方式 指定迭代次數, 若參數可正確分類則return 處理高維度資料 訂立一個 threshold, 取內積結果與 threshold 相差的正負值 關於迭代次數與參數正確性成正相關的證明 當 $\mathbf w^{(t)}$ 對樣本 $(x_k,y_k)$ 分類錯誤時,PLA會做以下更新 : $$ \mathbf w^{(t+1)} = \mathbf w^{(t)} + y_k x_k $$ ...

March 13, 2025 · 2 min