文章主要參考 github 倉庫 Lihang 添加自己的一點思考
文章目錄
-
- 前言
-
- 章節目錄
- 導讀
- 實作統計學習方法的步驟
- 統計學習分類
-
- 基本分類
- 按模型分類
- 按算法分類
- 按技巧分類
- 統計學習方法三要素
-
- 模型
-
- 模型是什麼?
- 政策
-
- 損失函數與風險函數
- 常用損失函數
- ERM與SRM
- 算法
- 模型評估與模型選擇
-
- 過拟合與模型選擇
- 正則化與交叉驗證
-
-
- 正則化
- 交叉驗證
-
- 泛化能力
- 生成模型與判别模型
-
- 生成方法
-
- 生成模型
- 判别方法
- 分類問題、标注問題、回歸問題
- 參考
前言
章節目錄
- 統計學習
- 統計學習的分類
- 基本分類
- 按模型分類
- 按算法分類
- 按技巧分類
- 統計學習三要素
- 模型
- 政策
- 算法
- 模型評估與模型選擇
- 訓練誤差與測試誤差
- 過拟合與模型選擇
- 正則化與交叉驗證
- 正則化
- 交叉驗證
- 泛化能力
- 泛化誤差
- 泛化誤差上界
- 生成模型與判别模型
- 監督學習應用
- 分類問題
- 标注問題
- 回歸問題
導讀
- 直接看目錄結構,會感覺有點亂,就層級結構來講感覺并不整齊。第二版重新梳理了這部分目錄結構,舒服多了,尤其之前的分類,回歸與标注因為出現了 1.10 造成目錄中這部分不對齊,非常不爽。結果,第二版改了。贊
-
本章最後的三個部分,這三個問題可以對比着看,如果暫時沒有概念,略過也可以,回頭對各個算法有了感覺回頭再看這裡。
這三部分怎麼對比,三部分都有個圖來說明,仔細看下差異,本文後面會對此展開。
- 關于損失函數,風險函數與目标函數注意體會差異
- 後面插點從深度學習角度拿到的點
- 關于機器學習三要素, 複旦大學邱錫鵬教授也有解讀^2: 模型, 學習準則, 優化算法. 這個定義比較接近代碼. 以 Tensorflow 為例. 通常會定義一個網絡(模型), 定義 Loss(學習準則), 定義優化算法(Optimizer), 然後開 Session, 不停的把資料帶入用 Opitmizer 去最小化 Loss.
- Losses, Metrics, 在 Keras 裡面劃分了兩個子產品, 解釋是 Losses 是 BP 過程用到的, 而 Metrics 實際和損失函數類似, 用來評價模型的性能, 但是不參與反向傳播. 從源碼也能看到, Metrics 裡面 import 了很多 Loss 算法
- 書中例子 1.1 可以參考PRML中對應的表述, 更詳細些。
- 在監督學習中輸入和輸出對稱為樣本,在無監督學習中輸入是樣本。
- 注意在介紹輸入空間,輸出空間等概念的時候,以及這一章的很多部分都會有個帽子,
, 書中也明确了監督學習中
,最後的概要總結部分對監督學習有這樣的描述:本書主要讨論監督學習的問題
,了解下這裡的假設。監督學習可以概括如下:從給定有限的訓練資料出發,假設資料是獨立同分布的,而且假設模型屬于某個假設空間,應用某一評價準則,從假設空間中選取一個最優的模型,使它對已給的訓練資料以及未知測試資料在給定評價标準意義下有最準确的預測。
- 在貝葉斯學習部分,提到
注意這裡面先驗是模型的先驗分布。将模型、為觀測要素及其參數用變量表示,使用模型的先驗分布是貝葉斯學習的特點。
-
在泛化誤差部分,用了 f ^ \hat f f^ 表示最優估計,這個有時候也會用 f ∗ f^* f∗表示意思差不多。有時候表示向量又要表示估計值,用 ∗ * ∗ 可能好看一點,比如 x ⃗ ∗ \vec x^* x
∗,但是通常沒本書都有自己的符号體系,向量可以通過字型表示,具體可以從書中的符号表部分了解。關于這一點,在第二版第一章就有所展現,監督和無監督學習中,模型用 hat 表示,在強化學習中,最優解用 * 表示。
- 提一下參考文獻,幾個大部頭都在,ESL,PRML,DL,PGM,西瓜書,還有 Sutton 的強化學習,不過這本書2018年出了第二版,感興趣的話可以看新版。
實作統計學習方法的步驟
統計學習方法三要素:模型,政策,算法
- 得到一個有限的訓練資料集合
- 确定包含所有可能的模型的假設空間,即學習模型的集合
- 确定模型選擇的準則,即學習的政策
- 實作求解最優模型的算法,即學習的算法
- 通過學習方法選擇最優的模型
- 利用學習的最優模型對新資料進行預測或分析
統計學習分類
基本分類
這部分内容新增了無監督學習和強化學習。值得注意的一個點,之前因為隻寫了監督學習,樣本表示(x, y)對,在無監督學習裡面,樣本就是x。
- 監督學習
- 無監督學習
- 強化學習
按模型分類
- 機率模型
- 非機率模型
在監督學習中,機率模型是生成模型,非機率模型是判别模型。
按算法分類
- 線上學習
- 批量學習
線上學習通常比批量學習更難。
按技巧分類
- 貝葉斯學習
- 核方法
統計學習方法三要素
模型
模型是什麼?
輸入與輸出之間的映射,即 f
在監督學習過程中,模型就是所要學習的條件機率分布或者決策函數。
注意書中的這部分描述,整理了一下到表格裡:
模型的假設空間(hypothesis space) 包含所有可能的條件機率分布或決策函數。假設空間中的模型一般有無窮多個。
假設空間KaTeX parse error: Undefined control sequence: \cal at position 1: \̲c̲a̲l̲ ̲F | 輸入空間KaTeX parse error: Undefined control sequence: \cal at position 1: \̲c̲a̲l̲ ̲X | 輸出空間KaTeX parse error: Undefined control sequence: \cal at position 1: \̲c̲a̲l̲ ̲Y | 參數空間 | |
---|---|---|---|---|
決策函數 | $\cal F\it ={f_{\theta} | Y=f_{\theta}(x), \theta \in \bf R \it ^n}$ | 變量 | 變量 |
條件機率分布 | $\cal F\it ={P | P_{\theta}(Y | X),\theta\in \bf R \it ^n}$ | 随機變量 |
書中描述的時候,有提到條件機率分布族,這個留一下,後面CH06有提到确認邏輯斯谛分布屬于指數分布族。
政策
損失函數與風險函數
損失函數(loss function)度量模型一次預測的好壞,風險函數(risk function)度量平均意義下模型預測的好壞,經驗風險(empirical risk)是訓練樣本的平均損失,由大數定律經驗風險趨于期望風險。
-
損失函數(loss function)或代價函數(cost function)
損失函數定義為給定輸入 X X X的預測值 f ( X ) f(X) f(X)和真實值 Y Y Y之間的非負實值函數,記作 L ( Y , f ( X ) ) L(Y,f(X)) L(Y,f(X))
-
風險函數(risk function)或期望損失(expected loss)
這個和模型的泛化誤差的形式是一樣的
R e x p ( f ) = E p [ L ( Y , f ( X ) ) ] = ∫ X × Y L ( y , f ( x ) ) P ( x , y ) d x d y R_{exp}(f)=E_p[L(Y, f(X))]=\int_{\mathcal X\times\mathcal Y}L(y,f(x))P(x,y)\, {\rm d}x{\rm d}y Rexp(f)=Ep[L(Y,f(X))]=∫X×YL(y,f(x))P(x,y)dxdy
模型 f ( X ) f(X) f(X) 關于聯合分布 P ( X , Y ) P(X,Y) P(X,Y) 的平均意義下的損失(期望損失),但是因為 P ( X , Y ) P(X,Y) P(X,Y) 是未知的,是以前面的用詞是期望,以及平均意義下的。
這個表示其實就是損失的均值,反映了對整個資料的預測效果的好壞, P ( x , y ) P(x,y) P(x,y) 轉換成 ν ( X = x , Y = y ) N \frac {\nu(X=x, Y=y)}{N} Nν(X=x,Y=y) 更容易直覺了解, 可以參考CH09,6.2.2 節的部分描述來了解,但是真實的資料 N 是無窮的。
-
經驗風險(empirical risk)或經驗損失(empirical loss)
R e m p ( f ) = 1 N ∑ i = 1 N L ( y i , f ( x i ) ) R_{emp}(f)=\frac{1}{N}\sum^{N}_{i=1}L(y_i,f(x_i)) Remp(f)=N1∑i=1NL(yi,f(xi))
模型 f f f 關于訓練樣本集的平均損失
根據大數定律,當樣本容量 N 趨于無窮大時,經驗風險趨于期望風險
-
結構風險(structural risk)
R s r m ( f ) = 1 N ∑ i = 1 N L ( y i , f ( x i ) ) + λ J ( f ) R_{srm}(f)=\frac{1}{N}\sum_{i=1}^{N}L(y_i,f(x_i))+\lambda J(f) Rsrm(f)=N1∑i=1NL(yi,f(xi))+λJ(f)
J ( f ) J(f) J(f) 為模型複雜度, λ ⩾ 0 \lambda \geqslant 0 λ⩾0 是系數,用以權衡經驗風險和模型複雜度。
常用損失函數
損失函數數值越小,模型就越好
-
0-1損失
L ( Y , f ( X ) ) = { 1 , Y ≠ f ( X ) 0 , Y = f ( X ) L(Y,f(X))=\begin{cases}1, Y \neq f(X) \\0, Y=f(X) \end{cases} L(Y,f(X))={1,Y=f(X)0,Y=f(X)
-
平方損失
L ( Y , f ( X ) ) = ( Y − f ( X ) ) 2 L(Y,f(X))=(Y-f(X))^2 L(Y,f(X))=(Y−f(X))2
-
絕對損失
L ( Y , f ( X ) ) = ∣ Y − f ( X ) ∣ L(Y,f(X))=|Y-f(X)| L(Y,f(X))=∣Y−f(X)∣
-
對數損失
這裡 P ( Y ∣ X ) ⩽ 1 P(Y|X)\leqslant 1 P(Y∣X)⩽1,對應的對數是負值,是以對數損失中包含一個負号,為什麼不是絕對值?因為肯定是負的。
L ( Y , P ( Y ∣ X ) ) = − log P ( Y ∣ X ) L(Y,P(Y|X))=-\log P(Y|X) L(Y,P(Y∣X))=−logP(Y∣X)
ERM與SRM
樣本容量足夠大時經驗風險最小化(ERM)有很好的效果
小本容量很小時,ERM 會産生過拟合現象——>結構風險最小化(SRM)
經驗風險最小化(ERM)與結構風險最小化(SRM)的聯系和差別
-
極大似然估計是經驗風險最小化的一個例子
當模型是條件機率分布,損失函數是對數損失函數時,經驗風險最小化等價于極大似然估計(證明)
-
貝葉斯估計中的最大後驗機率估計是結構風險最小化的一個例子
當模型是條件機率分布,損失函數是對數損失函數,模型複雜度由模型的先驗機率表示時,結構風險最小化等價于最大後驗機率估計
算法
計算方法,即最優化問題的求解
如何保證找到全局最優解,并使求解的過程非常高效
這章裡面簡單提了一下,具體可以參考CH12表格中關于學習算法的描述。
模型評估與模型選擇
模型評估:訓練誤差和測試誤差
模型選擇:提高模型預測能力;避免過拟合
訓練誤差和測試誤差是模型關于資料集的平均損失。
提到一句,
統計學習方法具體采用的損失函數未必是評估時使用的損失函數
,這句了解下。參考下在資料科學比賽中給出的評分标準,與實際學習采用的損失函數之間的關系。
過拟合與模型選擇
這部分講到了最小二乘法,給了PRML中的一個例子。
這個問題中訓練資料為 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) } T=\{(x_1, y_1),(x_2,y_2),\cdots,(x_N,y_N)\} T={(x1,y1),(x2,y2),⋯,(xN,yN)}
模型為
f M ( x , w ) = w 0 + w 1 x + w 2 x 2 + ⋯ + w M x M = ∑ j = 0 M w j x j f_M(x,w)=w_0+w_1x+w_2x^2+\cdots+w_Mx^M=\sum\limits_{j=0}^Mw_jx^j fM(x,w)=w0+w1x+w2x2+⋯+wMxM=j=0∑Mwjxj
經驗風險最小化政策下
L ( w ) = 1 2 ∑ i = 1 N ( f ( x i , w ) − y i ) 2 L(w)=\frac{1}{2}\sum\limits_{i=1}^N(f(x_i,w)-y_i)^2 L(w)=21i=1∑N(f(xi,w)−yi)2
将模型和訓練資料帶入到上式得到
L ( w ) = 1 2 ∑ i = 1 N ( ∑ j = 0 M w j x i j − y i ) 2 = 1 2 ∑ i = 1 N ( w ⋅ x i − y i ) 2 L(w)=\frac{1}{2}\sum\limits_{i=1}^N\left(\sum\limits_{j=0}^Mw_jx_i^j-y_i\right)^2=\frac{1}{2}\sum\limits_{i=1}^N(w\cdot x_i-y_i)^2 L(w)=21i=1∑N(j=0∑Mwjxij−yi)2=21i=1∑N(w⋅xi−yi)2
這個問題要求 w = ( w 0 ∗ , w 1 ∗ , ⋯ , w M ∗ ) w=(w_0^*,w_1^*,\cdots,w_M^*) w=(w0∗,w1∗,⋯,wM∗)
對 w w w求偏導令其為零,得到一系列方程,求解可以用梯度下降或者矩陣分解。
求解線性方程組 A x = b Ax=b Ax=b,可以表示為 x = A / b x=A/b x=A/b,問題展開之後可以涉及到矩陣分解。
TODO: 這個例子展開一下
正則化與交叉驗證
正則化和交叉驗證都是模型選擇的方法
正則化
正則化項可以取不同的形式
從貝葉斯估計角度看,正則化項對應于模型的先驗機率,可以假設複雜的模型有較小的先驗機率,簡單的模型有較大的先驗機率。
交叉驗證
另一種常用的模型選擇方法是交叉驗證
- 簡單
- S折(K折, K-Fold)1
- 留一法
關于交叉驗證,這裡補充一點。
資料集的劃分這個問題,書中有提到資料充足的情況下,将資料劃分為三個部分,訓練集,驗證集和測試集。看到這裡,不知道大家會不會有一樣的問題:驗證集和測試集有什麼差別?
注意這裡,在算法學習的過程中,測試集可能是固定的,但是驗證集和訓練集可能是變化的。比如K折交叉驗證的情況下,分成K折之後,其中的K-1折作為訓練集,1折作為驗證集,這樣針對每一個模型操作K次,計算平均測試誤差,最後選擇平均測試誤差最小的模型。這個過程中用來驗證模型效果的那一折資料就是驗證集。交叉驗證,就是這樣一個使用驗證集測試模型好壞的過程。他允許我們在模型選擇的過程中,使用一部分資料(驗證集)“偷窺”一下模型的效果。
泛化能力
- 現實中采用最多的方法是通過測試誤差來評價學習方法的泛化能力
- 統計學習理論試圖從理論上對學習方法的泛化能力進行分析
-
學習方法的泛化能力往往是通過研究泛化誤差的機率上界進行的, 簡稱為泛化誤差上界(generalization error bound)
這本書裡面讨論的不多,在CH08裡面有讨論提升方法的誤差分析, 提到 A d a B o o s t AdaBoost AdaBoost不需要知道下界 γ \gamma γ。在CH02中讨論算法的收斂性的時候有提到誤分類次數的上界.
泛化誤差 R e x p ( f ^ ) = E p [ L ( Y , f ^ ( X ) ) ] = ∫ X × Y L ( y , f ^ ( x ) ) P ( x , y ) d x d y R_{exp}(\hat f)=E_p[L(Y, \hat f(X))]=\int_{\mathcal X\times\mathcal Y}L(y,\hat f(x))P(x,y)\, {\rm d}x{\rm d}y Rexp(f^)=Ep[L(Y,f^(X))]=∫X×YL(y,f^(x))P(x,y)dxdy
期望風險 R e x p ( f ) = E p [ L ( Y , f ( X ) ) ] = ∫ X × Y L ( y , f ( x ) ) P ( x , y ) d x d y R_{exp}(f)=E_p[L(Y, f(X))]=\int_{\mathcal X\times\mathcal Y}L(y,f(x))P(x,y)\, {\rm d}x{\rm d}y Rexp(f)=Ep[L(Y,f(X))]=∫X×YL(y,f(x))P(x,y)dxdy
注意泛化誤差的定義,書中有說事實上,泛化誤差就是所學習到的模型的期望風險
生成模型與判别模型
監督學習方法可分為生成方法(generative approach)與判别方法(discriminative approach)
生成方法
generative approach
- 可以還原出聯合機率分布 P ( X , Y ) P(X,Y) P(X,Y)
- 收斂速度快, 當樣本容量增加時, 學到的模型可以更快收斂到真實模型
- 當存在隐變量時仍可以用
生成模型
聯合機率分布 P ( X , Y ) P(X,Y) P(X,Y)——>條件機率分布 P ( Y ∣ X ) P(Y|X) P(Y∣X)
P ( Y ∣ X ) = P ( X , Y ) P ( X ) P(Y|X)=\frac {P(X,Y)}{P(X)} P(Y∣X)=P(X)P(X,Y)
典型模型:樸素貝葉斯、隐馬爾科夫
判别方法
discriminative approach
- 直接學習條件機率 P ( Y ∣ X ) P(Y|X) P(Y∣X) 或者決策函數 f ( X ) f(X) f(X)
- 直接面對預測, 往往學習準确率更高
- 可以對資料進行各種程度的抽象, 定義特征并使用特征, 可以簡化學習問題
典型模型:k 近鄰法、感覺機、決策樹、LR、最大熵模型、支援向量機、提升方法、條件随機場等
分類問題、标注問題、回歸問題
Classification, Tagging, Regression
- 圖1.4和圖1.5除了分類系統和标注系統的差異外,沒看到其他差異,但實際上這兩幅圖中對應的輸入資料有差異,序列資料的 x i = ( x i ( 1 ) , x i ( 2 ) , … , x i ( n ) ) T x_i = (x_i^{(1)},x_i^{(2)},\dots,x_i^{(n)})^T xi=(xi(1),xi(2),…,xi(n))T對應了
- 圖1.5和圖1.6,回歸問題的産出為 Y = f ^ ( X ) Y=\hat f(X) Y=f^(X)
參考
參考文獻都是大部頭,ESL,PRML在列
- ESL:7.10.1:K-Forld Cross Validation ↩︎