La normalización de lotes magia aunque sólo sea un modelo de formación BN capa sería como

Puede que se sorprenda, pero es eficaz.

Recientemente, leí Jonathan Frankle en la plataforma arXiv, David J. Schwab y Ari S. Morcos escribió ensayos " Formación y BatchNorm Sólo BatchNorm: el ON en el poder expresivo de Random características en CNNs ." La idea de inmediato me llamó la atención. Hasta ahora, jamás la estandarización de lotes (BN) capa se considera parte del proceso de aprendizaje en sí, sólo la profundidad de la red para ayudar a optimizar y mejorar la estabilidad. Después de unos cuantos experimentos, descubrí que estaba equivocado. En lo que sigue, voy a mostrar los resultados de mi copia del documento y aprender algo.

Más específicamente, utilizo experimento API Tensorflow 2 Keras reproducido con éxito la tesis principal, llegó a conclusiones similares. Es decir, ResNets pueden estandarizarse solamente por la formación de la capa de carga se establece gamma (γ) y beta parámetro (β) obtenido buenos resultados en CIFAR-10 de datos. Desde una perspectiva digital, utilizo ResNet-50101 y 152 arquitectura ganó 45%, 52% y 50% de la precisión Top-1, está lejos de ser perfecto, pero no es válido.

A continuación, he esbozado los conceptos de normalización de lotes y su interpretación común. Entonces, comparto el código I utilizado y los resultados de los mismos obtenidos. Por último, comentar los resultados experimentales, y se analiza.

La normalización de lotes por lotes de normalización

En pocas palabras, la capa de carga estimado promedio normalizado ([mu]) y la varianza (σ²) su entrada, y produce una salida normalizada, es decir, la salida media de cero y varianza unidad. En el experimento, esta técnica puede mejorar significativamente la convergencia y la estabilidad de la profundidad de la red. Además, utiliza dos parámetros (gamma] y beta]) y de zoom para ajustar su salida.

como la entrada x, z como salida, z viene dada por la ecuación siguiente:

Figura 1: Tratamiento por lotes expresión estandarizada

Los datos de entrada para estimar los parámetros mu y σ², y β y γ son entrenable. Por lo tanto, el algoritmo de propagación inversa puede utilizar para optimizar la red.

En resumen, se ha encontrado que la velocidad de rendimiento se puede mejorar de manera significativa la formación de la red y que conservan estos datos. Además, no es incompatible con otro lugar la capa de red. Por lo tanto, la mayoría de los modelos se utilizan a menudo entre todos operación frecuente Conv-relu se forma "Conv-BN-relu" Trio (y variantes de los mismos). Sin embargo, aunque esta es una de las capas se producen con más frecuencia, pero las razones detrás de sus ventajas hay una gran controversia en la literatura. Los tres siguientes principal argumento:

Traducción varianza interna : En pocas palabras, si la salida de la varianza media y la unidad de cero, la siguiente capa entrará en la formación estable. En otras palabras, es posible evitar demasiada variación de la producción. Esta es la primera explicación, pero el trabajo más tarde encontró pruebas contradictorias, negó este supuesto. En resumen, si la redes de formación VGG (1) sin el uso de BN, (2) utilizando el BN, y (3) utilizando el BN, traducción artificialmente covarianza. A pesar del proceso de covarianza artificial traducción (2) y (3), mejor aún (1).

suavizado de salida : BN se considera para ser alisada gama óptima, la reducción de la cantidad de cambio en la función de pérdida y limitar el gradiente. Más suave objetivo de predicción sería mejor en el entrenamiento, y no problemas fáciles.

La dirección longitudinal de desacoplamiento : Algunos autores creen que el BN es mejorar la fórmula para el problema de optimización, que se puede extender a los ajustes de optimización más tradicionales. Más específicamente, BN bastidor permite la optimización independiente de los parámetros de longitud y dirección, con objeto de optimizar la convergencia.

En resumen, los tres explicaciones se concentran en la estandarización de la normalización de lotes. A continuación, vamos a ver en la sartén BN y enfocar los puntos conseguidos por γ y los parámetros beta.

papel de copia

Si la idea es buena, debe ser resistente a las opciones de implementación y parámetros súper. En mi código, yo uso Tensorflow 2 y hiperparámetro elijo ser lo más corto posible para volver a reproducir la tesis principal del experimento. En más detalle, he probado la siguiente proposición:

