¿Qué calcula la capa oculta en una red neuronal?

187

Estoy seguro de que muchas personas responderán con enlaces para 'déjame buscar eso en Google', así que quiero decir que he tratado de resolver esto, así que perdona mi falta de comprensión aquí, pero no puedo entender cómo La implementación práctica de una red neuronal realmente funciona.

Entiendo la capa de entrada y cómo normalizar los datos, también entiendo la unidad de sesgo, pero cuando se trata de la capa oculta, cuál es el cálculo real en esa capa y cómo se asigna a la salida es un poco confuso. He visto diagramas con signos de interrogación en la capa oculta, funciones booleanas como AND / OR / XOR, funciones de activación y nodos de entrada que se asignan a todas las unidades ocultas y nodos de entrada que se asignan solo a unas pocas unidades ocultas cada una y así Solo tengo algunas preguntas sobre el aspecto práctico. Por supuesto, una explicación simple de todo el proceso de la red neuronal, como le explicaría a un niño, sería increíble.

¿Qué cálculos se realizan en la capa oculta?

¿Cómo se asignan esos cálculos a la capa de salida?

¿Cómo funciona la capa de salida? ¿Desnormalizar los datos de la capa oculta?

¿Por qué algunas capas en la capa de entrada están conectadas a la capa oculta y otras no?

FAtBalloon
fuente
13
La gente de por aquí es amable, nunca he visto una respuesta "déjame buscar eso en Google", pero muchas respuestas sorprendentemente exhaustivas y perspicaces a lo que al principio parecían ser preguntas básicas. Desafortunadamente, no puedo ayudarte con el tuyo, pero parece bastante relevante, así que felizmente lo votaré.
Gala
44
Gracias por el comentario y el voto Gael, probablemente estoy un poco cansado de la comunidad SO, ya que todos sabemos cómo esas personas pueden llegar :) Me alegra ver más espíritu de colaboración aquí en lugar de tratar de ganar insignias y puntos editando / cerrando preguntas.
FAtBalloon
1
No soy un experto en redes neuronales específicamente, aunque sí me involucro en sus aplicaciones y métodos. Mi respuesta quizás no tan útil sería que los cálculos específicos en lo oculto dependen de la 'función de costo' que está imponiendo en su salida, es decir, lo que intenta lograr. Por ejemplo, si desea agrupar los elementos de entrada en conjuntos agrupados, calculará las distancias entre los elementos en la capa oculta. Esto puede pasar por varias iteraciones y ciclos de optimización dentro de esta capa, hasta que cumpla con un criterio de error que permita que el proceso 'abandone' esta capa.
Lucozade

Respuestas:

230

Versión de tres oraciones:

  • Cada capa puede aplicar cualquier función que desee a la capa anterior (generalmente una transformación lineal seguida de una no linealidad de aplastamiento).

  • El trabajo de las capas ocultas es transformar las entradas en algo que la capa de salida pueda usar.

  • La capa de salida transforma las activaciones de la capa oculta en la escala en la que desea que esté su salida.

Como si tuvieras 5:

Si desea que una computadora le diga si hay un autobús en una imagen, la computadora podría tener un tiempo más fácil si tuviera las herramientas adecuadas.

Por lo tanto, su detector de autobús puede estar hecho de un detector de ruedas (para ayudarlo a decir que es un vehículo) y un detector de caja (ya que el autobús tiene la forma de una caja grande) y un detector de tamaño (para decirle que es demasiado grande para ser un automóvil ) Estos son los tres elementos de su capa oculta: no son parte de la imagen en bruto, son herramientas que diseñó para ayudarlo a identificar buses.

Si los tres detectores se encienden (o tal vez si están especialmente activos), entonces hay una buena posibilidad de que tenga un autobús frente a usted.

Las redes neuronales son útiles porque hay buenas herramientas (como la propagación hacia atrás) para construir muchos detectores y armarlos.


Como si fueras un adulto

Una red neuronal de avance aplica una serie de funciones a los datos. Las funciones exactas dependerán de la red neuronal que esté utilizando: con mayor frecuencia, estas funciones calculan una transformación lineal de la capa anterior, seguida de una no linealidad aplastante. Algunas veces las funciones harán algo más (como calcular funciones lógicas en sus ejemplos, o promediar sobre píxeles adyacentes en una imagen). Entonces, los roles de las diferentes capas podrían depender de las funciones que se están calculando, pero trataré de ser muy general.

xhyfxhghy

f(x)g(f(x))

fg

g(f(x))fg


Un ejemplo con funciones lógicas:

fg

