0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【連載】深度學(xué)習(xí)筆記4:深度神經(jīng)網(wǎng)絡(luò)的正則化

人工智能實(shí)訓(xùn)營(yíng) ? 2018-08-14 11:58 ? 次閱讀

今天要寫的是關(guān)于機(jī)器學(xué)習(xí)深度學(xué)習(xí)中的一項(xiàng)關(guān)鍵技術(shù):正則化。相信在機(jī)器學(xué)習(xí)領(lǐng)域摸爬滾打多年的你一定知道正則化是防止模型過(guò)擬合的核心技術(shù)之一,關(guān)于欠擬合和過(guò)擬合的問(wèn)題

總的來(lái)說(shuō),監(jiān)督機(jī)器學(xué)習(xí)的核心原理莫過(guò)于如下公式:

640?wx_fmt=png

該公式可謂是機(jī)器學(xué)習(xí)中最核心最關(guān)鍵最能概述監(jiān)督學(xué)習(xí)的核心思想的公式了:所有的有監(jiān)督機(jī)器學(xué)習(xí),無(wú)非就是正則化參數(shù)的同時(shí)最小化經(jīng)驗(yàn)誤差函數(shù)。最小化經(jīng)驗(yàn)誤差是為了極大程度的擬合訓(xùn)練數(shù)據(jù),正則化參數(shù)是為了防止過(guò)分的擬合訓(xùn)練數(shù)據(jù)。你看,多么簡(jiǎn)約數(shù)學(xué)哲學(xué)。正如之前所說(shuō),監(jiān)督機(jī)器學(xué)習(xí)是為了讓我們建立的模型能夠發(fā)現(xiàn)數(shù)據(jù)中普遍的一般的規(guī)律,這個(gè)普遍的一般的規(guī)律無(wú)論對(duì)于訓(xùn)練集還是未知的測(cè)試集,都具有較好的擬合性能。通俗點(diǎn)舉例就是,考試能力很強(qiáng),應(yīng)用能力很差,或者是模擬考很強(qiáng),高考卻一般。

先不扯遠(yuǎn)了,繼續(xù)回到公式。第一項(xiàng)經(jīng)驗(yàn)誤差函數(shù)在機(jī)器學(xué)習(xí)中無(wú)疑地位重要,但它不是筆者今天要講的,今天要講的是公式的第二項(xiàng):正則化項(xiàng)。第二項(xiàng)中 λ 為正則化系數(shù),通常是大于 0 的,是一種調(diào)整經(jīng)驗(yàn)誤差項(xiàng)和正則化項(xiàng)之間關(guān)系的系數(shù)。λ = 0 時(shí)相當(dāng)于該公式?jīng)]有正則化項(xiàng),模型全力討好第一項(xiàng),將經(jīng)驗(yàn)誤差進(jìn)行最小化,往往這也是最容易發(fā)生過(guò)擬合的時(shí)候。隨著 λ 逐漸增大,正則化項(xiàng)在模型選擇中的話語(yǔ)權(quán)越來(lái)越高,對(duì)模型的復(fù)雜性的懲罰也越來(lái)越厲害。所以,在實(shí)際的訓(xùn)練過(guò)程中,λ 作為一種超參數(shù)很大程度上決定了模型生死。

L1 和 L2 范數(shù)

系數(shù) λ 說(shuō)完了,然后就是正則化項(xiàng),正則化項(xiàng)形式有很多,但常見(jiàn)的也就是 L1 和 L2 正則化。下面筆者就帶大家好好拾掇拾掇這些個(gè) L1 L2。

