¿Cuál es la explicación simple del algoritmo de perceptrón multicapa en aprendizaje automático / minería de datos?

Aquí está mi respuesta copiada de ¿Podría alguien explicar cómo crear una red neuronal artificial de una manera simple y concisa que no requiera un doctorado en matemáticas?

Cuando aprende a leer, primero tiene que reconocer letras individuales, luego combinar letras en palabras, luego palabras en oraciones. Cuando eres bueno leyendo, por ejemplo, inglés, es fácil reconocer palabras directamente sin siquiera pensar en las letras. En fcat, puedes criar fácilmente wrods jmubled.

Las redes neuronales están diseñadas para hacer lo mismo. Una regresión logística o un árbol de decisión solo pueden ver los atributos básicos que usted introduce en el algoritmo, mientras que una red neuronal puede tener varios pasos intermedios que combinan sus atributos básicos en conceptos de nivel superior.

Entonces, ¿cómo hace esto una red neuronal? Mediante el uso del concepto de capas ocultas.

La idea es que cada nodo en la capa Oculta es una función de los nodos en la capa anterior, y el nodo Salida es una función de los nodos en la capa Oculta. Si usamos la siguiente notación:

Capa de entrada = [matemáticas] en_1, …, en_4 [/ matemáticas]

Capa oculta = [matemática] hid_1,…, hid_4 [/ matemática]

Salida = [math] out_1 [/ math]

La opción más común de función es algo como:

[math] hid_1 = [/ math] [math] tanh (a_ {11} \ cdot in_1 + a_ {12} \ cdot in_2 +… + a_ {14} \ cdot in_4) [/ math]

[math] hid_2 = [/ math] [math] tanh (a_ {21} \ cdot in_1 + a_ {22} \ cdot in_2 +… + a_ {24} \ cdot in_4) [/ math]

y así. Así que ahora el truco es encontrar el mejor conjunto de pesos (los mejores [math] a_ {ij} [/ math] ‘s). Gradient Descent [1] nos da una manera de calcular los mejores pesos si conocemos las derivadas parciales , y la retropropagación [2] nos da una forma de calcular las derivadas parciales. Combine los dos, y tendrá la implementación más común de las redes neuronales.

Las redes neuronales se pueden generalizar de algunas maneras interesantes. Una es mediante el uso de múltiples capas ocultas. En ese caso, cada nodo en la capa [matemática] i [/ matemática] se crea a partir de los nodos en la capa [matemática] i-1 [/ matemática].

[1]: descenso de gradiente estocástico
[2]: propagación hacia atrás

Las redes neuronales de varias capas se utilizan esencialmente para tratar con conjuntos de datos que tienen una gran cantidad de características, especialmente las no lineales. Intuitivamente, cuantas más capas ocultas tenga, más formas “complejas” puede caber.

Tomemos un ejemplo de [math] y = x_1 \ text {XNOR} x_2 [/ math] cuando la entrada es binaria.
Tenga en cuenta que este no es un clasificador lineal simple. (no se puede separar usando una línea)

Dado que [math] x_1 \ text {XNOR} x_2 = (x_1 \ cdot x_2) + (\ bar {x_1} \ cdot \ bar {x_2}) [/ math], podemos encontrar clasificadores para estas funciones ‘más simples’ (Y, O, NO) y combinarlos para formar nuestro clasificador más complejo.

Afortunadamente, los tres se pueden hacer sin capas ocultas utilizando la función logística sigmoidea.
La función sigmoidea ([matemática] g [/ matemática]) se aproxima a 1 cuando x es positivo y 0 cuando x es negativo, y es igual a 0.5 cuando x es 0. Este comportamiento lo hace útil para su uso en problemas de clasificación.

Por ejemplo, para [math] y = x_1 \ cdot x_2 [/ math],
[mates]
\ Theta ^ {(1)} = \ begin {bmatrix}
-30 y 20 y 20
\ end {bmatrix}
[/mates]
que es igual a [matemáticas] y = g (x) = g (-30 + 20 \ veces x_1 + 20 \ veces x_2) [/ matemáticas]
La salida es (cercana a) 1 solo cuando el parámetro de la función sigmoide es mayor que cero, lo cual es cierto cuando ambas entradas son altas, que es cómo se comportan las compuertas AND.

Del mismo modo, para [matemáticas] y = x_1 + x_2 [/ matemáticas],
[mates]
\ Theta ^ {(1)} = \ begin {bmatrix}
-10 y 20 y 20
\ end {bmatrix}
[/mates]

Ahora podemos combinar estos dos para [math] y = x_1 \ text {XNOR} x_2 [/ math]. A diferencia de AND y OR, el clasificador XNOR no se puede formar sin una capa oculta, por lo que necesitaríamos agregar una.

Primero, obtenemos
[mates]
\ Theta ^ {(1)} = \ begin {bmatrix}
-30 y 20 y 20; \\ \\
10 y -20 y -20
\ end {bmatrix}
[/mates]
que es solo [math] a_1 = (x_1 \ cdot x_2) \ text {and} a_2 = (\ bar {x_1} \ cdot \ bar {x_2}) [/ math] por separado. (la segunda fila son los pesos para OR multiplicados por -1, usando el teorema de de moivre) Por lo tanto, tenemos dos unidades en nuestra capa oculta.
Ahora, para la capa oculta, obtenemos
[mates]
\ Theta ^ {(2)} = \ begin {bmatrix}
-10 y 20 y 20
\ end {bmatrix}
[/mates]
que es [math] y = a_1 \ cdot a_2 [/ math], completando nuestro clasificador.

Por lo tanto, al agregar una capa oculta, podríamos hacer un clasificador usando una función que fuera algo más compleja que las que se usaban cuando no teníamos una capa oculta.

Sin embargo, agregar demasiados también puede llevarnos a problemas: el clasificador puede sobreajustar el conjunto de entrenamiento (ver Sesgo vs.Variancia), y también hace que sea más costoso calcularlo.

En resumen, la capa oculta proporciona no linealidad. Puede pensar en cada neurona oculta como una regresión logística única. Cada regresión logística tiene un límite de decisión lineal. Con más de una línea lineal, no paralela, puede dibujar un límite convexo: más líneas, más flexibilidad. El límite combinado es la capa de salida final. (una respuesta simple a un algoritmo que ya no se usa)