人工智慧算法:訓練神經網絡中的批量歸一化(附代碼)

2020-12-05 人工智慧研究院

使用TensorFlow(Keras)實施

介紹

批處理規範化(BN)是許多機器學習從業人員遇到的技術。

而且,如果您還沒有這樣做的話,本文將解釋BN的基本直覺,包括其起源以及如何使用TensorFlow和Keras在神經網絡中實現它。

對於那些熟悉BN技術並且只想專注於實現的人,可以跳到下面的「代碼」部分。

定義

批處理規範化是一種技術,它通過引入一個附加層來減輕神經網絡中不穩定梯度的影響,該附加層對來自前一層的輸入執行操作。在通過縮放和移位操作對輸入值進行轉換之後,這些操作將對輸入值進行標準化和標準化。

第一步是導入工具和庫,這些工具和庫將用於實現或支持神經網絡的實現。所使用的工具如下:

TensorFlow:一個用於實施,培訓和部署機器學習模型的開源平臺。Keras:一個開放原始碼庫,用於實現可在CPU和GPU上運行的神經網絡體系結構。import tensorflow as tffrom tensorflow import keras

我們將使用的數據集是瑣碎的fashion-MNIST數據集。

fashion-MNIST數據集包含70,000件服裝圖像。更具體地說,它包括60,000個訓練示例和10,000個測試示例,它們都是尺寸為28 x 28的灰度圖像,分為十類。

數據集的準備工作包括通過將每個像素值除以255.0來歸一化訓練圖像和測試圖像。這會將像素值置於0到1的範圍內。

在此階段,還將創建數據集的驗證部分。在訓練期間利用該組數據集來評估網絡在各種迭代中的性能。

(train_images,train_labels),(test_images,test_labels)= keras.datasets.fashion_mnist.load_data()train_images = train_images / 255.0 test_images = test_images / 255.0validation_images = train_images [:5000] validation_labels = train_labels [:5000]

Keras提供了實現分類模型所需的工具。Keras提供了一種順序API,用於以連續的方式堆疊神經網絡的各個層。

以下是將要構成我們的神經網絡的各層信息。

展平:採用輸入形狀,並將輸入圖像數據展平為一維數組。緻密的:緻密層中嵌入了任意數量的單元/神經元。每個神經元都是一個感知器。感知器是一種人工神經網絡的基本組成部分,它是由發明弗蘭克布拉特於1958年感知器基於所述閾值邏輯單元上利用的操作。批標準化:批標準化層通過對輸入的輸入數據執行一系列操作來工作。這組操作涉及到進入BN層的輸入值的偏移量的標準化,歸一化,重新縮放和移位。激活層:這對神經網絡內的輸入執行指定的操作。該層在網絡內引入了非線性。本文實現的模型將利用激活函數:整流線性單元(ReLU)softmaxReLU對來自神經元的值施加的變換由公式y = max(0,x)表示。ReLU激活功能將神經元的任何負值鉗制為0,而正值保持不變。這種數學轉換的結果被用作當前層的激活,並用作下一層的輸入。# Placing batch normalization layer before the activation layersmodel = keras.models.Sequential([ keras.layers.Flatten(input_shape=[28,28]), keras.layers.Dense(300, use_bias=False), keras.layers.BatchNormalization(), keras.layers.Activation(keras.activations.relu), keras.layers.Dense(200, use_bias=False), keras.layers.BatchNormalization(), keras.layers.Activation(keras.activations.relu), keras.layers.Dense(100, use_bias=False), keras.layers.BatchNormalization(), keras.layers.Activation(keras.activations.relu), keras.layers.Dense(10, activation=keras.activations.softmax)])

讓我們看一下BN層的內部組件

僅僅訪問索引2的層將為第一個BN層中的變量及其內容提供信息,

model.layers[2].variables

在這裡,我將不涉及太多細節,但是請注意變量名「 gamma」和「 beta」,這些變量中包含的值負責重新激活和補償層中的激活。

for variable in model.layers[2].variables: print(variable.name)>> batch_normalization/gamma:0>> batch_normalization/beta:0>> batch_normalization/moving_mean:0>> batch_normalization/moving_variance:0

這條進入更詳細的內BN層問候的操作。

