Parámetros dispersos de Autoencoder [Hyper]

8

Acabo de comenzar a usar el paquete autoencoder en R.

Las entradas a la autoencode()función incluyen lambda, beta, rho y epsilon.

¿Cuáles son los límites de estos valores? ¿Varían para cada función de activación? ¿Se llaman estos parámetros "hiperparámetros"?

Suponiendo un autoencoder disperso, ¿rho = .01 es bueno para la función de activación logística y rho = -. 9 es bueno para la función de activación de tangente hiperbólica?

¿Por qué el manual establece epsilon en .001? Si no recuerdo mal, "Efficient Backpropagation" de LeCun recomienda valores iniciales que no están tan cerca de cero.

¿Cuánto importa un valor "bueno" para beta?

¿Existe una "regla general" para elegir el número de nuerones en la capa oculta? Por ejemplo, si las capas de entrada tienen N nodos, ¿es razonable tener 2 N nuerones en la capa oculta?

¿Me puede recomendar alguna literatura sobre el uso práctico de autoencoders?

poder
fuente

Respuestas:

10

El autoencoderpaquete es solo una implementación del autoencoder descrito en las notas de clase de Andrew Ng , lo que podría ser un buen punto de partida para futuras lecturas. Ahora, para abordar sus preguntas.


Las personas a veces distinguen entre parámetros , que el algoritmo de aprendizaje calcula por sí mismo, e hiperparámetros , que controlan ese proceso de aprendizaje y deben proporcionarse al algoritmo de aprendizaje. Es importante darse cuenta de que NO HAY VALORES MÁGICOS para los hiperparámetros. El valor óptimo variará, dependiendo de los datos que esté modelando: deberá probarlos en sus datos.

a) Lambda (λ) controla cómo se actualizan los pesos durante la retropropagación. En lugar de simplemente actualizar los pesos basados ​​en la diferencia entre la salida del modelo y la verdad básica, la función de costo incluye un término que penaliza los pesos grandes (en realidad, el valor al cuadrado de todos los pesos). Lambda controla la importancia relativa de este término de penalización, que tiende a arrastrar los pesos hacia cero y ayuda a evitar el sobreajuste.

b) Rho (ρ) y beta (β) controlar la escasez. Rho es la activación esperada de una unidad oculta (promediada en todo el conjunto de entrenamiento). La representación se volverá más y más escasa a medida que se haga más pequeña. Esta escasez se impone ajustando el término de sesgo, y beta controla el tamaño de sus actualizaciones. (Parece queβ en realidad solo reescala la tasa de aprendizaje general α.)

c) Epsilon (ϵ) controla los valores de peso iniciales, que se extraen al azar de norte(0 0,ϵ2).

Sus valores rho no parecen irrazonables, ya que ambos están cerca del final del rango de la función de activación (0 a 1 para logística, -1 a 1 para tanh). Sin embargo, esto obviamente depende de la cantidad de escasez que desee y del número de unidades ocultas que use también.


La principal preocupación de LeCunn con los pequeños pesos es que la superficie de error se vuelve muy plana cerca del origen si está utilizando un sigmoide simétrico. En otra parte de ese documento, recomienda inicializar con pesos extraídos aleatoriamente de una distribución normal con media cero ymetro-1/ /2 desviación estándar, donde metro es la cantidad de conexiones que recibe cada unidad.


Hay muchas "reglas generales" para elegir el número de unidades ocultas. Su conjetura inicial (entrada 2x) parece estar en línea con la mayoría de ellos. Dicho esto, estas estimaciones son mucho más conjeturas que estimaciones. Suponiendo que tenga la potencia de procesamiento, me equivocaría al lado de más unidades ocultas, luego impondría la escasez con un valor rho bajo.
Un uso obvio de los codificadores automáticos es generar representaciones de características más compactas para otros algoritmos de aprendizaje. Una imagen en bruto puede tener millones de píxeles, pero un autoencoder (escaso) puede representarla en un espacio mucho más pequeño. Geoff Hinton (y otros) han demostrado que generan características útiles para la clasificación posterior. Algunos de los trabajos de aprendizaje profundo utilizan autoencoders o similares para entrenar la red. Vincent y col. use autoencoders directamente para realizar la clasificación.

