對減少ML和DL模型訓練所需的計算時間和工時的技術的簡單而全面的解析。
概述:
現在,隨著行業開始接受「人工智慧」作為預測公司成功的重要組成部分,機器學習和深度學習技術正在進入公司的職位清單。但是通常可以看到,公司中的實際決策者(做主的人:CxO)對這些技術可以做什麼以及如何使他們的公司受益的觀念非常誤導。根據不完全了解ML真相的人們的看法,ML經常被視為具有解決所有工業問題的潛力的技術。下圖使ML的當前狀態非常清楚。
這不是諷刺,而是對ML的相當準確的理解。提供一組先驅事件時,它是計算機預測事件的非硬編碼功能。我將嘗試使該博客儘可能地簡化,但在這裡我想包括一個事實,即ML本質上是在給定多個此類方程式的情況下預測x和y之間的函數關係F的動作。
Y=F(X)
但是很多時候,可以看到,即使在訓練模型並達到可接受的訓練精度之後,當將模型用於測試用例時,它也會嚴重失敗。
這是由於過度擬合或使函數過於逼近訓練數據的現象而發生的。這導致了模型,而不是理解如何解決問題的通用思想,而死了訓練數據。下圖很清楚。
真正的函數是一個正弦曲線(綠色),我們正在嘗試根據給定的數據對其進行預測。直到第三個數字,我們看到模型學習得很好。即使不滿足所有數據點,也幾乎是函數的完美近似。但是隨著培訓的繼續,我們看到函數本身可以適應所有數據點,並且形式與期望的完全不同。這太合身了。訓練損失為零但測試損失增加的地方
了解偏差-方差折衷和正則化的需求:
偏差是數學上函數的期望值和實際值之間的差。我們不會研究偏見的基本統計信息,但我會負責任地給您留下一個令人恐懼的方程式:
為了明確起見,簡單的線性模型的偏差較高,而複雜的多維模型的偏差較低。這是因為複雜的模型更適合擬合所有訓練數據。
方差是訓練數據和測試數據之間ML模型的預測準確性的變化。由於方差引起的誤差是一個訓練集上的預測與所有訓練集上的期望值相差的量。換句話說,根據模型,不同預測的值彼此相距多遠。隨之而來的另一個方程式是嚇跑你們,夥計們。
簡單模型的方差低,而複雜模型的方差高。
下圖可以用來清晰地建立「偏差」和「方差」的概念。圖的左端是具有高偏差的區域,因為訓練和測試誤差都很高。這是欠擬合區域或模型學習不足的區域。
模型的右端是高方差區域,訓練誤差低,而測試誤差高。這是過度擬合的區域,在該區域中,即使模型已達到很高的訓練精度,而且看起來模型接近完美,但在測試數據上的表現卻很差。這純粹是浪費計算能力和工程師的時間。
即使不是最低可能值,偏差和方差都較低的中間區域是模型的最佳可能區域。實現這種狀態的模型訓練的行為稱為「 偏差-偏差權衡」。
有多種方法可以實現偏差偏差權衡。這些方法或技術稱為正則化技術。
一些常見的是:
L2正則化提前停止數據集擴充合奏方法退出批量歸一化L2正則化:
為了使事情儘可能簡單,我將L2正則化定義為「一種不讓模型將訓練誤差降至零的技巧」。如果事情就這麼簡單……
在訓練模型期間,我們會不斷更新各種變量(權重和偏差; w和b),這些變量試圖預測我們的原始功能。此更新基於「梯度下降」(我們不再討論)等「更新規則」進行。此更新規則取決於「損失函數」,後者是這些變量的函數。如果事情變得複雜,請忍受。我們的目標是最小化這種「損失函數」。這很直觀,不是嗎?在任何有利可圖的工業形勢下,您都在努力減少損失。簡單嗎?
因此,我們將訓練過程中的損失函數最小化。L2技術的特殊之處在於,我們沒有最小化訓練損失,而是最小化了另一種形式。
我們上方方程式中的第一項是「損失項」,即衡量模型擬合數據的程度的項。最後一個術語是數學人員的「權重的高斯分布可能性的對數」。這測量了模型的複雜性。對於我們來說,外行是所有要素權重(w)的平方和。負責任的,我再次在這裡留下您:
該模型的複雜性通過L2技術進行了量化。在這種情況下,變換幾乎不會影響接近零的特徵權重,但是異常值會產生巨大的影響。上述項的值越大,我們看到的偏差就越大,方差減小。從上圖可以明顯看出,在訓練結束時,偏差非常小,方差很大。因此,如果我們要增加偏差並減小方差,那麼我們實際上將到達圖的「良好模型」區域中的某個位置。所以現在,我們有了一個很好的模型!好極了!
提前停止:
到目前為止,這是最簡單的正則化技術(所有這些都是,但是您不會相信我的,會吧)。此過程涉及以最小損失值記錄變量(w&b)的值。在訓練過程中,我們記錄了w&b的值,在該值下,我們獲得了最小的驗證誤差。我們停止訓練,當我們看到驗證錯誤再次上升。這是一個非常有用的過程,但不利的是,在訓練非常深的神經網絡或非常複雜的模型期間,這會在寫入和重寫最小值時利用大量處理能力。
數據集擴充:
只有當我們有很多數據需要訓練時,才能將模型訓練到良好的預測狀態。換句話說,如果數據太少,很容易將訓練誤差驅動為零。讓我們以訓練神經網絡進行圖像分類為例。假設我們有1000張圖像來訓練模型。如果我們說培訓3000張圖像會更好嗎?在不獲取額外數據的情況下,我們可以輕鬆地「擴大」當前圖像並創建「新」圖像。這些對於我們來說實際上並不是新的,但是對於模型而言,它們卻是新的。
那麼什麼是增強?它是通過在保留原始標籤的同時引入某些差異來從現有數據中人為生成新數據的行為。這些差異取決於我們處理的數據類型。對於音頻,加快採樣速度或引入一些背景噪聲是一種增強技術。這不會更改標籤值。對於文本,我們可以用單詞的同義詞替換單詞,而不更改其傳達的信息。對於圖像,我們可以更改視角,縮放,照明和其他更改圖像但保留其標籤的技術。這是一些可愛的技巧,可以消除您閱讀此博客的煩惱並使圖像增強清晰可見。
因此,當我們現在有更多數據可用於輸入模型時,這將使其更難以記住整個事物,因此,訓練誤差不會變為零。Kinda喜歡您的歷史記錄測試嗎?
合奏方法:
集成方法是將幾種機器學習技術組合到一個預測模型中的元算法,以減少方差,偏差或改善預測。
上一段是Google對Ensemble Methods的定義,我將盡力為您分解。在這項技術中,我們採用多種模型架構來預測輸出,無論是分類還是回歸。假設模型A,B和C被賦予對狗進行分類的任務:模型A說它是貓,而模型B和C說它是狗。因此,如果我們相信大多數人所說的話,我們將得出正確的輸出,但是如果我們信任第一個模型的輸出,那我們會犯錯。與回歸或價值預測相似。給定3個模型,我們採用預測的加權平均值來得出最終輸出。這減少了出錯的機會並提高了準確性。
有趣的是,我們不需要在3個模型上花費資源。我們可以使用不同批次的數據對同一模型進行3次訓練。這也將達到目的。但是你知道了,不是嗎?
退出:
輟學也歸類為合奏方法的類別。但是我很開心,認為這是相反的。在集成方法中,您「徵詢」其他模型的意見以得出結論,但在這裡,它基本上是在使其他貢獻者沉默。讓我說清楚。
這是一個非常簡單的神經網絡,其目的是成為對/錯分類器。查看輸出層(綠色)。它有2個Blob,一個Blob給出輸出為True的概率,另一個為False。這兩個值的總和:您猜對了:1!你不聰明嗎 XD。
這裡的想法是讓您理解這些「斑點」被稱為節點。這些節點中的每一個節點內部都有大量複雜的計算。還記得我在L2正則化中談論的內容嗎?這一切都發生在這裡。因此,這些節點是輸出的實際貢獻者。
降涉及隨機關閉某些節點。這改變了模型的架構以及信息流經節點的方式。這樣做使模型成為更可靠的預測器。該模型必須在關閉某些貢獻器的情況下預測相同的輸出。這就像是說您需要在沒有頂級朋友在場的情況下完成測驗。
結論:
這樣就總結了我有關正則化技術的博客。我故意沒有為您提供有關批標準化的信息,因為這需要我為您提供訓練神經網絡的整個過程,而這與本博客的主要思想背道而馳:保持簡單。