CMU DLSys 课程笔记 2 - ML Refresher / Softmax Regression
CMU DLSys 課程筆記 2 - ML Refresher / Softmax Regression
本節 Slides | 本節課程視頻
這一節課是對機器學習內容的一個復習,以 Softmax Regression 為例講解一個典型的有監督機器學習案例的整個流程以及其中的各種概念。預期讀者應當對機器學習的基本概念有一定的了解。
目錄
-
CMU DLSys 課程筆記 2 - ML Refresher / Softmax Regression
- 目錄
- 機器學習基礎
-
Softmax Regression 案例
- 問題定義
- 模型假設
- 損失函數
- 優化方法
- 完整算法描述
機器學習基礎
針對于手寫數字識別這一問題,傳統的圖像識別算法可能是首先找到每個數字的特征,然后手寫規則來識別每個數字。這種方式的問題在于,當我們想要識別的對象的種類很多時,我們需要手動設計的規則就會變得非常復雜,而且這些規則很難設計得很好,因為我們很難找到一個完美的特征來區分所有的對象。
而機器學習方法則是讓計算機自己學習如何區分這些對象,我們只需要給計算機一些數據,讓它自己學習如何區分這些數據,這樣的方法就可以很好地解決這個問題。
具體到有監督機器學習方法,我們需要給計算機一些數據,這些數據包含了我們想要識別的對象的一些特征,以及這些對象的標簽,計算機需要從這些數據中學習到如何區分這些對象,如下圖
圖里中間部分即為我們需要建立的機器學習模型,通常由以下內容組成:
- 模型假設:描述我們如何將輸入(例如數字的圖像)映射到輸出(例如類別標簽或不同類別標簽的概率)的“程序結構”,通過一組參數進行參數化。
- 損失函數:指定給定假設(即參數選擇)在所關注任務上的表現“好壞”的函數。
- 優化方法:確定一組參數(近似)最小化訓練集上損失總和的過程。
Softmax Regression 案例
問題定義
讓我們考慮一個 k 類分類問題,其中我們有:
- 訓練數據:\(x^{(i)} \in \R^n\), \(y^{(i)} \in {1,\dots, k}\) for \(i = 1, … , m\)
- 其中 \(n\) 為輸入數據的維度,\(m\) 為訓練數據的數量,\(k\) 為分類類別的數量
- 針對 28x28 的 MNIST 數字進行分類,\(n = 28 \cdot 28 = 784\), \(k = 10\), \(m = 60,000\)
模型假設
我們的模型假設是一個線性模型,即
\[h_\theta(x) = \theta^T x \]其中 \(\theta \in \R^{n\times k}\) 是我們的模型參數,\(x \in \R^n\) 是輸入數據。
機器學習中,經常使用的形式是多個輸入疊加在一起的形式,即
\[X \in \R^{m\times n}= \begin{bmatrix} {x^{(1)}}^T \\ \vdots \\ {x^{(m)}}^T \end{bmatrix}, \quad y = \begin{bmatrix} y^{(1)} \\ \vdots \\ y^{(m)} \end{bmatrix} \]然后線性模型假設可以寫為
\[h_\theta(X) = \begin{bmatrix} {x^{(1)}}^T\theta \\ \vdots \\ {x^{(m)}}^T\theta \end{bmatrix} = X\theta \]損失函數
最簡單的損失函數就是根據是否預測正確,如
\[\ell_{e r r}(h(x), y)=\left\{\begin{array}{ll} 0 & \text { if } \operatorname{argmax}_{i} h_{i}(x)=y \\ 1 & \text { otherwise } \end{array}\right. \]我們經常用這個函數來評價分類器的質量。但是這個函數有一個重大的缺陷是非連續,因此我們無法使用梯度下降等優化方法來優化這個函數。
取而代之,我們會用一個連續的損失函數,即交叉熵損失函數
\[z_{i}=p(\text { label }=i)=\frac{\exp \left(h_{i}(x)\right)}{\sum_{j=1}^{k} \exp \left(h_{j}(x)\right)} \Longleftrightarrow z \equiv \operatorname{softmax}(h(x)) \] \[\ell_{ce}(h(x), y) = -\log p(\text { label }=y) = -h_y(x) + \log \sum_{j=1}^k \exp(h_j(x)) \]這個損失函數是連續的,而且是凸的,因此我們可以使用梯度下降等優化方法來優化這個損失函數。
優化方法
我們的目標是最小化損失函數,即
\[\min_{\theta} \frac{1}{m} \sum_{i=1}^m \ell_{ce}(h_\theta(x^{(i)}), y^{(i)}) \]我們使用梯度下降法來優化這個損失函數,針對函數\(f:\R^{n\times k} \rightarrow \R\),其梯度為
\[\nabla_\theta f(\theta) = \begin{bmatrix} \frac{\partial f}{\partial \theta_{11}} & \dots & \frac{\partial f}{\partial \theta_{1k}} \\ \vdots & \ddots & \vdots \\ \frac{\partial f}{\partial \theta_{n1}} & \dots & \frac{\partial f}{\partial \theta_{nk}} \end{bmatrix} \]梯度的幾何含義為函數在某一點的梯度是函數在該點上升最快的方向,如下圖
我們可以使用梯度下降法來優化這個損失函數,即
\[\theta \leftarrow \theta - \alpha \nabla_\theta f(\theta) \]其中 \(\alpha \gt 0\) 為學習率,即每次更新的步長。學習率過大會導致無法收斂,學習率過小會導致收斂速度過慢。
我們不需要針對每個樣本都計算一次梯度,而是可以使用一個 batch 的樣本來計算梯度,這樣可以減少計算量,同時也可以減少梯度的方差,從而加快收斂速度,這種方法被稱為隨機梯度下降法(Stochastic Gradient Descent, SGD)。該方法的算法描述如下
\[\left. \begin{array}{l} \text { Repeat:} \\ \text { \quad Sample a batch of data } X \in \R^{B\times n}, y \in \{1, \dots, k\}^B \\ \text { \quad Update parameters } \theta \leftarrow \theta-\alpha \nabla_{\theta} \frac{1}{B} \sum_{i=1}^{B} \ell_{ce}\left(h_{\theta}\left(x^{(i)}\right), y^{(i)}\right) \end{array} \right. \]前面都是針對 SGD 的描述,但是損失函數的梯度還沒有給出,我們一般使用鏈式法則進行計算,首先計算 softmax 函數本身的梯度
\[\frac{\partial \ell(h, y)}{\partial h_i} = \frac{\partial}{\partial h_i} \left( -h_y + \log \sum_{j=1}^k \exp(h_j) \right) = -e_y + \frac{\exp(h_i)}{\sum_{j=1}^k \exp(h_j)} \]寫成矩陣形式即為
\[\nabla_h \ell(h, y) = -e_y + \operatorname{softmax}(h) \]然后計算損失函數對模型參數的梯度
\[\frac{\partial \ell(h, y)}{\partial \theta} = \frac{\partial \ell(\theta^T x, y)}{\partial \theta} = \frac{\partial \ell(h, y)}{\partial h} \frac{\partial h}{\partial \theta} = x(\operatorname{softmax}(h) - e_y)^T \]寫成矩陣形式即為
\[\nabla_\theta \ell(h, y) = X^T (\operatorname{softmax}(X\theta) - \mathbb{I}_y) \]完整算法描述
最終算法描述為
\[\left. \begin{array}{l} \text { Repeat:} \\ \text { \quad Sample a batch of data } X \in \R^{B\times n}, y \in \{1, \dots, k\}^B \\ \text { \quad Update parameters } \theta \leftarrow \theta-\alpha X^T (\operatorname{softmax}(X\theta) - \mathbb{I}_y) \end{array} \right. \]以上就是完整的 Softmax Regression 的算法描述,最終在 hw0 中我們會實現這個算法,其分類錯誤率將低于 8 %。
總結
以上是生活随笔為你收集整理的CMU DLSys 课程笔记 2 - ML Refresher / Softmax Regression的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文心一言 VS 讯飞星火 VS chat
- 下一篇: STM32CubeMX教程8 TIM 通