在說(shuō)常見(jiàn)的 L1 和 L2 之前,先來(lái)看一下 L0 正則化。L0 正則化也就是 L0 范數(shù),即矩陣中所有非 0 元素的個(gè)數(shù)。如何我們?cè)谡齽t化過(guò)程中選擇了 L0 范數(shù),那該如何理解這個(gè) L0 呢?其實(shí)非常簡(jiǎn)單,L0 范數(shù)就是希望要正則化的參數(shù)矩陣 W 大多數(shù)元素都為 0。如此簡(jiǎn)單粗暴,讓參數(shù)矩陣 W 大多數(shù)元素為 0 就是實(shí)現(xiàn)稀疏而已。說(shuō)到這里,權(quán)且打住,想必同樣在機(jī)器學(xué)習(xí)領(lǐng)域摸爬滾打的你一定想問(wèn),據(jù)我所知稀疏性不通常都是用 L1 來(lái)實(shí)現(xiàn)的嗎?這里個(gè)中緣由筆者不去細(xì)講了,簡(jiǎn)單說(shuō)結(jié)論:在機(jī)器學(xué)習(xí)領(lǐng)域,L0 和 L1 都可以實(shí)現(xiàn)矩陣的稀疏性,但在實(shí)踐中,L1 要比 L0 具備更好的泛化求解特性而廣受青睞。先說(shuō)了 L1,但還沒(méi)解釋 L1 范數(shù)是什么,L1 范數(shù)就是矩陣中各元素絕對(duì)值之和,正如前述所言,L1 范數(shù)通常用于實(shí)現(xiàn)參數(shù)矩陣的稀疏性。至于為啥要稀疏,稀疏有什么用,通常是為了特征選擇和易于解釋方面的考慮。

640?wx_fmt=png

再來(lái)看 L2 范數(shù)。相較于 L0 和 L1,其實(shí) L2 才是正則化中的天選之子。在各種防止過(guò)擬合和正則化處理過(guò)程中,L2 正則化可謂風(fēng)頭無(wú)二。L2 范數(shù)是指矩陣中各元素的平方和后的求根結(jié)果。采用 L2 范數(shù)進(jìn)行正則化的原理在于最小化參數(shù)矩陣的每個(gè)元素,使其無(wú)限接近于 0 但又不像 L1 那樣等于 0,也許你又會(huì)問(wèn)了,為什么參數(shù)矩陣中每個(gè)元素變得很小就能防止過(guò)擬合?這里我們就拿深度神經(jīng)網(wǎng)絡(luò)來(lái)舉例說(shuō)明吧。在 L2 正則化中,如何正則化系數(shù)變得比較大,參數(shù)矩陣 W 中的每個(gè)元素都在變小,線性計(jì)算的和 Z 也會(huì)變小,激活函數(shù)在此時(shí)相對(duì)呈線性狀態(tài),這樣就大大簡(jiǎn)化了深度神經(jīng)網(wǎng)絡(luò)的復(fù)雜性,因而可以防止過(guò)擬合。

640?wx_fmt=png

至于 L1 和 L2,江湖上還有一些混名,L1 就是江湖上著名的 lasso,L2 呢則是嶺回歸。二者都是對(duì)回歸損失函數(shù)加一個(gè)約束形式,lasso 加的是 L1 范數(shù),嶺回歸加的是 L2 范數(shù)。可以從幾何直觀上看看二者的區(qū)別。

640?wx_fmt=png
L1 和 L2 的下降速度

640?wx_fmt=jpeg

L1 和 L2 的模型空間

神經(jīng)網(wǎng)絡(luò)的正則化

說(shuō)了半天的范數(shù),下面我們就來(lái)看看在神經(jīng)網(wǎng)絡(luò)中如何進(jìn)行正則化操作防止過(guò)擬合。為了跟前面筆記保持一致,我們?cè)谏窠?jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程中繼續(xù)采用交叉熵?fù)p失函數(shù):

640?wx_fmt=png
加了正則化項(xiàng)之后,損失函數(shù)形式如上所示,損失函數(shù)變了,反向傳播的梯度計(jì)算也就變了,相應(yīng)的反向傳播也需要重新定義函數(shù)。

帶正則化項(xiàng)的損失函數(shù)的定義:

def compute_cost_with_regularization(A3, Y, parameters, lambd):  """
  Implement the cost function with L2 regularization. See formula (2) above.

  Arguments:
  A3 -- post-activation, output of forward propagation, of shape (output size, number of examples)
  Y -- "true" labels vector, of shape (output size, number of examples)
  parameters -- python dictionary containing parameters of the model

  Returns:
  cost - value of the regularized loss function (formula (2))
  """
  m = Y.shape[1]
  W1 = parameters["W1"]
  W2 = parameters["W2"]
  W3 = parameters["W3"]

  cross_entropy_cost = compute_cost(A3, Y) # This gives you the cross-entropy part of the cost


  L2_regularization_cost = 1/m * lambd/2 * (np.sum(np.square(W1))+np.sum(np.square(W2))+np.sum(np.square(W3)))

  cost = cross_entropy_cost + L2_regularization_cost  
  return cost

反向傳播的函數(shù)定義:

def backward_propagation_with_regularization(X, Y, cache, lambd):  """
  Implements the backward propagation of our baseline model to which we added an L2 regularization.

  Arguments:
  X -- input dataset, of shape (input size, number of examples)
  Y -- "true" labels vector, of shape (output size, number of examples)
  cache -- cache output from forward_propagation()
  lambd -- regularization hyperparameter, scalar

  Returns:
  gradients -- A dictionary with the gradients with respect to each parameter, activation and pre-activation variables
  """

  m = X.shape[1]
  (Z1, A1, W1, b1, Z2, A2, W2, b2, Z3, A3, W3, b3) = cache

  dZ3 = A3 - Y

  dW3 = 1./m * np.dot(dZ3, A2.T) + lambd/m * W3
  db3 = 1./m * np.sum(dZ3, axis=1, keepdims = True)

  dA2 = np.dot(W3.T, dZ3)
  dZ2 = np.multiply(dA2, np.int64(A2 > 0))

  dW2 = 1./m * np.dot(dZ2, A1.T) + lambd/m * W2
  db2 = 1./m * np.sum(dZ2, axis=1, keepdims = True)

  dA1 = np.dot(W2.T, dZ2)
  dZ1 = np.multiply(dA1, np.int64(A1 > 0))

  dW1 = 1./m * np.dot(dZ1, X.T) + lambd/m * W1
  db1 = 1./m * np.sum(dZ1, axis=1, keepdims = True)

  gradients = {"dZ3": dZ3, "dW3": dW3, "db3": db3,"dA2": dA2,         "dZ2": dZ2, "dW2": dW2, "db2": db2, "dA1": dA1, 
         "dZ1": dZ1, "dW1": dW1, "db1": db1}  
  return gradients

在實(shí)例中,加了正則化項(xiàng)和沒(méi)加正則化項(xiàng)的模型分類結(jié)果可如圖所見(jiàn):

未經(jīng)正則化處理的分類模型結(jié)果

加上正則化后的模型分類結(jié)果

效果顯而易見(jiàn),加了正則化之后,神經(jīng)網(wǎng)絡(luò)的過(guò)擬合情況得到極大的緩解。

