Chuẩn hóa hàng loạt được sử dụng để chuẩn hóa lớp đầu vào cũng như các lớp ẩn bằng cách điều chỉnh giá trị trung bình và tỷ lệ kích hoạt. Do hiệu ứng chuẩn hóa này với lớp bổ sung trong các mạng nơ ron sâu, mạng có thể sử dụng tốc độ học tập cao hơn mà không biến mất hoặc làm nổ độ dốc. Hơn nữa, chuẩn hóa hàng loạt thường xuyên hóa mạng sao cho dễ khái quát hóa hơn và do đó không cần thiết phải sử dụng bỏ học để giảm thiểu tình trạng thừa.
Ngay sau khi tính toán hàm tuyến tính bằng cách sử dụng say, Dense () hoặc Conv2D () trong Keras, chúng tôi sử dụng BatchN normalization () để tính toán hàm tuyến tính trong một lớp và sau đó chúng tôi thêm phi tuyến tính vào lớp bằng cách sử dụng Kích hoạt ().
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 bình thường hóa được áp dụng như thế nào?
Giả sử chúng ta đã nhập [l-1] cho một lớp l. Ngoài ra, chúng tôi có trọng số W [l] và đơn vị thiên vị b [l] cho lớp l. Đặt [l] là vectơ kích hoạt được tính (nghĩa là sau khi thêm phi tuyến tính) cho lớp l và z [l] là vectơ trước khi thêm phi tuyến tính
- Sử dụng [l-1] và W [l] chúng ta có thể tính z [l] cho lớp l
- Thông thường trong quá trình truyền chuyển tiếp, chúng tôi sẽ thêm đơn vị thiên vị cho z [l] ở giai đoạn này như z [l] + b [l], nhưng trong Batch Chuẩn hóa, bước này không cần thêm b [l] tham số b [l] được sử dụng.
- Tính z [l] có nghĩa và trừ nó từ mỗi phần tử
- Phân chia (z [l] - trung bình) bằng độ lệch chuẩn. Gọi nó là Z_temp [l]
Bây giờ hãy xác định các tham số mới và sẽ thay đổi tỷ lệ của lớp ẩn như sau:
z_norm [l] = γ.Z_temp [l] +
Trong đoạn trích mã này, Dense () lấy [l-1], sử dụng W [l] và tính z [l]. Sau đó, BatchN normalization () ngay lập tức sẽ thực hiện các bước trên để cung cấp z_norm [l]. Và sau đó Kích hoạt ngay lập tức () sẽ tính toán tanh (z_norm [l]) để đưa ra [l] tức là
a[l] = tanh(z_norm[l])