una tipos redes paso neuronales neuronal libreria implementacion hacer entrenamiento ejemplos como machine-learning neural-network probability classification

machine-learning - tipos - redes neuronales python pdf



Probabilidad y redes neuronales (3)

Debe elegir la función de pérdida correcta para minimizar. El error al cuadrado no conduce a la hipótesis de máxima verosimilitud aquí. El error cuadrado se deriva de un modelo con ruido gaussiano:

P(y|x,h) = k1 * e**-(k2 * (y - h(x))**2)

Usted estima las probabilidades directamente. Tu modelo es:

P(Y=1|x,h) = h(x) P(Y=0|x,h) = 1 - h(x)

P (Y = 1 | x, h) es la probabilidad de que el evento Y = 1 ocurra después de ver x.

La hipótesis de máxima verosimilitud para su modelo es:

h_max_likelihood = argmax_h product( h(x)**y * (1-h(x))**(1-y) for x, y in examples)

Esto conduce a la función de pérdida "entropía cruzada". Consulte el capítulo 6 en Aprendizaje automático de Mitchell para conocer la función de pérdida y su derivación.

¿Es una buena práctica usar capas de salida sigmoides o tanh en redes neuronales directamente para estimar las probabilidades?

es decir, la probabilidad de que ocurra una entrada dada es la salida de la función sigmoide en la NN

EDITAR
Quería usar la red neuronal para aprender y predecir la probabilidad de que ocurra una entrada determinada. Puede considerar la entrada como una tupla State1-Action-State2. Por lo tanto, la salida de NN es la probabilidad de que State2 ocurra cuando se aplica Action en State1 ..

Espero que eso aclare las cosas ..

EDITAR
Cuando entreno a NN, hago una acción aleatoria sobre el estado1 y observo el estado resultante2; luego enseñe a NN que la entrada State1-Action-State2 debe dar como resultado la salida 1.0


Hay un problema con este enfoque: si tiene vectores de R ^ n y su red asigna esos vectores al intervalo [0, 1], no se garantizará que la red represente una función de densidad de probabilidad válida, ya que la integral de No se garantiza que la red sea igual a 1.

Por ejemplo, una red neuronal podría asignar cualquier forma de entrada R ^ n a 1.0. Pero eso claramente no es posible.

Entonces la respuesta a tu pregunta es: no, no puedes.

Sin embargo, solo puede decir que su red nunca ve ejemplos de código "irreales" y, por lo tanto, ignorar este hecho. Para una discusión de esto (y también más información interesante sobre cómo modelar archivos PDF con redes neuronales) vea backprop contrastivo .


Primero, solo un par de pequeños puntos en el léxico MLP convencional (podría ayudar en búsquedas en Internet, etc.): ''sigmoid'' y ''tanh'' no son ''capas de salida'' sino funciones, generalmente denominadas "funciones de activación". El valor de retorno de la función de activación es de hecho la salida de cada capa, pero no son la capa de salida en sí (ni calculan las probabilidades).

Además, su pregunta recita una elección entre dos "alternativas" ("sigmoide y tanh"), pero en realidad no son alternativas, más bien el término "función sigmoidal" es un término genérico / informal para una clase de funciones, que incluye la hiperbólica. tangente (''tanh'') a la que te refieres.

El término ''sigmoidal'' se debe probablemente a la forma característica de la función: los valores de retorno (y) están restringidos entre dos valores asintóticos independientemente del valor de x. La salida de la función suele normalizarse, de modo que estos dos valores son -1 y 1 (o 0 y 1). (Este comportamiento de salida, por cierto, está obviamente inspirado en la neurona biológica que dispara (+1) o no (-1)). Una mirada a las propiedades clave de las funciones sigmoidales y puede ver por qué son ideales como funciones de activación en redes neuronales de avance hacia atrás y propagación hacia atrás: (i) valor real y diferenciable, (ii) que tienen exactamente un punto de inflexión, y ( iii) tener un par de asíntotas horizontales.

A su vez, la función sigmoidal es una categoría de funciones que se utiliza como función de activación (también conocida como "función de aplastamiento") en las redes neuronales FF resueltas con backprop. Durante el entrenamiento o la predicción, la suma ponderada de las entradas (para una capa dada, una capa a la vez) se pasa como un argumento a la función de activación que devuelve la salida para esa capa. Otro grupo de funciones aparentemente utilizadas como la función de activación es la función lineal por partes. La función de paso es la variante binaria de un PLF:

def step_fn(x) : if x <= 0 : y = 0 if x > 0 : y = 1

(En la práctica, dudo que la función de paso sea una opción plausible para la función de activación, pero quizás ayude a comprender el propósito de la función de activación en la operación NN).

Supongo que hay un número ilimitado de posibles funciones de activación, pero en la práctica, solo ves un puñado; de hecho, solo dos explican la gran mayoría de los casos (ambos son sigmoidales). Aquí están (en python) para que puedas experimentar por ti mismo, dado que el criterio de selección principal es práctico:

# logistic function def sigmoid2(x) : return 1 / (1 + e**(-x)) # hyperbolic tangent def sigmoid1(x) : return math.tanh(x)

¿Cuáles son los factores a considerar al seleccionar una función de activación?

Primero, la función tiene que dar el comportamiento deseado (que surja de o como lo demuestra la forma sigmoidal). En segundo lugar, la función debe ser diferenciable. Este es un requisito para la propagación hacia atrás, que es la técnica de optimización utilizada durante el entrenamiento para "completar" los valores de las capas ocultas.

Por ejemplo, la derivada de la tangente hiperbólica es (en términos de la salida, que es la forma en que normalmente se escribe):

def dsigmoid(y) : return 1.0 - y**2

Más allá de estos dos requisitos, ¿qué hace que una función entre una y otra sea la eficiencia con que entrena la red, es decir, cuál provoca la convergencia (que alcanza el error mínimo local) en la menor cantidad de épocas?

# -------- Editar (ver el comentario de OP a continuación) --------- #

No estoy muy seguro de haberlo entendido; a veces es difícil comunicar los detalles de una NN, sin el código, así que probablemente debería decir que está bien sujeto a esta condición: lo que usted quiere que predice la NN debe ser el mismo que el Variable dependiente utilizada durante el entrenamiento. Por ejemplo, si entrena a su NN usando dos estados (por ejemplo, 0, 1) como variable dependiente única (que obviamente falta en sus datos de prueba / producción), entonces eso es lo que su NN devolverá cuando se ejecute en "modo de predicción" (post entrenamiento, o con una matriz de peso competente).