¿La red profunda no funciona? El profesor Wu Enda te lleva a optimizar la red neuronal (1)

¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)

吴恩达老师DeepLearning.ai课程笔记
【吴恩达Deeplearning.ai笔记一】直观解释逻辑回归
【吴恩达deeplearning.ai笔记二】通俗讲解神经网络上
【吴恩达deeplearning.ai笔记二】通俗讲解神经网络下

Para mejorar la eficiencia del entrenamiento de una red neuronal profunda, es necesario comenzar desde todos los aspectos, optimizar todo el proceso de operación y prevenir diversos problemas que puedan ocurrir.

Este artículo implica la optimización de la partición de datos en redes neuronales profundas, estimación de modelos, prevención de sobreajuste, estandarización de conjuntos de datos, inicialización de peso, pruebas de gradiente, etc.

1 división de datos


Para construir un modelo de red neuronal, en primer lugar, es necesario configurar el conjunto de entrenamiento (Conjuntos de entrenamiento), el conjunto de desarrollo (Conjuntos de desarrollo) y el conjunto de prueba (Conjuntos de prueba) de todo el conjunto de datos.

Cuando el conjunto de entrenamiento se utiliza para entrenamiento, al cambiar los valores de varios hiperparámetros, se obtendrán varios modelos diferentes. El conjunto de desarrollo también se denomina conjunto de validación cruzada de retención (Hold-out Cross Validation Sets), que se utiliza para encontrar el modelo de mejor rendimiento entre varios modelos diferentes establecidos. Luego, aplique este modelo al conjunto de prueba para realizar la prueba y haga una estimación no sesgada de qué tan bien es el algoritmo. Por lo general, el conjunto de prueba final se omite directamente y el conjunto de desarrollo se considera el "conjunto de prueba".

Un problema que debe tenerse en cuenta es que es necesario asegurarse de que las fuentes del conjunto de entrenamiento y el conjunto de prueba sean consistentes, de lo contrario, provocará una gran desviación en el resultado final.

2 estimación del modelo


¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)

En la imagen de la izquierda de la figura, un modelo simple, como el ajuste lineal, no se puede utilizar para clasificar bien los datos. Después de la clasificación, hay una gran desviación (Sesgo), que se denomina modelo de clasificación. Ajuste (ajuste inferior).

En la figura de la derecha, se utiliza un modelo complejo para la clasificación, como un modelo de red neuronal profunda. Cuando la complejidad del modelo es demasiado alta, es probable que se produzca un sobreajuste, lo que da como resultado una gran varianza (Varianza) después de la clasificación.

En la figura del medio, solo se puede usar un modelo apropiado para hacer una clasificación similar de los datos.
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)

El conjunto de desarrollo se usa generalmente para diagnosticar si hay un sesgo o una variación de tiempo en el modelo:

  • Cuando se entrena un modelo, se encuentra que la tasa de error del conjunto de entrenamiento es pequeña, mientras que la tasa de error del conjunto de desarrollo es grande. Este modelo puede tener sobreajuste y gran varianza;
  • Cuando se encuentra que las tasas de error del conjunto de entrenamiento y del conjunto de desarrollo son grandes y los dos son iguales, es posible que el modelo no esté ajustado y haya una gran desviación;
  • Cuando se encuentra que la tasa de error del conjunto de entrenamiento es grande y la tasa de error del conjunto de desarrollo es mucho mayor que la del conjunto de entrenamiento, el modelo es un poco malo, con una gran varianza y sesgo.

Solo cuando las tasas de error del conjunto de entrenamiento y el conjunto de desarrollo son pequeñas, y la diferencia entre los dos es pequeña, el modelo será un buen modelo con poca varianza y sesgo.

Cuando el modelo tiene grandes desviaciones, se pueden utilizar métodos como aumentar el número de capas ocultas de la red neuronal, el número de nodos en la capa oculta y el entrenamiento durante más tiempo para evitar un ajuste insuficiente. Cuando existe una gran variación, se pueden utilizar métodos como la introducción de más muestras de entrenamiento y la regularización de los datos de muestra para evitar el sobreajuste.

Regularización 3 L2 para evitar el sobreajuste


Agregue el término de regularización L2 (también conocido como "norma L2") a la función de costo de la regresión logística:
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
entre ellos, la
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
regularización L2 es el tipo de regularización más comúnmente utilizado, y también hay un término de regularización L1:
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
debido a la regularización L1, el resultado final es ω Hay una gran cantidad de ceros, lo que hace que el modelo sea escaso, por lo que generalmente se usa la regularización L2. El parámetro λ se denomina parámetro de regularización, y este parámetro generalmente se establece a través del conjunto de desarrollo.

