病态问题和条件数
病態問題和條件數
病態問題和條件數
1. 概念定義
1.1 病態/ 良態問題
1.2 適定/ 非適定問題
1.3 良態/ 病態矩陣和條件數
2. 病態的根源
3. 計算條件數的方法
3.1 與特征值的關系
3.2 與奇異值的關系
3.3 自由數計算方法
正規陣條件數
酉矩陣條件數
奇異矩陣條件數
4. 解釋機器學習中的魯棒性
5. 病態矩陣規避:正則化(Regularizaiton)
參考資料
在CV領域大部分問題都是非適定問題(ill-posed problem)。
對于這個“非適定”這一概念,我一直沒有探究過。這次看到一篇非常精彩的博客,在這里分享給大家,建議大家查看原文~這里只作筆記,對原文中的錯誤略有修改。
1. 概念定義
1.1 病態/ 良態問題
病態問題(ill-conditioned problem):問題的解關于條件非常敏感。條件(或數據)中即使存在極微妙的噪聲,也會對問題的解造成劇烈的變化。
反之,關于條件不敏感的問題,我們稱之為良態問題(well-conditioned problem)。
顯然,我們能把這兩個概念拓展至病態/ 良態系統(算法),“條件”即系統的輸入,“問題的解”即系統的輸出。
舉一些例子:
人體體溫調控系統是良態的,因為體表溫度微小的變化也只會帶來微小的體溫調控;
汽車動力系統是良態的,因為微踩油門時,汽車動力也只會稍作改變。
再延伸至機器學習算法:
如果一個算法對噪聲非常敏感,即病態的,那么其健壯性(robustness)也不佳(健壯性就是說系統抗擾動的能力)。
如果一個算法是過擬合的,那么該算法一定是病態的。
1.2 適定/ 非適定問題
適定問題(ill-posed problem)的定義來源于1903年哈達瑪(Hadamard)的演講:一個問題是適定的,當其滿足以下3個條件:
解存在;
解是唯一的;
解連續依賴于輸入(解隨著初始條件的改變而連續改變)(The solution depends continuously on the input)。
只要不滿足其中一個條件,那么該問題就是非適定的(ill-posed)。
注意:(非)適定問題既可以是良態的,也可以是病態的。
1.3 良態/ 病態矩陣和條件數
設有線性方程組(mathbf{A} vec{x} = vec{b}),其中(mathbf{A})是(n imes n)方陣,(vec{x})和(vec{b})都是(n imes 1)列向量。
假設條件(vec{x})變化了(Delta{vec{x}}),解相應地變化了(Delta{vec{b}}),即:
[mathbf{A} (vec{x} + Delta{vec{x}}) = vec{b} + Delta{vec{b}}
]
由于(mathbf{A} vec{x} = vec{b}),因此有(mathbf{A} Delta{vec{x}} = Delta{vec{b}})。
假設(mathbf{A})是非奇異矩陣,即(mathbf{A})為方陣且存在逆矩陣(mathbf{A^{-1}}),那么有:
[Delta{vec{x}} = mathbf{A^{-1}} cdot Delta{vec{b}}
]
兩邊取范數,根據范數的特性有:
[Vert Delta{vec{x}} Vert = Vert mathbf{A^{-1}} cdot Delta{vec{b}} Vert le Vert mathbf{A^{-1}} Vert cdot Vert Delta{vec{b}} Vert
ag{1-1}]
對(mathbf{A} vec{x} = vec{b})有相同的操作:
[Vert mathbf{A} vec{x} Vert = Vert vec{b} Vert le Vert mathbf{A} Vert cdot Vert vec{x} Vert
ag{1-2}]
結合(1-1)、(1-2)式有:
[frac{Vert Delta vec{x} Vert}{Vert vec{x} Vert} le Vert mathbf{A} Vert cdot Vert mathbf{A^{-1}} Vert cdot frac{Vert Delta vec{b} Vert}{Vert vec{b} Vert}
ag{1-3}]
有東西!
(frac{Vert Delta vec{x} Vert}{Vert vec{x} Vert})是初始條件的變化率;
(frac{Vert Delta vec{b} Vert}{Vert vec{b} Vert})是解的變化率;
雖然是不等號,但系數(Vert mathbf{A} Vert cdot Vert mathbf{A^{-1}} Vert)還是有意義的。我們稱之為矩陣(mathbf{A})的條件數(condition number),表示為:
[k(mathbf{A}) = Vert mathbf{A} Vert cdot Vert mathbf{A^{-1}} Vert
]
式中的范數可以是0范數,無窮范數等,要注意矩陣(mathbf{A})必須是非奇異矩陣。
由(1-3)可得:
當條件數(k(mathbf{A}))較小時,若初始條件發生較小變化,則解的變化也不大;此時的矩陣(mathbf{A})就是良態矩陣;
當條件數(k(mathbf{A}))較大時,即使初始條件發生較小變化,解的變化也會很大;此時的矩陣(mathbf{A})就是病態矩陣。
因此,條件數是用來衡量系統敏感度的指標,可用于判定病態/ 良態矩陣。
回到前面的注,顯然,病態/ 良態的概念與非適定/ 適定的概念是不一致的。
條件數不小于1:
[k(mathbf{A}) = Vert mathbf{A} Vert cdot Vert mathbf{A^{-1}} Vert ge Vert mathbf{A} mathbf{A^{-1}} Vert = Vert mathbf{I} Vert = 1
]
2. 病態的根源
病態矩陣的較大條件數,并非其病態的根本原因。其根源在于矩陣列向量相關性過強。
病態矩陣,實際上是奇異矩陣和近奇異矩陣的另一個說法。
我們舉個例子:
[mathbf{W} = egin{bmatrix}
1333 & -131 \
331 & -31 \
end{bmatrix}, vec{x} = egin{bmatrix}
1 \
11 \
end{bmatrix}
]
解為:
[vec{y} = egin{bmatrix}
-120 \
-13 \
end{bmatrix}
]
如果我們對輸入條件作微調,則結果會變為:
[egin{cases}
egin{split}
vec{x_1} &= egin{bmatrix}
1.0097 \
11.001 \
end{bmatrix} Longrightarrow vec{y_1} &= egin{bmatrix}
-95.2 \
-6.82 \
end{bmatrix} \
vec{x_2} &= egin{bmatrix}
1.0024 \
11.010 \
end{bmatrix} Longrightarrow vec y_2 &= egin{bmatrix}
-106.11 \
-9.52 \
end{bmatrix}
end{split}
end{cases}
]
可見,解變化的程度遠遠大于輸入條件變化的程度。并且,矩陣(mathbf{A})的列向量之間相關性極強。
3. 計算條件數的方法
雖然我們有條件數的定義,但當矩陣為病態矩陣時,其中的求逆結果往往會有很大誤差。因此通常情況下,我們會使用矩陣的特征值或奇異值來計算條件數。
3.1 與特征值的關系
特征值較大者,變化自由度高,因此會導致解的劇烈變化。這有點類似于病態矩陣的表現。
參見:一篇博文
3.2 與奇異值的關系
通過SVD分解,解的不穩定性也能用矩陣的性質加以解釋。參見:一篇博文
3.3 自由數計算方法
若我們取二范數,則條件數為矩陣(mathbf{A})的最大、最小奇異值之商:
[k(mathbf{A}) = frac{sigma_{max}{mathbf{A}}}{sigma_{min}{mathbf{A}}}
]
正規陣條件數
當矩陣(mathbf{A})為正規陣時,條件數為矩陣(mathbf{A})的最大、最小特征值的絕對值之商:
[k(mathbf{A}) = frac{vert lambda_{max}{mathbf{A}} vert}{vert lambda_{min}{mathbf{A}} vert}
]
酉矩陣條件數
當矩陣(mathbf{A})為酉矩陣時,條件數為1:
[k(mathbf{A}) = 1
]
即當且僅當(mathbf{A})為酉矩陣時,條件數取得最小值1。
奇異矩陣條件數
當(mathbf{A})為奇異矩陣時,其逆矩陣不存在:
[k(mathbf{A}) o infty
]
4. 解釋機器學習中的魯棒性
假設我們要用SGD,用一批((X,Y))樣本訓練線性模型:
[mathbf{W} cdot mathbf{X} = mathbf{Y}
]
變形:
[underbrace{mathbf{X}}_{A} cdot underbrace{mathbf{Y}^{-1}}_{vec{x}} = underbrace{mathbf{W}^{-1}}_{vec{b}}
]
由上面所學的知識,若樣本(mathbf{X})中存在大量相關(相似)樣本,或矩陣(mathbf{X})是病態的,那么當標簽(mathbf{Y})中存在噪聲時,會導致解(mathbf{W})出現劇烈波動!
而在實際情況中,我們很難避免數據噪聲。因此我們會對樣本進行一些預處理,如異常點檢測和離群點檢測,目的都是為了獲得良態的數據矩陣。
5. 病態矩陣規避:正則化(Regularizaiton)
當樣本數遠小于特征向量維度時,損失函數表示的矩陣往往是稀疏甚至是病態的。
此時我們可以加入正則化項。
正則化項會增加數值解與真實解之間的誤差,但增強了穩定性。
參考資料
本文主要參考的博客
一個超級超級大佬的博客,簡潔明了
一個數學大佬的博客
維基百科:條件數
關于正則化的精彩博文
維基百科:正則化
總結
- 上一篇: js性能优化--学习笔记
- 下一篇: 如何在PowerDesigner将PDM