自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

小心訓練模型,數(shù)據(jù)少也可以玩轉(zhuǎn)深度學習

開發(fā) 開發(fā)工具
最近,Jeff Leek發(fā)表了一篇文章,認為只有獲得了谷歌、Facebook 這樣規(guī)模的數(shù)據(jù)才有資格做深度學習。對于這點 Andrew L. Beam(本文作者)闡述了自己的觀點,機器之心對此進行了編譯。

最近,Jeff Leek 在 Simply Stats 上發(fā)表了一篇題為「如果你的數(shù)據(jù)量不夠大就不要使用深度學習」(Don't use deep learning your data isn't that big)的文章(鏈接見文末),認為只有獲得了谷歌、Facebook 這樣規(guī)模的數(shù)據(jù)才有資格做深度學習。對于這點 Andrew L. Beam(本文作者)并不反對,他認為這使我們清楚地意識到深度學習并不是一種***的靈藥;但是,雖然 Beam 同意其核心觀點,但是其還有很多不明確或不清晰的地方,并且 Beam 認為只要小心地訓練模型,就能在小數(shù)據(jù)設置中使用深度學習。機器之心對該文進行了編譯,原文鏈接請見文末。

Jeff Leek 采用兩種方法基于 MNIST 數(shù)據(jù)集對手寫字體進行分類。他對比了五層神經(jīng)網(wǎng)絡(激活函數(shù)使用的是 hyperbolic tangent)的系統(tǒng)和 Leekasso,Leekasso 僅僅使用了帶最小邊際 p-value 的 10 塊像素。他驚訝地表明,在使用少量樣本時,Leekasso 要比神經(jīng)網(wǎng)絡性能更加出色。

對比了五層神經(jīng)網(wǎng)絡(激活函數(shù)使用的是 hyperbolic tangent)的系統(tǒng)和 Leekasso

難道如果你的樣本量小于 100,就因為模型會過擬合并且會得出較差的性能而不能使用深度學習?可能情況就是如此,深度學習模型十分復雜,并且有許多訓練的技巧,我總感覺缺乏模型收斂性/復雜度訓練也許才是性能較差的原因,而不是過擬合。

深度學習 VS. Leekasso Redux

首先***件事就是建立一個使用該數(shù)據(jù)集的深度學習模型,也就是現(xiàn)代版的多層感知機(MLP)和卷積神經(jīng)網(wǎng)絡(CNN)。如果 Leek 的文章是正確的話,那么當只有少量樣本時,這些模型應該會產(chǎn)生嚴重的過擬合。

我們構(gòu)建了一個激活函數(shù)為 RELU 的簡單 MLP 和一個像 VGG 那樣的卷積模型,然后我們再比較它們和 Leekasso 性能的差異。

所有的代碼都可下載:https://github.com/beamandrew/deep_learning_works/blob/master/mnist.py

多層感知機模型是非常標準的:

多層感知機模型是非常標準的

CNN 模型也和以前的十分相似:

CNN 模型也和以前的十分相似

作為參考,MLP 大約有 12 萬個參數(shù),而 CNN 大約有 20 萬個參數(shù)。根據(jù)原文的假設,當我們有這么多的參數(shù)和少量樣本時,模型好像真的會出錯。

我們盡可能地靠近原始分析,我們使用了 5 層交叉驗證(5-fold cross validation),但使用了標準 MNIST 測試集進行評估(大約有 2000 張測試樣本)。我們將測試集分為兩部分,上半部分用于評估訓練過程的收斂,而下半部分用于測量樣本預測的準確度。我們甚至沒有調(diào)整這些模型,對于大多數(shù)超參數(shù),僅僅只是使用合理的默認值。

我們盡可能地重新構(gòu)建了原文中 Leekasso 和 MLP 的 Python 版本。代碼可以在此處下載:

https://github.com/beamandrew/deep_learning_works/blob/master/mnist.py

以下是每個模型的樣本精度:

每個模型的樣本精度

這兩個模型的精度和原來的分析有很大的不同,原始分析中對小樣本使用 MLP 仍然有很差的效果,但我們的神經(jīng)網(wǎng)絡在各種樣本大小的情況下都可以達到非常***的精度。

為什么會這樣?

眾所周知,深度學習模型的訓練往往對細節(jié)要求極高,而知道如何「調(diào)參」是一件非常重要的技能。許多超參數(shù)的調(diào)整是非常具體的問題(特別是關于 SGD 的超參數(shù)),而錯誤地調(diào)參會導致整個模型的性能大幅度下降。如果你在構(gòu)建深度學習模型,那么就一定要記?。耗P偷募毠?jié)是十分重要的,你需要當心任何看起來像深度學習那樣的黑箱模型。

