Cómo implementar un abandono en redes neuronales profundas

Tomemos un ejemplo en el que desea utilizar un coeficiente de abandono de 0.5 en la capa 2 de su red.

Durante el entrenamiento:
Las salidas / activaciones de la capa 2 se multiplican por elementos con una máscara binaria donde la probabilidad de que cada elemento de la máscara sea 1 es 0.5 (de lo contrario, cero):

Sin abandono: [matemáticas] y_2 = f (z_2) [/ matemáticas]
Con deserción: [matemáticas] y_2 = f (z_2) \ circ m_2 [/ matemáticas]

donde [math] f () [/ math] es la función de activación (por ejemplo, tanh o ReLU), [math] \ circ [/ math] es una operación de multiplicación por elementos, [math] z_2 [/ math] es el vector de entrada de capa 2, [math] m_2 [/ math] es la máscara de deserción binaria y [math] y_2 [/ math] es el vector de salida / activación de la capa 2.

Durante las pruebas / validación:
Ingresa [math] z_3 [/ math] a la capa 3 se calculan de la siguiente manera:

Sin abandono: [math] z_3 = W_3 y_2 [/ math]
Con abandono: [matemática] z_3 = 0.5 W_3 y_2 [/ matemática]

donde [math] y_2 [/ math] es el vector de salida / activación de la capa 2 y 0.5 es el coeficiente de caída de la capa 2

Durante la propagación hacia atrás:

Con la deserción, debe multiplicar la derivada de [math] y_2 [/ math] wrt. [math] z_2 [/ math] con la misma máscara de omisión [math] m_2 [/ math] que usó durante la propagación hacia adelante.


Un pequeño ejemplo de código:

(el resto está disponible aquí)

def adelante (x, W1, W2, W3, entrenamiento = Falso):
z1 = np.dot (x, W1)
y1 = np.tanh (z1)

z2 = np.dot (y1, W2)
y2 = np.tanh (z2)
# Abandono en la capa 2
si entrenando:
m2 = np.random.binomial (1, 0.5, size = z2.shape)
más:
m2 = 0.5
y2 * = m2

z3 = np.dot (y2, W3)
y3 = z3 # salida lineal

devuelve y1, y2, y3, m2

def hacia atrás (x, y1, y2, y3, m2, t, W1, W2, W3):
dC_dz3 = dC (y3, t)
dC_dW3 = np.dot (y2.T, dC_dz3)
dC_dy2 = np.dot (dC_dz3, W3.T)

dC_dz2 = dC_dy2 * dtanh (y2) * m2
dC_dW2 = np.dot (y1.T, dC_dz2)
dC_dy1 = np.dot (dC_dz2, W2.T)

dC_dz1 = dC_dy1 * dtanh (y1)
dC_dW1 = np.dot (xT, dC_dz1)

devuelve dC_dW1, dC_dW2, dC_dW3

More Interesting

¿Cuánto de la canción escrita de AI 'Daddy's Car' es realmente el producto de AI?

¿Cuál es la mejor manera de aprender robótica completa? ¿Cómo obtengo los conocimientos básicos de robótica para poder construir cualquier tipo de robot?

¿Hay alguna forma de poner información extraída de OCR en diferentes campos de una base de datos?

¿Cuál es un buen libro para comenzar a aprender sobre el desarrollo de un sistema de aprendizaje automático / IA?

¿Qué lenguajes de programación necesitas saber para crear una IA de aprendizaje profundo?

¿Se puede construir un dispositivo que sienta y comprenda el significado sin usar componentes biológicos? Si es así, ¿por dónde empezarías?

¿Hay ejemplos en los que se usa el aprendizaje profundo (ConvNets, etc.) en combinación con el aprendizaje automático clásico?

¿Cuál es la visión de Marvin Minsky sobre el aprendizaje profundo?

¿Qué requisitos tendría que cumplir la inteligencia artificial para ser considerado vivo?

Las tareas de aprendizaje automático de Andrew Ng's Coursera se implementan utilizando MATLAB / Octave. ¿Está desactualizado? Porque ahora usamos principalmente Python para implementar algoritmos de aprendizaje automático.

¿Terminará este 'boom' de programación algún día? ¿La programación algún día será automática?

¿Por qué la notación de optimización de aprendizaje automático estándar considera cada peso individual en lugar de una matriz de peso completa por actualización?

¿Cómo se puede optimizar un sistema si la variable principal de la función objetivo se modela a través de un modelo de Machine Learning?

¿Qué piensas sobre OpenAI?

¿El mercado para las compañías de IA o está saturado? ¿Hay alguna necesidad clara que no se haya satisfecho?