摘要訊息 : 幾乎包括了全部機器學習的基礎, 這可花了我不少時間...
0. 前言
機器學習屬於數學的統計學分支, 當然也可以認為其屬於人工智慧分支. 近些年來, 機器學習越來越火熱, 特別是其子分支深度學習. 有些人可能會認為相比起純數學, 這種帶有應用性質的數學更加有意思. 但是需要提醒大家的是, 近些年特別熱門的深度學習暫時是無法用現代數學體系去解釋和證明的, 也就是說深度學習的課解釋性並不高, 儘管數學研究的深度是遠遠超過目前人類發展的. 不過好在簡單的機器學習理論, 都是上個世紀已經有的. 但是上個世紀, 電腦剛剛開始發展. 直到今天, 價格低廉的儲存裝置和網路上巨量的資料已經讓上個世紀的理論有了實際應用的地方. 但是也存在著這樣的說法 : 機器學習的那些先驅者之所以將機器學習形容的如此複雜, 只是因為他們希望機器學習的門檻足夠高, 避免了他人容易地搶走了他們的飯碗... 這種說法, 本人不作過多的評價.
學習機器學習不僅僅需要閣下有數學分析和機率論的知識儲備, 還可能用到一些數學分析中逼近論的知識.
更新紀錄 :
- 2021 年 6 月 20 日 21 時 17 分 57 秒 : 這篇由 WordPress 的字數統計為 29 萬字的學習筆記已經寫完了, 我在 2021 年 02 月 09 日正式開啟這篇筆記. 針對機器學習的基礎, 這篇學習筆記幾乎已經全部講完了. 經歷過四個多月的時間, 針對機器學習和深度學習我已經有所入門. 深度學習裡倒是還有不少東西 : 卷積神經網絡, 循環神經網絡, Attention 機制和以 Attention 機制為基礎的 Transformer 等等. 這些東西, 動輒幾百上千萬個參數, 目前暫時沒有合適的數學工具去分析它們的合理性;
- 2022 年 6 月 20 日進行第一次更新和修正.
1. 導論
這是一個巨量資料的時代, 靠著人工去對大量的資料進行處理已經不太現實. 我們每個人都是資料的生產者, 也是資料的消費者. 為了使用電腦解決問題, 我們通常會使用固定或者通用的演算法. 但是這些演算法並不能解決全部需求, 也不是任何問題都有標準演算法存在的. 考慮人臉識別. 人類可以很輕鬆地在一瞬間識別這張人臉是誰的, 但是這是無意識的, 我們沒有辦法使用演算法來表達這一過程. 這個時候, 在巨量資料下, 我們希望電腦也可以擁有這樣的能力, 以輔助人類的工作. 儘管電腦可能不能像人類一樣去完全識別, 但是卻可以建構一個有用的近似方案, 去解決資料中的部分.
機器學習運用的是統計學的理論, 核心人物是樣本推理. 例如大部分顧客在購買商品 A 的時候同時又會購買商品 B, 但是某個顧客在購買的過程中, 只購買了商品 A. 那麼這名顧客很可能成為商品 B 的消費者, 也就是說, 我們會對 \displaystyle {\mathop {\mathbf {P}}(B|A)} 這樣的條件機率產生興趣, 這是為了發現關聯規則.
對於若干個屬性輸入 x_{1}, x_{2}, ..., x_{n}, 我們希望針對不同的輸入得到對應的值 \displaystyle {y = g(x_{1}, x_{2}, ..., x_{n}|\theta)}. 其中, g 就是模型 (model) 或者稱其為回歸函數 (regression function), \theta 稱為 g 的參數 (parameter), x_{i} (i = 1, 2, …, n) 為輸入 (input), y 就是模型根據輸出給定的結果. 如果 y 是數值, 那麼稱這樣的問題為回歸 (regression). 如果存在一個有限集合 \mathscr {Y} = \left \{ y_{1}, y_{2}, ..., y_{n} \right \} 使得 y \in \mathscr {Y}, 那麼稱這樣的問題為分類 (classification). 分類和回歸都是監督學習 (supervised learning) 的方法. 所謂監督學習, 就是巨量資料中的輸入和輸出都由指導者給出. 與監督學習對應的就是非監督學習, 其資料中只給定了輸出, 要求電腦從中找到一種規律或者結構, 使得特定模式比其它模式更常出現. 這種在統計學中被稱為密度估計 (density estimation), 一個典型的例子就是聚類. 大家可能會奇怪, 為什麼在 iOS 中將應用程式放入檔案夾中, 檔案夾就會自動生成名字, 而且是比較符合應用程式分類的. 這就是聚類比較簡單的解釋, 不過 iOS 的分類可能並非使用了機器學習, 因為每個應用程式都會存在標籤.
對於 y = g(\mathscr {X}|\theta), 機器學習的目標是找到最佳的參數 \theta 使得輸出 y 和實際值的差值最小.
除了監督學習和非監督學習 (unsupervised learning) 之外, 還有一種半監督學習 (semi-supervised learning), 介於這兩者中間, 所以大家通常不將半監督學習作為機器學習的大類. 機器學習還有一個大類是強化學習 (reinforcement learning). 強化學習的輸出不是一個值或者元素, 而是一系列步驟, 或者叫它策略或者動作序列. 在強化學習中, 不存在一個中間狀態的最好策略, 我們只考察策略整體.
2. 監督學習
假設現在我們要通過機器學習分類若干個物體, 這些物體在分類之後有且唯有兩個結果 : 正類 (positive) 和反類 (negative). 要判定這些物體歸屬於哪一個類別, 有 n 個輔助的屬性 x_{1}, x_{2}, ..., x_{n}. 顯然, 模型就是數學中的集合的特徵函數. 因為給定了一些變數, 然後將變數輸入函數, 得到最終的函數值 (正類還是反類). 從數學的角度來看, 一定會存在某個函數 \mathcal {C}(X), 使得對於任意的物體 X = \left \{ x_{1}, x_{2}, ..., x_{n} \right \}, 將這個物體分類到正類或者反類中, 且這個分類是正確的. 從導論中, 我們也知道, 機器學習的任務就是去尋找這個函數 \mathcal {C}(X). 但是一般來說, 即使對於人類, 這個函數 \mathcal {C}(X) 也難以找到, 於是我們轉而去找一個近似的函數 h(X), 使得 h(X) 的結果和 \mathcal {C}(X) 的結果盡可能接近, 或者說分類錯誤率盡可能低.
對於機器學習來說, 電腦要從一系列可能的候選函數集合 H = \left \{ h_{1}, h_{2}, ..., h_{n} \right \} 中找到可以解決問題的 h(X). 其中, h \in H. 若分類的結果有且唯有兩個結果, 那麼最終有 \displaystyle {h(X) = \begin {cases} 1 & {X \text { 為正類}} \\ 0 &{X \text { 為反類}}. \end {cases}} 在第 1 節中, 我們已經介紹過, 監督學習需要指導者給出實例的輸入和輸出值. 結合上面的論述, 即要求指導者提供 X 和對應的函數值 h(X), 然後去尋找最合適的函數 (模型) h.
例題 1. 令 n = 2, x_{1} 和 x_{2} 都是布林變數, 求模型 h 的候選集合 H.
解 :(向右滑動以查看全部 h)
\color {Red}{x_{1}} \color {Red}{x_{2}} h_{1} h_{2} h_{3} h_{4} h_{5} h_{6} h_{7} h_{8} h_{9} h_{10} h_{11} h_{12} h_{13} h_{14} h_{15} h_{16} 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 \blacksquare
從例題 1 中, 若我們要求當 x_{1} = 0, x_{2} = 1 時, h(x_{1}, x_{2}) = 0, 那麼我們就去掉了 h_{5}, h_{6}, h_{7}, h_{8}, h_{13}, h_{14}, h_{15} 和 h_{16}. 另外, 對於正類和反類的機器學習樣本, 實際上是 n 個變數從 \left \{ 0, 1 \right \} 中取值, 是放回有序抽樣, 因此共有 2^{n} 種變數的取法, 而對應的函數也是放回有序抽樣, 那麼就有 2^{2^{n}} 個候選函數.
但是實際上, 由於現實中, 變數數量可能是多個的, 而且指導者幾乎不可能針對每一種情況都給出輸入和輸出, 所以針對 N 個樣本, 至少還有 2^{2^{n} - N} 個候選的函數. 首先, 我們要分析機器學習得到的函數, 其值和真正的值相差多少. 我們引入經驗誤差 (empirical error) \displaystyle {\mathop {\mathrm {E}}(h|\mathscr {X}) = \sum I \big ( h(X) \neq \mathcal {C}(X) \big )}. 其中, \mathop {\mathrm {E}}(h|\mathscr {X}) 表示學習得到的函數 h 在指導者給定的樣本空間 \mathscr {X} 下的誤差 (error), I(\cdot) 是布林函數, 若 h(X) 的值與 \mathcal {C}(X) 不相等, 那麼 I(\cdot) = 1, 否則 I(\cdot) = 0. 實際上, 我們就是希望通過機器學習得到一個函數 h, 可以使得 \mathop {\mathrm {E}}(h|\mathscr {X}) 盡可能小.
對於函數 h 的可選集合, 一般存在兩個極端 :
- 最特殊的假設 : 對於指導者給定的樣本, 函數 h_{\min} 涵蓋了所有正類且不包含反類, 但是能夠使得函數 h_{\min} 輸出正類的元素數量 D_{h_{\min}} 是所有可選集合中最少的;
- 最一般的假設 : 對於指導者給定的樣本, 函數 h_{\max} 涵蓋了所有正類且不包含反類, 但是能夠使得函數 h_{\max} 輸出正類的元素數量 D_{h_{\max}} 是所有可選集合中最多的.
直觀地, 我們可能會選區介於 h_{\min} 和 h_{\max}. 這時候, 僅僅依靠現有的樣本資料, 不足以找到最佳函數. 一般來說, 我們會引入某種偏好 (bias). 這種偏好是根據問題的實際而制定的, 也可能是機率選取的. 對於落在 D_{h_{\min}} 和 D_{h_{\max}} 的元素, 其最終得到的函數值是模稜兩可的. 這時候, 我們可以選擇拒絕讓 h 輸出值, 讓人工進行判定.
通常情況下, 我們肯定希望可以學習到一個 \mathop {\mathrm {E}}(h|\mathscr {X}) = 0 的函數 h. 但是有些情況下, 這種 h 很難找到甚至不存在, 因此需要一定的柔性.
假設有一個包含 n 個點的原始資料集合. 其中, 我們將每一個資料表示為一個點 \big ( X, \mathscr {C}(X) \big ). 這 n 個點可以用 2^{n} 種方法將其標記為正類和反類. 因此, n 個點就可以定義 2^{n} 種不同的機器學習問題. 如果對於這些問題種的任意一個, 都可以找到一個函數 h \in H 將正類和反類區分開來, 那麼就稱 H 擊倒 n 個點. 也就是說, 由 n 個點定義的任何學習問題都能用一個從 H 中抽取的假設無誤差地進行學習. 可以被 H 擊倒的點的最大數量稱為 H 的 VC 維度 (VC dimension), 記為 \mathop {\mathrm {VC}}(H). 它用於評價 H 的學習能力.
現在來考慮一個二變數的實例. 假設 \mathcal {h} = \left \{ \theta_{1} \leq x_{1} \leq \theta_{2} \text { 且 } \theta_{3} \leq x_{2} \leq \theta_{4} \right \}, 記集合 \mathcal {h} 的特徵函數為 \mu = \mu_{\mathcal {h}}(x_{1}, x_{2}). 那麼, 集合 \mathcal {h} 可以在笛卡兒座標系上表示為一個矩形, 其面積記為 s(h). 若學習所得的函數 h_{\min} 是最特殊的假設, 其面積記為 s(h_{\min}), 那麼我們可以畫出
其中, D_{h_{\min}} \subseteq D_{h} \subseteq D_{h_{\max}}. 現在令 \mathcal {C} = h 並從某一固定的機率分佈 p(x) 中抽取樣本, 我們希望找出樣本數 n, 使得對於任意給定的 \delta \leq \frac {1}{2} 和 \varepsilon > 0, 假設 h_{\min} 的誤差最多為 \varepsilon 的機率至少為 1 - \delta, 即 \displaystyle {\mathop {\mathbf {P}} \left \{ s(h) - s(h_{\min}) \leq \varepsilon \right \} \geq 1 - \delta}. 簡單地說, 我們希望樣本落在圖中黃色區域的機率至多是 \varepsilon. 此時, 對於 h_{\min} 的任意一邊的條帶, 不妨記這個區域為 h', 如果我們可以保證 \displaystyle {\sup {s(h')} \leq \frac {\varepsilon}{4}}, 那麼總誤差不超過 4\frac {\varepsilon}{4} = \varepsilon. 因為黃色部分的四個角落的面積我們計算了兩次, 因此實際的誤差是小於 4\frac {\varepsilon}{4} = \varepsilon 的. 隨機抽取的樣本不在區域 h' 中的機率為 1 - \frac {\varepsilon}{4}. 所有 n 個樣本不在區域 h' 中的機率為 (1 - \frac {\varepsilon}{4})^{n}, 所有 n 個樣本不在黃色區域的機率不超過 4(1 - \frac {\varepsilon}{4})^{n}. 根據之前的描述, 我們希望 \displaystyle {4 \left ( 1 - \frac {\varepsilon}{4} \right )^{n} \leq \delta}. 根據數學分析中的不等式 1 - x \leq \mathop {\mathrm {E}}^{-x}, 因此如果選定的 n 和 \delta 滿足 \displaystyle {4\mathop {\mathrm {E}}^{-\frac {\varepsilon n}{4}} \leq \delta}, 那麼就有 4(1 - \frac {\varepsilon}{4})^{n} \leq \delta. 等式兩側同時乘以 \frac {1}{4} 且等式兩側同時取自然對數, 變換後有 \displaystyle {n \geq \frac {4}{\varepsilon} \ln {\frac {4}{\delta}}}. 我們把滿足上述條件的機器學習稱為機率近似正確學習 (probability approximate correct learning).
指導者給定的輸入和輸出並不總是正確的, 那些不太正常的資料我們稱為噪音, 由以下幾個組成 :
- 指導者提供的輸入輸出資料不正確;
- 沒有考慮到附加屬性, 這些附加屬性是不明顯的.
考慮某人購買 iPhone 12 Pro Max 但是沒有同時選購 AirPods, 很多人在購買 iPhone 之後都會購買 AirPods. 那麼 Apple 推斷這個人一個月內會購買 AirPods 的機率為 50%, 這個數值是由機器學習得到的函數計算出來的函數值. 但是如果這個人在購買 iPhone 12 Pro Max 之後, 剩下的錢只夠勉強生活, 很顯然他幾乎不會購買 AirPods 為附屬品. 這個人在購買 iPhone 12 Pro Max 的經濟條件就是附加屬性, 這些附加屬性 Apple 不可能知道, 我想也沒有人會主動告訴別人. 正是這個附加屬性導致了 Apple 的模型得到了錯誤的推導.
一般而言, 上面的矩形是簡單的模型, 而精確模型很可能是非線性的, 考慮這樣的隱函數 :
這樣的隱函數是不容易擬合的. 我們學習得到的這個矩形模型雖然和真正的函數相差比較多, 但是我們是容許模型出錯的, 只要這個出錯的機率我們可以接受就可以了 (比如 1000 個推導只錯了幾十個).
對於 k 個分類的監督學習, 我們通常可以將其看為 k 個正類和反類的監督學習. 此時, \displaystyle {h_{i}(X) = \begin {cases} 1 &{X \in \mathcal {C_{i}}} \\ 0 &{X \notin \mathcal {C_{i}}}. \end {cases}} 對於上式, 經驗誤差可以定義為 \displaystyle {\mathop {\mathrm {E}} \left . \left ( \left \{ h_{i} \right \}_{i = 1}^{k} \right | \mathscr {X} \right ) = \sum \sum \limits_{i}I \big ( h_{i}(X) \neq \mathcal {C}_{i}(X) \big )}.
上面我們分析的都是分類問題, 現在我們考慮回歸問題. 對於回歸來說, 我們實際上要找到一個函數 f 滿足 \displaystyle {\mathcal {C}(X) = f(X) + \varepsilon}. 其中, \varepsilon 是無法觀察到的隨機噪音 (random noise). 對於機器學習得到的函數 g(x), 其相對於 \mathscr {X} 的學習誤差為 \displaystyle {\mathop {\mathrm {E}}(g|\mathscr {X}) = \frac {1}{n} \sum \limits_{i = 1}^{n}\big ( \mathcal {C}(X) - g(X) \big )^{2}}.
對於線性函數 g(x) = w_{1}x_{1} + w_{2}x_{2} + ... + w_{n}x_{n} + w_{0}, 我們的目標是可以得到 \mathop {\mathrm {E}}(g|\mathscr {X}) 取得最小值的函數 g. 此時, 其最小值可以通過分別對 w_{i} 求偏導數 \frac {\partial {\mathop {\mathrm {E}}}}{\partial {w_{i}}}, 並令 \frac {\partial {\mathop {\mathrm {E}}}}{\partial {w_{i}}} = 0 求得. 其中, i = 1, 2, ..., n. \displaystyle {\begin {cases} \frac {\partial {\mathop {\mathrm {E}}}}{\partial {w_{1}}} = 0 \\ \frac {\partial {\mathop {\mathrm {E}}}}{\partial {w_{2}}} = 0 \\ \vdots \\ \frac {\partial {\mathop {\mathrm {E}}}}{\partial {w_{n}}} = 0 \\ \frac {\partial {\mathop {\mathrm {E}}}}{\partial {w_{0}}} = 0, \end {cases} \Rightarrow \begin {cases} w_{1} \\ w_{2} \\ \vdots \\ w_{n} \\ w_{0}. \end {cases}}
在最後, 我們再介紹兩個概念. 其中, 損失函數 L(\cdot) 我們在前面已經遇到過了. 對於模型 g(X) 和正確值 \mathcal {C}(X) 之間的誤差, 我們使用損失函數 \mathop {\mathrm {E}}(\theta|\mathscr {X}) = \sum L \big ( \mathcal {C}(X), g(X|\theta) \big ) 來描述. 其中, 在正類和反類的論述中, L(\cdot) 用於檢測相等或者不相等; 在回歸分析中, L(\cdot) 被定義為距離的平方.
最佳化過程用於求解使得總誤差 \displaystyle {\theta^{*} = \argmin \limits_{\theta}\mathop {\mathrm {E}}(\theta|\mathscr {X})} 取得最小的 \theta^{*}. 其中, \argmin 回傳使得 \mathop {\mathrm {E}} 最小化的參數. 在線性函數中, 我們採用了多元函數求極值的方式求得參數.
3. Bayes 決策理論
對於某些過程, 我們沒有辦法對其進行建模, 因為缺乏一些知識. 儘管有時候, 這些過程是確定性的, 但是目前我們還沒有能力或者方法去完全認知它們. 例如投擲硬幣, 唯一可觀測的就是投擲的結果. 而很多資料就是來源於這些無法觀測的過程, 因此我們需要使用機率論的知識對它們進行表述.
記 z 為不可觀測變數, x 表示可觀測變數. 那麼事實上, 我們有 \displaystyle {x = f(z)}. 其中, f 是確定性函數, 它定義了知識的不可觀測部分的輸出. 因為無法使用這種確定性的方式對無法觀測的過程進行建模, 因此我們定義隨機變數 \xi 來說明這個結果是由機率分佈 \mathop {\mathbf {P}} \left \{ \xi = x \right \} 中抽取的.
設 F_{\xi}(x) 是機率分佈函數, 要從樣本空間 \mathscr {X} 中學習到它, 最簡單的方法就是使用古典的方法. 對於分類問題, 就是把樣本中所有分類的機率根據樣本的分佈計算出來, 然後以此作為 \hat {F}_{\xi}(x). 但是顯然, 這是不準確的. 儘管根據大數法則, 當 \mathop {\mathrm {card}}{\mathscr {X}} \to \infty 時, \left | \hat {F}_{\xi}(x) - F_{\xi}(x) \right | \to 0, 但是機器學習中不可能出現這種情況. 而且, 我們還需要考慮樣本是不是完全隨機的, 如果不是, 這樣得到的 \hat {F} 更加不準確.
對於正類反類問題, 一般會有若干個條件隨機變數 \zeta_{1}, \zeta_{2}, ..., \zeta_{n}, 若我們可以知道 \mathop {\mathbf {P}} \left \{ \xi = 1|\zeta_{1} = x_{1}, \zeta_{2} = x_{2}, ..., \zeta_{n} = x_{n} \right \}, 那麼我們可以 \displaystyle {\begin {cases} \text {選擇 } \xi = 1 & {\mathop {\mathbf {P}} \left \{ \xi = 1|\zeta_{i} = x_{i} \right \} > \mathop {\mathbf {P}} \left \{ \xi = 0|\zeta_{i} = x_{i} \right \}} \\ \text {選擇 } \xi = 0 & {\mathop {\mathbf {P}} \left \{ \xi = 1|\zeta_{i} = x_{i} \right \} \leq \mathop {\mathbf {P}} \left \{ \xi = 0|\zeta_{i} = x_{i} \right \}}. \end {cases}} 其中, i = 1, 2, ..., n. 此時, 錯誤的機率為 1 - \max \Big \{ \mathop {\mathbf {P}} \{ \xi = 1|\zeta_{1} = x_{1}, \zeta_{2} = x_{2}, ..., \zeta_{n} = x_{n} \}, \mathop {\mathbf {P}} \{ \xi = 0|\zeta_{1} = x_{1}, \zeta_{2} = x_{2}, ..., \zeta_{n} = x_{n} \} \Big \}. 記 \boldsymbol {\zeta} = (\zeta_{1}, \zeta_{2}, ..., \zeta_{n}), 根據 Bayes 公式我們有 \displaystyle {\mathop {\mathbf {P}(\xi|\boldsymbol {\zeta}) = \frac {\mathop {\mathbf {P}}(\xi)\mathop {\mathbf {P}}(\boldsymbol {\zeta}|\xi)}{\mathop {\mathbf {P}}(\boldsymbol {\zeta})}}}. 而根據 Bayes 定理, 又有 \displaystyle {\mathop {\mathbf {P}}(\xi = i|\boldsymbol {\zeta}) = \frac {\mathop {\mathbf {P}}(\boldsymbol {\zeta}|\xi = i)\mathop {\mathbf {P}}(\boldsymbol {\zeta})}{\sum \limits_{\xi}\mathop {\mathbf {P}}(\boldsymbol {\zeta}|\xi)\mathop {\mathbf {P}}(\xi)}}. 那麼對於正類和反類問題, 我們只需要選擇具有最大機率值的那個就可以了, 即 \displaystyle {\max \left \{ \mathop {\mathbf {P}}(\xi = 0|\boldsymbol {\zeta}), \mathop {\mathbf {P}}(\xi = 1|\boldsymbol {\zeta}) \right \}}. 而 Bayes 定理不僅僅針對 Bernoulli 隨機變數成立, 對於具有 k 個分類結果的事件同樣成立, 適用方法是相同的. 我們把這樣的分類器稱為 Bayes 分類器 (Bayes classifier).
當分類器作出選擇之後, 會帶來一定的風險 (risk). 若某個人沒得病, 但是卻被分類器判定為得病, 那麼醫院可能就會為此面臨一場訴訟. 因此, 在分類之後, 我們需要考慮其錯誤分類的風險. 若記 \lambda_{ik} 為資料本屬於第 k 類但是卻被分類器分類到第 i 的損失, 動作 \alpha_{i} 為分類器將資料分類到第 i 類的動作, 我們定義採取這樣的動作的風險為 \displaystyle {\mathop {\mathrm {E}}(\alpha_{i}|\boldsymbol {\zeta}) = \sum \limits_{k = 1}^{n}\lambda_{ik}\mathop {\mathbf {P}}(\xi = k|\boldsymbol {\zeta})}.其中, n 為類別數量. 我們發現, 這實際上是數學期望的變種, \lambda_{ik} 可能需要我們自己給出. 一般來說, 我們會選取動作最小的風險, 即 \displaystyle {\min \limits_{i} \left \{ R(\alpha_{i}|\boldsymbol {\zeta}) \right \}}.
0/1 損失 (0/1 loss) 是一種比較特殊的損失, 此時有 \displaystyle {\lambda_{ik} = \begin {cases} 0 & {i = k} \\ 1 & {i \neq k}. \end {cases}} 若所有正確決策都沒有損失, 並且所有錯誤的決策都有相同的損失, 那麼採取動作 \alpha_{i} 的風險是 \displaystyle {\begin {aligned} R(\alpha_{i}|\boldsymbol {\zeta}) &= \sum \limits_{k = 1}^{n}\lambda_{ik}\mathop {\mathbf {P}}(\xi = k|\boldsymbol {\zeta}) \\ &= \sum \limits_{k \neq i}\mathop {\mathbf {P}}(\xi = k|\boldsymbol {\zeta}) \\ &= 1 - \mathop {\mathbf {P}}(\xi = i|\boldsymbol {\zeta}). \end {aligned}} 其中, n 為類別數量.
某些情況下, 錯誤的決策具有很高的風險, 同時也可能會為此付出很高的代價, 例如錯誤地診斷病人就是一個實例. 在這種情況下, 我們增加一個疑惑或者拒絕的動作 \alpha_{i + 1}. 這並不是表示將資料分類進第 i + 1 類的動作, 而是疑惑或者拒絕的動作. 一個可能的損失函數是 \displaystyle {\lambda_{ik} = \begin {cases} 0 & {i = k} \\ \lambda & {i = n + 1} \\ 1 & {\text {else}}. \end {cases}} 其中, 0 < \lambda < 1. 當 \lambda = 0 時, 我們總是拒絕 (拒絕和正確決策一樣好); 當 \lambda = 1 時我們從不拒絕 (拒絕所付出的代價至少和錯誤決策相同, 甚至超過錯誤決策). 由於至多有 n 個類, 因此被分類到 n + 1 類就說明分類器拒絕或者疑惑的動作. 根據我們之前定義的風險, 那麼拒絕動作的風險是 \displaystyle {R(\alpha_{i}|\boldsymbol {\zeta}) = \sum \limits_{k = 1}^{n}\lambda\mathop {\mathbf {P}}(\xi = k|\boldsymbol {\zeta}) = \lambda}. 此時, 若對於任意 k \neq i, 有 R(\alpha_{i}|\zeta) < R(\alpha_{k}|\boldsymbol {\zeta}) 且 R(\alpha_{i}|\boldsymbol {\zeta}) < R(\alpha_{n + 1}|\boldsymbol {\zeta}) 時, 我們將資料分類到第 i 類; 否則, 若對於任意的 i, 有 R(\alpha_{n + 1}|\boldsymbol {\zeta}) < R(\alpha_{i}|\boldsymbol {\zeta}), 此時我們拒絕分類. 由於我們限制了 \lambda 的範圍, 因此我們又有另一種表述. 若對於任意 k \neq i, 有 \mathop {\mathbf {P}}(\xi = i|\boldsymbol {\zeta}) > \mathop {\mathbf {P}}(\xi = k|\boldsymbol {\zeta}) 且 \mathop {\mathbf {P}}(\xi = n + 1|\boldsymbol {\zeta}) > 1- \lambda, 那麼我們將資料分類到第 i 類; 否則, 我們拒絕分類.
為分類問題建立機率分佈函數的過程也可以看作是將某個機率空間分成多個決策區域, 機率分佈函數又被稱為判別函數 (discriminant function).
在一些商業場所, 他們通常需要針對銷售資料進行學習, 那麼此時需要用到關聯規則 X \Rightarrow Y. 想像 iPhone 12 Pro Max 和它的 mon 貼 (手機保護膜), 如果手持 iPhone 12 Mini 的用戶會購買 iPhone 12 Pro Max 的 mon 貼嗎? 顯然幾乎不會. 因此, 我們需要幾個度量 :
- X \rightarrow Y 的支援度 : \mathop {\mathrm {Support}}(X, Y) = \frac {\mathop {\mathrm {card}}{\left \{ X + Y \right \}}}{\mathop {\mathrm {card}}{\Omega}};
- X \rightarrow Y 的可信度 : \mathop {\mathrm {Condidence}}(X \Rightarrow y) = \mathop {\mathbf {P}}(X|Y);
- X \rightarrow Y 的作用度 : \mathop {\mathrm {lift}}{(X \Rightarrow Y)} = \frac {\mathop {\mathbf {P}}(Y|X)}{\mathop {\mathbf {P}}(Y)}.
可信度度量了一個規則的可相信程度. 例如購買 iPhone 12 Pro Max 的用戶大概率會購買 iPhone 12 Pro Max 的 mon 貼, 因此 \mathop {\mathbf {P}}(\text {購買 mon 貼}|\text {購買 iPhone 12 Pro Max}) \to 1, 且遠遠大於 \mathop {\mathbf {P}}(\text {僅僅購買 mon 貼}). 支援度是為了說明規則的價值, 如果很多人購買 iPhone 12, 但是幾乎沒有人購買 iPhone 12 Pro Max, 那麼即使支援度再高, 但是大量生產 iPhone 12 Pro Max 的 mon 貼意義也不大. 作用度實際上反映了事件之間的相關程度, 比如購買 iPhone 12 Pro Max 和購買香蕉幾乎是沒有關聯的, 因此 \mathop {\mathrm {lift}}(X \Rightarrow Y) \to 1. 當作用度大於 1, 表示兩個事件正相關; 當作用度小於 1, 表示兩個事件負相關.
但是一般來說, 一個銷售系統的資料庫中存在著大量資料, 而且要分析的類別多於兩類, 那麼此時我們可以這樣去做 :
- 找到具有足夠支援度的所有類別集合;
- 把找到類別集合中的類別劃分為若干個子集, 這些子集中有且唯有兩個元素. 然後把這些子集轉換成具有足夠可信度的關聯規則即可.
4. 參數方法
前面我們所討論的是如何在不確定性的情況下適用機率論的知識對問題建模, 然後作出最佳決策. 現在, 我們討論在函數類型或者分佈類型已知的情況下, 如何估計參數 \theta. 其中, \theta 來源於 g(\mathscr {X}|\theta). 我們暫時假定 g 是一元的, 即 \mathop {\mathrm {card}}{\mathscr {X}} = 1.
假設有樣本 X 是獨立同分佈的, 且 X 服從某一機率分佈 p(x|\theta), 那麼任取 x \in X, 都有 \displaystyle {x \sim p(x|\theta)}. 在機器學習中, 我們希望找到這樣的 \theta, 使得對於任意 x, 盡可能像是從 p(x|\theta) 上抽取的. 由於 x 是獨立的, 因此給定參數 \theta, 樣本 X 的概似可以表示為單個點概似的乘積 : \displaystyle {l(\theta|X) = p(X|\theta) = \prod \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}}{X}}\ln {p(x^{\mathrm {t}}|\theta)}}. 極大概似估計 (maximum likelihood estimation) 就是找到這樣的 \theta 的方法. 因此, 首先對上式取自然對數, 有 \displaystyle {\ln {l(\theta|X) = \sum \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}}{X}}\ln {p(x^{\mathrm {t}}|\theta)}}}. 其中, t 不僅僅表示計數, 還表示樣本 x^{\mathrm {t}} 是屬於樣本空間 X 的. 我們記 \displaystyle {\ell (\theta|X) = \sum \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}}{X}}\ln {p(x^{\mathrm {t}}|\theta)}}.
一般來說, 常見的分佈有 :
- Bernoulli 分佈 : 它在機器學習中代表了正類和反類的學習;
- 多項分佈 : 它在機器學習中代表了多個類的學習;
- 常態分佈 : 它在機器學習中代表了數值輸入的學習.
這些分佈分別具有自己的參數, 接下來我們用極大概似估計來估計這些分佈的參數. 我們用 \hat {\theta} 來表示參數的極大概似估計.
例題 2. 估計 Bernoulli 分佈的參數.
解 :Bernoulli 分佈可以表示為 \displaystyle {P_{\xi}(x) = p^{x}(1 - p)^{1 - x}}. 其中, x = 0, 1. 其期望為 \displaystyle {\mathop {\mathrm {E}}(\xi) = \sum \limits_{\xi}\xi P_{\xi}(x) = 1 \cdot p + 0 \cdot (1 - p) = p}. 其方差為 \displaystyle {\mathop {\mathrm {Var}}(X) = \sum \limits_{\xi}\big ( \xi - \mathop {\mathrm {E}}(\xi) \big )^{2}P_{\xi}(x) = p(1 - p)}. 因此, p 是 Bernoulli 分佈中的唯一參數.
給定樣本 X, 若對於任意 x \in X 都有 x = 0, 1, 於是參數 p 的自然對數概似為 \displaystyle {\ell (p|X) = \ln {\prod \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}}{X}}p^{x^{\mathrm {t}}}(1 - p)^{1 - x^{\mathrm {t}}}} = \sum \limits_{\mathrm {t}}x^{\mathrm {t}} \ln {p} + \left ( \mathop {\mathrm {card}}{X} - \sum \limits_{\mathrm {t}}x^{\mathrm {t}} \right )\ln {(1 - p)}}. 記 f(p) = \sum \limits_{\mathrm {t}}x^{\mathrm {t}} \ln {p} + \left ( \mathop {\mathrm {card}}{X} - \sum \limits_{\mathrm {t}}x^{\mathrm {t}} \right )\ln {(1 - p)}, 令 f'(p) = 0 求得 \displaystyle {\mathop {\mathbf {P}} = \frac {\sum \limits_{\mathrm {t}}x^{\mathrm {t}}}{\mathop {\mathrm {card}}{X}}}.
\blacksquare
例題 3. 估計多項分佈的參數.
解 :我們可以將多項分佈視為 n 個二項分佈對應的試驗, 那麼對於第 i 次試驗, 有 \displaystyle {\hat {p_{i}} = \frac {\sum \limits_{\mathrm {t}}x^{\mathrm {t}}}{\mathop {\mathrm {card}}{X}}}. 其中, i = 1, 2, ..., n.
\blacksquare
例題 4. 估計常態分佈的參數
解 :常態分佈可以表示為 \displaystyle {P_{\xi}(x) = \frac {1}{\sqrt {2\pi}\sigma} \exp \left \{ -\frac {(x - \mu)^{2}}{2\sigma^{2}} \right \}}. 其中, \mathop {\mathrm {E}}(X) = \mu, \mathop {\mathrm {Var}}(X) = \sigma^{2}.
給定樣本 X, 那麼樣本 X 的自然對數概似為 \displaystyle {\ell (\mu, \sigma|X) = -\frac {\mathop {\mathrm {card}}{X}}{2}\ln {2\pi} - \mathop {\mathrm {card}}{X}\ln {\sigma} - \frac {\sum \limits_{\mathrm {t}} (x^{\mathrm {t}} - \mu)^{2}}{2\sigma^{2}}}. 令 \frac {\partial {\ell}}{\partial {\mu}} = 0 且 \frac {\partial {\ell}}{\partial {\sigma^{2}}} = 0 可求得 \displaystyle {\hat {\mu} = \frac {\sum \limits_{\mathrm {t}}x^{\mathrm {t}}}{\mathop {\mathrm {card}}{X}}, \hat {\sigma} = \sqrt {\frac {\sum \limits_{\mathrm {t}}(x^{\mathrm {t}} - \mu)^{2}}{\mathop {\mathrm {card}}{X}}}}.
\blacksquare
事實上由例題 2, 例題 3 和例題 4 可以發現, 求得極大概似估計的過程就是函數求極值的過程.
我們得到估計之後, 自然就想知道估計和質量如何? 令 X 是取自參數為 \theta 指定的總體上的樣本, 並令 d = d(X) 是 \theta 上的一個估計. 為了評價這個估計的質量, 我們可以度量它和 \theta 之間距離的平方, 即 \big ( d(X) - \theta \big )^{2}. 但是, 由於這個估計取決於樣本, 因此並不能直接使用 \big ( d(X) - \theta \big )^{2} 進行估計, 而是要取平均值, 即 \mathop {\mathrm {E}} \left ( (d(X) - \theta)^{2} \right ). 我們定義 \displaystyle {r(d, \theta) = \mathop {\mathrm {E}} \left ( (d(X) - \theta)^{2} \right )} 為估計 d 的均方誤差 (mean squared error), 定義 \displaystyle {b_{\theta}(d) = \mathop {\mathrm {E}}(d(X)) - \theta} 為估計量的偏誤 (estimated bias). 如果對於所有的 \theta, 都有 b_{\theta(d)} = 0, 則稱 d 是 \theta 的無偏誤估計 (unbiased estimate).
例題 5. 若 X = \left \{ x^{\mathrm {t}} \right \}_{t = 1}^{\mathop {\mathrm {card}}{X}} 是從均值為 \mu 的樣本空間中抽取的, 若 d(X) = m, 證明 b_{\theta}(d) = 0.
證明 :由於 \displaystyle {\mathop {\mathrm {E}}(d) = \mathop {\mathrm {E}}(m) = \mathop {\mathrm {E}} \left ( \frac {\sum \limits_{\mathrm {t}}x^{\mathrm {t}}}{\mathop {\mathrm {card}}{X}} \right ) = \frac {1}{\mathop {\mathrm {card}}{X}}\sum \limits_{\mathrm {t}}\mathop {\mathrm {E}}(x^{\mathrm {t}}) = \frac {\mathop {\mathrm {card}}{X} \cdot \mu}{\mathop {\mathrm {card}}{X}} = \mu}. 因此 b_{\theta}(d) = 0.
\blacksquare
例題 5 意味著雖然在某個特定的樣本上, 其均值和樣本空間的均值不相同, 但是如果取許多這樣的樣本 X_{i}, 且估計許多 d_{i} = d(X_{i}), 那麼隨著樣本的增加, 其平均值接近於 \mu. 我們稱 m 是一致估計量 (consistent estimation), 即當 \mathop {\mathrm {card}}{X} \to \infty 時, 有 \displaystyle {\mathop {\mathrm {Var}}(m) = \mathop {\mathrm {Var}} \left ( \frac {\sum \limits_{\mathrm {t}}x^{\mathrm {t}}}{\mathop {\mathrm {card}}{X}} \right ) = \frac {1}{\mathop {\mathrm {card}}^{2}{X}}\sum \limits_{\mathrm {t}}\mathop {\mathrm {Var}}(x^{\mathrm {t}}) = \frac {\mathop {\mathrm {card}}{X} \cdot \sigma^{2}}{\mathop {\mathrm {card}}^{2}{X}} = \frac {\sigma^{2}}{\mathop {\mathrm {card}}{X}} \to 0}. 亦即隨著樣本的增加, m 與 \mu 的偏離值逐漸變小. 現在重新考慮針對常態分佈的參數估計 \hat {\sigma}, 兩側平方可得 \displaystyle {\hat{\sigma}^{2} = \frac {\sum \limits_{\mathrm {t}}(x^{\mathrm {t}} - \hat {\mu})^{2}}{\mathop {\mathrm {card}}{X}} = \frac {\sum \limits_{\mathrm {t}}(x^{\mathrm {t}})^{2} - \mathop {\mathrm {card}}{X}\hat {\mu}^{2}}{\mathop {\mathrm {card}}{X}}}. 根據方差的定義, 有 \mathop {\mathrm {E}}(X^{2}) = \mathop {\mathrm {Var}}(X) + \mathop {\mathrm {E}}^{2}(X), 且 \displaystyle {\mathop {\mathrm {E}} \left ( (x^{\mathrm {t}})^{2} \right ) = \sigma^{2} + \mu^{2}, \mathop {\mathrm {E}}(\mu^{2}) = \frac {\sigma^{2}}{\mathop {\mathrm {card}}{X}} + \mu^{2}}. 於是, 我們有 \displaystyle {\mathop {\mathrm {E}}(\hat {\sigma}^{2}) = \frac {\mathop {\mathrm {card}}{X}(\mu^{2} + \sigma^{2}) - \mathop {\mathrm {card}}{X}\left ( \frac {\sigma^{2}}{\mathop {\mathrm {card}}{X}} + \mu^{2} \right )}{\mathop {\mathrm {card}}{X}} = \frac {\mathop {\mathrm {card}}{X} - 1}{\mathop {\mathrm {card}}{X}}\sigma^{2} \neq \sigma^{2}}. 這說明 \hat {\sigma}^{2} 並非是 \sigma^{2} 的無偏誤估計, 而 \frac {\mathop {\mathrm {card}}X}{\mathop {\mathrm {card}}X - 1}\hat {\sigma}^{2} 才是無偏誤估計. 然而, 當 \mathop {\mathrm {card}}X 充分大的時候, 其差別可以忽略. 因此, 這是一個漸進的無偏誤估計, 其估計量的偏誤隨著 \mathop {\mathrm {card}}X \to \infty 而接近於 0.
現在, 我們改寫 r(d, \theta) 為 \displaystyle {\begin {aligned} r(d, \theta) &= \mathop {\mathrm {E}} \left ( (d - \theta)^{2} \right ) \\ &= \mathop {\mathrm {E}} \left ( (d - \mathop {\mathrm {E}}(d) + \mathop {\mathrm {E}}(d) - \theta)^{2} \right ) \\ &= \mathop {\mathrm {E}} \left ( (d - \mathop {\mathrm {E}}(d)^{2} \right ) + \left ( \mathop {\mathrm {E}}(d) - \theta)^{2} + 2\big ( \mathop {\mathrm {E}}(d) - \theta)(d - \mathop {\mathrm {E}}(d) \big ) \right ) \\ &= \mathop {\mathrm {E}} \left ( (d - \mathop {\mathrm {E}}(d))^{2} \right ) + \mathop {\mathrm {E}} \left ( (\mathop {\mathrm {E}}(d) - \theta)^{2} + 2\mathop {\mathrm {E}} \big ( \mathop {\mathrm {E}}(d) - \theta)(d - \mathop {\mathrm {E}}(d)) \big ) \right ) \\ &= \mathop {\mathrm {E}} \left ( (d - \mathop {\mathrm {E}}(d))^{2} \right ) + (\mathop {\mathrm {E}}(d) - \theta)^{2} + 2(\mathop {\mathrm {E}}(d) - \theta)\mathop {\mathrm {E}}(d - \mathop {\mathrm {E}}(d)) \\ &= \underbrace {\mathop {\mathrm {E}} \left ( (d - \mathop {\mathrm {E}}(d))^{2} \right )}_{\text {方差}} + \underbrace {(\mathop {\mathrm {E}}(d) - \theta)^{2}}_{偏誤的平方} \\ &= \mathop {\mathrm {Var}}(d) + b_{\theta}^{2}(d). \end {aligned}}
有時候, 樣本的數量是比較少的, 因此可能需要我們提前對參數 \theta 的值進行估計, 確定一個適用於樣本的參數範圍. 這個範圍並不會告訴我們參數的確切值. 對於這個範圍, 我們也是靠著估計來得到. 在本節剛開始的時候, 我將機率分佈函數寫成了 \displaystyle {p(x|\theta)}. 這不僅僅是機率函數的表示方法, 也是條件機率. 因此, 如果你足夠敏感, 當你看到這個表示你就會提出疑問, 為什麼不是以 F_{\xi}(x) 這種方式來表示分佈函數?
要得到樣本下參數的可能取值, 實際上就是要求 \displaystyle {p(\theta|X)}.
如果我們提前知道了 p(\theta) 的可能取值, 結合 Bayes 定理和樣本, 就可以得到 \displaystyle {p(\theta|X) = \frac {p(X|\theta)p(\theta)}{p(X)} = \frac {p(X|\theta)p(\theta)}{\displaystyle {\int} p(X|\theta')p(\theta')\mathrm {d}{\theta'}}}. 由於我們知道了 \theta, 就可以了解分佈的一切, 因此有 \displaystyle {p(\theta|x, X) = p(x|\theta)}. 於是, \displaystyle {p(x|X) = \int p(x, \theta|X)\mathrm {d}{\theta} = \int p(x|\theta, X)p(\theta|X)\mathrm {d}{\theta} = \int p(x|\theta)p(\theta|X)\mathrm {d}{\theta}}. 這樣, 我們使用所有 \theta 值對預測取平均值, 用它們的機率加權. 如果我們與在回歸中一樣, 以 y = g(x|\theta) 的形式作出預測, 則有 \displaystyle {y = \displaystyle \int g(x|\theta)p(\theta|X)\mathrm{d}{\theta}}. 對於這樣的積分, 實際上是比較難求結果的, 特別是某一些積分並不存在初等表達. 當求整個積分的方法不可行的時候, 我們可以將其縮小至單個點. 如果 p(\theta|X) 存在極值, 那麼我們可以通過最大事後機率估計 (maximum a posteriori estimation) \displaystyle {\theta^{\ast} = \argmax \limits_{\theta} \left \{ p(\theta|X) \right \}}. 這樣, 我們有 \displaystyle {p(x|X) = p(x|\theta^{\ast}), y^{\ast} = g(x|\theta^{\ast})}. 如果對 \theta 值沒有某些偏好設定, 那麼一般來說, 其和極大概似估計的值是相同的. 除了這種方法之外, 我們還可以使用 Bayes 估計 \displaystyle {\theta^{\star} = \mathop {\mathrm {E}}(\theta|X) = \int \theta p(\theta|X)\mathrm {d}{\theta}}. 取期望值的原因是隨機變數的最佳估計是它的平均值. 假設 \theta 是變數, 我們想用 \mathop {\mathrm {E}}(\theta) = \mu 進行預測. 如果常數 c 是 \theta 的估計, 那麼有 \displaystyle {\mathop {\mathrm {E}} \left ( (\theta - c)^{2} \right ) = \mathop {\mathrm {E}} \left ( (\theta - \mu + \mu - c)^{2} \right ) = \mathop {\mathrm {E}} \left ( (\theta - \mu)^{2} \right ) + (\mu - c)^{2}}. 如果 c = \mu, 那麼它的值最小. 在常態分佈的情況下, \theta^{\ast} = \theta^{\star}.
接下來, 我需要引入一個實例來介紹參數分類方法. 假設有一個汽車公司銷售 n 個不同品種的汽車, 我們希望通過機器學習來得到一個可以用於估計不同年收入的顧客會購買哪種類型的汽車. 為了簡單起見, 我們假定唯一變數是顧客的年收入, 用 x 表示. 那麼 \mathop {\mathbf {P}}(C_{i}) 表示購買第 i 種類型汽車的顧客所佔有的比例. 其中, C_{i} 表示顧客會購買第 i 類型的汽車. 如果顧客的年收入分佈和常態分佈類似, 記 \mu_{i} 為購買第 i 種類型汽車的顧客的年收入均值, \sigma_{i}^{2} 是他們的年收入的方差. 根據 Bayes 定理, 有 \displaystyle {\mathop {\mathbf {P}}(C_{i}|x) = \frac {p(x|C_{i})\mathop {\mathbf {P}}(C_{i})}{\sum \limits_{k = 1}^{\mathop {\mathrm {card}}{X}}p(x|C_{k})\mathop {\mathbf {P}}(C_{k})}}. 顯然, 對於任意 \mathop {\mathbf {P}}(C_{i}|x), \sum \limits_{k = 1}^{\mathop {\mathrm {card}}{X}}p(x|C_{k})\mathop {\mathbf {P}}(C_{k}) 都是他們的公共部分, 因此我們首先忽略掉這一項, 得到判別式函數 \displaystyle {g_{i}^{\ast}(x) = p(x|C_{i}) + \mathop {\mathbf {P}}(C_{i})}. 使用相同的思想, 針對判別式函數部分取自然對數, 得到我們想要的判別式函數 \displaystyle {g_{i}(x) = \ln {p(x|C_{i})} + \ln {\mathop {\mathbf {P}}(C_{i})}}. 我們要做的是從給定樣本 X = \left \{ x^{\mathrm {t}}, r^{\mathrm {t}} \right \}_{t = 1}^{\mathop {\mathrm {card}}{X}} 中估計 p(x|C_{i}) 和 \mathop {\mathbf {P}}(C_{i}). 其中, \displaystyle {r_{i}^{\mathrm {t}} = \begin {cases} 1 && {x^{\mathrm {t}} \in C_{i}} \\ 0 & {x^{\mathrm {t}} \in C_{k}, k \neq i}. \end {cases}} 根據我們之前討論過的, 針對 Bernoulli 分佈和常態分佈的參數估計, 我們有 \displaystyle {\hat {\mu_{i}} = \frac {\sum \limits_{\mathrm {t}}x^{\mathrm {t}}r_{i}^{\mathrm {t}}}{\sum \limits_{\mathrm {t}}r_{i}^{\mathrm {t}}}, \hat {\sigma_{i}^{2}} = \frac {\sum \limits_{\mathrm {t}}(x^{\mathrm {t}} - \mu_{i})^{2}r_{i}^{\mathrm {t}}}{\sum \limits_{\mathrm {t}}r_{i}^{\mathrm {t}}}, \hat {\mathop {\mathbf {P}}}(C_{i}) = \frac {\sum \limits_{\mathrm {t}}r_{i}^{\mathrm {t}}}{\mathop {\mathrm {card}}{X}}}. 將上面這些估計的參數置換掉判別式函數中對應的項, 可得 \displaystyle {g_{i}^{\ast}(x) = -\frac {1}{2}\ln {2\pi} - \ln {\hat {\sigma_{i}}} - \frac {(x - \hat {\mu_{i}})^{2}}{2\hat {\sigma_{i}^{2}}} + \ln {\hat {\mathop {\mathbf {P}}}(C_{i})}}. 對應地, 我們忽略掉場數部分和公共部分, 並且假設方差相等, 那麼得到 \displaystyle {g_{i}(x) = -(x - \hat {\mu_{i}})^{2}}. 為了最大化 g_{i}(x), 即對於顧客 x 最可能選擇購買第 i 種類型的汽車的判定, 只要有 \displaystyle {\left | x - \hat {\mu_{i}} \right | = \min \limits_{k} \left | x - \hat {\mu_{k}} \right |}, 那麼就說明顧客 x 最可能購買的是第 i 種類型的汽車.
在上面, 我們假定了方差相同從而忽略了判定式函數種的 \ln {\hat {\sigma_{i}}} 部分. 當方差不同的時候, 總體方法也是類似的. 必須注意的是, 如果 x 是連續變數時, 在假設樣本為常態分佈之前, 首先要進行檢驗, 否則可能會出錯.
從本節開始到現在, 我們幾乎都在討論分類問題, 接下來我們要針對回歸問題進行討論. 對於函數 \displaystyle {r = f(x) + \varepsilon}. 其中, f 是某一函數, 我們要用定義在參數 \theta 的集合上的估計 g(x|\theta) 來近似它. 假設 \varepsilon 服從期望為 0 和方差為 \sigma^{2} 的常態分佈, 此時, p(r|x) 服從期望為 g(x|\theta) 和方差為 \sigma^{2} 的常態分佈. 記 p(x, r) 是資料服從的某一機率分佈, 那麼有 \displaystyle {p(x, r) = p(r|x)p(x)}. 我們使用極大概似估計, 有 \displaystyle {\ell^{\ast}(\theta|X) = \ln {\prod \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}}{X}}p(r^{\mathrm {t}}|x^{\mathrm {t}})} + \ln {\prod \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}}{X}}p(x^{\mathrm {t}})}}. 由於 \ln {\prod \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}}{X}}p(x^{\mathrm {t}})} 不受參數估計的影響, 因此此項我們忽略, 於是 \displaystyle {\begin {aligned} \ell (\theta|X) &= \ln {\prod \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}}{X}}p(r^{\mathrm {t}}|x^{\mathrm {t}})} \\ &= \ln {\prod \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}}{X}}\frac {1}{\sqrt {2\pi}\sigma}\exp \left \{ -\frac {\left ( r^{\mathrm {t}} - g(x^{\mathrm {t}}|\theta) \right )^{2}}{2\sigma^{2}} \right \}} \\ &= \ln {(\frac {1}{\sqrt {2\pi}\sigma})^{\mathop {\mathrm {card}}{X}}\exp \left \{ -\frac {1}{2\sigma^{2}\sum \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}}{X}}\left ( r^{\mathrm {t}} - g(x^{\mathrm {t}}|\theta) \right )^{2}} \right \}} \\ &= -\mathop {\mathrm {card}}{X}\ln {\sqrt {2\pi}\sigma} - \frac {1}{2\sigma^{2}}\sum \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}}{X}}\left ( r^{\mathrm {t}} - g(x^{\mathrm {t}}|\theta) \right )^{2}. \end {aligned}} 在最終結果中, 第一項獨立於我們想要估計的參數 \theta, 另外第二項中的 \frac {1}{\sigma^{2}} 也和參數無關, 這些我們可以直接忽略. 不忽略 \frac {1}{2} 的原因是方便後面求導數的運算. 最大化 \ell (\theta|X) 相當於最小化 \displaystyle {\mathop {\mathrm {E}}(\theta|X) = \frac {1}{2}\sum \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}}{X}}\left ( r^{\mathrm {t}} - g(x^{\mathrm {t}}|\theta) \right )^{2}}. 其中, \mathop {\mathrm {E}}(\theta|X) 是最常用的誤差函數, 最小化 \mathop {\mathrm {E}}(\theta|X) 中的 \theta 被稱為最小平方估計 (minimum square estimate).
在線性回歸中, 假設有線性函數 \displaystyle {g(x^{\mathrm {t}}|w_{0}, w_{1}) = w_{1}x^{\mathrm {t}} + w_{0}}. 將其置換掉 \ell (\theta|X) 中的 g, 並分別令 \frac {\partial {\ell}}{\partial {w_{1}}} = 0 且 \frac {\partial {\ell}}{\partial {w_{0}}} = 0 可得 \displaystyle {\sum \limits_{\mathrm {t}}r^{\mathrm {t}} = \mathop {\mathrm {card}}{X}w_{0} + w_{1}\sum \limits_{\mathrm {t}}x^{\mathrm {t}}} 與 \displaystyle {\sum \limits_{\mathrm {t}}r^{\mathrm {t}}x^{\mathrm {t}} = w_{0}\sum \limits_{\mathrm {t}}x^{\mathrm {t}} + w_{1}\sum \limits_{\mathrm {t}}\left ( x^{\mathrm {t}} \right )^{2}}. 它們可以寫成向量矩陣的形式 \displaystyle {A\boldsymbol {w} = \boldsymbol {y}}. 其中, \displaystyle {A = \begin {pmatrix} \mathop {\mathrm {card}}{X} & \sum \limits_{\mathrm {t}}x^{\mathrm {t}} \\ \sum \limits_{\mathrm {t}}x^{\mathrm {t}} & \sum \limits_{\mathrm {t}}(x^{\mathrm {t}})^{2} \end {pmatrix}, \boldsymbol {w} = \begin {pmatrix} w_{0} \\ w_{1} \end {pmatrix}, \boldsymbol {y} = \begin {pmatrix} \sum \limits_{\mathrm {t}}r^{\mathrm {t}} \\ \sum \limits_{\mathrm {t}}r^{\mathrm {t}}x^{\mathrm {t}} \end {pmatrix}}. 於是, \boldsymbol {w} = A^{-1}\boldsymbol {y}.
在多項式回歸中, 假設有多項式 \displaystyle {g(x^{\mathrm {t}}|w_{0}, w_{1}, w_{2}, ..., w_{k}) = w_{k}(x^{\mathrm {t}})^{k} + w_{k - 1}(x^{\mathrm {t}})^{k - 1} + ... + w_{2}(x^{\mathrm {t}})^{2} + w_{1}x^{\mathrm {t}} + w_{0}}. 這個函數雖然不是線性的, 但是其參數是線性的, 因此我們也可以通過求偏導數的方式來得到 k + 1 個參數. 將多項式寫為 A\boldsymbol {w} = \boldsymbol {y}. 其中, \displaystyle {A = \begin {pmatrix} \mathop {\mathrm {card}}{X} & \sum \limits_{\mathrm {t}}x^{\mathrm {t}} & \sum \limits_{\mathrm {t}}(x^{\mathrm {t}})^{2} & ... & \sum \limits_{\mathrm {t}}(x^{\mathrm {t}})^{k} \\ \sum \limits_{\mathrm {t}}x^{\mathrm {t}} & \sum \limits_{\mathrm {t}}(x^{\mathrm {t}})^{2} & \sum \limits_{\mathrm {t}}(x^{\mathrm {t}})^{3} & ... & \sum \limits_{\mathrm {t}}(x^{\mathrm {t}})^{k + 1} \\ \vdots & \vdots & \vdots & & \vdots \\ \sum \limits_{\mathrm {t}}(x^{\mathrm {t}})^{k} & \sum \limits_{\mathrm {t}}(x^{\mathrm {t}})^{k + 1} & \sum \limits_{\mathrm {t}}(x^{\mathrm {t}})^{k + 2} & ... & \sum \limits_{\mathrm {t}}(x^{\mathrm {t}})^{2k} \end {pmatrix}}, \displaystyle {\boldsymbol {w} = \begin {pmatrix} w_{0} \\ w_{1} \\ w_{2} \\ \vdots \\ w_{k} \end {pmatrix}, \boldsymbol {y} = \begin {pmatrix} \sum \limits_{\mathrm {t}}r^{\mathrm {t}} \\ \sum \limits_{\mathrm {t}}r^{\mathrm {t}}x^{\mathrm {t}} \\ \sum \limits_{\mathrm {t}}r^{\mathrm {t}}(x^{\mathrm {t}})^{2} \\ \vdots \\ \sum \limits_{\mathrm {t}}r^{\mathrm {t}}(x^{\mathrm {t}})^{k} \end {pmatrix}}. 記 A = D^{\mathrm {T}}D, \boldsymbol {y} = D^{\mathrm {T}}\boldsymbol {r}. 其中, \displaystyle {D = \begin {pmatrix} 1 & x^{1} & (x_{1})^{2} & ... & (x^{1})^{k} \\ 1 & x^{2} & (x_{2})^{2} & ... & (x^{2})^{k} \\ \vdots & \vdots & \vdots & & \vdots \\ 1 & x^{1} & (x^{\mathop {\mathrm {card}}{X}})^{2} & ... & (x^{\mathop {\mathrm {card}}{X}})^{k} \end {pmatrix}, \boldsymbol {r} = \begin {pmatrix} r^{1} \\ r^{2} \\ \vdots \\ r^{\mathop {\mathrm {card}}{X}} \end {pmatrix}}. 於是, 我們有 \boldsymbol {w} = (D^{\mathrm {T}}D)^{-1}D^{\mathrm {T}}\boldsymbol {r}.
度量參數估計的誤差的另一種方法是求相對平方誤差 \displaystyle {E = \frac {\sum \limits_{\mathrm {t}}\left ( r^{\mathrm {t}} - g(x^{\mathrm {t}}|\theta) \right )^{2}}{\sum \limits_{\mathrm {t}}\left ( r^{\mathrm {t}} - \bar {r} \right )^{2}}}. 當 E \to 1 時, 我們的預測和用平均值的預測一樣好, 基於輸入 X 的估計有較大差距; 當 E \to 0 時, 我們得到了更好的擬合, 基於輸入 X 的估計是有用的.
在得到基本的模型和參數之後, 我們就要評估模型的質量如何. 一個模型, 如果將無關的信息都學習進來了, 那麼我們稱這個模型過適 (overfitting); 如果學習得不夠好, 那麼我們稱這個模型乏適 (underfitting). 現在, 我們要針對模型的過適合乏適分析其理論.
假設樣本 X = \left \{ x^{\mathrm {t}}, r^{\mathrm {t}} \right \} 取自服從 p(x, r) 的某一分佈, 使用這個樣本估計函數 g, x 的期望平方誤差可以表示為 \displaystyle {\mathop {\mathrm {E}} \left ( \big ( r - g(x) \big )^{2}|X \right ) = \underbrace {\mathop {\mathrm {E}} \left ( \big ( r - \mathop {\mathrm {E}}(r|X) \big )^{2}|X \right )}_{\text {樣本噪音}} + \underbrace {\big ( \mathop {\mathrm {E}}(r|X) - g(x) \big )^{2}}_{\text {平方誤差}}}. 右側第一項是給定 x 時 r 的誤差, 它並不依賴與 g 或者樣本 X, 但是它是誤差的一部分, 不論使用什麼方法估計都沒有辦法避免. 第二項用於描述函數 g 偏離函數 \mathop {\mathrm {E}}(r|X) 的程度, 它依賴於估計的方法和樣本. 對某個樣本來說, 也許 g 是一個很好的模型, 但是對於另一個樣本就不一定. 因此, 為了評估一個估計 g 的好壞程度, 通常都是在可能的樣本上進行平均. 樣本 X 上的平均可以表示為 \displaystyle {\mathop {\mathrm {E}}_{X} \left ( \big ( \mathop {\mathrm {E}}(r|X) - g(x) \big )^{2}|X \right ) = \underbrace {\mathop {\mathrm {E}}(r|X) - \mathop {\mathrm {E}}_{X} \left ( (g(x))^{2} \right )}_{\text {偏誤}} + \underbrace {\mathop {\mathrm {E}}_{X} \left ( \big ( g(x) - \mathop {\mathrm {E}}_{X}(g(x)) \big )^{2} \right )}_{\text {方差}}}. 偏誤並不影響樣本發生變化時, g 的錯誤程度; 而方差描述了當樣本變化時, g 在 \mathop {\mathrm {E}}(g) 附近的波動程度. 這兩者我們都希望它們可以充分小.
對於一個噪音已知的 f 產生的一組資料 X_{i} = \left \{ x_{i}^{\mathrm {t}}, r_{i}^{\mathrm {t}} \right \}, 利用每個資料集合都形成一個估計 g_{i}, 我們計算它們的偏誤和方差. 但是實際上, 通常我們無法這樣做, 因為我們並不知道 f, 也不知道噪音. 於是, 對於 \mathop {\mathrm {E}}(g), 一般用 g_{i} 上的平均來估計 : \displaystyle {\bar {g}(x) = \frac {\sum \limits_{i}g_{i}(x)}{\mathop {\mathrm {card}} {\left \{ X_{i} \right \}}}}. 偏誤和方差分別是 : \displaystyle {B^{2}(g) = \frac {1}{\mathop {\mathrm {card}}{X}}\sum \limits_{\mathrm {t}}\left ( \bar {g}(x^{\mathrm {t}}) - f(x^{\mathrm {t}}) \right )^{2}}, \displaystyle {\mathop {\mathrm {Var}}(g) = \frac {1}{\mathop {\mathrm {card}}{X_{i}} \mathop {\mathrm {card}} {\left \{ X_{i} \right \}}}\sum \limits_{\mathrm {t}} \sum \limits_{\mathrm {t}}(g_{i}\left ( x^{\mathrm {t}}) - \bar {g}(x^{\mathrm {t}}) \right )^{2}}.
對於最簡單的常數模型 \displaystyle {g_{i}(x) = c}, 其中 c 為任意常數. 它並沒有方差, 因為我們沒有使用數據, 並且 g_{i} = g_{j} (i \neq j). 除非對於任意的 x, 都有 f(x) \to c, 否則 g_{i} 的偏誤很高. 如果我們取樣本中 r^{\mathrm {t}} 的平均值 : \displaystyle {g_{i}(x) = \sum \limits_{\mathrm {t}}\frac {r_{i}^{\mathrm {t}}}{\mathop {\mathrm {card}}{X_{i}}}}, 那麼偏誤會減少. 因為通常情況下, 平均值比某一常數具有更好的估計. 但是, 這也會導致方差增加, 因為不同的樣本具有不同的平均值. 不過一般在這種情況下, 偏誤的減少會比方差的增加更大, 總體誤差會降低.
任何機器學習的方法都會面臨這樣的問題, 我們為了減少偏誤, 這可能會讓我們面臨高方差, 反之亦然. 我們重新定義過適和乏適 : 過適即方差較大, 模型學習了噪音; 乏適即偏誤過大, 模型給出的解並不一定具有高正確率. 但是, 對於高方差小偏誤的 g_{i}, \bar {g} 也許是一個比較好的分類器.
實際情況下, 我們也許無法計算一個學習而來的模型的方差和偏誤, 但是這並不阻礙我們計算總誤差. 給定資料集合, 我們將資料分為學習資料和驗證資料. 我們使用學習資料學習到不同的候選模型, 然後使用驗證資料來驗證它們的誤差. 令人失望的是, 一般很複雜的模型才具有較小的誤差.
對於誤差的估計, 還有一些其它方法 :
- 正規化 : \displaystyle {E' = \text {資料上的誤差} + \lambda \cdot \text {模型複雜度}}. 它可以從兩個方面入手去理解. 一方面, 它的第二項用了一個大的方差懲罰複雜模型, 其中 \lambda 是懲罰的權. 當我們最小化 E' 且不僅僅是最小化資料上的誤差時, 我們懲罰了複雜模型, 因此降低了方差. 如果 \lambda 太大, 那麼就只允許簡單模型; 另一方面, 可以將 E' 看作新的驗證資料上的誤差, 第一項是學習誤差, 第二項是估計學習誤差和檢驗誤差之間偏差的優化項. 這個優化項隨著輸入數量線性增加, 並且隨著學習資料的增加而減少. 除此之外, 它還隨者噪音的方差的增加而增加;
- 結構風險最小化 : 對於模型候選集合, 按照複雜度進行排序, 複雜度排序一般依據參數的數量. 因此, 它比較適合尋找簡單且在資料上經驗誤差最小的模型. 我們之前所討論過的 VC 維度也是一種模型複雜度度量的方法;
- 最小描述長度 : 對於資料來說, 如果資料非常簡單, 那麼複雜度較小.
5. 多變數方法
在第四節我們討論了一元函數, 現在我們要將上面所討論的內容推廣到多變數函數中.
對學習資料進行觀測, 得到關於資料的 n 個變數, 由此產生了一個觀測向量 \displaystyle {\boldsymbol {x_{i}} = \begin {pmatrix} x_{i} \\ x_{i}^{2} \\ ... \\ x_{i}^{n} \end {pmatrix}}. 組合樣本可到資料矩陣 : \displaystyle {X = \begin {pmatrix} X_{1}^{1} & X_{2}^{1} & ... & X_{d}^{1} \\ X_{1}^{2} & X_{2}^{2} & ... & X_{d}^{2} \\ \vdots & \vdots & & \vdots \\ X_{1}^{d} & X_{2}^{d} & ... & X_{d}^{n} \end {pmatrix}}. 記 \displaystyle {\boldsymbol {\mu} = \begin {pmatrix} \mu_{1} \\ \mu_{2} \\ ... \\ \mu_{d} \end {pmatrix}}, 為 每列的均值, 那麼有 \displaystyle {\mathop {\mathrm {E}}(\boldsymbol {x_{i}}) = \boldsymbol {\mu}}. 若 X_{i} 的方差為 \sigma_{i}^{2}, 則有 \displaystyle {\sigma_{ij} = \sigma_{ji} = \mathop {\mathrm {Cov}}(X_{i}, X_{j}) = \mathop {\mathrm {E}}(X_{i}X_{j}) - \mu_{i}\mu_{j}}. 特別地, 當 i = j 時, \sigma_{ij} = \sigma_{i}^{2}. d 個變數就存在 d 個方差和 \frac {d(d - 1)}{2} 個協方差. 我們將這些組成一個協方差矩陣 \displaystyle {\Sigma = \begin {pmatrix} \sigma_{1}^{2} & \sigma_{12} & \sigma_{13} & ... & \sigma_{id} \\ \sigma_{21} & \sigma_{2}^{2} & \sigma_{23} & ... & \sigma_{2d} \\ \vdots & \vdots & \vdots & & \vdots \\ \sigma_{d1} & \sigma_{d2} & \sigma_{d3} & ... & \sigma_{d}^{2} \end {pmatrix}}. 其中, \Sigma 滿足 \Sigma^{\mathrm {T}} = \Sigma, 對角線上的元素為協方差. 那麼, \displaystyle {\Sigma = \mathop {\mathrm {Cov}}(X) = \mathop {\mathrm {E}} \left ( (X - \boldsymbol {\mu})(X - \boldsymbol {\mu})^{\mathrm {T}} \right ) = \mathop {\mathrm {E}}(XX^{\mathrm {T}}) - \boldsymbol {\mu}\boldsymbol {\mu}^{\mathrm {T}}}. 如果兩個向量是線性相關的, 那麼協方差為正或者負取決於線性相關的斜率. 但是, 相關性的大小比較難解釋, 因為它取決於兩個變數的測量單位. 變數 X_{i} 和 X_{j} 的相關性是一個規範到 [-1, 1] 之間的統計量, 定義為 \displaystyle {R(X_{i}, X_{j}) = \rho_{ij} = \frac {\sigma_{ij}}{\sigma_{i}\sigma_{j}}}. 如果兩個變數是相互獨立的, 那麼必然有協方差等於 0, 因而相關性也為 0. 然而, 如果變數以某種非線性的方式相互依賴, 那麼它們的相關性可能仍然為 0.
對於多變數的樣本, 均值的極大概似估計是樣本均值 \hat {\boldsymbol {\mu}}, 它的第 i 維度是 X 的第 i 列的平均值 \displaystyle {\hat {\boldsymbol {\mu}} = \frac {\sum \limits_{\mathrm {t}}\boldsymbol {x}^{\mathrm {t}}}{\mathop {\mathrm {card}}X_{i}}}. 其中, \hat {\mu_{i}} = \frac {\sum \limits_{\mathrm {t}}x^{\mathrm {t}}}{\mathop {\mathrm {card}}X_{i}}, i = 1, 2, ..., d. \Sigma 的估計是樣本協方差矩陣 \hat {\Sigma}. 其中, \displaystyle {\hat {\sigma_{i}^{2}} = \frac {\sum \limits_{\mathrm {t}}(x_{i}^{\mathrm {t}} - \hat {\mu_{i}})^{2}}{\mathop {\mathrm {card}}X_{i}}}, \displaystyle {\hat {\sigma_{ij}} = \frac {\sum \limits_{\mathrm {t}}(x_{i}^{\mathrm {t}} - \hat {\mu_{i}})(x_{j}^{\mathrm {t}} - \mu_{j})}{\mathop {\mathrm {card}}X_{i}}}. 樣本的相關係數是 \displaystyle {R_{ij} = \frac {\hat {\sigma_{ij}}}{\hat {\sigma_{i}}\hat {\sigma_{j}}}}. 所有的 R_{ij} 可以組成樣本的相關矩陣 R.
不過有時候, 樣本並沒有我們想像得那麼好, 總有一些應該輸入的變數是缺失的. 如果樣本足夠多的情況下, 我們會丟棄這些樣本. 但是如果樣本數量本身就不多, 缺失的樣本中本來也包含了一些有用的信息, 我們就不再選擇丟棄樣本, 而是通過估算來填充這些缺失值. 一般來說, 我們可能會用樣本的均值來替代這些缺失值, 或者試圖從已知的其它樣本中獲取一些信息來預測這個缺失值.
對於多變數樣本, 其也可能服從常態分佈, 只不過是多變數常態分佈 : \displaystyle {p(\boldsymbol {x}) = \frac {1}{\sqrt {(2\pi)^{d}\det {\Sigma}}}\exp \left \{ -\frac {1}{2}(\boldsymbol {x} - \boldsymbol {\mu})^{\mathrm {T}}\Sigma^{-1}(\boldsymbol {x} - \boldsymbol {\mu}) \right \}}. 其中, \boldsymbol {\mu} 是均值向量, \Sigma 是協方差矩陣. 另外, \displaystyle {(\boldsymbol {x} - \boldsymbol {\mu})^{\mathrm {T}}\Sigma^{-1}(\boldsymbol {x} - \boldsymbol {\mu}) = c^{2}} 是在維度為 d 的空間中的一個橢球, 它的形狀和方向由 \Sigma 決定. 而方程式的左側則被稱為馬氏距離 (mahalanobis distance).
例題 6. 給定線性函數 f = \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} = w_{1}x_{1} + w_{2}x_{2} + ... + w_{d}x_{d} + w_{0} 服從均值為 \boldsymbol {w}^{\mathrm {T}}\boldsymbol {\mu} 方差為 \boldsymbol {w}^{\mathrm {T}}\Sigma\boldsymbol {w} 的多變數常態分佈. 計算 f 的期望和方差.
解 :由 \displaystyle {\mathop {\mathrm {E}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}) = \boldsymbol {w}^{\mathrm {T}}\mathop {\mathrm {E}}(\boldsymbol {x}) = \boldsymbol {w}^{\mathrm {T}}\boldsymbol {\mu}}, 我們可以得到 \displaystyle {\begin {aligned} \mathop {\mathrm {Var}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}) &= \mathop {\mathrm {E}} \left ( (\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} - \boldsymbol {w}^{\mathrm {T}}\boldsymbol {\mu})^{2} \right ) \\ &= \mathop {\mathrm {E}} \left ( (\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} - \boldsymbol {w}^{\mathrm {T}}\boldsymbol {\mu})(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} - \boldsymbol {w}^{\mathrm {T}}\boldsymbol {\mu}) \right ) \\ &= \mathop {\mathrm {E}}(\boldsymbol {w}^{\mathrm {T}}(\boldsymbol {x} - \boldsymbol {\mu})(\boldsymbol {x} - \boldsymbol {\mu})^{\mathrm {T}}\boldsymbol {w}) \\ &= \boldsymbol {w}^{\mathrm {T}}\mathop {\mathrm {E}} \left ( (\boldsymbol {x} - \boldsymbol {\mu})(\boldsymbol {x} - \boldsymbol {\mu})^{\mathrm {T}} \right )\boldsymbol {w} \\ &= \boldsymbol {w}^{\mathrm {T}}\Sigma\boldsymbol {w}. \end {aligned}}
\blacksquare
如果機率分佈 p(\boldsymbol {x}|C_{i}) 服從常態分佈, 那麼有 \displaystyle {p(\boldsymbol {x}|C_{i}) = \frac {1}{\sqrt {(2\pi)^{d}\det {\Sigma_{i}}}}\exp \left \{ -\frac {1}{2}(\boldsymbol {x} - \boldsymbol {\mu_{i}})^{\mathrm {T}}\Sigma_{i}^{-1}(\boldsymbol {x} - \boldsymbol {\mu_{i}}) \right \}}. 首先, 常態分佈是符合絕大多數自然界現象的模型. 因為大多數類別的樣本都可以看作簡單原型 \boldsymbol {\mu}_{i} 的輕微改編版本, 並且協方差矩陣 \Sigma_{i} 表示每個變數中的噪音量與產生噪音的源的相關性. 考慮參數估計中汽車購買預測的實例. 若 \boldsymbol {x} 是顧客身上可觀測的資料, \boldsymbol {\mu}_{i} 是購買第 i 類汽車的顧客的資料均值向量, 而 \Sigma_{i} 是協方差矩陣. 若我們定義判別式函數 g_{i}(\boldsymbol {x}) = \ln {p(\boldsymbol {x}|C_{i})} + \ln {\mathop {\mathbf {P}}(C_{i})}, 那麼有 \displaystyle {g_{i}(\boldsymbol {x}) = -\frac {d}{2}\ln {2\pi} - \frac {1}{2}\ln {\det {\Sigma_{i}}} - \frac {1}{2}(\boldsymbol {x} - \boldsymbol {\mu_{i}})^{\mathrm {T}}\Sigma_{i}^{-1}(\boldsymbol {x} - \boldsymbol {\mu_{i}}) + \ln {\mathop {\mathbf {P}}(C_{i})}}. 若給定 \dim {\boldsymbol {x}} \geq 2 的學習樣本 X = \left \{ \boldsymbol {x}^{\mathrm {t}}, \boldsymbol {r}^{\mathrm {t}} \right \}, 那麼 \displaystyle {\hat {\mathop {\mathbf {P}}}(C_{i}) = \frac {\sum \limits_{\mathrm {t}}r_{i}^{\mathrm {t}}}{\mathop {\mathrm {card}}{X}}}, \displaystyle {\hat {\boldsymbol {\mu}_{i}} = \frac {\sum \limits_{\mathrm {t}}r_{i}^{\mathrm {t}}\boldsymbol {x}^{\mathrm {t}}}{\sum \limits_{\mathrm {t}}r_{i}^{\mathrm {t}}}}, \displaystyle {\hat {\Sigma_{i}} = \frac {\sum \limits_{\mathrm {t}}r_{i}^{\mathrm {t}}(\boldsymbol {x}^{\mathrm {t}} - \hat {\boldsymbol {\mu}})(\boldsymbol {x}^{\mathrm {t}} - \hat {\boldsymbol {\mu}})^{\mathrm {T}}}{\sum \limits_{\mathrm {t}}r_{i}^{\mathrm {t}}}}. 將上述結果置換掉 g_{i} 中的對應項並且忽略掉常數部分, 可得 \displaystyle {g_{i}(\boldsymbol {x}) = -\frac {1}{2}\ln {\det {\hat {\Sigma_{i}}}} - \frac {1}{2}(\boldsymbol {x} - \hat {\boldsymbol {\mu}_{i}})^{\mathrm {T}}\hat {\Sigma_{i}}^{\mathrm {T}}(\boldsymbol {x} - \hat {\boldsymbol {\mu}_{i}}) + \ln {\hat {\mathop {\mathbf {P}}}(C_{i})}}. 展開之後有 \displaystyle {g_{i}(\boldsymbol {x}) = -\frac {1}{2}\ln {\det {\hat {\Sigma_{i}}}} - \frac {1}{2}\left ( \boldsymbol {x}^{\mathrm {T}}\hat {\Sigma_{i}}^{\mathrm {T}}\boldsymbol {x} - 2\boldsymbol {x}^{\mathrm {T}}\hat {\Sigma_{i}}^{\mathrm {T}}\boldsymbol {\mu}_{i} + \boldsymbol {\mu}_{i}^{\mathrm {T}}\hat {\Sigma_{i}}^{\mathrm {T}}\boldsymbol {\mu}_{i} \right ) + \ln {\hat {\mathop {\mathbf {P}}}(C_{i})}}. 它定義了一個二次判別式 : \displaystyle {g_{i}(\boldsymbol {x}) = \boldsymbol {x}^{\mathrm {T}}W_{i}\boldsymbol {x} + \boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x} + w_{i0}}. 其中, W_{i} = \frac {1}{2}\hat {\Sigma_{i}}^{-1}, \boldsymbol {w}_{i} = \hat {\Sigma_{i}}^{\mathrm {T}}\boldsymbol {\mu}_{i}, w_{i0} = -\frac {1}{2}\boldsymbol {\hat {\mu}_{i}}^{\mathrm {T}}\hat {\Sigma_{i}}^{-1}\boldsymbol {\mu}_{i} - \frac {1}{2}\ln {\det {\hat {\Sigma_{i}}}} + \ln {\hat {\mathop {\mathbf {P}}}(C_{i})}.
對於均值, 需要估計的參數共有 \dim {\boldsymbol {x}} \cdot d 個; 對於協方差矩陣, 需要估計的參數共有 \dim {\boldsymbol {x}} \cdot \frac {d(d + 1)}{2} 個. 當 d 很大但是樣本比較少的時候, 可能有 \det {\hat {\Sigma_{i}}} = 0, 其逆矩陣不存在; 又或者 \det {\hat {\Sigma_{i}}} \to 0, 這種情況不太穩定, 對於 \hat {\Sigma_{i}} 的小變化都可能引起 \hat {\Sigma_{i}}^{\mathrm {T}} 的巨大變化.
除了上面這種方法之外, 另一種作法是匯集所有資料, 並且對所有類別估計公共協方差矩陣 : \displaystyle {\hat {\Sigma} = \sum \limits_{i}\hat {\mathop {\mathbf {P}}}(C_{i})\hat {\Sigma_{i}}}. 在協方差矩陣相同的情況下, 有 \displaystyle {g_{i}(\boldsymbol {x}) = -\frac {1}{2}\left ( \boldsymbol {x}^{\mathrm {T}}\hat {\Sigma_{i}}^{\mathrm {T}}\boldsymbol {x} - 2\boldsymbol {x}^{\mathrm {T}}\hat {\Sigma}^{\mathrm {T}}\boldsymbol {\mu}_{i} + \boldsymbol {\mu}_{i}^{\mathrm {T}}\hat {\Sigma_{i}}^{\mathrm {T}}\boldsymbol {\mu}_{i} \right ) + \ln {\hat {\mathop {\mathbf {P}}}(C_{i})}}. 此時, 對於協方差矩陣, 需要估計的參數降為 \frac {d(d + 1)}{2} 個. 如果事前機率 \ln {\hat {\mathop {\mathbf {P}}}(C_{i})} 相等, 那麼最佳決策規則是把輸入指派到與輸入均值的馬式距離最小的那一類中. 如果事前機率不相等, 那麼邊界會發生移動. 在這種情況下, \boldsymbol {x}^{\mathrm {T}}W_{i}\boldsymbol {x} 這一項可以被消除, 因為它出現在所有判別式函數中, 並且決策的邊界是線性的, 那麼有 \displaystyle {g_{i}(\boldsymbol {x}) = \boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x} + w_{i0}}. 其中, W_{i} = \hat {\Sigma}^{-1}\hat {\boldsymbol {\mu_{i}}}, w_{i0} = -\frac {1}{2}\hat {\boldsymbol {\mu}_{i}}^{\mathrm {T}}\hat {\Sigma}^{-1}\hat {\boldsymbol {\mu_{i}}} + \ln {\hat {\mathop {\mathbf {P}}}(C_{i})}. 這種線性分類器的決策區域是凸的 (參考《【演算法】凸包》). 進一步地, 我們假定協方差矩陣所有非對角元素都為 0, 從而假定變數相互獨立, 此時問題可以進一步簡化, 有 \displaystyle {g_{i}(\boldsymbol {x}) = -\frac {1}{2}\sum \limits_{j}\left ( \frac {x_{j}^{\mathrm {t}} - \hat {\mu}_{ij}}{\hat {\sigma}_{j}} \right )^{2} + \ln {\hat {\mathop {\mathbf {P}}}(C_{i})}}. 其中, \frac {x_{j}^{\mathrm {t}} - \hat {\mu}_{ij}}{\hat {\sigma}_{j}} 有規範化的作用並且以標準差單位度量距離. 此時, 關於方差的參數降為 d 個.
如果我們假設所有變數都相等, 馬式距離化約為歐氏距離 (euclidean distance), 那麼在幾何圖形上, 分佈是球形的, 並以 \hat {\boldsymbol {\mu}_{i}} 為中心. 於是 \det {\hat {\Sigma}} = s^{2d} 且 \hat {\Sigma}^{-1} = \frac {1}{\hat {\sigma}^{2}}\mathrm {E}, 那麼有 \displaystyle {\begin {aligned} g_{i}(\boldsymbol {x}) &= \frac {\left \| \boldsymbol {x} - \hat {\boldsymbol {\mu}_{i}} \right \|^{2}}{2\hat {\sigma}^{2}} + \ln {\hat {\mathop {\mathbf {P}}}(C_{i})} \\ &= -\frac {1}{2\hat {\sigma}^{2}}\sum \limits_{j}(x_{j}^{\mathrm {t}} - \hat {\mu}_{ij})^{2} + \ln {\hat {\mathop {\mathbf {P}}}(C_{i})}. \end {aligned}} 其中, \mathrm {E} 為單位矩陣. 此時, 參數為 \dim {\boldsymbol {x}} \cdot d 個均值和一個 \hat {\sigma}^{2}. 若所有事前機率 \mathop {\mathbf {P}}(C_{i}) 相等, 自然有 \displaystyle {g_{i}(\boldsymbol {x}) = -\left \| \boldsymbol {x} - \hat {\boldsymbol {\mu}_{i}} \right \|^{2}}. 這稱為最近均值分類 (recent average classification), 因為它把輸入指派到最近均值的類別中. 如果每個均值都看作類別的理想原型或者樣板, 那麼這就是樣板配對的過程. 它可以擴展為 \displaystyle {\begin {aligned} g_{i}(\boldsymbol {x}) &= -\left \| \boldsymbol {x} - \hat {\boldsymbol {\mu}_{i}} \right \|^{2} \\ &= -(\boldsymbol {x} - \hat {\boldsymbol {\mu}_{i}})^{\mathrm {T}}(\boldsymbol {x} - \hat {\boldsymbol {\mu}_{i}}) \\ &= -\left ( \boldsymbol {x}^{\mathrm {T}}\boldsymbol {x} - 2\hat {\boldsymbol {\mu}_{i}}^{\mathrm {T}}\boldsymbol {x} + \hat {\boldsymbol {\mu}_{i}}^{\mathrm {T}}\hat {\boldsymbol {\mu}_{i}} \right ). \end {aligned}} 顯然, \boldsymbol {x}^{\mathrm {T}}\boldsymbol {x} 出現在所有 g_{i} 中, 去掉之後有 \displaystyle {g_{i}(\boldsymbol {x}) = \boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x} + w_{i0}}. 其中, \boldsymbol {w_{i}} = \hat {\boldsymbol {\mu}_{i}}, w_{i0} = -\frac {1}{2}\left \| \hat {\boldsymbol {\mu}_{i}} \right \|^{2}. 如果所有的 \hat {\boldsymbol {\mu}_{i}} 擁有相似的範數 (長度), 我們甚至可以忽略 w_{i0} 進一步將 g_{i} 寫為 \displaystyle {g_{i}(\boldsymbol {x}) = \boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x}}. 當 \hat {\boldsymbol {\mu}_{i}} 的范數可比較的時候, 也可以使用點積替代負的歐氏距離作為相似性的度量.
通過上面的分析, 實際上, 我們發現我們可以將尋找最佳判別式函數的過程看作尋找最佳距離函數的過程. 但是有時候, 某些假設並不成立, 例如針對所有變數都有相同的方差從而所有變數都相互獨立, 這在實際中比較難成立. 為了調整模型的複雜度, 有一種正規化判別式分析 \displaystyle {S_{i}' = \alpha\sigma^{2}\mathrm {E} + \beta S + (1 - \alpha - \beta)\hat {S}_{i}}, 當 \alpha = \beta = 0 時, 退化為二次分類器; 當 \alpha = 0 且 \beta = 1 時, 共享協方差矩陣從而得到線性分類器; 當 \alpha = 1 且 \beta = 0 時, 協方差矩陣是對角矩陣, \sigma^{2} 在對角線上, 從而得到最近均值分類.
當學習資料中樣本數量比較少的時候, 另一種正規化的方法是通過定義 \boldsymbol {\mu}_{i} 和 S_{i} 上的事前機率, 然後使用貝葉斯推斷.
上面, 我們討論的隨機變數具有連續性, 如果隨機變數是離散的, 那麼如何取處理呢? 假設 x_{j} 是 Bernoulli 隨機變數, 則有 \displaystyle {p(x|C_{i}) = \prod \limits_{j}p_{ij}^{x_{j}}(1 - p_{ij})^{1 - x_{j}}}. 若 p(x_{j}|C_{i}) 是常態分佈的, 那麼其判別式函數為 \displaystyle {\begin {aligned} g_{i}(\boldsymbol {x}) &= \ln {p(\boldsymbol {x}|C_{i})} + \ln {\mathop {\mathbf {P}}(C_{i})} \\ &= \sum \limits_{j}\big ( x_{j}\ln {p_{ij}} + (1 - x_{j})\ln {(1 - p_{ij})} \big ) + \ln {\mathop {\mathbf {P}}(C_{i})}. \end {aligned}} 它是線性函數, 其中 p_{ij} 的估計為 \displaystyle {\hat {p_{ij}} = \frac {\sum \limits_{\mathrm {t}}x_{j}^{\mathrm {t}}r_{i}^{\mathrm {t}}}{\sum \limits_{\mathrm {t}}r_{i}^{\mathrm {t}}}}. 在一般情況下, 假定 x_{j} 選自集合 \left \{ v_{1}, v_{2}, ..., v_{n_{j}} \right \}, 而不是 Bernoulli 的, 那麼我們重新定義新的 Bernoulli 隨機變數 : \displaystyle {z_{jk}^{\mathrm {t}} = \begin {cases} 1 & {x_{j}^{\mathrm {t}} = v_{k}} \\ 0 & {\text {else}}. \end {cases}} 令 p_{ijk} 表示 x_{j} 所屬的類 C_{i} 且取值為 v_{k} 的機率, 即 \displaystyle {p_{ijk} = p(z_{jk} = 1|C_{i}) = p(x_{j} = v_{k}|C_{i})}. 如果集合中的屬性相互獨立, 那麼有 \displaystyle {p(\boldsymbol {x}|C_{i}) = \prod \limits_{j} \prod \limits_{k}p_{ijk}^{z_{jk}}}. 於是, 判別式函數為 \displaystyle {g_{i}(\boldsymbol {x}) = \sum \limits_{j} \sum \limits_{k}z_{jk}\ln {p_{ijk}} + \ln {\mathop {\mathbf {P}}(C_{i})}}. 將 \hat {p_{ij}} = \frac {\sum \limits_{\mathrm {t}}x_{j}^{\mathrm {t}}r_{i}^{\mathrm {t}}}{\sum \limits_{\mathrm {t}}r_{i}^{\mathrm {t}}} 置換入 g_{i} 就可以得到判別式函數.
上面, 我們討論了分類的情況, 接下來我們討論回歸的情況. 在多變數線性回歸中, 假定數值輸入 r 為線性函數, 那麼有 \displaystyle {r^{\mathrm {t}} = g(\boldsymbol {x}^{\mathrm {t}}|w_{1}, w_{2}, ..., w_{d}, w_{0}) + \varepsilon = w_{1}x_{1}^{\mathrm {t}} + w_{2}x_{2}^{\mathrm {t}} + ... + w_{d}x_{d}^{\mathrm {t}} + \varepsilon}. 與單變數的情況相同, 我們假定 \varepsilon 是常態分佈的, 且均值為 0, 方差為任意常數, 最大化概似等價於最小化誤差的平方和 : \displaystyle {\mathop {\mathrm {E}}(w_{1}, w_{2}, ..., w_{d}, w_{0}|X) = \frac {1}{2}\sum \limits_{\mathrm {t}}\left ( r^{\mathrm {t}} - w_{1}x_{1}^{\mathrm {t}} + w_{2}x_{2}^{\mathrm {t}} + ... + w_{d}x_{d}^{\mathrm {t}} \right )^{2}}. 關於參數 w_{j} (j = 0, 1, 2, …, d) 求其偏導數, 得到正規方程式組 \displaystyle {\begin {cases} \sum \limits_{\mathrm {t}}r^{\mathrm {t}} = w_{1}\sum \limits_{\mathrm {t}}x_{1}^{\mathrm {t}} + w_{2}\sum \limits_{\mathrm {t}}x_{2}^{\mathrm {t}} + ... + w_{d}\sum \limits_{\mathrm {t}}x_{d}^{\mathrm {t}} + \mathop {\mathrm {card}}{X} \cdot w_{0} \\ \sum \limits_{\mathrm {t}}x_{1}^{\mathrm {t}}r^{\mathrm {t}} = w_{0}\sum \limits_{\mathrm {t}}x_{1}^{\mathrm {t}} + w_{1}\sum \limits_{\mathrm {t}}(x_{1}^{\mathrm {t}})^{2} + w_{2}\sum \limits_{\mathrm {t}}x_{1}^{\mathrm {t}}x_{2}^{\mathrm {t}} + ... + w_{d}\sum \limits_{\mathrm {t}}x_{1}^{\mathrm {t}}x_{d}^{\mathrm {t}} \\ \sum \limits_{\mathrm {t}}x_{2}^{\mathrm {t}}r^{\mathrm {t}} = w_{0}\sum \limits_{\mathrm {t}}x_{2}^{\mathrm {t}} + w_{1}\sum \limits_{\mathrm {t}}x_{1}^{\mathrm {t}}x_{2}^{\mathrm {t}} + w_{2}\sum \limits_{\mathrm {t}}(x_{2}^{\mathrm {t}})^{2} + ... + w_{d}\sum \limits_{\mathrm {t}}x_{2}^{\mathrm {t}}x_{d}^{\mathrm {t}} \\ \vdots \\ \sum \limits_{\mathrm {t}}x_{d}^{\mathrm {t}}r^{\mathrm {t}} = w_{0}\sum \limits_{\mathrm {t}}x_{d}^{\mathrm {t}} + w_{1}\sum \limits_{\mathrm {t}}x_{d}^{\mathrm {t}}x_{1}^{\mathrm {t}} + w_{2}\sum \limits_{\mathrm {t}}x_{d}^{\mathrm {t}}x_{2}^{\mathrm {t}} + ... + w_{d}\sum \limits_{\mathrm {t}}(x_{d}^{\mathrm {t}})^{2}. \end {cases}} 記 \displaystyle {X = \begin {pmatrix} 1 & x_{1}^{1} & x_{2}^{1} & ... & x_{d}^{1} \\ 1 & x_{1}^{2} & x_{2}^{2} & ... & x_{d}^{2} \\ \vdots & \vdots & \vdots & & \vdots \\ 1 & x_{1}^{\mathop {\mathrm {card}}X} & x_{2}^{\mathop {\mathrm {card}}X} & ... & x_{d}^{\mathop {\mathrm {card}}X} \end {pmatrix}, \boldsymbol {w} = \begin {pmatrix} w_{0} \\ w_{1} \\ w_{2} \\ \vdots \\ w_{d} \end {pmatrix}, \boldsymbol {r} = \begin {pmatrix} r^{1} \\ r^{2} \\ \vdots \\ r^{\mathop {\mathrm {card}}{X}} \end {pmatrix}}. 於是, 正規方程式可以寫為 \displaystyle {X^{\mathrm {T}}X\boldsymbol {w} = X^{\mathrm {T}}\boldsymbol {r}}. 那麼有 \displaystyle {\boldsymbol {w} = (X^{\mathrm {T}}X)^{-1}X^{\mathrm {T}}\boldsymbol {r}}. 總體方法和單變數多項式回歸中使用的方法沒有差別, 因為若取 x_{1} = x, x_{2} = x^{2}, ..., x_{d} = x^{d}, 那麼這兩個是同一個問題.
6. 維度化約
對於學習資料中的某些特徵, 它們對結果的影響並不是特別大. 比如在購買汽車的案例中, 客戶使用的手機品牌並不會對結果產生大的影響. 因此, 我們要設法捨棄掉這些特徵, 將數據從 d 個維度降至 d - k 個維度. 其中, 0 < k < d.
有一種啟發式的方法, 就是從空的維度集合中不斷向其中加入維度, 檢驗維度對正確率的影響. 當某個維度對正確率有顯著的提升效果, 那麼我們可以確定將這個維度加入其中; 另一種方案是從維度集合中刪除部分維度, 檢驗刪除之後的維度對正確率的影響. 如果該維度對正確率沒有顯著影響, 那麼我們可以確定可以將這個維度刪除.
但是這種方法有一定的風險, 例如某些維度具有關聯性. 當加入單個維度的時候, 對正確率沒有顯著提升, 但是當兩個或者以上的維度組合一起加入的時候, 對正確率才有顯著影響. 使用上面這種啟發式的方法就無法正確選擇, 而且這種啟發式方法找到的解不一定是最佳解, 甚至還有可能找到一個比較差的解.
從線性代數的角度, 某些分散在某個區域的數據可以通過矩陣變換投影到更低一維度上. 主成分分析 (principal components analysis) 就是這樣的一種方法, 我們將這個方法用於機器學習. 實際上對於 d 維的數據, 我們希望找到一個 k 維的空間, 將數據投影之後使得損失最小. 使用矩陣來表示, \boldsymbol {x} 在方向 \boldsymbol {w} 上的投影為 \displaystyle {z = \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}}.
主成分分析是一種非監督的方法, 它僅僅使用輸入資料, 準則是使得資料的方法最大化. 我們將資料投影到方向 \boldsymbol {w} 之後, 我們希望不同樣本之間的距離盡量大. 為了得到唯一解且使得該方向稱為最重要的因素, 我們要求任意 \left \| \boldsymbol {x}_{i} \right \| = 1, 且 \boldsymbol {x}_{i} 和 \boldsymbol {x}_{j} 正交, 即 \boldsymbol {x}_{i}\boldsymbol {x}_{j} = 0. 其中, i \neq j. \boldsymbol {x}_{1}, \boldsymbol {x}_{2}, ... 便是學習資料的主成分. 要注意的是, 這並不是維度, 我們要做的是將原來的 d 個維度投影到某個成分 \boldsymbol {x}_{i} 上. 對於 z_{1} = \boldsymbol {w}_{1}^{\mathrm {T}}\boldsymbol {x}, 我們知道, 若 \mathop {\mathrm {Cov}}(\boldsymbol {x}) = \Sigma, 則有 \displaystyle {\mathop {\mathrm {Var}}(z_{1}) = \boldsymbol {w}_{1}^{\mathrm {T}}\Sigma \boldsymbol {w}_{1}}. 為了尋找 \boldsymbol {w}_{1}, 使得 \mathop {\mathrm {Var}}(z_{1}) 在約束 \boldsymbol {w}_{1}^{\mathrm {T}}\boldsymbol {w}_{1} = 1 下最大化. 這實際上是在某些約束下尋找函數極值問題, 我們利用 Lagrange 乘數法, 記 L_{1}(\boldsymbol {w}_{1}) = \boldsymbol {w}_{1}^{\mathrm {T}}\Sigma \boldsymbol {w}_{1} - \alpha(\boldsymbol {w}_{1}^{\mathrm {T}}\boldsymbol {w}_{1} - 1). 對 \boldsymbol {w}_{1} 求導數並令其為 0 可得 \displaystyle {\Sigma \boldsymbol {w}_{1} = \alpha \boldsymbol {w}_{1}}. 為了使得方差最大化, 我們選擇具有最大特徵值的特徵向量. 因此, 主成分是學習樣本的協方差矩陣的具有最大特徵值 \lambda = \alpha 的特徵向量. 對於其它主成分, 我們需要和前面的特徵向量正交. 以 \boldsymbol {w}_{2} 為例, 對於 z_{2} = \boldsymbol {w}_{2}^{\mathrm {T}}\boldsymbol {x}, 除了有條件 \boldsymbol {w}_{1}^{\mathrm {T}}\boldsymbol {w}_{1} = 1 之外, 還需要滿足 \boldsymbol {w}_{2}^{\mathrm {T}}\boldsymbol {w}_{2} = 0. 這樣, Lagrange 函數要假設為 \displaystyle {L_{2}(\boldsymbol {w}_{2}) = \boldsymbol {w}_{2}^{\mathrm {T}}\Sigma \boldsymbol {w}_{2} - \alpha(\boldsymbol {w}_{1}^{\mathrm {T}}\boldsymbol {w}_{1} - 1) - \beta\boldsymbol {w}_{2}^{\mathrm {T}}\boldsymbol {w}_{2}}. 因為 \Sigma 是對稱的, 所以對於對於兩個不同的特徵值, 特徵向量必定是正交的; 如果 \Sigma 是正定的, 那麼它的所有特徵值都為正數; 如果 \det {\Sigma} = 0, 若 R(\Sigma) = k, 且 k < d, 則 \lambda_{i} = 0\ (i = k + 1, k + 2, ..., d), 剩餘 k 個具有非零特徵值的特徵向量是需要化約的維度. 越靠前的特徵向量貢獻了越大的方差.
我們定義 \displaystyle {\boldsymbol {z} = W^{\mathrm {T}}(\boldsymbol {x} - \boldsymbol {m})}. 其中, W 的 k 列是 \hat {\Sigma} 的 k 個主特徵向量, \hat {\Sigma} 是 \Sigma 的一個估計. 在投影前, 從 \boldsymbol {x} 減去樣本均值 \hat {\mu}, 將數據在原點中心化. 經過線性變換之後, 我們得到了一個 k 維空間, 它的維是特徵向量, 在這些新維度上的方差等於特徵值. 為了規範化方差, 可以除以特徵值的平方根.
另外一種推導, 是尋找一個矩陣 W, 使得當 \boldsymbol {z} = W^{\mathrm {T}}\boldsymbol {x} 時, 有 \mathop {\mathrm {Cov}}(\boldsymbol {z}) = D, 其中 D 是對角矩陣. 另外, 為了不是一般性, 我們假設 \boldsymbol {x} 已經被中心化. 換句話說, 我們希望得到不相關的 z_{i}.
如果形成一個 d \times c 的矩陣 C, 其中第 i 列是 \hat {\Sigma} 的規範化向量 c_{i}, 則 C^{\mathrm {T}}C = \mathrm {E}, \mathrm {E} 是單位矩陣. 並且, \displaystyle {\begin {aligned} \hat {\Sigma} &= \hat {\Sigma}CC^{\mathrm {T}} \\ &= \hat {\Sigma}(\boldsymbol {c}_{1}, \boldsymbol {c}_{2}, ..., \boldsymbol {c}_{d})C^{\mathrm {T}} \\ &= (\hat {\Sigma}\boldsymbol {c}_{1}, \hat {\Sigma}\boldsymbol {c}_{2}, ..., \hat {\Sigma}\boldsymbol {c}_{d})C^{\mathrm {T}} \\ &= (\lambda_{1}\boldsymbol {c}_{1}, \lambda_{2}\boldsymbol {c}_{2}, ..., \lambda_{d}\boldsymbol {c}_{d})C^{\mathrm {T}} \\ &= \lambda_{1}\boldsymbol {c}_{1}\boldsymbol {c}^{\mathrm {T}} + \lambda_{d}\boldsymbol {c}_{d}\boldsymbol {d}^{\mathrm {T}} \\ &= CDC^{\mathrm {T}}. \end {aligned}} 其中, 對角矩陣 D 的對角線元素是特徵值 \lambda_{1}, \lambda_{2}, ..., \lambda_{d}. 這稱為 \hat {\Sigma} 的频谱分解. 由於 C 是正交的, 並且 CC^{\mathrm {T}} = C^{\mathrm {T}}C = \mathrm {E}, 因此對於 \hat {\Sigma}, 可以在左側乘以 C^{\mathrm {T}}, 在右側乘以 C, 得到 \displaystyle {C^{\mathrm {T}}\hat {\Sigma}C = D}. 如果我們知道 \boldsymbol {z} = W^{\mathrm {T}}\boldsymbol {x}, 則 \mathop {\mathrm {Cov}}(\boldsymbol {z}) = W^{\mathrm {T}}\hat {\Sigma}W, 我們希望它等於一個對角矩陣. 從上述分析中, 我們看到, 可以令 W = C.
如果在實際中, 所有特徵值都大於 0 而 \det {\hat {\Sigma}} 很小, 那麼某些特徵值對方差的影響比較小, 可以考慮丟棄. 一般來說, 我們會考慮貢獻了 90% 以上方差的前 k 個主成分. 其中, k < d, 那麼得到方差比例 \displaystyle {\frac {\lambda_{1} + \lambda_{2} + ... + \lambda_{k}}{\lambda_{1} + \lambda_{2} + ... + \lambda_{k - 1} + \lambda_{k} + \lambda_{k + 1} + ... + \lambda+{n}}}. 在維度高度相關的情況下, 一般來說 k 幾乎和 d 一樣大. 另一種可能的方法是忽略那些特徵值小於平均輸入方差的特徵向量.
主成分分析中遠離集中區域的數據對於方差的影響比較大, 在計算時, 我們可以考慮丟棄這些數據.
如果學習資料服從均值為 \mu 且方差為 \Sigma 的常態分佈, 投影之後對於 \boldsymbol {z} = W^{\mathrm {T}}\boldsymbol {x} 服從均值為 W^{\mathrm {T}}\mu 且方差為 W^{\mathrm {T}}\Sigma W 的常態分佈. 如果樣本是 d 維的, 那麼投影到 k 維之後, 由於 \boldsymbol {z} 的各個列向量線性不相關, 新的協方差矩陣是一個對角矩陣. 如果它們被規範化且具有單位方差, 那麼可以在新的空間中使用歐式距離導出一個簡單的分類器. 學習資料 \boldsymbol {x}^{\mathrm {t}} 投影到 z 空間中, 有 \displaystyle {\boldsymbol {z}^{\mathrm {t}} = W^{\mathrm {T}}(\boldsymbol {x}^{\mathrm {t}} - \mu)}. 當 W 是正交矩陣使得 WW^{\mathrm {T}} = \mathrm {E} 時, 它可以逆投影到原來的空間 : \displaystyle {\hat {\boldsymbol {x}}^{\mathrm {t}} = W\boldsymbol {z}^{\mathrm {t}} + \mu}. 其中, \hat {\boldsymbol {x}}^{t} 是 \boldsymbol {x}^{\mathrm {t}} 在 z 空間中表示的重構, \mathrm {E} 為單位矩陣. 在所有正交的線性投影中, 主成分分析最小化了重構誤差, 即 \sum \limits_{\mathrm {t}} \left \| \boldsymbol {x}^{\mathrm {t}} - \hat {\boldsymbol {x}}^{\mathrm {t}} \right \|^{2}.
在公共主成分分析中, 假設對每一個類別, 其主成分都是相同的; 但是對於不同的類別, 這些成分的方差不同 : \displaystyle {\hat {\Sigma_{i}} = CD_{i}C^{\mathrm {T}}}. 這種方法允許匯聚學習資料, 並且是一種正則化的方法, 它的複雜度比所有類別都使用公共協方差矩陣要小, 同時仍然允許各個 \hat {\Sigma_{i}} 存在差別.
對於比較稀疏的學習資料, 例如我們需要學習幾個人的人臉, 但是臉部圖像只有幾十張. 若每張圖的像素為 256 x 256, 那麼總共有 65535 個維度. 根據矩陣的秩的性質可知, 由於只有幾十個圖像, 因此秩遠遠小於 65535. 於是, 我們需要使用特徵嵌入 (feature embedding). 若 X 是 n \times d 矩陣. 其中, n 是學習資料中的樣本數量, d 是維度. \boldsymbol {x} 的協方差矩陣是 d \times d 的, 不失一般性, 我們假設 X 已經中心化, 且均值為 0. 那麼, 該矩陣等於 X^{\mathrm {T}}X. 主成分分析使用 X^{\mathrm {T}}X 的特徵向量. 頻譜分解為 \displaystyle {X^{\mathrm {T}}X = WDW^{\mathrm {T}}}. 其中, W 為 d \times d 矩陣, 並且它的各個列包含了 X^{\mathrm {T}}X 的特徵向量, D 為對角矩陣, 對角元素是對應的特徵值. 假設我們想要將維度化約到 k (k < d). 在主成分分析中, 我們取 W 的前 k 列, 記作 \boldsymbol {w}_{i}, 其對應的特徵值為 \lambda_{i}. 其中, i = 1, 2, ..., k. 通過取原始輸入與特徵向量的點積, 影射到新的 k 維空間上 \displaystyle {z_{i}^{\mathrm {t}} = \boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}}}. 其中, i = 1, 2, ..., k, t = 1, 2, ..., n.取原始輸入與特徵向量的點積, 影射到新 給定 \lambda_{i} 和 \boldsymbol {w}_{i} 是 X^{\mathrm {T}}X 的特徵值和特徵向量, 對於任意 i \leq k, 有 \displaystyle {(X^{\mathrm {T}}X)\boldsymbol {w}_{i} = \lambda_{i}\boldsymbol {w}_{i}}. 等式兩側左乘 X 可得 \displaystyle {(XX^{\mathrm {T}})X\boldsymbol {w}_{i} = \lambda_{i}X\boldsymbol {w}_{i}}. 因此, X\boldsymbol {w}_{i} 是 XX^{\mathrm {T}} 具有相同特徵值的特徵向量. 而 X^{\mathrm {T}}X 是 d \times d 矩陣, XX^{\mathrm {T}} 是 n \times n 矩陣. XX^{\mathrm {T}} 的頻譜分解為 \displaystyle {XX^{\mathrm {T}} = VAV^{\mathrm {T}}}. 其中, V 是 n \times n 矩陣, 其列由 XX^{\mathrm {T}} 的特徵向量組成, A 為對角矩陣, 其對角元素為對應的特徵值. XX^{\mathrm {T}} 的 n 維特徵向量是新的特徵嵌入空間的座標.
注意, 特徵向量通常被規範化, 具有單位長度. 因此, 如果 XX^{\mathrm {T}} 的特徵向量是 \boldsymbol {v}_{i}, 由於 X\boldsymbol {w}_{i} 的平方和為 \lambda_{i}, 則有 \displaystyle {\boldsymbol {v}_{i} = \frac {X\boldsymbol {w}_{i}}{\lambda_{i}}}. 其中, i = 1, 2, ..., k. 那麼, 如果我們已經計算了 \boldsymbol {v}_{i}, 即矩陣 V 的第 i 列, 並且想要得到 X\boldsymbol {w}_{i}, 可以直接使用 \displaystyle {z_{i}^{\mathrm {t}} = V_{\mathrm {t}i}\sqrt {{\mathrm {E}}_{\mathrm {tt}}}}. 其中, \mathrm {t} = 1, 2, ..., n, i = 1, 2, ..., k.
當 d < n 時, 使用 X^{\mathrm {T}}X 進行計算比較簡單; 否則, 使用 XX^{\mathrm {T}} 計算比較簡單. 對於主成分分析, 我們學習投影向量, 並且可以通過特徵向量與學習資料的點積將原數據影射到新的維度空間中. 使用特徵嵌入做不到這一點, 因為特徵向量並沒有學習投影模型, 而是直接得到了座標.
考慮一個實際問題, 為什麼我會將國語和英語歸於語言類別, 數學物理歸入理科類別, 政治歷史歸入文科類別. 這是憑藉著我們的經驗 : 通過某一類別比較拿手的人, 他的對應科目的成績通常不會太差. 這就為我們的維度化約提供了一個新的角度. 我們說這個人理科好, 就在間接地說他數學和物理成績比較高. 因此, 有了因素分析 (factor analysis).
在機率論中, 我們知道如果隨機變數 \xi_{1}, \xi_{2}, ..., \xi_{n} 具有高度的相關性, 那麼有 \left | \rho(\xi_{i}, \xi_{j}) \right | \to 1, 而這些隨機變數和另外一組隨機變數 \eta_{1}, \eta_{2}, ..., \eta_{m} 具有極低的相關性. 因此, 我們可以將隨機變數 \xi_{1}, \xi_{2}, ..., \xi_{n} 分為一組, \eta_{1}, \eta_{2}, ..., \eta_{m} 分為另外一組. 這便是因素分析所要做的內容. 給定學習資料, 我們要將維度分為 k 個組, 然後將維度化約到 k 個組上. 這個過程並不需要輸入資料, 因此這個過程也是非監督的, 目標就是在更小的維度空間上對學習資料建立模型並且不丟失信息.
設我們有取自某一分佈的學習資料樣本 X = \left \{ \boldsymbol {x}^{\mathrm {t}} \right \}. 其中, \mathop {\mathrm {E}}(\boldsymbol {x}) = \boldsymbol {\mu}, \mathop {\mathrm {Cov}}(\boldsymbol {x}) = \Sigma. 假定因素都是單位常態分佈的, 並且 \mathop {\mathrm {E}}(z_{j}) = 0, \mathop {\mathrm {Var}}(z_{j}) = 1, \mathop {\mathrm {Cov}}(z_{i}, z_{j}) = 0 (i \neq j). 其中, z_{i} 來自主成分分析中的 \boldsymbol {z} = W^{\mathrm {T}}(\boldsymbol {x} - \boldsymbol {\mu}). 但是某些信息是不能由因素來解釋的, 於是每一個輸入有一個附加的項用於記錄這些信息, 我們記為 \varepsilon_{i}, 並且假定 \mathop {\mathrm {E}}(\varepsilon_{i}) = 0, \mathop {\mathrm {Var}}(\varepsilon_{i}) = \psi_{i}, \mathop {\mathrm {Cov}}(\varepsilon_{i}, \varepsilon_{j}) = 0 (i \neq j). 除此之外, 我們還假定它們和因素之間也不相關, 即 \mathop {\mathrm {Cov}}(\varepsilon_{i}, z_{j}) = 0.
因素分析中, 由於那些要化約到某一維度上的隨機變數具有高度的相關性, 我們希望每一個新的維度上的輸入 x_{i} 可以寫成 k 個因素之和加上一些其它信息 : \displaystyle {x_{i} - \mu_{i} = v_{i1}z_{1} + v_{i2}z_{2} + ... + v_{ik}z_{k} + \varepsilon_{i}}. 其中, k < d, 這 k 個因素 z_{1}, z_{2}, ..., z_{k} 具有一定的相關性. 從這裡, 我們可以看到為什麼我之前提到因素分析可以做到不丟失信息.
我們換一種寫法 : \displaystyle {x_{i} - \mu_{i} = \sum \limits_{j = 1}^{k}v_{ij}z_{j} + \varepsilon_{i}}. 然後可以將其寫為矩陣的形式 \displaystyle {\boldsymbol {x} - \boldsymbol {\mu} = V\boldsymbol {z} + \boldsymbol {\varepsilon}}. 其中, V 是一個 k \times d 的權重矩陣, 稱為因素負荷量 (factor loading). 不失一般性, 不妨假設 \boldsymbol {\mu} = \boldsymbol {0}. 若給定 \mathop {\mathrm {Var}}(z_{j}) = 1 和 \mathop {\mathrm {Var}}(\varepsilon_{i}) = \Psi_{i}, 那麼 \displaystyle {\mathop {\mathrm {Var}}(x_{i}) = v_{i1}^{2} + v_{i2}^{2} + ... + v_{ik}^{2} + \psi_{i} = \sum \limits_{j = 1}^{k}v_{ij}^{2}+ \psi_{i}}. 其中, \sum \limits_{j = 1}^{k}v_{ij}^{2} 是公共因素貢獻的方差, 而 \psi_{i} 是針對 x_{i} 的方差.
由於各個因素都是不相關且單位常態分佈, 因此 \mathop {\mathrm {Cov}}(\boldsymbol {z}) = 1. 採用矩陣的形式, 有 \displaystyle {\begin {aligned} \Sigma &= \mathop {\mathrm {Cov}}(\boldsymbol {x}) = \mathop {\mathrm {Cov}}(V\boldsymbol {z} + \boldsymbol {\varepsilon}) \\ &= \mathop {\mathrm {Cov}}(V\boldsymbol {z}) + \mathop {\mathrm {Cov}}(\boldsymbol {\varepsilon}) \\ &= V\mathop {\mathrm {Cov}}(\boldsymbol {z})V^{\mathrm {T}} + \Psi \\ &= VV^{\mathrm {T}} + \Psi. \end {aligned}} 其中, \Psi 是對角矩陣, 其對角線元素為 \psi_{i}.
給定 \Sigma 的估計 \hat {\Sigma}, 我們希望得到 V 和 \Psi 使得 \displaystyle {\hat {\Sigma} = VV^{\mathrm {T}} + \Psi}. 如果只有少量因素, 即如果 V 是 d \times k 矩陣, k 比較小, 而 \Psi 有 d 個值, 那麼參數就從 d^{2} 減少到了 dk + d 個.
我們首先忽略 \Psi, 從 \hat {\Sigma} 的頻譜分解開始, 我們知道 \displaystyle {\hat {\Sigma} = CDC^{\mathrm {T}} = CD_{0}D_{0}C^{\mathrm {T}} = (CD_{0})(D_{0}C^{\mathrm {T}}) = (CD_{0})(D_{0}C)^{\mathrm {T}}}. 其中, 我們取前 k 個特徵向量, 使得 C 是 d \times k 特徵向量矩陣, D_{0} 是對角矩陣, 其元素為原對角矩陣 D 對應元素的平方根. 於是有 \displaystyle {V = CD_{0}}. 由 \mathop {\mathrm {Var}}(x_{i}) = \sum \limits_{j = 1}^{k}v_{ij}^{2}+ \psi_{i}, 可得 \displaystyle {\psi_{i} = \hat {\sigma_{i}}^{2} - \sum \limits_{j = 1}^{k}v_{ij}^{2}}. 令 \Psi = \mathop {\mathrm {diag}}(\psi_{1}, \psi_{2}, ..., \psi_{d}) 即可. 其中, \hat {\sigma_{i}} 是 \Sigma 的第 i 列.
值得注意的是, V 與任一正交矩陣相乘, 其結果為另一個有效解 \displaystyle {S = (VT)(VT)^{\mathrm {T}} = VTT^{\mathrm {T}}V^{\mathrm {T}} = VEV^{\mathrm {T}} = VV^{\mathrm {T}}}. 其中, T 是正交矩陣, \mathrm {E} 是單位矩陣.
在線性代數中, 我們知道, 正交變換不會改變點對之間的距離. 因此, 如果 T 是正交矩陣, \boldsymbol {z} = T\boldsymbol {x}, 那麼有 \displaystyle {\boldsymbol {z}^{\mathrm {T}}\boldsymbol {z} = (T\boldsymbol {x})^{\mathrm {T}}(T\boldsymbol {x}) = \boldsymbol {x}^{\mathrm {T}}T^{\mathrm {T}}T\boldsymbol {x} = \boldsymbol {x}^{\mathrm {T}}\boldsymbol {x}}. 如果乘以一個對角矩陣, 則可以獲得旋轉座標軸的效果, 這允許我們選擇最可解釋的座標集合. 在二維座標中, 若令 \displaystyle {T = \begin {pmatrix} \cos {\varphi} & -\sin {\varphi} \\ \sin {\varphi} & \cos {\varphi} \end {pmatrix}}, 那麼可以讓座標系旋轉 \varphi 度.
一般來說, 旋轉有兩種類型 :
- 正交旋轉 : 旋轉後各個因素仍然正交;
- 斜旋轉 : 旋轉過後因素相關係數提升.
旋轉因素為每個變數在盡可能少的因素上給出最大因素負荷量, 使得因素可解釋. 然而, 可解釋是較為主觀的, 不應該用來強加個人對數據的偏好.
在上面的分析中, 我們已經看到當我們找到負荷量並試圖使用較少的因素來變數變數的時候, 它可以用來提取知識. 當 k < d 時, 它還可以用於降低維度. 當我們對維度化約感興趣的時候, 我們需要能夠從 x_{i} 發現因素分數 z_{j}, 我們希望找到負荷量 w_{ji} 使得 \displaystyle {z_{j} = \sum \limits_{i = 1}^{d}w_{ji}x_{i} + \varepsilon_{j}}. 其中, j = 1, 2, ..., k, x 被中心化具有零均值. 採用向量的方式, 有 \displaystyle {\boldsymbol {z}^{\mathrm {t}} = W^{\mathrm {T}}\boldsymbol {x}^{\mathrm {T}} + \boldsymbol {\varepsilon}}. 這是一個線性模型, 有 d 個輸入和 k 個輸出, 其轉置可以寫作 \displaystyle {(\boldsymbol {z}^{\mathrm {t}})^{\mathrm {T}} = (\boldsymbol {x})^{\mathrm {T}}W + \varepsilon^{\mathrm {T}}}. 給定 n 個學習樣本, 我們記 \displaystyle {Z = XW + \Xi}. 其中, Z 是樣本的 n \times k 矩陣, X 是中心化的 n \times d 觀測矩陣, 而 \Xi 是均值為 0 的 N \times k 噪音矩陣. 這是一個具有多輸出的多元線性回歸, 我們知道 \displaystyle {W = (X^{\mathrm {T}}X)^{-1}X^{\mathrm {T}}Z}. 但是由於 Z 是要計算的, 因此上述方法不可行, 要進行一些變換 : \displaystyle {\begin {aligned} W &= \frac {n - 1}{n - 1}(X^{\mathrm {T}}X)^{-1}X^{\mathrm {T}}Z \\ &= (n - 1)\left ( X^{\mathrm {T}}X \right )^{-1}\frac {1}{n - 1}X^{\mathrm {T}}Z \\ &= \left ( \frac {1}{n - 1}X^{\mathrm {T}}X \right )^{-1}\frac {1}{n - 1}X^{\mathrm {T}}Z \\ &= \hat {\Sigma}^{-1}V. \end {aligned}} 若 \det {\hat {\Sigma}} \neq 0, 那麼有 \displaystyle {Z = XW = X\hat {\Sigma}^{-1}V}.
之前我們所討論的, 不論是 X^{\mathrm {T}}X 還是 XX^{\mathrm {T}}, 它們都是方陣, 適用於頻譜分解. 對於非方陣, 我們要尋求其它方法. 在線性代數中, 有兩種方法分解矩陣, 一種是奇異值分解 (singular value decomposition), 另一種是通過矩陣乘法進行分解. 它們都可以分解任意矩陣.
對於矩陣 X = (x_{ij})_{n \times d} 來說, 奇異值分解為 \displaystyle {X = VAW^{\mathrm {T}}}. 其中, 矩陣 V 是 n \times n 矩陣, 包含了 XX^{\mathrm {T}} 的特徵向量; 矩陣 W 是 d \times d 矩陣, 包含了 X^{\mathrm {T}}X 的特徵向量; 矩陣 A 是對角矩陣, 包含了 k = \min \left \{ n, d \right \} 個奇異值, 這些奇異值是矩陣 XX^{\mathrm {T}} 和 X^{\mathrm {T}}X 的非零特徵值的平方根, 其餘元素為 0. 除此之外, V 和 W^{\mathrm {T}} 是正交矩陣.
我們可以將矩陣 X 記為 \displaystyle {X = \boldsymbol {u}_{1}a_{1}\boldsymbol {v}_{1}^{\mathrm {T}} + \boldsymbol {u}_{2}a_{2}\boldsymbol {v}_{2}^{\mathrm {T}} + ... + \boldsymbol {u}_{k}a_{k}\boldsymbol {v}_{k}^{\mathrm {T}}}. 儘管 a_{i} 是非零的, 但是如果很小, 可以忽略對應的 \boldsymbol {u}_{i} 和 \boldsymbol {v}_{i}. 因此, 這樣重構矩陣 X 沒有太大誤差.
對於矩陣分解, 我們通常將一個大矩陣寫成兩個矩陣的乘積 : \displaystyle {X = FG}. 其中, X 是 n \times d 矩陣, F 是 n \times k 矩陣, 而 G 是 k \times d 矩陣. 我們希望 d 比 n 小得多. 其基本思想是, 儘管學習資料可能很大, 但是如果矩陣是稀疏的或者高度相關的, 可以在具有較低緯度的空間中表示.
現在考慮另外一種情況, 如果給定若干個點, 我們知道點對之間的距離, 但是我們並不知道點確切座標和所處在的維度, 更不知道點對之間的距離採用什麼方式計算, 這時候應該如何去學習這些樣本呢? 多維標度提供了一種方法, 使得它們在低維度空間中的歐式距離盡量接近原始空間中給定的距離. 這也是一種維度化約的方式, 使得原始數據從一個未知的高維度空間中影射到低維度空間中.
設有樣本 X = \left \{ \boldsymbol {x}^{t} \right \}_{t = 1}^{n}. 對於任意兩點 \boldsymbol {x}^{r}, \boldsymbol {x}^{s} \in X, 它們之間的歐式距離的平方為 \displaystyle {d_{rs}^{2} = \left \| \boldsymbol {x}^{r} - \boldsymbol {x}^{s} \right \|^{2} = \sum \limits_{j = 1}^{d}(x_{j}^{r} - x_{j}^{s})^{2} = \sum \limits_{j = 1}^{d}(x_{j}^{r})^{2} - 2\sum \limits_{j = 1}^{d}x_{j}^{r}x_{j}^{s} + \sum \limits_{j = 1}^{d}(x_{j}^{s})^{2}}. 記 b_{kl} = \sum \limits_{j = 1}^{d}x_{j}^{k}x_{j}^{l}, 則 \displaystyle {d_{rs}^{2} = b_{rr} + b_{ss} - 2b_{rs}}. 為了約束這個解, 把數據在原點中心化並假定 \displaystyle {\sum \limits_{\mathrm {t} = 1}^{n}x_{j}^{r} = 0}. 其中, j = 1, 2, ..., d. 現在, 我們定義 \displaystyle {T = \sum \limits_{\mathrm {t} = 1}^{n}b_{tt} = \sum \limits_{\mathrm {t}} \sum \limits_{j}(x_{j}^{t})^{2}}, 得到 \displaystyle {\sum \limits_{r}d_{rs}^{2} = T + nb_{ss}}, \displaystyle {\sum \limits_{s}d_{rs}^{2} = nb_{rr} + T}, \displaystyle {\sum \limits_{r}\sum \limits_{s}d_{rs}^{2} = 2nT}. 當定義 \displaystyle {d_{\cdot s}^{2} = \frac {1}{n}\sum \limits_{r}d_{rs}^{2}, d_{r\cdot}^{2} = \frac {1}{n}d_{rs}^{2}, d_{\cdot \cdot}^{2} = \frac {1}{n^{2}} \sum \limits_{r}\sum \limits_{s}d_{rs}^{2}}. 結合歐式距離的定義, 我們可以得到 \displaystyle {b_{rs} = \frac {1}{2}\left ( d_{r\cdot}^{2} + d_{\cdot s}^{2} - d_{\cdot \cdot}^{2} - d_{rs}^{2} \right )}. 經過了這麼計算, 但是我們還沒有得到原始學習樣本在新的維度上的座標信息. 根據 b_{kl} 的定義, 我們將其寫為矩陣的形式 B = XX^{\mathrm {T}}, 然後對其使用特徵嵌入. 從頻譜分解可知, CD_{0} 可以作為 X 的一個近似. 其中, C 的列向量是矩陣 B 的特徵向量, D_{0} 是對角矩陣, 其對角元素為對應特徵值的平方根. 假設 \boldsymbol {c}_{j} 是原始維度下的特徵向量, 其對應的特徵值為 \lambda_{j}, 則有 \displaystyle {\boldsymbol {z}_{j}^{\mathrm {t}} = \sqrt {\lambda_{j}}\boldsymbol {c}_{j}}. 其中, j = 1, 2, ..., k, t = 1, 2, ..., n. 也就是說, 樣本 x^{t} 的新座標由特徵向量 \boldsymbol {c}_{j} 的第 t 個元素給出.
一般情況下, 我們希望尋找一個影射 \boldsymbol {z} = g(\boldsymbol {x}|\theta), 其中 \boldsymbol {x} 是原始 d 維度下的變數, \boldsymbol {z} 是要化約的 k (k < d) 維度下的函數值, 那麼函數 g 是依賴於參數 \theta 的 d 維到 k 維的影射函數.
前面所討論的多維標度對應於線性變換 \displaystyle {\boldsymbol {z} = g(\boldsymbol {x}|W) = W^{\mathrm {T}}\boldsymbol {x}}. 但是在一般情況下, g 也可以是非線性的, 這被稱為 Sammon 影射 (Sammon mapping), 影射中的標準化誤差被稱為 Sammon 應力 (Sammon stress), 定義為 \displaystyle {\mathop {\mathrm {E}}(\theta|X) = \sum \limits_{r, s}\frac {\left ( \left \| \boldsymbol {z}^{r} - \boldsymbol {z}^{s} \right \| - \left \| \boldsymbol {x}^{r} - \boldsymbol {x}^{s} \right \| \right )^{2}}{\left \| \boldsymbol {x}^{r} - \boldsymbol {x}^{s} \right \|^{2}} = \sum \limits_{r, s}\frac {\left ( \left \| g(\boldsymbol {x}^{r}|\theta) - g(\boldsymbol {x}^{s}|\theta) \right \| - \left \| \boldsymbol {x}^{r} - \boldsymbol {x}^{s} \right \| \right )^{2}}{\left \| \boldsymbol {x}^{r} - \boldsymbol {x}^{s} \right \|^{2}}}. 可以對 g 使用任何回歸方法, 估計 \theta 來最小化學習資料 X 上的應力. 如果 g 在 \boldsymbol {x} 上是非線性的, 那麼這將對應一個非線性的維度化約.
在分類的情況下, 可以在距離中包含類別信息, 如 \displaystyle {{d_{rs}}' = (1 - \alpha)d_{rs} + \alpha c_{rs}}. 其中, c_{rs} 是 \boldsymbol {x}^{r} 和 \boldsymbol {x}^{s} 所屬類別之間的距離. 這個距離需要主動提供, 使用 \alpha 進行交叉驗證優化.
線性判別分析 (linear discriminant analysis) 是一種用於分類問題的維度化約的監督方法. 給定兩個類別 C_{1} 和 C_{2}, 給定一個線性函數 \displaystyle {z = \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}}. 我們希望找到向量 \boldsymbol {w} 使得不同類別的資料影射到 \boldsymbol {w} 的方向上時, 使得兩個不同類別的資料盡可能分開. 這是一個從 d 維到一維的維度化約. 若 \hat {\boldsymbol {\mu}}_{1} 和 \hat {\mu}_{1} 是樣本 C_{1} 在影射前的均值和影射後的均值, \hat {\boldsymbol {\mu}}_{2} 和 \hat {\mu}_{2} 是樣本 C_{2} 在影射前的均值和影射後的均值. 我們有樣本 X = \left \{ \boldsymbol {x}^{\mathrm {t}}, r^{\mathrm {t}} \right \}, 使得如果 \boldsymbol {x}^{\mathrm {t}} \in C_{1}, 則 r^{\mathrm {t}} = 1; 否則, r^{\mathrm {t}} = 0. 那麼, \displaystyle {\mu_{1} = \frac {\sum \limits_{\mathrm {t}}\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}}r^{\mathrm {t}}}{\sum \limits_{\mathrm {t}}r^{\mathrm {t}}} = \boldsymbol {\boldsymbol {w}^{\mathrm {T}}\boldsymbol {\mu}_{1}}, \mu_{2} = \frac {\sum \limits_{\mathrm {t}}\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}}(1 - r^{\mathrm {t}})}{\sum \limits_{\mathrm {t}}(1 - r^{\mathrm {t}})} = \boldsymbol {\boldsymbol {w}^{\mathrm {T}}\boldsymbol {\mu}_{1}}}. 來自 C_{1} 和 C_{2} 的樣本影射之後的散佈為 \displaystyle {s_{1}^{2} = \sum \limits_{\mathrm {t}}\left ( \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} - \mu_{1} \right )^{2}r^{\mathrm {t}}, s_{2}^{2} = \sum \limits_{\mathrm {t}}\left ( \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} - \mu_{2} \right )^{2}(1 - r^{\mathrm {t}})}. 影射之後, 為了使得兩個不同的類別被很好地分開, 我們希望均值盡可能遠離, 並且類別樣本散步在盡可能小的區域內. 因此, 我們希望 |\mu_{1} - \mu_{2} | 儘量大而 s_{1}^{2} + s_{2}^{2} 儘量小. 記 \displaystyle {J(\boldsymbol {w}) = \frac {(\mu_{1} - \mu_{2})^{2}}{s_{1}^{2} + s_{2}^{2}}}. 實際上, 我們希望最大化 J(\boldsymbol {w}). 重寫分子可得 \displaystyle {\begin {aligned} (\mu_{1} - \mu_{2})^{2} &= \left ( \boldsymbol {w}^{\mathrm {T}}\boldsymbol {\mu}_{1} - \boldsymbol {w}^{\mathrm {T}}\boldsymbol {\mu}_{2} \right )^{2} \\ &= \boldsymbol {w}^{\mathrm {T}}(\boldsymbol {\mu}_{1} - \boldsymbol {\mu}_{2})(\boldsymbol {\mu}_{1} - \boldsymbol {\mu}_{2})^{\mathrm {T}}\boldsymbol {w} \\ &= \boldsymbol {w}^{\mathrm {T}}S_{B}\boldsymbol {w}. \end {aligned}} 其中, S_{B} = (\boldsymbol {\mu}_{1} - \boldsymbol {\mu}_{2})^{\mathrm {T}} 是類別間散佈矩陣. 該分子是影射後類別樣本在其均值周圍散佈之和, 可以改寫為 \displaystyle {\begin {aligned} s_{1}^{2} &= \sum \limits_{\mathrm {t}}\left ( \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} - \mu_{1} \right )^{2}r^{\mathrm {t}} \\ &= \sum \limits_{\mathrm {t}}\boldsymbol {x}^{\mathrm {T}}(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {\mu}_{1})(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {\mu}_{1})^{\mathrm {T}}\boldsymbol {w}r^{\mathrm {t}} \\ &= \boldsymbol {w}^{\mathrm {T}}S_{1}\boldsymbol {w}. \end {aligned}} 其中, S_{1} = \sum \limits_{\mathrm {t}}r^{\mathrm {t}}(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {\mu}_{1})(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {\mu}_{1})^{\mathrm {T}} 是 C_{1} 的類別內散佈矩陣. \frac {1}{\sum \limits_{t}r^{\mathrm {t}}}S_{1} 是 \Sigma_{1} 的一個估計. 類似地, s_{2}^{2} = \boldsymbol {w}^{\mathrm {T}}S_{2}\boldsymbol {w}. 其中, S_{1} = \sum \limits_{\mathrm {t}}r^{\mathrm {t}}(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {\mu}_{2})(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {\mu}_{2})^{\mathrm {T}}. 若令 S_{W} = S_{1} + S_{2}, 可得 \displaystyle {s_{1}^{2} + s_{2}^{2} = \boldsymbol {w}^{\mathrm {T}}S_{W}\boldsymbol {w}}. 於是, J(\boldsymbol {w}) 可以改寫為 \displaystyle {J(\boldsymbol {w}) = \frac {\boldsymbol {w}^{\mathrm {T}}S_{B}\boldsymbol {w}}{\boldsymbol {w}^{\mathrm {T}}S_{W}\boldsymbol {w}} = \frac {\left | \boldsymbol {w}^{\mathrm {T}}(\boldsymbol {\mu}_{1} - \boldsymbol {\mu}_{2})^{2} \right |}{\boldsymbol {w}^{\mathrm {T}}S_{W}\boldsymbol {w}}}. 令 \frac {dJ}{d\boldsymbol {w}} = 0 可得 \displaystyle {\frac {\boldsymbol {w}^{\mathrm {T}}(\boldsymbol {\mu}_{1} - \boldsymbol {\mu}_{2})}{\boldsymbol {w}^{\mathrm {T}}S_{W}\boldsymbol {w}}\left ( 2(\boldsymbol {\mu}_{1} - \boldsymbol {\mu}_{2}) - \frac {\boldsymbol {w}^{\mathrm {T}}(\boldsymbol {\mu}_{1} - \boldsymbol {\mu}_{2})}{\boldsymbol {w}^{\mathrm {T}}S_{W}\boldsymbol {w}} S_{W} \boldsymbol {w} \right )}. 令 \frac {\boldsymbol {\mu}_{1} - \boldsymbol {\mu}_{2}}{\boldsymbol {w}^{\mathrm {T}}S_{W}\boldsymbol {w}} 為常數 c, 那麼有 \displaystyle {\boldsymbol {w} = cS_{W}^{-1}(\boldsymbol {\mu}_{1} - \boldsymbol {\mu}_{2})}. 對我們來說, 重要的是線性模型的方向, 即線性函數的斜率, 而不是函數值的大小. 因此我們取 c = 1 找出 \boldsymbol {w}.
當 p(\boldsymbol {x}|C_{i}) 服從均值為 \boldsymbol {\mu}_{i} 和方差為 \Sigma 的常態分佈時, 存在線性判別式. 其中, \boldsymbol {w} = \Sigma^{-1}(\boldsymbol {\mu}_{1} - \boldsymbol {\mu}_{2}). 除此之外, 在常態分佈下, 判別式 J(\boldsymbol {w}) 是最佳化的. 在同樣的假設下, 還可以計算閾限 w_{0} 來分開兩個類別. 不過, 即使分佈不是常態的, J(\boldsymbol {w}) 仍然可用. 我們稱 J(\boldsymbol {w}) 為 Fisher 判別式 (Fisher discriminant).
上面, 我們討論了兩個類別的情況, 現在我們要將結論推廣到多個類別的情況. 此時, 我們尋找的是矩陣 W 使得 \displaystyle {\boldsymbol {z} = W^{\mathrm {T}}\boldsymbol {x}}. 其中, \boldsymbol {z} 是 k 維的, W 是 d \times k 矩陣. C_{i} 的類別內散佈矩陣是 \displaystyle {S_{i} = \sum \limits_{i}r_{i}^{\mathrm {t}}(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {\mu}_{i})(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {\mu}_{i})^{\mathrm {T}}}. 其中, 如果 \boldsymbol {x}^{\mathrm {t}} \in C_{i}, 那麼 r_{i}^{t} = 1; 否則, r_{i}^{t} = 0. 此時, \displaystyle {S_{W} = \sum \limits_{i = 1}^{K}S_{i}}. 其中, K 是類別數量. 當類別數量多於兩個時, 均值的散佈根據它們在總均值周圍的散佈情況計算 \displaystyle {\boldsymbol {\mu} = \frac {1}{K}\sum \limits_{i = 1}^{K}\boldsymbol {\mu}_{i}}. 類別間散佈矩陣是 \displaystyle {S_{B} = \sum \limits_{i = 1}^{K}N_{i}(\boldsymbol {\mu}_{i} - \boldsymbol {\mu})(\boldsymbol {\mu}_{i} - \boldsymbol {\mu})^{\mathrm {T}}}. 其中, N_{i} = \sum \limits_{\mathrm {t}}r_{i}^{\mathrm {t}}. 影射之後, 類別間散佈矩陣為 W^{\mathrm {T}}S_{B}W. 而影射後的類別內散佈矩陣為 W^{\mathrm {T}}S_{W}W. 這兩個都是 k \times k 矩陣. 我們希望第一個矩陣散佈大, 也就是說在影射之後的新的 k 維空間中, 類別的均值之間儘量遠離; 我們希望第二個矩陣散佈小, 也就是說在影射之後, 我們希望來自同一個類別的樣本儘量接近它們的均值. 對於一個散佈矩陣 (或者協方差矩陣), 散佈的度量是其行列式. 此時, 我們感興趣的是 \displaystyle {J(W) = \frac {\det {W^{T}S_{B}W}}{\det {W^{\mathrm {T}}S_{W}W}}}. 那麼, S_{W}^{-1}S_{B} 是最大特徵向量是解. S_{B} 是 K 個秩為 1 的矩陣 (\boldsymbol {\mu}_{i} - \boldsymbol {\mu})(\boldsymbol {\mu}_{i} - \boldsymbol {\mu})^{\mathrm {T}} 的和, 並且它們之中只有 K - 1 個是獨立的. 因此, R(S_{B}) = K - 1. 令 k = K - 1, 這樣我們就定義了一個新的較低維度的 k 維空間, 然後在這個維度中建構判別式. 雖然線性判別分析使用類別之間的距離 (分離性) 作為判別標準, 但是這個新的空間中可以使用任意的分類方法來評估判別式.
為了使用線性判別分析, 矩陣 S_{W} 應該是可逆的. 否則, 我們應該運用主成分分析使得其可逆, 然後使用線性判別分析. 不過, 我們要確保主成分分析不會將維度下降太多, 使得線性判別分析的使用毫無意義.
假如現在給定兩個具有一定相關性的學習資料, 例如有一些圖像以及圖像對應的註解, 我們希望同時針對兩者進行聯合學習, 而不僅僅是圖像或者註解. 這時候, 我們需要使用典型相關分析 (canonical correlation analysis). 若學習資料為 X = \left \{ \boldsymbol {x}^{\mathrm {t}}, \boldsymbol {y}^{\mathrm {t}} \right \}, 其中 \boldsymbol {x} 是 d 維空間中的, \boldsymbol {y} 是 e 維空間中的. 典型相關實際上是要找到 \boldsymbol {x} 和 \boldsymbol {y} 下相互相關最大的線性組合.
我們首先定義一些記號. 記 S_{xx} = \mathop {\mathrm {Cov}}(\boldsymbol {x}) = \mathop {\mathrm {E}} \left ( (\boldsymbol {x} - \boldsymbol {\mu}_{x})^{2} \right ) 是 \boldsymbol {x} 的 d \times d 協相關矩陣. 對應地, S_{yy} = \mathop {\mathrm {Cov}}(\boldsymbol {y}) = \mathop {\mathrm {E}} \left ( (\boldsymbol {y} - \boldsymbol {\mu}_{y})^{2} \right ) 是 \boldsymbol {y} 的 e \times e 協相關矩陣. 記 S_{xy} = \mathop {\mathrm {Cov}}(\boldsymbol {x}, \boldsymbol {y}) = \mathop {\mathrm {E}}\big ( (\boldsymbol {x} - \boldsymbol {\mu}_{x})(\boldsymbol {y} - \boldsymbol {\mu}_{y}) \big ) 是 d \times e 的交叉協相關矩陣. 對應地, S_{yx} = \mathop {\mathrm {Cov}}(\boldsymbol {y}, \boldsymbol {x}) = \mathop {\mathrm {E}}\big ( (\boldsymbol {y} - \boldsymbol {\mu}_{y})(\boldsymbol {x} - \boldsymbol {\mu}_{x}) \big ) 是 e \times d 的交叉協相關矩陣.
在典型相關分析中, 我們主要是對這樣的向量 \boldsymbol {w} 和 \boldsymbol {v} 感興趣 : 當將 \boldsymbol {x} 影射到 w 上時且 \boldsymbol {y} 影射到 \boldsymbol {v} 上時, 得到最大的相關性, 即我們要最大化 \displaystyle {\begin {aligned} \rho(\boldsymbol {x}, \boldsymbol {y}) &= \frac {\mathop {\mathrm {Cov}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}, \boldsymbol {v}^{\mathrm {T}}\boldsymbol {y})}{\sqrt {\mathop {\mathrm {Var}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x})} \sqrt {\mathop {\mathrm {Var}}(\boldsymbol {v}^{\mathrm {T}}\boldsymbol {y})}} \\ &= \frac {\boldsymbol {w}^{\mathrm {T}}\mathop {\mathrm {Cov}}(\boldsymbol {x}, \boldsymbol {y})\boldsymbol {v}}{\sqrt {\boldsymbol {w}^{\mathrm {T}}\mathop {\mathrm {Var}}(\boldsymbol {x})\boldsymbol {w}} \sqrt {\boldsymbol {v}^{\mathrm {T}}\mathop {\mathrm {Var}}(\boldsymbol {y})\boldsymbol {v}}} \\ &= \frac {\boldsymbol {w}^{\mathrm {T}}S_{xy}\boldsymbol {v}}{\sqrt {\boldsymbol {w}^{\mathrm {T}}S_{xx}\boldsymbol {w}} \sqrt {\boldsymbol {v}^{\mathrm {T}}S_{yy}\boldsymbol {v}}}. \end {aligned}} 由於我們希望是線性的, 亦即我們要在 \boldsymbol {w}^{\mathrm {T}}S_{xx}\boldsymbol {w} = 1 且 \boldsymbol {v}^{\mathrm {T}}S_{yy}\boldsymbol {v} 的條件下最大化 \boldsymbol {w}^{\mathrm {T}}S_{xy}\boldsymbol {v}. 這是一個多元函數在帶有約束的情況下求極值的問題, 我們運用 Lagrange 乘數法. 令 \frac {\partial \rho}{\partial \boldsymbol {w}} = 0 且 \frac {\partial {\rho}}{\partial {\boldsymbol {v}}} = 0, 我們看到 \boldsymbol {w} 實際上是矩陣 S_{xx}^{-1}S_{xy}S_{yy}^{-1}S_{yx} 的特徵向量, \boldsymbol {v} 是矩陣 S_{yy}^{-1}S_{yx}S_{xx}^{-1}S_{xy} 的特徵向量.
因為我們感興趣的是最大化相關性, 因此我們選擇兩個具有最大特徵值的特徵向量, 記它們為 \boldsymbol {w}_{1} 和 \boldsymbol {v}_{1}, 而相關性等於它們共用的特徵值 \lambda_{1}. 只要 AB 和 BA 是方陣, 那麼 AB 和 BA 的特徵值就相同, 只是特徵向量且特徵向量的維度不同罷了.
和主成分分析類似, 我們通過觀察 \frac {\lambda_{i}}{\sum \limits_{j}^{\min \{ d, e \}}\lambda_{j}} 來決定使用多少個特徵向量對 (\boldsymbol {w}_{i}, \boldsymbol {v}_{i}).
假定現在我們選取了 k 個維度, 我們將學習樣本進行影射便得到了典型變數 : \displaystyle {a_{i}^{\mathrm {t}} = \boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}}, b_{i}^{\mathrm {t}} = \boldsymbol {v}_{i}^{\mathrm {T}}\boldsymbol {y}^{\mathrm {t}}}. 其中, i = 1, 2, ..., k. 我們可以將上述兩式寫為矩陣的形式 \displaystyle {\boldsymbol {a}^{\mathrm {t}} = W^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {b}^{\mathrm {t}} = V^{\mathrm {T}}\boldsymbol {y}^{\mathrm {t}}}. 其中, W = (\boldsymbol {w}_{1}, \boldsymbol {w}_{2}, ..., \boldsymbol {w}_{k}), V = (\boldsymbol {v}_{1}, \boldsymbol {v}_{2}, ..., \boldsymbol {v}_{k}).
在多維標度中, 我們曾提到非線性影射. 實際上, 在許多應用中, 非線性影射更加普遍一些. 考慮人臉識別, 我們要求人臉緩慢轉動, 這樣就得到了一條人臉轉動的弧線, 這條弧線通常都是非線性的. 如果我們簡單地使用線性的方法, 例如歐式距離, 進行度量, 那麼結果很可能出錯. 例如兩個相同姿勢的不同人臉的歐式距離可能會比同一個人不同姿勢的人臉的歐式距離更小, 我們應該計算的是因人臉轉動而產生的流刑的距離, 這個距離我們稱為測地距離 (geodesic distance). 等距特徵影射 (isomap) 使用所有數據點對之間的測地距離. 對於輸入空間中靠近的鄰近點, 可以使用歐式距離. 對於姿勢中的較小的改變, 可以視為局部線性的. 對於遠離的點, 測地距離用沿著流形的點之間的距離的和來近似. 具體作法如下 : 定義一個圖, 其節點對應於 n 個數據點, 其邊連接鄰近的點 (距離小於某個 \varepsilon 的點, 或者 m 個最近鄰之一), 邊的權重等同於歐式距離. 任意兩個點之間的測地距離用對應的兩個點之間的最短路徑長度計算. 對於兩個不鄰近的點對, 需要沿著通路跳過許多中間點, 因而該距離是沿著流形的距離, 用局部歐式距離的和來近似.
在確保圖連通性的情況下, 兩個節點 r 和 s 是連接的若且唯若 \left \| \boldsymbol {x}^{\mathrm {r}} - \boldsymbol {x}^{\mathrm {s}} \right \| < \varepsilon, 或者確保距離矩陣對稱的情況下, \boldsymbol {x}^{\mathrm {s}} 是 \boldsymbol {x}^{\mathrm {r}} 的 m 個最近鄰之一, 並且設定邊的權重為 \left \| \boldsymbol {x}^{\mathrm {r}} - \boldsymbol {x}^{\mathrm {s}} \right \|. 另外, d_{rs} 是它們之間的最短路徑長度. 然後, 在 d_{rs} 上應用多維標度, 通過觀察它們所貢獻的方差比例, 把維度降低到 k 維. 這將會產生這樣的效果 : 把測地距離遠離的 r 和 s 也放在新的 k 維空間遠離的位置上, 即使在原始 d 維空間中它們的歐式距離比較靠近也是如此.
從定積分的定義, 我們不難得出, 隨著圖中頂點的增加, 這樣的方法提供了更好的近似, 儘管可能需要大量的時間計算. 但是如果留給我們計算的時間並不多, 那麼可以使用二次抽樣, 並且使用類似於地標的頂點子集, 使得演算法更快. 另外, 參數 \varepsilon 必然也會影響計算時間. 如果它太小, 那麼可能存在多個連通分支; 如果它太大, 那麼可能添加破壞低維度嵌入的捷徑邊.
上面等距特徵影射提供了一種近似的思想, 結合定積分的定義, 我們可以從局域的線性發現全域的非線性結構. 其基本思想是流形的每一個局部小段都可以對其進行線性的近似, 並且如果給定足夠多的學習資料, 每個點都可以表示成其近鄰的線性加權. 我們稱這種方法為局部線性嵌入 (locally linear embedding).
給定原始空間中的 \boldsymbol {x}^{\mathrm {t}} 和它的近鄰 \boldsymbol {x}_{(r)}^{\mathrm {t}}, 可以使用最小二乘法找到重構權重 W_{rs}, 它的最小化誤差函數為 \displaystyle {\mathop {\mathrm {E}}^{W}(W|X) = \sum \limits_{r} \left \| \boldsymbol {x}^{r} - \sum \limits_{r}W_{rs}\boldsymbol {x}_{(r)}^{r} \right \|^{2}}. 約束條件是對於任意的 r, W_{rr} = 0 且 \sum \limits_{s}W_{rs} = 1.
重構權重 W_{rs} 反應了數據的固有幾何性質, 我們期望這種性質對於流形, 即樣本影射到新空間的局部小段同樣有效. 因此, 局部線性嵌入的第二部應該是保持權重 W_{rs} 固定, 並且令新座標 \boldsymbol {z}^{\mathrm {r}} 關於由權重給定內部點約束取所需的值 : \displaystyle {\mathop {\mathrm {E}}^{Z}(Z|X) = \sum \limits_{\mathrm {r}} \left \| \boldsymbol {z}^{\mathrm {r}} - \sum \limits_{\mathrm {r}}W_{rs}\boldsymbol {z}_{(r)}^{\mathrm {s}} \right \|^{2}}. 原始 d 維空間中位於附近的點在新的 k 維空間中應該也保持鄰近, 並且類似地在新的 k 維空間中協同定位. 那麼, \mathop {\mathrm {E}}(X|W) 可以改寫為 \displaystyle {\mathop {\mathrm {E}}(Z|W) = \sum \limits_{r, s}M_{rs}(\boldsymbol {z}^{r})^{\mathrm {T}}\boldsymbol {z}^{s}}. 其中, M_{rs} = \delta_{rs} - W_{rs} - W_{sr} + \sum \limits_{i}W_{ir}W_{is}, 且 M 是稀疏矩陣, 對稱矩陣和半正定矩陣. 我們要求數據在原點中心化, 即 \mathop {\mathrm {E}}(\boldsymbol {z}) = 0, 並且新座標是不相關的且具有單位長度 \mathop {\mathrm {Cov}}(\boldsymbol {z}) = \mathrm {E}, \mathrm {E} 為單位矩陣. 在這兩個條件的約束下, \mathop {\mathrm {E}}(Z|W) 的解由具有最小特徵值的 k + 1 個特徵向量給出. 忽略最小的特徵值, 其餘的 k 個特徵向量組成新的座標.
因為 n 個近鄰可以生成一個 n - 1 維度空間, 因此局部線性嵌入可以把維度化約到 k \leq n - 1. 根據觀察, 當 k 與 n 之間的某個範圍足以得到一個好的嵌入. 但是如果 n 或者 \varepsilon 很小, 那麼每個學習樣本與它的近鄰連結構建的圖可能不再連通, 並且可能要在各個子圖上進行局部線性嵌入, 找出輸入空間中不同部分的流行. 另一方面, 如果 n 或者 \varepsilon 取值太大, 那麼某些近鄰可能太遠, 局部線性並不成立.
和等距特徵影射類似, 局部線性嵌入不學習影射, 直接得到新維度空間下的座標, 因而不能為新的學習樣本找到座標. 對此, 有兩種解決方案 :
- 使用相同的思想, 可以在原始 d 維空間中找到新學習樣本 \boldsymbol {x}' 的 n 個近鄰, 並且首先學習最小化 \mathop {\mathrm {E}}^{W}(\boldsymbol {w}|X) = \left \| \boldsymbol {x}' - \sum \limits_{s}\boldsymbol {w}_{s}\boldsymbol {x}^{s} \right \| ^{2} 的重構權重 \boldsymbol {w}_{j}, 然後使用它們在新的 k 維空間中的重構 \boldsymbol {z}' = \sum \limits_{s}\boldsymbol {w}_{s}\boldsymbol {z}^{s};
- 使用 X = \left \{ \boldsymbol {x}^{\mathrm {t}}, \boldsymbol {z}^{\mathrm {t}} \right \} 作為學習樣本, 可以訓練任意的模型 g(\boldsymbol {x}^{\mathrm {t}}|\theta) 作為從 \boldsymbol {x}^{\mathrm {t}} 近似 \boldsymbol {z}^{\mathrm {t}} 的一個判定器, 其參數 \theta 通過學習得到用於最小化回歸誤差 : \mathop {\mathrm {E}}(\theta|X) = \sum \limits_{\mathrm {t}} \left \| \boldsymbol {z}^{\mathrm {t}} - g(\boldsymbol {x}^{\mathrm {t}}|\theta) \right \|^{2}. 一旦訓練完成就可以使用 \boldsymbol {z}' = g(\boldsymbol {x}'|\theta). 不過模型應該小心選擇.
在等距特徵影射和局部線性嵌入中, 存在在近鄰上傳播的局部信息, 以便得到全局解. 在等距特徵影射中, 測地距離是局部距離的和; 在局部線性嵌入中, 最終的 \boldsymbol {z}^{\mathrm {t}} 的最佳解考慮了所有局部的 W_{rs} 值. 假設 a 和 b 是近鄰, b 和 c 是近鄰. 儘管 a 和 c 不一定是近鄰, 但是 a 和 c 之間的依賴性通過路徑 d_{ac} = d_{ab} + d_{bc} 或者通過權重 W_{ab} 和 W_{bc} 而存在. 在這兩個演算法中, 全局非線性組織通過整合部分重疊的局部線性約束而發現.
在多維標度中, 我們考慮了只給定了距離的學習資料的情況, 現在我們要考慮如果只給定了學習樣本之間的相似度 B_{\mathrm {rs}} 的情況. 對於樣本 \boldsymbol {x}^{\mathrm {r}} 和 \boldsymbol {x}^{\mathrm {s}}, 如果 r = s, 則 B_{\mathrm {rs}} 取得最大值, B_{\mathrm {rs}} 的值隨著 \boldsymbol {x}^{\mathrm {r}} 和 \boldsymbol {x}^{\mathrm {s}} 變得不相同而減少. 現在假設 B_{\mathrm {rs}} 的最小值為 0, 並且是對稱的, 即 B_{\mathrm {rs}} = B_{\mathrm {sr}}. 現在, 我們的目標是找到 \displaystyle {\min \sum \limits_{\mathrm {r}, \mathrm {s}} \left \| \boldsymbol {z}^{\mathrm {r}} - \boldsymbol {z}^{\mathrm {s}} \right \|^{2}B_{\mathrm {rs}}}. 其中, \boldsymbol {z}^{\mathrm {r}} 和 \boldsymbol {z}^{\mathrm {s}} 是 \boldsymbol {x}^{\mathrm {r}} 和 \boldsymbol {x}^{\mathrm {s}} 在新維度空間上的影射. 上式反應了兩個接近的學習樣本, 在新的維度空間上應該被放置在鄰近的地方; 反之, 它們越不相同, 我們就越不關心它們在新的維度空間中的相對位置. 而 B_{\mathrm {rs}} 在原始空間中計算得到, 例如使用向量點積 : \displaystyle {B_{\mathrm {rs}} = (\boldsymbol {x}^{\mathrm {r}})^{\mathrm {T}}\boldsymbol {x}^{\mathrm {s}}}.
上面所講述的影射, 我們稱之為 Laplace 特徵影射 (Laplace feature mapping). 在 Laplace 徵影射中, 我們同樣只關注局部的相似性. 我們可能通過 \boldsymbol {x}^{\mathrm {r}} 和 \boldsymbol {x}^{\mathrm {s}} 之間的某個最大 \varepsilon 距離或者可能通過 k 個最近鄰的點來定義鄰域. 在這個鄰域之外, 我們設定 B_{\mathrm {rs}} = 0. 在鄰域之內, 對於用戶指定的某個 \sigma, 有 \displaystyle {B_{\mathrm {rs}} = \exp \left \{ \frac {\left \| \boldsymbol {x}^{\mathrm {r}} - \boldsymbol {x}^{\mathrm {s}} \right \|^{2}}{2\sigma^{2}} \right \}}. 使用圖這樣的資料結構, 我們可知, 鄰接矩陣 B 實際上定義了一個加權圖.
對於 k = 1, 可以將 \min \sum \limits_{\mathrm {r}, \mathrm {s}} \| \boldsymbol {z}^{\mathrm {r}} - \boldsymbol {z}^{\mathrm {s}} \|^{2}B_{\mathrm {rs}} 寫為 \displaystyle {\begin {aligned} \min \frac {1}{2} \sum \limits_{\mathrm {r}, \mathrm {s}}(z_{\mathrm {r}} - z_{\mathrm {s}})^{2}B_{\mathrm {rs}} &= \frac {1}{2}\left ( \sum \limits_{\mathrm {r}, \mathrm {s}}B_{\mathrm {rs}}z_{\mathrm {r}}^{2} - 2\sum \limits_{\mathrm {r}, \mathrm {s}}B_{\mathrm {r}, \mathrm {s}}B_{\mathrm {rs}}z_{\mathrm {r}}z_{\mathrm {s}} + \sum \limits_{\mathrm {r}, \mathrm {s}}B_{\mathrm {rs}}z_{\mathrm {s}}^{2} \right ) \\ &= \frac {1}{2}\left ( \sum \limits_{\mathrm {r}}d_{\mathrm {r}}z_{\mathrm {r}}^{2} - 2\sum \limits_{\mathrm {r}, \mathrm {s}}B_{\mathrm {rs}}z_{\mathrm {r}}z_{\mathrm {s}} + \sum \limits_{\mathrm {s}}d_{\mathrm {s}}z_{\mathrm {s}}^{2} \right ) \\ &= \sum \limits_{\mathrm {r}}d_{\mathrm {r}}z_{\mathrm {r}}^{2} - \sum \limits_{\mathrm {r}}\sum \limits_{\mathrm {s}}B_{\mathrm {rs}}z_{\mathrm {r}}z_{\mathrm {s}} \\ &= \boldsymbol {z}^{\mathrm {T}}D\boldsymbol {z} - \boldsymbol {z}^{\mathrm {T}}B\boldsymbol {z}. \end {aligned}} 其中, d_{\mathrm {r}} = \sum \limits_{s}B_{\mathrm {rs}}, D 是 d_{\mathrm {r}} 的對角矩陣, \boldsymbol {z} 是影射之後的新座標. 若我們記 L = D - B, 則有 \displaystyle {\min \frac {1}{2} \sum \limits_{\mathrm {r}, \mathrm {s}}(z_{\mathrm {r}} - z_{\mathrm {s}})^{2}B_{\mathrm {rs}} = \boldsymbol {z}^{\mathrm {T}}L\boldsymbol {z}}. 我們的目標就是最小化 \boldsymbol {z}^{\mathrm {T}}L\boldsymbol {z}. 為了得到唯一的解, 我們限定 \| \boldsymbol {z} \| = 1. 那麼, \boldsymbol {z} 是矩陣 L 的特徵向量. 由於我們想要最小化, 因此我們應該選擇具有最小特徵值對應的特徵向量. 然而, 至少存在一個特徵值為 0 的特徵向量, 應該忽略它. 該特徵向量的所有元素都想等, 即 \boldsymbol {c} = \frac {1}{\sqrt {n}}\mathop {\mathrm {E}}^{\mathrm {T}}. 對應的特徵值為 0, 因為 L\boldsymbol {c} = D\boldsymbol {c} - B\boldsymbol {c} = 0.
若 D 的行和在其對角線上, 而 B 的行與 \boldsymbol {1} 的點積也取加權和, 在這種情況下, 為了使得 \boldsymbol {z}^{\mathrm {T}}L\boldsymbol {z} = 0, 由於 B_{ij} > 0, 所以對於所有的 i 和 j, z_{i} 和 z_{j} 應該相等, 都為 \frac {1}{\sqrt {n}}. 因此, 我們應該跳過特徵值為 0 對應的特徵向量, 並且如果我們想要把維度化約到 k > 1, 則需要取下一個 k.
7. 聚類分析
假如現在有一幅 24 位元的圖像, 其可能具有一千六百多萬種顏色, 但是只有 8 位元的彩色螢幕, 如何使得螢幕上的圖像看起來儘量接近原始圖像. 因為影射之後, 對於藍色的海洋, 我們希望看到漸變的藍色, 而不是紅色.
假定現在有樣本 X = \left \{ \boldsymbol {x}^{\mathrm {t}} \right \}, 有 k 個參考向量 \boldsymbol {m}_{j} (j = 1, 2, …, k). 在顏色影射的實例中, \boldsymbol {x}^{\mathrm {t}} 是 24 位元的圖像像素值, \boldsymbol {m}_{j} 是顏色影射表, 也是 24 位元的. 此時, k = 256. 假定我們通過某種方法得到了 \boldsymbol {m}_{j} 的值, 我們希望有 \displaystyle {\left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{i} \right \| = \min_{j} \left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{j} \right \|}. 對於 m_{i}, 要找到它, 實際上是一個函數求最值的過程. 我們定義總重構誤差為 \displaystyle {\mathop {\mathrm {E}} \left ( \left \{ \boldsymbol {m}_{i} \right \}_{i = 1}^{k}|X \right ) = \sum \limits_{\mathrm {t}}\sum \limits_{i}b_{i}^{\mathrm {t}} \left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{u} \right \|^{2}}. 其中, \displaystyle {b_{i}^{\mathrm {t}} = \begin {cases} 1 & {\left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{i} \right \| = \min \limits_{j} \left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{j} \right \|} \\ 0 & {\text {else}}. \end {cases}} 最好的參考向量是最小化總重構誤差的參考向量. b_{i}^{\mathrm {t}} 也依賴於 \boldsymbol {m}_{i}, 並且我們不能解析地取求解這個優化問題. 對此, 我們有一個 k 均值聚類 (k-means clustering) 的演算法.
首先, 我們對 \boldsymbol {m}_{i} 隨機取一些值, 然後在每一次迴圈的過程中, 對每個 \boldsymbol {x}^{\mathrm {t}} 計算 b_{i}^{\mathrm {t}}. 然後令 \frac {\partial {\mathop {\mathrm {E}}}}{\partial {\boldsymbol {m}_{i}}} = 0, 得到 \displaystyle {\boldsymbol {m}_{i} = \frac {\sum \limits_{\mathrm {t}}b_{i}^{\mathrm {t}}\boldsymbol {x}^{\mathrm {t}}}{\sum \limits_{t}b_{i}^{\mathrm {t}}}}. 在這個過程中, 一旦我們計算了新的 \boldsymbol {m}_{i}, 那麼 b_{i}^{\mathrm {t}} 就需要重新計算, 這反過來又會影響 \boldsymbol {m}_{i}. 不斷重複, 直到 \boldsymbol {m}_{i} 穩定之後, 我們停止演算法. 但這有一個缺點, 這是一個啟發式的演算法, 它只在局部進行搜尋, 並且最終的 \boldsymbol {m}_{i} 高度依賴其隨機的初始值. 因此, 對於 \boldsymbol {m}_{i} 的初始化, 還有一些其它的方式 :
- 計算所有學習樣本的均值, 並且將一些小隨機向量加到均值上, 得到 k 個初始化的 \boldsymbol {m}_{i};
- 進行主成分分析, 將它的值域劃分為 k 個相等的區間, 將學習樣本劃分為 k 個組, 然後取這些分組的均值作為初始中心.
這樣, 我們就大致將學習樣本分為了 k 個聚類.
還有一些演算法動態地添加新的中心或者刪除空的中心. 一個遠離已有中心的樣本將會導致在該點創建一個新的中心; 或者一個涵蓋了大量樣本的中心可以分裂為兩個. 類似地, 涵蓋太少學習樣本的中心可以進行刪除.
上面, 我們通過顏色影射的實例, 大致地告訴大家聚類分析所做的事情. 為了引出更多的演算法, 我們首先需要定義混合密度 : \displaystyle {p(\boldsymbol {x}) = \sum \limits_{i = 1}^{k}p(\boldsymbol {x}|G_{i})\mathop {\mathbf {P}}(G_{i})}. 其中, G_{i} 是聚類中的某一個區域, 我們稱為混合分支 (hybrid branch) 或者混合分組 (hybrid group); p(\boldsymbol {x}|G_{i}) 是分支密度 (branch density), 描述了一個分支中樣本的數量, 而 \mathop {\mathbf {P}}(G_{i}) 是混合比例 (hybrid proportion). 在參數分類中, G_{i} 對應於 C_{i}, p(\boldsymbol {x}|G_{i}) 對應於 p(\boldsymbol {x}|C_{i}), 而 \mathop {\mathbf {P}}(G_{i}) 對應於事前機率 \mathop {\mathbf {P}}(C_{i}).
在監督學習下, 我們有 X = \left \{ \boldsymbol {x}^{\mathrm {t}}, \boldsymbol {r}^{\mathrm {t}} \right \}, 我們要學習的是參數和模型, 我們知道樣本屬於哪一個分支. 但是在聚類分析中, 我們並不知道 \boldsymbol {r}^{\mathrm {t}}. 也就是說, 在聚類分析中, 我們總的任務分為兩個 :
- 推測學習樣本大致屬於哪一個類別
- 學習不同類別所屬分支中的參數
在 k 均值聚類演算法中, 我們把聚類看作尋找最小化總重構誤差的問題, 我們同樣可以運用機率論的知識尋找最大化樣本概似的分支密度參數. 通過混合密度的定義, 樣本 X = \{ \boldsymbol {x}^{\mathrm {t}} 的對數概似為 \displaystyle {\ell(\Phi|X) = \log {\prod \limits_{\mathrm {t}}p(\boldsymbol {x}^{\mathrm {t}}|\Phi)} = \sum \limits_{\mathrm {t}}\log {\sum \limits_{i = 1}^{k}p(\boldsymbol {x}^{\mathrm {t}}|G_{i})\mathop {\mathbf {P}}(G_{i})}}. 其中, \Phi 包含了 \mathop {\mathbf {P}}(G_{i}) 和 p(\boldsymbol {x}^{\mathrm {t}}|G_{i}) 的有效統計量. 我們同樣不能解析地去求解參數, 同樣要借助迭代優化.
此處, 我作一個補充. 實際上 k 均值聚類演算法非常簡單 : 就是通過隨機選擇 k 個點作為中心. 然後將樣本關聯到這些點上, 對任意一個中心點計算它們和樣本之間的距離, 取所有距離的平均值. 根據平均值, 對中心進行移動. 一直重複上述步驟, 直到所有的中心所關聯的樣本都幾乎不變為止.
最大期望演算法 (maximum expected algorithm) 用於極大概似估計, 其中問題涉及了兩組隨機變數, 其中一組 X 是可觀測的, 而 Z 是不可觀測的. 舉個例子, 一個班級裡有男生和女生, 它們的身高分別服從於某一參數不同的分佈. 現在, 如果明確知道一個人是男生還是女生, 分別去計算這個分佈的參數, 這是比較容易的. 但是如果這些男生女生的身高混在一起, 我們並不知道這些身高數據來自哪一個性別, 那麼估計參數有困難. 演算法的目標是找到參數向量 \Phi, 它最大化 X 的觀測值的概似 \ell(\Phi|X). 但是, 在不可行的時候, 我們關聯附加的隱藏變數 Z, 並且使用二者表示基礎模型, 最大化 X 和 Z 聯合分佈的概似, 即 \ell_{C}(\Phi|X, Z). 由於 Z 是不可觀測的, 因此我們不能直接計算 \ell_{C}, 而是給定 X 和當前參數值 \Phi^{l}, 來求它的期望 Q. 其中, l 是迭代次數. 這是演算法的期望步驟. 然後, 在最大化步驟中, 我們尋找新的參數值 \Phi^{l + 1}, 它最大化期望. 即期望步驟為 \displaystyle {Q(\Phi|\Phi^{l}) = \mathop {\mathrm {E}} \big ( \ell_{C}(\Phi|X, Z)|X, \Phi^{l} \big )}; 最大化步驟為 \displaystyle {\Phi^{l + 1} = \argmax \limits_{\Phi}Q(\Phi|\Phi^{l})}.
期望步驟我們簡稱為 E 步 (E-step), 最大化步驟我們簡稱為 M 步 (M-step). 為了給出 E 步和 M 步的具體過程, 我們定義一個指示變數向量 \boldsymbol {z}^{\mathrm {t}} = \left \{ z_{1}^{\mathrm {t}}, z_{2}^{\mathrm {t}}, ..., z_{k}^{\mathrm {t}} \right \}. 其中, 若有 \boldsymbol {x}^{\mathrm {t}} \in G_{i}, 則 z_{i}^{\mathrm {t}} = 1; 否則, z_{i}^{\mathrm {t}} = 0. 顯然, \boldsymbol {z} 是多項分佈, 以事前機率 \pi_{i} 取自 k 個類別, 於是有 \displaystyle {\mathop {\mathbf {P}}(\boldsymbol {z}^{\mathrm {t}}) = \prod \limits_{i = 1}^{k}\pi_{i}^{z_{i}^{\mathrm {t}}}}. 在機率論中, 樣本 \boldsymbol {x}^{\mathrm {t}} 的概似就是其事件的機率, 因此有 \displaystyle {p(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {z}^{\mathrm {t}}) = \prod \limits_{i = 1}^{k}p_{i}(\boldsymbol {x}^{\mathrm {t}})^{z_{i}^{t}}}. 其中, p_{i}(\boldsymbol {x}^{\mathrm {t}}) = p(\boldsymbol {x}^{\mathrm {t}}|G_{i}). 聯合分佈為 \displaystyle {p(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {z}^{\mathrm {t}}) = \mathop {\mathbf {P}}(\boldsymbol {z}^{\mathrm {t}})p(\boldsymbol {x}^{\mathrm {t}}|\boldsymbol {z}^{\mathrm {t}})}. 綜上, 我們可得 \displaystyle {\begin {aligned} \ell_{C}(\Psi|X, Z) &= \log {\prod \limits_{t}p(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {z}^{\mathrm {t}}|\Psi)} = \sum \limits_{t}\log {p(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {z}^{\mathrm {t}}|\Psi)} \\ &= \sum \limits_{t} \log {p(\boldsymbol {z}^{\mathrm {t}}|\Psi) + \log {p(\boldsymbol {x}^{\mathrm {t}}|\boldsymbol {z}^{\mathrm {t}}, \Psi)}} \\ &= \sum \limits_{t}\sum \limits_{i}\boldsymbol {z}_{i}^{\mathrm {t}}(\log {\pi_{i}} + \log {p_{i}(\boldsymbol {x}^{\mathrm {t}}|\Psi)}). \end {aligned}}
現在, 我們定義 E 步中得到期望的方法 : Q(\Psi|\Psi^{l}) = \mathop {\mathrm {E}} \left ( \log {\mathop {\mathbf {P}}(X, Z)}|X, \Psi^{l} \right ) = \mathop {\mathrm {E}} \left ( \ell_{C}(\Psi|X, Z)|X, \Psi^{l} \right ) = \sum \limits_{t}\sum \limits_{i}\mathop {\mathrm {E}}(z_{i}^{\mathrm {t}}|X, \Psi^{l}) \left ( \log {\pi_{i}} + \log {p_{i}(\boldsymbol {x}^{\mathrm {t}}|\Psi^{l})} \right ). 其中, \displaystyle {\begin {aligned} \mathop {\mathrm {E}}(z_{i}^{\mathrm {t}}|X, \Psi^{l}) &= \mathop {\mathrm {E}}(z_{i}^{\mathrm {t}}|\boldsymbol {x}^{\mathrm {t}}, \Psi^{l}) \\ &= \mathop {\mathbf {P}}(z_{i}^{\mathrm {t}} = 1|\boldsymbol {x}^{\mathrm {t}}, \Psi^{l}) \\ &= \frac {p(\boldsymbol {x}^{\mathrm {t}}|z_{i}^{\mathrm {t}} = 1, \Psi^{l})\mathop {\mathbf {P}}(z_{i}^{\mathrm {t}} = 1|\Psi^{l})}{p(\boldsymbol {x}^{\mathrm {t}}|\Psi^{l})} \\ &= \frac {p_{i}(\boldsymbol {x}^{\mathrm {t}}|\Psi^{l})\pi_{i}}{\sum \limits_{j}p_{j}(\boldsymbol {x}^{\mathrm {t}}|\Psi^{l})\pi_{j}} \\ &= \frac {p(\boldsymbol {x}^{\mathrm {t}}|G_{i}, \Psi^{l})\mathop {\mathbf {P}}(G_{i})}{\sum \limits_{j}p(\boldsymbol {x}^{\mathrm {t}}|G_{j}, \Psi^{l})\mathop {\mathbf {P}}(G_{j})} \\ &= \mathop {\mathbf {P}}(G_{j}|\boldsymbol {x}^{\mathrm {t}}, \Psi^{l}) = h_{i}^{\mathrm {t}}. \end {aligned}}
通過上面的推導, 我們看到隱藏變數的期望值實際上就是一個事後機率. 接下來, 我們定義 M 步中最大化期望的方法 : \Psi^{l + 1} = \argmax \limits_{\Psi}Q(\Psi|\Psi^{l}). 其中, \displaystyle {\begin {aligned} Q(\Psi|\Psi^{l}) &= \sum \limits_{\mathrm {t}}\sum \limits_{i}h_{i}^{\mathrm {t}} \left ( \log {\pi_{i}} + \log {p_{i}(\boldsymbol {x}^{\mathrm {t}}|\Psi^{l})} \right ) \\ &= \sum \limits_{\mathrm {t}}\sum \limits_{i}h_{i}^{\mathrm {t}}\log {\pi_{i}} + \sum \limits_{\mathrm {t}}\sum \limits_{i}h_{i}^{\mathrm {t}}\log {p_{i}(\boldsymbol {x}^{\mathrm {t}}|\Psi^{l})}. \end {aligned}} 第二項獨立於 \pi_{i}, 而 \sum \limits_{i}\pi_{i} = 1, 使用 Lagrange 乘數法, 令 \nabla_{\pi_{i}}\sum \limits_{\mathrm {t}}\sum \limits_{i}h_{i}^{\mathrm {t}}\log {\pi_{i}} - \lambda \left ( \sum \limits_{i}\pi_{i} - 1 \right ) = 0 可得 \displaystyle {\pi_{i} = \frac {\sum \limits_{t}h_{i}^{\mathrm {t}}}{\mathop {\mathrm {card}}{X}}}. 類似地, 第一項獨立於 \Psi, 令 \nabla_{\Psi}\sum \limits_{\mathrm {t}} \sum \limits_{i}h_{i}^{\mathrm {t}}\log {p_{i}(\boldsymbol {x}^{\mathrm {t}}|\Psi)} = 0. 若假定 \mathop {\mathbf {P}}_{i}(\boldsymbol {x}^{\mathrm {t}}|\Psi) 服從於期望為 \hat {\boldsymbol {\mu}_{i}} 和方差為 \hat {\Sigma_{i}} 的多元常態分佈, 那麼 \displaystyle {\hat {\boldsymbol {\mu}_{i}^{l + 1}} = \frac {\sum \limits_{\mathrm {t}}h_{i}^{\mathrm {t}}\boldsymbol {x}^{\mathrm {t}}}{\sum \limits_{\mathrm {t}}h_{i}^{\mathrm {t}}}}, \displaystyle {\hat {\Sigma_{i}^{l + 1}} = \frac {\sum \limits_{\mathrm {t}}h_{i}^{\mathrm {t}} \left ( \boldsymbol {x}^{\mathrm {t}} - \hat {\boldsymbol {\mu}_{i}^{l + 1}} \right ) \left ( \boldsymbol {x}^{\mathrm {t}} - \hat {\boldsymbol {\mu}_{i}^{l + 1}} \right )^{\mathrm {T}}}{\sum \limits_{\mathrm {t}}h_{i}^{\mathrm {t}}}}. 結合上面兩式, 有 \displaystyle {h_{i}^{\mathrm {t}} = \frac {\pi_{i}(\det {\hat {\Sigma_{i}}})^{-\frac {1}{2}}\exp \left \{-\frac {1}{2}(\boldsymbol {x}^{\mathrm {t}} - \hat {\boldsymbol {\mu}_{i}})^{\mathrm {T}}\hat {\Sigma_{i}^{-1}} (\boldsymbol {x}^{\mathrm {t}} - \hat {\boldsymbol {\mu}_{i}}) \right \}}{\sum \limits_{j}\pi_{j}(\det {\hat {\Sigma_{j}}})^{-\frac {1}{2}}\exp \left \{-\frac {1}{2}(\boldsymbol {x}^{\mathrm {t}} - \hat {\boldsymbol {\mu}_{j}})^{\mathrm {T}}\hat {\Sigma_{j}^{-1}} (\boldsymbol {x}^{\mathrm {t}} - \hat {\boldsymbol {\mu}_{j}}) \right \}}}.
最大期望演算法同樣使用 k 均值進行初始化, 在多次迭代之後, 得到中心 \hat {\boldsymbol {\mu}_{i}} 的估計.
上面的計算過於複雜, 若使用小樣本和高維度, 那麼我們可以通過簡化假設來正則化, 在共享協方差矩陣的情況下, \nabla_{\Psi}\sum \limits_{\mathrm {t}} \sum \limits_{i}h_{i}^{\mathrm {t}}\log {p_{i}(\boldsymbol {x}^{\mathrm {t}}|\Psi)} = 0 可以簡化為 \displaystyle {\min \limits_{\hat {\boldsymbol {\mu}_{i}}, \hat {\Sigma}}\sum \limits_{\mathrm {t}}\sum \limits_{i}h_{i}^{\mathrm {t}}(\boldsymbol {x}^{\mathrm {t}} - \hat {\boldsymbol {\mu}_{i}})^{\mathrm {T}}\hat {\Sigma_{i}^{-1}} (\boldsymbol {x}^{\mathrm {t}} - \hat {\boldsymbol {\mu}_{i}})}. 當 \mathop {\mathbf {P}}_{i}(\boldsymbol {x}^{\mathrm {t}}|\Psi) 服從於期望為 \hat {\boldsymbol {\mu}_{i}} 和方差為 \hat {\sigma}^{2}E 的多元常態分佈, 在共享對角矩陣的情況下, 有 \displaystyle {\min \limits_{\hat {\boldsymbol {\mu}_{i}}, \hat {\Sigma}}\sum \limits_{\mathrm {t}}\sum \limits_{i}h_{i}^{\mathrm {t}}\frac {\left \| \boldsymbol {x}^{\mathrm {t}} - \hat {\boldsymbol {\mu}_{i}} \right \|^{2}}{\hat {\sigma}^{2}}}.
我想很多人應該看不懂上面的推導, 現在我來簡化地敘述一下. 我們用一個實例. 對於兩個不均勻的硬幣進行投擲, 給定我們這樣一組樣本 : \displaystyle {\begin {cases} R_{1} = \left \{ \mathrm {H}, \mathrm {H}, \mathrm {H}, \mathrm {H}, \mathrm {H}, \mathrm {H}, \mathrm {H}, \mathrm {T}, \mathrm {T}, \mathrm {T} \right \} \\ R_{2} = \left \{ \mathrm {T}, \mathrm {H}, \mathrm {T}, \mathrm {H}, \mathrm {H}, \mathrm {T}, \mathrm {H}, \mathrm {T}, \mathrm {T}, \mathrm {T} \right \} \\ R_{3} = \left \{ \mathrm {T}, \mathrm {H}, \mathrm {H}, \mathrm {H}, \mathrm {H}, \mathrm {H}, \mathrm {H}, \mathrm {T}, \mathrm {H}, \mathrm {T} \right \} \\ R_{4} = \left \{ \mathrm {T}, \mathrm {H}, \mathrm {H}, \mathrm {H}, \mathrm {T}, \mathrm {H}, \mathrm {T}, \mathrm {T}, \mathrm {T}, \mathrm {T} \right \}. \end {cases}} 若第一枚硬幣比較均勻, 第二枚硬幣投擲結果為正面的機率很大. 我們很容易判定 R_{1} 幾乎就是投擲第二枚硬幣的結果, R_{2} 幾乎就是投擲第一枚硬幣的結果, R_{3} 幾乎就是投擲第二枚硬幣的結果, R_{4} 幾乎就是投擲第一枚硬幣的結果. 因此, 在聚類分析中, 我們希望把 R_{1} 和 R_{3} 分為一組; 將 R_{2} 和 R_{4} 分為一組. 那麼怎麼用最大期望演算法來分組呢?
我們假設投擲第一枚硬幣得到正面的機率是 \frac {1}{2}, 投擲第二枚硬幣得到正面的機率為 \frac {2}{5}. 針對 R_{1}, 共有七次正面三次反面, 那麼我們計算投擲第一枚硬幣正面的概似 \hat {\theta_{1}^{\mathrm {H}}} = \frac {1}{2^{7}}, 反面的概似為 \hat {\theta_{1}^{\mathrm {T}}} = \frac {1}{2^{3}}; 投擲第二個硬幣正面的概似 \hat {\theta_{2}^{\mathrm {H}}} = \left ( \frac {4}{5} \right )^{7}, 反面的概似 \hat {\theta_{2}^{\mathrm {T}}} = \left ( \frac {3}{5} \right )^{3}. 分別計算 R_{i} (i = 1, 2, 3, 4) 正反面的概似, 這就是 E 步所做的內容. 接下來就是 M 步要做的內容, 將四次正面的概似加起來, 四次反面的概似加起來作為分母, 正面的概似作為分子, 得到新的正面的機率和反面的機率.
然後再用新的機率重新計算概似, 如此迭代, 直到結果收斂.
聚類也可以用於維度化約, 它將原始樣本從 d 維空間影射到 h_{i} 維空間中. 除此之外, 聚類最大的作用就是為了理解樣本的總體結構, 讓之後的學習更加容易. 由於聚類分析是非監督學習, 所以並不需要我們主動去提供標註, 這樣使得後面的學習又容易了一些.
有時候, 在聚類分析開始之前, 先進行維度化約可能使得聚類的效果更好, 這便是頻譜聚類的思想 :
- 在原始維度空間中, 定義局部鄰域. 然後對相同鄰域中的樣本定義和樣本之間的距離成反比的相似性度量, 不在同一個鄰域的樣本將其相似度設定為 0 即可;
- 使用拉普拉斯特徵影射, 並使用特徵嵌入將樣本影射到新的維度空間中;
- 在新的維度空間中針對影射後的樣本進行聚類分析.
聚類分析還有一種方法, 和拉普拉斯特徵影射類似, 它使用樣本之間的相似性, 對其它部分沒有要求. 這樣的聚類分析目標是找到分組使得同一個分組中的樣本比在不同分組中的樣本更加類似. 這種聚類分析方法我們稱為階層分群法. 由於這裡使用了相似性度量, 因此通常使用樣本之間的歐式距離, 其中需要確保所有的屬性都有相同的尺度. 歐式距離是明氏距離 (minkowski distance) 的一個特例 : \displaystyle {d_{m}(\boldsymbol {x}^{\mathrm {r}}, \boldsymbol {x}^{\mathrm {s}}) = \left ( \sum \limits_{j = 1}^{d}(x_{j}^{\mathrm {r}} - x_{j}^{\mathrm {s}})^{p} \right )^{\frac {1}{p}}}. 當 p = 2 時, 明氏距離便退化為歐式距離. 曼哈頓距離 (manhattan distance) 也是一種度量方法, 它更容易計算 : \displaystyle {d(\boldsymbol {x}^{\mathrm {r}}, \boldsymbol {x}^{\mathrm {s}}) = \sum \limits_{j = 1}^{d}\left |x_{j}^{\mathrm {r}} - x_{j}^{\mathrm {s}} \right |}. 聚合式階層分群法從若干個分組開始, 每個分組最初只包含一個學習樣本, 重複合併相似的分組, 形成較大的分組. 分割式階層分群法則是相反, 從單個分組開始, 不斷將大分組分裂為小分組. 在合併的過程中, 距離定義為兩個分組所有可能元素對之間的最小距離 : \displaystyle {d(G_{i}, G_{j}) = \min \limits_{\boldsymbol {x}^{\mathrm {r}} \in G_{i}, \boldsymbol {x}^{\mathrm {s}} \in G_{j}}d(\boldsymbol {x}^{\mathrm {r}}, \boldsymbol {x}^{\mathrm {s}})}. 在分裂的過程中, 距離是取最大距離 : \displaystyle {d(G_{i}, G_{j}) = \max \limits_{\boldsymbol {x}^{\mathrm {r}} \in G_{i}, \boldsymbol {x}^{\mathrm {s}} \in G_{j}}d(\boldsymbol {x}^{\mathrm {r}}, \boldsymbol {x}^{\mathrm {s}})}.
最後, 對於聚類分析中的參數 k, 它也有一些調整的方法 :
- 根據實際應用確定;
- 使用主成分分析來發現可能的 k;
- 根據經驗, 由人工給定.
8. 非參數方法
在參數方法中, 我們假定模型是有效的. 這樣做的好處就是減少了需要估計的參數數量, 但是模型有效這個假定並不總是成立. 在非參數方法中, 我們只假定相似的輸入具有相似的輸出. 換句話說, 在參數方法中, 如果我們假定模型是線性的, 那麼輸出必定也是線性的, 而非參數方法中, 若輸入是類似於線性的, 那麼輸出也是類似於線性的. 這樣的假設不無道理, 因為世界是平穩的, 漸變的. 因此, 只要使用合適的距離度量, 從學習樣本中找出相似的樣本, 將這些離散的樣本使用連續函數進行逼近, 也就是進行插值, 得到正確的輸出. 不同的非參數方法對相似性的定義不同, 使用的插值方法也不相同. 在參數方法中, 所有的學習樣本都會影響全局估計, 但是非參數方法下, 不存在單個全局的模型. 一般來說, 非參數方法估計局部模型, 它們只受到鄰近學習樣本的影響.
假設樣本 X = \left \{ x^{\mathrm {t}} \right \} 獨立地從某一個未知的機率分佈 p(\cdot) 中抽取, \mathop {\mathbf {P}}(\cdot) 是 p(\cdot) 的估計. 累積分佈函數 F(x) 是點 x 上的非參數估計時小於或者等於 x 的樣本所佔比例, 即 \displaystyle {F(x) = \frac {\mathop {\mathrm {card}} \left \{ x^{\mathrm {t}} < x \right \}}{\mathop {\mathrm {card}}{X}}}. 機率分佈的非參數估計我們使用下式 : \displaystyle {\mathop {\mathbf {P}}(x) = \frac {1}{h} \left ( \frac {\mathop {\mathrm {card}} \left \{ x^{\mathrm {t}} \leq x + h \right \} - \mathop {\mathrm {card}} \left \{ x^{\mathrm {t}} \leq x \right \}}{\mathop {\mathrm {card}}{X}} \right )}. 其中, h 是區間長度, 並且假定落入該區間的樣本 x^{\mathrm {t}} 是足夠接近的.
最古老也是最流行的方法是使用直方圖. 在直方圖中, 輸入空間被劃分為若干個相等的區間. 給定原點 x_{0} 和區間寬度 h, 那麼某一個區間可以表示為 \displaystyle {[x_{0} + mh, x_{0} + (m + 1)h]}. 其中, m 為整數. 機率分佈的非參數估計定義為 \displaystyle {\mathop {\mathbf {P}}(x) = \frac {1}{h}\left ( \frac {\mathop {\mathrm {card}} \left \{ x^{\mathrm {t}} \text { 落在與 } x \text { 相同的區間中} \right \}}{h\mathop {\mathrm {card}}{X}} \right )}. 在建構直方圖的時候, 我們需要選擇原點和區間寬度. 原點的選區影響靠近區間邊界的估計, 但是主要影響估計的還是區間寬度. 如果令區間寬度比較小, 那麼估計的直方圖看起來有許多個向上凸起的部分; 如果令區間寬度比較大, 那麼直方圖整體看起來會平滑一些. 直方圖的優點是一旦存放了區間估計, 那麼就不再需要在記憶體中保留學習樣本.
自然估計法可以讓我們不必設定原點, 它定義為 \displaystyle {\mathop {\mathbf {P}}(x) = \frac {\mathop {\mathrm {card}} \left \{ x - \frac {h}{2} < x^{\mathrm {t}} \leq x + \frac {h}{2} \right \}}{h\mathop {\mathrm {card}} {X}}}. 上式規定了樣本總是落在了區間寬度為 h, 以 x 為中心的鄰域中. 它還有另一種表示方法 : \displaystyle {\mathop {\mathbf {P}}(x) = \frac {1}{h\mathop {\mathrm {card}} {X}}\sum \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}} {X}}w \left ( \frac {x - x^{\mathrm {t}}}{h} \right )}. 其中, 權重函數 w(\cdot) 定義為 \displaystyle {w(u) = \begin {cases} 1 & {\left | u \right | < \frac {1}{2}} \\ 0 & {\text {else}}. \end {cases}} 這就好像每個 x^{\mathrm {t}} 都有一個圍繞它的大小為 h 的對稱影響區域, 並且落入該區域的 x 的貢獻都為 1. 於是, 非參數估計恰好為其區域包含 x 和 x^{\mathrm {t}} 的影響之和. 因此, 估計不是連續的, 在 x^{\mathrm {t}} \pm \frac {h}{2} 的地方有跳躍.
為了得到光滑的估計, 我們使用一個光滑的權重函數, 稱之為核函數 (kernel function). 以常態分佈對應的分佈函數為例, 我們可以使用 \displaystyle {K(u) = \frac {1}{\sqrt {2\pi}}\mathop {\mathrm {E}}^{-\frac {u^{2}}{2}}}. 這樣就有 \displaystyle {\mathop {\mathbf {P}}(x) = \frac {1}{h\mathop {\mathrm {card}}{X}}\sum \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}}{X}}K \left ( \frac {x - x^{\mathrm {t}}}{h} \right )}. 顯然, 核函數會決定影響的形狀, h 決定了影響的寬度. 所有 x^{\mathrm {t}} 都會對 x 上的估計有影響, 並且影響隨著 |x - x^{\mathrm {t}}| 的增大而平滑地減小.
為了簡化計算, 如果 \left | x - x^{\mathrm {t}} \right | > 3h , 那麼 K(\cdot) 可以取 0. 或者使用其它更容易計算的核函數, 只要 K(u) 對 u = 0 取最大值, 並且隨著 |u| 的增大而對稱地減小即可.
如果 K(u) > 0 且 \displaystyle {\displaystyle {\int}_{-\infty}^{+\infty}K(u)\mathrm {d}u = 1}, 那麼它是一個合法的機率分佈函數, 則 \mathop {\mathbf {P}}(\cdot) 也會繼承 K(u) 的合法性, 連續性和可微性.
除了使用核函數使得估計光滑之外, 還可以考慮 k 最近鄰估計. 它將估計分佈曲線的光滑度交給 k 來控制, 要求 k 遠遠小於學習樣本數量. 定義 a 和 b 之間的距離, 例如 |a - b|. 對於每個 x, 定義 \displaystyle {d_{1}(x) \leq d_{2}(x) \leq ... \leq d_{\mathop {\mathrm {card}}{X}}(x)}. 為從 x 到樣本中的點按廣義單調增加的順序進行排列的距離. 其中, d_{1}(x) 是 x 到最近樣本的距離, d_{2}(x) 是 x 到第二近樣本的距離, ..., d_{\mathop {\mathrm {card}}X}(x) 是 x 到最遠樣本的距離. 如果 x^{\mathrm {t}} 是數據點, 設 i = \argmin \limits_{\mathrm {t}}|x - x^{\mathrm {t}}|, 那麼定義 d_{1}(x) = \min \limits_{\mathrm {t}}\left | x - x^{\mathrm {t}} \right |, d_{\cdot}(x) = \min \limits_{j \neq i}\left | x - x^{j} \right |.
我們定義 k 最近鄰的分佈估計為 \displaystyle {\mathop {\mathbf {P}}(x) = \frac {k}{2\mathop {\mathrm {card}}{X}d_{k}(x)}}. 這個估計稍微維持了自然性質, 不同的是, 我們不計算 h 之後檢查多少樣本落入某個區間中, 而是先觀察 k 個樣本分佈然後計算區間大小. 那麼顯然, 這個估計並不是連續的, 它的導數在所有 \frac {1}{2}(x^{j} + x^{j + k}) 上不具有連續性. 其中, x^{j} 表示樣本的順序統計量. 另外, \mathop {\mathbf {P}}(x) 也不是合法的機率分佈函數, 因為 \displaystyle {\int_{-\infty}^{+\infty}\mathop {\mathbf {P}}(x)\mathrm {d}{x} = \infty}. 為了得到更加光滑的估計, 可以結合核函數 : \displaystyle {\mathop {\mathbf {P}}(x) = \frac {1}{\mathop {\mathrm {card}}{X}d_{k}(x)}\sum \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}}{X}}K \left ( \frac {x - x^{\mathrm {t}}}{d_{k}(x)} \right )}.
上面我都沒有用向量的黑體, 所有變數都是單個的, 接下來我們將上面的結論推廣到多變數的情況. 給定樣本 X = \left \{ \boldsymbol {x}^{\mathrm {t}} \right \}, 核估計可以寫為 \displaystyle {\mathop {\mathbf {P}}(\boldsymbol {x}) = \frac {1}{h^{d}\mathop {\mathrm {card}}{X}}\sum \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}}{X}}K \left ( \frac {\boldsymbol {x} - \boldsymbol {x}^{\mathrm {t}}}{h} \right )}. 其中, 要求 K(\boldsymbol {x}) 滿足 \displaystyle {\int_{\R\mathop {\mathrm {E}}^{d}}K(\boldsymbol {x})\mathrm {d}\boldsymbol {x} = 1}. 根據之前給出的核函數, 多元常態分佈是一個候選的核函數 : \displaystyle {K(\boldsymbol {u}) = \left ( \frac {1}{\sqrt {2\pi}} \right )^{d}\mathop {\mathrm {E}}^{-\frac {\left \| \boldsymbol {u} \right \|^{2}}{2}}}. 但是在高維度空間中, 進行非參數估計要比較小心. 因為除非有大量學習樣本, 否則大部分的區域都是空的. 除此之外, h 的選擇也要十分小心. 上式的 \left \| \boldsymbol {u} \right \| 意味著核災所有維度上都具有相同的尺度, 否則應該首先將樣本規範化. 當核函數和基礎分佈具有相同的形式的時候, 有 \displaystyle {K(\boldsymbol {u}) = \frac {1}{\sqrt {2\pi}^{\frac {d}{2}}\sqrt {\det {S}}}\exp \left \{ -\frac {1}{2}\boldsymbol {u}^{\mathrm {T}}S^{-1}\boldsymbol {u} \right \}}. 其中, S 是樣本的協方差矩陣, 這對應於使用馬式距離而非歐式距離.
當用於分類的時候, 使用非參數方法估計類別的條件分佈 p(\boldsymbol {x}|C_{i}) : \displaystyle {\mathop {\mathbf {P}}(\boldsymbol {x}|C_{i}) = \frac {1}{h^{d}\mathop {\mathrm {card}}{C_{i}}}\sum \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}}{X}}K \left ( \frac {\boldsymbol {x} - \boldsymbol {x}^{\mathrm {t}}}{h} \right )r_{i}^{\mathrm {t}}}. 其中, 若 \boldsymbol {x}^{\mathrm {t}} \in C_{i}, 那麼 r_{i}^{\mathrm {t}} = 1; 否則, r_{i}^{\mathrm {t}} = 0. 事前機率的概似等價於其發生的機率, 因此 \hat {\mathop {\mathbf {P}}}(C_{i}) = \frac {\mathop {\mathrm {card}}{C_{i}}}{\mathop {\mathrm {card}}{X}}. 於是, 結合條件機率, 判別式可以表示為 \displaystyle {g_{i}(\boldsymbol {x}) = \mathop {\mathbf {P}}(\boldsymbol {x}|C_{i})\hat {\mathop {\mathbf {P}}}(C_{i}) = \frac {1}{h^{d}\mathop {\mathrm {card}}{X}}\sum \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}}{X}}K \left ( \frac {\boldsymbol {x} - \boldsymbol {x}^{\mathrm {t}}}{h} \right )r_{i}^{\mathrm {t}}}. 並且, \boldsymbol {x} 會被指派到取最大值的那一類中.
對於 k 最近鄰估計, 有一種特殊情況 : \displaystyle {\mathop {\mathbf {P}}(\boldsymbol {x}|C_{i}) = \frac {k_{i}}{\mathop {\mathrm {card}}{C_{i}}V^{k}(\boldsymbol {x})}}. 其中, k_{i} 是 k 個最近鄰中屬於 C_{i} 的近鄰數量, 而 V^{k}(\boldsymbol {x}) 是中心在 \boldsymbol {x}, 半徑為 r = \left \| \boldsymbol {x} - \boldsymbol {x}_{(k)} \right \| 的 d 維空間中的超球的體積. 其中, \boldsymbol {x}_{(k)} 是第 k 個距離 \boldsymbol {x} 最近的觀測 : V_{k} = r^{d}c_{d}, c_{d} 是 d 維單位球的體積. k 最近鄰估計將輸入指派到輸入的 k 個最近鄰中具有最多樣本的類別中.
不過, 在高維度空間下, 為了不降低性能, 我們有時候要進行精簡處理. 有一種貪婪演算法 :
- 令 Z = \emptyset;
- 任取 \boldsymbol {x} \in X;
- 找到 \boldsymbol {x}' 使得 \left \| \boldsymbol {x} - \boldsymbol {x}' \right \| = \min \limits_{\boldsymbol {x}^{j} \in Z} \left \| \boldsymbol {x} - \boldsymbol {x}^{j} \right \|;
- 如果 \boldsymbol {x} 和 \boldsymbol {x}' 不在同一類中, 那麼將 \boldsymbol {x} 加入 Z 中;
- 回到第一步, 直到 Z 不改變時停止演算法.
大多數的分類學習問題都可以改寫為基於距離的學習問題. 最常見的是使用馬式距離 : \displaystyle {D(\boldsymbol {x}, \boldsymbol {x}^{\mathrm {t}}|M) = (\boldsymbol {x} - \boldsymbol {x}^{\mathrm {t}})^{\mathrm {T}}M(\boldsymbol {x} - \boldsymbol {x}^{\mathrm {t}})}. 其中, 參數 M 是正定矩陣. 當輸入維度比較高的時候, 為了避免過適, 一種方法是在 M 上添加稀疏限制, 另一種是使用低秩進行近似, 把 M 分解為 L^{\mathrm {T}}L. 其中, L 是 k \times d 矩陣, k < d. 此時, \displaystyle {\begin {aligned} D(\boldsymbol {x}, \boldsymbol {x}^{\mathrm {t}}|M) &= (\boldsymbol {x} - \boldsymbol {x}^{\mathrm {t}})^{\mathrm {T}}M(\boldsymbol {x} - \boldsymbol {x}^{\mathrm {t}}) \\ &= (\boldsymbol {x} - \boldsymbol {x}^{\mathrm {t}})^{\mathrm {T}}L^{\mathrm {T}}L(\boldsymbol {x} - \boldsymbol {x}^{\mathrm {t}}) \\ &= \left ( L(\boldsymbol {x} - \boldsymbol {x}^{\mathrm {t}}) \right )^{\mathrm {T}}\left ( L(\boldsymbol {x} - \boldsymbol {x}^{\mathrm {t}}) \right ) \\ &= (L\boldsymbol {x} - L\boldsymbol {x}^{\mathrm {t}})^{\mathrm {T}}(L\boldsymbol {x} - L\boldsymbol {x}^{\mathrm {t}}) \\ &= (\boldsymbol {z} - \boldsymbol {z}^{\mathrm {t}})^{\mathrm {T}}(\boldsymbol {z} - \boldsymbol {z}^{\mathrm {t}}) \\ &= \left \| \boldsymbol {z} - \boldsymbol {z}^{\mathrm {t}} \right \|^{2}. \end {aligned}} 其中, \boldsymbol {z} = L\boldsymbol {x}.
對於離散的樣本, 可以考慮使用漢明距離 (Hamming distance) : \displaystyle {H(\boldsymbol {x}, \boldsymbol {x}^{\mathrm {t}}) = \sum \limits_{j = 1}^{d}l(\boldsymbol {x}_{j} \neq \boldsymbol {x}_{j}^{\mathrm {t}})}. 其中, \displaystyle {l(a) = \begin {cases} 1 & {a \text { 為真}} \\ 0 & {\text {else}}. \end {cases}}
那些比較奇怪的樣本通常意味著異常行為. 例如信用卡交易中的欺詐, 保險行業中的偏保等. 因此, 我們需要進行異常檢測, 它一般不是監督的, 也不是分類, 而是將少數樣本進行標記. 簡單地說, 異常檢測就是發現某些事件不正常地發生. 一個異常樣本顯然會影響分佈的均值和方差, 在非參數估計中通常會影響局部的分佈. 我們定義 d_{k}(\boldsymbol {x}) 為樣本 \boldsymbol {x} 和它的第 k 個最近鄰之間的距離, 定義 N(\boldsymbol {x}) 為 \boldsymbol {x} 的鄰域中的樣本集合. 對於 \boldsymbol {s} \in N(\boldsymbol {x}), 考慮 d_{k}(\boldsymbol {s}). 將 d_{k}(\boldsymbol {x}) 和這樣的 \boldsymbol {s} 對應的 d_{k}(\boldsymbol {s}) 的平均值進行比較 : \displaystyle {\mathop {\mathrm {LOF}}(\boldsymbol {x}) = \frac {d_{k}(\boldsymbol {x})}{\sum \limits_{s \in N(\boldsymbol {x})}\frac {d_{k}(\boldsymbol {s})}{\mathop {\mathrm {card}}{N(\boldsymbol {x})}}}}. 隨著 \mathop {\mathrm {LOF}}(\boldsymbol {x}) 值的增大, \boldsymbol {x} 是異常樣本的機率變高.
上面, 我們討論了分類的情況, 接下來我們需要討論回歸的情況. 給定學習樣本 X = \left \{ x^{\mathrm {t}}, r^{\mathrm {t}} \right \}, 假定 \displaystyle {r^{\mathrm {t}} = g(x^{\mathrm {t}}) + \varepsilon}. 在參數回歸中, 我們假定 g 是某個多項式, 並且計算其參數. 如果這種假設不成立, 那麼就要使用非參數回歸, 我們只假定相近的 x 具有相近的 g(x) 值. 給定任意 x, 我們首先找出 x 的鄰域, 並且求出鄰域中的 r 的平均值, 計算 \hat {g}(x).
如果像直方圖中那樣, 那麼我們可以定義 \displaystyle {\hat {g}(x) = \frac {\sum \limits_{\mathrm {t}}b(x, x^{\mathrm {t}})r^{\mathrm {t}}}{\sum \limits_{\mathrm {t}}b(x, x^{\mathrm {t}})}}. 其中, \displaystyle {b(x, x^{\mathrm {t}}) = \begin {cases} 1 & {x^{t} \text { 和 } x \text { 在同一個鄰域中}} \\ 0 & {\text {else}}. \end {cases}} 這樣得到的 \hat {g} 顯然是不連續的. 和自然估計那裡一樣, 我們取 x 周圍定義一個對稱區間, 並取平均值 : \displaystyle {\hat {g}(x) = \frac {\sum \limits_{\mathrm {t}}w \left ( \frac {x - x^{\mathrm {t}}}{h} \right )r^{\mathrm {t}}}{\sum \limits_{\mathrm {t}}w \left ( \frac {x - x^{\mathrm {t}}}{h} \right )}}. 其中, \displaystyle {w(u) = \begin {cases} 1 & {\left | u \right | < 1} \\ 0 & {\text {else}}. \end {cases}} 有時候, 也可能取中位數, 而不是均值.
如果使用核函數, 那麼 \displaystyle {\hat {g}(x) = \frac {\sum \limits_{\mathrm {t}}K \left ( \frac {x - x^{\mathrm {t}}}{h} \right )r^{\mathrm {t}}}{\sum \limits_{\mathrm {t}}Kw \left ( \frac {x - x^{\mathrm {t}}}{h} \right )}}. 為了評估曲線的光滑程度, 我們引入 \displaystyle {\sum \limits_{\mathrm {t}}\left ( r^{\mathrm {t}} - \hat {g}(x^{\mathrm {t}}) \right )^{2} + \lambda \int_{a}^{b}\big ( \hat {g}''(x) \big )^{2}\mathrm {d}{x}}. 第一項是誤差, 第二項度量變化. 其中, \lambda 權衡變化和誤差, 使用較大的 \lambda 會獲得更佳光滑的估計.
9. 決策樹
決策樹 (desicion tree) 是一種用於監督學習的層次模型, 使用資料結構中的樹 (《【資料結構】樹》) 作為支援. 決策樹的內部節點也叫做決策節點, 它帶有一個標記分支的離散輸出的測試函數 f_{m}(\boldsymbol {x}), 每一個外部節點都是最終的輸出. 決策樹也是一種非參數模型, 因為我們並不對分佈作任何假設, 並且樹的結構也不是固定的.
每一個 f_{m}(\boldsymbol {x}) 都定義了 d 維空間中的一個判別式, 這個判別式將空間分為較小的多個區域. 例如, 決策樹是一棵二元樹, 那麼 f_{m}(\boldsymbol {x}) 將決策結果引向兩個子節點.
我們首先考慮單變數的情況. 若某個輸入 x_{j} 是離散的, 其有 n 個可能的取值, 那麼決策節點檢查其值, 並取對應的字節點劃入, 這是一個 n 路劃分. 然而, 若輸入是連續的, 那麼我們應該將數值離散化, 因為根據實數的連續性和稠密性 (《【數學分析】實數——實數集合及其有序化》第 6 節), 樹不可能針對每個值都有一個分支. 因此, 我們比較 \displaystyle {f_{m}(\boldsymbol {x}) : x_{j} \geq w_{m0}}. 其中, w_{m0} 是一個適當的閾限. 該決策節點將輸入空間一分為二 : L_{m} = \left \{ \boldsymbol {x}|x_{j} > w_{m0} \right \} 和 R_{m} = \left \{ \boldsymbol {x}|x_{j} \leq w_{m0} \right \}. 這是二元劃分. 從跟節點到外部節點的路徑上的連續決策節點使用其它屬性進一步將它們一分為二, 產生相互正交的劃分.
樹學習演算法是一種貪婪演算法 (《貪婪演算法》). 對於全部學習樣本, 從跟節點開始, 每一步都選擇最佳劃分, 然後針對子集重複這樣的工作, 直到不能或者不需要再劃分為止, 此處就是外部節點所在的地方.
用於分類的決策樹稱為分類樹 (classification tree). 在分類樹中, 如果我們說一個劃分是純的, 若且唯若劃分後選擇相同分支的所有樣本都屬於相同的類別. 對於節點 m, 令 N_{m} 是到達節點 m 的學習樣本數量. 對於跟節點, N_{m} = n. N_{m} 個樣本中, 有 N_{m}^{i} 個屬於 C_{i} 類, 而 \sum \limits_{i}N_{m}^{i} = N_{m}. 其中, n 是學習樣本的總數. 如果一個樣本達到 m 節點, 那麼它屬於 C_{i} 類的機率估計為 \displaystyle {\mathop {\mathbf {P}}(C_{i}|\boldsymbol {x}, m) = p_{m}^{i} = \frac {N_{m}^{i}}{N_{m}}}. 當到達節點 m 時, 所有樣本都不屬於 C_{i} 類別, 即 p_{m}^{i} = 0, 此時若劃分是純的, 那麼無須進一步劃分, 並且添加一個外部節點; 類似地, 當到達節點 m 時, 所有樣本都屬於 C_{i} 類別, 即 p_{m}^{i} = 1, 此時若劃分是純的, 那麼也無需進一步劃分.
度量一個節點純度的可能函數是熵 : \displaystyle {I_{m} = -\sum \limits_{i = 1}^{K}p_{m}^{i}\ln {p_{m}^{i}}}. 它本來用於描述機率論中軌道的典型性 (《【機率論】初等機率論——Bernoulli 概型 : 大數法則》). 對於兩個分類的問題, 其中 p^{1} = p, p^{2} = 1 - p, 函數 \phi(p, 1 - p) 若滿足
- 對於任意 p \in [0, 1], 有 \phi \left ( \frac {1}{2}, \frac {1}{2} \right ) \geq \phi(p, 1 - p);
- \phi(0, 1) = \phi(1, 0) = 0;
- 當 p 在 [0, \frac {1}{2}] 上時, \phi(p, 1 - p) 是單調增加的; 當 p 在 \left [ \frac {1}{2}, 1 \right ] 上時, \phi(p, 1 - p) 是單調減少的.
那麼函數 \phi(p, 1 - p) 也可以用於度量劃分的純度. 下面有三個函數 \phi(p, 1 - p) 的實例 :
- \phi(p, 1 - p) = -p\ln {p} - (1 - p)\ln {(1 - p)};
- \phi(p, 1 - p) = 2p(1 - p);
- \phi(p, 1 - p) = 1 - \max \{ p, 1 - p \}.
某些研究指出, 這三個度量之間不存在太大的差別.
如果某個節點不純, 那麼就說明還可以繼續進行劃分. 在所有可能的劃分中, 我們會選擇劃分後純度最高的那一個節點, 因為我們希望產生最小的樹. 當然, 這種貪婪的想法是局部最佳的, 而不是全局最佳的.
設在節點 m, N_{m} 的 N_{mj} 個取分支 j, 這些是測試 f_{m}(\boldsymbol {x}^{\mathrm {t}}) 回傳輸出 j 的 \boldsymbol {x}^{\mathrm {t}}. 對於具有 n 個值的離散家庭, 有 n 個輸出; 對於連續的屬性, 有兩個輸出. 在兩種情況下, 都滿足 \sum \limits_{j = 1}^{n}N_{mj} = N_{m}. N_{mj} 個樣本中的 N_{mj}^{i} 個屬於類別 C_{i} : \sum \limits_{j = 1}^{K}N_{mk}^{i} = N_{mj}. 類似地, \sum \limits_{j = 1}^{n}N_{mj}^{i} = N_{m}^{i}. 於是, 給定節點 m, 測試回傳輸出 j, 類別 C_{i} 的機率估計為 \displaystyle {\mathop {\mathbf {P}}(C_{i}|\boldsymbol {x}, m, j) = p_{mj}^{i} = \frac {N_{mj}^{i}}{N_{mj}}}. 而劃分之後的總不純度為 \displaystyle {I_{m}' = -\sum \limits_{j = 1}^{n}\frac {N_{mj}}{N_{m}}\sum \limits_{i = 1}^{K}p_{mj}^{i}\ln {p_{mj}^{i}}}. 現在, 我們還需要一個適當的閾限 w_{m0}. 一般來說, 不需要測試所有可能的值, 只需要考慮兩點之間的中間值即可. 還需要注意的是, 最佳劃分總是在屬於不同類的兩個相鄰點之間. 這樣, 我們檢查每一個, 並取最高純度作為該屬性的純度. 對於離散屬性, 不需要這種迭代.
如果存在錯誤的學習樣本, 如果任由決策樹進行劃分不加以干預, 可能會產生一棵非常大且過適的樹. 此時, 我們設定一個閾限 \theta_{I}, 當樣本的純度小於這個閾限, 那麼劃分就不再繼續. 不過, 和非參數估計類似, \theta_{I} 比較小的時候, 方差大且樹生長得比較大; \theta_{I} 比較大的時候, 方差小且樹生長得不大.
一般來說, 建議在外部節點存放每個類別的事後機率, 而不是用具有最大事後機率的類別來進行標記.
最後, 我們給出分類決策樹的演算法 :
- 初始化一棵空樹 \mathcal {T};
- 對於學習樣本 X, 使用熵來檢查節點的純度. 若純度達到閾限, 那麼創建外部節點並結束劃分; 否則, 進入下一步;
- 對於所有 i = 1, 2, ..., d, 其中 d 為樣本維度. 若 x_{i} \in X 具有 n 個可能的離散屬性, 則將學習樣本劃分為 n 個類別 : X_{1}, X_{2}, ..., X_{n}, 並計算總的不純度. 找到具有最小總部純度的 i, 記錄下來; 若 x_{i} 的取值具有連續性, 則根據所有可能的劃分將學習樣本分為 X_{1} 和 X_{2}, 並計算總的不純度, 找到具有最小不純度的 i, 記錄下來;
- 對於第 3 步中記錄的 i, 尋訪 x_{i} 的每一個分支, 找到落入該分支的 X_{i}, 並將 X_{i} 作為新的學習樣本, 遞迴地回到第 2 步.
- 回傳建構好的決策樹 \mathcal {T}_{\text {new}};
回歸樹的建構方式幾乎和分類樹一樣, 只不過不純度度量需要更換一下. 對於節點 m, 令 X_{m} 為 X 中到達節點 m 的子集, 即它是 \boldsymbol {x} \in X 的滿足從根節點到節點 m 的所有決策節點條件的所有 \boldsymbol {x}. 我們定義 \displaystyle {b_{m}(\boldsymbol {x}) = \begin {cases} 1 & {\boldsymbol {x} \in X_{m} \text { 且 } \boldsymbol {x} \text { 到達節點}\ m} \\ 0 & {\text {else}}. \end {cases}}
在回歸樹中, 劃分的好壞用估計值的偏誤的平方進行度量. 令 g_{m} 為節點 m 中的估計值, 則 \displaystyle {\mathop {\mathrm {E}}_{m} = \frac {1}{N_{m}}\sum \limits_{\mathrm {t}}(r^{\mathrm {t}} - g_{m})^{2}b_{m}(\boldsymbol {x}^{\mathrm {t}})}. 其中, N_{m} = \mathop {\mathrm {card}} {X_{m}} = \sum \limits_{\mathrm {t}}b_{m}(\boldsymbol {x}^{\mathrm {t}}).
在節點中, 我們使用到達該節點的樣本的要求輸出的均值或者中值 (噪音較大的情況下) : \displaystyle {g_{m} = \frac {\sum \limits_{\mathrm {t}}b_{m}(\boldsymbol {x}^{\mathrm {t}})r^{\mathrm {t}}}{\sum \limits_{\mathrm {t}}b_{m}(\boldsymbol {x}^{\mathrm {t}})}}. 一般來說, 對於指定的閾限 \theta_{r}, 如果 \mathop {\mathrm {E}}_{m} < \theta_{r}, 那麼就結束劃分並且創建外部節點, 存放 g_{m} 的值; 否則, 繼續進行劃分.
令 X_{mj} 為 X_{m} 的取分支 j 的子集, 即 \bigcup \limits_{j = 1}^{n}X_{mj} = X_{m}. 我們定義 \displaystyle {b_{mj}(\boldsymbol {x}) = \begin {cases} 1 & {\boldsymbol {x} \in X_{mj} \text { 且 } \boldsymbol {x} \text { 到達節點}\ m\ \text {並取分支}\ j} \\ 0 & {\text {else}}. \end {cases}} 而 g_{mj} 是節點 m 的分支 j 上的估計值 : \displaystyle {g_{mj} = \frac {\sum \limits_{\mathrm {t}}b_{mj}(\boldsymbol {x}^{\mathrm {t}})r^{\mathrm {t}}}{\sum \limits_{\mathrm {t}}b_{mj}(\boldsymbol {x}^{\mathrm {t}})}}. 劃分之後的誤差為 \displaystyle {\mathop {\mathrm {E}}_{m}' = \frac {1}{N_{m}}\sum \limits_{j}\sum \limits_{\mathrm {t}}(r^{t} - g_{mj})^{2}b_{mj}(\boldsymbol {x}^{\mathrm {t}})}. 我們尋找的是使得 \mathop {\mathrm {E}}_{m}' 最小化的劃分. 容易地, 將熵計算使用偏誤的平方進行替換, 類別標號使用平均值進行替換, 用於分類樹的演算法就可以用於回歸樹.
除了偏誤的平方這種誤差函數之外, 還有一種最大可能誤差 : \displaystyle {\mathop {\mathrm {E}}_{m} = \max \limits_{j} \max \limits_{\mathrm {t}}\left | r^{\mathrm {t}} - g_{mj} \right |b_{mj}(\boldsymbol {x}^{\mathrm {t}})}. 使用這種誤差函數, 我們可以保證任何樣本的誤差都不大於給定的閾限. 可接受的誤差閾限越小, 產生的樹越大, 並且過適的風險也越大; 可接受的誤差閾限越大, 乏適的風險就越大.
不過, 我們也可以不在外部節點上取平均值以常數擬合, 而是做一個線性回歸 : \displaystyle {g(\boldsymbol {x}) = \boldsymbol {w}_{m}^{\mathrm {T}}\boldsymbol {x} + w_{m0}}. 這樣, 外部節點上的估計會依賴於 \boldsymbol {x} 並且產生一棵比較小的樹, 但是運算量會增加.
通常來說, 如果到達一個節點的樣本數量不到總體數量的某個百分比閾限, 那麼無論節點純度的大小, 都不會再繼續劃分. 因為, 基於少量樣本的決策樹通常具有較大方差, 從而導致較大的誤差. 在樹完全建構出來之前, 就提前停止某個部分的建構, 這種方法稱為預剪枝. 與之對應的是後剪枝. 後剪枝是通過觀察整體的結構, 然後決定哪些分支應該被移除, 通常會比預剪枝得到的樹效果更好, 但是它的速度比不上預剪枝. 在後剪枝中, 我們讓樹完全生長直到所有節點都是純的比你關切具有零學習誤差. 然後, 我們找出可能導致過適的子樹並且移除它. 我們從最初的被標記的學習樣本中保留一個用於剪枝的集合, 然後在學習階段中排除這些樣本. 對於每棵子樹, 我們用一個被該子樹覆蓋的樣本標記的外部節點替換它. 如果該外部節點在剪枝集合上的性能不比子樹差, 那麼直接移除子樹, 保留外部節點.
決策樹相比於其它機器學習的方法或者模型, 它有兩個優點 :
- 決策樹可以提取特徵 : 我們可以認為越靠近根節點的特徵越重要. 另外, 在樹完成構建之後, 有些特徵可能很少甚至沒有被使用;
- 決策樹的可解釋性比較高 : 任意分支都可以用
IF
-THEN
這樣的規則進行表示.
上面, 我們討論的都是單變數的情況. 接下來我們引入多變數決策樹. 在建構單變數決策樹的時候, 每個節點僅僅使用一個輸入維度, 但是多變數中每個決策節點可以使用所有輸入維度. 因此, 多變數決策樹更加普遍. 當所有的輸入都是連續的時候, 二元線性多變數節點定義為 \displaystyle {f_{m}(\boldsymbol {x}) : \boldsymbol {w}_{m}^{\mathrm {T}}\boldsymbol {x} + w_{m0} > 0}. 因為線性多變數節點取變數的加權和, 因此離散屬性應當使用布林變數來表示. 當從單變數節點過度到線性多變數節點的時候, 節點變得更加靈活. 但是, 我們可以使用非線性多變數節點, 使得其更加靈活 : \displaystyle {f_{m}(\boldsymbol {x}) : \boldsymbol {x}^{\mathrm {T}}W_{m}\boldsymbol {x} + \boldsymbol {x}_{m}^{\mathrm {T}}\boldsymbol {x} + w_{m0} > 0}. 還有一種可能的方法是使用球形節點 : \displaystyle {f_{m}(\boldsymbol {x}) = \left \| \boldsymbol {x} - \boldsymbol {c}_{m} \right \| \leq \alpha_{m}}. 其中, \boldsymbol {c}_{m} 是球心, \alpha_{m} 是半徑.
雜變數決策樹是一種混合類型的決策樹, 其中樹可以具有單變數、線性多變數和非線性多變數節點. 其基本思想是在樹建構期間, 每個決策節點對應於到達該節點的學習樣本子集定義了一個不同的子問題, 不同的模型可能更加適合, 應當找出和使用合適的模型. 到處都用相同類型的節點相當於假定輸入空間的所有部分都具有相同的歸納偏差. 除非複雜的決策節點表現出很好的準確性, 否則都會選用簡單的候選節點. 結果表明, 在樹建構的早起, 更靠近樹根的地方使用的節點更為複雜, 隨著樹向下建構, 節點逐漸變得簡單. 越靠近外部節點, 問題越來越簡單, 並且樣本也越少. 在這種情況下, 過於複雜的節點可能會產生過適.
10. 線性判別式
在本章中, 我們繞過概似和事後機率的估計, 直接為判別式假定模型, 而不對分佈和輸入是否相關等作出任何假設. 在基於判別式的方法中, 我們關注的並非區域中的分佈, 而是如何正確估計類別區域之間的邊界. 線性判別式是最常用的, 因為它足夠簡單並且容易理解 : \displaystyle {g_{i}(\boldsymbol {x}|\boldsymbol {w}_{i}, w_{i0}) = \boldsymbol {w}_{i}^{\mathrm {T}} + w_{i0} = \sum \limits_{j = 1}^{d}w_{ij}x_{j} + w_{i0}}. 在許多應用中, 線性判別式相當準確. 我們在之前也提到過, 如果知道類別符合常態分佈且具有相同的協方差矩陣的時候, 最佳判別式必定是線性的.
像決策樹中那樣, 如果線性判別式不夠靈活, 那麼我們可以作適當的推廣, 引入二次判別式 : \displaystyle {g_{i}(\boldsymbol {x}|W_{i}, \boldsymbol {w}_{i}, w_{i0}) = \boldsymbol {x}^{\mathrm {T}}W_{i}\boldsymbol {x} + \boldsymbol {w}_{i}\boldsymbol {x} + w_{i0}}. 不過, 複雜度稍高的二次判別式可能更通用, 但是需要更大的學習樣本且在小樣本上存在過適的可能. 一種等價的方法是通過增加高階項對輸入進行前處理. 例如, 對於兩個輸入 x_{1} 和 x_{2}, 可以定義新的變數 \displaystyle {z_{1} = x_{1}, z_{2} = x_{2}, z_{3} = x_{1}^{2}, z_{4} = x_{2}^{2}, z_{5} = x_{1}x_{2}}, 並取 \boldsymbol {z} = (z_{1}, z_{2}, z_{3}, z_{4}, z_{5})^{\mathrm {T}} 為輸入. 定義在五維空間上的線性函數對應於二維空間上的非線性函數. 為了替代原始空間中定義的非線性函數, 我們需要做的是定義到新空間且合適的非線性變換. 其中, 新空間上的函數可以是線性的.
判別式可以表示為 \displaystyle {g_{i}(\boldsymbol {x}) = \sum \limits_{j = 1}^{k}w_{j}\phi_{ij}(\boldsymbol {x})}. 其中, \phi_{ij}(\boldsymbol {x}) 是基礎函數. 高階項僅是一組可能的基礎函數, 可能的實例有
- \sin(x_{1});
- \mathrm {e}^{-\frac {(x_{1} - m)^{2}}{c}};
- \mathrm {e}^{-\frac {\left \| \boldsymbol {x} - \boldsymbol {m} \right \|^{2}}{c}};
- \ln {x^{2}};
- l(x_{1} > c);
- l(ax_{1} + bx_{2} > c).
其中, m, a, b, c 是常數, \boldsymbol {m} 是 d 維向量, 當 b 為真的時候, l(b) = 1; 否則, l(b) = 0.
不過本章重點是線性判別式, 我們還是著重於線性判別式. 從最簡單的二分類問題開始. 在這種情況下, 一個判別式函數即可 : \displaystyle {\begin {aligned} g(\boldsymbol {x}) &= g_{1}(\boldsymbol {x}) - g_{2}(\boldsymbol {x}) \\ &= (\boldsymbol {w}_{1}^{\mathrm {T}}\boldsymbol {x} + w_{10}) - (\boldsymbol {w}_{2}^{\mathrm {T}}\boldsymbol {x} + w_{20}) \\ &= (\boldsymbol {w}_{1} - \boldsymbol {w}_{2})^{\mathrm {T}}\boldsymbol {x} + (w_{10} - w_{20}) \\ &= \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + w_{0}. \end {aligned}} 如果 g(\boldsymbol {x}) > 0, 那麼選擇 C_{1}; 否則, 選擇 C_{2}. 顯然, 上式定義了一個超平面, 其中 \boldsymbol {w} 是權重向量, w_{0} 是閾限 (這是因為如果 \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} > -w_{0}, 那麼選擇 C_{1}; 否則, 選擇 C_{2}). 超平面將輸入空間劃分為兩個半空間 : C_{1} 的決策區域 R_{1} 和 C_{2} 的決策區域 R_{2}. R_{1} 中的任何 \boldsymbol {x} 都位於超平面的正側, R_{2} 中的任何 \boldsymbol {x} 都位於超平面的負側. 當 \boldsymbol {x} = \boldsymbol {0} 時, g(\boldsymbol {x}) = w_{0}, 並且如果 w_{0} > 0, 那麼原點在超平面的正側; w_{0} < 0 時, 原點在超平面的負側; 若 w_{0} = 0, 則超平面經過原點.
取決策區域上的兩個點 \boldsymbol {x}_{1} 和 \boldsymbol {x}_{2} (即 g(\boldsymbol {x}_{1}) = g(\boldsymbol {x}_{2}) = 0), 則 \displaystyle {\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}_{1} + w_{0} = \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}_{2} + w_{0} \Rightarrow \boldsymbol {w}^{\mathrm {T}}(\boldsymbol {x}_{1} - \boldsymbol {x}_{2}) = 0}. 我們看到, \boldsymbol {w} 時超平面上的任何向量的法線. 將 \boldsymbol {x} 改寫為 \displaystyle {\boldsymbol {x} = \boldsymbol {x}_{p} + r\frac {\boldsymbol {w}}{\left \| \boldsymbol {w} \right \|}}. 其中, \boldsymbol {x}_{p} 時 \boldsymbol {x} 到超平面的法線的影射, 而 r 給出 \boldsymbol {x} 到超平面的距離. 如果 \boldsymbol {x} 在負側, 則 r 為負數; 否則, r 為整數. 計算 g(\boldsymbol {x}) 並注意 g(\boldsymbol {x}) = 0, 有 \displaystyle {r = \frac {g(\boldsymbol {x})}{\left \| \boldsymbol {w} \right \|}}. 於是, 我們看到超平面到原點的距離為 \displaystyle {r_{0} = \frac {w_{0}}{\left \| \boldsymbol {w} \right \|}}. 這樣, w_{0} 就決定了超平面關於原點的位置, 而 \boldsymbol {w} 決定了其方向.
現在, 讓我們考慮多分類問題 : \displaystyle {g_{i}(\boldsymbol {x}|\boldsymbol {w}_{i}, w_{i0}) = \boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x} + w_{i0}}. 對於任意的樣本 \boldsymbol {x}, 有 \displaystyle {g_{i}(\boldsymbol {x}|\boldsymbol {w}_{i}, w_{i0}) \begin {cases} > 0 & {\boldsymbol {x} \in C_{i}} \\ \leq 0 & {\boldsymbol {x} \notin C_{i}}. \end {cases}} 使用這種判別式函數相當於假設所有的類別都是線性可分的. 即對於每個類別 C_{i}, 存在一個超平面 H_{i}, 使得所有 \boldsymbol {x} \in C_{i} 都在它的正側, 所有 \boldsymbol {x} \in C_{j}\ (j \neq i) 都在它的負側.
在檢驗時, 給定 \boldsymbol {x}, 理想情況下應當只有一個 g_{j}(\boldsymbol {x}) > 0 (j = 1, 2, …, K). 其中, K 是不同類別的數量. 但是, 實際情況下並不總滿足這個條件 : 這些超平面為正的半個空間可能重疊, 或者有可能出現對於任意的 j, 都有 g_{j}(\boldsymbol {x}) < 0 的情況. 這些情況下, 可以拒絕分類. 但是一般來說, 可以將 \boldsymbol {x} 指派到具有最大判別式值的類別中 : 選擇 C_{i} 若且唯若 g_{i}(\boldsymbol {x}) = \max \limits_{j = 1}^{K}g_{j}(\boldsymbol {x}).
輸入點 \boldsymbol {x} 到超平面的距離為 \frac {|g_{i}(\boldsymbol {x})|}{\| \boldsymbol {w}_{i} \|}. 假定所有 \boldsymbol {w}_{i} 具有類似的長度, 這將該點指派到 (對於任意 g_{j}(\boldsymbol {x}) > 0) 該點到超平面距離最遠的類別中. 這稱作線性分類器 (linear classififier). 從幾何意義上說, 它將特徵空間劃分為 K 個凸決策區域.
一旦類別不是線性可分的, 一種方法是將它劃分為一組線性問題. 逐對分離就用於這種情況, 它使用 \frac {K(K - 1)}{2} 個線性判別式 g_{ij}(\boldsymbol {x}), 每對不同的類別對應一個 \displaystyle {g_{ij}(\boldsymbol {x}|\boldsymbol {w}_{ij}, w_{ij0}) = \boldsymbol {w}_{ij}^{\mathrm {T}} + w_{ij0}}. 參數 \boldsymbol {w}_{ij} (i \neq j) 在學習的時候進行計算, 使得 \displaystyle {g_{ij}(\boldsymbol {x}) \begin {cases} > 0 & {\boldsymbol {x} \in C_{i}} \\ \leq 0 & {\boldsymbol {x} \in C_{i}, i, j = 1, 2, ..., K, i\neq j} \\ \text {undefined} & {\text {else}}. \end {cases}} 也就是說, 當 \boldsymbol {x}^{\mathrm {t}} \in C_{k}, k \neq i, k \neq j 時, 在學習 g_{ij}(\boldsymbol {x}) 不使用 \boldsymbol {x}^{\mathrm {t}}. 在檢驗的時候, 如果對於任意的 i \neq j, 都有 g_{ij} > 0, 則選擇類別 C_{i}. 但是有些情況下, 對於任意的 i, 上面條件都不滿足. 此時, 如果我們仍然想要做出選擇, 可以選擇最大化 \displaystyle {g_{i}(\boldsymbol {x}) = \sum \limits_{j \neq i}g_{ij}(\boldsymbol {x})}.
我們不止一次討論過, 對於類別具有常態分佈且共享協方差矩陣的情況下, 判別式函數是線性的 \displaystyle {g_{i}(\boldsymbol {x}) = \boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x} + w_{i0}}. 參數的計算方法如下 : \displaystyle {\boldsymbol {w}_{i} = \Sigma^{-1}\boldsymbol {\mu_{i}}, w_{i0} = -\frac {1}{2}\boldsymbol {\mu}_{i}^{\mathrm {T}}\Sigma^{-1}\boldsymbol {\mu}_{i} + \ln {\mathop {\mathbf {P}}(C_{i})}}. 給定學習樣本, 首先計算 \boldsymbol {\mu}_{i} 和 \Sigma 的估計 \hat {\boldsymbol {\mu}_{i}} 和 \hat {\Sigma}, 然後利用計算所得的估計計算 \boldsymbol {w}_{i} 和 w_{i0}.
再次考慮二分類問題. 我們定義 y = \mathop {\mathbf {P}}(C_{1}|\boldsymbol {x}), \mathop {\mathbf {P}}(C_{2}|\boldsymbol {x}) = 1 - y. 在分類時, 我們有 : 選擇 C_{1} 若且唯若 y > 0.5 或 \frac {y}{1 - y} > 1 或 \ln {\frac {y}{1 - y}} > 0; 否則, 選擇 C_{2}.
我們稱 \ln {\frac {y}{1 - y}} 為 y 的對數機率模型 (logarithm probability model). 在兩個共享協方差矩陣且服從常態分佈的類別中, 對數機率模型是線性的 : \displaystyle {\begin {aligned} \ln {y}|_{y = \mathop {\mathbf {P}}(C_{1}|\boldsymbol {x})} &= \ln {\frac {\mathop {\mathbf {P}}(C_{1}|\boldsymbol {x})}{1 - \mathop {\mathbf {P}}(C_{1}|\boldsymbol {x})}} \\ &= \ln {\frac {\mathop {\mathbf {P}}(C_{1}|\boldsymbol {x})}{\mathop {\mathbf {P}}(C_{2}|\boldsymbol {x})}} \\ &= \ln {\frac {p(\boldsymbol {x}|C_{1})}{p(\boldsymbol {x}|C_{2})}} + \ln {\frac {\mathop {\mathbf {P}}(C_{1})}{\mathop {\mathbf {P}}(C_{2})}} \\ &= \ln {\frac {(2\pi)^{-\frac {d}{2}}\sqrt {\det{\Sigma}}\exp \left \{ -\frac {1}{2}(\boldsymbol {x} - \boldsymbol {\mu}_{1})^{\mathrm {T}}\Sigma^{-1}(\boldsymbol {x} - \boldsymbol {\mu}_{1}) \right \}}{(2\pi)^{-\frac {d}{2}}\sqrt {\det{\Sigma}}\exp \left \{ -\frac {1}{2}(\boldsymbol {x} - \boldsymbol {\mu}_{2})^{\mathrm {T}}\Sigma^{-1}(\boldsymbol {x} - \boldsymbol {\mu}_{2}) \right \}}} \\ &= \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + w_{0}. \end {aligned}} 其中, \boldsymbol {w} = \Sigma^{-1}(\boldsymbol {\mu}_{1} - \boldsymbol {\mu}_{2}), w_{0} = -\frac {1}{2}(\boldsymbol {x} - \boldsymbol {\mu}_{2})^{\mathrm {T}}\Sigma^{-1}(\boldsymbol {x} - \boldsymbol {\mu}_{2}) + \ln {\frac {\mathop {\mathbf {P}}(C_{1})}{\mathop {\mathbf {P}}(C_{2})}}.
根據指數函數的性質, 有 \displaystyle {\mathrm {e}^{\ln {\frac {\mathop {\mathbf {P}}(C_{1}|\boldsymbol {x})}{1 - \mathop {\mathbf {P}}(C_{1}|\boldsymbol {x})}}} = \mathrm {e}^{\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + w_{0}}}. 令 y = \frac {\mathop {\mathbf {P}}(C_{1}|\boldsymbol {x})}{1 - \mathop {\mathbf {P}}(C_{1}|\boldsymbol {x})}, 可得乙狀函數 (sigmoid function) \displaystyle {y = \mathop {\mathrm {sigmoid}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + w_{0}) = \frac {1}{1 + \mathrm {e}^{-\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + w_{0}}}}. 在檢驗階段, 給定 \boldsymbol {x}, 我們可以
- 計算 g(\boldsymbol {x}) = \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + w_{0}. 若 g(\boldsymbol {x}) > 0, 則選擇 C_{1}; 否則, 選擇 C_{2};
- 計算 y = \mathop {\mathrm {sigmoid}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + w_{0}). 若 y > \frac {1}{2}, 則選擇 C_{1}; 否則, 選擇 C_{2}.
第二種情況下, 乙狀函數將判別式的值變成了一個事後機率. 對於二分類問題且這個問題有且唯有一個判別式的時候, 這是有效的.
除了上面介紹的之外, 還有一種判別式是羅吉斯判別式, 它並不是對類別條件機率 p(\boldsymbol {x}|C_{i}) 進行估計, 而是對其比率進行估計. 考慮二分類問題, 並假設對數概似比是線性的 : \displaystyle {\ln {\frac {\mathop {\mathbf {P}}(\boldsymbol {x}|C_{1})}{\mathop {\mathbf {P}}(\boldsymbol {x}|C_{2})}} = \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + w_{0}^{o}}. 當類別條件分佈服從常態分佈的時候, 這種假設確實成立. 但是, 如果 \boldsymbol {x} 是離散的或者連續與離散混合的, 那麼羅吉斯判別式有更廣泛的應用.
根據 Bayes 規則, 我們有 \displaystyle {\mathop {\mathrm {logit}} \big ( \mathop {\mathbf {P}}(C_{1}|\boldsymbol {x}) \big ) = \ln {\frac {\mathop {\mathbf {P}}(C_{1}|\boldsymbol {x})}{1 - \mathop {\mathbf {P}}(C_{1}|\boldsymbol {x})}} = \ln {\frac {\mathop {\mathbf {P}}(\boldsymbol {x}|C_{1})}{\mathop {\mathbf {P}}(\boldsymbol {x}|C_{2})}} + \ln {\frac {\mathop {\mathbf {P}}(C_{1})}{\mathop {\mathbf {P}}(C_{2})}} = \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + w_{0}}. 其中, w_{0} = w_{0}^{o} + \ln {\frac {\mathop {\mathbf {P}}(C_{1})}{\mathop {\mathbf {P}}(C_{2})}}. 重新整理過後, 得到乙狀函數 : \displaystyle {y = \hat {\mathop {\mathbf {P}}}(C_{1}|\boldsymbol {x}) = \frac {1}{1 + \mathrm {e}^{-(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + w_{0})}}}. 作為 \mathop {\mathbf {P}}(C_{1}|\boldsymbol {x}) 的估計. 接下來的問題就是如何從樣本 X = \left \{ \boldsymbol {x}^{\mathrm {t}}, r^{\mathrm {t}} \right \} 中學習得 \boldsymbol {w} 和 w_{0}. 其中, 若 \boldsymbol {x}^{\mathrm {t}} \in C_{1}, 則 r^{\mathrm {t}} = 1; 若 \boldsymbol {x}^{\mathrm {t}} \in C_{2}, 則 r^{\mathrm {t}} = 0.
我們假定給定的 \boldsymbol {x}^{\mathrm {t}} 和 r^{\mathrm {t}} 服從 Bernoulli 分佈, 那麼樣本的概似可以寫為 \displaystyle {\ell(\boldsymbol {w}, w_{0}|X) = \prod \limits_{\mathrm {t}}y^{r^{\mathrm {t}}}(1 - y)^{1 - r^{\mathrm {t}}}}. 我們將其轉化為誤差函數 \mathrm {E} = -ln {\ell}, 那麼有 \displaystyle {\mathop {\mathrm {E}}(\boldsymbol {w}, w_{0}|X) = -\sum \limits_{\mathrm {t}}r^{\mathrm {t}}\ln {y} + (1 - r^{\mathrm {t}})\ln {(1 - y)}}. 顯然, 乙狀函數不是線性的, 然而對於 f(y) = \frac {1}{1 + \mathrm {e}^{-y}}, 其導數為 \displaystyle {f'(y) = \frac {1}{\mathrm {e}^{y}(1 + \mathrm {e}^{-y})^{2}} = f(y)f(1 - y)}. 對於 y^{\mathrm {t}} = \mathop {\mathrm {sigmoid}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + w_{0}), 它的極值非常難求. 因此, 我們使用梯度下降法 (gradiant descent). 在梯度下降法中, 我們首先求得多變數函數的梯度向量 : \displaystyle {\nabla f = \left ( \frac {\partial {f}}{\partial {w_{1}}}, \frac {\partial {f}}{\partial {w_{2}}}, ..., \frac {\partial {f}}{\partial {w_{d}}} \right )^{\mathrm {T}}}. 然後每次朝著梯度的反方向更新 \boldsymbol {w}. 其中, \displaystyle {\Delta w_{i} = -\eta \frac {\partial f}{\partial w_{i}}}, \displaystyle {w_{i} \leftarrow w_{i} + \Delta w_{i}}, 其中, j = 1, 2, ..., d, \eta 是學習因素 (learning factor). 在羅吉斯判別式中, 我們想要最小化 \mathop {\mathrm {E}}(\boldsymbol {w}, w_{0}|X). 那麼根據梯度下降法, 有 \displaystyle {\Delta w_{j} = -\eta \frac {\partial {\mathop {\mathrm {E}}}}{\partial {w_{j}}} = \eta\sum \limits_{\mathrm {t}}\left ( \frac {r^{\mathrm {t}}}{y^{\mathrm {t}}} - \frac {1 - r^{\mathrm {t}}}{1 - y^{\mathrm {t}}} \right )y^{\mathrm {t}}(1 - y^{\mathrm {t}})x_{j}^{\mathrm {t}} = \eta \sum \limits_{\mathrm {t}}(r^{\mathrm {t}} - y^{\mathrm {t}})x_{j}^{\mathrm {t}}}, \displaystyle {\Delta w_{0} = -\eta \frac {\partial {\mathop {\mathrm {E}}}}{\partial {w_{0}}} = \eta \sum \limits_{\mathrm {t}}(r^{\mathrm {t}} - y^{\mathrm {t}})}. 其中, j = 1, 2, ..., d. 然後我們用接近於 0 的亂數初始化 w_{j}. 為了說明原因, 我們首先來看一下函數 y = \frac {1}{1 + \mathrm {e}^{-x}} 的圖像 :
我們可以看到, 越接近 0, 曲線的抖動越大. 當 x > 5 或者 x < -5 時, 曲線變化非常小, 導數接近於 0.
對於給定的 w_{j}, 利用梯度下降法針對所有可能的 j = 1, 2, ..., d 求 \Delta w_{j}, 然後更新 w_{j}. 不斷重複這樣的過程, 直到 \Delta w_{j} 收斂為止.
在檢驗時, 給定 \boldsymbol {x}^{\mathrm {t}}, 我們計算 y^{\mathrm {t}} = \mathop {\mathrm {sigmoid}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0}). 如果 y^{\mathrm {t}} > \frac {1}{2}, 那麼選擇 C_{1}; 否則, 選擇 C_{2}. 這意味著, 我們並不需要一直學習直到所有 y^{\mathrm {t}} = 0 或所有 y^{\mathrm {t}} = 0, 而只需要學習到 y^{\mathrm {t}} 大於或者小於 \frac {1}{2} 即可. 但是如果我們選擇繼續學習, 錯誤分類的數量並不會減少. 事實上, 在達到零偏差之前就提前停止學習是一種正則化的形式. 因為以權重幾乎為 0 開始, 並且它們隨著學習而繼續遠離 0, 所以提前停止對應於具有更多接近於 0 權重而事實上參數更少的模型.
現在, 我們需要將二分類問題推廣到多分類問題. 我們取其中一個類別, 例如 C_{k}, 作為參考類別並且假定 \displaystyle {\ln {\frac {\mathop {\mathbf {P}}(\boldsymbol {x}|C_{i})}{p(\boldsymbol {x}|C_{K})}} = \boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x} + w_{i0}^{o}}. 於是, 有 \displaystyle {\frac {\mathop {\mathbf {P}}(C_{i}|\boldsymbol {x})}{\mathop {\mathbf {P}}(C_{K}|\boldsymbol {x})} = \mathrm {e}^{\boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x} + w_{i0}}}. 其中, w_{i0} = w_{i0}^{o} + \ln {\frac {\mathop {\mathbf {P}}(C_{i})}{\mathop {\mathbf {P}}(C_{k})}}, K 是類別數量. 我們看到 \displaystyle {\sum \limits_{i = 1}^{K - 1}\frac {\mathop {\mathbf {P}}(C_{i}|\boldsymbol {x})}{\mathop {\mathbf {P}}(C_{K}|\boldsymbol {x})} = \frac {1 - \mathop {\mathbf {P}}(C_{K}|\boldsymbol {x})}{\mathop {\mathbf {P}}(C_{K}|\boldsymbol {x})} = \sum \limits_{i = 1}^{K - 1}\mathrm {e}^{\boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x} + w_{i0}} \Rightarrow \mathop {\mathbf {P}}(C_{K}|\boldsymbol {x}) = \frac {1}{1 + \sum \limits_{i = 1}^{K - 1}\mathrm {e}^{\boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x} + w_{i0}}}}. 除此之外, \displaystyle {\frac {\mathop {\mathbf {P}}(C_{i}|\boldsymbol {x})}{\mathop {\mathbf {P}}(C_{K}|\boldsymbol {x})} = \mathrm {e}^{\boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x} + w_{i0}} \Rightarrow \mathop {\mathbf {P}}(C_{i}|\boldsymbol {x}) = \frac {\mathrm {e}^{\boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x} + w_{i0}}}{1 + \sum \limits_{j = 1}^{K - 1}\mathrm {e}^{\boldsymbol {w}_{j}^{\mathrm {T}}\boldsymbol {x} + w_{j0}}}}. 其中, i = 1, 2, ..., K - 1. 為了一致地處理所有的類別, 我們記 \displaystyle {y_{i} = \hat {\mathop {\mathbf {P}}}(C_{i}|\boldsymbol {x}) = \frac {\mathrm {e}^{\boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x} + w_{i0}}}{1 + \sum \limits_{j = 1}^{K - 1}\mathrm {e}^{\boldsymbol {w}_{j}^{\mathrm {T}}\boldsymbol {x} + w_{j0}}}}. 其中, i = 1, 2, ..., K. 我們稱上式為 softmax 函數 (softmax function). 如果某個類別的加權和明顯大於其它類別的加權和, 那麼通過取指數和規範化之後, 它對應的 y_{i} 將接近於 1, 而剩餘的 y_{j} (i \neq j) 接近於 0. 這樣, 除了可導之外, 它就像是取最大值, 名稱因此而來. 除此之外, softmax 函數還保證了 \sum \limits_{i}y_{i} = 1.
在二分類問題中, 我們假定樣本是服從 Bernoulli 分佈的, 而在多分類問題中, 我們將假設 \boldsymbol {x}^{\mathrm {t}} 和 \boldsymbol {r}^{\mathrm {t}} 服從多項分佈. 對於 \boldsymbol {y}^{\mathrm {t}} = \big ( \mathop {\mathbf {P}}(C_{1}|\boldsymbol {x}), \mathop {\mathbf {P}}(C_{2}|\boldsymbol {x}), ..., \mathop {\mathbf {P}}(C_{K}|\boldsymbol {x}) \big )^{\mathrm {T}}, 樣本的概似為 \displaystyle {\ell(\left \{ \boldsymbol {w}_{i}, w_{i0} \right \}_{i}|X) = \prod \limits_{\mathrm {t}}\prod \limits_{i}(y^{\mathrm {t}})^{r_{i}^{\mathrm {t}}}}. 於是, 誤差函數為 \displaystyle {\mathop {\mathrm {E}}(\left \{ \boldsymbol {w}_{i}, w_{i0} \right \}_{i}|X) = -\sum \limits_{\mathrm {t}}\sum \limits_{i}r_{i}^{\mathrm {t}}\ln {y_{i}^{\mathrm {t}}}}. 我們針對 \mathrm {E} 使用梯度下降法. 如果 f(y_{i}) = \frac {\mathrm {e}^{y_{i}}}{\sum \limits_{j}\mathrm {e}^{y_{j}}}, 那麼有 \displaystyle {\frac {\partial {f}}{\partial {y_{j}}} = y_{i}(\delta_{ij} - y_{j})}. 其中, \displaystyle {\delta_{ij} = \begin {cases} 1 & {i = j} \\ 0 & {i \neq j}. \end {cases}} 給定 \sum \limits_{i}r_{i}^{\mathrm {t}} = 1, 對於 j = 1, 2, ..., K, 有 \displaystyle {\begin {aligned} \Delta \boldsymbol {w}_{j} &= \eta\sum \limits_{\mathrm {t}}\sum \limits_{i}\frac {r_{i}^{\mathrm {t}}}{y_{i}^{\mathrm {t}}}y_{i}^{\mathrm {t}}(\delta_{ij} - y_{j}^{\mathrm {t}})\boldsymbol {x}^{\mathrm {t}} \\ &= \eta\sum \limits_{\mathrm {t}}\sum \limits_{i}r_{i}^{\mathrm {t}}(\delta_{ij} - y_{j}^{\mathrm {t}})\boldsymbol {x}^{\mathrm {t}} \\ &= \eta \sum \limits_{\mathrm {t}}\left ( \sum \limits_{i}r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}}\sum \limits_{i}r_{i}^{\mathrm {t}} \right )\boldsymbol {x}^{\mathrm {t}} \\ &= \eta \sum \limits_{\mathrm {t}}(r_{j}^{\mathrm {t}} - y_{j}^{\mathrm {t}})\boldsymbol {x}^{\mathrm {t}}, \end {aligned}} \displaystyle {\Delta w_{j0} = \eta\sum \limits_{{\mathrm {t}}}(r_{j}^{\mathrm {t}} - y_{j}^{\mathrm {t}})}. 在檢驗階段, 我們計算所有 y_{k} (k = 1, 2, …, K), 如果 y_{i} = \max x_{k}y_{k}, 那麼我們選擇 C_{i}. 我們仍然不必為了使得最小化 \mathrm {E} 而一直學習, 只需要學習到正確的類別具有最大的加權和, 並且可以通過檢查錯誤分類數量即可.
當學習樣本是常態分佈的時候, 羅吉斯判別式與基於常態分佈且參數的線性判別式具有差不多的錯誤率. 當類別條件分布並不是常態分佈的時候, 或者它們是存在多個極值的分佈的時候, 只要類別是線性可分的, 那麼羅吉斯判別式仍然可以使用.
之前我們稍微討論了二次判別式的情況, 如果我們有 \displaystyle {\ln {\frac {p(\boldsymbol {x}|C_{i})}{p(\boldsymbol {x}|C_{K})}} = \boldsymbol {x}^{\mathrm {T}}W_{i}\boldsymbol {x} + \boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x} + w_{i0}}. 對應於並推廣具有不同協方差矩陣且類別分佈滿足多變數常態分佈的參數判別式. 當 d 很大的時候, 我們可能會首先進行主成分分析, 取前面的特徵向量, 對 W_{i} 做同樣的事.
接下來, 我們來討論回歸的情況. 對於回歸問題, 機率模型是 \displaystyle {r^{\mathrm {t}} = y^{\mathrm {t}} + \varepsilon}. 其中, \varepsilon 服從均值為 0 且方差為 \sigma^{2} 的常態分佈. 如果 r^{\mathrm {t}} \in \left \{ 0, 1 \right \}, 那麼使用乙狀函數, y^{\mathrm {t}} 可能限於落在該區間. 假定線性模型和兩個類別, 有 \displaystyle {y^{\mathrm {t}} = \mathop {\mathrm {sigmoid}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0}) = \frac {1}{1 + \mathrm {e}^{-(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0})}}}. 現在, 我們假定 \boldsymbol {r} 和 \boldsymbol {x} 服從均值為 y 且方差為 \sigma^{2} 的常態分佈, 那麼回歸中的樣本概似可以寫為 \displaystyle {\ell(\boldsymbol {w}, w_{0}|X) = \prod \limits_{\mathrm {t}}\frac {1}{\sqrt {2\pi^{\theta}}}\mathrm {e}^{-\frac {(r^{\mathrm {t}} - y^{\mathrm {t}})^{2}}{2\sigma^{2}}}}. 那麼誤差函數為 \displaystyle {\mathop {\mathrm {E}}(\boldsymbol {w}, w_{0}|X) = \frac {1}{2}\sum \limits_{t}(r^{\mathrm {t}} - y^{\mathrm {t}})^{2}}. 根據梯度下降法, 我們有 \displaystyle {\Delta \boldsymbol {w} = \eta \sum \limits_{\mathrm {t}}(r^{\mathrm {t}} - y^{\mathrm {t}})y^{\mathrm {t}}(1 - y^{\mathrm {t}})\boldsymbol {x}^{\mathrm {t}}}, \displaystyle {\Delta w_{0} = \eta \sum \limits_{\mathrm {t}}(r^{\mathrm {t}} - y^{\mathrm {t}})y^{\mathrm {t}}(1 - y^{\mathrm {t}})}.
對於 K > 2 的情況也可以用相同的方法. 此時, 機率模型為 \displaystyle {\boldsymbol {r}^{\mathrm {t}} = \boldsymbol {y}^{\mathrm {t}} + \boldsymbol {\varepsilon}}. 其中, \boldsymbol {\varepsilon} 服從均值為 \boldsymbol {0} 且方差為 \sigma^{2}\mathrm {E}_{K} 的常態分佈, \mathrm {E}_{K} 為 K \times K 的單位矩陣. 為每個類別都假定一個線性模型, 有 \displaystyle {y_{i}^{\mathrm {t}} = \mathop {\mathrm {sigmoid}}(\boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0}) = \frac {1}{1 + \mathrm {e}^{-(\boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0})}}}. 於是, 樣本的概似為 \displaystyle {\ell(\left \{ \boldsymbol {w}, w_{0} \right \}_{i}|X) = \prod \limits_{\mathrm {t}}\frac {1}{\sqrt {2\pi^{\frac {K}{2}}}\sqrt {\det {\Sigma}}}\mathrm {e}^{-\frac {\| \boldsymbol {r}^{\mathrm {t}} - \boldsymbol {y}^{\mathrm {t}} \|^{2}}{2\sigma^{2}}}}. 那麼, 誤差函數為 \displaystyle {\mathop {\mathrm {E}}(\left \{ \boldsymbol {w}, w_{0} \right \}_{i}|X) = \frac {1}{2}\sum \limits_{t}\left \| \boldsymbol {r}^{\mathrm {t}} - \boldsymbol {y}^{\mathrm {t}} \right \|^{2} = \frac {1}{2} \sum \limits_{\mathrm {t}}\sum \limits_{i}(\boldsymbol {r}_{i}^{\mathrm {t}} - \boldsymbol {y}_{i}^{\mathrm {t}})^{2}}. 對於 i = 1, 2, ..., K, 根據梯度下降法, 有 \displaystyle {\Delta \boldsymbol {w} = \eta \sum \limits_{\mathrm {t}}(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}})y_{i}^{\mathrm {t}}(1 - y_{i}^{\mathrm {t}})\boldsymbol {x}^{\mathrm {t}}}, \displaystyle {\Delta w_{0} = \eta \sum \limits_{\mathrm {t}}(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}})y_{i}^{\mathrm {t}}(1 - y_{i}^{\mathrm {t}})}. 有兩個地方需要注意的是, 我們並沒有 "使用 y_{i} 中的一個為 1 , 其餘為 0, 又或者 \sum \limits_{i}y_{i} = 1" 這樣的信息. 因為輸出的是類別事後機率的估計. 在 K > 2 的情況下, 使用乙狀函數, 我們像對待獨立函數一樣對待 y_{i}. 除此之外, 對於給定的類別, 如果我們使用回歸的方法, 則更新將進行知道正確的輸出為 1, 其餘為 0 時才停止. 事實上, 並沒有這個必要. 因為, 在檢驗時, 我們只選擇最大的那一個. 學習直到正確的輸出大於其它輸出就足夠了.
對於 \boldsymbol {x}^{\mathrm {t}}, 如果所有可能的 r_{i}^{\mathrm {t}} 可能都為 0 或者存在多個 r_{i}^{\mathrm {t}} 都為 1, 這種具有多個乙狀函數的方法更可取.
排名學習 (ranking learning) 是介於分類和回歸之間的機器學習分支, 但是排名學習沒有輸入 \boldsymbol {x}^{\mathrm {t}} 和期望輸出 r^{\mathrm {t}}, 而是希望我們把兩個或者多個樣本放在正確的次序中. 例如, 假設 \boldsymbol {x}^{\mathrm {u}} 和 \boldsymbol {x}^{\mathrm {v}} 代表兩部電影, 如果用戶喜歡電影 u 超過電影 v, 記作 r^{\mathrm {u}} \prec r^{\mathrm {v}}. 這時, 我們學習的不再是判別式或者回歸函數, 而是一個評分函數 g(\boldsymbol {x}|\theta). 除此之外, 重要的並不是 g(\boldsymbol {x}^{\mathrm {u}}|\theta) 和 g(\boldsymbol {x}^{\mathrm {v}}|\theta) 的絕對數值, 而是需要給 \boldsymbol {x}^{\mathrm {u}} 一個比 \boldsymbol {x}^{\mathrm {v}} 更高的分數. 換句話說, 對於所有這樣的 (\mathrm {u}, \mathrm {v}), 都應該滿足 \displaystyle {g(\boldsymbol {x}^{\mathrm {u}}|\theta) > g(\boldsymbol {x}^{\mathrm {v}}|\theta)}. 與之前一樣, 假定某個模型 g(\cdot), 並優化它的參數 \theta, 使得所有的排名約束都滿足. 對於電影問題, 我們有 : 選擇電影 u 若且唯若 g(\boldsymbol {x}^{\mathrm {i}}|\theta) = \max \limits_{\mathrm {t}}g(\boldsymbol {x}^{\mathrm {t}}|\theta). 不過對於電影問題, 如果用戶將電影列為 "Like" 或者 "Dislike", 這邊是一個二分類問題. 但是, 這種評級對於電影問題比較困難, 人們一般對電影進行評分 (1 - 5 分或者 1 - 10 分) 來評價自己對某一部電影的熱愛. 這又是一個回歸問題, 但是這種回歸問題的絕對數值很難指派, 人們更喜歡哪一部電影並不是一個數值可以聚決定的.
排名器可以使用許多不同的方式進行學習. 對於所有的 (\mathrm {u}, \mathrm {v}), 其中 r^{\mathrm {u}} \prec r^{\mathrm {v}}, 如果 g(\boldsymbol {x}^{\mathrm {v}}|\theta) > g(\boldsymbol {x}^{\mathrm {u}}|\theta), 那麼就存在一個錯誤. 一般來說, 我們沒有全部的 (\mathrm {u}, \mathrm {v}), 而只有它的一個子集上的排序, 從而定義一個偏序. g(\boldsymbol {x}^{\mathrm {v}}|\theta) 與 g(\boldsymbol {x}^{\mathrm {u}}|\theta) 的差的和構成誤差 : \displaystyle {\mathop {\mathrm {E}}(\boldsymbol {w}|\left \{ r^{\mathrm {u}}, r^{\mathrm {v}} \right \}) = \sum \limits_{r^{\mathrm {u}} \prec r^{\mathrm {v}}} \big ( g(\boldsymbol {x}^{\mathrm {v}}|\theta) - g(\boldsymbol {x}^{\mathrm {u}}|\theta) \big )_{+}}. 其中, 如果 a \geq 0, 則 a_{+} = a; 否則, a_{+} = 0. 假定我們像本章一樣使用線性模型 : \displaystyle {g(\boldsymbol {x}|\boldsymbol {w}) = \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}}. 因為我們不關心絕對的數值, 所以我們不需要 w_{0}, 那麼誤差函數為 \displaystyle {\mathop {\mathrm {E}}(\boldsymbol {w}|\left \{r^{\mathrm {u}}, r^{\mathrm {v}} \right \}) = \sum \limits_{r^{\mathrm {u}} \prec r^{\mathrm {v}}} \boldsymbol {w}^{\mathrm {T}}(\boldsymbol {x}^{\mathrm {v}} - \boldsymbol {x}^{\mathrm {u}})_{+}}. 然後, 我們使用梯度下降法. 對於每個 r^{\mathrm {u}} \prec r^{\mathrm {v}}, 其中 g(\boldsymbol {x}^{\mathrm {v}}|\theta) > g(\boldsymbol {x}^{\mathrm {u}}|\theta), 有 \displaystyle {\Delta w_{j} = -\eta \frac {\partial {\mathop {\mathrm {E}}}}{\partial {w_{j}}} = -\eta(\boldsymbol {x}_{j}^{\mathrm {v}} - \boldsymbol {x}_{j}^{\mathrm {u}})}. 其中, j = 1, 2, ..., d. 選擇 \boldsymbol {w}, 使得樣本影射到 \boldsymbol {w} 上時, 就可以得到正確的排序. 值得注意的是, 排名的微小變化可以導致 \boldsymbol {w} 的大變化.
在本章的最後, 我再介紹幾個乙狀函數 :
- f(x) = \tanh {x} = \frac {\mathrm {e}^{x} - \mathrm {e}^{-x}}{\mathrm {e}^{x} + \mathrm {e}^{-x}};
- f(x) = \arctan {x};
- f(x) = \mathop {\mathrm {gd}}(x) = \displaystyle {\int}_{0}^{x}\frac {1}{\cosh {t}}\mathrm {d}t = 2\arctan {\left ( \tanh \left ( \frac {x}{2} \right ) \right )};
- f(x) = \mathop {\mathrm {erf}}(x) = \frac {2}{\sqrt {\pi}}\displaystyle {\int}_{0}^{x}\mathrm {e}^{-t^{2}}\mathrm {d}{t};
- f(x) = \left ( 1 + \mathrm {e}^{-x} \right )^{-\alpha}. 其中, \alpha > 0;
- f(x) = \begin {cases}\frac {\displaystyle {\int}_{0}^{x}(1 - u^{2})^{N}\mathrm {d}{u}}{\displaystyle {\int}_{0}^{1}(1 - u^{2})^{N}\mathrm {d}{u}} & {\left | x \right | \leq 1} \\ \mathop {\mathrm {sgn}}(x) & {\left | x \right | \geq 1}. \end {cases} 其中, N \geq 1;
- f(x) = \frac {x}{\sqrt {(1 + x^{2})}}.
所有連續非負的凸形函數的積分都是乙狀函數.
11. 多層感知器
人工神經網絡, 簡稱為神經網絡, 是人工智慧領域最出名的詞語之一. 它模仿的是信息在大腦神經元中的傳遞. 學過中學生物, 你可能了解, 信息在神經元中的傳遞, 是通過突觸之間神經遞質的釋放和接近.
我們從最簡單的感知器開始講起. 感知器是基本處理組件, 它具有輸入. 感知器的輸入可能來自於環境或者其它感知器的輸出, 和每個輸入 x_{j} 相關聯的是連結權重 w_{j}. 在最簡單的情況下, 輸出 y 是輸入的加權和 : \displaystyle {y = \sum \limits_{j = 1}^{d}w_{j}x_{j} + w_{0}}. 其中, w_{0} 通常作為一個來自於附加的偏好 x_{0} 的權重, 而 x_{0} \equiv 1. 那麼, 我們可以將感知器的輸出寫成向量的形式 : \displaystyle {y = \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}}. 此時, 我們需要的是學習到每一個感知器對應的連結權重 \boldsymbol {w}. 為了說明感知器和前面的模型的不同之處, 我們首先來看一下簡單感知器的圖示 :
當 d = 1 時, 感知器便可以模擬線性模型; 當 d > 1 時, 感知器便可以模擬多變數的線性模型. 對於上面的感知器模型, 它僅能夠將輸入空間劃分為兩個部分, 因此若 y > 0, 我們選擇 C_{1}, 否則選擇 C_{2}. 如果在分類的時候, 需要使用事後機率, 那麼需要在感知器的輸出上套一層乙狀函數.
現在, 我們來觀察另一個簡單感知器 :
這個模型中有 k 個感知器, 每個感知器都存在權重向量 \boldsymbol {w}_{i}, 於是有 \displaystyle {y_{i} = \sum \limits_{j = 1}^{d}w_{ij}x_{j} + w_{i0} = \boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x}}. 寫成矩陣的形式, 有 \displaystyle {\boldsymbol {y} = W\boldsymbol {x}}. 其中, w_{ij} 定義為輸入 x_{j} 到輸出 y_{i} 的連結權重. 當用於分類的時候, 如果 y_{i} = \max \limits_{k} \{ y_{k} \}, 那麼我們選擇 C_{i}. 對於 k 個感知器的簡單感知器模型, 每個感知器是它的輸入和連結權重的局部函數. 在分類中, 如果需要事後機率並使用 softmax 函數, 那麼還需要所有的輸出值. 將其作為神經網絡實作導致一個二階段的過程. 其中, 第一個階段計算加權和, 第二個階段計算 softmax 函數.
前面講過, 通過定義輔助輸入, 例如記 x_{3} = x_{1}^{2}, x_{4} = x_{2}^{2}, x_{5} = x_{1}x_{2}, 線性模型也可以用於多項式近似. 對於感知器, 也可以這樣去做.
在神經網絡的參數學習中, 如果樣本沒有提供完全, 那麼可以使用在線學習的方式, 在每個樣本到達之後更新感知器的參數即可. 雖然稍早的模型可能存在精確度稍低的缺點, 但是隨著樣本的到來, 精確度會不斷提高. 除此之外, 我們無須存放學習的樣本, 也可以應對各種可能的突發狀況. 對於在線學習來說, 從隨機的參數開始, 每一次迭代的過程都是對參數的調整, 以最小化誤差. 如果誤差函數是可微函數, 那麼我們可以使用梯度下降. 例如對於回歸問題, 樣本 (\boldsymbol {x}^{\mathrm {t}}, r^{\mathrm {t}}) 上的誤差函數定義為 \displaystyle {\mathop {\mathrm {E}}^{\mathrm {t}}(\boldsymbol {w}|\boldsymbol {x}^{\mathrm {t}}, r^{\mathrm {t}}) = \frac {1}{2}(r^{\mathrm {t}} - y^{\mathrm {t}})^{2} = \frac {1}{2}(r^{\mathrm {t}} - \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}})^{2}}. 對於 j = 0, 1, 2, ..., d, 在線更新學習函數為 \displaystyle {\Delta w_{j}^{\mathrm {t}} = \eta(r^{\mathrm {t}} - y^{\mathrm {t}})x_{j}^{\mathrm {t}}}. 其中, \eta 是學習因素, 為了達到收斂, 它逐漸減小. 這被稱為隨機梯度下降 (random gradiant descent).
對於使用了乙狀函數的感知器, 有 \displaystyle {y^{\mathrm {t}} = \mathop {\mathrm {sigmoid}}(\boldsymbol {w}^{\mathrm {T}})\boldsymbol {x}^{\mathrm {t}}}. 誤差函數為 \displaystyle {\mathop {\mathrm {E}}^{\mathrm {t}}(\boldsymbol {w}|\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {r}^{\mathrm {t}}) = -\boldsymbol {r}^{\mathrm {t}}\ln {y^{\mathrm {t}}} + (1 - \boldsymbol {r}^{\mathrm {t}})\ln {(1 - y^{\mathrm {t}})}}. 使用梯度下降, 對於 j = 0, 1, 2, ..., d, 得到的更新規則為 \displaystyle {\Delta w_{j}^{\mathrm {t}} = \eta(r^{\mathrm {t}} - y^{\mathrm {t}})x_{j}^{\mathrm {t}}}.
如果感知器的數量大於兩個, 對於單個樣本 (\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {r}^{\mathrm {t}}), 其中如果 \boldsymbol {x}^{\mathrm {t}} \in C_{i}, 則 r_{i}^{\mathrm {t}} = 1; 否則, r_{i}^{\mathrm {t}} = 0, 輸出為 \displaystyle {y_{i}^{\mathrm {t}} = \frac {\mathrm {e}^{\boldsymbol {w}_{i}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}}}}{\sum \limits_{k}\mathrm {e}^{\boldsymbol {w}_{k}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}}}}}. 那麼誤差函數為 \displaystyle {\mathop {\mathrm {E}}^{\mathrm {t}}(\{ \boldsymbol {w} \}_{i}|\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {r}^{\mathrm {t}}) = -\sum \limits_{i}r_{i}^{\mathrm {t}}\ln {y_{i}^{\mathrm {t}}}}. 使用梯度下降, 對於 i = 1, 2, ..., k 和 j = 0, 1, 2, ..., d, 得到的更新規則為 \displaystyle {\Delta w_{j}^{\mathrm {t}} = \eta(r^{\mathrm {t}} - y^{\mathrm {t}})x_{j}^{\mathrm {t}}}.
我們發現, 更新規則基本都有如下的形式 : \displaystyle {\text {更新} = \text {學習因素} \times (\text {期望輸出} - \text {實際輸出}) \times \text {輸入}}. 根據更新規則, 一旦期望輸出和實際輸出相同, 那麼不需要進行更新. 當進行更新的時候, 更新量隨著期望輸出與實際輸出之差的增加而增加. 我們還看到, 如果實際輸出小於期望輸出, 當輸入為正數的時候, 更新也為正數, 反之為負數. 這具有增加和降低實際輸出和降低與期望輸出之差的效果. 在更新的時候, 更新量還依賴於輸入. 如果輸入接近於 0, 那麼它對實際輸出的影響非常小, 因此權重用一個較小的量進行更新. 輸入越大, 權重的更新也就越大. 最後, 更新量也依賴於學習因素. 如果它太大, 則過分依賴於當前的樣本, 就像系統只有短期記憶; 如果它太小, 那麼需要很多次更新才可能收斂.
對於布林函數, 輸入和輸出僅有 0 和 1. 因此, 可以將其看作二分類問題. 對於二變數的邏輯與, 其真值表為
x_{1} | x_{2} | r |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
現在, 我們考慮異或, 其真值表為
x_{1} | x_{2} | r |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
中間層的感知器計算隱藏元的值, 並將得到的值放入乙狀函數的到最終的輸出 z_{h} : \displaystyle {z_{h} = \mathop {\mathrm {sigmoid}}(\boldsymbol {w}_{h}^{\mathrm {T}}\boldsymbol {x})}. 其中, h = 1, 2, ..., l. 輸出層 y_{i} 是中間層的感知器, 它取隱藏元的輸出作為輸入 : \displaystyle {y_{i} = \boldsymbol {v}_{i}^{\mathrm {T}}\boldsymbol {z} = \sum \limits_{h = 1}^{l}v_{ih}z_{h} + v_{i0}}. 其中, 中間層還會存在一個偏好單元, 記為 z_{0}, 一般來說位於模型中間層的第一個位置, 而 v_{i0} 是對應的偏好. 需要注意的是, 輸出層並不會直接處理輸入層 \boldsymbol {x} 的任何資料, 因為它們由中間層來處理, 它們只接受中間層的輸出作為輸入.
現在考慮一個問題 : 是否有必要使用多層感知器模擬線性函數? 答案很明顯是不需要, 因為線性組合的線性組合仍然是線性組合, 使用多層感知器製造多個線性組合是多此一舉的. 基於這樣的思想, 我們可以說多層感知器實際上是一種 d 維空間的輸入到中間層生成 l 維空間的非線性變換.
當然, 多層感知器不只是可以擁有一層中間層, 它可以擁有很多層. 一般來說, 我們希望減少輸出層的數量, 寧可增加中間層的數量. 這是明智的, 經驗表明 : "長而窄" 的網絡比 "短而胖" 的網絡具有更好的性能.
有了多層感知器之後, 我們希望使用多層感知器來模擬邏輯異或. 首先, 任何布林函數都可以表示為合取的析取. 例如, \displaystyle {x_{1} \oplus x_{2} = (x_{1} \wedge \neg x_{2}) \vee (\neg x_{1} \wedge x_{w})}. 前面, 我們已經使用感知器模擬了邏輯或和邏輯與. 因此, 兩個感知器可以平行地模擬兩個邏輯與, 然後使用另一個感知器模擬邏輯或就可以表達二變數的邏輯異或. 如果存在 d 個輸入, 那麼就可能需要 2^{d} 個隱藏單元. 這種結構適合搜尋而不是一般化的模型. 為此, 我們推廣到輸入值是連續的情況, 並且類似地說明連續輸入和輸出的任何函數都可以用多層感知器來近似. 對於每種輸入或者區域, 使用第一個隱藏層上的隱藏單元, 該區域可以被所有邊上的超平面所劃分. 第二個隱藏層對它們進行邏輯與, 然後圍住這個區域並將隱藏單元到輸出單元的連結權重設定為期望的函數值. 這給出了函數的分段常數近似, 這將對應於使用 Taylor 公式忽略掉常數項之外的所有項. 增加隱藏單元的數量, 並在輸入空間中取更細的網格, 可以提高逼近期望值的精度. 需要注意的是, 期望的隱藏單元數量不存在上限. 這種性質只是確保存在一個解. 這被稱為通用近似定理.
訓練一個多層感知器和訓練一個感知器一樣, 唯一的區別就是現在的輸出是輸入的非線性函數. 現在, 我們已經知道給定輸入 z_{h} 的情況下, 如何更新參數 v_{ij}. 對於第一層的權重 w_{hj}, 使用多元複合函數微分法, 可得 \displaystyle {\frac {\partial {\mathrm {E}}}{\partial {w_{hj}}} = \frac {\partial {\mathrm {E}}}{\partial {y_{i}}}\frac {\partial {y_{i}}}{\partial {z_{h}}}\frac {\partial {z_{h}}}{\partial {w_{hj}}}}. 誤差就像從輸出 y 回傳到輸入一樣, 因此創造了新的術語, 叫做反向傳播 (backpropagation).
首先考慮具有單個輸出的非線性回歸 : \displaystyle {y^{\mathrm {t}} = \sum \limits_{h = 1}^{l}v_{h}z_{h}^{\mathrm {t}} + v_{0}}. 整個回歸樣本上的誤差函數為 \displaystyle {\mathop {\mathrm {E}}(W, \boldsymbol {v}|X) = \frac {1}{2}\sum \limits_{\mathrm {t}}(r^{\mathrm {t}} - y^{\mathrm {t}})^{2}} 第二層是以隱藏單元為輸入的感知器, 我們使用最小二乘法來更新第二層的權重 : \displaystyle {\Delta v_{h} = \eta \sum \limits_{\mathrm {t}}(r^{\mathrm {t}} - y^{\mathrm {t}})z_{h}^{\mathrm {t}}}. 第一層也由隱藏單元作為輸出單元的感知器組成, 但在更新第一層權重的時候, 我們不能直接使用最小二乘法. 因為對於這些隱藏單元, 我們沒有指定期望輸出. 而反向傳播在此起到作用, 我們有 \displaystyle {\begin {aligned} \Delta w_{hj} &= -\eta \frac {\partial {\mathrm {E}}}{\partial {w_{hj}}} \\ &= -\eta\sum \limits_{\mathrm {t}}\frac {\partial {\mathop {\mathrm {E}}^{\mathrm {t}}}}{\partial {y^{\mathrm {t}}}}\frac {\partial {y^{\mathrm {t}}}}{\partial {z_{h}^{\mathrm {t}}}}\frac {\partial {z_{h}^{\mathrm {t}}}}{\partial {w_{hj}}} \\ &= -\eta \sum \limits_{\mathrm {t}}\underbrace {-(r^{\mathrm {t}} - y^{\mathrm {t}})}_{\frac {\partial {\mathop {\mathrm {E}}^{\mathrm {t}}}}{\partial {y^{\mathrm {t}}}}}\underbrace {v_{h}}_{\frac {\partial {y^{\mathrm {t}}}}{\partial {z_{h}^{\mathrm {t}}}}}\underbrace {z_{h}^{\mathrm {t}}(1 - z_{h}^{\mathrm {t}})x_{j}^{\mathrm {t}}}_{\frac {\partial {z_{h}^{\mathrm {t}}}}{\partial {w_{hj}}}} \\ &= \eta \sum \limits_{\mathrm {t}}(r^{\mathrm {t}} - y^{\mathrm {t}})v_{h}z_{h}^{\mathrm {t}}(1 - z_{h}^{\mathrm {t}})x_{j}^{\mathrm {t}}. \end {aligned}} 前兩項乘積 (r^{\mathrm {t}} - y^{\mathrm {t}})v_{h} 充當隱藏單元 h 的誤差項. 這個誤差反向傳播到了隱藏單元. (r^{\mathrm {t}} - y^{\mathrm {t}}) 是輸出的誤差, 按隱藏單元的 "責任" 加權, 由其權重 v_{h} 給出. 在第三項中, z_{h}^{\mathrm {t}}(1 - z_{h}^{\mathrm {t}}) 是乙狀函數的導數, x_{j}^{\mathrm {t}} 是加權和關於權重 w_{hj} 的導數. 注意, 第一層權重的改變 \Delta w_{hj} 使用了第二層權重 v_{h}. 因此, 我們應當計算這兩層的改變, 並更新第一層的權重, 然後使用第二層權重的舊值更新第二層的權重.
初始時, 權重 w_{hj} 和 v_{h} 從隨機的足夠小的亂數開始, 使得乙狀函數不飽和. 規範化輸入使得它們具有零均值和單位方差, 並且具有相同尺度也是一種好的想法, 因為我們使用了單個 \eta 參數.
對於多個輸出的非線性回歸, 我們有 \displaystyle {y_{i}^{\mathrm {t}} = \sum \limits_{h = 1}^{l}v_{ih}z_{h}^{\mathrm {t}} + v_{i0}}. 誤差函數為 \displaystyle {\mathop {\mathrm {E}}(W, V|X) = \frac {1}{2}\sum \limits_{\mathrm {t}} \sum \limits_{i}(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}})^{2}}. 更新方程式為 \displaystyle {\Delta v_{ih} = \eta \sum \limits_{\mathrm {t}}(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}})z_{h}^{\mathrm {t}}}, \displaystyle {\Delta w_{hj} = \eta \sum \limits_{\mathrm {t}} \left ( \sum \limits_{i}(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}}v_{ih}) \right )z_{h}^{\mathrm {t}}(1 - z_{h}^{\mathrm {t}})x_{j}^{\mathrm {t}}}. 項 \sum \limits_{i}(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}}v_{ih}) 是從所有輸出單元累積的隱藏單元 h 的反向傳播誤差. 注意, 在這種情況下, 所有輸出單元共享相同的隱藏單元, 因而使用相同的隱藏表示, 因此我們假定對於這些不同的輸出, 我們有相關的預測問題. 一種可供選擇的方法是對每個回歸問題訓練一個多層感知器, 每個都有自己的隱藏單元.
對於二分類問題, 輸出層通常只有一個輸出單元, 且輸入層或者隱藏層的輸出結果通常會被巢狀到一個乙狀函數中 : \displaystyle {y^{\mathrm {t}} = \mathop {\mathrm {sigmoid}}\left ( \sum \limits_{h = 1}^{l}v_{h}z_{h}^{\mathrm {t}} + v_{0} \right )}. 它用於近似 \hat {\mathop {\mathbf {P}}}(C_{1}|\boldsymbol {x}^{\mathrm {t}}) = y^{\mathrm {t}} 和 \hat {\mathop {\mathbf {P}}}(C_{2}|\boldsymbol {x}^{\mathrm {t}}) = 1 - y^{\mathrm {t}}. 誤差函數為 \displaystyle {\mathop {\mathrm {E}}(W, \boldsymbol {v}|X) = -\sum \limits_{\mathrm {t}}r^{\mathrm {t}}\ln {y^{\mathrm {t}}} + (1 - y^{\mathrm {t}})\ln {(1 - y^{\mathrm {t}})}}. 更新方程式為 \displaystyle {\Delta v_{h} = \eta \sum \limits_{\mathrm {t}}(r^{\mathrm {t}} - y^{\mathrm {t}})z_{h}^{\mathrm {t}}}, \displaystyle {\Delta w_{hj} = \eta \sum \limits_{\mathrm {t}} (r^{\mathrm {t}} - y^{\mathrm {t}})v_{h}z_{h}^{\mathrm {t}}(1 - z_{h}^{\mathrm {t}})x_{j}^{\mathrm {t}}}. 儘管更新方程式和簡單的感知器相同, 但是值不一定相同.
對於多分類問題, 存在 k 個輸出 : \displaystyle {o_{i}^{\mathrm {t}} = \sum \limits_{h = 1}^{l}v_{ih}z_{h}^{\mathrm {t}} + v_{i0}}. 我們使用乙狀函數的到最終的輸出 : \displaystyle {y^{\mathrm {t}} = \frac {\mathrm {e}^{o_{i}^{\mathrm {t}}}}{\sum \limits_{k}\mathrm {e}^{o_{k}^{\mathrm {t}}}}}. 其中, y_{i} 近似 \hat {\mathop {\mathbf {P}}}(C_{i}|\boldsymbol {x}^{\mathrm {t}}). 誤差函數為 : \displaystyle {\mathop {\mathrm {E}}(W, V|X) = -\sum \limits_{\mathrm {t}}\sum \limits_{i}r_{i}^{\mathrm {t}}\ln {y_{i}^{\mathrm {t}}}}. 更新方程式為 : \displaystyle {\Delta v_{ih} = \eta \sum \limits_{\mathrm {t}}(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}})z_{h}^{\mathrm {t}}}, \displaystyle {\Delta w_{hj} = \eta \sum \limits_{\mathrm {t}}\left ( \sum \limits_{i}(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}} \right )v_{ih}z_{h}^{\mathrm {t}}(1 - z_{h}^{\mathrm {t}})x_{j}^{\mathrm {t}}}.
一個多層感知器可以擁有不止一個隱藏層, 每個隱藏層都有自己的權重, 並將結果複合至乙狀函數中. 對於回歸問題, 若多層感知器由兩個隱藏層, 那麼我們有 \displaystyle {z_{1h} = \mathop {\mathrm {sigmoid}}(\boldsymbol {w}_{1h}^{\mathrm {T}}\boldsymbol {x}) = \mathop {\mathrm {sigmoid}}\left ( \sum \limits_{j = 1}^{d}w_{1hj}x_{j} + w_{1h0} \right )}, \displaystyle {z_{2l} = \mathop {\mathrm {sigmoid}}(\boldsymbol {w}_{2l}^{\mathrm {T}}\boldsymbol {z}_{1}) = \mathop {\mathrm {sigmoid}}\left ( \sum \limits_{h = 1}^{h_{1}}w_{2hl}z_{1h} + w_{2l0} \right )}, \displaystyle {y = \boldsymbol {v}^{\mathrm {T}}\boldsymbol {z}_{2} = \sum \limits_{l = 1}^{h_{2}}v_{l}z_{2l} + v_{0}}. 其中, \boldsymbol {w}_{1h} 和 \boldsymbol {w}_{2l} 分別是第一個隱藏層和第二個隱藏層的權重, z_{1h} 和 z_{2h} 分別是第一個隱藏層和第二個隱藏層的隱藏單元, 而 \boldsymbol {v} 是第三層的權重, h = 1, 2, ..., h_{1}, l = 1, 2, ..., h_{2}.
梯度下降有一個缺點, 就是收斂比較慢. 有時候, 留給我們學習樣本的時間不是很多, 因此需要一些方法加快學習速度. 我們有兩個方案.
令 w_{i} 為多層感知器任意層中的任意權重, 包括偏好. 在每次參數更新的時候, 連續的 \Delta w_{i}^{t} 值可能很不相同以至於出現擺動, 這就是收斂慢的根本原因. 其中, t 是時間指數, 即學習的週期數或者在線學習的迭代次數. 基本思想是在當前的改變中考慮上一次的更新, 取平均值, 就好像因為上次的更新存在動量 : \displaystyle {\Delta w_{i}^{t} = -\eta \frac {\partial {\mathop {\mathrm {E}}^{\mathrm {t}}}}{\partial {w_{i}} + \alpha \Delta w_{i}^{t - 1}}}. 通常來說, \alpha \in \left [ \frac {1}{2}, 1 \right ]. 特別是針對在線學習, 這種方法特別有用. 缺點就是需要額外存下上一次更新的值.
在梯度下降中, 學習因素 \eta 決定參數的改變量, 通常來說有 \eta \in [0, 1]. 一般來說, 學習減緩的時候, 它也會隨著減小 : \displaystyle {\Delta \eta = \begin {cases} a & {\mathop {\mathrm {E}}^{\mathrm {t + \tau}} < \mathop {\mathrm {E}}^{\mathrm {t}}} \\ -b\eta & {\text {else}}. \end {cases}} 這樣, 如果學習樣本上的誤差減小, 則 \eta 增加一個常數; 如果誤差增大, 那麼 \eta 減小. 由於 \mathrm {E} 可能從一個週期到另一個週期振盪, 所以另一個方案是最好用過去幾個週期的平均值作為 \mathrm {E}.
如果隱藏層的單元數很大, 那麼多層感知器可能會和之前的一些模型一樣, 記住樣本中的一些噪聲. 訓練時間很長的時候, 同樣可能發生這種情況 : 隨著訓練週期增加, 學習樣本上的誤差逐漸降低; 但是當過了某個點, 驗證樣本上的誤差開始增加. 因此, 學習不應該太早停止, 也不應該太晚停止.
對於非線性函數, 它可能存在多個極值點. 梯度下降屬於啟發式的演算法, 它只能找到局域的極小值. 為了減少誤差, 對於相同的學習樣本, 在學習時間充足的情況下, 以不同的初始值進行多次學習是有必要的.
在電腦視覺中, 我們都知道圖像具有局域特徵. 在這種情況下, 如果我們在設計多層感知器的時候, 並不是將隱藏單元連結到所有的輸入單元, 而是取一些局域的特徵進行連結, 這樣就可以減少一個隱藏層中的參數數量. 我們可以在連續層重複這樣的作法, 每層連結下一層的少量局域單元, 並且通過組合下面輸入空間的較大部分, 從而監測到更加複雜的特徵, 直到輸出層. 這便是卷積神經網絡的基本思路. 在卷積神經網絡中, 使用權重共享可以進一步減少參數數量. 以人臉識別為例, 如果一張圖像中存在多個人臉, 這些人臉幾乎不可能堆疊在一起, 他們可能出現在圖像, 即輸入空間的不同部分. 因此, 不是去定義獨立的隱藏單元, 從而學習輸入空間不同部分的不同特徵, 我們可以考察輸入空間的不同部分的相同隱藏單元的複件. 在學習的時候, 我們取不同的輸入計算梯度, 然後取平均值進行更新. 這意味著單個參數定義了多個連結上的權重. 此外, 由於一個權重上的更新受到多個輸入梯度的影響, 所以學習樣本好像成倍增加那般.
局域的結構對應的知識使得我們可以預先建構網絡, 並且使用權重共享使得其具有較少的參數. 具有全連結層的多層感知器不具有這種結構, 並且更難訓練. 如果可能, 與應用相關的任何型別的有用信息都應該建構到網絡中去. 這些實際上是目標函數的一些性質, 稱為線索, 它們獨立於學習樣本. 線索是輔助性的, 它可以用來指導學習過程, 並且當學習樣本有限的時候特別有用.
在圖像識別中, 存在一些不變性 : 對圖像進行旋轉、變換或者縮放, 圖像最終要表達的內容不變. 當學習樣本比較少的時候, 我們就可以通過這三個方法來創建虛擬的樣本, 以增加學習樣本, 且不需要對學習方法做任何修改. 不過, 對於不變性的學習也會成為模型的學習障礙之一. 在可能的情況下, 不變性可以作為前處理階段來實現.
當然, 也可以將線索納入網絡的建構中, 或者通過修改誤差函數來納入線索. 假設我們知道從應用的角度, \boldsymbol {x} 和 \boldsymbol {x}' 是相同的, 那麼 \boldsymbol {x}' 可能是 \boldsymbol {x} 的虛擬樣本. 也就是說, 當 f(\boldsymbol {x}) 是我們想要近似的函數時, 有 f(\boldsymbol {x}) = f(\boldsymbol {x}'). 若 g(\boldsymbol {x}|\theta) 是近似的函數, \theta 是參數, 對於任意 (\boldsymbol {x}, \boldsymbol {x}'), 我們定義懲罰函數 \displaystyle {\mathop {\mathrm {E}}_{h} = \big ( g(\boldsymbol {x}|\theta) - g(\boldsymbol {x}'|\theta) \big )^{2}}, 並且把它作為一個額外項加入到通常的誤差函數中 : \displaystyle {\mathrm {E}' = \mathrm {E} + \lambda_{h}\mathop {\mathrm {E}}_{h}}. 其中, \lambda_{h} 是懲罰的權重.
若對於 \boldsymbol {x}, 我們不知道準確的 f(\boldsymbol {x}) 的值, 但是我們知道 f(\boldsymbol {x}) \in [a_{\boldsymbol {x}}, b_{\boldsymbol {x}}], 那麼我們可以定義懲罰函數為 : \displaystyle {\mathop {\mathrm {E}}_{h} = \begin {cases} 0 & {g(\boldsymbol {x}|\theta) \in [a_{\boldsymbol {x}}, b_{\boldsymbol {x}}]} \\ (g(\boldsymbol {x}) - a_{\boldsymbol {x}})^{2} & {g(\boldsymbol {x}|\theta) < a_{\boldsymbol {x}}} \\ (g(\boldsymbol {x}) - b_{\boldsymbol {x}})^{2} & {g(\boldsymbol {x}|\theta) > b_{\boldsymbol {x}}}. \end {cases}}
當網絡太大具有太多自由參數的時候, 其泛化性能可能不足. 為了尋找最佳的網絡規模, 最常用的方法是嘗試不同的結構, 在樣本上進行學習, 並且針對檢驗樣本, 選擇最好的那一個. 另一種調整網絡的方法是使用一種啟發式演算法, 動態地調整網絡結構 :
- 破壞性結構自適應 : 從一個大網絡開始逐步刪除不必要的單元和連結;
- 建構性結構自適應 : 從一個小網絡開始, 逐步增加改善性能明顯的單元和連結.
基本的思想都是相同的 : 為了確定某個單元的存在或者某個連結的存在是否必要, 我們使用它學習一次, 不使用它學習一次, 然後獨立地檢查誤差. 這種方法開銷比較大, 學習的時間也很長.
如果一個連結的權重為 0, 那麼沒有必要使用它. 我們給每個連結一個衰減到 0 的趨勢, 使得除非為了降低誤差它被明顯增加, 否則它將消失. 對於網絡中的任意權重 w_{i}, 我們使用更新規則 : \displaystyle {\Delta w_{i} = -\eta \frac {\partial \mathrm {E}}{\partial {w_{i}}} - \lambda w_{i}}. 這等價於在具有一個附加的懲罰項的誤差函數上做梯度下降, 懲罰具有需要非零權重的網絡 : \displaystyle {\mathrm {E}' = \mathrm {E} + \frac {\lambda}{2}\sum \limits_{i}w_{i}^{2}}. 對於建構性結構自適應, 如果在感知器學習結束之後, 誤差仍然很高, 那麼我們會選擇添加一個隱藏單元, 隨機初始化後, 和先前存在的權重一起學習. 這樣就避免了重新進行學習.
在串級關連式的網絡中, 每個添加的單元是另一個隱藏層中的全新單元. 每個隱藏層只有一個單元, 連結到它前面所有隱藏單元和輸入. 已經存在的權重需要凍結, 不再進行學習, 只學習新加入的隱藏單元的輸入和輸出權重.
在建構性結構自適應中, 什麼時候引入新的隱藏層以及什麼時候添加一個新的隱藏單元是仍然需要研究的問題.
對於網絡中的權重 \boldsymbol {w}, 有事後機率 : \displaystyle {p(\boldsymbol {w}|X) = \frac {p(X|\boldsymbol {w})\mathop {\mathbf {P}}(\boldsymbol {w})}{p(X)}}. 針對 \boldsymbol {w} 進行最大事後機率估計 : \displaystyle {\hat {\boldsymbol {w}} = \argmax \limits_{\boldsymbol {w}}\ln {p(\boldsymbol {w}|X)}}. 記 C = -\ln {\mathop {\mathbf {P}}(X)}, 對事後機率兩側取自然對數, 得 \displaystyle {\ln {p(\boldsymbol {w}|X)} = \ln {p(X|\boldsymbol {w})} + \ln {p(\boldsymbol {w})} + C}. 如果權重是獨立的, 並且事前機率服從均值為 0 且方差為 \frac {\lambda}{2} 得常態分佈, 那麼 \displaystyle {p(\boldsymbol {w}) = \prod \limits_{i}p(w_{i})}. 其中, p(w_{i}) = c\mathrm {e}^{-\frac {w_{i}^{2}}{\lambda}}. 此時, 最大事後機率估計最小化增廣的誤差函數 : \displaystyle {\mathrm {E}' = \mathrm {E} + \lambda \left \| \boldsymbol {w} \right \|^{2}}. 其中, \mathrm {E} 為通常得分類或回歸誤差. 這個增廣誤差正式我們在權重衰減中使用的誤差函數. 使用較大的 \lambda 意味著較小的參數可變性, 對它們施加更大的力量使其接近於 0, 並且更多地考慮時間機率而不是樣本; 如果 \lambda 比較小, 那麼允許比較大的參數可變性. 這種刪除不必要參數的方法在統計學中被稱為 Tikhonov 正則化 (Tikhonov regularization).
經驗表明, 訓練後的多層感知器大部分權重都圍繞著均值為 0 的常態分佈, 證明使用權重衰減是正確的選擇. 但是, 並非總是這樣.
在多層感知器中, 如果隱藏單元數量少於輸入數量, 那麼需要在第一層進行維度化約. 自動聯結者是一種多層感知器的結構, 它的輸入和輸出一樣多, 並且定義期望輸出等於輸入. 為了能夠在輸出層重新產生輸入, 多層感知器被逼尋找輸入在隱藏層的最佳表示. 當隱藏單元數量小於輸入數量的時候, 就意味著維度化約. 一旦訓練王層, 從輸入到隱藏層的第一層充當編碼器, 而隱藏單元的值形成編碼表示. 從隱藏單元到輸出單元的第二層充當解碼器, 由原始信號的編碼表示重構原始信號. 有人已經證明, 具有一個隱藏層的自動編碼多層感知器實現了主成分分析的工作. 不過, 不同之處在於隱藏單元的權重並不使用特徵值按大小排列的特徵向量, 但是它和主成分分析中的特徵向量形成相同的空間. 如果編碼器和解碼器不是一層, 而使在隱藏單元具有乙狀函數的非線性的多層感知器, 那麼編碼器能夠實現非線性的維度化約. 另一種使用多層感知器進行維度化約的方法是通過多維標度. 同樣有人證明, 多層感知器可以學習 Sammon 影射 : \displaystyle {\mathop {\mathrm {E}}(\theta|X) = \sum \limits_{\mathrm {r}, \mathrm {s}}\frac {\left \| g(\boldsymbol {x}^{\mathrm {r}}|\theta) - g(\boldsymbol {x}^{\mathrm {s}}|\theta) \right \| - \left \| \boldsymbol {x}^{\mathrm {r}} - \boldsymbol {x}^{\mathrm {s}} \right \|^{2}}{\left \| \boldsymbol {x}^{\mathrm {r}} - \boldsymbol {x}^{\mathrm {s}} \right \|^{2}}}. 一個具有 d 個輸入, H 個隱藏單元和 k 個輸出的多層感知器用來模擬 g(\boldsymbol {x}|\theta), 將 d 維輸入影射到 k 維向量. 其中, \theta 對應於多層感知器的權重, k < d. 給定一個學習樣本 X = \left \{ \boldsymbol {x}^{\mathrm {t}} \right \}, 我們可以使用梯度下降法直接最小化 Sammon 應力來學習多層感知器, 即 g(\boldsymbol {x}|\theta), 使得 k 維表示之間的距離和原始空間中的距離盡可能接近.
到目前為止, 我們一直關注的是輸入一次全部提供的情況. 在某些應用中, 輸入是關於時間的資料, 我們需要學習時間序列. 換句話說, 輸出也可能隨著時間的變化而變化. 識別時間序列的最簡單方法是將其轉變為空間序列, 之後就可以使用前面已經討論過的任意方法進行分類. 在時間延遲神經網絡中, 前面的輸入被延遲, 以便於和最後的輸出同步, 並且一起作為輸入提交, 之後使用反向傳播學系權重. 為了提取局域於時間的特徵, 可以由結構化的連結層和權重共享, 以便於得到變換的時間不變性. 這種結構的主要限制是我們滑過序列的時間窗口大小應當預先固定.
在遞迴神經網絡中, 單元還具有連結到前面層的連結. 這種遞迴性提供了短期記憶, 並且使得網絡記住過去發生的事情. 在大部分情況下, 我們使用部分遞迴的網絡, 其中優先多個遞迴連結被添加到多層感知器中. 這結合了多層感知器的非線性近似能力和遞迴的時間表達能力的優點, 並且這樣的網絡可以用來實現任意時間關聯任務. 如果序列具有較小的最大長度, 可以按照時間進行展開, 將任意的遞迴網絡轉換成等價的多層感知器, 為不同時間的複件創建單獨的單元和連結.
僅僅具有一個隱藏層的多層感知器的能力是有限的, 具有多個隱藏層的多層感知器可以學習到更加複雜的函數. 這就是深度神經網絡, 即深度學習背後的思想. 在深度神經網絡中, 從未加工的輸入開始, 每個隱藏層都組合前一層的值, 學習輸入的更加複雜的函數. 它另一個特點是連續的隱藏層對應於更抽象的表示, 直到輸出層. 如果有許多標記好的學習樣本和強大的計算能力, 整個深度神經網絡可以以監督的方式進行學習. 但是, 目前的共識是使用非監督的方法初始化權重比隨機初始化要好得多. 在這樣的條件下, 學習會更快, 並且使用更少的標記樣本.
深度學習的方法比上面所討論的方法需要更少的人工干預. 我們不需要手動製作正確的特徵, 也不必擔心合適的網絡結構. 一旦我們有巨量資料和計算能力, 只需要等待, 讓學習演算法自己發現一切.
12. 局部模型
在本章我們繼續討論多層感知器, 只不過我們不再從整體來考察, 而是考察局部. 對於函數的近似, 我們有一個方法就是將區間分成多塊, 對每一小塊上作近似. 這種思想也可以引入機器學習中.
在 k 均值聚類演算法中, 我們定義重構誤差為 \displaystyle {\mathop {\mathrm {E}}(\left \{ \boldsymbol {m}_{i} \right \}_{i = 1}^{k}|X) = \frac {1}{2}\sum \limits_{\mathrm {t}} \sum \limits_{i}b_{i}^{\mathrm {t}}\left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{i}^{\mathrm {t}} \right \|^{2}}. 其中, b_{i}^{\mathrm {t}} = \begin {cases} 1 & {\left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{i} \right \| = \min \limits_{l} \left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{l} \right \|} \\ 0 & {\text {else}} \end {cases}.
對於樣本 X = \left \{ \boldsymbol {X}^{\mathrm {t}} \right \}, \boldsymbol {m}_{i} 是類別的中心. 如果 \boldsymbol {m}_{i} 是 \boldsymbol {x}^{\mathrm {t}} 的歐式距離最接近的中心, 則 b_{i}^{\mathrm {t}} = 1. 好像所有的 \boldsymbol {m}_{l} 在競爭, 而 \boldsymbol {m}_{l} 贏得勝利, 因為它是最近的. 在更新的時候, k 均值演算法遵循 \displaystyle {\boldsymbol {m}_{i} = \frac {\sum \limits_{\mathrm {t}}b_{i}^{\mathrm {t}}\boldsymbol {x}^{\mathrm {t}}}{\sum \limits_{\mathrm {t}}b_{i}^{\mathrm {t}}}}. 一旦競爭有了一個勝者, 它最小化上式. 對於 k 均值演算法來說, 不斷計算 b_{i}^{\mathrm {t}} 和 \boldsymbol {m}_{i} 直到收斂為止.
通過進行隨機梯度下降, 逐個考慮樣本並且在每一步進行少許更新而不忘記先前的更新, 我們就可以得到在線 k 均值演算法. 對於單個樣本, 重構誤差為 \displaystyle {\mathop {\mathrm {E}}(\left \{ \boldsymbol {m}_{i} \right \}_{i = 1}^{k}|X) = \frac {1}{2}\sum \limits_{i}b_{i}^{\mathrm {t}}\left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{i}^{\mathrm {t}} \right \|^{2} = \frac {1}{2}\sum \limits_{i} \sum \limits_{j = 1}^{d}b_{i}^{\mathrm {t}}(x_{j}^{\mathrm {t}} - m_{ij})^{2}} 對上式使用梯度下降, 得到每個樣本的更新規則 : \displaystyle {\Delta m_{ij} = -\eta \frac {\partial {\mathop {\mathrm {E}}^{t}}}{\partial {m_{ij}}} = \eta b_{i}^{\mathrm {t}}(x_{j}^{\mathrm {t}} - m_{ij})}. 這把令 b_{i}^{\mathrm {t}} = 1 的最近中心向輸入移動一個因素 \eta, 其它的中心由於 b_{l}^{\mathrm {t}} = 0 (l \neq i) 而不進行更新. 為了收斂, \eta 逐漸減小到 0. 但是如果 \eta 向零衰減, 那麼網絡變得比較穩定, 然而因為更新太小, 所以失去了對隨時出現的新模式的適應性. 若保持 \eta 較大, 那麼 \boldsymbol {m}_{i} 可能振盪.
像這樣的競爭可以用遞迴的單層感知器來實現. 輸入層包含輸入向量 \boldsymbol {x}. 注意, 此時不再有偏好單元. 輸入單元的值是 b_{i}, 並且它們是感知器 : \displaystyle {b_{i} = \boldsymbol {m}_{i}^{\mathrm {T}}\boldsymbol {x}}. 然後我們選取最大的 b_{i} 令其為 1, 剩餘的 b_{l} (l \neq i) 設定為 0. 另外, 我們也可以用橫向抑制 : 每個單元有一個到自身的遞迴連結, 其具有正的權重. 除此之外, 每個單元還有到其它輸出單元的遞迴連結, 但是具有負的權重. 使用適當的非線性乙狀函數以及對應的權重值, 這樣的網絡在某些迭代後, 會收斂到一種狀態. 其中, 最大的變為 1, 最小的變為 0.
在討論的時候, 我們一直使用的是歐式距離. 需要注意的是, 一旦輸入屬性具有不同的方差或者它們相關聯, 這種情況下需要使用馬式距離, 又或者進行適當的規範化, 例如使用主成分分析.
之前, 我們分析了使用了梯度下降的在線 k 均值演算法的更新規則, 它可以展開為 : \displaystyle {\Delta m_{ij} = -\eta \frac {\partial {\mathop {\mathrm {E}}^{t}}}{\partial {m_{ij}}} = \eta b_{i}^{\mathrm {t}}(x_{j}^{\mathrm {t}} - m_{ij}) = \eta b_{i}^{\mathrm {t}}x_{j}^{\mathrm {t}} - \eta b_{i}^{\mathrm {t}}m_{ij}}. 其中, m_{ij} 是從 x_{j} 到 b_{i} 的連結權重. 第一項 \displaystyle {\Delta' m_{ij}^{\mathrm {t}} = \eta b_{i}^{\mathrm {t}}x_{j}^{\mathrm {t}}}. 稱為 Hebbian 學習 (Hebbian learning), 它定義更新為前面的單元和後面的單元值的乘積, 而引入的後面那一項是衰減項.
在 k 均值演算法中, 存在某些中心沒有任何利用價值. 在線 k 均值演算法同樣有這樣的問題. 為了避免這樣的問題, 我們有如下措施 :
- 可以通過隨機選擇輸入樣本來初始化 \boldsymbol {m}_{i}, 並確保它們從有樣本的地方開始;
- 使用領導者聚類演算法並逐個添加單元;
- 更新時, 不僅僅更新最近的單元對應的中心, 也更新某些其它中心. 隨著它們不斷移動, 逐漸向輸入空間存在輸入的部分靠近, 從而進行競爭;
- 引入某種機制 : 當前贏得競爭的單元令其帶有某個權值, 並且允許沒有這樣權值的單元贏得競爭.
在 k 均值演算法中, k 是需要指定的. 接下來我們討論自適應共振理論, 它是從單個分組開始, 在有需要時才增加分組. 首先給定一個輸入, 所有的輸出單元都計算它們的值, 並且選擇與輸入最相似的單元. 如果使用像 b_{i} = \boldsymbol {m}_{i}^{\mathrm {T}}\boldsymbol {x} 的點積, 則它是具有最大值的單元; 如果使用歐式距離, 那麼它是具有最小值的單元.
假定我們使用歐式距離, 如果最小值小於某個閾限, 則使用在線 k 均值演算法一樣進行更新; 如果最小值大於閾限, 那麼添加一個新的輸出單元, 並且它的中心用這個樣本進行初始化. 這定義了一個超平面上的球, 其半徑由給定的每個單元範圍提及的閾限給定. 只要有一個輸入不能被任何單元覆蓋, 那麼就增加新的單元. 記閾限為 \rho, 更新規則為 \displaystyle {b_{i} = \left \| \boldsymbol {m}_{i} - \boldsymbol {x}^{\mathrm {t}} \right \| = \min \limits_{l = 1}^{k} \left \| \boldsymbol {m}_{l} - \boldsymbol {x}^{\mathrm {t}} \right \|}, \displaystyle {\begin {cases} \boldsymbol {m}_{k + 1} \leftarrow \boldsymbol {x}^{\mathrm {t}} & {b_{i} > \rho} \\ \Delta \boldsymbol {m}_{i} = \eta(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{i}) & {\text {else}}. \end {cases}} 為了避免出現沒用的單元, 除了使用上面提到的措施之外, 還可以用自組織對映 (self-organizing map). 當 \boldsymbol {m}_{i} 是最近的中心時, 除了更新 \boldsymbol {m}_{i} 之外, 還更新它的近鄰. 例如設定近鄰數量為 2, 則除了更新 \boldsymbol {m}_{i} 之外, 還更新 \boldsymbol {m}_{i + 1}, \boldsymbol {m}_{i - 1}, \boldsymbol {m}_{i + 2} 和 \boldsymbol {m}_{i - 2}. 但是隨著近鄰的增大, 應該使用較小的權重. 如果 i 是最近中心的標記, 那麼這些中心按照下式進行更新 : \displaystyle {\Delta \boldsymbol {m}_{l} = \eta e(l, i)(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{l})}. 其中, e(l, i) 為近鄰函數. 當 l = i 時, 有 e(l, i) = 1, 並且隨著 \left | l - i \right | 的增大而減小. 例如, \displaystyle {e(l, i) = \frac {1}{\sqrt {2\pi}\sigma}\mathrm {e}^{-\frac {(l - i)^{2}}{2\sigma^{2}}}}. 為了收斂, 近鄰函數也應該逐漸減小. 例如當 \sigma 減小的時候, 最終只有一個競爭勝者被更新.
通過上面的敘述, 我們發現由於近鄰單元也向輸入做出了移動, 所以避免了那些沒用的單元. 即使中心被隨機地初始化, 但是因為它們一起朝著相同的輸入方向移動, 所以一旦收斂, 那麼鄰近單元也將是輸入空間的近鄰.
在部分實際應用中, 感知器中的單元會被組織成一個二維影射. 對於每個單元, 將具有兩個標記 \boldsymbol {m}_{i, j}, 並且鄰域定義在兩個維度上. 如果 \boldsymbol {m}_{i, j} 時最近的中心, 那麼中心按照下面方程式進行更新 : \displaystyle {\Delta \boldsymbol {m}_{k, l} = \eta e(k, l, i, j)(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{k, l})}. 其中, 近鄰函數是二變數的. 收斂之後, 這形成了原始維度輸入空間的二維地形圖. 圖中包含了空間的高密度部分的許多單元, 而對於沒有輸入的部分, 則不顯示其中的任何單元. 一旦地形圖收斂, 那麼原始空間靠近的輸入被影射到地形圖中靠近的單元. 從這個角度來說, 地形圖可以解釋為做一個非線性形式的多維縮放, 將原來的 \boldsymbol {x} 空間影射到二維 (i, j) 上. 類似地, 如果影射是一維的, 則單元放置在輸入空間的最大密度的曲線上, 作為主要曲線.
在隱藏單元使用點積的多層感知器中, 每一個隱藏單元都定義了一個超平面, 並且由於乙狀函數的非線性, 隱藏單元的值在 [0, 1] 中, 對樣本關於超平面的位置進行編碼. 每個超平面都將輸入空間一分為二, 並且對於和給定的輸入, 通常許多隱藏單元都具有非零輸出. 這稱作分布表示, 因為輸入被許多隱藏單元同時激活. 另一種可能性是局部表示, 對於給定的輸入, 只有一個或者多個單元是活躍的. 就像這些局部調整的單元在它們之間劃分輸入空間, 並且只對某些輸入具有選擇性. 輸入空間的單元中具有非零響應的部分稱作接受區. 輸入空間則被這樣的單元所覆蓋.
局部性意味著有一個距離函數, 它度量給定輸入 \boldsymbol {x} 和單元 h 的距離 \boldsymbol {m}_{h} 的相似性. 通常, 該度量取歐式距離 \| \boldsymbol {x} - \boldsymbol {m}_{h} \|. 選取響應函數使得當 \boldsymbol {x} = \boldsymbol {m}_{h} 時取最大值, 並且隨著它們的相似性減小而減小. 通常, 我們使用 \displaystyle {p_{h}^{\mathrm {t}} = \mathrm {e}^{-\frac {\left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{h} \right \|^{2}}{2s_{h}^{2}}}}. 其中, \boldsymbol {m}_{j} 和 s_{j} 分別表示局部單元 j 的中心和寬度, 這樣定義了一個多方向對稱的基礎函數. 使用這種局部基礎函數的基本思想是在輸入樣本中存在一些樣本的分組, 而對每一個類別, 我們定義一個基礎函數 p_{h}^{\mathrm {t}}, 當樣本 \boldsymbol {x}^{\mathrm {t}} 屬於類別 h 的時候, p_{h}^{\mathrm {t}} \neq 0. 我們可以使用在線 k 均值的方法找出中心 \boldsymbol {m}_{h}. 但是有一種簡單的啟發式方法 : 一旦我們求得中心, 我們就可以找到類別中最遠的那個樣本, 並令 s_{h} 為它到類別中心距離的一半, 甚至三分之一.
我們說 p_{h}^{\mathrm {t}} (h = 1, 2, …, l) 定義了一個新的 l 維空間, 並且形成 \boldsymbol {x}^{\mathrm {t}} 的新表示. 我們也可以使用 b_{h}^{\mathrm {t}} 對輸入編碼, 但是 b_{h}^{\mathrm {t}} 屬於布林變數. p_{h}^{\mathrm {t}} 有其它的優點, 它用 (0, 1) 中的值對點到其中心的距離編碼. 該值衰減到 0 的速度依賴於 s_{h}.
在監督學習的情況下, 可以使用這種新的局部表示作為輸入. 如果使用多層感知器, 則有 \displaystyle {y^{\mathrm {t}} = \sum \limits_{h = 1}^{l}w_{h}p_{h}^{\mathrm {t}} + w_{0}}. 其中, l 是基礎函數的數量. 這種結構稱為多方向基礎函數網絡, 和非參數估計非常相似.
這裡, 我們要做的事一個二階段過程 : 使用非監督方法確定中心, 然後在其上建構一個監督層. 我們還可以用監督的方式學習所有的參數, 包括 \boldsymbol {m}_{h} 和 s_{h}. 顯然, p_{h}^{\mathrm {t}} 是可微的, 並且可以反向傳播, 與多層感知器類似, 我們利用反向傳播來更新第一層權重. 該結構其實類似於多層感知器, 以 p_{h} 作為隱藏單元, \boldsymbol {m}_{h} 和 s_{h} 作為第一層的參數, 激活函數為 p_{h}^{\mathrm {t}}, 而 w_{h} 作為第二個隱藏層的權重.
但是, 這種兩層網絡的學習非常慢. 一種方法是將中心設定為從學習樣本中隨機選取的模式, 而不進一步更新. 另一方面, 精度通常沒有使用完全監督的方法高. 考慮輸入是常態分佈的, k 均值均勻地安放單元. 如果函數在一小部分空間少有變化, 則更好的想法是將更多的中心安放在函數變化快的地方, 以便誤差盡可能小.
在完全監督的情況下學習所有參數, 其方法和使用多層感知器的反向傳播一樣. 考慮具有多個輸出的回歸問題, 誤差為 \displaystyle {\mathop {\mathrm {E}}(\left \{ \boldsymbol {m}_{h}, s_{h}, w_{ih} \right \}_{i, h}|X) = \frac {1}{2}\sum \limits_{\mathrm {t}}\sum \limits_{i}(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}})^{2}}. 其中, y^{\mathrm {t}} = \sum \limits_{h = 1}^{l}w_{ih}p_{h}^{\mathrm {t}} + w_{i0}. 使用梯度下降, 得到第二層權重的更新方程式為 \displaystyle {\Delta w_{ih} = \eta \sum \limits_{\mathrm {t}}(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}})p_{h}^{\mathrm {t}}}. 類似地, 使用反向傳播得 \displaystyle {\Delta m_{hj} = \eta \sum \limits_{\mathrm {t}}\left ( \sum \limits_{i}(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}})w_{ih} \right )p_{h}^{\mathrm {t}}\frac {(x_{j}^{\mathrm {t}} - m_{hj})}{s_{h}^{2}}}, \displaystyle {\Delta s_{h} = \eta \sum \limits_{\mathrm {t}}\left ( \sum \limits_{i}(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}})w_{ih} \right )p_{h}^{\mathrm {t}}\frac {\left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{h} \right \|^{2}}{s_{h}^{3}}}. 對於分類問題, 有 \displaystyle {y_{i}^{\mathrm {t}} = \frac {\exp \left \{ \sum \limits_{h}w_{ih}p_{h}^{\mathrm {t}} + w_{i0} \right \}}{\sum \limits_{k} \exp \left \{ \sum \limits_{h}w_{kh}p_{h}^{\mathrm {t}} + w_{k0} \right \}}}. 誤差為 \displaystyle {\mathop {\mathrm {E}}(\left \{ \boldsymbol {m}_{h}, s_{h}, w_{ih} \right \}_{i, h}|X) = -\sum \limits_{\mathrm {t}}\sum \limits_{i}r_{i}^{\mathrm {t}}\ln {y_{i}^{\mathrm {t}}}}. 再次考慮 y^{\mathrm {t}} = \sum \limits_{h = 1}^{l}w_{h}p_{h}^{\mathrm {t}} + w_{0}. 對於任意輸入, 如果 p_{h} 非零, 則它對輸出的貢獻為 w_{h}. 它的貢獻是常數擬合, 由 w_{h} 給定. 在任何情況下, 只有少數單元對輸出有貢獻. w_{0} 是常數偏移, 加到活躍單元的加權和上. 我們還看到如果所有的 p_{h} 均為 0, 那麼 y = w_{0}. 這樣, 我們可以把 w_{0} 看作 y 的預設值 : 如果沒有單元是活躍的, 那麼輸出由該值給定. 因此, 有可能使得該預設模型具有更強的能力. 例如, 可以令 \displaystyle {y^{\mathrm {t}} = \underbrace {\sum \limits_{h = 1}^{l}w_{h}p_{h}^{\mathrm {t}}}_{\text {例外}} + \underbrace {\boldsymbol {v}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + v_{0}}_{\text {規則}}}. 在這種情況下, 預設的規則是線性的 : \boldsymbol {v}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + v_{0}. 當它們為非零的時候, 模型就好像是例外並修改輸出, 補償預期輸出與規則輸出之差. 這種模型可以以監督的方式進行學習.
如果我們能夠把已知的一些知識納入系統進行初始化, 那麼任何學習系統的學習都可以更加簡單. 例如, 這些知識可以以一組規則的形式提供, 指定模型必須學習的輸入和輸出影射. 類似地, 一旦網絡被訓練, 就可以從中提取規則, 使得問題的解更加容易理解. 除此之外, 如果需要將網絡推廣到輸入空間中從未見過的樣本區域中, 那麼更可能對知識的依賴更強. 我們關於問題的初始化知識越好, 那麼我們得到的網絡就越好, 需要的學習次數也就越少.
如果我們需要確保對於任意輸入, 至少存在一個非零單元, 那麼需要有一個規範化的步驟, 確保局部的單元值的和為 1 : \displaystyle {g_{h}^{\mathrm {t}} = \frac {p_{h}^{\mathrm {t}}}{\sum \limits_{k = 1}^{l}p_{l}^{\mathrm {t}}} = \frac {\exp \left \{ -\frac {\left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{h} \right \|^{2}}{2s_{h}^{2}} \right \}}{\sum \limits_{k} \exp \left \{ -\frac {\left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{k} \right \|^{2}}{2s_{k}^{2}} \right \}}}. 輸出的加權和為 \displaystyle {y_{i}^{\mathrm {t}} = \sum \limits_{h = 1}^{l}w_{ih}g_{h}^{\mathrm {t}}}. 這裡不需要偏好項, 因為對於每個 \boldsymbol {x}, 至少有一個非零的 g_{h}. 使用 g_{h} 而不是 p_{h} 並不引入附加的參數, 它知識將單元聯繫在一起. p_{h} 僅僅依賴於 \boldsymbol {m}_{h} 和 s_{h}, 但是由於規範化, g_{h} 依賴於所有單元的中心和寬度.
對於回歸, 使用梯度下降, 得到更新方程式 : \displaystyle {\Delta w_{ih} = \eta \sum \limits_{\mathrm {t}}(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}})g_{h}^{\mathrm {y}}}, \displaystyle {\Delta m_{hj} = \eta \sum \limits_{\mathrm {t}}\sum \limits_{i}(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}})(w_{ih} - y_{i}^{\mathrm {t}})g_{h}^{\mathrm {t}}\frac {(x_{j}^{\mathrm {t}} - m_{hj})}{s_{h}^{2}}}. 類似地, 也可以導出分類的更新方程式.
到目前為止, 最終的輸出由局部單元貢獻的加權和確定. 儘管單元是局部的, 但是重要的是最終的加權和, 並且我們希望它與預期輸出盡可能接近. 例如, 對於回歸, 我們最小化誤差函數, 這是基於機率模型 \displaystyle {p(\boldsymbol {r}^{\mathrm {t}}|\boldsymbol {x}^{\mathrm {t}}) = \prod \limits_{i}\frac {1}{\sqrt {2\pi}\sigma}\mathrm {e}^{-\frac {(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}})^{2}}{2\sigma^{2}}}}. 對於之前所提到的 y_{i}^{\mathrm {t}}, 我們可以將模型看作是協作的, 因為單元協同操作來產生最終的輸出 y_{i}^{\mathrm {t}}. 現在, 我們討論使用競爭的基礎函數的方法. 我們假定輸出取自混合模型 \displaystyle {p(\boldsymbol {r}^{\mathrm {t}}|\boldsymbol {x}^{\mathrm {t}}) = \sum \limits_{h = 1}^{h}p(h|\boldsymbol {x}^{\mathrm {t}})p(\boldsymbol {r}^{\mathrm {t}}|h, \boldsymbol {x}^{\mathrm {t}})}. 其中, p(h|\boldsymbol {x}^{\mathrm {t}}) 是混合比例, p(\boldsymbol {r}^{\mathrm {t}}|h, \boldsymbol {x}^{\mathrm {t}}) 是產生輸出的混合分支, 如果該分支被選擇. 這兩項都依賴於輸入 \boldsymbol {x}.
如果混合比例滿足 \displaystyle {p(h|\boldsymbol {x})= \frac {p(\boldsymbol {x}|h)p(h)}{\sum \limits_{l}p(\boldsymbol {x}|l)p(l)}} 和 \displaystyle {g_{h}^{\mathrm {t}} = \frac {a_{h}\mathrm {e}^{-\frac {\left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{h} \right \|^{2}}{2s_{h}^{2}}}}{\sum \limits_{l}a_{l}\mathrm {e}^{-\frac {\left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{h} \right \|^{2}}{2s_{l}^{2}}}}}, 通常, 我們假定 a_{h} 相等並且忽略它們. 先考慮回歸問題, 其中的分支是常態的. 在機率模型 \displaystyle {p(\boldsymbol {r}^{\mathrm {t}}|\boldsymbol {x}^{\mathrm {t}}) = \prod \limits_{i}\frac {1}{\sqrt {2\pi}\sigma}\mathrm {e}^{-\frac {(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}})^{2}}{2\sigma^{2}}}} 中, 噪聲被加到了加權和上. 這裡, 一個分支被選中, 並且噪聲夾到它的輸出 y_{ih}^{\mathrm {t}} 上.
使用混合模型 \displaystyle {p(\boldsymbol {r}^{\mathrm {t}}|\boldsymbol {x}^{\mathrm {t}}) = \sum \limits_{h = 1}^{h}p(h|\boldsymbol {x}^{\mathrm {t}})p(\boldsymbol {r}^{\mathrm {t}}|h, \boldsymbol {x}^{\mathrm {t}})}, 對數概似為 \displaystyle {\ell (\left \{ \boldsymbol {m}_{h}, s_{h}, w_{ih} \right \}_{i, h}|X) = \sum \limits_{\mathrm {t}}\ln {\sum \limits_{h}g_{h}^{\mathrm {t}}\mathrm {e}^{-\frac {1}{2}\sum \limits_{i}(r_{i}^{\mathrm {t}} - y_{ih}^{\mathrm {t}})^{2}}}}. 其中, y_{ih}^{\mathrm {t}} = w_{ih} 是由分支 h 對輸出 i 作出的常數擬合. 嚴格地說, 它不依賴於 \boldsymbol {x}. 我們看到, 如果 g_{h}^{\mathrm {t}} 為 1, 則它對產生正確的輸出負責, 並且需要最小化它的預測誤差的平方和 \displaystyle {\sum \limits_{i}(r_{i}^{\mathrm {t}} - y_{ih}^{\mathrm {t}})^{2}}. 使用梯度上升最大化對數概似可得 \displaystyle {\Delta w_{ih} = \eta \sum \limits_{\mathrm {t}}(r_{i}^{\mathrm {t}} - y_{ih}^{\mathrm {t}})f_{h}^{\mathrm {t}}}. 其中, f_{h}^{\mathrm {t}} = \frac {g_{h}^{\mathrm {t}}\mathrm {e}^{-\frac {1}{2}\sum \limits_{i}(r_{i}^{\mathrm {t}} - y_{ih}^{\mathrm {t}})^{2}}}{\sum \limits_{l}g_{l}^{\mathrm {t}}\mathrm {e}^{-\frac {1}{2}\sum \limits_{i}(r_{i}^{\mathrm {t}} - y_{il}^{\mathrm {t}})^{2}}}, p(h|\boldsymbol {r}, \boldsymbol {x}) = \frac {p(h|\boldsymbol {x})p(\boldsymbol {r}|h, \boldsymbol {x})}{\sum \limits_{l}p(l|\boldsymbol {x})p(\boldsymbol {r}|l, \boldsymbol {x})}. 類似地, 我們也可以推導更新中心的方程式 : \displaystyle {\Delta m_{hj} = \eta \sum \limits_{\mathrm {t}}(f_{h}^{\mathrm {t}} - g_{h}^{\mathrm {t}})\frac {x_{j}^{\mathrm {t}} - m_{hj}}{s_{h}^{2}}}. 使用相同的方法, 我們可以得到 \Delta s_{h}.
對於分類問題, 每個分支本身是一個多項式. 於是, 對數概似為 \displaystyle {\begin {aligned} \ell (\left \{ \boldsymbol {m}_{h}, s_{h}, w_{ih} \right \}_{i, h}|X) &= \sum \limits_{\mathrm {t}}\ln {\sum \limits_{h}g_{h}^{\mathrm {t}}\prod \limits_{i}(y_{ih}^{\mathrm {t}})^{r_{i}^{\mathrm {t}}}} \\ &= \sum \limits_{\mathrm {t}}\ln {\sum \limits_{\mathrm {h}}g_{h}^{\mathrm {t}}\mathrm {e}^{\sum \limits_{i}r_{i}^{\mathrm {t}}\ln {y_{ih}^{\mathrm {t}}}}}. \end {aligned}} 其中, y_{ih}^{\mathrm {t}} = \frac {\mathrm {e}^{w_{ih}}}{\sum \limits_{k}\mathrm {e}^{w_{kh}}}.
可以利用梯度上升計算 w_{ih}, \boldsymbol {m}_{h} 和 s_{h} 的更新方程式, 它包括 \displaystyle {f_{h}^{\mathrm {t}} = \frac {g_{h}^{\mathrm {t}}\mathrm {e}^{\sum \limits_{i}r_{i}^{\mathrm {t}}\ln {y_{ih}^{\mathrm {t}}}}}{\sum \limits_{l}g_{l}^{\mathrm {t}}\mathrm {e}^{\sum \limits_{i}r_{i}^{\mathrm {t}}\ln {y_{il}^{\mathrm {t}}}}}}.
我們曾經討論過最大期望演算法, 實際上計算 f_{h}^{\mathrm {t}} 相當於 E 步, f_{h}^{\mathrm {t}} \equiv p(\boldsymbol {r}|h, \boldsymbol {x}^{\mathrm {t}}) 取代了 p(h|\boldsymbol {x}^{\mathrm {t}}). 對於回歸, 在 M 步我們使用下式進行更新 : \displaystyle {\boldsymbol {m}_{h} = \frac {\sum \limits_{\mathrm {t}}f_{h}^{\mathrm {t}}\boldsymbol {x}^{\mathrm {t}}}{\sum \limits_{\mathrm {t}}f_{h}^{\mathrm {t}}}}, \displaystyle {S_{h} = \frac {\sum \limits_{\mathrm {t}}f_{h}^{\mathrm {t}}(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{h})(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{h})^{\mathrm {T}}}{\sum \limits_{\mathrm {t}}f_{h}^{\mathrm {t}}}}, \displaystyle {w_{ih} = \frac {\sum \limits_{\mathrm {t}}f_{h}^{\mathrm {t}}r_{i}^{\mathrm {t}}}{\sum \limits_{\mathrm {t}}f_{h}^{\mathrm {t}}}}. 我們看到 w_{ih} 是加權平均, 其中給定輸入和預期輸出, 權重是單元的事後機率. 對於分類問題, M 步沒有解析解並且需要借助於迭代, 例如梯度上升.
假設每個類別都有 H 個單元, 它們已經被這些類別標記. 這些單元已經被它們類別中的樣本隨機初始化. 在每次迭代中, 我們尋找在歐式距離中距離輸入樣本最近的單元 \boldsymbol {m}_{i}, 並且使用如下更新規則 : \displaystyle {\begin {cases} \Delta \boldsymbol {m}_{i} = \eta(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{i}) & {\boldsymbol {x}^{\mathrm {t}} \text { 和 } \boldsymbol {m}_{i} \text { 具有相同的標記}} \\ \Delta \boldsymbol {m}_{i} = -\eta(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{i}) & {\text {else}}. \end {cases}} 如果最近的中心具有正確的標記, 則它將向輸入移動. 如果它屬於錯誤的類別, 那麼它將會遠離輸入, 期望如果它離得足夠遠, 則在未來的迭代中正確的類別將是最近的. 這稱為學習向量量化 (learning vector quantization).
對於多方向基礎函數網絡來說, 對應於每個局部, 我們給出一個常數擬合. 在對於任意輸入的情況下, 有一個 g_{h} = 1, 而其餘為 0, 得到一個分段常數近似. 其中, 對於輸出 i, 局部 h 的局部擬合由 w_{ih} 給定. 從 Taylor 公式, 我們知道在每個點, 函數可以寫成 \displaystyle {f(x) = f(a) + (x - a)f'(a) + (x - a)^{2}f''(a) + ... + R(a)}. 其中, R(a) 是誤差項. 這樣, 如果 x 足夠接近於 a, 並且 f'(a) 足夠接近於 0, 即如果 f(x) 在 x = a 附近變化不大, 那麼常數近似很好. 如果不是這種情況, 則需要將空間劃分為大量的局部區域. 當輸入維度很高的時候, 由於維度災難, 這是一個特別嚴重的問題.
一種可供選擇的方法是考慮 Tayor 公式的下一項, 使用分段線性近似 (piecewise linear approximation). 我們令 \displaystyle {y_{i}^{\mathrm {t}} = \sum \limits_{h = 1}^{H}w_{ih}g_{h}^{\mathrm {t}}}. 但是這裡的區域 h 對輸出 i 的貢獻 w_{ih} 並不是常數, 而是輸入的線型函數 : \displaystyle {w_{ih} = \boldsymbol {v}_{ih}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}}}. 其中, \boldsymbol {v}_{ih} 是定義線性函數的參數向量, 它包含一個偏好項. 單元活性可以取規範化的多方向基礎函數網絡 : \displaystyle {g_{h}^{\mathrm {t}} = \frac {\exp \left \{ -\frac {\left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{h} \right \|^{2}}{2s_{h}^{2}} \right \}}{\sum \limits_{k} \exp \left \{ -\frac {\left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{k} \right \|^{2}}{2s_{k}^{2}} \right \}}}. 除了第二層權重不是常數而是線性模型的輸出之外, 這可以看作是一個多方向基礎函數網絡. 但是, 還有另一種解釋 : 將 \boldsymbol {w}_{h} 看作線性模型, 每個都取輸入, 並且稱它們為專家. g_{h} 被看作一個門網絡的輸出. 門網絡就像其輸出之和為 1 的分類器一樣, 將輸入指派到一個專家. 用這種方式看待門網絡, 任何分類器都可以用在門網絡中. 當 \boldsymbol {x} 是高維向量的時候, 使用局部常態單元可能需要大量專家, 若令 \displaystyle {g_{h}^{\mathrm {t}} = \frac {\mathrm {e}^{\boldsymbol {m}_{h}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}}}}{\sum \limits_{l}\mathrm {e}^{\boldsymbol {m}_{l}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}}}}}. 這是一個線性分類器. 注意, 此時 \boldsymbol {m}_{h} 不再是中心, 而是一個超平面, 並因此包含偏好值. 門網絡實現了分類, 它將輸入區域線性地劃分稱為專家 h 負責的區域和其它專家負責的區域.
在協同的情況下, 有 \displaystyle {y_{i}^{\mathrm {t}} = \sum \limits_{h = 1}^{H}w_{ih}g_{h}^{\mathrm {t}}}. 而我們希望使它與要求的輸出 r_{i}^{\mathrm {t}} 盡可能接近. 對於回歸, 誤差函數為 \displaystyle {\mathop {\mathrm {E}}(\left \{ \boldsymbol {m}_{h}, s_{h}, w_{ih} \right \}_{i, h}|X) = \frac {1}{2}\sum \limits_{\mathrm {t}}\sum \limits_{i}(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}})^{2}}. 使用梯度下降, 第二層權重參數更新為 \displaystyle {\Delta \boldsymbol {v}_{ih} = \eta \sum \limits_{\mathrm {t}}(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}})g_{h}^{\mathrm {t}}\boldsymbol {x}^{\mathrm {t}}}. 如果我們希望使用 softmax 函數, 則使用梯度下降, 超平面的更新方程式為 \displaystyle {\Delta m_{hj} = \eta \sum \limits_{\mathrm {t}}\sum \limits_{i}(r_{i}^{\mathrm {t}} - y_{i}^{\mathrm {t}})(w_{ih}^{\mathrm {t}} - y_{i}^{\mathrm {t}})g_{h}^{\mathrm {t}}x_{j}^{\mathrm {t}}}.
對於分類問題, 我們有 \displaystyle {y_{i}^{\mathrm {t}} = \frac {\exp \left \{ \sum \limits_{h}w_{ih}p_{h}^{\mathrm {t}} \right \}}{\sum \limits_{k} \exp \left \{ \sum \limits_{h}w_{kh}p_{h}^{\mathrm {t}} \right \}}}. 其中, w_{ih} = \boldsymbol {v}_{ih}^{\mathrm {T}}\boldsymbol {x}. 使用梯度下降可以得到更新方程式, 此處不再累贅.
對於競爭的情況, 我們有 \displaystyle {\ell (\left \{ \boldsymbol {m}_{h}, s_{h}, w_{ih} \right \}_{i, h}|X) = \sum \limits_{\mathrm {t}}\ln {\sum \limits_{h}g_{h}^{\mathrm {t}}\mathrm {e}^{-\frac {1}{2}\sum \limits_{i}(r_{i}^{\mathrm {t}} - y_{ih}^{\mathrm {t}})^{2}}}}. 其中, y_{ih}^{\mathrm {t}} = w_{ih}^{\mathrm {t}} = \boldsymbol {v}^{\mathrm {t}}\boldsymbol {x}^{\mathrm {t}}. 使用梯度上升, 可得 \displaystyle {\Delta \boldsymbol {v}_{ih} = \eta \sum \limits_{\mathrm {t}}(r_{i}^{\mathrm {t}} - y_{ih}^{\mathrm {t}})f_{h}^{\mathrm {t}}\boldsymbol {x}^{\mathrm {t}}}, \displaystyle {\Delta \boldsymbol {m}_{h} = \eta \sum \limits_{\mathrm {t}}(f_{h}^{\mathrm {t}} - g_{h}^{\mathrm {t}})\boldsymbol {x}^{\mathrm {t}}}.
對於分類問題, 我們有 \displaystyle {\begin {aligned} \ell(\left \{ \boldsymbol {m}_{h}, s_{h}, w_{ih} \right \}_{i, h}|X) &= \sum \limits_{\mathrm {t}}\ln {\sum \limits_{h}g_{h}^{\mathrm {t}}\prod \limits_{i}(y_{ih}^{\mathrm {t}})^{r_{i}^{\mathrm {t}}}} \\ &= \sum \limits_{\mathrm {t}}\ln {\sum \limits_{\mathrm {h}}g_{h}^{\mathrm {t}}\mathrm {e}^{\sum \limits_{i}r_{i}^{\mathrm {t}}\ln {y_{ih}^{\mathrm {t}}}}}. \end {aligned}} 其中, y_{ih}^{\mathrm {t}} = \frac {\mathrm {e}^{w_{ih}}}{\sum \limits_{k}\mathrm {e}^{w_{kh}}}.
上面提到的專家模型稱為混合專家模型, 而在層次混合專家模型中, 我們以遞迴的方式用一個完整的混合專家系統取代每一個專家. 一旦結構選定, 即選定深度、專家和門網絡, 整棵樹就可以從標記的樣本中學習. 這種結構也可以解釋為一顆決策樹, 它的門網絡是決策節點. 在之前的決策樹中, 決策節點做硬決策並且取其中的一個分支, 所以我們只取一條從根節點到外部節點的路徑. 這裡, 我們有一顆軟決策樹. 因為門網絡回傳一個機率, 所以我們以不同的機率取所有分支. 於是, 我們尋訪所有路徑, 並取所有外部節點值的加權和, 其權重等於外部節點路徑上值的乘積. 這種平均的優點是, 外部節點之間的邊界不再是硬的, 而是存在一個過渡.
13. 核機器
核機器 (kernel machine) 是一種最大邊緣方法, 允許把模型表示為學習樣本的一個子集的影響之和. 近年來, 除了多層感知器之外, 它比較流行, 原因是
- 對於分類問題, 它無需去估計機率 \mathop {\mathbf {P}}(C_{i}|\boldsymbol {x}), 只需要估計邊界在哪裡;
- 對於離群點檢測, 不需要估計 p(\boldsymbol {x}), 只需要找到可以將較低 p(\boldsymbol {x}) 值的 \boldsymbol {x} 分開的邊界, 即對於某個閾限 \theta \in (0, 1), 找到滿足 p(\boldsymbol {x}) < \theta 使得離群點分開;
- 學習完成之後, 線性模型的參數可以用學習樣本的一個子集表示, 這個子集稱為支援向量. 對於分類問題來說, 這些是靠近邊界的樣本;
- 模型的輸出是支援向量的影響之和表示, 並且這些由核函數表示. 其中, 核函數用於度量樣本相似性. 核函數允許我們使用除了向量點積或者歐式距離以外的度量;
- 可以使用核機器的問題通常可以表示為凸函數最佳化的問題, 它們通常有精確演算法可以得到精確解.
設某二分類問題有樣本 X = \left \{ \boldsymbol {x}^{\mathrm {t}}, t^{\mathrm {t}} \right \}. 其中, 若 \boldsymbol {x}^{\mathrm {t}} \in C_{1}, 則 r^{\mathrm {t}} = 1; 否則, r^{\mathrm {t}} = -1. 我們希望找到 \boldsymbol {w} 和 w_{0}, 使得 \displaystyle {\begin {cases} \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0} \geq 1 & {r^{\mathrm {t}} = 1} \\ \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0} \leq -1 & {r^{\mathrm {t}} = -1}. \end {cases}} 它們可以改寫為 \displaystyle {r^{\mathrm {t}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0}) \geq 1}. 注意, 我們並不是簡單地要求 r^{\mathrm {t}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0}) \geq 0.
為了更好的泛化性能, 我們不僅希望樣本都在超平面正確的一側, 而且還希望它們距離超平面有一定的距離. 超平面到它兩側最近樣本的距離稱為邊緣, 即我們希望最大化邊緣.
之前曾經提到過, \boldsymbol {x}^{\mathrm {t}} 到判別式的距離可以表示為 \displaystyle {\frac {\left | \boldsymbol {x}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0} \right |}{\left \| \boldsymbol {w} \right \|}}. 當 r^{\mathrm {t}} \in \{ 1, -1 \} 時, 上式可以改寫為對於任意的 \mathrm {t} 和某個閾限 \rho, 有 \displaystyle {\frac {r^{\mathrm {t}}(\boldsymbol {x}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0})}{\left \| \boldsymbol {w} \right \|} \geq \rho}. 我們希望最大化閾限 \rho, 但是通過縮放 \boldsymbol {w} 可以得到的解有無限個. 為了得到唯一解, 我們固定 \rho \left \| \boldsymbol {w} \right \| = 1. 這樣, 為了最大化邊緣, 我們最小化 \left \| \boldsymbol {w} \right \|. 這個問題可以化約到一個二次規劃的問題 : 對於 r^{\mathrm {t}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}}+ w_{0}) \geq 1 和任意 \mathrm {t}, 求 \min \frac {1}{2}\left \| \boldsymbol {w}^{2} \right \|. 這個問題的複雜度依賴於 \dim \boldsymbol {x}, 並且可以直接求解來找到 \boldsymbol {w} 和 w_{0}. 於是, 在超平面的兩側, 樣本距離超平面的距離至少為 \frac {1}{\left \| \boldsymbol {w} \right \|}, 而整個邊緣為 \frac {2}{\left \| \boldsymbol {w} \right \|}.
而當問題不是線性可分的時候, 在核機器中我們不去求得非線性函數, 而是使用非線性基礎函數將問題影射到新的更高維度的空間中. 在尋找最佳分離超平面時, 我們可以把該問題轉換成複雜度依賴於樣本數量而非維度的形式. 我們首先使用 Lagrange 乘數 \alpha^{\mathrm {t}}, 將二次最佳化問題改寫為非約束的形式 : \displaystyle {\begin {aligned} L_{p} &= \frac {1}{2}\left \| \boldsymbol {w} \right \|^{2} - \sum \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}} {X}}\alpha^{\mathrm {t}}\left (r^{\mathrm {t}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0}) - 1 \right ) \\ &= \frac {1}{2}\left \| \boldsymbol {w} \right \|^{2} - \sum \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}} {X}}\alpha^{\mathrm {t}}r^{\mathrm {t}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0}) + \sum \limits_{\mathrm {t} = 1}^{\mathop {\mathrm {card}} {X}}\alpha^{\mathrm {t}}. \end {aligned}} 關於 \boldsymbol {w}, 我們最小化 w_{0}; 對於 \alpha^{\mathrm {t}} \geq 0, 我們最大化 w_{0}. 這由鞍點 (非局部極值點的駐點) 給出解. 這是一個凸二次最佳化問題, 因為主要項式凸的且線性約束也是凸的. 這樣, 我們可以使用 Karush-Kuhn-Tucker 條件 (Karush–Kuhn–Tucker conditions), 解其對偶問題 : 關於 \alpha^{\mathrm {T}}, 我們最大化 L_{p}. 其約束條件為 L_{p} 關於 \boldsymbol {w} 和 w_{0} 的梯度為 0, 並且 \alpha^{\mathrm {T}} \geq 0 : \displaystyle {\frac {\partial {L_{p}}}{\partial {\boldsymbol {w}}} = 0 \Rightarrow \boldsymbol {w} = \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}r^{\mathrm {t}}\boldsymbol {x}^{\mathrm {t}}}, \displaystyle {\frac {\partial {L_{p}}}{\partial {w_{0}}} = 0 \Rightarrow \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}r^{\mathrm {t}} = 0}. 將其置換入 L_{p} 中, 我們得到對偶問題 : \displaystyle {\begin {aligned} L_{d} &= \frac {1}{2}\boldsymbol {w}^{\mathrm {T}}\boldsymbol {w} - \boldsymbol {w}^{\mathrm {T}}\sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}r^{\mathrm {t}}\boldsymbol {x}^{\mathrm {t}} - w_{0}\sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}r^{\mathrm {t}} + \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}} \\ &= -\frac {1}{2}\boldsymbol {w}^{\mathrm {T}}\boldsymbol {w} + \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}} \\ &= -\frac {1}{2}\sum \limits_{\mathrm {t}}\sum \limits_{\mathrm {s}}\alpha^{\mathrm {t}}\alpha^{\mathrm {s}}r^{\mathrm {t}}r^{\mathrm {s}}(\boldsymbol {x}^{\mathrm {t}})^{\mathrm {T}}\boldsymbol {x}^{\mathrm {s}} + \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}. \end {aligned}} 我們只需要關於 \alpha^{\mathrm {t}} 對它最大化, 其約束條件為對於任意 \mathrm {t} 和 \alpha^{\mathrm {t}} \geq 0, 有 \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}r^{\mathrm {t}} = 0. 這可以使用二次最佳化的方法來求解. 對偶問題的複雜度依賴於樣本大小 \mathop {\mathrm {card}}{X} 而非 \dim {\boldsymbol {x}}. 一旦我們解得 \alpha^{\mathrm {t}}, 我們可以看到共有 \mathop {\mathrm {card}}{X} 個, 但是對於絕大多數 \alpha^{\mathrm {t}}, 有 \alpha^{\mathrm {t}} = 0, 只有少量 \alpha^{\mathrm {t}} 滿足 \alpha^{\mathrm {t}} > 0. 使得 \alpha^{\mathrm {t}} > 0 的樣本 \boldsymbol {x}^{\mathrm {t}} 的集合稱為支援向量. 這些 \boldsymbol {x}^{\mathrm {t}} 滿足 \displaystyle {r^{\mathrm {t}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0}) = 1} 且落在邊緣上. 我們使用這一事實, 由任意支援向量來計算 w_{0} : \displaystyle {w_{0} = r^{\mathrm {t}} - \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}}}. 從數值穩定性的角度來說, 建議對所有支援向量計算上式, 並且取平均值. 這樣找出的判別式稱為支援向量機 (support vector machine).
對於滿足 \alpha^{\mathrm {t}} = 0 和 r^{\mathrm {t}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} - w_{0}) > 1 的樣本 \boldsymbol {x}^{\mathrm {t}} 來說, 它們落在了遠離判別式的地方, 並且對超平面沒有影響. 非支援向量的樣本不攜帶任何信息, 即便刪除它們的任意子集, 仍然.會得到相同的解. 從這個角度來說, 支援向量機演算法與精簡的最近鄰演算法類似, 它只保存鄰近類別判別式的樣本
作為基於判別式的演算法, 支援向量機只關注那些靠近邊界的樣本, 丟棄了那些落在內部的樣本. 使用這種思想, 可以在求支援向量之前先使用一種比較簡單的分類器過濾掉這種樣本的大部分, 從而降低支援向量機演算法最佳化階段的複雜度.
在檢驗階段, 我們並不強調邊緣. 計算 g(\boldsymbol {x}) = \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + w_{0}, 並且根據 g(\boldsymbol {x}) 的符號選擇類別 : \displaystyle {\text {選擇 } \begin {cases} C_{1} & {g(\boldsymbol {x}) > 0} \\ C_{2} & {g(\boldsymbol {x} < 0)}. \end {cases}}
對於樣本非線性可分的情況, 上面所講述的演算法就不可用. 在這種情況下, 如果兩個類別不是線性可分的, 就可以將它們分開的超平面. 此時, 我們一般尋找出錯最少的超平面. 我們定義鬆弛變數 \xi^{\mathrm {t}} \geq 0, 存放到邊緣的離差 (樣本到平均值的距離). 有兩種類型的離差 :
- 樣本可能位於超平面的錯誤一側, 並且被錯誤地分類;
- 樣本可能在正確的一側, 但是可能落在邊緣, 即離超平面的距離不夠遠.
放寬 r^{\mathrm {t}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0}) \geq 1, 我們要求 \displaystyle {r^{\mathrm {t}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0}) \geq 1 - \xi^{\mathrm {t}}}. 如果 \xi^{\mathrm {t}} = 0, 則 \boldsymbol {x}^{\mathrm {t}} 沒有問題; 如果 0 < \xi^{\mathrm {t}} < 1, 則 \boldsymbol {x}^{\mathrm {t}} 被正確分類, 但是它在邊緣; 如果 \xi^{\mathrm {t}} \geq 1, 則 \boldsymbol {x}^{\mathrm {t}} 被錯誤分類. 錯誤分類的數量為 \mathop {\mathrm {card}} \left \{ \boldsymbol {x}^{\mathrm {t}} : \xi^{\mathrm {t}} > 1 \right \}, 並且不可分的點的數量為 \mathop {\mathrm {card}} \left \{ \boldsymbol {x}^{\mathrm {t}} : \xi^{\mathrm {t}} > 0 \right \}. 我們定義軟性錯誤為 \sum \limits_{\mathrm {t}}\xi^{\mathrm {t}}, 並將 L_{p} 加上這個軟性錯誤作為懲罰項 : \displaystyle {L_{p} = \frac {1}{2}\left \| \boldsymbol {w} \right \|^{2} + C\sum \limits_{\mathrm {t}}\xi^{\mathrm {t}}}. 其中, C 為懲罰因素, 其約束條件和之前相同. 加上這些約束之後, 之前的 L_{p} 變成了 \displaystyle {L_{p} = \frac {1}{2}\left \| \boldsymbol {w} \right \|^{2} + C\sum \limits_{\mathrm {t}}\xi^{\mathrm {t}} - \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}} \left (r^{\mathrm {t}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0}) - + \xi^{\mathrm {t}} \right ) - \sum \limits_{\mathrm {t}}\mu^{\mathrm {t}}\xi^{\mathrm {t}}}. 其中, \mu^{\mathrm {t}} 是新的 Lagrange 乘數, 以確保 \xi^{\mathrm {t}} \geq 0. 當我們對上式關於參數求偏導數並令其為 0 時, 我們得到 \displaystyle {\frac {\partial {L_{p}}}{\partial {\boldsymbol {w}}} = 0 \Rightarrow \boldsymbol {w} = \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}r^{\mathrm {t}}\boldsymbol {x}^{\mathrm {t}}}, \displaystyle {\frac {\partial {L_{p}}}{\partial {w_{0}}} = 0 \Rightarrow \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}r^{\mathrm {t}} = 0}, \displaystyle {\frac {\partial {L_{p}}}{\partial {\xi^{\mathrm {t}}}} = 0 \Rightarrow C - \alpha^{\mathrm {t}} - \mu^{\mathrm {t}} = 0}. 由於 \mu^{\mathrm {t}} \geq 0, 所以最後一式意味著 0 \leq \alpha^{\mathrm {t}} \leq C. 把這些置換入 L_{p}, 得到關於 \alpha^{\mathrm {t}} 的最大化對偶問題 \displaystyle {L_{d} = \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}} - \frac {1}{2}\sum \limits_{\mathrm {t}}\sum \limits_{\mathrm {s}}\alpha^{\mathrm {t}}\alpha^{\mathrm {s}}r^{\mathrm {t}}r^{\mathrm {s}}(\boldsymbol {x}^{\mathrm {t}})^{\mathrm {T}}\boldsymbol {x}^{\mathrm {s}}}. 其約束條件為對於任意 \mathrm {t} 和 0 \leq \alpha^{\mathrm {t}} \leq C, 有 \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}r^{\mathrm {t}} = 0.
解這個對偶問題, 我們看到與可分情況一樣, 落在邊界正確一側並距離邊界足夠元的樣本隨著 \alpha^{\mathrm {t}} = 0 而消逝. 支援向量的 \alpha^{\mathrm {t}} > 0, 它們定義 \boldsymbol {w}. 當然, 那些使得 \alpha^{\mathrm {t}} < C 的樣本落在了邊緣上, 並且我們使用它們計算 w_{0}. 它們有 \xi^{\mathrm {t}} = 0, 並且滿足 r^{\mathrm {t}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0}) = 1. 同樣, 最後在這些 w_{0} 的估計上取平均值. 對於在邊緣中或者錯誤分類的那些樣本, 有 \alpha^{\mathrm {t}} = C.
作為支援向量存放的那些不可分的樣本, 是這樣的樣本 : 如果它們不再學習樣本中, 則就會有麻煩, 不能正確地對它們進行分類; 或者它們被錯誤地分類; 又或者被正確分類但是距離超平面沒有足夠的距離, 也就是說沒有足夠的置信度. 我們可以說, 支援向量的個數式期望錯誤估計的一個上限, 而期望檢驗錯誤率為 \displaystyle {\mathop {\mathrm {E}}_{\mathop {\mathrm {card}}{X}} \big ( \mathop {\mathbf {P}}(\text {error}) \big ) \leq \frac {\mathop {\mathrm {E}}_{\mathop {\mathrm {card}}{X}}(\mathop {\mathrm {card}} \left \{ \boldsymbol {x}^{\mathrm {t}} : \alpha^{\mathrm {t}} > 0 \right \})}{\mathop {\mathrm {card}}{X}}}. 這是被證明過的. 其中, \mathop {\mathrm {E}}_{\mathop {\mathrm {card}} {X}}(\cdot) 表示在學習樣本上的期望. 這意味著錯誤率依賴於支援向量的數量而不依賴於輸入的維度.
式 \displaystyle {r^{\mathrm {t}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0}) \geq 1 - \xi^{\mathrm {t}}} 說明, 如果樣本在錯誤的一側或者距離邊界的距離小於 1, 那麼定義它為錯誤. 這稱作鉸鏈損失 (hinge loss). 如果 y^{\mathrm {t}} = \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0} 是輸出, 而 r^{\mathrm {t}} 是期望輸出, 則鉸鏈損失函數定義為 \displaystyle {\ell_{\mathop {\mathrm {hinge}}}(y^{\mathrm {t}}, r^{\mathrm {t}}) = \begin {cases} 0 & {y^{\mathrm {t}}r^{\mathrm {t}} \geq 1} \\ 1 - y^{\mathrm {t}}r^{\mathrm {t}} & {\text {else}}. \end {cases}} 懲罰因素 C 是用交叉驗證微調的正規化參數. 它準確地解釋邊緣最大化與誤差最小化之間的權衡 : 如果 C 太大, 那麼對未分開的點具有較高的懲罰, 並且可能存放許多支援向量從而導致過適; 如果 C 太小, 則可能找到過於簡單的解從而導致乏適. 通常, 通過考察檢驗樣本上的正確率, 在對數尺度 \left \{ 10^{-6}, 10^{-5}, ..., 10^{5}, 10^{6} \right \} 中選擇.
另一種等價的軟性邊緣超平面表示使用參數 v \in [0, 1] 而不是 C : 對於 r^{\mathrm {t}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0}) \geq \rho - \xi^{\mathrm {t}}, \xi^{\mathrm {t}} \geq 0 和 \rho \geq 0, 我們希望最小化 \displaystyle {\frac {1}{2} \left \| \boldsymbol {w} \right \|^{2} - v\rho + \frac {1}{\mathop {\mathrm {card}}{X}}\sum \limits_{\mathrm {t}}\xi^{\mathrm {t}}}. 其中, \rho 是最佳化問題的變數並且縮放邊緣 : 現在的邊緣是 \frac {2\rho}{\left \| \boldsymbol {w} \right \|}. 其對偶問題為 \displaystyle {L_{d} = -\frac {1}{2}\sum \limits_{\mathrm {t}}\sum \limits_{\mathrm {s}}\alpha^{\mathrm {t}}\alpha^{\mathrm {s}}r^{\mathrm {t}}r^{\mathrm {s}}(\boldsymbol {x}^{\mathrm {t}})^{\mathrm {T}}\boldsymbol {x}^{\mathrm {s}}}, 約束條件為 \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}r^{\mathrm {t}} = 0, 0 \leq \alpha^{\mathrm {t}} \leq \frac {1}{\mathop {\mathrm {card}}{X}} 和 \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}} \geq v.
針對線性不可分的情況, 我們提出了一種解決方案, 但是我們曾經提到可以將樣本影射到更高維度的空間中這種方法. 我們使用合適的基礎函數通過非線性變換將問題影射到更高維度的新空間中, 然後在新空間中使用線性模型. 新空間中的線性模型對應於原始空間中的非線性空間. 這種方法可以用於分類問題和回歸問題, 並且對於分類問題這種特殊情況, 它可以與任意模式一起使用.
設有基礎函數 \displaystyle {\boldsymbol {z} = \boldsymbol {\phi}(\boldsymbol {x})}. 其中, z_{j} = \phi_{j}(\boldsymbol {x}), j = 1, 2, ..., k, k 是新的維度大小, 即將 d 維 \boldsymbol {x} 空間影射到 k 維 \boldsymbol {z} 空間上, 判別式為 \displaystyle {g(\boldsymbol {z}) = \boldsymbol {x}^{\mathrm {T}}\boldsymbol {z}}, \displaystyle {g(\boldsymbol {x}) = \boldsymbol {x}^{\mathrm {T}}\boldsymbol {\phi}(\boldsymbol {x}) = \sum \limits_{j = 1}^{k}w_{j}\phi_{j}(\boldsymbol {x})}. 這裡, 我們並不適用單獨的 w_{0}. 我們假定 z_{1} = \phi(\boldsymbol {x}) \equiv 1. 通常, k 遠大於 d, 甚至大於樣本數量. 這也是使用對偶形式的優點. 對偶問題的複雜度依賴於樣本數量, 如果我們使用原始問題, 複雜度將依賴於 k. 這裡, 我們也使用軟性邊緣超平面的更一般情況, 因為我們不能保證問題在新空間中是線性可分的.
對於 L_{p}, 這和之前是一樣的 : \displaystyle {L_{p} = \frac {1}{2}\left \| \boldsymbol {w} \right \|^{2} + C\sum \limits_{\mathrm {t}}\xi^{\mathrm {t}}}. 不同之處在於現在約束在新的維度空間上 : \displaystyle {r^{\mathrm {t}}\boldsymbol {x}^{\mathrm {T}}\boldsymbol {\phi}(\boldsymbol {x}^{\mathrm {t}}) \geq 1 - \xi^{\mathrm {t}}}. Lagrange 函數為 \displaystyle {L_{p} = \frac {1}{2}\left \| \boldsymbol {w} \right \|^{2} + C\sum \limits_{\mathrm {t}}\xi^{\mathrm {t}} - \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}} (r^{\mathrm {t}}\boldsymbol {w}^{\mathrm {T}}\boldsymbol {\phi}(\boldsymbol {x}^{\mathrm {t}}) - 1 + \xi^{\mathrm {t}}) - \sum \limits_{\mathrm {t}}\mu^{\mathrm {t}}\xi^{\mathrm {t}}}. 對上述函數關於參數求偏導數並且令它們為 0 可得 \displaystyle {\frac {\partial {L_{p}}}{\partial {\boldsymbol {w}}} = \boldsymbol {w} = \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}r^{\mathrm {t}}\boldsymbol {\phi}(\boldsymbol {x}^{\mathrm {t}})}, \displaystyle {\frac {\partial {L_{p}}}{\partial {\xi^{\mathrm {t}}}} = C - \alpha^{\mathrm {t}} - \mu^{\mathrm {t}} = 0}. 現在, 對偶問題是 \displaystyle {L_{d} = \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}} - \frac {1}{2}\sum \limits_{\mathrm {t}}\sum \limits_{\mathrm {s}}\alpha^{\mathrm {t}}\alpha^{\mathrm {s}}r^{\mathrm {t}}r^{\mathrm {s}}(\boldsymbol {x}^{\mathrm {t}})^{\mathrm {T}}\boldsymbol {x}^{\mathrm {s}}}. 其約束條件為對於任意 \mathrm {t} 和 0 \leq \alpha^{\mathrm {t}} \leq C, 有 \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}r^{\mathrm {t}} = 0.
核機器的基本思想是用原始輸入空間中的樣本之間的核函數 K(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}^{\mathrm {s}}) 取代基礎函數的內積 \boldsymbol {\phi}^{\mathrm {T}}(\boldsymbol {x}^{\mathrm {t}})\boldsymbol {\phi}(\boldsymbol {x}^{\mathrm {s}}). 這樣, 取代了把兩個樣本 \boldsymbol {x}^{\mathrm {t}} 和 \boldsymbol {x}^{\mathrm {s}} 影射到了 \boldsymbol {z} 空間並在那裡做點積, 我們直接使用原始空間中的核函數 \displaystyle {L_{d} = \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}} - \frac {1}{2}\sum \limits_{\mathrm {t}}\sum \limits_{\mathrm {s}}\alpha^{\mathrm {t}}\alpha^{\mathrm {s}}r^{\mathrm {t}}r^{\mathrm {s}}K(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}^{\mathrm {s}})}.
核函數也出現在判別式中 : \displaystyle {g(\boldsymbol {x}) = \boldsymbol {w}^{\mathrm {T}}\boldsymbol {\phi}(\boldsymbol {x}^{\mathrm {t}}) = \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}r^{\mathrm {t}}\boldsymbol {\phi}^{\mathrm {T}}(\boldsymbol {x}^{\mathrm {t}})\boldsymbol {\phi}(\boldsymbol {x}^{\mathrm {t}}) = \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}r^{\mathrm {t}}K(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}^{\mathrm {s}})}. 這意味著, 如果有核函數, 則完全不需要把它影射到新空間中. 實際上, 對於任何有效的核函數, 確實存在對應的影射函數, 但是使用 K(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}) 比計算 \boldsymbol {\phi}(\boldsymbol {x}^{\mathrm {t}}) 和 \boldsymbol {\phi}(\boldsymbol {x}) 再求點積簡單得多.
核值的矩陣 K, 其中 K_{ts} = K(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}^{\mathrm {s}}) 稱作 Gram 矩陣 (Gram matrix), 它應該是對稱的且半正定的. 近年來, 在共享資料集中, 僅有 K 矩陣而不提供 \boldsymbol {x}^{\mathrm {t}} 或者 \boldsymbol {\phi}(\boldsymbol {x}^{\mathrm {t}}) 已經成為標準做法. 然而, 這意味著我們只能使用這些可用的信息進行學習和檢驗, 並不能使用學習後的模型對這個資料集之外的資料進行預測.
最流行的通用核函數有
- q 次多項式 : K(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}) = (\boldsymbol {x}^{\mathrm {T}}\boldsymbol {x} + 1)^{q}. 其中, q 由用戶給出. 當 q = 1 時, 有對應的原公式的線性核;
- 多方向基礎函數 : K(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}) = \mathrm {e}^{-\frac {\left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {x} \right \|^{2}}{2s^{2}}}. 它定義了一個球型的核, 其中 \boldsymbol {x}^{\mathrm {t}} 是球心, 而 s 由用戶給出, 定義半徑;
- 基於馬式距離的多方向基礎函數 : K(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}) = \mathrm {e}^{-\frac {1}{2}(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {x})^{\mathrm {T}}S^{-1}-\frac {1}{2}(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {x})}. 其中, S 是協方差矩陣;
- 一般的多方向基礎函數 : K(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}) = \mathrm {e}^{-\frac {D(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x})}{2s^{s}}};
- 函數值域在 [-1, 1] 之間的乙狀函數.
核函數通常被看作相似性度量函數 (similarity measurement function), 從應用的角度來說, \boldsymbol {x} 和 \boldsymbol {y} 越相似, K(\boldsymbol {x}, \boldsymbol {y}) 取更大值. 這意味著關於應用的任何知識都可以通過定義合適的核提供給學習演算法, 並且這種核可以看作線索. 有時候, 我們可以計算兩個物件之間的相似度得分, 這不必是半正定的. 給定兩個字串, 一種核度量是編輯距離, 即把一個字串轉換為另一個需要多少次操作 (插入、刪除核替換). 在這種情況下, 一種技巧是定義一個 M 個樣板的集合, 並且把物件表示稱一個在所有樣板上得分的 M 維向量. 也就是說, 如果 \boldsymbol {m}_{i} 是樣板, s(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {m}_{i}) 是 \boldsymbol {x}^{\mathrm {t}} 和 \boldsymbol {m}_{i} 之間的得分, 則定義 \displaystyle {\boldsymbol {\phi}(\boldsymbol {x}^{\mathrm {t}}) = \left ( s(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {m}_{1}), s(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {m}_{2}), ..., s(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {m}_{M}) \right )^{\mathrm {T}}}. 並且我們定義經驗核影射為 \displaystyle {K(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}^{\mathrm {s}}) = \boldsymbol {\phi}^{\mathrm {T}}(\boldsymbol {x}^{\mathrm {t}})\boldsymbol {\phi}(\boldsymbol {x}^{\mathrm {s}})}. 有時, 我們希望由二變數評分函數. 在這種情況下, 技巧是定義一個圖, 其中節點是樣本, 而兩個節點如果相互作用, 那麼就連結兩個節點. 於是, 我們說兩個不直接連結的節點是相似的, 如果它們之間的路徑短或者被許多路徑連結. 這把逐對局部相互作用轉換稱全局相似性度量 (global similarity measurement).
如果 p(\boldsymbol {x}) 是機率分布, 則 \displaystyle {K(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}) = p(\boldsymbol {x}^{\mathrm {t}})p(\boldsymbol {x})} 是一個可行的核函數. 當 p(\boldsymbol {x}) 是 \boldsymbol {x} 生成的模型時, 就使用這個核函數.
核函數也可以是一些簡單的核組合的新核. 如果 K_{1}(\boldsymbol {x}, \boldsymbol {y}) 和 K_{2}(\boldsymbol {x}, \boldsymbol {y}) 是兩個可行的核, 而 c 是常數, 則 \displaystyle {K(\boldsymbol {x}, \boldsymbol {y}) = \begin {cases} cK_{1}(\boldsymbol {x}, \boldsymbol {y}) \\ K_{1}(\boldsymbol {x}, \boldsymbol {y}) + K_{2}(\boldsymbol {x}, \boldsymbol {y}) \\ K_{1}(\boldsymbol {x}, \boldsymbol {y})K_{2}(\boldsymbol {x}, \boldsymbol {y}) \end {cases}} 也是可行的核.
還可以對 \boldsymbol {x} 的不同子集使用不同的核. 這樣, 我們看到組合核作為融合來自於不同信息源的信息的另一種方法, 其中每個核都根據自己的領域度量相似性. 當我們有來自兩種表示 A 和 B 的輸入時, \displaystyle {\begin {aligned} K_{A}(\boldsymbol {x}_{A}, \boldsymbol {y}_{A}) + K_{B}(\boldsymbol {x}_{B}, \boldsymbol {y}_{B}) &= \boldsymbol {\phi}_{A}^{\mathrm {T}}(\boldsymbol {x}_{A})\boldsymbol {\phi}_{A}(\boldsymbol {y}_{A}) + \boldsymbol {\phi}_{B}^{\mathrm {T}}(\boldsymbol {x}_{B})\boldsymbol {\phi}_{B}(\boldsymbol {x}_{B}) \\ &= \boldsymbol {\phi}^{\mathrm {T}}(\boldsymbol {x})\boldsymbol {\phi}(\boldsymbol {y}) \\ &= K(\boldsymbol {x}, \boldsymbol {y}). \end {aligned}} 其中, \boldsymbol {x} = [\boldsymbol {x}_{A}, \boldsymbol {x}_{B}] 是兩種表示的連結. 也就是說, 取兩個核的核對應於在連結的特徵向量中做點積. 這可以推廣到大量核 : \displaystyle {K(\boldsymbol {x}, \boldsymbol {y}) = \sum \limits_{i = 1}^{m}K_{i}(\boldsymbol {x}, \boldsymbol {y})}. 這類似於取分類器的平均, 現在不過是在核上取平均. 甚至還可以引入加權和 : \displaystyle {K(\boldsymbol {x}, \boldsymbol {y}) = \sum \limits_{i = 1}^{m}\eta_{i}K_{i}(\boldsymbol {x}, \boldsymbol {y})}. 滿足 \eta_{i} \geq 0 和 \sum \limits_{i}\eta_{i} = 1 的稱為凸組合 (convex combination), 滿足 \eta_{i} \geq 0 而不滿足 \sum \limits_{i}\eta_{i} = 1 的稱為錐形組合 (conical combination). 這稱為多核學習 (multi-kenel learning), 其中用核的加權取代單核. 單核目標函數變成 \displaystyle {L_{d} = \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}} - \frac {1}{2}\sum \limits_{\mathrm {t}}\sum \limits_{\mathrm {s}}\alpha^{\mathrm {t}}\alpha^{\mathrm {s}}r^{\mathrm {t}}r^{\mathrm {s}}\sum \limits_{i}\eta_{i}K_{i}(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}^{\mathrm {s}})}. 學習之後, \eta_{i} 的取值取決於對應的核 K_{i}(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}) 在判別式中的作用. 還可以通過把核權重定義為輸入 \boldsymbol {x} 的有參數函數對核局部化 : \displaystyle {g(\boldsymbol {x}) = \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}r^{\mathrm {t}}\sum \limits_{i}\eta_{i}(\boldsymbol {x}|\theta_{i})K_{i}(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x})}. 參數 \theta_{i} 一同參與學習.
當存在 K 個 (K > 2) 類別的時候, 直接了當的方法是定義 K 個二分類問題, 學習 K 個支援向量機 g_{i}(\boldsymbol {x}) (i = 1, 2, …, K). 也就是說, 在學習 g_{i}(\boldsymbol {x}) 時, C_{i} 類別的樣本標記為 1, 而 C_{k} (k \neq i) 類別的樣本標記為 -1. 在檢驗時, 計算所有的 g_{i}(\boldsymbol {x}), 並且選擇最大的那一個.
一個乙狀函數也可以模擬單個二分類問題的支援向量機的輸出, 把輸出轉換稱事後機率. 類似地, 可以訓練一個軟性最大輸出層來最小化誤差, 產生 K\ (K > 2) 個事後機率 : \displaystyle {y_{i}(\boldsymbol {x}) = \sum \limits_{j = 1}^{K}v_{ij}f_{j}(\boldsymbol {x}) + v_{i0}}. 其中, f_{i}(\boldsymbol {x}) 是支援向量機的輸出, 而 y_{i} 是事後機率的輸出. 權重 v_{ij} 的學習來最小化誤差. 然而需要注意的是, 用於 v_{ij} 學習的資料應當不同於用於支援向量機 f_{j}(\boldsymbol {x}) 的學習資料, 這樣可以減輕過適.
與其它分類方法一樣, 不是建構 K 個二分類問題的支援向量機把一個類別與其它類別分開的通常辦法, 可以建構 \frac {K(K - 1)}{2} 個逐對分類器, 每個 g_{ij}(\boldsymbol {x}) 取 C_{i} 類別樣本標記為 1, C_{j} 類別樣本標記為 -1, 並且不使用其它類別的樣本. 一般認為逐對分離是一個比較簡單的事情, 並且由於使用較少的資料, 使得最佳化的過程更快. 在一般情況下, 一對所有核逐對分離都是把一個多分類問題拆解為多個二分類問題的校正輸出碼的特殊情況. 作為二分類問題分類器的支援向量機是兩分類問題的理想選擇, 並且還可以有增量方法, 增加新的二分類支援向量機, 更好地把存在問題的一對類別分開.
另一種可能的方法是設計一個涉及所有類別的多分類最佳化問題 : 對於任意 i \neq z^{\mathrm {t}} 和 \xi^{\mathrm {t}} \geq 0, 在 \boldsymbol {w}_{z^{\mathrm {t}}}\boldsymbol {x}^{\mathrm {t}} + w_{z^{\mathrm {t}}0} \geq \boldsymbol {w}_{i}\boldsymbol {x}^{\mathrm {t}} + w_{i0} + 2 - \xi^{\mathrm {t}} 的條件下最小化 \displaystyle {\frac {1}{2}\sum \limits_{i = 1}^{K}\left \| \boldsymbol {w}_{i} \right \|^{2} + C\sum \limits_{i}\sum \limits_{\mathrm {t}}\xi_{i}^{\mathrm {t}}}. 其中, z^{\mathrm {t}} 包含 \boldsymbol {x}^{\mathrm {t}} 的類別索引.
現在, 我們將支援向量機從分類問題推廣到回歸問題中. 對於線性模型, 我們有 \displaystyle {f(\boldsymbol {x}) = \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + w_{0}}. 而一般的回歸一般使用差的平方作為誤差函數 : \displaystyle {\mathrm {e}_{2}\left ( r^{\mathrm {t}}, f(\boldsymbol {x}^{\mathrm {t}}) \right ) = \left ( r^{\mathrm {t}} - f(\boldsymbol {x}^{\mathrm {t}}) \right )^{2}}. 然而, 對於支援向量機的回歸, 使用 \varepsilon 敏感損失函數 : \displaystyle {\mathrm {e}_{\varepsilon}\left ( r^{\mathrm {t}}, f(\boldsymbol {x}^{\mathrm {t}}) \right ) = \begin {cases} 0 & {\left | r^{\mathrm {t}} - f(\boldsymbol {x}^{\mathrm {t}}) \right | < \varepsilon} \\ \left | r^{\mathrm {t}} - f(\boldsymbol {x}^{\mathrm {t}}) \right | - \varepsilon & {\text {else}}. \end {cases}} 這意味著我們容忍高達 \varepsilon 的誤差, 並且超出的誤差具有線性而非平方的影響. 因此, 這種誤差函數更能抵抗噪音的影響.
類似於軟性邊緣超平面, 我們引入鬆弛變數來處理 \varepsilon 區域之外的偏誤, 得到在 r^{\mathrm {t}} - (\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + w_{0}) \leq \varepsilon + \xi_{+}^{\mathrm {t}}, (\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + w_{0}) - r^{\mathrm {t}} \leq \varepsilon + \xi_{-}^{\mathrm {t}}, \xi_{+}^{\mathrm {t}} \geq 0 和 \xi_{-}^{\mathrm {t}} \geq 0 的條件下最小化 \displaystyle {\frac {1}{2}\left \| \boldsymbol {w} \right \|^{2} + C\sum \limits_{\mathrm {t}}(\xi_{+}^{\mathrm {t}} + \xi_{-}^{\mathrm {t}})} 的最佳化問題. 這裡, 對正的和負的偏誤, 我們使用了兩種類別的鬆弛變數, 以保持它們為正數. 上述最佳化問題的 Lagrange 函數為 \displaystyle {\begin {aligned} L_{p} = &\frac {1}{2} \left \| \boldsymbol {w} \right \|^{2} + C\sum \limits_{\mathrm {t}}(\xi_{+}^{\mathrm {t}} + \xi_{-}^{\mathrm {t}}) - \sum \limits_{\mathrm {t}}\alpha_{+}^{\mathrm {t}}\left ( \varepsilon + \xi_{+}^{\mathrm {t}} - r^{\mathrm {t}} + (\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + w_{0}) \right ) - \\ &\sum \limits_{\mathrm {t}}\alpha_{-}^{\mathrm {t}}(\varepsilon + \xi_{-}^{\mathrm {t}} + r^{\mathrm {t}} - \left ( \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + w_{0}) \right ) - \sum \limits_{\mathrm {t}}(\mu_{+}^{\mathrm {t}}\xi_{+^{\mathrm {t}}} + \mu_{-}^{\mathrm {t}}\xi_{-}^{\mathrm {t}}). \end {aligned}} 令偏導數分別為 0 可得 \displaystyle {\frac {\partial {L_{p}}}{\partial {\boldsymbol {w}}} = \boldsymbol {w} - \sum \limits_{\mathrm {t}}(\alpha_{+}^{\mathrm {t}} - \alpha_{-}^{\mathrm {t}})\boldsymbol {x}^{\mathrm {t}} = 0 \Rightarrow \boldsymbol {w} = \sum \limits_{\mathrm {t}}(\alpha_{+}^{\mathrm {t}} - \alpha_{-}^{\mathrm {t}})\boldsymbol {x}^{\mathrm {t}}}, \displaystyle {\frac {\partial {L_{p}}}{\partial {w_{0}}} = \sum \limits_{\mathrm {t}}(\alpha_{+}^{\mathrm {t}} - \alpha_{-}^{\mathrm {t}})\boldsymbol {x}^{\mathrm {t}} = 0}, \displaystyle {\frac {\partial {L_{p}}}{\partial {\xi_{+}^{\mathrm {t}}}} = C - \alpha_{+}^{\mathrm {t}} - \mu_{+}^{\mathrm {t}} = 0}, \displaystyle {\frac {\partial {L_{p}}}{\partial {\xi_{-}^{\mathrm {t}}}} = C - \alpha_{-}^{\mathrm {t}} -\mu_{-}^{\mathrm {t}} = 0}. 對偶問題為 \displaystyle {L_{d} = \frac {1}{2}\sum \limits_{\mathrm {t}}\sum \limits_{\mathrm {s}}(\alpha_{+}^{\mathrm {t}} - \alpha_{-}^{\mathrm {t}})(\alpha_{+}^{\mathrm {s}} - \alpha_{-}^{\mathrm {s}})(\boldsymbol {x}^{\mathrm {t}})^{\mathrm {T}}\boldsymbol {x}^{\mathrm {s}} - \varepsilon \sum \limits_{\mathrm {t}}(\alpha_{+}^{\mathrm {t}} + \alpha_{-}^{\mathrm {t}}) + \sum \limits_{\mathrm {t}}r^{\mathrm {t}}(\alpha_{+}^{\mathrm {t}} - \alpha_{-}^{\mathrm {t}})}. 其限制條件為 0 \leq \alpha_{+}^{\mathrm {t}} \leq C, 0 \leq \alpha_{-}^{\mathrm {t}} \leq C 且 \sum \limits_{\mathrm {t}}(\alpha_{+}^{\mathrm {t}} - \alpha_{-}^{\mathrm {t}}) = 0.
求解之後, 支援向量滿足 \alpha_{+}^{\mathrm {t}} > 0 或者 \alpha_{-}^{\mathrm {t}} > 0, 而剩餘樣本滿足 \alpha_{+}^{\mathrm {t}} = \alpha_{-}^{\mathrm {t}} = 0. 我們利用滿足 0 < \alpha_{+}^{\mathrm {t}} < C 或 0 < \alpha_{-}^{\mathrm {t}} < C 的樣本來計算 w_{0}. 例如, 我們有 \alpha_{+}^{\mathrm {t}} > 0, 則有 \displaystyle {r^{\mathrm {t}} = \boldsymbol {x}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + w_{0} + \varepsilon}. 利用 \frac {\partial {L_{p}}}{\partial {\boldsymbol {w}}}, 可以將擬合直線寫成支援向量的加權和 : \displaystyle {f(\boldsymbol {x}) = \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + w_{0} = \sum \limits_{\mathrm {t}}(\alpha_{+}^{\mathrm {t}} - \alpha_{-}^{\mathrm {t}})(\boldsymbol {x}^{\mathrm {t}})^{\mathrm {T}}\boldsymbol {x} + w_{0}}. 其中的點積 (\boldsymbol {x}^{\mathrm {t}})^{\mathrm {T}}\boldsymbol {x}^{\mathrm {s}} 也可以使用核函數 K(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}^{\mathrm {s}}). 類似地, (\boldsymbol {x}^{\mathrm {t}})^{\mathrm {T}}\boldsymbol {x} 也可以用核函數 K(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}), 可以得到非線性擬合.
和分類問題中類似, 對於回歸問題, 同樣可以使用另一種等價的軟性邊緣超平面表示, 不過不僅需要參數 v, 也需要參數 C. 其中, 為了取代固定的 \varepsilon, 我們固定 v 來限制支援向量的比例.
在排名時, 我們使用 r^{\mathrm {u}} \prec r^{\mathrm {v}} 這樣的約束, 這意味著樣本 \boldsymbol {x}^{\mathrm {u}} 應該產生比 \boldsymbol {x}^{\mathrm {v}} 更高的得分. 那麼, 對於任意 r^{\mathrm {u}} \prec r^{\mathrm {v}}, 在約束條件 \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {u}} \geq \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {v}} + 1 - \xi^{\mathrm {t}} 和 \xi^{\mathrm {t}} \geq 0 下, 我們最小化 \displaystyle {L_{p} = \frac {1}{2}\left \| \boldsymbol {w} \right \|^{2} + C\sum \limits_{\mathrm {t}}\xi^{\mathrm {t}}} 約束條件要求了 \boldsymbol {x}^{\mathrm {u}} 的得分至少比 \boldsymbol {x}^{\mathrm {v}} 的得分多一個單位, 從而定義了邊緣. 變換第一個約束條件為 \boldsymbol {w}^{\mathrm {T}}(\boldsymbol {x}^{\mathrm {u}} - \boldsymbol {x}^{\mathrm {v}}) \geq 1 - \xi^{\mathrm {t}}, 我們可以把這看作是一個逐對差值 \boldsymbol {x}^{\mathrm {u}} - \boldsymbol {x}^{\mathrm {v}} 的二分類任務. 這樣, 通過計算這些差值並且根據 r^{\mathrm {u}} \prec r^{\mathrm {v}} 還是 r^{\mathrm {v}} \prec r^{\mathrm {u}} 來進行標記, 任何二分類問題的核機器都可以用來解決排名問題.
對偶問題為 \displaystyle {L_{d} = \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}} = \frac {1}{2}\sum \limits_{\mathrm {t}}\sum \limits_{\mathrm {s}}\alpha^{\mathrm {t}}\alpha^{\mathrm {s}}(\boldsymbol {x}^{\mathrm {u}} - \boldsymbol {x}^{\mathrm {v}})^{\mathrm {T}}\boldsymbol {x}^{\mathrm {k}} - \boldsymbol {x}^{\mathrm {l}}}. 其限制條件為 0 \leq \alpha^{\mathrm {t}} \leq C. 求解後, 對於滿足約束條件的有 \xi^{\mathrm {t}} = 0 和 \alpha^{\mathrm {t}} = 0; 對於滿足約束但是在邊緣中的有 0 < \xi^{\mathrm {t}} < 1 和 \alpha^{\mathrm {t}} < C; 而對於不滿足約束條件的有 \xi^{\mathrm {t}} > 1 和 \alpha^{\mathrm {t}} = C.
對於新的檢驗樣本 \boldsymbol {x}, 得分用下式進行計算 : \displaystyle {g(\boldsymbol {x}) = \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}(\boldsymbol {x}^{\mathrm {u}} - \boldsymbol {\mathrm {v}})^{\mathrm {T}}\boldsymbol {x}}. 現在, 我們將支援向量機用於單類別受限制的非監督學習, 即估計高密度區域. 我們並不進行分布估計, 而是想找出高密度區域和低密度區域, 這比較像是一個二分類問題. 這種邊界可以用於離群點檢測, 稱為單類別分類 (single class classification).
考慮一個中心為 \boldsymbol {a} 且半徑為 R 的球. 我們希望它圍住的密度儘可能大, 根據我們的經驗, 其中密度可以用樣本的比例進行度量. 同時, 與之權衡, 我們希望找到最小半徑. 為落在球之外的樣本定義一個鬆弛變數, 並且有一個和半徑成正比的光滑性度量. 那麼對於任意 \mathrm {t}, 在限制條件 \left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {a} \right \|^{2} \leq R^{2} + \xi^{\mathrm {t}} 且 \xi^{\mathrm {t}} \geq 0 的限制條件下, 我們最小化 \displaystyle {R^{2} + C\sum \limits_{\mathrm {t}}\xi^{\mathrm {t}}}. 加上這些約束, 注意 \left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {a} \right \|^{2} = (\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {a})^{\mathrm {T}}(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {a}), 得到 Lagrange 函數 : \displaystyle {L_{p} = R^{2} + C\sum \limits_{\mathrm {t}}\xi^{\mathrm {t}} - \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}\left (R^{2} + \xi^{\mathrm {t}} - \left ( (\boldsymbol {x}^{\mathrm {t}})^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} - 2\boldsymbol {a}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} + \boldsymbol {a}^{\mathrm {T}}\boldsymbol {a} \right ) \right ) - \sum \limits_{\mathrm {t}}\gamma^{\mathrm {t}}\xi^{\mathrm {t}}}. 其中, \alpha^{\mathrm {t}} \geq 0 和 \gamma^{\mathrm {t}} \geq 0, 並且這兩個都是 Lagrange 乘數. 關於參數求偏導數並且令其為 0 可得 \displaystyle {\frac {\partial {L_{p}}}{\partial {R}} = 2R - 2R\sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}} = 0 \Rightarrow \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}} = 1}, \displaystyle {\frac {\partial {L_{p}}}{\partial {\boldsymbol {a}}} = \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}(2\boldsymbol {x}^{\mathrm {t}} - 2\boldsymbol {a}) = 0 \Rightarrow \boldsymbol {a} = \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}\boldsymbol {x}^{\mathrm {t}}}, \displaystyle {\frac {\partial {L_{p}}}{\partial {\xi^{\mathrm {t}}}} = C - \alpha^{\mathrm {t}} - \gamma^{\mathrm {t}} = 0}. 由於 \gamma^{\mathrm {t}} \geq 0, 所以可以把最後一個約束寫為 0\leq \alpha^{\mathrm {t}} \leq C. 將這些置換入 L_{p}, 可得到關於 \alpha^{\mathrm {t}} 最大化的對偶問題 : \displaystyle {L_{d} = \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}(\boldsymbol {x}^{\mathrm {t}})^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}} - \sum \limits_{\mathrm {t}}\sum \limits_{\mathrm {s}}\alpha^{\mathrm {t}}\alpha^{\mathrm {s}}(\boldsymbol {x}^{\mathrm {t}})^{\mathrm {T}}\boldsymbol {x}^{\mathrm {s}}}. 其約束條件為 0 \leq \alpha^{\mathrm {t}} \leq C 和 \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}} = 1. 求解這個最佳化問題的時候, 大部分樣本都會隨著 \alpha^{\mathrm {t}} = 0 而消失 : 這些是落在球內的高度相似的樣本. 有兩種類型的支援向量滿足 \alpha^{\mathrm {t}} > 0 :
- 滿足 0 < \alpha^{\mathrm {t}} < C 且落在邊界上的樣本, \left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {a} \right \|^{2} = R^{2}\ (\xi^{\mathrm {t}} = 0);
- 滿足 \alpha^{\mathrm {t}} = C\ (\xi^{\mathrm {t}} > 0) 的樣本且落在邊界以外, 屬於離群點.
而第一類的樣本可以用來計算 R. 於是, 給定一個檢驗輸入 \boldsymbol {x}, 它屬於離群點若且唯若 \left \| \boldsymbol {x}^{\mathrm {t}} - \boldsymbol {a} \right \|^{2} > R^{2} 或者 \boldsymbol {x}^{\mathrm {T}}\boldsymbol {x} - 2\boldsymbol {a}^{\mathrm {T}}\boldsymbol {x} + \boldsymbol {a}^{\mathrm {T}}\boldsymbol {a} > R^{2} 成立.
使用核函數, 可以不限於球, 可以定義任意形狀的邊界. 將點積使用核函數替換即可 : \displaystyle {L_{d} = \sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}K(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}^{\mathrm {s}}) - \sum \limits_{\mathrm {t}}\sum \limits_{\mathrm {s}}\alpha^{\mathrm {t}}\alpha^{\mathrm {s}}K(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}^{\mathrm {s}})}. 我們拒絕樣本 x 若且唯若 \displaystyle {K(\boldsymbol {x}, \boldsymbol {x}) - 2\sum \limits_{\mathrm {t}}\alpha^{\mathrm {t}}K(\boldsymbol {x}, \boldsymbol {x}^{\mathrm {t}}) + \sum \limits_{\mathrm {t}}\sum \limits_{\mathrm {s}}\alpha^{\mathrm {t}}\alpha^{\mathrm {s}}K(\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}^{\mathrm {s}}) > R^{2}}. 第三項不依賴於樣本 \boldsymbol {x}, 我們將其當作常數.
我們曾經討論過非層數方法, 它並不依賴於全局模型來擬合數據, 而是從相鄰樣本的一個子集進行插值計算. 我們還討論過使用好的距離度量函數的重要性. 現在, 我們討論從數據中學習度量距離的方法. 嚴格來說, 這並不屬於核機器的範疇, 但是它使用了保持邊緣排名的思想. 其基本思想是把 k 最近鄰分類看作是一個排名問題. 假定 \boldsymbol {x}^{\mathrm {i}} 的 k 最近鄰包括兩個樣本 \boldsymbol {x}^{\mathrm {j}} 和 \boldsymbol {x}^{\mathrm {l}}, 使得 \boldsymbol {x}^{\mathrm {i}} 和 \boldsymbol {x}^{\mathrm {j}} 屬於同一類別, 而 \boldsymbol {x}^{\mathrm {l}} 屬於另一類別. 在這種情況下, 我們想要一個距離度量, 使得 \boldsymbol {x}^{\mathrm {i}} 和 \boldsymbol {x}^{\mathrm {l}} 之間的距離大於 \boldsymbol {x}^{\mathrm {i}} 和 \boldsymbol {x}^{\mathrm {j}} 之間的距離. 實際上, 我們不僅僅需要前者的距離比後者要大, 而且要求他們之間有一個單位的邊緣. 如果不滿足, 對於差, 我們有一個鬆弛變數 : \displaystyle {D(\boldsymbol {x}^{\mathrm {i}}, \boldsymbol {x}^{\mathrm {l}}) \geq D(\boldsymbol {x}^{\mathrm {i}}, \boldsymbol {x}^{\mathrm {j}}) + 1 - \xi^{\mathrm {ijl}}}. 這便是大邊緣最近鄰演算法的基本思想. 其需要最小化的誤差函數為 \displaystyle {(1 - \mu)\sum \limits_{\mathrm {i}, \mathrm {j}}D(\boldsymbol {x}^{\mathrm {i}}, \boldsymbol {x}^{\mathrm {j}}) + \mu \sum \limits_{\mathrm {i}, \mathrm {j}, \mathrm {l}}(1 - y_{\mathrm {l}})\xi_{\mathrm {ijl}}}. 其限制條件為對於 \boldsymbol {r}^{\mathrm {i}} = \boldsymbol {r}^{\mathrm {j}} 且 \boldsymbol {r}^{\mathrm {i}} \neq \boldsymbol {r}^{\mathrm {l}}, 有 D(\boldsymbol {x}^{\mathrm {i}}, \boldsymbol {x}^{\mathrm {l}}) \geq D(\boldsymbol {x}^{\mathrm {i}}, \boldsymbol {x}^{\mathrm {j}}) + 1 - \xi^{\mathrm {ijl}}. 除此之外, 還有 \xi^{\mathrm {ijl}} \geq 0. 這裡, \boldsymbol {x}^{\mathrm {j}} 是 \boldsymbol {x}^{\mathrm {i}} 的 k 最近鄰之一, 並且它們屬於相同的類別 : \boldsymbol {r}^{\mathrm {i}} = \boldsymbol {r}^{\mathrm {j}}——它是一個目標近鄰. \boldsymbol {x}^{\mathrm {l}} 也是 \boldsymbol {x}^{\mathrm {i}} 的 k 最近鄰之一. 如果它們有相同的標記, 則 y_{\mathrm {il}} = 1 且不存在誤差; 否則, \boldsymbol {x}^{\mathrm {l}} 是一個假冒者, 此時 y_{\mathrm {il}} = 0. 除此之外, 如果不滿足約束條件, 那麼鬆弛變數定義了一個代價. 誤差函數中的第二項正是這樣的鬆弛變數之和. 第一項是到所有目標近鄰的總距離, 並且最小化具有正規劃的效果, 即我們想保持距離盡可能小.
在大邊緣最近鄰演算法中, 使用馬式距離作為距離度量模型 : \displaystyle {D(\boldsymbol {x}^{\mathrm {i}}, \boldsymbol {x}^{\mathrm {j}}|M) = (\boldsymbol {x}^{\mathrm {i}} - \boldsymbol {x}^{\mathrm {j}})^{\mathrm {T}}M(\boldsymbol {x}^{\mathrm {i}} - \boldsymbol {x}^{\mathrm {j}})}. 其中, M 是矩陣, 而且是等待最佳化的參數. 那麼此時, 大邊緣最近鄰演算法的誤差函數實際上定義了一個凸問題, 精確地說是一個半正定問題, 因此其具有唯一的極小值.
當輸入維度很高但是只有少量樣本的時候, 可以通過將 M 分解為 M = L^{\mathrm {T}}L 來正規劃 : \displaystyle {D(\boldsymbol {x}^{\mathrm {i}}, \boldsymbol {x}^{\mathrm {j}}|L) = \left \| L\boldsymbol {x}^{\mathrm {i}} - L\boldsymbol {x}^{\mathrm {j}} \right \|^{2}}. 其中, L 是一個 k \times d 矩陣, k < d. L\boldsymbol {x} 是 \boldsymbol {x} 的 k 維影射, 而原始 d 維 \boldsymbol {x} 空間中的馬式距離對應於新的 k 維空間中的歐式距離. 如果把上式置換入大邊緣最近鄰演算法中需要最小化的誤差函數中, 那麼就得到了大邊緣支分析. 但是, 這不再是一個凸函數最佳化問題, 並且如果使用梯度下降, 會得到一個局域的最佳解.
從主成分分析中, 我們知道, 通過影射到協方差矩陣 \Sigma 的具有最大特徵值的特徵向量上, 主成分分析可以做到維度化約. 如果樣本是中心化的, 即 \mathop {\mathrm {E}}(\boldsymbol {x}) = 0, 則這可以記作 X^{\mathrm {T}}X. 在核版本中, 我們在 \boldsymbol {\phi}(\boldsymbol {x}) 的空間中而不是在原始 \boldsymbol {x} 中作處理. 因為通常這個新空間的維度 d 可能比樣本數量大得多, 我們寧願使用 \mathop {\mathrm {card}} {X} \times \mathop {\mathrm {card}} {X} 矩陣 XX^{\mathrm {T}} 做特徵嵌入, 而不願意使用 d \times d 矩陣 X^{\mathrm {T}}X. 影射後的資料矩陣為 \Phi = \boldsymbol {\phi}(\boldsymbol {x}), 因此在 \Phi^{\mathrm {t}}\Phi 的特徵向量上進行處理因而在核矩陣 K 上進行處理.
核主成分分析使用核矩陣的特徵向量核特徵值, 而這對應於在 \boldsymbol {\phi}(\boldsymbol {x}) 空間中做線性維度化約. 當 \boldsymbol {c}_{i} 和 \lambda_{i} 是對應的特徵向量和特徵值的時候, 影射後的新的 k 維度值可以用下式進行計算 : \displaystyle {\boldsymbol {z}_{j}^{\mathrm {t}} = \sqrt {\lambda_{j}}\boldsymbol {c}_{j}^{\mathrm {t}}}. 其中, j = 1, 2, ..., k.
14. 貝氏網絡
貝氏網絡的基礎是一個有向無環圖, 它由節點和節點之間的有向邊組成. 每個節點對應於一個隨機變數 X, 並且具有一個對應於該隨機變數的機率值 \mathop {\mathbf {P}}(X). 如果存在一條從節點 X 到節點 Y 的有向邊, 那麼表明隨機變數 X 對 Y 有直接影響. 這一影響被條件機率 \mathop {\mathbf {P}}(Y|X) 所決定. 在貝氏網絡中, 並非所有節點都是連結的. 實際上, 一個節點一般來說只和少數其它節點相連結. 一般來說, 對於複雜的貝氏網絡, 我們可以將其分解為較小的圖, 並且在局域中作出判斷後將結果在圖上進行傳播.
將貝氏網絡進行分解, 總共會有三個小結果 : 單個節點的情況、兩個節點相連的情況和三個節點的情況.
首先, 對於事件 X 和 Y, 我們結合條件機率, 將這兩個事件的聯合機率表示為 \displaystyle {\mathop {\mathbf {P}}(X, Y) = \mathop {\mathbf {P}}(X)\mathop {\mathbf {P}}(Y|X) = \mathop {\mathbf {P}}(Y)\mathop {\mathbf {P}}(X|Y) = \mathop {\mathbf {P}}(XY)}. 當事件 X 和 Y 獨立的時候, 有 \displaystyle {\mathop {\mathbf {P}}(X, Y) = \mathop {\mathbf {P}}(X)\mathop {\mathbf {P}}(Y)}.
給定三個事件 X, Y 和 Z 是條件獨立事件, 若且唯若 \displaystyle {\mathop {\mathbf {P}}(X, Y|Z) = \mathop {\mathbf {P}}(X|Z)\mathop {\mathbf {P}}(Y|Z)} 成立. 對於上式, 也可以將其寫為 : \displaystyle {\mathop {\mathbf {P}}(X|Y, Z) = \mathop {\mathbf {P}}(X|Z)}.
給定事件 X, Y 和 Z, 三個事件可以順序連結 :
從 Figure 9 中, 我們可以看到, 知道 X 的狀態並不能為 Z 增加什麼附加的知識, 我們記作 \displaystyle {\mathop {\mathbf {P}}(Z|Y, X) = \mathop {\mathbf {P}}(Z|Y)}, 並且說 Y 阻擋了 X 到 Z 的路徑, 即 Y 將 X 和 Z 分開, 亦即如果刪除 Y, 那麼就不存在 X 到 Z 的路徑. 在這種情況下, 聯合機率可以寫為 \displaystyle {\mathop {\mathbf {P}}(X, Y, Z) = \mathop {\mathbf {P}}(X)\mathop {\mathbf {P}}(Y|X)\mathop {\mathbf {P}}(Z|Y)}. 這樣表示聯合機率意味著獨立性 : \displaystyle {\mathop {\mathbf {P}}(Z|X, Y) = \frac {\mathop {\mathbf {P}}(X, Y, Z)}{\mathop {\mathbf {P}}(X, Y)} = \frac {\mathop {\mathbf {P}}(X)\mathop {\mathbf {P}}(Y|X)\mathop {\mathbf {P}}(Z|Y)}{\mathop {\mathbf {P}}(X)\mathop {\mathbf {P}}(Y|X)} = \mathop {\mathbf {P}}(Z|Y)}. 我們把這樣的連結情況稱為頭到尾連結 (head-to-tail linking).
如果 X 是 Y 和 Z 的父節點 :
此時, 聯合機率可以寫為 \displaystyle {\mathop {\mathbf {P}}(X, Y, Z) = \mathop {\mathbf {P}}(X)\mathop {\mathbf {P}}(Y|X)\mathop {\mathbf {P}}(Z|X)}. 通常, Y 和 Z 是通過 X 依賴的. 給定 X, 它們變成獨立的 : \displaystyle {\mathop {\mathbf {P}}(Y, Z|X) = \frac {\mathop {\mathbf {P}}(X, Y, Z)}{\mathop {\mathbf {P}}(X)} = \frac {\mathop {\mathbf {P}}(X)\mathop {\mathbf {P}}(Y|X)\mathop {\mathbf {P}}(Z|X)}{\mathop {\mathbf {P}}(X)} = \mathop {\mathbf {P}}(Y|X)\mathop {\mathbf {P}}(Z|X)}. 當 X 的機率已知, 它就阻擋了 Y 和 Z 之間的路徑, 即 X 分開了 Y 和 Z. 我們把這種情況稱為尾到尾連結 (tail-to-tail linking).
如果 Z 存在兩個連結到其的父節點 X 和 Y :
此時, 聯合機率為 \displaystyle {\mathop {\mathbf {P}}(X, Y, Z) = \mathop {\mathbf {P}}(X)\mathop {\mathbf {P}}(Y)\mathop {\mathbf {P}}(Z|X, Y)}. 當 Z 的機率已知的時候, X 和 Y 之間的路徑被阻擋, 或者它們是分開的; 當 Z 的機率未知的時候, 它們就不再是被阻擋, 也不是獨立的.
在通常情況下, 當有變數 X_{1}, X_{2}, ..., X_{d} 時, 有 \displaystyle {\mathop {\mathbf {P}}(X_{1}, X_{2}, ..., X_{d}) = \prod \limits_{i = 1}^{d}\mathop {\mathbf {P}} \big ( X_{i}|\mathop {\mathrm {parent}}(X_{i}) \big )}. 於是, 給定 X_{i} 的任意子集, 即根據證據指派一定的機率值, 可以計算 X_{i} 其它子集的機率分佈.
需要強調的是, 從節點 X 到節點 Y 的邊並不總是意味著因果關係, 它知識意味著 X 在 Y 上有直接影響, 即 Y 的機率以 X 的值為條件, 並且即使沒有直接的原因, 兩個節點之間仍可能存在一個邊.
接下來, 我們要將貝氏網絡應用到機器學習中. 對於分類問題, 對應的貝氏網絡可以看作 :
其中, \boldsymbol {x} = (x_{1}, x_{2}, ..., x_{d})^{\mathrm {T}} 是輸入, C 是一個有 K 個取值的變數. 上述圖像彷彿就是我們首先通過從 \mathop {\mathbf {P}}(C) 抽樣隨機選擇一個類別 C, 然後固定 C 並且通過從 p(\boldsymbol {x}|C) 中抽取 \boldsymbol {x} 一樣.
線性回歸也可以用貝氏網絡來解釋 :
從圖中, 我們可以看到 : 首先從 p(\boldsymbol {x}) 中抽取了輸入 \boldsymbol {x}^{\mathrm {t}}, \boldsymbol {x}^{\mathrm {t}} 依賴於輸入 \boldsymbol {x}^{\mathrm {t}}. 然後我們假定兩個需要估計的參數 \boldsymbol {w} 和 \varepsilon 都服從均值為 0 且方差分別為 \alpha^{-1}E 和 \frac {1}{\beta} 的常態分佈, 即有 p(\boldsymbol {r}^{\mathrm {t}}|\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {w}) 服從於均值為 \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}}, 方差為 \frac {1}{\beta} 的常態分佈. 資料集中有 N 個樣本, 即陰影部分. 然後給定一個新的輸入 \boldsymbol {x}', 目標是得到 \boldsymbol {r}'. 根據全概率公式, 我們可以得到 \displaystyle {\begin {aligned} p(\boldsymbol {r}'|\boldsymbol {x}', \boldsymbol {r}, X) &= \int p(\boldsymbol {r}'|\boldsymbol {x}', \boldsymbol {w})p(\boldsymbol {w}|X, \boldsymbol {r})\mathrm {d}\boldsymbol {w} \\ &= \int p(\boldsymbol {r}'|\boldsymbol {x}', \boldsymbol {w})\frac {p(\boldsymbol {r}|X, \boldsymbol {w})p(\boldsymbol {w})}{p(\boldsymbol {r})}\mathrm {d}\boldsymbol {w} \\ &\propto \int p(\boldsymbol {r}'|\boldsymbol {x}', \boldsymbol {w})\prod \limits_{\mathrm {t}}p(\boldsymbol {r}^{\mathrm {t}}|\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {w})p(\boldsymbol {w})\mathrm {d}\boldsymbol {w}. \end {aligned}} 現在, 我們使用 d 分離來推廣阻擋和分開的概念, 並且使用它可以定義對於節點的任意子集 A, B 和 C, 可以檢查給定的 C, A 和 B 是否是獨立的. 為了檢查給定的 C, A 和 B 是否是 d 分離的, 我們考慮 A 中任意節點與 B 中任意節點之間的所有可能路徑. 我們說一條路徑是阻擋的若且唯若
- 路徑上的邊滿足頭到尾或者尾到尾這樣的連結, 並且該節點在 C 中;
- 路徑上的邊滿足頭到頭連結, 並且無論是該節點還是其任意後代都不在 C 中.
如果所有路徑都是阻擋的, 那麼我們說 A 和 B 是 d 分離的, 即給定 C, A 和 B 是 d 是獨立的; 否則, 它們是依賴的.
設 X 是貝氏網絡中的任意節點, 我們感興趣的問題是如何求得 \displaystyle {\mathop {\mathbf {P}}(X|E)}. 其中, E 節點對應的機率值已知.
我們先討論串列的情況. 串列式從頭到尾的節點序列, 沒有父節點的節點被稱為根節點, 其它節點有且唯有一個父節點, 沒有子節點的節點被稱為葉子節點. 除了葉子節點之外, 其它所有節點有且唯有一個子節點. 在串列中, \mathop {\mathbf {P}}(X|E) 分為兩種情況 : 一種是 X 節點位於 E 節點之前, 一種是 X 節點位於 E 節點之後.
我們把每個節點都看作一個處理器, 它從它的父節點或者子節點接受消息, 並且在局部進行計算後沿著串列的方向傳播. 每個節點 X 都局域地計算並存放著兩個值 : \lambda(X) = \mathop {\mathbf {P}}(E^{-}|X) 是傳播的 E^{-}, 節點 X 從它的子節點接收並傳送回父節點; 而 \pi(X) = \mathop {\mathbf {P}}(E^{+}|X) 是傳播的 E^{+}, X 從它的父節點接收並傳送到子節點. 對於某個不依賴於 X 值的正規化常數 \alpha, 有 : \displaystyle {\begin {aligned} \mathop {\mathbf {P}}(X|E) &= \frac {\mathop {\mathbf {P}}(E|X)\mathop {\mathbf {P}}(X)}{\mathop {\mathbf {P}}(E)} \\ &= \frac {\mathop {\mathbf {P}}(E^{+}, E^{-}|X)\mathop {\mathbf {P}}(X)}{\mathop {\mathbf {P}}(E)} \\ &= \frac {\mathop {\mathbf {P}}(E^{+}|X)\mathop {\mathbf {P}}(E^{-}|X)\mathop {\mathbf {P}}(X)}{\mathop {\mathbf {P}}(E)} \\ &= \frac {\mathop {\mathbf {P}}(X|E^{+})\mathop {\mathbf {P}}(E^{+})\mathop {\mathbf {P}}(E^{-}|X)\mathop {\mathbf {P}}(X)}{\mathop {\mathbf {P}}(X)\mathop {\mathbf {P}}(E)} \\ &= \alpha \mathop {\mathbf {P}}(X|E^{+})\mathop {\mathbf {P}}(E^{-}|X) = \alpha \pi(X)\lambda(X). \end {aligned}} 如果節點 E 具現化為一個確定的值 \tilde {e}, 則 \lambda(\tilde {e}) \equiv 1 且 \lambda(e) \equiv 0. 其中, e \neq \tilde {e}. 沒有具現化的葉子節點對於所有的 x, 都有 \lambda(x) \equiv 1. 沒有具現化的根節點 X 取 \mathop {\mathbf {P}}(X) 作為 \pi 值, 即對於任意 x, 有 \pi(x) \equiv \mathop {\mathbf {P}}(x).
給定這些初始條件, 可以設計一個沿著串列傳播證據的遞迴公式. 對於 \pi 消息, 有 \displaystyle {\begin {aligned} \pi(X) &= \mathop {\mathbf {P}}(X|E^{+}) \\ &= \sum \limits_{U}\mathop {\mathbf {P}}(X|U, E^{+})\mathop {\mathbf {P}}(U|E^{+}) \\ &= \sum \limits_{U}\mathop {\mathbf {P}}(X|U)\mathop {\mathbf {P}}(U|E^{+}) \\ &= \sum \limits_{U}\mathop {\mathbf {P}}(X|U)\pi(U). \end {aligned}} 對於 \lambda 消息, 有 \displaystyle {\begin {aligned} \pi(X) &= \mathop {\mathbf {P}}(E^{-}|X) \\ &= \sum \limits_{Y}\mathop {\mathbf {P}}(E^{-}|X, Y)\mathop {\mathbf {P}}(Y|X) \\ &= \sum \limits_{Y}\mathop {\mathbf {P}}(E^{-}|Y)\mathop {\mathbf {P}}(Y|X) \\ &= \sum \limits_{Y}\mathop {\mathbf {P}}(Y|X)\lambda(Y). \end {aligned}}
如果把串列擴展為樹, 那麼每個節點就可以有多個子節點. 和串列不同的是, 樹中的節點由它的各個子節點接收不同的 \lambda 消息, 並且向其子節點發送不同的 \pi 消息. 我們記 \lambda_{Y}(X) 表示 X 從它的子節點 Y 接受的消息, \pi_{Y}(X) 表示 X 發送到其子節點 Y 的消息.
我們仍然將 E 節點的位置分為兩種情況 : E^{-} 存在於節點 X 的子樹中; E^{+} 是其它可能的位置. 這裡需要注意的是 E^{+} 節點不一定是 X 的祖先節點. 重要的是, 節點 X 分開了 E^{+} 和 E^{-}, 使得我們有 \displaystyle {\mathop {\mathbf {P}}(E^{+}, E^{-}|X) = \mathop {\mathbf {P}}(E^{+}|X)\mathop {\mathbf {P}}(E^{-}|X)}. 從而有 \displaystyle {\mathop {\mathbf {P}}(X|E) = \alpha \pi(X)\lambda(X)}. 其中, \alpha 是正規化常數. 如果 X 有兩個子節點 Y 和 Z, 那麼有 \displaystyle {\begin {aligned} \lambda(X) &= \mathop {\mathbf {P}}(E_{X}^{-}|X) \\ &= \mathop {\mathbf {P}}(E_{Y}^{-}, E_{Z}^{-}|X) \\ &= \mathop {\mathbf {P}}(E_{Y}^{-}|X)\mathop {\mathbf {P}}(E_{Z}^{-}|X) \\ &= \lambda_{Y}(X)\lambda_{Z}(X). \end {aligned}} 在一般情況下, 如果 X 有 m 個子節點 Y_{1}, Y_{2}, ..., Y_{m}, 則將它們的所有 \lambda 值相乘 : \displaystyle {\lambda(X) = \prod \limits_{j = 1}^{m}\lambda_{Y_{j}}(X)}. 一旦 X 從其子節點接收了 \lambda, 它就會傳送到父節點中 : \displaystyle {\lambda_{X}(U) = \sum \limits_{X}\lambda(X)\mathop {\mathbf {P}}(X|U)} 類似地, 在另一個方向, \pi(X) 收集在 \mathop {\mathbf {P}}(U|E^{+}) 中且作為 \pi 消息傳播到 X 其它節點 : \displaystyle {\pi(X) = \mathop {\mathbf {P}}(X|E_{X}^{+}) = \sum \limits_{U}\mathop {\mathbf {P}}(X|U)\mathop {\mathbf {P}}(U|E_{X}^{+}) = \sum \limits_{U}\mathop {\mathbf {P}}(X|U)\pi_{X}(U)}. 然後, 這個計算的 \pi 向下傳播到 X 的子節點. 需要注意的是, Y 從 X 接收的是 X 從其父節點 U 和從其它子節點 Z 接收的, 它們共同組成了 E_{Y}^{+} : \displaystyle {\begin {aligned} \pi_{Y}(X) &= \mathop {\mathbf {P}}(X|E_{Y}^{+}) \\ &= \mathop {\mathbf {P}}(X|E_{X}^{+}, E_{Z}^{-}) \\ &= \frac {\mathop {\mathbf {P}}(E_{Z}^{-}|X, E_{X}^{+})\mathop {\mathbf {P}}(X|E_{X}^{+})}{\mathop {\mathbf {P}}(E_{Z}^{-})} \\ &= \frac {\mathop {\mathbf {P}}(E_{Z}^{-}|X)\mathop {\mathbf {P}}(X|E_{X}^{+})}{\mathop {\mathbf {P}}(E_{Z}^{-})} \\ &= \alpha \lambda_{Z}(X)\pi(X). \end {aligned}} 同樣地, 如果 Y 不僅僅有 Z 一個兄弟節點, 那麼需要取所有的 \lambda 值之積 : \displaystyle {\pi_{Y_{j}}(X) = \alpha\prod \limits_{s \neq j}\lambda_{Y_{s}}(X)\pi(X)}.
在樹中, 一個節點有且唯有一個父節點, 而多樹擴展了這種限制, 使得一個節點可以擁有多個父節點. 但是, 我們要求在多樹中兩個節點之間有且唯有一條路徑, 使得我們可以將 E_{X} 劃分為 E_{X}^{+} 和 E_{X}^{-}. 給定 X, 則 E_{X}^{+} 和 E_{X}^{-} 是獨立的.
如果 X 有多個父節點 U_{1}, U_{2}, ..., U_{k}, 則它從所有父節點接收 \pi 消息 \pi_{X}(U_{i}). 其中, i = 1, 2, ..., k. 然後, 按照如下方法組合它們 : \displaystyle {\begin {aligned} \pi(X) &= \mathop {\mathbf {P}}(X|E_{X}^{+}) \\ &= \mathop {\mathbf {P}}(X, E_{U_{1}X}^{+}, E_{U_{2}X}^{+}, ..., E_{U_{k}X}^{+}) \\ &= \sum \limits_{U_{1}}\sum \limits_{U_{2}}...\sum \limits_{U_{k}}\mathop {\mathbf {P}}(X|U_{1}, U_{2}, ..., U_{k})\mathop {\mathbf {P}}(U_{1}|E_{U_{1}X}^{+})\mathop {\mathbf {P}}(U_{1}|E_{U_{2}X}^{+})...\mathop {\mathbf {P}}(U_{1}|E_{U_{k}X}^{+}) \\ &= \sum \limits_{U_{1}}\sum \limits_{U_{2}}...\sum \limits_{U_{k}}\prod \limits_{i = 1}^{k}\pi_{X}(U_{i}). \end {aligned}} 並將其傳遞給多個子節點 : \displaystyle {\pi_{Y_{j}}(X) = \alpha \prod \limits_{s \neq j}\lambda_{Y_{s}}(X)\pi(X)}. 在 X 具有多個父節點的情況下, X 傳遞到它的父節點 U_{i} 的 \lambda 消息不僅組合了 X 從它子節點接收的值, 還有 X 從它的其它父節點 U_{r} (r \neq i) 接收的 \pi 消息. 它們共同構成了 E_{U_{i}X}^{-} :
\displaystyle {\begin {aligned} \lambda_{X}(U_{i}) &= \mathop {\mathbf {P}}(E_{U_{i}X}^{-}|X) \\ &= \sum \limits_{X}\sum \limits_{U_{r \neq i}}\mathop {\mathbf {P}}(E_{X}^{-}, E_{U_{r \neq i}X}^{+}, X, U_{r \neq i}|U_{i}) \\ &= \sum \limits_{X}\sum \limits_{U_{r \neq i}}\mathop {\mathbf {P}}(E_{X}^{-}, E_{U_{r \neq i}X}^{+}|X, U_{r \neq i}, U_{i})\mathop {\mathbf {P}}(X, U_{r \neq i}|U_{i}) \\ &= \sum \limits_{X}\sum \limits_{U_{r \neq i}}\mathop {\mathbf {P}}(E_{X}^{-}|X)\mathop {\mathbf {P}}(E_{U_{r \neq i}X}^{+}|U_{r \neq i})\mathop {\mathbf {P}}(X|U_{r \neq i}, U_{i})\mathop {\mathbf {P}}(U_{r \neq i}|U_{i}) \\ &= \sum \limits_{X}\sum \limits_{U_{r \neq i}}\mathop {\mathbf {P}}(E_{X}^{-}|X)\frac {\mathop {\mathbf {P}}(U_{r \neq i}|E_{U_{r \neq i}X}^{+})\mathop {\mathbf {P}}(E_{U_{r \neq i}X}^{+})}{\mathop {\mathbf {P}}(U_{r \neq i})}\mathop {\mathbf {P}}(X|U_{r \neq i}, U_{i})\mathop {\mathbf {P}}(U_{r \neq i}|U_{i}) \\ &= \beta \sum \limits_{X}\sum \limits_{U_{r \neq i}}\mathop {\mathbf {P}}(E_{X}^{-}|X)\mathop {\mathbf {P}}(U_{r \neq i}|E_{U_{r \neq i}X}^{+})\mathop {\mathbf {P}}(X|U_{r \neq i}, U_{i}) \\ &= \beta \sum \limits_{X}\sum \limits_{U_{r \neq i}}\lambda(X)\prod \limits_{r \neq i}\pi_{X}(U_{r})\mathop {\mathbf {P}}(X|U_{1}, U_{2}, ..., U_{k}) \\ &= \beta \sum \limits_{X}\lambda(X)\sum \limits_{U_{r \neq i}}\mathop {\mathbf {P}}(X|U_{1}, U_{2}, ..., U_{k})\prod \limits_{r \neq i}\pi_{X}(U_{r}). \end {aligned}} 和樹一樣過, 為了找出它的總 \lambda 值, 父節點取它從子節點接收的 \lambda 消息之積 : \displaystyle {\lambda(X) = \prod \limits_{j = 1}^{m}\lambda_{Y_{j}}(X)}. 在這種多個父節點的情況下, 我們需要存放和處理給定所有父節點的條件機率 p(X|U_{1}, U_{2}, ..., U_{k}). 對於大的 k, 這個開銷非常大. 當有多個父節點對應的事件出現的時候, 任意父節點都足以導致該事件發生並且概似不減少. 如果在僅有一個原因出現時, X 發生的機率為 1 - q_{i} : \displaystyle {\mathop {\mathbf {P}}(X|U_{i}, U_{p \neq j}^{\mathrm {C}}) = 1 - q_{i}}. 則當它們的一個子集 T 出現的時候, X 發生的機率可以用下式計算 : \displaystyle {\mathop {\mathbf {P}}(X|T) = 1 - \prod \limits_{U_{i} \in T}q_{i}}.前面, 我們討論的貝氏網絡中都不能存在環, 因為一旦存在環, 那麼上述演算法都不可行. 如果存在環的情況下, 存在多條傳播的路徑, 在計算 X 上的機率時, 我們不能說 X 把 E 分為 E_{X}^{+} 和 E_{X}^{-}, 刪除 X 也不能使得圖一分為二. 以 X 為條件不會使得它們獨立, 而它們兩個可能通過不涉及 X 的路徑相互影響. 此時, 我們可以考慮把這個圖轉換成多樹, 然後使用之前的演算法進行計算. 我們定義團節點對應於原始變數的一個子集, 並且連結它們形成一棵樹.
我們把上面所闡述的演算法稱為置信度傳播演算法 (confidence propagation algorithm).
如果我們將前面的有向影響擴展為雙向的對稱影響, 那麼貝氏網絡就升級成為 Markov 網絡. 例如, 在圖像中, 通常兩個相鄰的像素不會突變, 而是趨向於接近的顏色值, 並且兩個方向都會有類似的趨勢.
由於沒有方向, 因此 Markov 網絡可以表示為一個無向圖, 而且處理起來也更簡便. 給定節點 C, 要檢查 A 和 B 是否獨立, 我們只需要檢查如果刪除 C 中的所有節點, 只要檢查是否還存在一條 A 中的一個節點到 B 中的一個節點的路徑. 如果有, 那麼 A 和 B 之間時依賴的; 否則, 如果 A 中節點與 B 中的節點之間的所有路徑都需要經過 C, 使得 C 的刪除會導致 A 中的節點和 B 中的節點處於不同的子圖中, 那麼我們說 A 和 B 獨立.
在無向圖的情況中, 不存在父節點和子節點這樣的概念, 我們需要討論團的概念. 這和資料結構中的團的概念是一樣的. 團是節點的集合, 使得該集合中的任意兩個節點之間都存在一條邊. 極大團是元素數量取極大值的團. 取代條件機率, 在無向圖中我們使用位勢函數 \Psi_{C}(X_{C}). 其中, X_{C} 是團 C 中的變數的集合. 我們定義聯合分佈為圖中極大團的位勢函數的乘積 : \displaystyle {p(X) = \frac {1}{Z}\prod \limits_{C}\Psi_{C}(X_{C})}. 其中, Z 是正規化常數, 確保 \sum \limits_{X}p(X) = 1 : \displaystyle {Z = \sum \limits_{X}\prod \limits_{C}\Psi_{C}(X)}. 與有向圖不同, 無向圖中的位勢函數不必有機率的解釋, 並且在定義它們的時候可以有更大的自由度. 一般地, 我們可以把位勢函數視為局域約束.
如果丟棄掉有向圖中的方向, 我們很容易得到一個無向圖, 並且一個節點只有一個父節點, 我們可以簡單地令兩個節點之間的位勢函數為條件機率. 然而, 如果一個節點存在多個父節點, 則由於頭到頭連結使得這些父節點是依賴的, 所以我們應該將這些父節點放在相同的團中, 使得該團的位勢包括所有父節點. 這可以通過使用串列連結節點的所有父節點, 使得它們之間完全連結並形成一個團來實現. 但是在節點具有多個父節點的多樹中, 使用這樣的過程必然導致環. 一個技巧是將其轉換成因素圖. 除了變數節點之外, 因素圖使用第二種類型的因素節點. 我們將聯合分佈表示成因素的乘積 : \displaystyle {p(X) = \frac {1}{Z}\prod \limits_{S}f_{S}(X_{S})}. 其中, X_{S} 代表被因素 S 使用的變數節點的子集. 有向圖是其的一個特例, 其中因素對應於局域條件分佈; 無向圖又是另一個特例, 其中因素是極大團上的位勢函數.
現在, 我們可以將置信度傳播演算法推廣到因素圖中 : 做一次局域計算, 然後作為消息通過圖來傳播它們. 但是不同的是, 這裡有兩類消息, 因為存在因素和變數兩類節點, 而我們要區分它們的消息. 需要注意的是, 因素圖是一個二分圖.
影響圖是包括了決策和效用的貝氏網絡的推廣, 它包含機會節點 (隨機變數), 決策節點和效用節點 (計算效用). 影響圖上的推導是對貝氏網絡的置信度傳播的推廣. 給定一些機會節點上的值, 然後進行傳播, 並且針對每一個可能的決策, 計算效用並且選擇效用最大的決策.
15. 隱藏式馬可夫模型
前十四章討論的過程中, 我們都假設樣本獨立且同分佈. 現在, 我們需要放寬這個條件, 討論參數化的隨機過程. 考慮一個系統, 其在任一時刻處於 n 個離散狀態中 : S_{1}, S_{2}, ..., S_{n} 的其中一個. 時刻 t 的狀態記作 q_{t}, 其中, t = 1, 2, .... 我們使用 q_{t} = S_{i} 表示在 t 時刻系統處於 S_{i} 狀態. 其中, t = 1, 2, ..., i = 1, 2, ..., n.
舉個例子, 給定一個字串 "fift", 現在要求預測最後一個剩下的字元. 很顯然, 並不是所有字元都使得其稱為一個合法的單詞. 根據最後一個字元的前一個字元, 我們可以推斷, 字元 "h" 出現的可能性至少比 "a", "b" 都要高. 也就是說, 最後一個字元的預測需要觀測這個字串的倒數第二個字元, 與倒數第二個字元有一定的關係.
系統在有規律且間隔的離散時刻, 根據以前的狀態值以一定的機率轉移到一個新的狀態, 我們可以把這一過程表達為機率的形式 : \displaystyle {\mathop {\mathbf {P}}(q_{t + 1} = S_{i_{t + 1}}|q_{t} = S_{i_{t}}, q_{t - 1} = S_{i_{t - 1}}, ..., q_{1} = S_{i_{1}})}.
在機率論中, 它有一個專門的名稱, 稱為馬可夫鏈 (Markov chain). 如果在 t + 1 時刻的狀態僅僅依賴於時刻 t 的狀態, 而與之前的狀態無關, 即 \displaystyle {\mathop {\mathbf {P}}(q_{t + 1} = S_{i_{t + 1}}|q_{t} = S_{i_{t}}, q_{t - 1} = S_{i_{t - 1}}, ..., q_{1} = S_{i_{1}}) = \mathop {\mathbf {P}}(q_{t + 1} = S_{i_{t + 1}}|q_{t} = S_{i_{t}})}. 那麼我們稱這是一個一階馬可夫鏈的特例.
在接下來的討論中, 我們需要進一步簡化模型, 假定從 S_{i} 到 S_{j} 的轉移機率是獨立於時間的 : \displaystyle {a_{ij} = \mathop {\mathbf {P}}(q_{t + 1} = S_{j}|q_{t} = S_{i})}. 且滿足 a_{ij} \geq 0, \sum \limits_{j = 1}^{n}a_{ij} = 1.
於是, 從狀態 S_{i} 向狀態 S_{j} 的轉移總有相同的機率, 無論這個轉移在觀測序列中的什麼時候發生. 我們稱 \displaystyle {A = (a_{ij})_{n \times n}}. 為轉移矩陣, 其每行之和都為 1. 第一個狀態比較特殊, 我們為此定義初始機率 \pi_{i}, 它是序列中第一個狀態 S_{i_{1}} 的機率 : \displaystyle {\pi_{i} = \mathop {\mathbf {P}}(q_{1} = S_{i_{i}})}. 它滿足 \sum \limits_{i = 1}^{n}\pi_{i} = 1. 向量 \Pi = (\pi_{i})_{n \times 1} 具有 n 個元素且元素之和為 1.
這和計算理論中的確定有限狀態自動機非常相似. 在一個可觀測的馬可夫模型中, 狀態是可觀測的. 在任意時刻 t 我們知道 q_{t}, 並且隨著系統從一個狀態轉移到另一個狀態, 我們得到一個觀測序列, 這是一個狀態序列. 該過程的輸出是每個時刻狀態的集合, 其中每個狀態對應於一個可觀測事件
設有一個觀測序列 Q = \left \{ q_{1}q_{2}...q_{T} \right \}, 其機率為 \displaystyle {\mathop {\mathbf {P}}(Q|A, \Pi) = \mathop {\mathbf {P}}(q_{1})\prod \limits_{t = 1}^{T}\mathop {\mathbf {P}}(q_{t}|q_{t - 1}) = \pi_{q_{1}}a_{q_{1}q_{2}}a_{q_{2}q_{3}}...a_{q_{T - 1}q_{T}}}. 現在, 要學習的參數為 A 和 \Pi. 給定 K 個長度為 T 的序列, 其中 q_{t}^{k} 表示序列 k 在時刻 t 的狀態, 初始機率估計是以 S_{i} 開始的序列個數除以序列總數 : \displaystyle {\hat {\pi_{i}} = \frac {\mathop {\mathrm {card}} \left \{\text {以 } S_{i} \text { 開始的序列} \right \}}{K} = \frac {\sum \limits_{k}\ell(q_{1}^{k} = S_{i})}{K}}. 至於轉移機率矩陣 A, 對 a_{ij} 的估計為從 S_{i} 轉移到 S_{j} 的個數除以所有序列中從 S_{i} 轉移的總數 : \displaystyle {\hat {a_{ij}} = \frac {\mathop {\mathrm {card}} \left \{ \text {從 } S_{i} \text { 到 } S_{j} \text { 的轉移數量} \right \}}{\mathop {\mathrm {card}}\left \{\text {從 } S_{i} \text { 轉移的數量} \right \}} = \frac {\sum \limits_{k}\sum \limits_{t = 1}^{T - 1}\ell(q_{t}^{k} = S_{i} \wedge q_{t + 1}^{k} = S_{j})}{\sum \limits_{k}\sum \limits_{t = 1}^{T - 1}\ell(q_{t}^{k} = S_{i})}}. 其中, \ell(e) = \begin {cases} 1 & {e \text { 為真}} \\ 0 & {e \text { 為假}} \end {cases}.
在隱藏式馬可夫模型 (hidden Markov model) 中, 我們沒到達一個時刻 t 記錄一個狀態, 但是未到達時刻 t + 1 之前, 我們對之後的狀態不可知. 這是和馬可夫模型中不同的地方. 當我們記錄一個觀測的時候, 這個觀測是該狀態的機率函數. 我們假定每個狀態的一個離散觀測取自集合 \left \{v_{1}, v_{2}, ..., v_{M} \right \} : \displaystyle {b_{j}(m) = \mathop {\mathbf {P}}(O_{t} = v_{m}|q_{t} = S_{j})}. 其中, b_{j}(m) 是系統處於狀態 S_{j} 時觀測到 v_{m}\ (m = 1, 2, ..., M) 作為下一個狀態的機率. 我們再次假定齊次模型, 其中觀測機率不依賴於時間 t. 這種觀測值形成了一個觀測序列 O, 但是狀態序列 Q 是不可觀測的, 但是狀態序列可以通過觀測序列來推斷. 需要注意的是, 通常許多不同的狀態序列 Q 可以產生相同的觀測序列 O, 但是產生的機率值可能不同. 除此之外, 在隱藏式馬可夫模型中, 隨機性源於兩個方面 :
- 系統隨機地從一個狀態轉移至另外一個狀態;
- 系統在一個狀態中產生的觀測也是隨機的.
我們總結隱藏式馬可夫模型具有的元素 :
- 模型狀態的數量 N : S = \left \{ S_{1}, S_{2}, ..., S_{N} \right \};
- 觀測集合中狀態數量 M : V = \left \{ v_{1}, v_{2}, ..., v_{M} \right \};
- 狀態轉移機率矩陣 : A = (a_{ij}). 其中, a_{ij} = \mathop {\mathbf {P}}(q_{t + 1} = S_{j}|q_{t} = S_{i});
- 觀測機率矩陣 : B = (b_{ij}). 其中, b_{j}(m) = \mathop {\mathbf {P}}(O_{t} = v_{m}|q_{t} = S_{j});
- 初始狀態機率向量 \Pi = (\pi_{1}, \pi_{2}, ..., \pi_{N}). 其中, \pi_{i} = \mathop {\mathbf {P}}(q_{1} = S_{i}), \sum \limits_{i = 1}^{N}\pi_{i} = 1.
綜上所述, \lambda = (A, B, \Pi) 是隱藏式馬可夫模型的參數集. 給定 \lambda, 模型可用於產生任意多個任意長度的觀測序列. 但是, 我們感興趣的通常是另一個方向, 即給定觀測序列組成的資料集, 估計模型的參數. 我們對下面三個問題比較感興趣 :
- 給定 \lambda, 我們希望估計任意給定的觀測序列 O = \left \{ O_{1}O_{2}...O_{T} \right \} 的機率, 即估計 \mathop {\mathbf {P}}(O|\lambda);
- 給定 \lambda 和一個觀測序列 O, 我們希望最大狀態序列 Q = \left \{ q_{1}q_{2}...q_{T} \right \}, 它具有產生 O 的最大機率, 即我們要找到最大化 \mathop {\mathbf {P}}(Q|O, \lambda) 的 \hat {Q};
- 給定由觀測序列組成的學習樣本 X = \left \{ O^{k} \right \}, 我們希望找到最大化產生 X 的機率, 即要找到最大化 \mathop {\mathbf {P}}(X|\lambda) 的 \hat {\lambda}.
給定觀測序列 O = \left \{ O_{1}O_{2}...O_{T} \right \} 和狀態序列 Q = \left \{ q_{1}q_{2}...q_{T} \right \}, 我們有 \displaystyle {\mathop {\mathbf {P}}(O|Q, \lambda) = \prod \limits_{t = 1}^{T}\mathop {\mathbf {P}}(O_{t}|q_{t}, \lambda) = b_{q_{1}}(O_{1})b_{q_{2}}(O_{2})...b_{q_{T}}(O_{T})}. 由於狀態序列未知, 所以不能直接結算上式. 狀態序列 Q 的機率可以表示為 \displaystyle {\mathop {\mathbf {P}}(Q|\lambda) = \mathop {\mathbf {P}}(q_{1})\prod \limits_{t = 2}^{T}\mathop {\mathbf {P}}(q_{t}|q_{t - 1}) = \pi_{q_{1}}a_{q_{1}q_{2}}a_{q_{2}q_{3}}...a_{q_{T - 1}q_{T}}}. 因此, 聯合機率為 \displaystyle {\begin {aligned} \mathop {\mathbf {P}}(O, Q|\lambda) &= \mathop {\mathbf {P}}(q_{1})\prod \limits_{t = 2}^{T}\mathop {\mathbf {P}}(q_{t}|q_{t - 1})\prod \limits_{t = 1}^{T}\mathop {\mathbf {P}}(O_{t}|q_{t}) \\ &= \pi_{q_{1}}b_{q_{1}}(O_{1})a_{q_{1}q_{2}}b_{q_{2}}(O_{2})a_{q_{2}q_{3}}b_{q_{3}}(O_{3})...a_{q_{T - 1}q_{T}}(O_{T}). \end {aligned}}
備註 : 在貝氏網絡中, 我們定義聯合分佈為 \mathop {\mathbf {P}}(A, B) = \mathop {\mathbf {P}}(A)\mathop {\mathbf {P}}(B|A) = \mathop {\mathbf {P}}(B)\mathop {\mathbf {P}}(A|B). 於是, 對於聯合分佈 \mathop {\mathbf {P}}(O, Q|\lambda), 有 \displaystyle {\begin {aligned} \mathop {\mathbf {P}}(O, Q|\lambda) &= \frac {\mathop {\mathbf {P}}(O, Q, \lambda)}{\mathop {\mathbf {P}}(\lambda)} \\ &= \frac {\mathop {\mathbf {P}}(O, Q, \lambda)}{\mathop {\mathbf {P}}(Q, \lambda)} \cdot \frac {\mathop {\mathbf {P}}(Q, \lambda)}{\mathop {\mathbf {P}}(\lambda)} \\ &= \mathop {\mathbf {P}}(O|Q, \lambda)\mathop {\mathbf {P}}(Q|\lambda). \end {aligned}}
為了計算 \mathop {\mathbf {P}}(O|\lambda), 其中一種方法是對所有可能的 Q 求和 : \displaystyle {\mathop {\mathbf {P}}(O|\lambda) = \sum \limits_{Q}\mathop {\mathbf {P}}(O, Q|\lambda)}. 但是這種方案不太現實, 通過計數可知, 至多有 N^{T} 可能的 Q. 我們將觀測序列分為兩個部分 : 第一部分開始於時刻 1 止於時刻 t, 第二部分開始於時刻 t + 1 止於時刻 T. 給定 \lambda, 我們定義前向變數 \alpha_{t}(i) 表示到時刻 t 為止, 觀測到部分序列 \left \{ O_{1}, O_{2}, ..., O_{t} \right \} 且在時刻 t 的狀態為 S_{i} 的機率 : \displaystyle {\alpha_{i} = \mathop {\mathbf {P}}(O_{1}O_{2}...O_{t}, q_{t} = S_{i}|\lambda)}. 初始時, 我們有 \displaystyle {\begin {aligned} \alpha_{1}(i) &= \mathop {\mathbf {P}}(O_{1}, q_{1} = S_{i}|\lambda) \\ &= \mathop {\mathbf {P}}(O_{1}|q_{1} = S_{i}, \lambda)\mathop {\mathbf {P}}(q_{1} = S_{i}|\lambda) \\ &= \pi_{i}b_{i}(O_{1}). \end {aligned}} 接下來, 我們遞迴地進行計算 : \displaystyle {\begin {aligned} \alpha_{t + 1}(j) &= \mathop {\mathbf {P}}(O_{1}O_{2}...O_{t + 1}|q_{t + 1} = S_{j}, \lambda) \\ &= \mathop {\mathbf {P}}(O_{1}O_{2}...O_{t + 1}, q_{t + 1} = S_{j}|\lambda) \\ &= \mathop {\mathbf {P}}(O_{1}O_{2}...O_{t}|q_{t + 1} = S_{j}, \lambda)\mathop {\mathbf {P}}(O_{t + 1}|q_{t + 1} = S_{j}, \lambda)\mathop {\mathbf {P}}(q_{t + 1} = S_{j}|\lambda) \\ &= \mathop {\mathbf {P}}(O_{1}O_{2}...O_{t}, q_{t + 1} = S_{j}|\lambda)\mathop {\mathbf {P}}(O_{t + 1}|q_{t + 1} = S_{j}, \lambda) \\ &= \mathop {\mathbf {P}}(O_{t + 1}|q_{t + 1} = S_{j}, \lambda)\sum \limits_{i}\mathop {\mathbf {P}}(O_{1}O_{2}...O_{t}, q_{t} = S_{i}, q_{t + 1} = S_{j}|\lambda) \\ &= \mathop {\mathbf {P}}(O_{t + 1}|q_{t + 1} = S_{j}, \lambda)\sum \limits_{i}\mathop {\mathbf {P}}(O_{1}O_{2}...O_{t}, q_{t + 1} = S_{j}|q_{t} = S_{i}, \lambda)\mathop {\mathbf {P}}(q_{t} = S_{i}|\lambda) \\ &= \mathop {\mathbf {P}}(O_{t + 1}|q_{t + 1} = S_{j}, \lambda) \times \\ &\ \ \ \ \sum \limits_{i}\mathop {\mathbf {P}}(O_{1}O_{2}...O_{t}|q_{t} = S_{i}, \lambda)\mathop {\mathbf {P}}(q_{t + 1} = S_{j}|q_{t} = S_{i}, \lambda)\mathop {\mathbf {P}}(q_{t} = S_{i}|\lambda) \\ &= \mathop {\mathbf {P}}(O_{t + 1}|q_{t + 1} = S_{j}, \lambda)\sum \limits_{i}\mathop {\mathbf {P}}(O_{1}O_{2}...O_{t}, q_{t} = S_{i}|\lambda)\mathop {\mathbf {P}}(q_{t + 1} = S_{j}|q_{t} = S_{i}, \lambda) \\ &= b_{j}(O_{t + 1})\sum \limits_{i = 1}^{N}\alpha_{t}(i)a_{ij}. \end {aligned}}
通過上式, 我們知道 \alpha_{t}(i) 解釋前 t 個觀測並且止於狀態 S_{i}. 通過將其乘以機率 a_{ij} 轉移到狀態 S_{j}, 但是因為有 N 個可能的先前狀態, 所以我們需要在所有這樣的可能先前狀態 S_{t} 和那個求和. b_{j}(O_{t + 1}) 則是產生第 t + 1 個觀測並且在時刻 t + 1 處於狀態 S_{j} 的機率.
當我們計算前向變數時, 容易計算觀測序列的機率 : \displaystyle {\mathop {\mathbf {P}}(O|\lambda) = \sum \limits_{i = 1}^{N}\mathop {\mathbf {P}}(O, q_{T} = S_{i}|\lambda) = \sum \limits_{i = 1}^{N}\alpha_{T}(i)}. 其中, \alpha_{T}(i) 是產生整個觀測序列並終止於狀態 S_{i} 的機率, 我們需要在所有可能的終止狀態上求和.
類似地, 我們定義反向變數 \beta_{t}(i), 作為在時刻 t 處於狀態 S_{i} 且觀測到部分序列 O_{t + 1}O_{t + 2}...O_{T} 的機率 : \displaystyle {\beta_{t}(i) = \mathop {\mathbf {P}}(O_{t + 1}O_{t + 2}...O_{T}|q_{t} = S_{i}, \lambda)}. 這次, 我們反向進行計算. 初始地, 我們令 \displaystyle {\beta_{T}(i) = 1}. 然後遞迴地進行計算 : \displaystyle {\begin {aligned} \beta_{t}(i) &= \mathop {\mathbf {P}}(O_{t + 1}O_{t + 2}...O_{T}|q_{t} = S_{i}, \lambda) \\ &= \sum \limits_{j}\mathop {\mathbf {P}}(O_{t + 1}O_{t + 2}...O_{T}, q_{t + 1} = S_{j}|q_{t} = S_{i}, \lambda) \\ &= \sum \limits_{j}\mathop {\mathbf {P}}(O_{t + 1}O_{t + 2}...O_{T}|q_{t + 1} = S_{j}, q_{t} = S_{i}, \lambda)\mathop {\mathbf {P}}(q_{t + 1} = S_{j}|q_{t} = S_{i}, \lambda) \\ &= \sum \limits_{j}\mathop {\mathbf {P}}(O_{t + 1}|q_{t + 1} = S_{j}, q_{t} = S_{i}, \lambda)\mathop {\mathbf {P}}(O_{t + 2}O_{t + 3}...O(T)|q_{t + 1} = S_{j}, q_{t} = S_{i}, \lambda) \\ &\ \ \ \ \mathop {\mathbf {P}}(q_{t + 1} = S_{j}|q_{t} = S_{i}, \lambda) \\ &= \sum \limits_{j}\mathop {\mathbf {P}}(O_{t + 1}|q_{t + 1} = S_{j}, \lambda)\mathop {\mathbf {P}}(O_{t + 2}O_{t + 3}...O_{T}|q_{t + 1} = S_{j}, \lambda) \\ &\ \ \ \ \mathop {\mathbf {P}}(q_{t + 1} = S_{j}|q_{t} = S_{i}, \lambda) \\ &= \sum \limits_{j = 1}^{N}a_{ij}b_{j}(O_{t + 1})\beta_{t + 1}(j). \end {aligned}} 當處於狀態 S_{i} 時, 有 N 種可能的下一個狀態 S_{j}, 每個的機率為 a_{ij}. 在這個狀態上, 我們產生第 t + 1 個觀測, 而 \beta_{t + 1}(j) 解釋了時刻 t + 1 之後的所有觀測.
需要注意的是, \alpha_{t} 和 \beta_{t} 都是通過多個小的機率相乘計算的, 因此在使用程式實作的時候有溢位的風險. 此時, 我們可以在每一步將 \alpha_{t} 和 \beta_{t} 乘以 c_{t} = \frac {1}{\sum \limits_{j}\alpha_{t}(j)} 對其進行正規化. 正規化之後, 我們有 \displaystyle {\mathop {\mathbf {P}}(O|\lambda) = \frac {1}{\prod \limits_{t}c_{t}} \text { 或 } \ln {\mathop {\mathbf {P}}(O|\lambda)} = -\sum \limits_{t}\ln {c_{t}}}. 有了 \alpha_{t} 和 \beta_{t}, 我們可以開始考慮第二個問題. 定義 \gamma_{t}(i) 為給定 O 和 \lambda 在時刻 t 處於狀態 S_{i} 的機率, 它可以這樣進行計算 : \displaystyle {\begin {aligned} \gamma_{t}(i) &= \mathop {\mathbf {P}}(q_{t} = S_{i}|O, \lambda) \\ &= \frac {\mathop {\mathbf {P}}(O|q_{t} = S_{i}, \lambda)\mathop {\mathbf {P}}(q_{t} = S_{i}|\lambda)}{\mathop {\mathbf {P}}(O|\lambda)} \\ &= \frac {\mathop {\mathbf {P}}(O_{1}O_{2}...O_{t}|q_{t} = S_{i}, \lambda)\mathop {\mathbf {P}}(O_{t+ 1}O_{t + 2}...O_{T}|q_{t} = S_{i}, \lambda)\mathop {\mathbf {P}}(q_{t} = S_{i}|\lambda)}{\sum \limits_{j = 1}^{N}\mathop {\mathbf {P}}(O, q_{t} = S_{j}|\lambda)} \\ &= \frac {\mathop {\mathbf {P}}(O_{1}O_{2}...O_{t}|q_{t} = S_{i}, \lambda)\mathop {\mathbf {P}}(O_{t+ 1}O_{t + 2}...O_{T}|q_{t} = S_{i}, \lambda)}{\sum \limits_{j = 1}^{N}\mathop {\mathbf {P}}(O|q_{t} = S_{j}, \lambda)\mathop {\mathbf {P}}(q_{t} = S_{i}|\lambda)} \\ &= \frac {\alpha_{t}(i)\beta_{t}(i)}{\sum \limits_{j = 1}^{N}\alpha_{t}(j)\beta_{t}(j)}. \end {aligned}} 這裡我們看到 \alpha_{t}(i) 和 \beta_{t}(i) 解釋了各個屬於自己的部分. 除此之外, \alpha_{t}(i)\beta_{t}(i) 解釋了時刻 t 系統處於狀態 S_{i} 的整個序列. 我們需要將其除以所有在時刻 t 可能轉移到的中間狀態來對其進行正規化, 並保證 \sum \limits_{i}\gamma_{t}(i) = 1.
為了找到狀態序列, 可以在每一個時刻 t 選擇具有最高機率的狀態 : \displaystyle {q_{t}^{*} = \argmax \limits_{i} {\gamma_{t}(i)}}. 但是這有可能在時刻 t 和 t + 1 選擇 S_{i} 和 S_{j} 作為最合適的狀態, 即使這時有 a_{ij} = 0. 為了找到單個最好狀態的序列, 我們考慮使用基於動態規劃的演算法 : 給定狀態序列 Q = \left \{ q_{1}q_{2}...q_{T} \right \} 和觀測序列 O = \left \{ O_{1}O_{2}...O_{T} \right \}, 定義 \delta_{t}(i) 為在時刻 t 導致前 t 個觀測並至於狀態 S_{i} 的最高機率路徑的機率 : \displaystyle {\delta_{t}(i) = \max \limits_{q_{1}q_{2}...q_{t - 1}}p(q_{1}q_{2}...q_{t - 1}, q_{t} = S_{i}, O_{1}O_{2}...O_{y}|\lambda)}. 於是, 可以遞迴地計算 \delta_{t + 1}(i), 而最佳路徑可以從 T 反向讀取, 在每個時刻選擇最可能的狀態. 總體的方法如下 :
- 初始化 : \delta_{1}(i) = \pi_{i}b_{i}(O_{1}), \Psi_{i}(i) = 0;
- 遞迴 : \delta_{t}(j) = \max \limits_{i} \left \{ \delta_{t - 1}(i)a_{ij}b_{j}(O_{t}) \right \}, \Psi_{t}(j) = \argmax \limits_{i} {\delta_{t - 1}(i)a_{ij}};
- 終止 : p^{*} = \max \limits_{i} \left \{ \delta_{T}(i) \right \}, q_{T}^{*} = \argmax \limits_{i} \delta_{T}(i);
- 狀態序列回溯 : q_{t}^{*} = \Psi_{t + 1}(q_{t + 1}^{*}). 其中, t = T - 1, T - 2, …, 1.
解決第三個問題的方法是使用極大概似, 找到最大化學習序列樣本 X = \left \{ O^{k} \right \}_{k = 1}^{K} 的概似的 \lambda, 即計算最大化 \mathop {\mathbf {P}}(X|\lambda) 的 \hat {\lambda}.
給定整個觀測 O 和 \lambda, 定義 \xi_{t}(i, j) 為在時刻 t 處於狀態 S_{i} 且在時刻 t + 1 處於狀態 S_{j} 的機率 : \displaystyle {\xi_{t}(i, j) = \mathop {\mathbf {P}}(q_{t} = S_{i}, q_{t + 1} = S_{j}|O, \lambda)}. 上式可以這樣計算 : \displaystyle {\begin {aligned} \xi_{t}(i, j) &= \mathop {\mathbf {P}}(q_{t} = S_{i}, q_{t + 1} = S_{j}|O, \lambda) \\ &= \frac {\mathop {\mathbf {P}}(O|q_{t} = S_{i}, q_{t + 1} = S_{j}, \lambda)\mathop {\mathbf {P}}(q_{t} = S_{i}, q_{t + 1} = S_{j}|\lambda)}{\mathop {\mathbf {P}}(O|\lambda)} \\ &= \frac {\mathop {\mathbf {P}}(O|q_{t} = S_{i}, q_{t + 1} = S_{j}, \lambda)\mathop {\mathbf {P}}(q_{t + 1} = S_{j}|q_{t + 1} = S_{j}, \lambda)\mathop {\mathbf {P}}(q_{t} = S_{i}|\lambda)}{\mathop {\mathbf {P}}(O|\lambda)} \\ &= \frac {\mathop {\mathbf {P}}(O_{1}O_{2}...O_{t}|q_{t} = S_{i}, \lambda)\mathop {\mathbf {P}}(O_{t + 1}|q_{t + 1} = S_{j}, \lambda)}{\mathop {\mathbf {P}}(O|\lambda)} \times \\ &\ \ \ \ \mathop {\mathbf {P}}(O_{t + 2}O_{t + 3}...O_{T}|q_{t + 1} =S_{j}, \lambda)a_{ij}\mathop {\mathbf {P}}(q_{t} = S_{i}|\lambda) \\ &= \frac {\mathop {\mathbf {P}}(O_{1}O_{2}...O_{t}, q_{t} = S_{i}|\lambda)\mathop {\mathbf {P}}(O_{t + 1}|q_{t + 1} = S_{j}, \lambda)}{\mathop {\mathbf {P}}(O|\lambda)} \times \\ &\ \ \ \ \mathop {\mathbf {P}}(O_{t + 2}O_{t + 3}...O_{T}|q_{t + 1} =S_{j}, \lambda)a_{ij} \\ &= \frac {\alpha_{t}(i)b_{j}(O_{t + 1})\beta_{t + 1}(j)a_{ij}}{\sum \limits_{k}\sum \limits_{l}\mathop {\mathbf {P}}(q_{t} = S_{k}, q_{t + 1} = S_{l}, O|\lambda)} \\ &= \frac {\alpha_{t}(i)a_{ij}b_{j}(O_{t + 1})\beta_{t + 1}(j)}{\sum \limits_{k}\sum \limits_{l}\alpha_{t}(k)a_{kl}b_{l}(O_{t + 1})\beta_{t + 1}(l)}. \end {aligned}} 其中, \alpha_{t}(i) 解釋產生前 t 個觀測且在時刻 t 止於狀態 S_{i}. 以機率 a_{ij} 轉移到狀態 S_{j}, 產生 t + 1 個觀測, 並在 t + 1 時刻從 S_{j} 開始繼續產生觀測序列的剩餘部分. 通過將 \xi_{t}(i, j) 除以所有在時刻 t 和 t + 1 可能處於的狀態可以對其進行正規化.
如果有需要的話, 可以通過對所有可能的下一個狀態在弧機率上邊緣化來計算在 t 時刻系統處於狀態 S_{i} 的機率 : \displaystyle {\gamma_{t}(i) = \sum \limits_{j = 1}^{N}\xi_{t}(i, j)}. 需要注意的是, 如果馬可夫模型是可觀測的, 那麼 \gamma_{t}(i) 和 \xi_{t}(i, j) 都是 0 或者 1. 當它們不是 0 或者 1 時, 可以通過一個 EM 過程來估計 : 在每次迭代種, 首先在 E 步, 給定當前的 \lambda = (A, B, \Pi), 計算 \xi_{t}(i, j) 和 \gamma_{t}(i); 然後在 M 步種, 給定 \xi_{t}(i, j) 和 \gamma_{t}(i), 再計算 \lambda. 這兩個步驟重複進行直到收斂為止.
假設布林變數 z_{i}^{t} 定義為 \displaystyle {z_{i}^{t} = \begin {cases} 1 & {q_{t} = S_{i}} \\ 0 & {\text {else}}, \end {cases}} 布林變數 z_{ij}^{t} 定義為 \displaystyle {z_{ij}^{t} = \begin {cases} 1 & {q_{t} = S_{i} \wedge q_{t + 1} = S_{j}} \\ 0 & {\text {else}}. \end {cases}} 這些值在可觀測馬可夫模型下表現為布林的, 但是在隱藏式馬可夫模型下, 它們都是隨機變數. 在隱藏式馬可夫模型的情況下, 在 E 步對其進行估計 : \displaystyle {\mathop {\mathrm {E}}(z_{i}^{t}) = \gamma_{t}(i), \mathop {\mathrm {E}}(z_{ij}^{t}) = \xi_{t}(i, j)}. 在 M 步, 給定這些估計值, 計算參數. 從 S_{i} 向 S_{j} 轉移的期望數為 \sum \limits_{t}\xi_{t}(i, j), 而從 S_{i} 轉移的總數為 \sum \limits_{t}\gamma_{t}(i). 這兩個數值的比值給出了任一時刻從從狀態 S_{i} 向 S_{j} 轉移的機率 : \displaystyle {\hat {a_{ij}} = \frac {\sum \limits_{t = 1}^{T - 1}\xi_{t}(i, j)}{\sum \limits_{t = 1}^{T - 1}\gamma_{t}(i)}}. 在狀態 S_{j} 觀測 v_{m} 的機率為系統處於狀態 S_{j} 時觀測 v_{m} 的期望次數除以系統處於狀態 S_{j} 的總數 : \displaystyle {\hat {b_{j}(m)} = \frac {\sum \limits_{t = 1}^{T}\gamma_{t}(j)\ell(O_{t} = v_{m})}{\sum \limits_{t = 1}^{T}\gamma_{t}(j)}}. 當有多個觀測序列 X = \left \{ O^{k} \right \}_{k = 1}^{K} 時, 我們假定他們是相互獨立的 : \displaystyle {\mathop {\mathbf {P}}(X|\lambda) = \prod \limits_{k = 1}^{K}\mathop {\mathbf {P}}(O^{k}|\lambda)}. 參數在全部序列的所有觀測上去平均 : \displaystyle {\hat {a_{ij}} = \frac {\sum \limits_{k = 1}^{K}\sum \limits_{t = 1}^{T_{k} - 1}\xi_{t}^{k}(i, j)}{\sum \limits_{k = 1}^{K}\sum \limits_{t = 1}^{T_{k} - 1}\gamma_{t}^{k}(i)}}, \displaystyle {\hat {b_{j}}(m) = \frac {\sum \limits_{k = 1}^{K}\sum \limits_{t = 1}^{T_{k}}\gamma_{t}^{k}(j)\ell(O_{t}^{k} = v_{m})}{\sum \limits_{k = 1}^{K}\sum \limits_{t = 1}^{T_{k}}\gamma_{t}^{k}(j)}}, \displaystyle {\hat {\pi} = \frac {\sum \limits_{k = 1}^{K}\gamma_{t}^{k})(i)}{K}}.
在我們之前的討論中, 我們假定離散的觀測服從多項式分佈 : \displaystyle {\mathop {\mathbf {P}}(O_{t}|q_{t} = S_{j}, \lambda) = \prod \limits_{m = 1}^{M}b_{j}(m)^{r_{m}^{t}}}. 其中, r_{m}^{t} = \begin {cases} 1 & {O_{t} = v_{m}} \\ 0 & {\text {else}} \end {cases}.
如果輸入是連續的, 一種方法是將其離散化, 然後使用這些離散值作為觀測值. 通常使用向量量化, 將連續值影射到離散空間之後, 轉換為最接近的參考向量的離散值索引. 我們來看一下觀測為連續常數的情形, O_{t} \in R. 最簡單的方法是假定在狀態 S_{j} 時, 其觀測值服從均值為 \mu_{j} 方差為 \sigma_{j}^{2} 的常態分佈. 在這種情況下, M 步的更新公式為 \displaystyle {\hat {\mu_{j}} = \frac {\sum \limits_{t}\gamma_{t}(j)O_{t}}{\sum \limits_{t}\gamma_{t}(j)}}, \displaystyle {\hat {\sigma_{j}^{2}} = \frac {\sum \limits_{t}\gamma_{t}(j)\left ( O_{t} - \hat {\mu_{j}} \right )^{2}}{\sum \limits_{t}\gamma_{t}(j)}}.
隱藏式馬可夫模型也可以描述為一個貝氏網絡. 三個連續的狀態 q_{t - 2}, q_{t - 1} 和 q_{t} 對應於一階馬可夫模型中串列上的三個狀態. 時刻 t 的狀態 q_{t} 僅依賴於時刻 t - 1 的狀態 q_{t - 1}, 並且給定 q_{t - 1}, q_{t} 獨立於 q_{t - 2} : \displaystyle {\mathop {\mathbf {P}}(q_{t}|q_{t - 1}, q_{t - 2}) = \mathop {\mathbf {P}}(q_{t}|q_{t - 1})}. 與轉移狀態機率矩陣 A 所給出的一樣. 每個隱藏變數產生一個觀測的離散觀測值, 與觀測機率矩陣 B 給出的一樣.
下圖中的隱藏式馬可夫模型是一個輸入-輸出隱藏式馬可夫模型 :
它有兩個獨立的觀測輸入-輸出序列, 並且還有一個隱藏狀態序列. 也就是說, 除了觀測序列 O 之外, 還有一個輸入序列 x, 並且我們知道觀測也依賴於輸入. 在這種情況下, 我們把觀測 O 限制在狀態 S 和輸入 x 上, 並且記作 \mathop {\mathbf {P}}(O|q_{t} = S, x). 如果觀測是離散的和多項式的, 那麼將得到一個將 x 作為輸入並且產生 M 選 1 輸出的分類器, 否則產生時候類別機率並且保持觀測的連續性.
類似地, 狀態轉移機率矩陣也可以作為輸入, 即 \mathop {\mathbf {P}}(q_{t + 1} = S_{j}|q_{t} = S_{i}, x). 這可以通過一個選擇將 t + 1 時刻的狀態作為 t 時刻狀態和輸入的函數的分類器來實現. 這便是馬可夫混合專家模型, 是混合專家結構的一般化. 其中, 門控制網路跟蹤其在前一時刻作出的決策. 它的優點是模型不再齊次, 並且在不同的時刻使用不同的觀測和轉移機率. 我們仍然可以對每個狀態使用一個由 \theta_{j} 來參數化的單一模型, 但是根據所看到的輸入產生不同的轉移或者觀測機率. 如果輸入並不是單一值的, 而是圍繞時刻 t 的一個向量, 這種可以處輸入和觀測序列具有不同長度的情況.
即使沒有其它明確的輸入序列, 也可以通過某種以前的觀測來指定一個函數 \displaystyle {\boldsymbol {x} = \boldsymbol {f}(O_{t - \tau}O_{t - (\tau - 1)}...O_{t - 1})} 產生一個輸入來使用帶有輸入的隱藏式馬可夫模型, 從而提供一個大小為 \tau 的背景輸入向量.
下圖是隱藏式馬可夫模型中的因素隱藏式馬可夫模型 :
它具有多個獨立的隱藏序列相互作用生成單個觀測序列.
下圖顯示了隱藏式馬可夫模型中的藕合隱藏式馬可夫模型 :
它對生成兩個並行觀測序列的兩個並行而又相互作用的隱藏序列建模.
下圖顯示了隱藏式馬可夫模型中的開關隱藏式馬可夫模型 :
它有 K 個並行且獨立的隱藏狀態序列, 而狀態變數 S 在任何時刻都選擇其中一個, 並且選中的那個才產生輸出. 也就是說, 隨著序列不斷前進, 在狀態序列之間進行切換.
在隱藏式馬可夫模型中, 儘管觀測可以是連續的, 但是狀態變數是離散的. 在線性動態系統中, 狀態和觀測都是連續的. 在基本情況下, 時刻 t 的狀態是時刻 t - 1 狀態的線性函數加上一個服從均值為 0 的常態分佈的噪聲. 而在每個狀態下, 觀測是狀態的另一個線性函數加上一個服從均值為 0 的常態分佈的噪聲. 兩個線性影射和兩個噪聲的協方差組成了參數. 前面所討論的所有隱藏式馬可夫模型都可以推廣到使用連續狀態.
隱藏式馬可夫模型也需要進行一些調整, 使得它和當前的學習樣本規模和性質平衡. 一種可能的方法是調整隱藏式馬可夫模型的拓撲結構. 在完全連結的隱藏式馬可夫模型中, 從一個狀態可以轉移到其它任意狀態, 使得 A 是一個 N \times N 矩陣. 在一些應用中, 我們可以僅允許某些轉移, 而不允許的轉移將其設為 a_{ij} = 0. 除此之外, 隱藏式馬可夫模型還有一個其複雜度的因素是狀態的數量 N. 因為狀態是隱藏的, 所以其個數未知, 並且應該在學習之前選定. 這需要使用一些知識進行決定, 並且通過一些驗證進行調整. 當用於分類的時候, 可使用一組隱藏式馬可夫模型, 每一個隱藏式馬可夫模型對屬於一個類別的序列進行學習.
16. 貝葉斯推斷
貝葉斯推斷將參數 \theta 看作一種具有某種機率分佈的隨機變數. 極大概似估計將參數看作未知的常數, 但是在小樣本上, 極大概似估計得到的結果可能是比較差的估計. 在貝葉斯推斷中, 利用估計 \theta 具有不確定性這一事實, 不是去估計單個 \theta, 而是通過估計分佈函數 p(\theta|X), 加權所有的 \theta 使得可以分攤估計 \theta 的不確定性.
在估計 p(\theta|X) 時, 可以利用我們可能具有的關於參數值的一些信息. 當我們的樣本規模比較小的時候, 這樣的信息尤其重要. 這種情況下, 我們感興趣的是, 把數據告訴我們的和我們已經知道的結合起來. 利用 Bayes 公式, 我們有 \displaystyle {p(\theta|X) = \frac {p(\theta)p(X|\theta)}{p(X)}}. 其中, p(\theta) 是已知信息的分佈, 它告訴我們在進行學習之前, \theta 就可能已經位於某個區間內. p(X|\theta) 是樣本上的概似, 它告訴我們如果分佈的參數取某一個 \theta 值, 某個樣本集合 \left \{x^{\mathrm {t}} \right \} 出現的機率有多大. 分母的 p(X) 為了保證 \displaystyle {\int p(\theta|X)\mathrm {d}\theta = 1} 成立.
假設有從某個具有未知參數 \theta 的分佈中提取的舊樣本 X = \left \{ \boldsymbol {x}^{\mathrm {t}} \right \}. 然後, 可以再抽取一個樣本 \boldsymbol {x}^{\mathrm {t}}, 並且想要計算其機率分佈. 這個過程可以用貝氏網絡來表示 : 首先從 p(\theta) 這個分佈中選取 \theta, 然後從 p(x|\theta) 抽樣產生學習樣本 \boldsymbol {x}^{\mathrm {t}}, 最後產生新的測試樣本 x'. 我們將聯合機率表示為 \displaystyle {p(x', X, \theta) = p(\theta)p(X|\theta)p(x'|\theta)}.
給定樣本 X, 我們能夠用它估計新樣本 x' 的機率分佈 : \displaystyle {\begin {aligned} p(x'|X) &= \frac {p(x', X)}{p(X)} = \frac {\displaystyle {\int} p(x', X, \theta)\mathrm {d}{\theta}}{p(X)} \\ &= \frac {\displaystyle {\int} p(\theta)p(X|\theta)p(x'|\theta)\mathrm {d}{\theta}}{p(X)} \\ &= \int p(x'|\theta)p(\theta|X)\mathrm {d}{\theta}. \end {aligned}} 對於離散的 \theta 值, 可以使用 \sum \limits_{\theta} 來替換 \int \mathrm {d}{\theta}. 在計算 p(\theta|X) 時, Bayes 公式允許逆轉貝氏網絡中的指向來做推理. 然後, 推斷出的分佈可以用來對新的 x' 導出預測分佈, 這是全貝葉斯推斷. 如果積分不太容易求得, 我們可以使用最大事後估計中事後機率 : \displaystyle {\theta = \argmax \limits_{\theta}p(\theta|X) \text { 且 } p(x'|X) = p(x'|\theta)} 如果 p(\theta) 在所有的 \theta 上都是均勻的, 那麼最大事後估計和極大概似估計是相等的. 這說明使用極大概似估計對應於假定 \theta 的不同值之間沒有事前機率分佈.
使用貝葉斯推斷的優點主要有兩個 :
- 一些與結果有關的信息可以幫助我們忽略掉一些不太可能的 \theta 值, 並將注意力主要集中到 \theta 可能落到的區域中;
- 在預測時, 它並不只是生成單個 \theta 值, 而是生成可能的 \theta 值的集合. 除此之外, 在預測時採用它們可能性的加權.
假定每個樣本都是一個取 K 個不同狀態之一的多項式變數. 我們說 x_{i}^{\mathrm {t}} = 1, 如果樣本 x^\mathrm {t} 在狀態 i 中, 並且對於任意 j \neq i, 有 x_{j}^{\mathrm {t}} = 0. 參數時狀態的機率 \boldsymbol {q} = (q_{1}, q_{2}, ..., q_{K})^{\mathrm {T}}, 其中, q_{i} 滿足 q_{i} \geq 0 且對於任意 i, 有 \sum \limits_{i}q_{i} = 1, i = 1, 2, ..., K. 例如參數 \boldsymbol {q} 是新聞的不同種類在總的新聞中所佔有的比重, 於是我們可以預料某些新聞更多一些.
若樣本概似為 \displaystyle {p(X|\boldsymbol {q}) = \prod \limits_{t = 1}^{N}\prod \limits_{i = 1}^{K}q_{i}^{x_{i}^{\mathrm {t}}}}, 我們說 \boldsymbol {q} 的事前機率分佈是 Dirichlet 分佈 (Dirichlet distribution) : \displaystyle {\mathop {\mathrm {Dirichlet}}(\boldsymbol {q}|\boldsymbol {\alpha}) = \frac {\Gamma(\alpha_{0})}{\Gamma(\alpha_{1})\Gamma(\alpha_{2})...\Gamma(\alpha_{K})}\prod \limits_{i = 1}^{K}q_{i}^{\alpha_{i - 1}}}. 其中, \boldsymbol {\alpha} = (\alpha_{1}, \alpha_{2}, ..., \alpha_{K})^{\mathrm {T}}, 並且 \alpha_{0} = \sum \limits_{i}\alpha_{i}; \Gamma(x) 為 Gamma 函數, 其定義為 \displaystyle {\Gamma(x) = \int_{0}^{+\infty}u^{x - 1}\mathrm {e}^{-u}\mathrm {d}{u}}. 給定事前分佈和概似, 可以得到事後機率分佈 \displaystyle {p(\boldsymbol {q}|X) \propto p(X|\boldsymbol {q})p(\boldsymbol {q}|\boldsymbol {\alpha}) \propto \prod \limits_{i}q_{i}^{\alpha_{i} + N_{i} - 1}}. 其中, N_{i} = \sum \limits_{\mathrm {t}}x_{i}^{\mathrm {t}}. 事前機率分佈和概似都是 q_{i} 冪的乘積形式, 我們可以把它們結合起來構成事後機率分佈 : \displaystyle {p(\boldsymbol {q}|X) = \frac {\Gamma(\alpha_{0} + N)}{\Gamma(\alpha_{1} + N_{1})\Gamma(\alpha_{2} + N_{2})...\Gamma(\alpha_{K} + N_{K})}. \displaystyle {\prod \limits_{i = 1}^{K}}q_{i}^{\alpha_{i - 1} + N_{i} - 1} = \mathop {\mathrm {Dirichlet}}(\boldsymbol {q}|\boldsymbol {\alpha} + \boldsymbol {n})}. 其中, \boldsymbol {n} = (N_{1}, N_{2}, ..., N_{K})^{\mathrm {T}}, \sum \limits_{i}N_{i} = N.
通過上面的分析, 我們可以得到 \alpha_{i} 的一種解釋 : 正如 n_{i} 是 N 個樣本中狀態 i 出現的次數一樣, 可以將 \alpha_{i} 看作在 \alpha_{0} 個樣本的某個假想樣本中狀態 i 出現的次數. 在定義事前機率分佈的時候, 我們主觀地說, 在 \alpha_{0} 個樣本中, 我們預料它們之中的 \alpha_{i} 個屬於狀態 i. 注意, 較大的 \alpha_{0} 說明我們對我們的主觀比例具有較高的置信度. 於是, 事後機率分佈就是另一個 Dirichlet 分佈.
如果變數是布林的, 即 x^{\mathrm {t}} \in \left \{ 0, 1 \right \}. 此時, 多項式樣本就變成了 Bernoulli 樣本 : \displaystyle {p(X|q) = \prod \limits_{\mathrm {t}}q^{x^{\mathrm {t}}}(1 - q)^{1 - x^{\mathrm {t}}}}. 並且, 事前機率分佈從 Dirichlet 分佈化約為 Beta 分佈 : \displaystyle {\mathop {\mathrm {Beta}}(q|\alpha, \beta) = \frac {\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)}q^{\alpha - 1}(1 - q)^{\beta - 1}}. 結合概似, 我們得到 : \displaystyle {p(q|A, N, \alpha, \beta) \propto q^{A + \alpha - 1}(1 - p)^{N - A + \beta - 1}}. 其中, A = \sum \limits_{\mathrm {t}}x^{\mathrm {t}}. 當 \alpha = \beta = 1 時, 我們就有了均勻事前分佈, 並且事後機率和概似具有相同的形狀.
現在考慮樣本是常態分佈的情況. 對於服從均值為 \mu, 方差為 \sigma^{2} 的 p(x), 我們曾經計算過概似為 \displaystyle {p(X|\mu, \sigma^{2}) = \prod \limits_{\mathrm {t}}\frac {1}{\sqrt {2\pi}\sigma}\mathrm {e}^{-\frac {(x^{\mathrm {t}} - \mu)^{2}}{2\sigma^{2}}}}. 對於服從均值為 \mu_{0}^{2}, 方差為 \sigma_{0}^{2} 的 p(\mu), 那麼有 \displaystyle {p(\mu|X) \propto p(\mu)p(X|\mu)}. 其中, p(\mu)p(X|\mu) 服從均值為 \mu_{N}, 方差為 \sigma_{N}^{2} 的常態分佈, \mu_{N} = \frac {\sigma^{2}}{N\sigma_{0}^{2} + \sigma^{2}}\mu_{0} + \frac {N\sigma_{0}^{2}}{N\sigma_{0}^{2} + \sigma^{2}}m, \frac {1}{\sigma_{N}^{2}} = \frac {1}{\sigma_{0}^{2}} + \frac {N}{\sigma^{2}}, m = \sum \limits_{\mathrm {t}}\frac {x^{\mathrm {t}}}{N} 是樣本平均值. 我們看到事後機率的均值 \mu_{N} 是事前均值 \mu_{0} 和樣本均值 m 的加權平均, 其中, 權重與它們的方差成反比. 由於兩個係數都在 0 到 1 之間, 所以 \mu_{N} \in [\mu_{0}, m]. 當樣本規模 N 或著事前分佈的方差 \sigma_{0}^{2}, 事後機率分佈的均值接近於 m, 於是它更多地依賴於樣本提供的信息. 當 \sigma_{0}^{2} 較小的時候, 即當 \mu 的正確值的事前分佈的熵 (不確定性) 較小時, 或者有小樣本時, 事後機率分佈對猜測 \mu_{0} 具有較大的影響.
當 \sigma_{0} 或者 \sigma 變小, 或 N 較大時, \sigma_{N} 變小. 還要注意, \sigma_{N} 小於 \sigma_{0} 和 \frac {\sigma}{\sqrt {N}}, 即事後機率分佈的方差小於事前機率分佈的方差和 m 的方差. 將兩者結合會得到比單獨使用事前機率分佈或者樣本更好的估計.
如果 \sigma^{2} 是已知的, 則對於新的 x, 我們可以在這個事後機率分佈上作積分來預測 : \displaystyle {p(x|X) = \int p(x|u)p(u|X)\mathrm {d}{u}}. 其中, p(x|X) 是服從於均值為 \mu_{N}, 方差為 \sigma_{N}^{2} + \sigma^{2} 的常態分佈. 一旦我們得到了 p(x|X) 的分佈, 我們就可以把它用於不同目的的計算中. 例如, 在分類問題中, 這種方法對應於假定類別服從常態分佈, 我們使用同樣服從常態分佈的 X_{i} 進行學習. 其中, X_{i} \in X 且被標記為 C_{i} 類別. 於是, 上面計算的 p(x|X_{i}) 對應於 p(x|C_{i}), 把它與事前機率 \mathop {\mathbf {P}}(C_{i}) 結合得到 \mathop {\mathbf {P}}(C_{i}|X).
如果我們並不知道 \sigma^{2}, 我們同時也估計 \sigma^{2}. 對於這種情況, 記 \lambda = \frac {1}{\sigma^{2}}. 於是, 樣本概似可以表示為 \displaystyle {\begin {aligned} p(X|\lambda) &= \prod \limits_{\mathrm {t}}\frac {\sqrt {\lambda}}{\sqrt {2\pi}}\mathrm {e}^{-\frac {\lambda}{2}(x^{\mathrm {t}} - \mu)^{2}} \\ &= \lambda^{\frac {N}{2}}(2\pi)^{-\frac {N}{2}}\mathrm {e}^{-\frac {\lambda}{2}\sum \limits_{\mathrm {t}}(x^{\mathrm {t}} - \mu)^{2}}. \end {aligned}} 此時, \lambda 的事前機率分佈服從 Gamma 分佈 (Gamma distribution) \displaystyle {\mathop {\mathrm {Gamma}}(a_{0}, b_{0}) = \frac {1}{\Gamma(a_{0})}b_{0}^{a_{0}}\lambda^{a_{0} - 1}\mathrm {e}^{-b_{0}\lambda}}. 其中, a_{0} = \frac {v_{0}}{2}, b_{0} = \frac {v_{0}}{2}s_{0}^{2}, s_{0}^{2} 是方差的事前機率分佈估計, v_{0} 為對該事前估計的置信度. 於是, 事後機率分佈同樣為 Gamma 分佈 \displaystyle {\mathop {\mathrm {Gamma}}(a_{N}, b_{N}) = \frac {1}{\Gamma(a_{N})}b_{N}^{a_{N}}\lambda^{a_{N} - 1}\mathrm {e}^{-b_{N}\lambda}}. 其中, a_{N} = a_{0} + \frac {N}{2} = \frac {v_{0} + N}{2}, b_{N} = b_{0} + \frac {N}{2}s^{2} = \frac {v_{0}}{2}s_{0}^{2} + \frac {N}{2}s^{2}, s^{2} = \frac {\sum \limits_{\mathrm {t}}(x^{\mathrm {t}} - \mu)^{2}}{N}.
為了對新的 x 作出預測, 當 \mu 和 \sigma^{2} 都未知的時候, 我們需要如下聯合事後分佈 : \displaystyle {p(\mu, \lambda) = p(\mu|\lambda)p(\lambda)}. 其中, p(\lambda) 服從 Gamma 分佈 \mathop {\mathrm {Gamma}}(a_{0}, b_{0}), p(\mu|\lambda) 服從均值為 \mu_{0}, 方差為 \frac {1}{\kappa_{0}\lambda} 的常態分佈. 這裡, \kappa_{0} 可以看作假象樣本的大小, 從而它定義了事前機率的置信度. 這種分佈我們稱為常態-Gamma 分佈 (normal-Gamma distribution) \displaystyle {\mathop {\mathrm {Normal-Gamma}}(\mu_{0}, \kappa_{0}, a_{0}, b_{0})}. 事後機率分佈也是這種分佈 : \displaystyle {\mathop {\mathrm {Normal-Gamma}}(\mu_{N}, \kappa_{N}, a_{N}, b_{N})}. 其中, \kappa_{N} = \kappa_{0} + N, \mu_{N} = \frac {\kappa_{0}\mu_{0} + N_{m}}{\kappa_{N}}, a_{N} = a_{0} + \frac {N}{2}, b_{N} = b_{0} + \frac {N}{2}s^{2} + \frac {\kappa_{0}N}{2\kappa_{N}}(m - \mu_{0})^{2}. 為了對新的 x 作預測, 我們砸事後機率分佈上作積分 : \displaystyle {p(x|X) = \iint p(x|\mu, \lambda)p(\mu, \lambda|X)\mathrm {d}{\mu}\mathrm {d}{\lambda}}. 其中, p(x|X) 服從均值, 方差和自由度均為 2a_{N} 的非標準 t 分佈 : t_{2a_{N}}\left ( \mu_{N}, \frac {b_{N}(\kappa_{N} + 1)}{a_{N}\kappa_{N}} \right ).
對於多變數的情況, 我們使用類似的方法. 若事前機率分佈 p(\boldsymbol {x}) 服從均值向量為 \boldsymbol {\mu}, 協方差矩陣為 \Lambda 的常態分佈. 其中, \Lambda = \Sigma^{-1}. 對於 p(\boldsymbol {\mu}|\Lambda) 服從均值向量為 \boldsymbol {\mu}_{0}, 協方差矩陣為 \frac {1}{\kappa_{0}}\Lambda 的常態分佈. 於是 p(\Lambda) 服從 Wishart 分佈 : \text {Wishart}(v_{0}, V_{0}). 其中, v_{0} 對應於事前分佈的置信度. 事後機率也是這種分佈 : \displaystyle {p(\boldsymbol {\mu}, \Lambda) = p(\boldsymbol {\mu}|\Lambda)p(\Lambda)}. 那麼, p(\boldsymbol {\mu}, \Lambda) 服從常態-Wishart 分佈 (normal-Wishart distribution) : \displaystyle {\mathop {\mathrm {Normal-Wishart}}(\boldsymbol {\mu}_{0}, \kappa_{0}, v_{0}, V_{0})}. 事後機率分佈同樣服從常態-Wishart 分佈 : \displaystyle {\mathop {\mathrm {Normal-Wishart}}(\boldsymbol {\mu}_{N}, \kappa_{N}, v_{N}, V_{N})}. 其中, \kappa_{N} = \kappa_{0} + N, \boldsymbol {\mu}_{N} = \frac {\kappa_{0}\boldsymbol {\mu}_{0} + N_{\boldsymbol {m}}}{\kappa_{N}}, v_{N} = v_{0} + N, V_{N} = \left ( V_{0}^{-1} + C + \frac {\kappa_{0}N}{\kappa_{N}}(\boldsymbol {m} - \boldsymbol {\mu}_{0})(\boldsymbol {m} - \boldsymbol {\mu}_{0})^{\mathrm {T}} \right )^{-1}, C = \sum \limits_{\mathrm {t}}(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m})(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m})^{\mathrm {T}}. 為了對新的 \boldsymbol {x} 作出預測, 我們同樣在聯合事後機率分佈上作積分 : \displaystyle {p(x|X) = \iint p(\boldsymbol {x}|\boldsymbol {\mu}, \Lambda)p(\boldsymbol {\mu}, \Lambda|X)\mathrm {d}{\boldsymbol {\mu}{\mathrm {d}{\Lambda}}}}. 於是我們得到了一個均值, 協方差和自由度為 v_{N} - d + 1 的非標準 t 分佈 (non-standard t-distribution) : \displaystyle {\mathrm {t}_{v_{N} + d - 1}\left ( \boldsymbol {\mu}_{N}, \frac {\kappa_{N} + 1}{\kappa_{N}(v_{N} + d - 1)(V_{N})^{-1}} \right )}.
現在考慮線性回歸的情況. 設 \displaystyle {r = \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x} + \varepsilon}. 其中, \varepsilon 服從均值為 0, 方差為 \frac {1}{\beta}. 如果我們有樣本 \mathscr {X} = \left \{ \boldsymbol {x}^{\mathrm {t}}, \boldsymbol {r}^{\mathrm {t}} \right \}. 我們可以將 \mathscr {X} 分解為矩陣和期望輸出的向量 \mathscr {X} = (X, \boldsymbol {r}). 於是, p(\boldsymbol {r}^{\mathrm {t}}|\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {w}, \beta) 服從均值為 \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}, 均值為 \frac {1}{\beta} 的常態分佈. 我們已經計算過其對數概似為 \displaystyle {\begin {aligned} \ell(\boldsymbol {w}|X) &= \ln {p(\mathscr {X}|\boldsymbol {w})} = \ln {p(\boldsymbol {r}, X|\boldsymbol {w})} \\ &= \ln {p(\boldsymbol {r}|X, \boldsymbol {w}) + \ln {p(X)}}. \end {aligned}} 其中, 第二項為常數, 其獨立於參數. 我們將第一項展開 : \displaystyle {\begin {aligned}\ln {p(\boldsymbol {r}|X, \boldsymbol {w}, \beta)} &= \ln {\prod \limits_{\mathrm {t}}p(r^{\mathrm {t}}|\boldsymbol {x}^{\mathrm {t}}, \boldsymbol {w}, \beta)} \\ &= -N\ln {\sqrt {2\pi}} + N\ln {\sqrt {\beta}} - \frac {\beta}{2}\sum \limits_{\mathrm {t}}(r^{\mathrm {t}} - \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {T}})^{2}. \end {aligned}} 對於極大概似估計, 我們找出最大化上式或者等價地最小化上式的最後一項, 即誤差的平方和的 \boldsymbol {w}. 該項可以改寫為 \displaystyle {\begin {aligned}E &= \sum \limits_{\mathrm {t} = 1}^{N}(r^{\mathrm {t}} - \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {T}})^{2} \\ &=(\boldsymbol {r} - X\boldsymbol {w})^{\mathrm {T}}(r - X\boldsymbol {w}) \\ &= \boldsymbol {r}^{\mathrm {T}}\boldsymbol {r} - 2\boldsymbol {w}^{\mathrm {T}}X^{\mathrm {T}}\boldsymbol {r} + \boldsymbol {w}^{\mathrm {T}}X^{\mathrm {T}}X\boldsymbol {w}. \end {aligned}} 令 \displaystyle {\frac {\partial {E}}{\partial {\boldsymbol {w}}} = 0}, 可得 : \displaystyle {-2X^{\mathrm {T}}\boldsymbol {r} + 2X^{\mathrm {T}}X\boldsymbol {w} = 0 \Rightarrow X^{\mathrm {T}}X\boldsymbol {w} = X^{\mathrm {T}}\boldsymbol {r}}. 我們得到極大概似估計 : \displaystyle {\boldsymbol {w}_{\text {ML}} = (X^{\mathrm {T}}X)^{-1}X^{\mathrm {T}}\boldsymbol {r}}. 對於新的 \boldsymbol {x}', 我們有 \displaystyle {\boldsymbol {r}' = \boldsymbol {w}_{\text {ML}}^{\mathrm {T}}\boldsymbol {x}'}.
在一般情況下, 對於任意模型 g(\boldsymbol {x}|\boldsymbol {w}), 例如對於多層感知器, 其中 \boldsymbol {w} 是權重, 使用梯度下降法最小化 \mathop {\mathrm {E}}(\mathscr {X}|\boldsymbol {w}) = \left (r^{\mathrm {t}} - g(\boldsymbol {x}^{\mathrm {t}}|\boldsymbol {w}) \right )^{2} 得到 \boldsymbol {w}_{\text {LSQ}}, 我們稱為最小二乘估計數 (least squares estimator). 於是, 預測就可以用 \displaystyle {\boldsymbol {r}' = g(\boldsymbol {x}'|\boldsymbol {w}_{\text {LSQ}})} 來計算.
在貝葉斯推斷下, 我們令參數服從 p(\boldsymbol {w}) 均值為 \boldsymbol {0}, 協方差矩陣為 \frac {1}{\alpha}\mathrm {E} 的常態分佈. 那麼對於事後機率分佈, 我們得到 p(\boldsymbol {w}|\mathscr {X}, \boldsymbol {r}) 服從均值為 \boldsymbol {\mu}_{N}, 協方差矩陣為 \Sigma_{N} 的常態分佈. 其中, \mu_{N} = \beta\Sigma_{N}X^{\mathrm {T}}\boldsymbol {r}, \Sigma_{N} = (\alpha\mathrm {E} + \beta X^{\mathrm {T}}X)^{-1}. 為了計算新的 \boldsymbol {x}' 的輸出, 我們在事後機率分佈上進行積分 : \displaystyle {\boldsymbol {r}' = \int \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}'p(\boldsymbol {w}|X, \boldsymbol {r})\mathrm {d}{\boldsymbol {w}}}. 如果我們想用點估計, 則最大事後估計為 \displaystyle {\boldsymbol {w}_{\text {MAP}} = \boldsymbol {\mu}_{N} = \beta(\alpha\mathrm {E} + \beta X^{\mathrm {T}}X)^{-1}X^{\mathrm {T}}\boldsymbol {r}}. 並且在計算輸入 \boldsymbol {x}' 的輸出時, 我們將分佈替換為單個點, 即均值 : \displaystyle {r' = \boldsymbol {w}_{\text {MAP}}^{\mathrm {T}}\boldsymbol {x}'}. 我們也可以計算估計的方差 : \displaystyle {\mathop {\mathrm {Var}}(r') = \frac {1}{\beta} + (\boldsymbol {x}')^{\mathrm {T}}\Sigma_{N}\boldsymbol {x}'}. 如果我們取事後機率的對數, 則有 \displaystyle {\begin {aligned} \ln {p(\boldsymbol {w}|X, \boldsymbol {r})} &\propto \ln {p(\boldsymbol {r}|X, \boldsymbol {w})} + \ln {p(\boldsymbol {w})} \\ &= -\frac {\beta}{2}\sum \limits_{\mathrm {t}}(r^{\mathrm {t}} - \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {T}})^{2} - \frac {\alpha}{2}\boldsymbol {w}^{\mathrm {T}}\boldsymbol {w} + c. \end {aligned}} 我們對其進行最大化, 就得到最大事後估計. 在一般情況下, 給定模型 g(\boldsymbol {x}|\boldsymbol {w}), 我們可以為其寫一個增廣的誤差函數 : \displaystyle {\mathop {\mathrm {E}}(\boldsymbol {w}|\mathscr {X}) = \sum \limits_{\mathrm {t}}\left ( r^{\mathrm {t}} - g(\boldsymbol {x}^{\mathrm {t}}|\boldsymbol {w}) \right )^{2} + \lambda \sum \limits_{i}w_{i}^{2}p}. 其中, \lambda = \frac {\alpha}{\beta}. 儘管這種方法減少 \sum \limits_{i}w_{i}^{2}, 但是它並不強制個體 w_{i} = 0. 即它不能用於特徵選擇, 亦即不能決定哪些 x_{i} 是冗余的. 為此, 我們可以使用 \displaystyle {p(\boldsymbol {w}|\alpha) = \prod \limits_{i}\frac {\alpha}{2}\mathrm {e}^{-\alpha \left | w_{i} \right |} = \left ( \frac {\alpha}{2} \right )^{d}\mathrm {e}^{-\alpha \sum \limits_{i}\left | w_{i} \right |}}. 那麼事後機率分佈就不再是常態分佈的, 而最大事後估計通過最小化 \displaystyle {\mathop {\mathrm {E}}(\boldsymbol {w}|\mathscr {X}) = \sum \limits_{\mathrm {t}}(r^{\mathrm {t}} - \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}})^{2} + 2\sigma^{2}\alpha\sum \limits_{i}\left |w_{i} \right |} 求得. 其中, \sigma^{2} 是噪音方差.
上面, 我們假定 \beta 已知, 並且 \boldsymbol {w} 是我們在其上積分的唯一參數. 如果我們並不知道 \beta, 此時我們假定 p(\beta) 服從 Gamma 分佈 : \mathop {\mathrm {Gamma}}(a_{0}, b_{0}), 且 p(\boldsymbol {w}|\beta) 服從均值為 \boldsymbol {\mu}_{0} 和協方差為 \beta\Sigma_{0} 的常態分佈. 如果 \boldsymbol {\mu}_{0} = \boldsymbol {0} 且 \Sigma = \alpha\mathrm {E}, 那麼我們得到一個 Tykhonov 正則化 (Tykhonov regularization) 問題. 於是, p(\boldsymbol {w}, \beta) = p(\beta)p(\boldsymbol {w}|\beta) 服從常態 - Gamma 分佈 : \mathop {\mathrm {Normal-Gamma}}(\boldsymbol {\mu}_{0}, \Sigma_{0}, a_{0}, b_{0}). 那麼事後機率分佈也服從常態 - Gamma 分佈 : \mathop {\mathrm {Normal-Gamma}}(\boldsymbol {\mu}_{N}, \Sigma_{N}, a_{N}, b_{N}). 其中, \Sigma_{N} = (X^{\mathrm {T}}X + \Sigma_{0})^{-1}, \boldsymbol {\mu}_{N} = \Sigma_{N}(X^{\mathrm {T}}\boldsymbol {r} + \Sigma_{0}\boldsymbol {\mu}_{0}), a_{N} = a_{0} + \frac {N}{2}, b_{N} = b_{0} + \frac {1}{2}(\boldsymbol {r}^{\mathrm {T}}\boldsymbol {r} + \boldsymbol {\mu}_{0}^{\mathrm {T}}\Sigma_{0}\boldsymbol {\mu}_{0} - \boldsymbol {\mu}_{N}^{\mathrm {T}}\Sigma_{N}\boldsymbol {\mu}_{N}).
我們使用 Markov 鏈 Monte Carlo 抽樣得到 Bayes 擬合, 其方法如下 : 從服從 Gamma 分佈 \mathop {\mathrm {Gamma}}(a_{N}, b_{N}) 的 p(\beta) 中抽取一個 \beta 值, 然後從服從均值為 \boldsymbol {\mu}_{N}, 協方差為 \beta\Sigma_{N} 的常態分佈的 p(\boldsymbol {w}|\beta) 中抽取 \boldsymbol {w}, 這給我們一個從事後機率分佈 p(\boldsymbol {w}, \beta) 抽樣的模型.
對於事前機率分佈服從均值為 \boldsymbol {0}, 協方差矩陣為 \frac {1}{\alpha}\mathrm {E} 的常態分佈, 事後機率分佈服從均值為 \boldsymbol {\mu}_{N}, 協方差矩陣為 \Sigma_{N} 的常態分佈的 p(\boldsymbol {w}) 和 p(\boldsymbol {w}|\mathscr {X}, \boldsymbol {r}) (其中, \mu_{N} = \beta\Sigma_{N}X^{\mathrm {T}}\boldsymbol {r}, \Sigma_{N} = (\alpha\mathrm {E} + \beta X^{\mathrm {T}}X)^{-1}), 預測可以表示為 \displaystyle {\begin {aligned} r' &= (\boldsymbol {x}')^{\mathrm {T}}\boldsymbol {w} \\ &= \beta(\boldsymbol {x}')^{\mathrm {T}}\Sigma_{N}X^{\mathrm {T}}\boldsymbol {r} \\ &= \sum \limits_{\mathrm {t}}\beta(\boldsymbol {x}')^{\mathrm {T}}\Sigma_{N}\boldsymbol {x}^{\mathrm {t}}r^{\mathrm {t}}. \end {aligned}}
當我們可以用學習資料或者像支援向量機那樣用學習資料的一個子集表示參數的時候, 我們可以把預測寫成當前輸入和過去學習資料的函數 : \displaystyle {r' = \sum \limits_{\mathrm {t}}K(\boldsymbol {x}', \boldsymbol {x}^{\mathrm {t}})r^{\mathrm {t}}}. 其中, 我們定義 K(\boldsymbol {x}', \boldsymbol {x}^{\mathrm {t}}) = \beta(\boldsymbol {x}')^{\mathrm {T}}\Sigma_{N}\boldsymbol {x}^{\mathrm {T}}.
我們知道, 我們可以通過使用非線性基礎函數 \phi(\boldsymbol {x}) 影射到新空間中, 在新空間中擬合線性模型來推廣 K 中的線性核. 在這種情況下, 我們有 k 維 \boldsymbol {\phi}(\boldsymbol {x}) 而不是 d 維度下的 \boldsymbol {x}. 其中, k 是基礎函數的數量, 並且有 N \times k 個基礎函數 \Phi 的圖像, 而不是 N \times d 的資料矩陣 X.
在檢驗期間, 我們有 \displaystyle {\begin {aligned} r' &= \boldsymbol {\phi}(\boldsymbol {x}')^{\mathrm {T}}\boldsymbol {w} \left ( \text {其中, } \boldsymbol {w} = \beta\Sigma_{N}^{\phi}\Phi^{\mathrm {T}}\boldsymbol {r}, \Sigma_{N}^{\phi} = (\alpha\mathrm {E} + \beta\Phi^{\mathrm {T}}\Phi)^{-1} \right ) \\ &= \beta \boldsymbol {\phi}(\boldsymbol {x}')^{\mathrm {T}}r \\ &= \sum \limits_{\mathrm {t}}\beta \boldsymbol {\phi}(\boldsymbol {x}')^{\mathrm {T}}\Sigma_{N}^{\phi}\boldsymbol {\phi}\boldsymbol {x}^{\mathrm {t}}r^{\mathrm {t}} \\ &= \sum \limits_{\mathrm {t}}K(\boldsymbol {x}', \boldsymbol {x}^{\mathrm {t}})r^{\mathrm {t}}. \end {aligned}} 其中, 我們定義 K(\boldsymbol {x}', \boldsymbol {x}^{\mathrm {t}}) = \beta\boldsymbol {\phi}(\boldsymbol {x}')^{\mathrm {T}}\Sigma_{N}^{\phi}\boldsymbol {\phi}(\boldsymbol {x}^{\mathrm {t}}) 作為等價核. 我們可以將估計表示為學習資料中樣本影響的加權和, 其中影響由核函數 K(\boldsymbol {x}', \boldsymbol {x}^{\mathrm {t}}) 給定. 誤差可以表示為 \displaystyle {\mathop {\mathrm {Var}}(r') = \frac {1}{\beta} + \boldsymbol {\phi}(\boldsymbol {x}')^{\mathrm {T}}\Sigma_{N}^{\phi}\boldsymbol {\phi}(\boldsymbol {x}')}.
在二分類問題中, 我們有單個輸出, 並且假定一個線性模型 : \displaystyle {\mathop {\mathbf {P}}(C_{\text {true}}|\boldsymbol {x}^{\mathrm {t}}) = y^{\mathrm {t}} = \mathop {\mathrm {sigmoid}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}^{\mathrm {t}})}. 對於 Bernoulli 樣本, 其對數概似為 \displaystyle {\ell(\boldsymbol {r}|X) = \sum \limits_{\mathrm {t}}r^{\mathrm {t}}\ln {y^{\mathrm {t}}} + (1 - r^{\mathrm {t}})\ln {(1 - y^{\mathrm {t}})}}.
在貝葉斯推斷中, 我們假定 p(\boldsymbol {w}) 就是均值為 \boldsymbol {m}_{0}, 協方差矩陣為 S_{0} 的常態分佈, 其事後機率的對數為 \displaystyle {\begin {aligned} \ln {p(\boldsymbol {w}|\boldsymbol {r}, X)} &\propto \ln {p(\boldsymbol {w})} + \ln {p(\boldsymbol {r}|\boldsymbol {w}, X)} \\ &= \frac {1}{2}(\boldsymbol {w} - \boldsymbol {m}_{0})^{\mathrm {T}}S_{0}^{-1}(\boldsymbol {w} - \boldsymbol {m}_{0}) + \sum \limits_{\mathrm {t}}r^{\mathrm {t}}\ln {y^{\mathrm {t}}} + (1 - r^{\mathrm {t}})\ln {(1 - y^{\mathrm {t}})} + c. \end {aligned}} 這個事後機率分佈就不再是常態分佈, 並且我們不能精確地求得其積分. 於是, 我們需要使用近似方法, 即 Laplace 近似 (Laplace approxiamation) : 假設我們想要近似某個分佈 f(x) (其不必是規範化的, 即 \displaystyle {\int f(x)\mathrm {d}{x} = 1} 不一定成立), 我們找到 f(x) 的出現次數最多的數 x_{0}, 擬合一個中心在 x_{0} 且方差由均值附近的 f(x) 的曲率給定的 Gauss 函數 q(x), 而後如果我們想要積分的話, 就在擬合的 Gauss 函數上積分即可. 為了得到方差, 我們考慮 f(x) 在 x = x_{0} 出的 Taylor 展開式 : \displaystyle {\ln {f(x)} = \ln {f(x_{0})} - \frac {1}{2}a(x - x_{0})^{2} + ...}. 其中, \left. a = -\frac {\mathrm {d}}{\mathrm {d}x^{2}}\ln {f(x)} \right |_{x = x_{0}} 由於原來第一項在 x_{0} 上的一階導數為 0, 因此這一項消失. 取指數, 我們得到 : \displaystyle {f(x) = f(x_{0})\mathrm {e}^{-\frac {a}{2}(x - x_{0})^{2}}}. 為了規範化 f(x), 我們考慮在常態分佈中 \displaystyle {\int \frac {1}{\sqrt {2\pi}\frac {1}{\sqrt {a}}}\mathrm {e}^{-\frac {a}{2}(x - x_{0})^{2}}\mathrm {d}{x} = 1 \Rightarrow \int \mathrm {e}^{-\frac {a}{2}(x - x_{0})^{2}}\mathrm {d}{x} = \sqrt {\frac {a}{2\pi}}}. 因此, q(x) = \sqrt {\frac {a}{2\pi}\mathrm {e}^{-\frac {a}{2}(x - x_{0})^{2}}}, 其服從均值為 x_{0}, 方差為 \frac {1}{a} 的常態分佈. 在多變數的情況下, 我們有 \displaystyle {\ln {f(\boldsymbol {x})} = \ln {f(\boldsymbol {x}_{0})} - \frac {1}{2}(\boldsymbol {x} - \boldsymbol {x}_{0})^{\mathrm {T}}A(\boldsymbol {x} - \boldsymbol {x}_{0}) + ...}. 其中, A 是二階導數的 Hesse 矩陣 : \left. A = -\nabla\nabla\ln {f(\boldsymbol {x})} \right |_{\boldsymbol {x} = \boldsymbol {x}_{0}}. 於是, Laplace 近似為 \displaystyle {f(\boldsymbol {x}) = \frac {\sqrt {\det {A}}}{(2\pi)^{\frac {d}{2}}}\mathrm {e}^{-\frac {1}{2}(\boldsymbol {x} - \boldsymbol {x}_{0})^{\mathrm {T}}A(\boldsymbol {x} - \boldsymbol {x}_{0})}}. 它服從均值為 \boldsymbol {\mu}_{0}, 協方差矩陣為 A^{-1} 的常態分佈.
設 \boldsymbol {w}_{\mathrm {MAP}} 是 p(\boldsymbol {w}, \boldsymbol {r}, X) 中出現次數最多的數, 取作均值, 協方差矩陣由負的對數概似的二階導數矩陣的逆給出 : \displaystyle {S_{N} = -\nabla\nabla\ln {p(\boldsymbol {w}|\boldsymbol {r}, X)} = S_{0}^{-1} + \sum \limits_{\mathrm {t}}y^{\mathrm {t}}(1 - y^{\mathrm {t}})\boldsymbol {x}^{\mathrm {t}}(\boldsymbol {x}^{\mathrm {t}})^{\mathrm {T}}}. 於是, 我們在這個 Gauss 函數上進行積分, 估計類別的機率 : \displaystyle {\mathop {\mathbf {P}}(C_{\text {true}}|\boldsymbol {x}) = y = \int \mathop {\mathrm {sigmoid}}(\boldsymbol {w}^{\mathrm {T}}\boldsymbol {x})q(\boldsymbol {w})\mathrm {d}{\boldsymbol {w}}}. 其中, q(\boldsymbol {w}) 服從均值為 \boldsymbol {w}_{\text {MAP}}, 協方差矩陣為 S_{N}^{-1} 的常態分佈. 另外一個難題是我們不能解析地求解帶有 Sigmoid 的 Gauss 卷積地積分. 機率單位函數與 Sigmoid 函數具有相同的形狀, 如果我們使用它來替換 Sigmoid 和蘇花, 那麼就可以得到解析解.
事前機率分佈是貝葉斯推斷中比較主觀的一部分. 在沒有分佈偏好的極端情況下, 可以使用一些無信息的事前機率分佈. 一個關鍵決定是何時取參數為常數, 何時定義它為一個具有事前機率分佈並且取平均的隨機變數. 另一個決定是定義事前機率的學習參與程度. 假設我們有參數 \theta, 並且在它上面定義了一個事後機率分佈. 在預測的時候, 我們有 \displaystyle {p(x|X) = \int p(x|\theta)p(\theta|X)\mathrm {d}{\theta}}. 其中, p(\theta|X) \propto p(X|\theta)p(\theta). 如果我們相信除非依賴於某個其它隨機變數, 否則我們不能定義一個好的 p(\theta), 那麼我們可以讓 \theta 以某個人為設定的值 \alpha 為條件, 並且在它上面進行積分 : \displaystyle {p(x|X) = \iint p(x|\theta)p(\theta|X, \alpha)p(\alpha)\mathrm {d}{\theta}\mathrm {d}{\alpha}}. 這確實使得推斷相當困難, 因為我們需要在兩層上積分. 一種捷徑是在學習樣本上檢驗不同的 \alpha 值, 選取最佳的 \alpha^{*}, 並且只使用 \alpha^{*} : \displaystyle {p(x|X) = \int p(x|\theta)p(\theta|X, \alpha^{*})\mathrm {d}{\theta}}.
假設有一系列模型 \mathscr {M} = \left \{ M_{1}, M_{2}, ..., M_{n} \right \}, 每個都有其自己的參數 \Theta = \left \{ \theta_{1}, \theta_{2}, ..., \theta_{n} \right \}. 如果我們想要比較這些模型, 對於給定的模型 M 和對應的參數 \theta, 設學習樣本的概似為 p(X|M, \theta). 為了得到給定模型的貝葉斯邊緣概似, 我們在 \theta 上取平均值 : \displaystyle {p(X|M) = \int p(X|\theta, M)p(\theta|M)\mathrm {d}{\theta}}. 例如, 在多項式回歸中, 對於給定的多項次次數, 我們有 \displaystyle {p(\boldsymbol {r}|X, M) = \iint p(\boldsymbol {r}|X, \boldsymbol {w}, \beta, M)p(\boldsymbol {w}, \beta|M)\mathrm {d}\boldsymbol {w}{\mathrm {d}}{\beta}}. 其中, p(\boldsymbol {w}, \beta|M) 是模型 M 的事前機率分佈假設. 於是給定樣本, 我們可以計算模型的事後機率分佈 : \displaystyle {p(M|X) = \frac {p(X|M)p(M)}{p(X)}}. 其中, p(M) 是定義在模型上的事前機率分佈. 貝葉斯推斷的一個好處是即使均勻地從事前機率分佈上抽樣, 由於在所有的 \theta 上取了平均值, 所以邊緣概似也傾向於簡單的模型.
假設有一個包含 N 個樣本的學習樣本 X. 與簡單模型相比, 更複雜的模型能夠相當好地擬合更多這樣的資料集. 考慮在平面上隨機選擇三個點. 可以被一條直線擬合的這樣的三元組的數量比可以被一條二次曲線擬合的三元組的數量要少得多. 給定 \sum \limits_{X}p(X|M) = 1, 因為對於複雜模型而言, 它存在更多可能的 X, 它可以做出合理的擬合, 所以對於某個特定的 X', 如果存在一個擬合, 則 p(X'|M) 的值將會較小. 因此, 對於較簡單的模型, 若 p(M) 都是相等的, 那麼 p(M|X) 將會較高.
如果我們希望比較兩個模型 M_{1} 和 M_{2}, 那麼有 \displaystyle {\frac {\mathop {\mathbf {P}}(M_{2}|X)}{\mathop {\mathbf {P}}(M_{1}|X)} = \frac {\mathop {\mathbf {P}}(X|M_{2})\mathop {\mathbf {P}}(M_{2})}{\mathop {\mathbf {P}}(X|M_{1})\mathop {\mathbf {P}}(M_{1})}}. 如果這個比例大於 1, 那麼我們對 M_{2} 更有信心; 否則, 我們對 M_{1} 更有信心. 這兩個邊緣概似的比值稱為 Bayes 因素, 即使兩個事前機率取相同的值, 但是對於模型選擇它也足夠了. 在貝葉斯推斷中, 我們不在模型之間做選擇, 並且不做模型選擇, 與是貝葉斯推斷的精神一致, 平均它們的猜測, 而不是選擇一個而捨棄其它. 一種相關的方法是使用 Laplace 近似的貝葉斯信息準則, 於是 \displaystyle {p(X|M) = \int p(X|\theta, M)p(\theta|M)\mathrm {d}{\theta}} 可以近似地表示為 \displaystyle {\ln {p(X|M) \doteq \mathop {\mathrm {BIC}} = \ln {p(X|\theta_{\text {ML}}, M) - \frac {C(M)}{2}\ln {N}}}}. 第二項用於懲罰模型的複雜度, 其中, C(M) 表示模型的複雜度. 另一種相關但是非貝葉斯的方法是 Akaike 信息準則 : \displaystyle {\mathop {\mathrm {AIC}} = \ln {p(X|\theta_{\mathrm {ML}}, M) - C(M)}}.
我們曾經在聚類分析中討論過混合模型 : \displaystyle {p(\boldsymbol {x}) = \sum \limits_{i = 1}^{k}\mathop {\mathbf {P}}(G_{i})p(\boldsymbol {x}|G_{i})}. 除此之外, 我們還討論了期望最大化演算法, 它是一個最大化概似的過程 : \displaystyle {\Phi = \argmax \limits_{\Phi}\ln {p(X|\Phi)}}. 現在, 我們用貝葉斯推斷的方法寫出事前機率分佈 : \displaystyle {\begin {aligned} p(\Phi) &= p(\boldsymbol {\pi})\prod \limits_{i}p(\boldsymbol {\mu}_{i}, \Lambda_{i}) \\ &= \mathop {\mathrm {Dirichlet}}(\boldsymbol {\pi}|\boldsymbol {\alpha})\prod \limits_{i}\mathop {\mathrm {Normal-Wishart}}(\boldsymbol {\mu}_{i}, \kappa_{i}, v_{i}, V_{i}). \end {aligned}} 在這種情況下, 期望最大化演算法的 E 步不變, M 步需要加上事後機率分佈的對數 : \displaystyle {Q(\Phi|\Phi^{l}) = \sum \limits_{\mathrm {t}}\sum \limits_{i}h_{i}^{\mathrm {t}}\ln {\pi_{i}} + \sum \limits_{\mathrm {t}}\sum \limits_{i}h_{i}^{\mathrm {t}}\ln {p_{i}(\boldsymbol {x}|\Phi^{l})} + \ln {p(\boldsymbol {\pi})} + \sum \limits_{i}\ln {p(\boldsymbol {\mu}_{i}, \Lambda_{i})}}. 在 M 步使用最大事後估計針對混合比例的估計如下 : \displaystyle {\pi_{i}^{l + 1} = \frac {\alpha_{i} + N_{i} - 1}{\sum \limits_{i}a_{i} + N - K}}. 其中, N_{i} = \sum \limits_{i}h_{i}^{\mathrm {t}}. M 步使用最大事後估計針對分支密度的估計如下 : \displaystyle {\boldsymbol {\mu}_{i}^{l + 1} = \frac {\kappa_{0}\boldsymbol {\mu}_{0} + N_{i}\boldsymbol {m}_{i}}{\kappa_{0} + N_{i}}}, \displaystyle {\Lambda_{i}^{l + 1} = \left ( \frac {V_{0}^{-1} + C_{i} + S_{i}}{v_{0} + N_{i} + d + 2} \right )^{-1}}. 其中, \boldsymbol {m}_{i} = \sum \limits_{i}\frac {h_{i}^{\mathrm {t}}}{N_{i}}, C_{i} = \sum \limits_{\mathrm {t}}h_{i}^{\mathrm {t}}(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{i})(\boldsymbol {x}^{\mathrm {t}} - \boldsymbol {m}_{i})^{\mathrm {T}}, S_{i} = \frac {\kappa_{0}N_{i}}{(\kappa_{0} + N_{i})(\boldsymbol {m}_{i} - \boldsymbol {\mu}_{0})(\boldsymbol {m}_{i} - \boldsymbol {\mu}_{0})^{\mathrm {T}}}.
如果取 \alpha_{i} = \frac {1}{K}, 那麼這是均勻事前分佈. 我們可以取 k_{0} = 0 從而不影響均值估計, 除非我們有一些可以幫助到我們的信息. 另外, 我們可以令 V_{0} = \mathrm {E} 使得最大事後估計有正規化的效果.
一旦我們知道如何以貝葉斯推斷的方式做基礎, 我們就可以組合它們得到更加複雜的模型. 在 Laplace 近似中, 我們使用 Gauss 函數及其積分來近似 p(\theta|X). 在變分近似中, 我們使用參數 \Psi 可調的函數 q(Z|\Psi) 來近似事後機率分佈. 它更加通用, 因為它不受限於 Gauss 函數. 這裡, Z 包含了模型所有潛在的變數和參數 \theta, 並且近似模型 q(Z|\Psi) 的 \Psi 被調整, 使得 q(Z|\Psi) 盡可能地接近 p(Z|X). 我們定義兩者之間的 Kullback-Leibler 距離 (Kullback-Leibler distance) : \displaystyle {D_{\text {Kullback-Leibler}}(q||p) = \sum \limits_{Z}q(Z|\Psi)\ln {\frac {q(Z|\Psi)}{p(Z|\Psi)}}}. 為了簡便, 假設潛在變數的集合包括參數都被劃分為子集 Z_{1}, Z_{2}, ..., Z_{k}, 使得變分分佈可以分解為因素 : \displaystyle {q \left \{ Z|\Psi \right \} = \prod \limits_{i = 1}^{k}q_{i}(Z_{i}|\Psi_{i})}. 每個因素中的參數調整是迭代的, 類似於期望最大化演算法. 從隨機或者帶有信息的初始值開始, 並在調整每個參數的時候, 以迴圈的方式使用 Z_{j} (j \neq i) 的期望值. 這被稱為平均場近似 (mean-field approxiamation).
這種因素分解是一種近似, 例如我們討論回歸的時候, 有 \displaystyle {p(\boldsymbol {w}, \beta) = p(\beta)p(\boldsymbol {w}|\beta)}. 而變分近似中, 我們假設 \displaystyle {p(\boldsymbol {w}, \beta) = p(\beta)p(\boldsymbol {w})}. 假設有一個線性模型 y = \boldsymbol {w}^{\mathrm {T}}\boldsymbol {x}, 於是, 對於每一個 \boldsymbol {w}, 都有一條直線. 對於給定的事前機率分佈 p(\boldsymbol {w}), 得到直線的分佈. 更具體地說, 對於任意的 \boldsymbol {w}, 當 \boldsymbol {w} 是從 p(\boldsymbol {w}) 上抽樣的時候, 得到在 \boldsymbol {x} 處計算的 y 值的分佈, 即 y(\boldsymbol {w}|\boldsymbol {x}), 這一過程我們稱為 Gauss 過程. 我們知道, 如果 p(\boldsymbol {w}) 是常態分佈, 每一個 y 也都是常態分佈的線性組合, 也同樣是常態分佈. 尤其是對 N 個輸入點 \boldsymbol {x}^{\mathrm {t}} 上計算的 y 值的聯合分佈感興趣.
假定 p(\boldsymbol {w}) 服從均值為 \boldsymbol {0}, 協方差矩陣為 \frac {1}{\alpha}E 的常態分佈, 給定 N \times d 的樣本點 X 和 d \times 1 的權重向量, 我們將輸出 y 寫作 \displaystyle {\boldsymbol {y} = X\boldsymbol {w}}, 它滿足 \displaystyle {\mathop {\mathrm {E}}(\boldsymbol {y}) = X\mathop {\mathrm {E}}(\boldsymbol {w}) = \boldsymbol {0}} 和 \displaystyle {\text {Cov}(\boldsymbol {y}) = \mathop {\mathrm {E}}(\boldsymbol {y}\boldsymbol {y}^{\mathrm {T}}) = X\mathop {\mathrm {E}}(\boldsymbol {w}\boldsymbol {w}^{\mathrm {T}})X^{\mathrm {T}} = \frac {1}{\alpha}XX^{\mathrm {T}} = K}. 其中, K = (k_{ij}), k_{ij} = K(\boldsymbol {x}^{\mathrm {i}}, \boldsymbol {x}^{\mathrm {j}})\frac {(\boldsymbol {x}^{\mathrm {i}})^{\mathrm {T}}\boldsymbol {x}^{\mathrm {j}}}{\alpha}. 如果使用基礎函數 \boldsymbol {\phi}(\boldsymbol {x}) 的集合, 那麼有 \displaystyle {k_{ij} = \frac {\boldsymbol {\phi}(\boldsymbol {x}^{\mathrm {i}})^{\mathrm {T}}\boldsymbol {\phi}(\boldsymbol {x}^{\mathrm {j}})}{\alpha}}. 實際的觀測輸出 r 由加上噪音的直線 r = y + \varepsilon 給出. 其中, \varepsilon 服從均值為 0, 方差為 \frac {1}{\beta} 的常態分佈. 對於所有的樣本點, 認為 \boldsymbol {r} 服從均值為 \boldsymbol {0}, 協方差矩陣為 C_{N} 的常態分佈. 其中, C_{N} = \frac {1}{\beta}\mathrm {E} + K.
為了做預測, 我們將新數據看作第 N + 1 個樣本點對 (\boldsymbol {x}', r'), 並且使用所有 N + 1 個樣本點表示聯合分佈. 於是, 我們有 \boldsymbol {r}_{N + 1} 服從均值為 \boldsymbol {0}, 協方差矩陣為 C_{N + 1} 的常態分佈. 其中, C_{N + 1} = \begin {pmatrix} C_{N} & \boldsymbol {k} \\ \boldsymbol {k}^{\mathrm {T}} & c \end {pmatrix}, \boldsymbol {k} 是 K(\boldsymbol {x}', \boldsymbol {x}^{\mathrm {t}}) 的 N \times 1 向量, 而 c = K(\boldsymbol {x}', \boldsymbol {x}^{\mathrm {t}}) + \frac {1}{\beta}. 於是, 為了做出預測, 我們計算 p(r'|\boldsymbol {x}', X, \boldsymbol {r}), 其滿足 \displaystyle {\mathop {\mathrm {E}}(r'|\boldsymbol {x}') = \boldsymbol {k}^{\mathrm {T}}C_{N}^{-1}\boldsymbol {r}}, \displaystyle {\mathop {\mathrm {Var}}(r'|\boldsymbol {x}') = c - \boldsymbol {k}^{\mathrm {T}}C_{N}^{-1}\boldsymbol {k}}.
接下來我們介紹 Dirichlet 過程 (Dirichlet process). 有一家中國餐館, 裡面有若干張餐桌. 顧客逐個進入之後, 從第一張餐桌的第一個顧客開始, 後來的顧客都可能會坐到這張餐桌上拼台或者坐到一張沒有人的餐桌上. 顧客坐到一張已經有人的餐桌上的機率和餐館內顧客的數量呈正比, 而他坐到一張新餐桌的機率取決於某一參數 \alpha. 這就是所謂的中國餐館過程, 是 Dirichlet 過程的實用化 : \displaystyle {\text {顧客以機率 } \mathop {\mathbf {P}}(z_{i} = 1) = \frac {n_{i}}{\alpha + n - 1}, i = 1, 2, ..., k \text { 加入一張已經有人的餐桌}}, \displaystyle {\text {顧客以機率 } \mathop {\mathbf {P}}(z_{k + 1} = 1) = \frac {\alpha}{\alpha + n - 1}, i = 1, 2, ..., k \text { 坐上一張沒有人的餐桌}}. 其中, n_{i} 是已經在餐桌 i 上的顧客數量, n = \sum \limits_{i = 1}^{k}n_{i} 是顧客總數. \alpha 是顧客坐上一張新餐桌的傾向, 是一個過程參數. 在每一步, 顧客座位安排定義了一個把整數 1, 2, ..., n 劃分為 k 個子集. 這稱為以 \alpha 為參數的 Dirichlet 過程.
假設一個 d 維樣本用 \boldsymbol {x}^{\mathrm {t}} 來表示, 並且假設 \boldsymbol {x}^{\mathrm {t}} 是從某一常態分佈上抽取的. 那麼整個樣本空間就定義了一個混合常態分佈. 為了使得它是一個 Bayes 分佈, 我們在分支的參數上定義事前分佈. 為了使它是非參數的, 我們定義一個 Dirichlet 過程作為事前機率分佈, 因此一個新分支的添加遵守 : \displaystyle {\text {以機率 } \mathop {\mathbf {P}}(z_{i}^{\mathrm {t}} = 1) \propto \frac {n_{i}}{\alpha + n - 1}p(\boldsymbol {x}^{\mathrm {t}}|X_{i}), i = 1, 2, ..., k \text { 加入分支 } i}, \displaystyle {\text {以機率 } \mathop {\mathbf {P}}(z_{k + 1}^{\mathrm {t}}) \propto \frac {\alpha}{\alpha + n - 1}p(x^{\mathrm {t}}), i = 1, 2, ..., k \text { 添加一個新的分支}}. 其中, X_{i} 是以前指派到分支集合 i 中的樣本. 使用它們的樣本和事前機率分佈, 可以計算事後機率分佈並且可以在上面積分, 由此計算 p(\boldsymbol {x}^{\mathrm {t}}|X_{i}). 粗略地說, 如果分支 i 中已經有許多樣本, 或者新樣本 \boldsymbol {x}^{\mathrm {t}} 類似於已經在 X_{i} 中的樣本, 則這個新的樣本被指派到分支 i 上的機率將會提高. 如果現有的分支都不具有高的機率, 那麼增加一個新的分支. 不同的 \alpha 可能導致不同的集合數量, 為了調整 \alpha, 可以使用貝葉斯推斷, 也可以在其上定義事前機率分佈然後取平均.
貝葉斯推斷在維度化約中也有應用. 給定 N \times d 的矩陣 X, 我們想找到 k 個特徵或者潛在因素, 它們每個都是 d 維的, 使得矩陣 X 可以表示為它們的線性組合. 也就是說, 我們需要找到 Z 和 A 使得 \displaystyle {X = ZA}. 其中, A 是 k \times d 矩陣, 它的第 j 行是 d 維特徵向量, Z 是 N \times k 矩陣, 它的第 \mathrm {t} 行將樣本 \mathrm {t} 定義為特徵的向量, j = 1, 2, ..., k, \mathrm {t} = 1, 2, ..., k
我們假定 z_{j}^{\mathrm {t}} 是布林的, 並且以機率 \mu_{j} 從 Bernoulli 分佈中抽取 : \displaystyle {z_{j}^{\mathrm {t}} = \begin {cases} 1 & {\mathop {\mathbf {P}} \geq 1 - \mu_{j}} \\ 0 & {\mathop {\mathbf {P}} < 1 - \mu_{j}}. \end {cases}} 這樣, z_{j}^{\mathrm {t}} 指示建構樣本 {\mathrm {t}} 時隱藏因素 j 的缺失或者出現. 如果對應的因素出現, 則 A 的第 j 行被選中, 並且所有被選中的行的和構成 X 的第 \mathrm {t} 行.
現在, 我們讓 \mu_{j} 服從 Beta 分佈 : \mathop {\mathrm {Beta}}(\alpha, 1). 其中, \alpha 由人為指定. 另外, 我們讓 p(A) 服從常態分佈, 於是我們可以寫出事後機率分佈並且估計矩陣 A. 考察 A 的行, 我們可以明白隱藏因素代表什麼.
我們假定了某個 k, 因此這個模型是參數的. 如果我們想要非參數的, 並且允許 k 隨著樣本數量的增加而增加, 那麼這樣就定義了一個 Beta 過程 : 有一家印度餐館, 它提供 k 個菜餚的自助餐, 每位顧客都可以取一份 (不同的菜餚只能取一份) 這些菜餚組成一個食物組合. 第一個顧客進入並取前 m 道菜 (m \leq k). 我們假設 m 是一個隨機變數, 由參數為 \alpha 的 Poisson 分佈產生. 然後每個後面來的顧客 n 都能以 \frac {n_{j}}{n} 的機率取任意現有的菜餚 j. 其中, n_{j} 是之前取過菜餚 j 的顧客數量. 一旦他在現有的菜餚中完成取餐, 該顧客還可以要求 \mathop {\mathrm {Poisson}}\left ( \frac {\alpha}{n} \right ) 種菜餚, 因此模型增長. 這便是 Beta 過程的實用化.
17. 組合多學習器
我們已經討論了很多學習演算法. 針對任意一個資料集, 一個學習演算法不可能總是準確. 對於同一個資料集而言, 一個學習演算法可能在某個區間或者集合上產生了錯誤的輸出, 而另一個學習演算法卻可以產生正確的輸出. 這個時候, 我們就希望組合這兩個學習器, 甚至組合多個學習器. 對於組合學習器而言, 我們有兩個基本目標 :
- 產生互補的學習器;
- 針對各個學習器, 組合其輸出, 提高最終的準確率.
首先, 我們希望最大化不同學習器的差異性. 因為類似的學習器會對同一個問題產生類似的輸出, 這個時候組合的必要性就大大減少了. 我們希望這些學習器有著不同的決策方法, 然後讓它們互補 :
- 每一個學習器都使用不同的學習演算法;
- 對於同一類演算法而言, 我們可以讓某些人工指定的參數不相同. 例如多層感知器中某一層的隱藏單元數量和支援向量機中的核函數等;
- 針對同一類演算法, 使用不同的資料集進行學習;
- 針對同一類演算法的輸入, 可以對多個輸入向量進行組合, 得到一個大的輸入向量; 也可以從輸入向量中選取某一個子集作為演算法的輸入.
組合多學習器的一個大前提是每一個學習器都是基本準確的. 例如我們希望組合學習器 A 和 B. 在某個資料集 X 上, A 的準確率是 80\%, B 的準確率是 86\%. 而且學習器 B 的 86\% 這一部分恰好可以基本彌補 A 中 20\% 不正確的輸出部分, 且學習器 A 的 80\% 這一部分恰好可以基本彌補 B 中 14\% 不正確的輸出部分. 使得組合之後的學習器 C 的準確率達到了 92\%. 那麼這個組合就是成功的. 如果某個學習器的準確率只有 20\%, 那麼組合學習器之後得到的學習器可能準確率更差.
組合有兩種基本方法 :
- 讓所有基礎學習器都產生一個輸出, 然後以一定的方法從這些輸出中產生一個最終的決策;
- 根據複雜度或者某個標準對基礎學習器進行排序, 當某一個比較簡單的基礎學習器產生的輸出可信度不足的時候, 讓下一個更複雜的學習器產生輸出.
假設有 L 個基礎學習器, 我們使用 d_{j}(x) 表示基礎學習器 M_{j} 在任意給定的任意維度上的 x 上的輸出. 最終的輸出 y 取決於 \displaystyle {y = f(d_{1}, d_{2}, ..., d_{L}|\Phi)}. 其中, f 是組合函數, \Phi 是函數 f 自身帶有的參數.
針對 L 個基礎學習器產生的 K 個輸出 y_{1}, y_{2}, ..., y_{K}, K \leq L, 我們一般有以下的方法產生最終的決策 y :
- 求和 : y = \frac {1}{K}\sum \limits_{i = 1}^{K}y_{i};
- 加權和 : y = \frac {1}{K}\sum \limits_{i = 1}^{K}w_{i}y_{i}. 其中, w_{i} 是輸出 y_{i} 的影響權重. 也可以將其寫為 y = \sum \limits_{i = 1}^{K}w_{i}y_{i}, \sum \limits_{i = 1}^{K}w_{1} = 1;
- 中值 : y = \mathop {\mathrm {median}} \limits_{i = 1}^{K}(y_{i}). 即針對基本學習器的輸出按照某一個順序進行排序 y'_{1}, y'_{2}, ..., y'_{K}, 任意 y'_{j} 在原 y_{1}, y_{2}, ..., y_{K} 都有且唯有一個 y_{k} 與之對應. 其中, j = 1, 2, ..., K, k = 1, 2, ..., K. 對於最終的輸出, 有 \displaystyle {y = y'_{\left \lfloor \frac {K}{2} \right \rfloor} \text { 或 } y = y'_{\left \lceil \frac {K}{2} \right \rceil}};
- 最大值 : y = \max \limits_{i = 1}^{K}y_{i};
- 最小值 : y = \min \limits_{i = 1}^{K}y_{i};
- 乘積 : y = \prod \limits_{i = 1}^{K}y_{i};
- 乘積後開方 : y = \sqrt[K] {\prod \limits_{i = 1}^{K}y_{i}};
- ...
對於求和這個方法, 它是特殊的加權和方法. 其中, w_{i} = \frac {1}{K} (i = 1, 2, …, K). 等價地, 如果 y 是類別事後機率 \mathop {\mathbf {P}}(C_{i}|x, M_{j}) j = 1, 2, …, L, 則可以簡單地將其相加並且選取最大的 y_{i} 作為最終的輸出 y.
這種方案可以看作貝葉斯推斷下的近似, 以權重近似事前分佈的機率, 並且以模型決策近似模型條件概似.
已經有人證明 : 給定成功率高於 \frac {1}{2} 的一組二分類學習器 (即至少準確率比隨機猜測要好), 使用組合學習器的方法, 決策的準確率會隨著基礎學習器數量的增加而增加.
事實上, 假設 y_{j} 是獨立同分佈的, 其期望值為 \mathop {\mathrm {E}}(y_{j}), 方差為 \mathop {\mathrm {Var}}(y_{j}), 那麼當使用 w_{j} = \frac {1}{L} 取簡單平均時, 輸出的期望和方差分別為 \displaystyle {\mathop {\mathrm {E}}(y) = \mathop {\mathrm {E}}\left ( \sum \limits_{i = 1}^{K}\frac {1}{K}y_{j} \right ) = \frac {1}{K} \cdot K\mathop {\mathrm {E}}(y_{j}) = \mathop {\mathrm {E}}(y_{j})}, \displaystyle {\mathop {\mathrm {Var}}(y) = \mathop {\mathrm {Var}}\left ( \sum \limits_{i = 1}^{K}\frac {1}{K}y_{j} \right ) = \frac {1}{K^{2}}\mathop {\mathrm {Var}}\sum \limits_{i = 1}^{K}y_{i} = \frac {1}{K^{2}}K\mathop {\mathrm {Var}}(y_{j}) = \frac {1}{L}\mathop {\mathrm {Var}}(y_{j})}. 其中, j = 1, 2, ..., K. 可以看到期望值沒有改變的同時, 方差隨著輸出數量的增加而減少. 在一般情況下, \displaystyle {\mathop {\mathrm {Var}}(y) = \frac {1}{K^{2}}\mathop {\mathrm {Var}}\left ( \sum \limits_{i = 1}^{K}y_{i} \right ) = \frac {1}{K^{2}}\left ( \sum \limits_{i = 1}^{K}\mathop {\mathrm {Var}}(y_{i}) + 2\sum \limits_{i = 1}^{K}\sum \limits_{j = 1}^{K - 1}\text {Cov}(y_{i}, y_{j}) \right )}. 這表明 : 如果各個基礎學習器是正相關的, 那麼方差和誤差會增加. 這樣, 我們可以將使用不同的演算法和輸出特徵看作是正在努力減少學習器的總的正相關性.
在糾錯輸出碼 (error correction output code) 中, 我們將一個類別與其它類別分開來的原始任務可能是一個困難的問題. 作為替代, 我們可以定義一組簡單的分類問題, 每個問題專注於原始任務的一個方面, 並且通過組合這些簡單的分類器得到最終的輸出. 這時, 基礎學習器是輸出為 0 或者 1 的二分類器, 並且有一個 K \times L 的編碼矩陣 W, 其 K 行使關於 L 個基礎學習器的輸出. 例如某行為 (-1, +1, +1, -1), 就意味著某個學習器針對第一個和第四個簡單問題回饋了否定的決策, 針對第二個和第三個簡單問題回饋了正面的決策. 如果某個基礎學習器的決策結果是錯誤的, 那麼就有可能導致總的結果是錯誤的這種傾向. 一種可能的方法為逐對分離, 這在 K 比較小的時候可以使用. 在學習時, 我們將兩個類別分開, 並且在學習中不使用屬於其它類別的樣本. 例如對於 (+1, +1, +1, 0, 0, -1), 我們說樣本屬於類別 C_{i} 若且唯若第一個簡單任務的分類器回傳 +1 且第六個簡單任務的分類器回傳 -1. 其中, 0 表示無關的. 那麼在學習的時候, 我們僅僅考慮第一個簡單任務和第六個簡單任務的分類器的值. 當 K 很大的時候, 對於給定的 L, 我們從 2^{K - 1} - 1 列中選取 L 列. 我們希望 W 的這些列盡可能不相同, 以便於每個學習器所學習的子任務都盡可能互不相同. 同時, 我們也希望 W 的行也盡可能不同, 使得在一個或者多個基礎學習器失效的時候, 可以獲得最大的糾錯. 這種思想可以用在組合多學習器決策最終輸出 y 上. 對於矩陣 W, 其被看作權重 : \displaystyle {y_{i} = \sum \limits_{j = 1}^{L}w_{ij}y_{ij}}. 然後我們根據一定的標準從 y_{i} 中選擇最終的輸出 y.
如果我們沒有可以執行同一個學習演算法的不同資料集, 我們可以通過放回抽樣的方法從同一個資料集中進行抽樣, 然後產生 L 個類似但是又不相同的資料集, 並且在決策時取平均值. 但是這種方法的不穩定性過大, 有一種比較穩定的方法 : 給定一個比較大的資料集 X, 將資料集隨機劃分為三個部分 X_{1}, X_{2} 和 X_{3}. 其中, X_{1} + X_{2} + X_{3} = X. 對於第一個學習器 M_{1}, 用來學習 X_{1}. 然後取 X_{2} 作為輸入送入 M_{1}, 將決策錯誤的樣本和 X_{2} 一起送入第二個學習器 M_{2}, 讓它進行學習. 最後取 X_{3} 作為 M_{1} 和 M_{2} 的輸入. 將兩個學習器決策不一致的樣本送入第三個學習器 M_{3} 中進行學習. 在進行決策的時候, 首先將樣本同時送入 M_{1} 和 M_{2}, 如果兩個學習器的決策一致, 那麼就作為最終的結果輸出; 否則, 再將樣本送入 M_{3} 中, 以 M_{3} 的決策結果作為最終的輸出 (或者取 M_{1}, M_{2} 和 M_{3} 中出現了兩次的決策結果). 已經有人證明過, 這種方法可以降低整體錯誤率. 除此之外, 可以遞迴地使用上面的方法建構一個組合學習器.
上面這種方法很好, 但是要求樣本足夠多. 否則, 第二個學習器和第三個學習器都會因為沒有足夠的樣本而無法很好地收斂. 於是有人提出一種自適提升的變種 AdaBoost. 它重複使用相同的學習樣本並且不要求樣本足夠多. 但是, 它要求分類器應該足夠簡單, 以防止過適. 除此之外, 這個方法可以組合任意多個學習器, 不一定要求為三個. 其基本思想是將樣本抽取的機率修改為誤差的函數. 令 p_{j}^{\mathrm {t}} 表示學習樣本 (x^{\mathrm {t}}, r^{\mathrm {t}}) 被抽取, 並且用於第 j 個學習器的機率. 對於擁有 N 個樣本的資料集 X, 開始時, 所有 p_{j}^{\mathrm {t}} = \frac {1}{N}. 記 \varepsilon_{j} 表示學習器 M_{j} 的錯誤率. 然後從 j = 1 開始, 不斷添加學習器. 當 \varepsilon_{j} <\frac {1}{2} 時停止添加. 需要注意的是, 這裡的錯誤率並不是基於原始問題的錯誤率, 而是基於第 j 步中使用的樣本. 定義 \beta_{j} = \frac {\varepsilon_{j}}{1 - \varepsilon_{j}} < 1 : 如果學習器 M_{j} 針對樣本 x^{\mathrm {t}} 正確分類, 那麼令 p_{j + 1}^{\mathrm {t}} = \beta_{j}p_{j}^{\mathrm {t}}; 否則, 令 p_{j + 1}^{\mathrm {t}} = p_{j}^{\mathrm {t}}. 由於 p_{j + 1}^{\mathrm {t}} 應該是機率的, 因此要進行正規化 : 用 p_{j + 1}^{\mathrm {t}} 除以 \sum \limits_{\mathrm {t}}p_{j + 1}^{\mathrm {t}}, 使得 \sum \limits_{j}p_{j}^{\mathrm {t}} = 1. 然後, 根據這些修改後的機率 p_{j + 1}^{\mathrm {t}}, 從原始樣本中進行放回抽樣, 得到一個新的相同大小的子資料集, 用於 M_{j + 1} 的學習. 這樣做的效果是令 M_{j + 1} 的學習更加注重於 M_{j} 出現錯誤的那些樣本. 一旦完成學習, 我們可以使用一定的方法得到最終的輸出 y.
在混合專家模型結構中, 存在一個門控制, 其輸出是專家的權重, 因而可以將這種架構用於多學習器最終輸出的選擇. 混合專家模型使用競爭的學習演算法局域化了基礎學習器, 使得每個基礎學習器變成了輸入空間的一個不同領域的專家, 並且其權重 w_{j}(x) 在其專長的領域中接近於 1. 最終輸出結果是加權平均 : \displaystyle {y = \sum \limits_{i = 1}^{K}w_{i}(x)y_{i}}. 在混合專家模型中, 專家是有偏誤的, 但是是負相關的. 隨著學習的進行, 偏誤降低但是專家的方差會增加. 與此同時, 隨著專家局域化於輸入空間的不同部分, 它們的協方差為負並且越來越小.
在動態分類器選擇中, 首先系統會檢驗輸入並且評估哪一個基礎學習器在輸入周圍具有競爭力. 然後挑選最有競爭力的基礎學習器來產生輸出, 並且將該輸出作為最終輸出. 在這種模式下, 需要確保對於輸入空間的任何區域都存在一個競爭的基礎分類器. 這意味著在基礎分類器之間存在輸入空間的學習劃分.
之前我們提到過, 對於學習器 d_{1}, d_{2}, ..., d_{L}, 存在一個函數 f, 使得 \displaystyle {y = f(d_{1}, d_{2}, ..., d_{L}|\Phi)}. 之前我們說 \Phi 是 f 的參數, 這就導致 \Phi 除了可以直接被指派之外, 還可以被訓練. 我們用 f(\cdot|\Phi) 來表示要學習的組合器系統函數 f(d_{1}, d_{2}, ..., d_{L}|\Phi). 若 f(\cdot|\Phi) 是線性模型, 其約束為 w_{i} \geq 0 且 \sum \limits_{i}w_{i} = 1, 那麼我們可以用回歸的方法來獲得權重. 另外, f(\cdot|\Phi) 可以是非線性的.
有時候, 考慮所有學習器的輸出可能並不是一個好主意. 因此, 我們希望做一些預處理, 丟棄一些學習器. 首先, 我們保證所有學習器中, 沒有任意兩個是高度相關的, 另外還要保證所有學習器都是準確的. 在這種假設下, 如果某個基礎學習器在某種情況下, 總是不能提高總體準確率, 甚至有時候還會降低準確率, 那麼就可以拋棄它. 從一系列學習器中選擇一個準確率最高的子集, 可以使用以下方法 :
- 每一次向集合中添加一個新的學習器, 然後檢測總體準確率. 如果準確率有所提升, 那麼將這個學習器加入集合;
- 從大集合中移除一個學習器, 然後檢測總體準確率. 若準確率基本沒有變化甚至發生下降, 那麼就丟棄這個學習器.
另外, 從 L 個學習器中選取一個學習器子集也可以看作維度化約任務, 因此可以使用第 6 節的方法.
18. 強化學習
本章我們考察機器學習中的最後一部分內容, 強化學習. 在導論中已經介紹過了, 之前所介紹的演算法都是為了分類問題或者回歸問題, 每個演算法幾乎都有自己的邊界值. 但是在強化學習中, 我們不考察某個值, 而是考察一整個步驟, 得到最佳策略.
比如我們現在想要訓練一個遊戲的機器人, 例如英雄聯盟中的人機; 或者我們想要訓練象棋中的對手; 又或者我們想要訓練一個走迷宮的機器人... 這幾種應用都有許多共同點 : 存在某一決策者, 它位於某種環境中. 在某個時刻, 這個環境位於某種狀態上, 然後決策者可以做一系列動作. 一旦決策者完成一系列動作, 決策者和環境的狀態就會發生改變. 要完成某個任務, 決策者需要將一系列動作組合為一個大的策略, 之後得到一個反饋. 一般來說, 只有完整的策略執行完畢之後, 就會發生正向獎勵的行為. 獎勵定義了這個問題的目的, 例如英雄聯盟的最終獎勵就是要贏得遊戲, 局域獎勵可能是推掉某個塔, 拿下 dragon 和殺死一個對手等等. 決策者不斷在某個環境中進行學習, 制定最佳策略以最大化獎勵, 這個過程就是強化學習的過程.
獎勵的另外一面是懲罰. 懲罰告訴決策者之前的一系列動作做得如何, 並且它也不提供後面動作的任何信息. 在執行若干動作獲得獎勵之後, 我們希望對之前所執行的單個動作進行評估, 並且找到可以引領我們贏得獎勵的那些動作, 以便於對其進行記錄在之後使用. 強化學習就是為了中間狀態和動作產生一個內部值, 這個值表明了這些狀態或者動作在引領我們達到目標並且獲取最終獎勵方面有多少幫助. 一旦學習到這樣的內部獎勵機制, 決策者就可以執行最大化內部值的局域動作.
通過上面的分析, 你可能想到隱藏式馬可夫模型可以用於強化學習. 然而, 隱藏式馬可夫模型依賴於外部過程進行觀測, 在強化學習中, 產生動作序列的並不是外部過程而是決策者.
假設有一個帶有 K 個手柄的老虎機, 可以做的動作是拉下某個手柄可以贏得和這個手柄相關的獎勵 (也有可能沒有獎勵, 但是不存在負面獎勵). 任務是決策者決定拉下哪一個手柄可以贏得最大獎勵. 這是一個分類問題, 在監督學習中, 我們直接可以從樣本中得到最大化收益的手柄, 但是在強化學習中我們只能去嘗試並且記錄每個手柄對應的收益, 然後記錄下來. 這是一個簡化的強化學習問題, 因為它只有一個狀態, 我們只需要決定動作即可. 除此之外, 獎勵是立即可獲得的, 並不存在延遲, 進行一個動作之後立即可以看到動作的價值.
假設 Q(a) 是某個動作 a 的價值. 初始時, 對於所有的 a 都有 Q(a) = 0. 當我們嘗試執行動作 a 的時候, 我們獲得一個獎勵 r_{a} \geq 0. 如果獎勵是確定性的, 那麼拉下手柄 a, 我們總是獲得相同的獎勵 r_{a}, 並且在這種情況下, 我們可以簡單地令 Q(a) = r_{a}. 如果我們想充分利用已有發現, 那麼一旦我們發現某個動作 a 具有 Q(a) > 0, 我們就可以不停地選擇它並且在每次拉下手柄時都有獎勵 r_{a}. 然而, 很可能存在更高獎勵的手柄, 因此我們還需要進行探索.
我們可以選擇不同的動作, 並對所有的動作 a 存儲 Q(a). 只要我們想充分利用已有的發現, 我們就可以選擇具有最高價值的動作, 即 \displaystyle {\text {選擇 } a^{*} \text { 若且唯若 } Q(a^{*}) = \max \limits_{a}Q(a)}.
如果獎勵並不是確定性的, 而是隨機的, 那麼在選擇相同的動作的時候, 我們每次獲得不同的獎勵. 此時, 獎勵被機率分佈 p(r|a) 所定義. 在這種情況下, 我們定義 Q_{t}(a) 作為在時刻 t 時執行動作 a 的價值估計. 它是在時刻 t 之前執行動作 a 所獲得的所有獎勵的平均值.一種在線更新的方法可以定義如下 : \displaystyle {Q_{t + 1}(a) \leftarrow Q_{t}(a) + \eta \big ( r_{i + 1}(a) - Q_{t}(a) \big )}. 其中, r_{t + 1}(a) 是在時刻 t + 1 執行動作 a 之後所獲得的獎勵. 在上式中的 \eta 可以看作學習因素, r_{t + 1} 是期望輸出, 而 Q_{t}(a) 是當前的預測. Q_{t + 1}(a) 是在 t + 1 時刻動作 a 的期望值, 並且隨著 t 的增加收斂到 p(r|a) 的均值.
完整的強化學習從以下幾個方面推廣了上面簡化的問題 :
- 有多個狀態 : 這相當於同時存在具有多個不同獎勵分佈 p(r|s_{i}, a_{j}) 的老虎機. 而我們需要對 Q(s_{i}, a_{j}), 即在狀態 s_{i} 時執行動作 a_{j} 的價值, 從而進行學習;
- 動作不僅影響獲得的獎勵, 而且影響下一個狀態, 並且我們從一個狀態轉移到另一個狀態;
- 獎勵被延遲, 而我們需要能夠從延遲的獎勵中估計立即值.
我們首先將時間離散化為 t = 0, 1, 2, ..., 並且 s_{t} \in S 表示決策者在時刻 t 的狀態, 其中 S 時所有可能狀態的集合. a_{t} \in A(s_{t}) 表示決策者在時刻 t 所執行的動作, 其中 A(s_{t}) 表示在時刻 s_{t} 時所有可能執行的動作集合. 當處於狀態 s_{t} 的決策者執行動作 a_{t} 時, 時間流逝且接收到獎勵 r_{t + 1} \in R, 並且決策者向下一個狀態 s_{t + 1} 轉移. 整個問題我們通過馬可夫決策過程來建模, 獎勵和下一個狀態分別採樣於它們響應的機率分佈 p(r_{t + 1}|s_{t}, a_{t}) 和 \mathop {\mathbf {P}}(s_{t + 1}|s_{t}, a_{t}).
依賴於應用, 某一狀態可能被指定爲初始狀態, 而在某些應用中, 也存在一個停止搜尋的終極目標狀態. 所有在終止狀態執行的動作都以機率 1 將狀態轉移到自身且沒有任何獎勵. 從初始狀態到終止狀態的動作序列被稱為一個片段或試驗.
決策 \pi 定義了決策者的行為, 並且是從環境的狀態到動作之間的一個影射 : \pi : S \rightarrow A. 策略定義了任意狀態 s_{t} 可以執行的動作 : a_{t} = \pi(s_{t}). 策略 \pi 的價值 V^{\pi}(s_{t}) 是決策者從狀態 s_{t} 開始, 遵循決策所獲得的期望累積獎勵.
在有限時域中, 決策者會試圖最大化後面 T 個步驟的期望獎勵 : \displaystyle {V^{\pi}(s_{t}) = \mathop {\mathrm {E}}(r_{t + 1} + r_{t + 2} + ... + r_{t + T}) = \mathop {\mathrm {E}} \left ( \sum \limits_{i = 1}^{T}r_{t + i} \right )}. 某些任務是連續的, 並且不存在預先固定的關於環境的限制. 在無限時域中, 不存在序列長度的限制, 但是未來的獎勵會減少 : \displaystyle {V^{\pi}(s_{t}) = \mathop {\mathrm {E}}(r_{t + 1} + \gamma r_{t + 2} + \gamma^{2} r_{t + 3} + ...) = \mathop {\mathrm {E}} \left ( \sum \limits_{i}\gamma^{i - 1}r_{t + i} \right )}. 其中, 0 \leq \gamma < 1 是折扣率, 用於保證所回傳的獎勵是有限的. 如果 \gamma = 0, 那麼只有立即可獲得的獎勵被計入. 隨著 \gamma 不斷趨向於 1, 未來的獎勵將更多地計入在內, 而這時我們說決策者變得有遠見了. \gamma 不可能等於 1, 因為對於完成任務的動作序列總是有一個時間上的限制. 決策者可能並不是人, 因此我們喜歡更早地獲得獎勵而並非更晚, 因為我們並不確定這個決策者可以運作多久.
對於每個策略 \pi, 存在其價值 V^{\pi}(s_{t}), 我們想要找到最佳策略 \pi^{*} 使得 \displaystyle {V^{\pi^{*}}(s_{t}) = \max \limits_{\pi}V^{\pi}(s_{t})}.
在某些應用中, 我們更希望處理成對的狀態-動作的價值 Q(s_{t}, a_{t}), 而不是簡單狀態的價值 V(s_{t}). 令 V(s_{t}) 表示決策者處於狀態 s_{t} 的價值, 而 Q(s_{t}, a_{t}) 表示當處於狀態 s_{t} 時動作 a_{t} 的價值. 我們定義 Q^{*}(s_{t}, a_{t}) 為處於狀態 s_{t} 時執行動作 a_{t} 並在其後遵循最佳決策的期望累積獎勵. 狀態的價值等於其上可採取的最佳動作的價值 : \displaystyle {\begin {aligned} V^{*}(s_{t}) &= \max \limits_{s_{t}}Q^{*}(s_{t}, a_{t}) \\ &= \max \limits_{s_{t}}\mathop {\mathrm {E}} \left ( \sum \limits_{i}\gamma^{i - 1}r_{t + i} \right ) \\ &= \max \limits_{s_{t}}\mathop {\mathrm {E}} \left ( r_{t + 1} + \gamma \sum \limits_{i}\gamma^{i - 1}r_{t + i + 1} \right ) \\ &= \max \limits_{a_{t}}\mathop {\mathrm {E}}\big ( r_{t + 1} - \gamma V^{*}(s_{t + 1}) \big ), \end {aligned}} \displaystyle {V^{*}(s_{t}) = \max \limits_{a_{t}} \left \{ \mathop {\mathrm {E}}(r_{t + 1}) + \gamma \sum \limits_{s_{t + 1}}p(s_{t + 1}|s_{t}, a_{t})V^{*}(s_{t + 1}) \right \}}.
對於每一個可能的下一個狀態 s_{t + 1}, 以機率 \mathop {\mathbf {P}}(s_{t + 1}|s_{t}, a_{t}) 轉移到 s_{t + 1} 並自此遵循最佳決策, 所得到的期望累積獎勵是 V^{*}(s_{t + 1}). 我們在所有可能的下一個狀態上求和, 並且打一定的折扣, 因為它晚一個時間步. 加上立即期望獎勵, 得到動作 a_{t} 的總體期望累積獎勵. 最後, 我們選擇所有動作中最好的一個即可. 類似地, 還有 \displaystyle {Q^{*}(s_{t}, a_{t}) = \mathop {\mathrm {E}}(r_{t + 1}) + \gamma \sum \limits_{s_{t + 1}}\mathop {\mathbf {P}}(s_{t + 1}|s_{t}, a_{t})\max \limits_{a_{t + 1}} Q^{*}(s_{t + 1}, a_{t + 1})}. 一旦得到 Q^{*}(s_{t}, a_{t}) 的值, 我們就可以定義決策 \pi 為執行動作 a_{t}^{*}, 它在所有 Q^{*}(s_{t}, a_{t}) 中具有最大值 : \displaystyle {\pi^{*}(s_{t}) : \text { 選擇 } a_{t}^{*}, \text { 其中 } Q^{*}(s_{t}, a_{t}^{*}) = \max \limits_{a_{t}}Q^{*}(s_{t}, a_{t})}. 這意味著只要獲得所有 Q^{*}(s_{t}, a_{t}) 的值, 那麼在每個局部步驟中使用貪婪搜尋, 就可以得到一個最佳的步驟序列, 該序列最大化累積獎勵.
我們從基於模型的學習開始, 其中我們完全知道環境模型的參數 p(r_{t + 1}|s_{t}, a_{t}) 和 \mathop {\mathbf {P}}(s_{t + 1}|s_{t}, a_{t}). 在這種情況下, 我們不需要進行任何搜尋就可以使用動態規劃直接對最佳價值函數和決策求解. 最佳價值函數是唯一的, 即為之前 V^{*}(s_{t}) 給出的聯立方程式的街. 一旦獲得了最佳價值函數函數, 最佳決策就是選擇最大化下一個狀態價值的動作 : \displaystyle {\pi^{*}(s_{t}) = \argmax \limits_{s_{t}} \left \{ \mathop {\mathrm {E}}(r_{t + 1}|s_{t}, a_{t}) + \gamma \sum \limits_{s_{t + 1} \in s}\mathop {\mathbf {P}}(s_{t + 1}|s_{t}, a_{t})V^{*}(s_{t + 1}) \right \}}.
為了找到最佳策略, 可以使用最佳價值函數, 並且以下面步驟運作 :
- 將 V(s) 初始化為任意值;
- 對於所有的 s \in S 和所有的 a \in A, 指派 \mathop {\mathrm {E}}(r|s, a) + \gamma \sum \limits_{s' \in S}\mathop {\mathbf {P}}(s'|s, a)V(s') 給 Q(s_{t}, a_{t});
- 指派 \max \limits_{a}Q(s, a) 給 V(s);
- 重複第二步和第三步直到 V(s) 收斂.
對於收斂的條件, 是兩次迭代的價值差小於某個閾限 \delta : \displaystyle {\max \limits_{s \in S} \left | V^{l + 1}(s) - V^{l}(s) \right | < \delta}. 其中, l 是迭代次數. 由於我們只關心具有最大價值的動作, 所以有可能在價值收斂於最佳價值之前, 決策就已經收斂於最佳決策.
上面的方案中, 我們通過價值迭代尋找最佳決策. 我們也可以從某一個決策開始, 不斷迭代直到決策不改變 :
- 任意初始化一個決策 \pi';
- 將 \pi' 指派給 \pi;
- 通過求解方程組 V^{\pi}(s) = \mathop {\mathrm {E}} \big ( r|s, \pi(s) \big ) + \gamma \sum \limits_{s' \in S}\mathop {\mathbf {P}}\big ( s'|s, \pi(s) \big )V^{\pi}(s') 來計算使用 \pi 的價值;
- 在每個狀態上改進策略, 將滿足 \argmax \limits_{a} \left \{ \mathop {\mathrm {E}}(r|s, a) + \gamma \sum \limits_{s' \in S}\mathop {\mathbf {P}}(s'|s, a)V^{\pi}(s') \right \} 的動作 a 指派到某個狀態 \pi'(s) 上;
- 不斷重複第二步、第三步和第四步, 直到 \pi = \pi'.
上面的方法要求我們對決策者所處在的環境擁有完全的認識. 當我們沒有或者有很少關於環境的知識的時候, 就沒有辦法使用上面的方法. 除此之外, 強化學習的一個優勢就在於當沒有模型可用的時候, 強化學習會通過嘗試的方法來探詢一個可行的模型. 因此, 我們可以通過探詢嘗試的方式, 在確定性和非確定性的情況下運作強化學習.
為了對環境進行探尋, 我們以機率 \varepsilon 在所有可能的動作中均勻且隨機地選取一個動作, 然後以機率 1 - \varepsilon 選擇已知的最好動作進行利用. 一旦進行了足夠的探尋, 就開始對其的利用. 為此, 我們可以通過一個比較大的 \varepsilon 值開始, 並且逐漸減小它. 我們需要確認所採取的決策在狀態 s \in S 執行任意動作 a \in A 的機率大於 0. 根據機率選擇之後, 我們將價值轉化為機率 : \displaystyle {\mathop {\mathbf {P}}(a|s) = \frac {e^{Q(s, a)}}{\sum \limits_{b \in A}e^{Q(s, b)}}}. 然後根據這些機率對動作進行選擇. 為了逐漸從探尋轉向利用, 可以使用一個閾值 T, 並且定義選擇動作 a 的機率為 \displaystyle {\mathop {\mathbf {P}}(a|s) = \frac {e^{\frac {Q(s, a)}{T}}}{\sum \limits_{b \in A}e^{\frac {Q(s, b)}{T}}}}. 當 T 很大的時候, 所有機率都想等, 因而我們進行的是探尋. 當 T 很小的時候, 更好的動作就會成為選擇, 而不是優先進行探尋. 因此, 我們的策略是以一個大的 T 值開始並且逐漸減小它, 在演算法上, 這被稱為模擬退火的思想.
在不存在任何模型的學習中, 我們首先討論較為簡單的確定性情況, 也就是對於任意狀態 - 動作, 有且唯有一個可能的獎勵和下一個狀態. 在這種情況下 \displaystyle {Q^{*}(s_{t}, a_{t}) = \mathop {\mathrm {E}}(r_{t + 1}) + \gamma \sum \limits_{s_{t + 1}}\mathop {\mathbf {P}}(s_{t + 1}|s_{t}, a_{t})\max \limits_{a_{t + 1}} Q^{*}(s_{t + 1}, a_{t + 1})} 就簡化為 \displaystyle {Q(s_{t}, a_{t}) \leftarrow r_{t + 1} + \gamma \max \limits_{a_{t + 1}} Q(s_{t + 1}, a_{t + 1})}. 我們簡單地將其作為一個指派來更新 Q(s_{t}, a_{t}). 當處於狀態 s_{t} 的時候, 使用之前所見到的各種隨機決策之一選擇一個動作 a_{t}, 這回傳一個獎勵 r_{t + 1} 並且轉移到狀態 s_{t + 1}. 然後, 前一個動作的價值更新規則如下 : \displaystyle {\hat {Q}(s_{t}, a_{t}) \leftarrow r_{t + 1} + \gamma \max \limits_{a_{t + 1}} \hat {Q}(s_{t + 1}, a_{t + 1})}. 其中, \hat {Q} 表示該值的估計值. 由於 \hat {Q}(s_{t}, a_{t}) 是一個稍後的值, 因此如果有著更高的機率, 也是正確的. 我們以 \gamma 對其進行打折扣並且加上立即獎勵 (若有), 並且以此作為前一個 \hat {Q}(s_{t}, a_{t}) 的新估計. 這可以看作取下一個時間步中的動作的價值估計來修改當前動作的價值估計.
初始時, 所有的 \hat {Q}(s_{t}, a_{t}) 都為 0, 並且作為試驗片段的結果及時更新. 假設我們有一個狀態和轉移序列, 並且在每次轉移的時候, 使用上面的評估方法用當前狀態 - 動作的 Q 值來更新前面一對狀態 - 動作的 Q 值的估計. 在中間狀態, 所有的獎勵為 0 從而價值為 0, 因此不進行更新. 當到達目標狀態的時候, 得到獎勵 r, 因而可以將前一對狀態 - 動作的 Q 值更新為 \gamma r. 對於這個之前的狀態 - 動作, 其立即獎勵從 0 且來自下一個狀態 - 動作的貢獻又因為晚一步而以 \gamma 打折扣. 於是, 在下一個試驗中, 如果再次達到這個狀態, 則將其前面一個狀態更新為 \gamma^{2}r, 依此類推... 按照這種方式, 經過多個片段之後, 這個信息被後推到更早的狀態 - 動作中. 隨著我們尋找到具有更高累積獎勵的路徑, 這些 Q 值不斷增加直到它們的最佳值, 而這些 Q 值不會降低. 注意, 這裡我們並不知道獎勵或者下一個狀態函數. 它們是環境的一部分, 就好像是我們在探尋時對其進行查詢. 我們也不對其進行機率建模, 儘管有這種可能性, 我們知識原樣接收它們並且通過估計的價值函數來直接學習最佳策略.
如果獎勵和動作的結果都是不確定性的, 那麼有一個獎勵從中抽樣的機率分佈 p(r_{t + 1}|s_{t}, a_{t}), 並且存在一個下一個狀態的機率分佈 p(s_{t + 1}|s_{t}, a_{t}). 這些機率分佈函數幫助我們對環境中不可控制的因素所引發的非確定性進行建模. 在這種情況下, 有 \displaystyle {Q(s_{t}, a_{t}) = \mathop {\mathrm {E}}(r_{t + 1}) + \gamma \sum \limits_{s_{t + 1}}\mathop {\mathbf {P}}(s_{t + 1}|s_{t}, a_{t})\max \limits_{a_{t + 1}} Q(s_{t + 1}, a_{t + 1})}. 這種情況下, 我們不能直接進行指派. 因為對於相同的狀態或者動作, 我們可能獲得不同的獎勵或者轉移到不同的下一個狀態. 我們所做的是取移動平均 : \displaystyle {\hat {Q}(s_{t}, a_{t}) \leftarrow \hat {Q}(s_{t}|a_{t}) + \eta(r_{t + 1}) + \gamma \max \limits_{a_{t + 1}}\hat {Q}(s_{t + 1}, a_{t + 1}) - Q(s_{t}, a_{t})}. 我們將這些 r_{t + 1} + \gamma \max \limits_{a_{t + 1}}\hat {Q}(s_{t + 1}, a_{t + 1}) 值看作每個 (s_{t}, a_{t}) 的實體的一個樣本, 並且希望 \hat {Q}(s_{t}, a_{t}) 收斂到其均值. 我們可以將這種演算法描述為 :
- 任意初始化所有 Q(s, a);
- 對於所有的試驗, 首先初始化 s, 然後重複第三步, 第四步, 第五步和第六步, 直到 s 為終止狀態為止;
- 使用 Q 導出的策略選擇 a;
- 執行動作 a, 並且觀測 r 和 s'
- 使用 Q(s, a) + \eta(r_{t + 1}) + \gamma \max \limits_{a_{t + 1}}\hat {Q}(s_{t + 1}, a_{t + 1}) - Q(s_{t}, a_{t}) 更新 \hat {Q}(s_{t}, a_{t});
- 將 s' 指派給 s.
我們還可以認為, \hat {Q}(s_{t}, a_{t}) \leftarrow \hat {Q}(s_{t}|a_{t}) + \eta(r_{t + 1}) + \gamma \max \limits_{a_{t + 1}}\hat {Q}(s_{t + 1}, a_{t + 1}) - Q(s_{t}, a_{t}) 的作用是減小當前的 Q 值和一個時間步驟之後的被推後的估計之間的差.
如果把上面演算法中第三步和第四步交換一下, 那麼可以得到另一種策略. 在交換之後, 不再是搜尋所有可能的下一個動作 a' 並且選擇最好的, 而是從 Q 值推導出的策略來選擇下一個動作 a', 並且使用這個動作的 Q 值進行計算. 在策略方法估計一個策略的價值, 並且用它來採取動作.
除了上面所說的方法之外, 還可以使用下面的方法來更新 : \displaystyle {V(s_{t}) \leftarrow V(s_{t}) + \eta \big ( r_{t + 1} + \gamma V(s_{t + 1}) - V(s_{t}) \big )}. 其中, V(s_{t}) 是當前的估計, 而 r_{t + 1} + \gamma V(s_{t + 1}) 是更好的後一個時刻的預測. 更新因素 \eta 逐漸減小, 以確保收斂到最佳值函數 V^{*}(s).
前面討論的方法都是針對單步的, 資格痕跡是對過往出現的狀態 - 動作的一個記錄, 依次達到更新以往達到的狀態 - 動作值. 為了儲存資格痕跡, 需要為每個狀態 - 動作關聯一個記憶變數 e(s, a), 並且初始化為 0. 當狀態 - 動作 (s, a) 被訪問的時候, 也就是在狀態 s 執行動作 a 的時候, 其資格被設定為 1; 其它所有狀態 - 動作的資格乘以 \gamma\lambda. 其中, 0 \leq \lambda \leq 1 是軌跡衰減參數 : \displaystyle {e_{t}(s, a) = \begin {cases} 1 & {s = s_{t}, a = a_{t}} \\ \gamma\lambda e_{t - 1}(s, a) & {\text {else}}. \end {cases}}
如果某一個動作 - 狀態從未被訪問過, 其資格保持為 0; 如果它被訪問過, 那麼隨著時間的增加和其它狀態 - 動作被訪問, 該狀態的資格依賴於 \gamma 和 \lambda 的值進行衰減. 在非確定性獎勵和動作對應的交換步驟之後的演算法中, 時刻 t 的時間誤差為 \displaystyle {\delta_{t} = r_{t + 1} + \gamma Q(s_{t + 1}, a_{t + 1}) - Q(s_{t}, a_{t})}. 在帶有資格軌跡的演算法中, 更新規則為 \displaystyle {Q(s, a) \leftarrow Q(s, a) + \eta\delta_{t}e_{t}(s, a)}. 因此, 帶有資格軌跡的演算法可以描述為 :
- 任意初始化所有 Q(s, a), 初始化所有 e(s, a) = 0;
- 對於所有的試驗, 初始化 s, 然後使用 Q 導出的策略選擇 a, 重複第三步到第七步, 直到 s 為終止狀態為止;
- 執行動作 a, 並且觀測 r 和 s'
- 使用 Q 導出的策略選擇 a';
- 指派 r + \gamma Q(s', a') - Q(s, a) 指派給 \delta, 令 e(s, a) = 1;
- 對於所有的 s 和 a, 將 Q(s, a) + \eta\delta e(s, a) 指派給 Q(s, a), 將 \gamma\lambda e(s, a) 指派給 e(s, a);
- 將 s' 指派給 s, 將 a' 指派給 a.
到目前為止, 我們假定將 Q 值或者 V 值存在一個表格當中. 這面臨著表格尺寸很大, 狀態和動作可能是連續的和搜尋空間大這三個問題. 取而代之, 我們將問題看作一個回歸問題, 那麼就變成了一個監督學習的問題. 其中, 我們定義一個回歸模型 Q(s, a|\boldsymbol {\theta}), 將 s 和 a 作為輸入並且通過參數向量 \theta 進行參數化來學習 Q 值. 一個好的函數逼近通常意義上來說可以解決前面遇到的這三個問題. 但是, 一個好的逼近可以用一個簡單的模型來實現, 而不一定要存儲學習樣本, 可以使用連續輸入, 並且可以對其推廣. 如果我們知道相似的 (s, a) 具有相似的 Q 值, 則我們可以對之前的情況進行推廣並且產生一個好的 Q(s, a) 值, 即使這個狀態-動作從來沒有遇到過.
為了能夠對回歸模型進行訓練, 我們需要學習樣本. 在單步更新的情況下, 我們希望 Q(s_{t}, a_{t}) 的值接近於 r_{t + 1} + \gamma Q(s_{t + 1}, a_{t + 1}). 這樣, 我們可以形成一個資料集, 其中輸入是狀態-動作 (s_{t}, a_{t}), 而要求的輸出是 r_{t + 1} + \gamma Q(s_{t + 1}, a_{t + 1}). 我們可以將均方誤差寫為 \displaystyle {\mathop {\mathrm {E}}^{t}(\boldsymbol {\theta}) = \big ( r_{t + 1} + \gamma Q(s_{t + 1}, a_{t + 1}) - Q(s_{t}, a_{t}) \big )^{2}}. 對於 V 值的學習, 輸出為 r_{t + 1} + \gamma V(s_{t + 1}). 一旦準備好學習樣本, 就可以使用監督學習的方法進行學習.
如果我們像神經網絡那樣使用梯度下降法, 那麼參數向量的更新規則為 \displaystyle {\Delta \boldsymbol {\theta} = \eta \big ( r_{t + 1} + \gamma Q(s_{t + 1}, a_{t + 1}) - Q(s_{t}, a_{t}) \big )\nabla\boldsymbol {\theta}_{t}Q(s_{t}, a_{t})}. 這是單步更新的情況. 當資格軌跡存在的時候, 有 \displaystyle {\Delta \boldsymbol {\theta} = \eta\delta_{t}e_{t}}. 其中, 誤差為 \displaystyle {\delta_{t} = r_{t + 1} + \gamma Q(s_{t + 1}, a_{t + 1}) - Q(s_{t}, a_{t})}. 並且資格參數向量的更新規則為 \displaystyle {\boldsymbol {e}_{t} = \gamma\lambda\boldsymbol {e}_{t - 1} + \nabla_{\boldsymbol {\theta}_{t}}Q(s_{t}, a_{t})}. 其中, \boldsymbol {e}_{0} = \boldsymbol {0}.
理論上來說, 任何能夠訓練回歸模型的方法都可以用於訓練 Q, 但是針對這一特定人物還有許多要求. 首先, 使用的方法應該可以推廣, 也就是說我們的確需要保證相似的狀態和動作具有相似的 Q 值. 同時, 與在其它應用中一樣, 也需要對 s 和 a 有一個好的表示, 使得相似性比較明顯. 其次, 強化學習更新以一個接一個的方式提供樣本, 而不是作為一個整體的學習樣本, 因而學習演算法應當有能力進行單個更新來對新的樣本進行學習並且不會忘記以前學到的東西. 由於這些原因, 使用局域學習器對 Q 進行訓練似乎是一個好方法. 相同的要求同樣適用於 V(s_{i}|\boldsymbol {\theta}).
在某些場景中, 決策者並不完全知道環境的狀態, 但是可以感知到一些狀態. 這一場景類似於馬可夫決策過程, 不同之處在於執行動作 a_{t} 之後, 新的狀態 s_{t + 1} 是未知的, 但是我們有一個觀測 o_{t + 1}, 它是一個關於 s_{t} 和 a_{t} 的隨機函數 : p(o_{t + 1}|s_{t}, a_{t}). 如果 o_{t + 1} = s_{t + 1}, 那麼這就是馬可夫決策過程.
對於觀測而言, 馬可夫性質並不成立. 下一個狀態的觀測並不僅僅依賴於當前的動作和觀測. 當只存在有限的觀測的時候, 兩個狀態表面上看起來可能是一樣的, 但是實際上是不同的, 而且如果這兩個狀態要求執行不同的動作, 那麼就會導致以累積獎勵為度量的性能上的損失. 決策者應當以某種方式將過去的軌跡壓縮到一個當前的單一狀態估計中. 這些過去的觀測還可以通過將觀測上的一個過去的窗口作為策略的輸入而被計算在內, 或者在不忘記過去觀測的同時維持狀態估計. 在任何時候, 決策者都可以計算最可能的狀態並且執行響應的動作. 或者, 它可以執行動作來收集信息並且減小不確定性. 決策者根據動作所提供的信息, 所產生額度獎勵和它們如何改變環境狀態來選擇動作.
為了保持整個過程都是馬可夫的, 決策者維護一個內部的信任狀態 b_{t} 來對其進行總結. 決策者有一個狀態估計因素, 它給予上一個動作 a_{t}, 當前觀測 o_{t + 1} 和前一個信任狀態 b_{t} 來更新信任狀態 b_{t + 1}. 決策者還有一個策略 \pi, 它與完全可觀測環境中所使用的真實狀態相反年, 策略 \pi 基於這個信任狀態產生下一個動作 a_{t + 1}. 信任狀態是給定初始信任狀態的環境狀態和決策者以往的觀測 - 動作歷史上的機率分佈. 在這種情況下, Q 學習使用信任狀態 - 動作的值, 而不是實際的狀態-動作的值 : \displaystyle {Q(b_{t}, a_{t}) = \mathop {\mathrm {E}}(r_{t + 1}) + \gamma \sum \limits_{b_{t + 1}}\mathop {\mathbf {P}}(b_{t + 1}|b_{t}, a_{t})V(b_{t + 1})}.
自創文章, 原著 : Jonny. 如若閣下需要轉發, 在已經授權的情況下請註明本文出處 :