ResNet modelo, además del caso de lotes de parámetros de la capa estandarizados para todos los otros pesos se han bloqueado, el modelo puede todavía ser un resultado bueno en CIFAR-10 en la formación de datos.

Voy a utilizar el Keras CIFAR-10 y ResNet módulo CIFAR-10 y los conjuntos de datos, y el uso de la pérdida de entropía cruzada y la activación Softmax. He descargado el código ResNet conjunto de datos de modelo y de inicialización aleatorio, congelación capas que no sean necesarios, y el uso batchsize tamaño de la imagen 1024 entrenado 50 época. Puede ver el siguiente código:

# Reproducing the main findings of the paper "Training BatchNorm and Only BatchNorm: On the Expressive Power of Random Features in CNNs" # Goal: Train a ResNet model to solve the CIFAR-10 dataset using only batchnorm layers, all else is frozen at their random initial state.import tensorflow as tf
import numpy as np
import pandas as pd

architectures = [
    ('ResNet-50', tf.keras.applications.resnet.ResNet50),
    ('ResNet-101', tf.keras.applications.resnet.ResNet101),
    ('ResNet-152', tf.keras.applications.resnet.ResNet152)]

(X_train, y_train), (X_test, y_test) = tf.keras.datasets.cifar10.load_data()
n_train_images = X_train.shape[0]
n_test_images = X_test.shape[0]
n_classes = np.max(y_train) + 1

X_train = X_train.astype(np.float32) / 255
X_test = X_test.astype(np.float32) / 255
y_train = tf.keras.utils.to_categorical(y_train, n_classes)
y_test = tf.keras.utils.to_categorical(y_test, n_classes)

for name, architecture in architectures:
    input = tf.keras.layers.Input((32, 32, 3))
    resnet = architecture(include_top=False, weights='imagenet', input_shape=(32, 32, 3), pooling='avg')(input)
    output = tf.keras.layers.Dense(n_classes, activation='softmax')(resnet)
    model = tf.keras.models.Model(inputs=input, outputs=output)

    optimizer = tf.keras.optimizers.Adam(learning_rate=0.01)
    loss_fn = tf.keras.losses.CategoricalCrossentropy(from_logits=True)
    he_normal = tf.keras.initializers.he_normal()
    for layer in model.layers[1].layers:
        if layer.name.endswith('_bn'):
            new_weights = [
                he_normal(layer.weights[0].shape), # Gamma
                tf.zeros(layer.weights[1].shape), # Beta
                tf.zeros(layer.weights[2].shape), # Mean
                tf.ones(layer.weights[3].shape)] # Std

            layer.set_weights(new_weights)
            layer.trainable = Trueelse:
            layer.trainable = False

    model.summary()

    model.compile(loss=loss_fn, optimizer=optimizer, metrics=['accuracy'])
    print('Training ' + name + '...')
    history = model.fit(X_train, y_train, batch_size=1024, epochs=1, validation_data=(X_test, y_test), shuffle=True)
    history_df = pd.DataFrame(history.history) 
    print('Dumping model and history...')
    history_df.to_csv(name + '.csv', sep=';')
    model.save(name + '.h5')

print('Testing Complete!')

El código anterior debe tener en cuenta lo siguiente:

  1. Keras API tiene sólo ResNet-50101 y 152 modelos. Para simplificar, sólo utilizo estos modelos.
  2. ResNet modelo utiliza una estrategia de parámetros de inicialización gamma "single". En nuestro proceso de formación limitada, que no puede ser demasiado simétrica entrenado por el descenso de gradiente. Pero de acuerdo con la sugerencia del papel que se utilizará la inicialización "he_normal". Con este fin, nos re-inicializado antes de que el manual de capacitación "estandarización lote" de peso.
  3. Los autores utilizaron un entrenamiento batchsize 128 160 época, y aprovechar el impulso a SGD Optimizer 0.9. La tasa de aprendizaje inicial se establece en 0,01, y 80 y 120 en la primera etapa y de 0,001 a 0,0001 dispuesto. Esta es una idea inicial, me pareció demasiado específica. En lugar de ello, utilicé el tamaño 50 época, batchsize de 1024, el optimizador es vainilla Adam, una tasa fija de 0,01 aprendizaje. Si esta suposición es útil, estos cambios no será un problema.
  4. Los autores también utilizaron mejora de los datos, pero yo no lo utilizamos. Una vez más, si la idea es útil, entonces estos cambios no deberían ser un problema importante.

