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

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

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

相關焦點

  • FAIR何愷明等人提出組歸一化:替代批歸一化,不受批量大小限制
    近日,FAIR 研究工程師吳育昕、研究科學家何愷明提出了批歸一化(Group Normalization)方法,試圖以小批尺寸實現快速神經網絡訓練,這種方法對於硬體的需求大大降低,並在實驗中超過了傳統的批歸一化方法。
  • 【動手學計算機視覺】第十三講:批量歸一化
    這一點在深度神經網絡中同樣適用,批量歸一化(Batch Normalization, BN)就是其中用於數據歸一化的一種非常常用的算法,在tensorflow、mxnet這些知名的機器學習框架中都對BN進行了實現,它不僅能夠加快訓練過程,同時還具備一些正則化功能,對防止過擬合具有一定作用。下面就來詳細介紹一下這個算法。
  • MATLAB優化算法實例——神經網絡
    神經網絡是由神經元互聯而成的,能接收並處理信息,而這種信息處理主要是由神經元之間的相互作用,即通過神經元之間的連接權值來處理並實現的。神經網絡在人工智慧、自動控制、計算機科學、信息處理和模式識別等領域得到了非常成功地應用。
  • 數據轉換 :標準化vs 歸一化(附代碼&連結)
    本文將解釋數據轉換中常見的特徵縮放方法:「標準化」和「歸一化」的不同之處,並舉例說明何時使用,以及如何使用它們。數據轉換是數據處理中十分基本的步驟之一。當我初學特徵縮放的時候,經常用到「縮放」 「標準化」「歸一化」等術語。但是卻很難找到應該在什麼時候,使用哪一種方法的信息。
  • 何愷明團隊最新力作:群組歸一化(Group Normalization)
    該方法稱為群組歸一化(Group Normalization),試圖以群組方式實現快速訓練神經網絡,這種方法對於硬體的需求大大降低,並在實驗中超過了傳統的批量歸一化方法。批量歸一化和群組歸一化批量歸一化(Batch Normalization,以下簡稱 BN)是深度學習發展中的一項裡程碑式技術,可讓各種網絡並行訓練。但
  • 神經網絡篇——從代碼出發理解BP神經網絡
    一提到反向傳播算法,我們就不自覺的想到隨機梯度下降、sigmoid激活函數和最讓人頭大的反向傳播法則的推導,即便是把反向傳播神經網絡的原理學了一遍,也還是一頭霧水,在這裡推薦一本小編認為把BP神經網絡講的最通透的教材《Python神經網絡編程》。
  • 完全解讀BatchNorm2d歸一化算法原理
    最近小編在研究yolo3的算法源碼,在調試過程中發現中間層的BatchNorm2d的結果竟然出現了Nan。
  • 訓練神經網絡的五大算法
    ,投稿請聯繫 heyc@csdn.net 或微信號 289416419神經網絡模型的每一類學習過程通常被歸納為一種訓練算法。訓練的算法有很多,它們的特點和性能各不相同。➤問題的抽象人們把神經網絡的學習過程轉化為求損失函數f的最小值問題。一般來說,損失函數包括誤差項和正則項兩部分。誤差項衡量神經網絡模型在訓練數據集上的擬合程度,而正則項則是控制模型的複雜程度,防止出現過擬合現象。損失函數的函數值由模型的參數(權重值和偏置值)所決定。
  • ICLR oral:清華提出離散化架構WAGE,神經網絡訓練推理合二為一
    離散化架構 WAGE,訓練推理合二為一 該報告主要探討如何實現對全離散化深度神經網絡進行訓練和推理,便於部署到嵌入式設備中。 在深度學習領域,高精度意味著大面積、高功耗,從而導致高成本,這背離了嵌入式設備的需求,因此硬體加速器和神經形態晶片往往採用低精度的硬體實現方式。在低精度的算法研究方面,之前的工作主要集中在對前向推理網絡的權重值和激活值的縮減,使之可以部署在硬體加速器和神經形態晶片上;而網絡的訓練還是藉助於高精度浮點實現(GPU)。
  • 超越何愷明等組歸一化 Group Normalization,港中文團隊提出自適配...
    下圖縱軸表示一個 ResNet 神經網絡模型在 ImageNet 中的圖像識別準確率(越高越好),橫軸表示訓練時更新網絡的樣本數量從大到小排列。藍色線、紅色線、和綠色線分別表示使用 Google 的 BN,Facebook 的 GN 和港中文提出的 SN 訓練模型的準確率。可以看出,當用於更新網絡的樣本數量(又稱「批量」)減小時,BN 模型的識別率急劇下降。
  • ​深度學習之BP神經網絡--Stata和R同步實現(附數據和代碼)
    總的來看,BP神經網絡是神經網絡的典型代表,是初學者的重點學習對象。此外,Stata中目前能實現神經網絡建模的的只有BP神經網絡brain命令,尚無其它神經網絡算法的引進,故本文在此重點介紹BP神經網絡。
  • 新一代人工智慧算法-人工教學並超越自身訓練的算法
    來源:多倫多大學一種由多倫多大學工程學院開發的新的機器學習訓練算法使神經網絡能夠直接從人類定義的規則中學習,為人工智慧領域開闢了新的可能,它可以延伸到醫療診斷和自動駕駛汽車領域。「嘿,Siri,我的頭髮看起來怎麼樣?」
  • 【讓調參全部自動化】自動機器學習,神經網絡自主編程(代碼與訣竅)
    KDnuggets 的主編 Matthew Mayo 寫了一篇文章介紹了 AutoML 的概念,以及為什麼要做自動機器學習。本文後附 AI 軟體工程師 Thibault Neveu 發表在 Medium 的文章,介紹他如何訓練神經網絡自動編程。在過去幾年,自動機器學習(AutoML)成了一個研究的熱點。
  • 從梯度下降到擬牛頓法:詳解訓練神經網絡的五大學習算法
    選自 Neuraldesigner作者:Alberto Quesada機器之心編譯參與:蔣思源在神經網絡中,系統的學習過程一般是由訓練算法所主導。而現如今有許多不同的學習算法,它們每一個都有不同的特徵和表現。因此本文力圖描述清楚五大學習算法的基本概念及優缺點,給讀者們闡明最優化在神經網絡中的應用。
  • 如何選擇神經網絡的超參數
    神經網絡的超參數分類  神經網路中的超參數主要包括1. 學習率 ηη,2. 正則化參數 λλ,3. 神經網絡的層數 LL,4. 每一個隱層中神經元的個數 jj,5. 學習的回合數EpochEpoch,6. 小批量數據 minibatchminibatch 的大小,7. 輸出神經元的編碼方式,8. 代價函數的選擇,9. 權重初始化的方法,10.
  • 神經網絡分析算法
    他們相互聯繫形成神經網絡,通過感官器官和神經來接受來自身體外的各種信息(在神經網絡算法中我們稱:訓練)傳遞中樞神經,然後經過對信息的分析和綜合,再通過運動神經發出控制信息(比如我在博客園敲文字),依次來實現機體與外部環境的聯繫。神經元這玩意跟其它細胞一樣,包括:細胞核、細胞質和細胞核,但是它還有比較特殊的,比如有許多突起,就跟上面的那個圖片一樣,分為:細胞體、軸突和樹突三分部。
  • 人工神經網絡算法及其簡易R實現
    人工神經網絡作為一種分類算法,其背後的原理大抵如此,因訓練樣本中要有標記,所以人工神經網絡是一種監督分類算法。神經網絡簡介人工神經網絡是在現代神經科學的基礎上提出和發展起來的一種旨在反映人腦結構及功能的抽象數學模型。它具有人腦功能基本特性:學習、記憶和歸納。
  • 【乾貨】深度學習需要了解的四種神經網絡優化算法
    【導讀】近日,Vadim Smolyakov發表了一篇博客,針對當前神經網絡的優化算法進行了總結,並利用簡單的CNN網絡在NMIST數據集上進行實驗
  • CMU2018春季課程:神經網絡自然語言處理課程(附PPT和代碼)
    本文中,我們梳理了該課程的主要內容:神經網絡、詞向量、語言模型、CNNs和RNNs在NLP中的應用等等,課程涉及幾乎全部NLP問題,內容非常全面,強烈推薦給從事NLP研究的讀者。本課程(卡內基梅隆大學語言技術學院 Language Technology Institute)將首先對神經網絡進行簡要概述,然後花費大部分課時來演示如何將神經網絡應用於自然語言問題(NLP)。 每一節課將介紹自然語言中的一個特定的問題或現象,描述其難以建模的原因,並展示若干用於解決這個問題的模型。
  • 為什麼深度神經網絡這麼難訓練?
    本書深入了講解神經網絡和深度學習技術,側重於闡釋深度學習的核心概念。作者以技術原理為導向,輔以貫穿全書的 MNIST 手寫數字識別項目示例,介紹神經網絡架構、反向傳播算法、過擬合解決方案、卷積神經網絡等內容,以及如何利用這些知識改進深度學習項目。學完本書後,讀者將能夠通過編寫 Python 代碼來解決複雜的模式識別問題。