Funciones de primera capa:

  • Asegúrese de que al menos un elemento sea "VERDADERO" (usando OR)
  • Asegúrese de que no todos sean "VERDADEROS" (usando NAND)

Función de segunda capa:

  • Asegúrese de que se cumplan los dos criterios de la primera capa (usando AND)

La salida de la red es solo el resultado de esta segunda función. La primera capa transforma las entradas en algo que la segunda capa puede usar para que toda la red pueda realizar XOR.


Un ejemplo con imágenes:

La diapositiva 61 de esta charla, también disponible aquí como una sola imagen, muestra (una forma de visualizar) lo que buscan las diferentes capas ocultas en una red neuronal en particular.

La primera capa busca piezas cortas de bordes en la imagen: estos son muy fáciles de encontrar a partir de datos de píxeles en bruto, pero no son muy útiles por sí mismos para decirle si está mirando una cara, un autobús o un elefante. .

La siguiente capa compone los bordes: si los bordes de la capa oculta inferior se ajustan de cierta manera, entonces uno de los detectores de ojos en el medio de la columna más a la izquierda podría encenderse. Sería difícil crear una sola capa que fuera tan buena para encontrar algo tan específico a partir de los píxeles sin procesar: los detectores de ojos son mucho más fáciles de construir con detectores de borde que con píxeles sin procesar.

La siguiente capa compone los detectores de ojos y los detectores de nariz en caras. En otras palabras, estos se iluminarán cuando los detectores oculares y los detectores nasales de la capa anterior se enciendan con los patrones correctos. Estos son muy buenos para buscar tipos particulares de caras: si una o más de ellas se iluminan, la capa de salida debe informar que hay una cara presente.

Esto es útil porque los detectores faciales son fáciles de construir con detectores oculares y nasales, pero realmente difíciles de construir con intensidades de píxeles.

Por lo tanto, cada capa lo lleva más y más lejos de los píxeles sin procesar y más cerca de su objetivo final (por ejemplo, detección de rostros o detección de bus).


Respuestas a otras preguntas variadas

"¿Por qué algunas capas en la capa de entrada están conectadas a la capa oculta y otras no?"

Los nodos desconectados en la red se denominan nodos de "sesgo". Hay una muy buena explicación aquí . La respuesta corta es que son como términos de intercepción en regresión.

"¿De dónde vienen las imágenes del" detector de ojos "en el ejemplo de imagen?"

No he verificado dos veces las imágenes específicas a las que he vinculado, pero en general, estas visualizaciones muestran el conjunto de píxeles en la capa de entrada que maximizan la actividad de la neurona correspondiente. Entonces, si pensamos en la neurona como un detector ocular, esta es la imagen que la neurona considera más parecida a un ojo. La gente generalmente encuentra estos conjuntos de píxeles con un procedimiento de optimización (escalada).

En este artículo de algunas personas de Google con una de las redes neuronales más grandes del mundo, muestran una neurona de "detector de rostros" y una neurona de "detector de gatos" de esta manera, así como una segunda forma: también muestran las imágenes reales que activan el neurona más fuertemente (figura 3, figura 16). El segundo enfoque es bueno porque muestra cuán flexible y no lineal es la red: estos "detectores" de alto nivel son sensibles a todas estas imágenes, a pesar de que no parecen particularmente similares a nivel de píxeles.


Avíseme si algo aquí no está claro o si tiene más preguntas.

David J. Harris
fuente
2
Entonces, ¿hay un solo algoritmo definido para cada nodo en una capa determinada y los pesos son los que hacen que las salidas sean diferentes? ¿O puede programar cada nodo en la capa para que sea diferente?
FAtBalloon
3
@GeorgeMcDowd esto llega al tema clave: mirar píxeles e identificar buses es difícil, como sugirió. Afortunadamente, mirar píxeles y encontrar bordes es fácil: eso es todo lo que intenta hacer la primera capa oculta. La siguiente capa intenta hacer inferencias basadas en bordes, lo cual es mucho más fácil que intentar hacerlo en base a píxeles.
David J. Harris
44
¡SO debería darle otra recompensa (además de puntos) por el tiempo y el esfuerzo que dedica a esta respuesta!
samsamara 01 de
1
@JoshuaEnfield Creo que la lógica en la década de 1980 fue una combinación de ser similar a cómo la gente pensaba que funcionaba el cerebro, que era diferenciable en todas partes y que los valores estaban limitados como usted mencionó. Desde entonces, la gente ha descubierto que f(x) = max(x, 0)(la "unidad lineal rectificada") a menudo funciona mejor, a pesar de que no tiene muchas de esas propiedades.
David J. Harris
2
El ejemplo del bus y la cadena de funciones simplemente lo lograron. No entiendo por qué los libros de texto no pueden ser tan descriptivos.
drecute
12