La capacidad de generar representaciones de características sucintas también se puede utilizar en otros contextos. Aquí hay un pequeño proyecto ordenado donde los estados producidos por autoencoder se utilizan para guiar un algoritmo de aprendizaje de refuerzo a través de los juegos de Atari .

Finalmente, también se pueden usar codificadores automáticos para reconstruir entradas ruidosas o degradadas, por ejemplo , lo que puede ser un fin útil en sí mismo.

Matt Krause
fuente
Gracias. Entonces, ¿cómo es que beta = 6en el autoencodercódigo de ejemplo?
poder
1
Parece que es solo una tasa de aprendizaje / factor de escala. Si observa la ecuación 9 del texto, la actualización de una unidad se escala alfa, pero la actualización de sesgo se escala porαβ. Siβ=6 6, entonces el sesgo se actualiza 6 veces más rápido ...
Matt Krause
1
¡Gracias por aceptar! He estado pensando en algo similar para el trabajo y fue divertido escribirlo. En el futuro, es posible que tenga más suerte haciendo preguntas más pequeñas (por ejemplo, pregunte sobre el rango, los valores iniciales y las unidades ocultas por separado). Parece que a las personas les gustan las respuestas que pueden eliminar en diez minutos.
Matt Krause
Sí, tiene sentido Especialmente si solo tiene 10 minutos de tiempo de inactividad en el trabajo.
poder
2

Una parte de la respuesta de Matt Krause no me parece correcta (Lambda y Beta), tampoco se menciona épsilon. En realidad, esta publicación debería ser un comentario, pero estoy respondiendo la pregunta debido a la restricción de 50 reputación. Siéntase libre de comentar si ve algún error.

De http://web.stanford.edu/class/archive/cs/cs294a/cs294a.1104/sparseAutoencoder.pdf Lambda es un término de coeficiente de pérdida de peso que desalienta a los pesos a alcanzar grandes valores ya que puede sobreajustar. El término de disminución de peso (o término de regularización de peso) es parte de la función de costo, como el término de dispersión que se explica a continuación.

rho es la restricción de dispersión que controla el número promedio de activación en la capa oculta. Se incluye para hacer que el codificador automático funcione incluso con un número relativamente grande de unidades ocultas con respecto a las unidades de entrada. Por ejemplo, si el tamaño de entrada es 100 y el tamaño oculto es 100 o mayor (incluso más pequeño pero cercano a 100), la salida puede construirse sin pérdida alguna, ya que las unidades ocultas pueden aprender la función de identidad. Beta es coeficiente de término de dispersión que es parte de la función de costo. Controla la importancia relativa del término de dispersión. Lambda y Beta especifican la importancia relativa de sus términos en la función de costos.

Epsilon (si han usado la misma notación con Andrew Ng) es un parámetro de regularización para el proceso de blanqueamiento que tiene un efecto de filtro de paso bajo en la entrada. Eso tiene algunos efectos importantes en los métodos de reconstrucción. Verifique el enlace para eso en los modelos basados ​​en reconstrucción. Creo que han usado la activación lineal para la capa de salida y han usado algún tipo de blanqueamiento (características univariantes).

La tasa de actualización de parámetros (pesos y sesgos) se denomina tasa de aprendizaje y denota eta en general. Sin embargo, Andrew Ng lo ha utilizado como alfa. Mira el primer enlace.

yasin.yazici
fuente
Tienes razón: no estaba muy claro sobre lambda y lo hice sonar un poco como la tasa de aprendizaje general. Espero que la edición ayude. Creo que la notación es algo diferente para epsilon. Tanto las notas como el código sugieren que es la desviación estándar de los valores iniciales, que se extraen de N (0,ϵ2)
Matt Krause