下面是我對原文模型出現(xiàn)問題的猜測:

  • 激活函數(shù)是十分重要的,而 tanh 神經(jīng)網(wǎng)絡又難以訓練。這也就是為什么激活函數(shù)已經(jīng)大量轉(zhuǎn)而使用類似「RELU」這樣的函數(shù)。
  • 確保隨機梯度下降是收斂的。在原始比較中,模型只訓練了 20 個 epoch,這可能是不夠的。因為當 n=10 個樣本時,20 個 epochs 僅僅只有 20∗10=200 次的梯度迭代更新。而遍歷全部的 MNIST 數(shù)據(jù)集大概相當于 6 萬次梯度更新,并且更常見的是遍歷數(shù)百到數(shù)千次(大約百萬次梯度更新)。如果我們僅僅執(zhí)行 200 次梯度更新,那么我們需要比較大的學習率,否則模型就不會收斂。h2o.deeplearning() 的默認學習率是 0.005,這對于少量的更新次數(shù)來說太小了。而我們使用的模型需要訓練 200 個 epoch,并且在前 50 次 epoch 中,我們能看到樣本精度有很大的一個提高。因此我猜測模型不收斂可以解釋兩者樣本精度的巨大差別。
  • 經(jīng)常檢查超參數(shù)的默認值。Keras 之所以這么優(yōu)秀,是因為其默認參數(shù)值通常反映了當前的***訓練,但同時我們也需要確保選擇的參數(shù)符合我們的問題。
  • 不同的框架可能得出很不一樣的結(jié)果。我嘗試使用原 R 代碼去觀察能不能得到相似的結(jié)果。然而,我并不能使用 h2o.deeplearning() 函數(shù)得出一個優(yōu)異的結(jié)果。我猜測可能是和其使用的優(yōu)化過程有關,其好像使用的是彈性均值 SGD 以計算多個結(jié)點而加速訓練。我不知道當你僅有少量樣本數(shù)據(jù)時會不會出現(xiàn)故障,但我認為可能性是很大的。

幸好,RStudio 那些人太好了,他們剛剛發(fā)布了 Keras 的 R 接口:https://rstudio.github.io/keras/,這樣我就可以完全用 R 語言重建我的 Python 代碼了。我們之前使用 MLP 用 R 實現(xiàn)了就是這樣:

我將這個放進了 Jeff 的 R 代碼中,并重新生成了原來的圖表。我對 Leekasso 進行了一點修改。原來的代碼使用了 lm()(即線性回歸),我覺得很奇怪,所以我切換成了 glm()(即 logistic 回歸)。新的圖表如下所示:

深度學習真是厲害了!一個類似的現(xiàn)象可能能夠解釋 Leekasso 的 Python 和 R 版本之間的不同。Python 版本的 logistic 回歸使用了 liblinear 作為其解算器,我認為這比 R 默認的解算器更加可靠一點。這可能會有影響,因為 Leekasso 選擇的變量是高度共線性的(collinear)。

這個問題太簡單了,以致于不能說明什么有意義的東西。我重新運行了 Leekasso,但僅使用了***的預測器,其結(jié)果幾乎完全等同于全 Leekasso。實際上,我確定我可以做出一個不使用數(shù)據(jù)的且具有高準確度的分類器。只需要取其中心像素,如果是黑色,則預測 1,否則就預測 0,正如 David Robinson 指出的那樣:

David 還指出,大多數(shù)數(shù)字對(pairs of numbers)都可以由單個像素進行分類。所以,這個問題很可能不能給我們帶來任何關于「真實」小數(shù)據(jù)場景的見解,我們應當對其結(jié)論保持適當?shù)膽岩伞?/p>

關于深度學習為什么有效的誤解

最終,我想要重新回到 Jeff 在文中所提出的觀點,尤其是這個聲明:

問題在于:實際上僅有少數(shù)幾個企業(yè)有足夠數(shù)據(jù)去做深度學習,[…] 但是我經(jīng)常思考的是,在更簡單的模型上使用深度學習的主要優(yōu)勢是如果你有大量數(shù)據(jù)就可以擬合大量的參數(shù)。

這篇文章,尤其是***一部分,在我看來并不完整。很多人似乎把深度學習看成一個巨大的黑箱,有大量可以學習任何函數(shù)的參數(shù),只要你有足夠的數(shù)據(jù)。神經(jīng)網(wǎng)絡當然是極其靈活的,這種靈活性正是其成功原因的一部分,但不是全部,不是嗎?

