Estoy tratando de construir una red neuronal desde cero. En toda la literatura sobre IA existe un consenso de que las ponderaciones deben inicializarse en números aleatorios para que la red converja más rápido.
Pero, ¿por qué los pesos iniciales de las redes neuronales se inicializan como números aleatorios?
Había leído en alguna parte que esto se hace para "romper la simetría" y esto hace que la red neuronal aprenda más rápido. ¿Cómo romper la simetría hace que aprenda más rápido?
¿No sería una mejor idea inicializar los pesos a 0? ¿De esa manera los pesos podrían encontrar sus valores (ya sean positivos o negativos) más rápido?
¿Existe alguna otra filosofía subyacente detrás de la aleatorización de los pesos además de esperar que estén cerca de sus valores óptimos cuando se inicialicen?
Respuestas:
Romper la simetría es esencial aquí, y no por motivos de rendimiento. Imagine las primeras 2 capas de perceptrón multicapa (capas de entrada y capas ocultas):
Durante la propagación hacia adelante, cada unidad en la capa oculta recibe señal:
Es decir, cada unidad oculta obtiene la suma de las entradas multiplicada por el peso correspondiente.
Ahora imagine que inicializa todos los pesos con el mismo valor (por ejemplo, cero o uno). En este caso, cada unidad oculta recibirá exactamente la misma señal . Por ejemplo, si todos los pesos se inicializan a 1, cada unidad obtiene una señal igual a la suma de entradas (y salidas
sigmoid(sum(inputs))
). Si todos los pesos son ceros, lo que es aún peor, todas las unidades ocultas obtendrán señal cero. No importa cuál fue la entrada: si todos los pesos son iguales, todas las unidades en la capa oculta también serán iguales .Este es el principal problema con la simetría y la razón por la que debe inicializar los pesos de forma aleatoria (o, al menos, con valores diferentes). Tenga en cuenta que este problema afecta a todas las arquitecturas que utilizan conexiones de cada uno.
fuente
symmetry
nocorrelation
? ¿Quién usó la palabra primero?Analogía:
Espero que sea una buena analogía. Intenté explicarlo de la manera más simple posible.
Imagina que alguien te ha dejado caer desde un helicóptero a la cima de una montaña desconocida y estás atrapado allí. Todo está empañado. Lo único que sabes es que deberías llegar al nivel del mar de alguna manera. ¿Qué dirección debes tomar para llegar al punto más bajo posible?
Si no pudieras encontrar un camino al nivel del mar, el helicóptero te llevaría de nuevo y te dejaría en la misma posición en la cima de la montaña. Tendría que tomar las mismas direcciones nuevamente porque se está "inicializando" en las mismas posiciones iniciales .
Sin embargo, cada vez que el helicóptero te dejara en algún lugar aleatorio de la montaña, tomarías diferentes direcciones y pasos. Por lo tanto, habría una mejor oportunidad de llegar al punto más bajo posible.
Esto es lo que se quiere decir con romper la simetría . La inicialización es asimétrica ( que es diferente ), por lo que puede encontrar diferentes soluciones al mismo problema.
En esta analogía, donde aterrizas son los pesos . Entonces, con diferentes pesos, hay más posibilidades de llegar al punto más bajo ( o más bajo ).
Además, aumenta la entropía en el sistema para que el sistema pueda crear más información para ayudarlo a encontrar los puntos más bajos ( mínimos locales o globales ).
fuente
La respuesta es bastante simple. Los algoritmos de entrenamiento básico son de naturaleza codiciosa - no encuentran el óptimo global, sino más bien - la solución local "más cercana". Como resultado, comenzar desde cualquier inicialización fija predispone su solución hacia un conjunto particular de pesos. Si lo hace al azar (y posiblemente muchas veces), es mucho menos probable que se quede atascado en alguna parte extraña de la superficie del error.
El mismo argumento se aplica a otros algoritmos, que no pueden encontrar un óptimo global (k-medias, EM, etc.) y no se aplica a las técnicas de optimización global (como el algoritmo SMO para SVM).
fuente
Como mencionaste, el punto clave es romper la simetría . Porque si inicializa todos los pesos a cero, entonces todas las neuronas (unidades) ocultas en su red neuronal harán exactamente los mismos cálculos. Esto no es algo que deseamos porque queremos diferentes unidades ocultas para calcular diferentes funciones. Sin embargo, esto no es posible si inicializa todos con el mismo valor.
fuente
Si inicializa todos los pesos para que sean cero, entonces todas las neuronas de todas las capas realizan el mismo cálculo, dando el mismo resultado y haciendo que toda la red profunda sea inútil . Si los pesos son cero, la complejidad de toda la red profunda sería la misma que la de una sola neurona y las predicciones no serían mejores que aleatorias.
Los nodos que están uno al lado del otro en una capa oculta conectados a las mismas entradas deben tener diferentes pesos para que el algoritmo de aprendizaje actualice los pesos.
Al hacer que los pesos sean distintos de cero (pero cercanos a 0 como 0.1, etc.), el algoritmo aprenderá los pesos en las próximas iteraciones y no se bloqueará. De esta forma se produce la ruptura de la simetría.
Los algoritmos de optimización estocástica, como el descenso de gradiente estocástico, utilizan la aleatoriedad para seleccionar un punto de partida para la búsqueda y en la progresión de la búsqueda.
La progresión de la búsqueda o el aprendizaje de una red neuronal se conoce como convergencia. Descubrir una solución subóptima o un resultado óptimo local conduce a una convergencia prematura.
En lugar de depender de un óptimo local, si ejecuta su algoritmo varias veces con diferentes pesos aleatorios, existe la mejor posibilidad de encontrar óptimos globales sin quedarse atascado en los óptimos locales.
Después de 2015, debido a los avances en la investigación del aprendizaje automático, se introduce He-et-al Initializatio n para reemplazar la inicialización aleatoria
Los pesos siguen siendo aleatorios, pero difieren en el rango según el tamaño de la capa anterior de neuronas.
En resumen, los pesos aleatorios distintos de cero nos ayudan
fuente
Además de la inicialización con valores aleatorios, los pesos iniciales no deben comenzar con valores grandes. Esto se debe a que a menudo usamos las funciones tanh y sigmoide en capas ocultas y capas de salida. Si observa las gráficas de las dos funciones, después de la propagación hacia adelante en la primera iteración, se obtienen valores más altos, y estos valores corresponden a los lugares en las funciones sigmoidea y tanh que convergen la derivada a cero. Esto conduce a un inicio en frío del proceso de aprendizaje y a un aumento del tiempo de aprendizaje. Como resultado, si comienza los pesos al azar, puede evitar estos problemas multiplicando estos valores por valores como "0.01" o "0.001".
fuente
En primer lugar, algunos algoritmos convergen incluso con ponderaciones iniciales cero. Un ejemplo sencillo es una red de perceptrón lineal. Por supuesto, muchas redes de aprendizaje requieren una ponderación inicial aleatoria (aunque esto no es garantía de obtener la mejor y más rápida respuesta).
Las redes neuronales utilizan la retropropagación para aprender y actualizar los pesos, y el problema es que en este método, los pesos convergen al óptimo local (costo / pérdida mínimo local), no al óptimo global.
La ponderación aleatoria ayuda a la red a arriesgarse en cada dirección en el espacio disponible y mejorarlas gradualmente para llegar a una mejor respuesta y no limitarse a una dirección o respuesta.
[La siguiente imagen muestra un ejemplo unidimensional de cómo convergencia. Dada la ubicación inicial, se logra una optimización local pero no una optimización global. En dimensiones más altas, la ponderación aleatoria puede aumentar las posibilidades de estar en el lugar correcto o comenzar mejor, lo que resulta en pesos convergentes a mejores valores.] [1]
[1]: https://i.stack.imgur.com/2dioT.png [Kalhor, A. (2020). NN de clasificación y regresión. Conferencia.]
En el caso más simple, el nuevo peso es el siguiente:
Aquí, el gradiente de la función de costo se agrega al peso anterior para obtener un nuevo peso. Si todos los pesos anteriores son iguales, en el siguiente paso todos los pesos pueden ser iguales. Como resultado, en este caso, desde un punto de vista geométrico, la red neuronal está inclinada en una dirección y todos los pesos son iguales. Pero si los pesos son diferentes, es posible actualizar los pesos en diferentes cantidades. (Dependiendo del factor de impacto que tenga cada peso sobre el resultado, afecta el costo y las actualizaciones de los pesos. Por lo que incluso un pequeño error en la ponderación aleatoria inicial se puede solucionar).
Este fue un ejemplo muy simple, pero muestra el efecto de la inicialización de ponderación aleatoria en el aprendizaje. Esto permite que la red neuronal vaya a diferentes espacios en lugar de ir a un lado. Como resultado, en el proceso de aprendizaje, vaya al mejor de estos espacios.
fuente
Seamos más matemáticos. De hecho, la razón por la que respondo es que encontré esta parte faltante en las otras respuestas. Suponga que tiene 2 capas. Si miramos el algoritmo de retropropagación, el cálculo de
dZ2 = A2 - Y
dW2 = (1 / m) * dZ2 * A2.T
Ignoremos db2. (Lo siento no lo siento ;) )
dZ1 = W2.T * dZ2. * g1 '(Z1)
...
El problema que ves está en negrita. El cálculo de dZ1 (que se requiere para calcular dW1) tiene W2, que es 0. Nunca tuvimos la oportunidad de cambiar los pesos a algo más allá de 0 y nunca lo haremos. Entonces, esencialmente, la red neuronal no aprende nada. Creo que es peor que la regresión logística (unidad única). En el caso de la regresión logística, aprendes con más iteraciones ya que obtienes diferentes entradas gracias a X. En este caso, las otras capas siempre dan el mismo resultado, por lo que no aprendes nada.
fuente
Aprendí una cosa: si inicializas el peso a ceros, es obvio que las unidades de activación en la misma capa serán las mismas, eso significa que tendrán los mismos valores. Cuando retroceda, encontrará que todas las filas del gradiente dW también son iguales, por lo tanto, todas las filas de la matriz de peso W son iguales después de las actualizaciones del descenso del gradiente. En general, la inicialización de todos los pesos a cero da como resultado que la red no rompa la simetría. Esto significa que cada neurona en cada capa aprenderá lo mismo, y también podría estar entrenando una red neuronal
n[l]=1n[l]=1
para cada capa, y la red no es más poderosa que un clasificador lineal como la regresión logística. Curso de Andrew Ng:fuente