resultado

Este es el resultado I obtenido por el código anterior:

Sólo aprobada modelo de formación conjunto de entrenamiento exactitud ResNet capa estandarizada

Sólo la formación de lotes para verificar la exactitud de ResNet conjunto de capas modelo normalizado

Numéricamente, tres modelos alcanzó el 50%, 60% y 62% de la formación y la exactitud de 45%, 52% y 50% de la precisión de la autenticación.

Con el fin de tener una buena comprensión del funcionamiento del modelo, hay que tener siempre en cuenta el rendimiento de adivinar al azar. CIFAR-10 clase conjunto de datos diez. Por lo tanto, al azar, tenemos 10 por ciento de posibilidades de la forma correcta. El método anterior es mejor que el azar adivinar unas cinco veces. Por lo tanto, podemos decir que el modelo tiene un rendimiento bueno.

Curiosamente, se tomó 10 para verificar la exactitud de la época comenzó a aumentar, lo que claramente demuestra que para la primera época diez, acaba de encajar la red de datos tanto como sea posible. Más tarde, la precisión se mejora en gran medida. Sin embargo, es cada cinco época varían ampliamente, lo que indica que el modelo no es muy estable.

En el documento, la Fig. 2 muestra que alcanzaron ~ 70, ~ 75, y verificar la exactitud de ~ 77%. Teniendo en cuenta que el autor ha hecho algunos ajustes, utilizando los métodos y usos de autoformación de mejora definido de datos, lo que parece muy razonable, y consistentes con mis hallazgos, lo que confirma la hipótesis.

866 capas usando ResNet, la exactitud de la autor casi alcanzaron aproximadamente el 85%, aproximadamente el 91% sólo unos pocos puntos porcentuales menos que toda la arquitectura de formación que se puede lograr. Además, se probaron diferentes esquema de inicialización, la arquitectura, se descongelaron y se ensayaron y omitir la última capa totalmente conectado, lo que trae algo de rendimiento adicional.

Además de la precisión, los autores estudiaron el histograma parámetros ß y γ, se encontró que la red aprendió valor cercano a cero para suprimir la tercera capa en cada BN todo activado mediante el establecimiento de γ.

discutir

En este punto usted puede preguntar: ¿Por qué hacer esto? En primer lugar, es curioso :) En segundo lugar, la capa de BN es muy común, pero todavía tenemos sólo un efecto superficial en su comprensión. Sólo conocemos sus beneficios. En tercer lugar, este estudio nos permite ejecutar el modelo a través de una comprensión más profunda.

Creo que esto en sí mismo no es práctico. Nadie va a congelar todas las capas de la red dejando sólo la capa de BN. Sin embargo, esto puede estimular diferente horario de entrenamiento. Tal vez algo como esto para entrenar a la red en un par de veces, y luego todo el entrenamiento con pesas puede dar lugar a un mayor rendimiento. Y esta técnica puede ser útil para el modelo de ajuste pre-formados. También puedo ver que esta idea se utiliza para recortar grandes redes.

Este estudio me hace más perplejo en cuanto a cuánto ignoramos estos dos parámetros. Puedo recordar sólo una discusión al respecto, creo que la discusión con "cero" en la inicialización γ ResNet bloque bien, para forzar el algoritmo de propagación hacia atrás en el primer período de más saltar conexión.

Mi segunda pregunta es sobre SELU y la función de activación SERLU, desde entonces han atributo normalizado. Estas dos funciones son en el "normalización lote", naturalmente, ser estandarizados capa a través de su salida. Ahora, quiero preguntar si han adquirido todas las características de una capa de carga estandarizada.

Por último, esta hipótesis es todavía un poco crudo. Se considera únicamente los conjuntos de datos CIFAR-10 y muy profundo de la red. Si se puede extender a otros conjuntos de datos o dirección diferentes tareas (por ejemplo, utilizando sólo el Batchnorm la GAN), además de aumentar su practicidad. Del mismo modo, el efecto posterior de γ y β del artículo en una redes completamente entrenados están más interesados.

作者: Ygor Rebolledo Serpa

deephub Sección de Traducción

Publicado 27 artículos originales · ganado elogios 83 · Vistas a 60000 +

Supongo que te gusta

Origin blog.csdn.net/m0_46510245/article/details/105290604
Recomendado
Clasificación