Batch Normalization ใช้ในการทำให้ปกติเลเยอร์อินพุทรวมถึงเลเยอร์ที่ซ่อนอยู่โดยการปรับค่าเฉลี่ยและการปรับขนาดของการเปิดใช้งาน ด้วยเหตุนี้การทำให้เป็นมาตรฐานด้วยเลเยอร์เพิ่มเติมในเครือข่ายนิวรัลลึกเครือข่ายสามารถใช้อัตราการเรียนรู้ที่สูงขึ้นโดยไม่หายไปหรือระเบิดการไล่ระดับสี นอกจากนี้การทำให้เป็นปกติของแบทช์ทำให้เครือข่ายเป็นปกติเช่นที่ง่ายต่อการพูดคุยทั่วไปและดังนั้นจึงไม่จำเป็นต้องใช้การออกกลางคันเพื่อลดการเกิด overfitting
หลังจากการคำนวณฟังก์ชั่นเชิงเส้นโดยใช้ say, Dense () หรือ Conv2D () ใน Keras เราใช้ BatchNormalization () ซึ่งคำนวณฟังก์ชันเชิงเส้นในเลเยอร์แล้วเราจะเพิ่มความไม่เป็นเชิงเส้นลงในเลเยอร์โดยใช้ Activation ()
from keras.layers.normalization import BatchNormalization
model = Sequential()
model.add(Dense(64, input_dim=14, init='uniform'))
model.add(BatchNormalization(epsilon=1e-06, mode=0, momentum=0.9, weights=None))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(64, init='uniform'))
model.add(BatchNormalization(epsilon=1e-06, mode=0, momentum=0.9, weights=None))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(2, init='uniform'))
model.add(BatchNormalization(epsilon=1e-06, mode=0, momentum=0.9, weights=None))
model.add(Activation('softmax'))
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy', optimizer=sgd)
model.fit(X_train, y_train, nb_epoch=20, batch_size=16, show_accuracy=True,
validation_split=0.2, verbose = 2)
การปรับบรรทัดคำสั่งแบบ Batch มีการนำไปใช้อย่างไร
สมมติว่าเรามีการป้อน [l-1] ไปยังเลเยอร์ l นอกจากนี้เรายังมีน้ำหนัก W [l] และหน่วยอคติ b [l] สำหรับชั้น l ปล่อยให้ [l] เป็นเวกเตอร์การเปิดใช้งานที่คำนวณได้ (เช่นหลังจากเพิ่มความไม่เป็นเชิงเส้น) สำหรับเลเยอร์ l และ z [l] เป็นเวกเตอร์ก่อนที่จะเพิ่มความไม่เป็นเชิงเส้น
- การใช้ [l-1] และ W [l] เราสามารถคำนวณ z [l] สำหรับเลเยอร์ l
- โดยทั่วไปในการเผยแพร่ฟีดไปข้างหน้าเราจะเพิ่ม bias unit ใน z [l] ในขั้นนี้เช่นนี้ z [l] + b [l] แต่ใน Batch Normalization ขั้นตอนนี้ไม่จำเป็นต้องเพิ่ม b [l] อีกและไม่ ใช้พารามิเตอร์ b [l]
- คำนวณ z [l] หมายถึงและลบออกจากแต่ละองค์ประกอบ
- หาร (z [l] - หมายถึง) โดยใช้ค่าเบี่ยงเบนมาตรฐาน เรียกมันว่า Z_temp [l]
ตอนนี้กำหนดพารามิเตอร์ใหม่γและβที่จะเปลี่ยนขนาดของเลเยอร์ที่ซ่อนอยู่ดังนี้:
z_norm [l] = γ.Z_temp [l] + β
ในข้อความที่ตัดตอนมานี้ Dense () รับ a [l-1] ใช้ W [l] และคำนวณ z [l] จากนั้น BatchNormalization ทันที () จะดำเนินการตามขั้นตอนข้างต้นเพื่อมอบ z_norm [l] จากนั้นการเปิดใช้งานทันที () จะคำนวณ tanh (z_norm [l]) เพื่อให้ [l] เช่น
a[l] = tanh(z_norm[l])