畢竟,這種超級靈活的模型在機器學習和統(tǒng)計學中有著 70 多年的發(fā)展歷史。我并不認為神經(jīng)網(wǎng)絡是先驗(priori)的,我也不認為比同等復雜度的其他算法更靈活。

下面是我對其成功所作的原因總結(jié):

  • 在偏差/方差折衷中一切都是一個練習。更明白地講,我認為 Jeff 真正在做的辯駁是關于模型復雜度和偏差/方差折衷。如果你沒有很多數(shù)據(jù),很可能訓練一個簡單模型(高偏差/低方差)要比復雜模型(低偏差/高方差)效果更好。客觀來講,在大多數(shù)情況下這是一個好建議,然而...
  • 神經(jīng)網(wǎng)絡有很多技術來防范過擬合。神經(jīng)網(wǎng)絡有很多參數(shù),按照 Jeff 的觀點如果我們沒有足夠的數(shù)據(jù)去可靠地評估這些參數(shù)值,將會導致高方差。我們清楚地意識到了這個問題,并且開發(fā)了很多降低方差的技術。比如 dropout 結(jié)合隨機梯度下降導致了一個像 bagging 一樣糟糕的處理,但是這是發(fā)生在網(wǎng)絡參數(shù)上,而不是輸入變量。方差降低技術(比如 dropout)以其他模型難以復制的方式被加進了訓練程序。這使得你可以真正訓練大模型,即使沒有太多數(shù)據(jù)。
  • 深度學習允許你輕易地把問題的具體約束直接整合進模型以降低方差。這是我想說明的最重要的一點,也是我們以前經(jīng)常忽視的一點。由于其模塊化,神經(jīng)網(wǎng)絡使你可以真正整合,極大降低模型方差的強約束(先驗)。***的一個實例是卷積神經(jīng)網(wǎng)絡。在 CNN 中,我們實際上把圖像的屬性編碼進模型本身。例如,當我們指定一個大小為 3x3 的過濾器時,實際上是在直接告訴網(wǎng)絡本地連接的像素的小集群將包含有用的信息。此外,我們還可以把圖像的平移和旋轉(zhuǎn)不變性直接編碼進模型。所有這些都將模型偏差至圖像屬性,以極大地降低方差,提升預測性能。
  • 你并不需要擁有谷歌量級的數(shù)據(jù)。以上所述意味著即使人均 100 到 1000 個樣本也能從深度學習中受益。通過所有這些技術,我們可以改善方差問題,而且依然可以從其靈活性中受益。你甚至可以通過遷移學習來創(chuàng)建其他工作。

總結(jié)一下,我認為上述原因很好地解釋了為什么深度學習在實踐中奏效,打破了深度學習需要大量參數(shù)和數(shù)據(jù)的假設。***,本文并不是想說 Jeff 的觀點錯了,而是旨在提供一個不同的新視角,為讀者帶來啟發(fā)。

原文:http://beamandrew.github.io/deeplearning/2017/06/04/deep_learning_works.html

【本文是51CTO專欄機構(gòu)“機器之心”的原創(chuàng)譯文,微信公眾號“機器之心( id: almosthuman2014)”】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2022-02-11 10:46:25

人工智能機器學習深度學習

2020-11-02 14:38:56

Java 深度學習模型

2017-02-08 17:29:17

遷移大數(shù)據(jù)深度學習

2023-01-09 08:00:00

遷移學習機器學習數(shù)據(jù)集

2017-07-27 14:50:59

深度學習遷移學習花式調(diào)優(yōu)

2022-05-10 10:19:04

AI深度學習模型

2023-07-24 15:20:05

機器學習集成學習

2023-03-13 14:41:22

機器學習算法

2020-10-13 14:42:42

深度學習Windows人工智能

2019-08-05 14:10:26

WindowLinuxRedis

2023-02-23 07:46:48

學習模型數(shù)據(jù)倉庫

2023-07-11 09:51:04

訓練模型

2020-08-10 15:05:02

機器學習人工智能計算機

2024-08-27 00:00:01

AI應用框架

2020-07-02 14:35:44

模型人工智能方案

2017-06-09 13:36:33

人工智能深度學習

2017-10-18 09:48:13

深度學習TensorFlow入門篇

2021-01-27 10:46:07

Pytorch深度學習模型訓練

2018-02-07 14:19:16

深度學習機器學習模型

2025-01-14 13:20:56

點贊
收藏

51CTO技術棧公眾號