在密集層中,偏置分量設置為false。偏差的省略是由於激活標準化過程中由於平均減法而發生的常數值抵消的結果。

在下一個代碼段中,我們設置並指定優化算法來訓練實現的神經網絡,以及損失函數和超參數(例如學習率和曆元數)。

sgd = keras.optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)model.compile(loss="sparse_categorical_crossentropy", optimizer=sgd, metrics=["accuracy"])

現在,我們使用模型的順序API的fit方法訓練網絡,該工具提供了訓練已實現網絡的工具。

model.fit(train_images,train_labels,epochs = 60,validation_data =(validation_images,validation_labels))

使用之前預留的測試數據進行模型性能的評估。

利用評估結果,您可以在觀察測試數據集評估的準確性之後,決定微調網絡超參數或進入生產。

model.evaluate(test_images,test_labels)

在訓練階段,您可能會注意到,與沒有批處理規範化層的網絡訓練相比,每個紀元花費的時間更長。這是因為批處理歸一化為神經網絡增加了一層複雜性,以及模型在訓練期間學習所需的額外參數。

儘管每個紀元時間的增加與「批歸一化」減少了模型收斂到最優解所需的時間這一事實是平衡的。

本文實現的模型對於我們來說太淺了,無法注意到在神經網絡體系結構中利用批量歸一化的全部好處。通常,在更深的卷積神經網絡中可以找到批處理規範化。

上面實現的神經網絡在激活層之前具有批處理歸一化層。但是完全有可能在激活層之後添加BN層。# Placing batch normalization layer after the activation layersmodel = keras.models.Sequential([ keras.layers.Flatten(input_shape=[28,28]), keras.layers.Dense(300, use_bias=False), keras.layers.Activation(keras.activations.relu), keras.layers.BatchNormalization(), keras.layers.Dense(200, use_bias=False), keras.layers.Activation(keras.activations.relu), keras.layers.BatchNormalization(), keras.layers.Dense(100, use_bias=False), keras.layers.Activation(keras.activations.relu), keras.layers.BatchNormalization(), keras.layers.Dense(10, activation=keras.activations.softmax)])

研究人員已對批處理規範化技術進行了廣泛的研究。例如批量重新歸一化和自歸一化神經網絡結論

BN是神經網絡中的一種常用技術,因此了解該技術的工作方式以及其實現方式將是有用的知識,尤其是在分析大多數神經網絡體系結構時。

