Bình thường hóa

Xem trên TensorFlow.org Chạy trong Google Colab Xem nguồn trên GitHub Tải xuống sổ ghi chép

Tổng quat

Máy tính xách tay này đưa ra một giới thiệu ngắn gọn vào lớp bình thường của TensorFlow. Các lớp hiện được hỗ trợ là:

  • Nhóm Normalization (TensorFlow Addons)
  • Ví dụ Normalization (TensorFlow Addons)
  • Lớp Normalization (TensorFlow Core)

Ý tưởng cơ bản đằng sau các lớp này là chuẩn hóa đầu ra của một lớp kích hoạt để cải thiện sự hội tụ trong quá trình đào tạo. Ngược lại với bình thường hàng loạt những normalizations không làm việc trên lô, thay vào đó họ chuẩn hóa kích hoạt của một mẫu duy nhất, làm cho chúng phù hợp cho các mạng neual tái phát là tốt.

Thông thường, quá trình chuẩn hóa được thực hiện bằng cách tính giá trị trung bình và độ lệch chuẩn của một nhóm con trong tensor đầu vào của bạn. Cũng có thể áp dụng một thang đo và một hệ số bù đắp cho điều này.

\(y_{i} = \frac{\gamma ( x_{i} - \mu )}{\sigma }+ \beta\)

\( y\) : Output

\(x\) : Input

\(\gamma\) : yếu tố Scale

\(\mu\): trung bình

\(\sigma\): độ lệch chuẩn

\(\beta\): yếu tố offset

Hình ảnh sau đây chứng minh sự khác biệt giữa các kỹ thuật này. Mỗi ô con hiển thị một tensor đầu vào, với N là trục lô, C là trục kênh và (H, W) là trục không gian (Ví dụ: Chiều cao và Chiều rộng của hình ảnh). Các pixel màu xanh lam được chuẩn hóa theo cùng một giá trị trung bình và phương sai, được tính bằng cách tổng hợp các giá trị của các pixel này.

Nguồn: ( https://arxiv.org/pdf/1803.08494.pdf )

Trọng số gamma và beta có thể đào tạo được trong tất cả các lớp chuẩn hóa để bù đắp cho khả năng biểu diễn bị mất. Bạn có thể kích hoạt những yếu tố này bằng cách thiết lập các center hoặc scale cờ True . Tất nhiên bạn có thể sử dụng initializers , constraintsregularizer cho betagamma để điều chỉnh các giá trị trong quá trình đào tạo.

Thành lập

Cài đặt Tensorflow 2.0 và Tensorflow-Addons

pip install -U tensorflow-addons
import tensorflow as tf
import tensorflow_addons as tfa

Chuẩn bị tập dữ liệu

mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

Hướng dẫn chuẩn hóa nhóm

Giới thiệu

Chuẩn hóa nhóm (GN) chia các kênh đầu vào của bạn thành các nhóm phụ nhỏ hơn và chuẩn hóa các giá trị này dựa trên giá trị trung bình và phương sai của chúng. Vì GN hoạt động trên một ví dụ duy nhất nên kỹ thuật này độc lập với kích thước hàng loạt.

GN đã chấm điểm theo thực nghiệm để chuẩn hóa hàng loạt trong các tác vụ phân loại hình ảnh. Có thể có lợi khi sử dụng GN thay vì Chuẩn hóa hàng loạt trong trường hợp kích thước tổng thể theo lô của bạn thấp, điều này sẽ dẫn đến hiệu suất kém của chuẩn hóa hàng loạt

Thí dụ

Tách 10 kênh sau lớp Conv2D thành 5 nhóm con trong cài đặt "kênh cuối cùng" tiêu chuẩn:

model = tf.keras.models.Sequential([
  # Reshape into "channels last" setup.
  tf.keras.layers.Reshape((28,28,1), input_shape=(28,28)),
  tf.keras.layers.Conv2D(filters=10, kernel_size=(3,3),data_format="channels_last"),
  # Groupnorm Layer
  tfa.layers.GroupNormalization(groups=5, axis=3),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x_test, y_test)
313/313 [==============================] - 3s 3ms/step - loss: 0.4707 - accuracy: 0.8613
<keras.callbacks.History at 0x7f63a5c5f490>

Hướng dẫn chuẩn hóa phiên bản

Giới thiệu

Chuẩn hóa phiên bản là trường hợp đặc biệt của chuẩn hóa nhóm trong đó kích thước nhóm có cùng kích thước với kích thước kênh (hoặc kích thước trục).

Kết quả thử nghiệm cho thấy rằng chuẩn hóa phiên bản hoạt động tốt khi chuyển kiểu khi thay thế chuẩn hóa hàng loạt. Gần đây, chuẩn hóa phiên bản cũng đã được sử dụng để thay thế cho quá trình chuẩn hóa hàng loạt trong GAN.

Thí dụ

Áp dụng InstanceNormalization sau Lớp Conv2D và sử dụng hệ số bù và thang đo được khởi tạo thống nhất.

model = tf.keras.models.Sequential([
  # Reshape into "channels last" setup.
  tf.keras.layers.Reshape((28,28,1), input_shape=(28,28)),
  tf.keras.layers.Conv2D(filters=10, kernel_size=(3,3),data_format="channels_last"),
  # LayerNorm Layer
  tfa.layers.InstanceNormalization(axis=3, 
                                   center=True, 
                                   scale=True,
                                   beta_initializer="random_uniform",
                                   gamma_initializer="random_uniform"),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x_test, y_test)
313/313 [==============================] - 1s 3ms/step - loss: 0.5367 - accuracy: 0.8405
<keras.callbacks.History at 0x7f63a58d9f50>

Hướng dẫn chuẩn hóa lớp

Giới thiệu

Chuẩn hóa lớp là trường hợp đặc biệt của chuẩn hóa nhóm trong đó kích thước nhóm là 1. Giá trị trung bình và độ lệch chuẩn được tính toán từ tất cả các lần kích hoạt của một mẫu đơn lẻ.

Kết quả thử nghiệm cho thấy rằng chuẩn hóa Lớp rất phù hợp với Mạng thần kinh tái tạo, vì nó hoạt động độc lập với quy mô hàng loạt.

Thí dụ

Áp dụng Chuẩn hóa lớp sau Lớp Conv2D và sử dụng hệ số tỷ lệ và độ lệch.

model = tf.keras.models.Sequential([
  # Reshape into "channels last" setup.
  tf.keras.layers.Reshape((28,28,1), input_shape=(28,28)),
  tf.keras.layers.Conv2D(filters=10, kernel_size=(3,3),data_format="channels_last"),
  # LayerNorm Layer
  tf.keras.layers.LayerNormalization(axis=3 , center=True , scale=True),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x_test, y_test)
313/313 [==============================] - 1s 3ms/step - loss: 0.4056 - accuracy: 0.8754
<keras.callbacks.History at 0x7f63a5722d10>

Văn chương

Định mức lớp

Định mức phiên bản

Định mức nhóm