Machine-Learning

這有可能提煉堆疊集成模型的知識嗎?

  • September 5, 2017

Hinton 有一篇著名的論文“在神經網絡中提取知識”,關於訓練一個小的 NN 來表示一個大的深度 NN。

是否可以對堆疊的 Ensemble 模型做同樣的事情?例如,如果我有一個三層堆疊模型。第一層包含 XGBoost、隨機森林、glmnet、SVM Radial Kernel 和 KNN 的組合;第二層包含 XGBoost 和 glmnet;第三層包含一個隨機森林模型。

是否可以用更小的模型來表示這個模型?

事實上, Hinton 等人 (2014)在他們的論文中,作為靈感參考了Caruana 等人 (2006)的論文,他描述了從一組模型中提取知識。此外,蒸餾是一種非常基本且通用的方法,可以應用於任何模型。關鍵是你有嘈雜的數據並在這些數據上訓練一個大模型,這個模型學習數據的某種近似表示,比原始數據更平滑。這種表示應該比數據噪聲小,因此應該更容易從中學習,然後從噪聲數據中學習。

後來,對蒸餾為什麼起作用的解釋是,我們經常觀察到的是,像深度神經網絡這樣的大型模型,在它們擁有的大量參數中,只有少數“完成了大部分工作”。對大型深度神經網絡為何起作用的一種解釋是,具有大量參數的模型具有非常大的搜索空間,可以在其中找到導致有用功能的組合。如果是這種情況,那麼我們不需要復雜的模型,只要我們能提取其中的一小部分,學習到問題的最重要特徵。這可能不僅適用於神經網絡,也適用於其他現代機器學習算法。

從實踐的角度來看,正如 Hinton 等人所注意到的,從更平滑的知識表示中學習更容易,因此蒸餾應該更適用於預測概率或 logits,然後是硬分類。此外,Hinton 等人提出的是通過在 softmax 函數中包含溫度參數來進一步平滑模型的輸出。這可能或多或少有用,具體取決於模型返回的概率的校準程度。如果您的模型返回的值在高概率和低概率上非常聚集,那麼這些值不會比硬分類更具區分性。另一方面,“平滑”輸出可以更好地保留模型關於數據可變性的知識。

最後,這個想法很簡單,所以你可以試一試,看看小“學生”模型取得的結果是否接近大模型。小模型的重點是比大模型更輕,所以訓練起來也應該更快,這使得實驗更容易。提醒一下,在查看結果時,請記住不僅要查看一般性能指標,還要查看尾部,即小型與大型模型如何處理非典型案例。更簡單的模型總是有可能學會正確分類“平均”情況,但在邊緣情況下表現不佳,因此您需要仔細檢查(這並不容易)。

引用自:https://stats.stackexchange.com/questions/301568

comments powered by Disqus