Intentaré agregar a la descripción operativa intuitiva ...

Una buena forma intuitiva de pensar sobre una red neuronal es pensar en lo que intenta hacer un modelo de regresión lineal. Una regresión lineal tomará algunas entradas y generará un modelo lineal que toma cada valor de entrada multiplicado por algunos coeficientes de ponderación óptimos del modelo e intenta asignar la suma de esos resultados a una respuesta de salida que coincida estrechamente con la salida real. Los coeficientes se determinan al encontrar los valores que minimizarán algunas métricas de error entre el valor de salida deseado y el valor que aprende el modelo. Otra forma de decirlo es que el modelo lineal intentará crear multiplicadores de coeficientes para cada entrada y sumarlos todos para tratar de determinar la relación entre los valores de entrada (múltiple) y (típicamente único) de salida. Ese mismo modelo casi puede considerarse como el bloque de construcción básico de una red neuronal;

Pero el perceptrón de una sola unidad tiene una pieza más que procesará la suma de los datos ponderados de manera no lineal. Por lo general, utiliza una función de aplastamiento (sigmoide o tanh) para lograr esto. Entonces tiene la unidad básica de la capa oculta, que es un bloque que sumará un conjunto de entradas ponderadas; luego pasa la respuesta sumada a una función no lineal para crear una respuesta de nodo de salida (capa oculta). La unidad de sesgo es igual que en la regresión lineal, un desplazamiento constante que se agrega a cada nodo para ser procesado. Debido al bloque de procesamiento no lineal, ya no está limitado a respuestas solo lineales (como en el modelo de regresión lineal).

Bien, pero cuando tiene muchas de las unidades de perceptrón individuales trabajando juntas, cada una puede tener diferentes multiplicadores de peso de entrada y diferentes respuestas (a pesar de que TODOS procesan el mismo conjunto de entradas con el mismo bloque no lineal descrito anteriormente). Lo que hace que las respuestas sean diferentes es que cada una tiene pesos de coeficientes diferentes que la red neuronal aprende a través del entrenamiento (algunas formas incluyen descenso de gradiente). El resultado de todos los perceptrones se procesa nuevamente y se pasa a una capa de salida, tal como se procesaron los bloques individuales. La pregunta entonces es cómo se determinan los pesos correctos para todos los bloques.

Una forma común de aprender los pesos correctos es comenzando con pesos aleatorios y midiendo la respuesta de error entre la salida real real y la salida del modelo aprendido. El error generalmente se transmitirá hacia atrás a través de la red y el algoritmo de retroalimentación aumentará o disminuirá individualmente esos pesos en cierta proporción al error. La red repetirá repetidamente pasando hacia adelante, midiendo la respuesta de salida, luego actualizando (pasando ajustes de peso hacia atrás) y corrigiendo los pesos hasta que se alcance un nivel de error satisfactorio. En ese momento, tiene un modelo de regresión que puede ser más flexible que un modelo de regresión lineal, es lo que comúnmente se llama un aproximador de función universal.

Una de las formas que realmente me ayudó a aprender cómo funciona realmente una red neuronal es estudiar el código de una implementación de red neuronal y construirlo. Una de las mejores explicaciones del código básico se puede encontrar en el capítulo de la red neuronal (disponible gratuitamente) 'La guía del científico e ingeniero para DSP' Ch. 26. Está escrito principalmente en un lenguaje muy básico (creo que fue fortran) que realmente te ayuda a ver lo que está sucediendo.

palmadita
fuente
12

Voy a describir mi visión de esto en dos pasos: el paso de entrada a oculto y el paso de oculto a salida. Primero haré el paso oculto a la salida porque me parece menos interesante (para mí).

Oculto a la salida

La salida de la capa oculta podría ser diferente, pero por ahora supongamos que provienen de funciones de activación sigmoideas . Por lo tanto, son valores entre 0 y 1, y para muchas entradas pueden ser solo 0 y 1.

Me gusta pensar en la transformación entre las salidas de estas neuronas ocultas y la capa de salida como solo una traducción (en el sentido lingüístico, no en el sentido geométrico). Esto es ciertamente cierto si la transformación es invertible , y si no, entonces algo se perdió en la traducción. Pero básicamente solo tienes las salidas de las neuronas ocultas vistas desde una perspectiva diferente.

Entrada a oculto

