CS229 Lecture 11

CS229 Lecture 11


課程要點:

Bayesian statistics and regularization
Online Learning
Advice for apply ML Algorithm


貝葉斯統計和正則化

上節課講了如何通過特徵選擇減少特徵數目,進而降低算法出現過擬合的風險,本節會介紹另一種降低過擬合的方法,即正則化,這種方法不會減少特徵的數目。

前面講述過線性迴歸其通過最大似然的方式求解θ\theta

maxθ  i=1mp(y(i)x(i);θ)\mathop {\max }\limits_{\theta}\;\prod_{i=1}^{m}p(y^{(i)}|x^{(i)};\theta)

這種通過極大似然求解θ\theta實際上是頻率學派的觀點,他們認爲θ\theta並不是變量,而是確定的。它影響着yy。我們拿到的一組數據樣本是由θ\theta控制者yyxx,雖然無法確切的知道θ\theta是什麼,但θ\theta並不是變量,因此頻率學派認爲想得到θ\theta,找到一個θ^\hat{\theta}使得x(i)x^{(i)}出現那麼y(i)y^{(i)}也以最大概率出現,那麼這個θ^\hat{\theta}就十分貼近θ\theta了。

貝葉斯學派的觀點認爲θ\theta是隨機變量,當我們想預測房價的時候,我們會首先猜測θ\theta的分佈,即基於其一個先驗概率。假設θ\theta服從均值爲00方差爲τ2I\tau^2I的高斯分佈。

p(θ)priorp(\theta) -prior

θN(0,τ2I)\theta\sim N(0,\tau^{2}I)

在給予訓練數據後

S={(x(i),y(i))}i=1mS=\{(x^{(i)},y^{(i)})\}_{i=1}^{m}

計算θ\theta的後驗概率爲:

P(θS)(i=1mP(y(i)x(i),θ))P(θ)P(\theta|S)\propto(\prod_{i=1}^{m}P(y^{(i)}|x^{(i)},\theta))P(\theta)

可以注意到上式中的θ\thetax(i)x^{(i)}是通過,,分隔的,這裏表示θ\theta是個變量。

當由新的數據xx時,其預測值爲yy的概率爲:

P(yx,S)=θP(yx,θ)p(θS)dθP(y|x,S)=\int_{\theta}P(y|x,\theta)p(\theta|S)d\theta

關於yy的數學期望爲:

E[yx,S]=yyP(yx,S)dyE[y|x,S]=\int_{y}yP(y|x,S)dy

從上面的式子中很容易看出,要真正求解θ\theta的後驗概率是很難的,θ\thetan+1n+1維向量,而且還要做積分。

因此在實際應用中我們會使用一個近似方法替代後驗概率,通常使用MAP(maximum a posteriori)估計θ\theta

θ^MAP=arg  maxθ  i=1mp(y(i)x(i),θ)p(θ)\hat{\theta}_{MAP}=arg\;\mathop {\max }\limits_{\theta}\;\prod_{i=1}^{m}p(y^{(i)}|x^{(i)},\theta)p(\theta)

預測時:
h(θ^)=θ^MAPTxh(\hat{\theta})=\hat{\theta}_{MAP}^{T}x

上面式子中前半段實際和極大似然是一致的,後半段多乘以了p(θ)p(\theta),通常會選θ\theta的先驗分佈爲θN(0,τ2I)\theta\sim N(0,\tau^{2}I),這樣估計出來的θ\theta通常會比較小,這就意味着n+1n+1維上有很多參數接近0,那麼就算是多項式,即使nmn\gg m也可以儘量的避免過擬合。

極大似然嘗試最小化miny(i)θTx(i)2min\sum||y^{(i)}-\theta^{T}x^{(i)}||^{2},我們知道如果數據點較少,用極大似然估計的化很有可能會出現過擬合的情況,而使用貝葉斯由於大多數參數接近於0,擬合出的曲線就無較大波動。使用先驗概率就相當於miny(i)θTx(i)2+λθ2min\sum||y^{(i)}-\theta^{T}x^{(i)}||^{2}+\lambda||\theta||^{2},式子後面的θ2||\theta||^{2}起懲罰作用,這樣會使得擬合的曲線更爲平滑,即使θ\theta維度很高。