相關焦點

  • 神經網絡篇——從代碼出發理解BP神經網絡
    一提到反向傳播算法,我們就不自覺的想到隨機梯度下降、sigmoid激活函數和最讓人頭大的反向傳播法則的推導,即便是把反向傳播神經網絡的原理學了一遍,也還是一頭霧水,在這裡推薦一本小編認為把BP神經網絡講的最通透的教材《Python神經網絡編程》。
  • 批歸一化Batch Normalization的原理及算法
    Batch Gradient Descent使用多個梯度的均值來更新權重,用相對少的訓練次數遍歷完整個訓練集,也正是因為平均了多個樣本的梯度,許多樣本對神經網絡的貢獻就被其他樣本平均掉了,相當於在每個epoch中,訓練集的樣本數被縮小了。batch中每個樣本的差異性越大,這種弊端就越嚴重。
  • 訓練的神經網絡不工作?一文帶你跨過這37個坑
    本文由機器之心編輯,「機器之心」專注生產人工智慧專業性內容,適合開發者和從業者閱讀參考。點擊右上角即刻關注。近日,Slav Ivanov 在 Medium 上發表了一篇題為《37 Reasons why your Neural Network is not working》的文章,從四個方面(數據集、數據歸一化/增強、實現、訓練),對自己長久以來的神經網絡調試經驗做了 37 條總結,並穿插了不少出色的個人想法和思考,希望能幫助你跨過神經網絡訓練中的 37 個大坑。
  • 透徹分析批歸一化Batch Normalization強大作用
    在深度神經網絡訓練中,Batch Normalization有諸多非常強大的作用和效果:無論使用哪種激活功能或優化器,BN都可加快訓練過程並提高性能;解決梯度消失的問題;規範權重;優化網絡梯度流...等等。
  • 訓練神經網絡的五大算法
    訓練神經網絡的五大算法 Alberto Quesada 發表於 2017-11-16 15:30:54   神經網絡模型的每一類學習過程通常被歸納為一種訓練算法。
  • 超越何愷明等組歸一化 Group Normalization,港中文團隊提出自適配...
    雷鋒網 AI 科技評論:港中文最新論文研究表明目前的深度神經網絡即使在人工標註的標準資料庫中訓練(例如 ImageNet),性能也會出現劇烈波動。這種情況在使用少批量數據更新神經網絡的參數時更為嚴重。研究發現這是由於 BN(Batch Normalization)導致的。BN 是 Google 在 2015 年提出的歸一化方法。
  • 從梯度下降到擬牛頓法:詳解訓練神經網絡的五大學習算法
    選自 Neuraldesigner作者:Alberto Quesada機器之心編譯參與:蔣思源在神經網絡中,系統的學習過程一般是由訓練算法所主導。而現如今有許多不同的學習算法,它們每一個都有不同的特徵和表現。因此本文力圖描述清楚五大學習算法的基本概念及優缺點,給讀者們闡明最優化在神經網絡中的應用。
  • 【乾貨】用神經網絡識別歌曲流派(附代碼)
    使用的庫:Python庫librosa,用於從歌曲中提取特徵,並使用梅爾頻率倒譜係數( Mel-frequency cepstral coefficients ,MFCC)。MFCC數值模仿人類的聽覺,在語音識別和音樂類型檢測中有廣泛的應用。MFCC值將被直接輸入神經網絡。了解MFCC讓我們用兩個例子來說明MFCC。
  • 神經網絡算法原理_神經網絡算法的應用_神經網絡算法實例說明
    神經網絡算法原理   由於神經網絡算法的設計面太大,我們此處暫且只分析Microsoft神經網絡算法的原理,在Microsoft神經網絡算法中,我們可以簡化成下面這個圖片:   當把訓練集中的所有數據運行過一遍之後,則稱為一個訓練周期。訓練後得到神經網絡模型,包含了訓練集中相應值和受預測值影響變化的規律。   在每個神經元中的隱含層中都有著複雜的函數,並且這些都非線性函數,並且類似生物學神經網絡的基本傳輸特徵,這些函數稱之為:激活函數,即:輸入值發生細微的變化有時候會產生較大的輸出變化。
  • 神經網絡與人工智慧應用
    到2020年在智能終端、自動駕駛、智能安防、智能家居等重點領域實現神經網絡晶片的規模化商用。到2020年面向雲端訓練的開源開發平臺支持大規模分布式集群、多種硬體平臺、多種算法,面向終端執行的開源開發平臺具備輕量化、模塊化和可靠性等特徵。
  • AI從入門到放棄:BP神經網絡算法推導及代碼實現筆記
    我們的目標是:訓練出一個神經網絡模型,輸入一個點的坐標(射擊姿勢),它就告訴你這個點是什麼結果(是否命中)。我們的方法是:訓練一個能根據誤差不斷自我調整的模型,訓練模型的步驟是:正向傳播:把點的坐標數據輸入神經網絡,然後開始一層一層的傳播下去,直到輸出層輸出結果。
  • 深度| 機器的自我進化:走向自主編程的人工智慧(附提交ICLR 2017的...
    直到現在,機器學習的專家們仍傾向於訓練執行特定任務的人工智慧,例如面部識別、自動駕駛汽車、語音識別、甚至搜尋引擎。如果所有這些算法開始閱讀自己的代碼結構——不通過人類的協助、解釋或幹預——就像它們在識別人類語言和圖像一樣,又會什麼樣呢? 如果代碼開始分析自我——糾正錯誤並優化性能,而且速度大大超過人類——科學技術的發展速度將極大地提升。
  • 從零開始:教你如何訓練神經網絡
    在理解這些基礎後,本文詳細描述了動量法等當前十分流行的學習算法。此外,本系列將在後面介紹 Adam 和遺傳算法等其它重要的神經網絡訓練方法。 I.訓練 在開始訓練神經網絡的時候,要對權值進行隨機初始化。顯然,初始化的參數並不會得到很好的結果。在訓練的過程中,我們想以一個很糟糕的神經網絡開始,得到一個具有高準確率的網絡。此外,我們還希望在訓練結束的時候,損失函數的函數值變得特別小。提升網絡是有可能的,因為我們可以通過調節權值去改變函數。我們希望找到一個比初始化的模型性能好很多的函數。
  • 人工智慧神經網絡和生物大腦有什麼區別 神經網絡將如何發展
    人工與自然學習在人工智慧的整個歷史中,科學家一直將自然作為開發能夠表現出智能行為的技術的指南。自從該領域的歷史開始以來,符號人工智慧和人工神經網絡就構成了開發AI系統的兩種主要方法。但是正如Zador解釋的那樣,人工神經網絡中的學習與大腦中發生的事情有很大不同。他寫道:「在人工神經網絡中,學習是指從輸入數據中提取結構(統計規律性)並將該結構編碼為網絡參數的過程。」例如,當您開發卷積神經網絡時,您將從一塊空白板開始,這是一層由隨機權重連接的人工神經元的分層結構。當您在圖像及其相關標籤上訓練網絡時,它將逐漸調整其數百萬個參數,以便能夠將每個圖像放入其合法的存儲桶中。
  • 人工智慧之卷積神經網絡(CNN)
    前言:人工智慧機器學習有關算法內容,請參見公眾號「科技優化生活」之前相關文章。人工智慧之機器學習主要有三大類:1)分類;2)回歸;3)聚類。今天我們重點探討一下卷積神經網絡(CNN)算法。  CNN引入意義:  在全連接神經網絡中(下面左圖),每相鄰兩層之間的每個神經元之間都是有邊相連的。當輸入層的特徵維度變得很高時,這時全連接網絡需要訓練的參數就會增大很多,計算速度就會變得很慢。
  • 一文看懂各種神經網絡優化算法:從梯度下降到Adam方法
    比如說,權重(W)和偏差(b)就是這樣的內部參數,一般用於計算輸出值,在訓練神經網絡模型時起到主要作用。 在有效地訓練模型並產生準確結果時,模型的內部參數起到了非常重要的作用。這也是為什麼我們應該用各種優化策略和算法,來更新和計算影響模型訓練和模型輸出的網絡參數,使其逼近或達到最優值。
  • 代碼詳解:用Pytorch訓練快速神經網絡的9個技巧
    估計你還在用32位精度或*GASP(一般活動仿真語言)*訓練,甚至可能只在單GPU上訓練。如果市面上有99個加速指南,但你可能只看過1個?(沒錯,就是這樣)。但這份終極指南,會一步步教你清除模型中所有的(GP模型)。不要讓你的神經網絡變成這樣。(圖片來源:Monsters U)這份指南的介紹從簡單到複雜,一直介紹到你可以完成的大多數PITA修改,以充分利用你的網絡。
  • 環信人工智慧專家李理:詳解卷積神經網絡
    深度學習受到大家的關注很大一個原因就是Alex等人實現的AlexNet(一種深度卷積神經網絡)在LSVRC-2010 ImageNet這個比賽中取得了非常好的成績。此後,卷積神經網絡及其變種被廣泛應用於各種圖像相關任務。 這裡主要參考了Neural Networks and Deep Learning和cs231n的課程來介紹CNN,兩部分都會有理論和代碼。
  • 算法之「算法」:所有機器學習算法都可以表示為神經網絡
    我們可以說,神經網絡是對機器學習的普遍概括,而不是僅僅一次嘗試。與其說神經網絡是簡單的算法,不如說是框架和概念,這是顯而易見的,因為在構建神經網絡時有很大的自由度——比如對於隱藏層&節點個數、激活函數、優化器、損失函數、網絡類型(卷積神經網絡、循環神經網絡等)以及特殊層(批歸一化、隨機失活等)。
  • 不到200 行代碼,教你如何用 Keras 搭建生成對抗網絡(GAN)
    它的核心思想是:同時訓練兩個相互協作、同時又相互競爭的深度神經網絡(一個稱為生成器 Generator,另一個稱為判別器 Discriminator)來處理無監督學習的相關問題。在訓練過程中,兩個網絡最終都要學習如何處理任務。通常,我們會用下面這個例子來說明 GAN 的原理:將警察視為判別器,製造假幣的犯罪分子視為生成器。一開始,犯罪分子會首先向警察展示一張假幣。