Digamos que tiene 3 neuronas de entrada (solo para poder escribir fácilmente algunas ecuaciones aquí) y algunas neuronas ocultas. Cada neurona oculta obtiene como entrada una suma ponderada de entradas, por ejemplo, tal vez

hidden_1 = 10 * (input_1) + 0 * (input_2) + 2 * (input_3)

Esto significa que el valor de hidden_1es muy sensible al valor de input_1, nada sensible input_2y solo ligeramente sensible a input_3.

Entonces podría decir que hidden_1está capturando un aspecto particular de la entrada, lo que podría llamar el input_1aspecto " es importante".

La salida de hidden_1generalmente se forma al pasar la entrada a través de alguna función, así que digamos que está usando una función sigmoide . Esta función adquiere valores entre 0 y 1; así que piense en ello como un interruptor que dice que o input_1es importante o no lo es.

¡Entonces eso es lo que hace la capa oculta! Extrae aspectos o características del espacio de entrada.

¡Ahora los pesos también pueden ser negativos! Lo que significa que puede obtener aspectos como " input_1es importante PERO TAMBIÉN input_2quita esa importancia":

hidden_2 = 10 * (input_1) - 10 * (input_2 ) + 0 * (input_3)

o input_1y input_3tienen importancia "compartida":

hidden_3 = 5 * (input_1) + 0 * (input_2) + 5 * (input_3)

Más geometría

Si conoce algo de álgebra lineal, puede pensar geométricamente en términos de proyección a lo largo de ciertas direcciones. En el ejemplo anterior, proyecté a lo largo de la input_1dirección.

Miremos de hidden_1nuevo, desde arriba. Una vez que el valor en input_1es lo suficientemente grande, la salida de la función de activación sigmoidea solo se mantendrá en 1, no aumentará . En otras palabras, más y más input_1no harán ninguna diferencia en la salida. Del mismo modo, si se mueve en la dirección opuesta (es decir, negativa), luego de un punto la salida no se verá afectada.

Está bien. Pero supongamos que no queremos sensibilidad en la dirección del infinito en cierta dirección, y queremos que se active solo para un cierto rango en una línea. Lo que significa que para valores muy negativos no hay efecto, y para valores muy positivos no hay efecto, pero para valores entre, por ejemplo, 5 y 16, desea que se active. Aquí es donde usaría una función de base radial para su función de activación.

Resumen

La capa oculta extrae las características del espacio de entrada, y la capa de salida las traduce al contexto deseado. Puede haber mucho más que esto, con las redes multicapa y demás, pero esto es lo que entiendo hasta ahora.

EDITAR: Esta página con sus maravillosos gráficos interactivos hace un mejor trabajo que mi larga y engorrosa respuesta anterior: http://neuralnetworksanddeeplearning.com/chap4.html

Rohit Chatterjee
fuente
1
Al igual que el OP, estoy un poco confundido acerca de la capa oculta en las redes neuronales. En su ejemplo, ¿cómo encuentra el algoritmo NN los pesos de las neuronas hidden_1, hidden_2 y hidden_3? Y dado que hidden_1, hidden_2 y hidden_3 se derivan de las mismas variables de entrada, ¿los pesos no convergerían en la misma solución?
RobertF
5

Tomemos el caso de la clasificación. Lo que la capa de salida intenta hacer es estimar la probabilidad condicional de que su muestra pertenezca a una clase dada, es decir, qué tan probable es que esa muestra pertenezca a una clase dada. En términos geométricos, la combinación de capas de manera no lineal a través de las funciones de umbral permite que las redes neuronales resuelvan problemas no convexos (reconocimiento de voz, reconocimiento de objetos, etc.), que son los más interesantes. En otras palabras, las unidades de salida pueden generar funciones de decisión no convexas como las que se muestran aquí .

Se pueden ver las unidades en capas ocultas como características complejas de los datos que permiten que la capa de salida pueda distinguir mejor una clase de otra, para generar límites de decisión más precisos. Por ejemplo, en el caso del reconocimiento facial, las unidades en las primeras capas aprenden características similares a los bordes (detectan bordes en orientaciones y posiciones determinadas) y las capas superiores aprenden a combinarlas para convertirse en detectores de características faciales como la nariz, la boca o los ojos. Los pesos de cada unidad oculta representan esas características, y su salida (suponiendo que sea un sigmoide) representa la probabilidad de que esa característica esté presente en su muestra.

En general, el significado de las salidas de salida y las capas ocultas depende del problema que está tratando de resolver (regresión, clasificación) y la función de pérdida que emplea (entropía cruzada, errores de mínimos cuadrados, ...)

jpmuc
fuente