本文來(lái)自《自興動(dòng)腦人工智能》項(xiàng)目部:凱文。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 人工智能
    +關(guān)注

    關(guān)注

    1791

    文章

    47314

    瀏覽量

    238653
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8420

    瀏覽量

    132687
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5503

    瀏覽量

    121207
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    詳解深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)的應(yīng)用

    在如今的網(wǎng)絡(luò)時(shí)代,錯(cuò)綜復(fù)雜的大數(shù)據(jù)和網(wǎng)絡(luò)環(huán)境,讓傳統(tǒng)信息處理理論、人工智能與人工神經(jīng)網(wǎng)絡(luò)都面臨巨大的挑戰(zhàn)。近些年,深度學(xué)習(xí)逐漸走進(jìn)人們的視線
    的頭像 發(fā)表于 01-11 10:51 ?2062次閱讀
    詳解<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>、<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>與卷積<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的應(yīng)用

    卷積神經(jīng)網(wǎng)絡(luò)深度卷積網(wǎng)絡(luò):實(shí)例探究及學(xué)習(xí)總結(jié)

    深度學(xué)習(xí)工程師-吳恩達(dá)》03卷積神經(jīng)網(wǎng)絡(luò)深度卷積網(wǎng)絡(luò):實(shí)例探究 學(xué)習(xí)總結(jié)
    發(fā)表于 05-22 17:15

    解析深度學(xué)習(xí):卷積神經(jīng)網(wǎng)絡(luò)原理與視覺(jué)實(shí)踐

    解析深度學(xué)習(xí):卷積神經(jīng)網(wǎng)絡(luò)原理與視覺(jué)實(shí)踐
    發(fā)表于 06-14 22:21

    改善深層神經(jīng)網(wǎng)絡(luò)--超參數(shù)優(yōu)化、batch正則和程序框架 學(xué)習(xí)總結(jié)

    深度學(xué)習(xí)工程師-吳恩達(dá)》02改善深層神經(jīng)網(wǎng)絡(luò)--超參數(shù)優(yōu)化、batch正則和程序框架 學(xué)習(xí)
    發(fā)表于 06-16 14:52

    深度神經(jīng)網(wǎng)絡(luò)是什么

    多層感知機(jī) 深度神經(jīng)網(wǎng)絡(luò)in collaboration with Hsu Chung Chuan, Lin Min Htoo, and Quah Jia Yong. 與許忠傳,林敏濤和華佳勇合作
    發(fā)表于 07-12 06:35

    神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)》講義

    神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)》講義
    發(fā)表于 07-20 08:58 ?0次下載

    深度神經(jīng)網(wǎng)絡(luò)的壓縮和正則剖析

    利用深度壓縮和DSD訓(xùn)練來(lái)提高預(yù)測(cè)精度。 深度神經(jīng)網(wǎng)絡(luò)已經(jīng)成為解決計(jì)算機(jī)視覺(jué)、語(yǔ)音識(shí)別和自然語(yǔ)言處理等機(jī)器學(xué)習(xí)任務(wù)的最先進(jìn)的技術(shù)。盡管如此,深度
    發(fā)表于 11-16 13:11 ?1828次閱讀
    <b class='flag-5'>深度</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的壓縮和<b class='flag-5'>正則</b><b class='flag-5'>化</b>剖析

    三種典型的神經(jīng)網(wǎng)絡(luò)以及深度學(xué)習(xí)中的正則方法應(yīng)用于無(wú)人駕駛

    在前幾十年,神經(jīng)網(wǎng)絡(luò)并沒(méi)有受到人們的重視,直到深度學(xué)習(xí)的出現(xiàn),人們利用深度學(xué)習(xí)解決了不少實(shí)際問(wèn)題(即一些落地性質(zhì)的商業(yè)應(yīng)用),
    的頭像 發(fā)表于 06-03 09:27 ?9647次閱讀

    連載深度學(xué)習(xí)筆記7:Tensorflow入門

    從前面的學(xué)習(xí)筆記中,和大家一起使用了 numpy 一步一步從感知機(jī)開始到兩層網(wǎng)絡(luò)以及最后實(shí)現(xiàn)了深度神經(jīng)網(wǎng)絡(luò)的算法搭建。而后我們又討論了改善
    的頭像 發(fā)表于 08-20 12:47 ?3270次閱讀

    快速了解神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)的教程資料免費(fèi)下載

    本文檔的詳細(xì)介紹的是快速了解神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)的教程資料免費(fèi)下載主要內(nèi)容包括了:機(jī)器學(xué)習(xí)概述,線性模型,前饋神經(jīng)網(wǎng)絡(luò),卷積
    發(fā)表于 02-11 08:00 ?33次下載
    快速了解<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>與<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>的教程資料免費(fèi)下載

    3小時(shí)學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)課件下載

    3小時(shí)學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)課件下載
    發(fā)表于 04-19 09:36 ?0次下載
    3小時(shí)<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>與<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>課件下載

    深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)和函數(shù)

    深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個(gè)子集,它使用神經(jīng)網(wǎng)絡(luò)來(lái)執(zhí)行學(xué)習(xí)和預(yù)測(cè)。深度
    的頭像 發(fā)表于 04-07 10:17 ?1660次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)深度神經(jīng)網(wǎng)絡(luò)的優(yōu)缺點(diǎn) 卷積神經(jīng)網(wǎng)絡(luò)深度神經(jīng)網(wǎng)絡(luò)的區(qū)別

    深度神經(jīng)網(wǎng)絡(luò)是一種基于神經(jīng)網(wǎng)絡(luò)的機(jī)器學(xué)習(xí)算法,其主要特點(diǎn)是由多層神經(jīng)元構(gòu)成,可以根據(jù)數(shù)據(jù)自動(dòng)調(diào)整神經(jīng)
    發(fā)表于 08-21 17:07 ?4155次閱讀

    深度學(xué)習(xí)與卷積神經(jīng)網(wǎng)絡(luò)的應(yīng)用

    隨著人工智能技術(shù)的飛速發(fā)展,深度學(xué)習(xí)和卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)作為其中的重要分支,已經(jīng)在多個(gè)領(lǐng)域取得了顯著的應(yīng)用成果。從圖像識(shí)別、語(yǔ)音識(shí)別
    的頭像 發(fā)表于 07-02 18:19 ?919次閱讀

    深度神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)方法

    結(jié)構(gòu)的構(gòu)建,還包括激活函數(shù)的選擇、優(yōu)化算法的應(yīng)用、正則技術(shù)的引入等多個(gè)方面。本文將從網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)、關(guān)鍵組件選擇、優(yōu)化與正則策略、以及未來(lái)
    的頭像 發(fā)表于 07-04 13:13 ?475次閱讀