Agregue un término de regularización a la función de costo de la red neuronal:
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
esto se llama la Norma de Frobenius (Norma de Frobenius), por lo que el término de regularización en la red neuronal se llama matriz de la Norma de Frobenius.
Después de agregar el término de regularización, hay retropropagación: al
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
actualizar los parámetros:
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
por lo que el proceso de regularización L2 también se llama decaimiento de peso.

El parámetro λ se utiliza para ajustar la importancia relativa de los dos términos en la fórmula. Un λ más pequeño está sesgado hacia la minimización de la función de costo original, y un λ más grande está sesgado hacia la minimización del peso ω. Cuando λ es mayor, el peso ω [ι] se acercará a 0, lo que equivale a eliminar parte de la unidad oculta en la red neuronal profunda.

Por otro lado, cuando el peso ω [L] se vuelve más pequeño, el cambio aleatorio de la muestra de entrada X no influirá demasiado en el modelo de red neuronal y es menos probable que la red neuronal se vea afectada por el ruido local. Es por eso que la regularización puede reducir la variación del modelo.

4 Regularización de inactivaciones aleatorias para evitar el sobreajuste


La regularización de inactivación aleatoria (DropOut) es preestablecer una probabilidad de ser eliminado para cada nodo de cada capa en una red neuronal, y luego decidir al azar eliminar algunos de los nodos durante el entrenamiento y obtener una reducción Red neuronal para lograr el propósito de reducir la varianza.

La regularización DropOut se utiliza principalmente en el campo de la visión por computadora.

Al programar en Python, puede usar Inverted DropOut para lograr la regularización de DropOut:

Para una capa de red neuronal 3

keep.prob = 0.8
d3 = np.random.randn(a3.shape[0],a3.shape[1]) < keep.prob
a3 = np.multiply(a3,d3)
a3 /= keep.prob
z4 = np.dot(w4,a3) + b4

El d3 es una matriz booleana generada aleatoriamente con el mismo tamaño que la tercera capa, y el valor en la matriz es 0 o 1. Y keep.prob ≤ 1, puede cambiar con el número de nodos en cada capa y determina el número de nodos perdidos.

Por ejemplo, cuando keep.prob se establece en 0.8, el 20% del valor en la matriz d3 será 0. Después de multiplicar las matrices a3 y d3, significa que se eliminará el 20% de los nodos de esta capa. La razón por la que necesita dividir por keep_prob es porque a3 se utilizará en el siguiente paso para encontrar z4, y se ha borrado el 20% del valor de a3. Para no afectar el valor de salida final esperado de la siguiente capa de z4, este paso es necesario Para corregir el valor de la pérdida, este paso se denomina tecnología de desactivación aleatoria inversa, que asegura que el valor esperado de a3 no se verá afectado por la eliminación de nodos y también asegura que la red neuronal antes de DropOut se utilice para las pruebas. .

Al igual que la regularización L2 anterior, el uso de DropOut puede simplificar parte de la estructura de la red neuronal para evitar el sobreajuste. Además, cuando se ingresan muchos nodos, se puede eliminar cada nodo, lo que puede reducir la dependencia de la red neuronal de un determinado nodo, es decir, la dependencia de una determinada característica, difundir el peso del nodo de entrada y reducir el cuadrado del peso. Norma.

5 Método de amplificación de datos para evitar el sobreajuste


¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)

El aumento de datos (aumento de datos) consiste en realizar algunas transformaciones simples en los datos existentes cuando no se pueden obtener muestras de entrenamiento adicionales. Por ejemplo, una imagen se voltea, agranda y distorsiona para introducir más muestras de entrenamiento.

6 Método de parada temprana para evitar el sobreajuste


¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)

La parada anticipada consiste en dibujar la curva de cambio de costo del conjunto de entrenamiento y el conjunto de desarrollo en el mismo eje de coordenadas cuando se realiza el descenso de gradiente respectivamente, y corregirlo a tiempo y detener el entrenamiento cuando la flecha apunta a una gran desviación entre los dos.

