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]
- ¿Hay algunos aspectos de la inteligencia artificial que NO DEBEMOS desarrollar, para que nuestras máquinas no nos esclavicen? Si es así, ¿cuáles son esos?
- ¿Qué pasa si las prostitutas son reemplazadas por robots?
- ¿Cuál es el futuro de la lingüística?
- ¿Cómo es la regresión logística un caso especial de Markov Logic Networks?
- ¿En qué asesor de IA invertirías?
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