Online Learning

前面提及的基本都是批量學習,即給予一批(batch)數據,然後我們根據這批數據學習出一個模型來,然後通過這個模型根據xx去預測yy

但是在線學習不同與批量學習,在線學習的數據是不斷過來的,模型需要不斷的學習,比如又一個在線學習的分類學習算法,最開始給一個x(1)x^{(1)}然後預測y(1)y^{(1)}是1還是0,你預測出y^(1)\hat y^{(1)}後,告訴你真正的y(1)y^{(1)},如果y^(1)y(1)\hat y^{(1)}\neq y^{(1)},需要更新模型。,給予x()2x^{()2}預測y(2)y^{(2)},預測出的值爲y^(2)\hat y^{(2)},如果y^(2)y(2)\hat y^{(2)}\neq y^{(2)},需要更新模型。給予x(3)x^{(3)}…,以此類推。不斷預測不斷學習的過程。

現在學習總的在線誤差計算方式爲i=1m1{y^(2)y(2)}\sum_{i=1}^{m} 1\{\hat y^{(2)}\neq y^{(2)}\}

例如前面學習的感知器學習算法就是一種在線學習。

其初始化θ=0\theta=\vec{0}
其參數的更新策略是θ(k+1)=θ(k)+α(y(i)hθ(x(i)))x(i)\theta^{(k+1)}=\theta^{(k)}+\alpha(y^{(i)}-h_{\theta}(x^{(i)}))x^{(i)}

實際上可以通過數學證明,感知器算法的錯誤率實際上是有上界的,而且上界和具體的學習樣本數和特徵維度無關。

詳細證明請參見cs229-notes6

The perceptron and large margin classifiers


應用機器學習算法的建議

  1. 算法模型bug診斷
  2. 錯誤分析和消蝕(ablative)分析
  3. 過早優化

如果有一個反垃圾的算法,測試誤差高達20%,這顯然是不可接受的,那麼如何去分析優化這個問題,那些方向優化纔是正確的呢?

  • 找到更多的訓練數據
  • 使用更少的特徵
  • 用更多的特徵
  • 改變郵件提取的特徵
  • 運行更多輪的梯度下降
  • 使用牛頓方法
  • 使用SVM方法

上面有很多方法可選,但是到底要使用那個方法,首先需要分清問題的原因處在何處,而不是着急去嘗試。否則可能會浪費更多的時間。

算法測試誤差高首先分清是高方差導致還是高偏差導致。

高方差
上圖表現的是算法存在高方差,訓練誤差和測試誤差隨着樣本變化的情況。可以看到後期隨着樣本數目的增多,測試誤差依然下降,測試誤差和訓練誤差差距較大。那麼可以通過增加樣本數,減少訓練誤差和測試誤差的差距。之所以隨着訓練樣本的增多,訓練誤差會增加,是因爲樣本越多也就越難以擬合。
高偏差
上圖表現的是算法存在高偏差,訓練誤差和測試誤差隨着樣本變化的情況。可以看到後期隨着樣本數目的增多,測試誤差基本不再下降,且訓練誤差過大,訓練誤差和測試誤差差距較小。就算增加樣本數目也不可能使得訓練誤差下降。(高偏差類似於用一個以此方程去擬合一個二次方程的數據)

通過上面的論述可知,更多的樣本和更小的特徵可以修復高方差問題。而更多的特徵和改變特徵可以修復高偏差問題。


如果說你的學習算法分爲很多步,那麼可以應用錯誤分析和消蝕分析的方法。

錯誤分析主要是假設當前步驟做的不夠好,替換一個更好的解決方案,觀察其是否對準確率有較大提升,進而確定我們重點優化的方向。

消蝕分析就是抽出某部分,觀察其對準確率的影響,同樣可以觀察到某部分對整個算法的重要程度。


一般是快速作出你的算法來,然後再診斷你算法準確率不佳的原因,而不是一開始就小心翼翼的設計特徵的選取等細枝末節。有時候算法不佳問題根本不是出在你認爲的地方,算法構建出來後通過診斷分析其原因漸漸提升其準確率,纔是更爲正確應用機器學習算法的方式。避免過早的優化浪費時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章