En la flecha del medio, el parámetro w será un valor que no sea ni demasiado grande ni demasiado pequeño, y la ocurrencia de sobreajuste se puede evitar en condiciones ideales. Sin embargo, por un lado, este método no reduce muy bien la función de costes, pero también quiere evitar el sobreajuste. Un método resuelve dos problemas, ninguno de los cuales puede resolverse bien.

7 conjuntos de datos estandarizados


El proceso de estandarización de los conjuntos de entrenamiento y prueba es: los
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
datos originales son:
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
después de los dos primeros pasos, x menos su valor promedio:
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
después de los dos últimos pasos, x se divide por su varianza: cuando el
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
conjunto de datos no está estandarizado, el costo El proceso de descenso de imagen y degradado de la función será:
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
Después de la normalización, se convertirá en:
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)

8 inicializar pesos


En el proceso anterior de construcción de una red neuronal, se mencionó que el peso ω no puede ser 0 y se inicializó con un valor aleatorio. Sin embargo, en una red neuronal profunda, cuando el valor de ω se inicializa demasiado grande, aumentará exponencialmente al entrar en la capa profunda, haciendo que el gradiente explote; si es demasiado pequeño, se atenuará exponencialmente, haciendo que el gradiente desaparezca.

Cuando ω se inicializa aleatoriamente en Python, se usa el método np.random.randn () en la biblioteca numpy. Randn se muestra a partir de la distribución normal estándar unitaria (también conocida como "distribución gaussiana") con una media de 0.

A medida que aumenta la cantidad de datos de entrada n en una determinada capa de la red neuronal, también aumenta la varianza de la distribución de datos de salida. Resulta que se puede dividir por la raíz cuadrada de la cantidad de datos de entrada n para ajustar su rango numérico, de modo que la varianza de la salida de la neurona se normalice a 1, y no será demasiado grande para causar una explosión exponencial o un decaimiento demasiado pequeño y exponencial. Eso es para inicializar el peso como:

w = np.random.randn(layers_dims[l],layers_dims[l-1]) \* np.sqrt(1.0/layers_dims[l-1])

Esto asegura que todas las neuronas de la red tengan inicialmente aproximadamente la misma distribución de salida.
Cuando la función de activación es la función ReLU, los pesos se inicializan mejor como:

w = np.random.randn(layers_dims[l],layers_dims[l-1]) \* np.sqrt(2.0/layers_dims[l-1])

Consulte los materiales de referencia para conocer el proceso de prueba de las conclusiones anteriores.

9 prueba de gradiente


El principio de realización de la prueba de gradiente se basa en la definición de la derivada para obtener la derivada de la función de costo. Existen:
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
la fórmula de la prueba de gradiente:
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
donde cuanto menor es ε, más cerca está el resultado de la derivada verdadera, que es el valor del gradiente. Este método se puede utilizar para determinar si hay un error al propagar hacia atrás el descenso del gradiente.

El proceso de prueba de gradiente consiste en agregar una pequeña ε a cada parámetro θ [i] de la función de costo y obtener un valor de aproximación de gradiente. El valor de gradiente de
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
J '(θ) en J' (θ) se obtiene analíticamente dθ, y luego encuentre la distancia euclidiana entre ellos:
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)
cuando el resultado de la distancia calculada está cerca del valor de ε, se puede considerar que el valor del gradiente se calculó correctamente; de ​​lo contrario, debe regresar para verificar si hay un error en el código.

Debe tenerse en cuenta que no realice pruebas de gradiente cuando entrene el modelo. Cuando se agrega un término regular a la función de costo, también debe traer el término regular para la prueba y no utilice pruebas de gradiente después de usar la inactivación aleatoria.

Nota: Las imágenes y los materiales incluidos en este artículo se compilaron y tradujeron de la serie Deep Learning de Andrew Ng, y los derechos de autor le pertenecen. El nivel de traducción y cotejo es limitado, y le invitamos a señalar cualquier punto inadecuado.

¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)

Lectura recomendada:

Video | ¿Qué debo hacer si no puedo producir un artículo?
¿Por qué no probar estos métodos? [Combate de aprendizaje profundo] Cómo lidiar con el relleno de secuencia de longitud variable de entrada RNN en pytorch
[Teoría básica del aprendizaje automático] Comprensión detallada de la estimación de probabilidad posterior máxima (MAP)

      欢迎关注公众号学习交流~         

¿La red profunda no funciona?  El profesor Wu Enda te lleva a optimizar la red neuronal (1)

Supongo que te gusta

Origin blog.51cto.com/15009309/2554213
Recomendado
Clasificación