desviación estándar
En este caso,
Una de las razones por las que la normalización ayuda al aprendizaje del descenso de gradiente es que el optimizador tiene que realizar menos pasos para encontrar una buena u óptima solución (el mínimo coste global), como se muestra en la siguiente figura, donde las dos imágenes representan la superficie de coste como una función de dos pesos modelo en un problema de clasificación bidimensional:
La normalización se puede conseguir fácilmente mediante el método integrado de NumPy mean y std:
>>> X_std = np.copy(X)
>>> X_std[:,0] = (X[:,0] - X[:,0].mean()) / X[:,0].std()
>>> X_std[:,1] = (X[:,1] - X[:,1].mean()) / X[:,1].std()
Tras la normalización, volveremos a entrenar Adaline y veremos que ahora converge después de un pequeño número de épocas con un rango de aprendizaje
>>> ada = AdalineGD(n_iter=15, eta=0.01)
>>> ada.fit(X_std, y)
>>> plot_decision_regions(X_std, y, classifier=ada)
>>> plt.title('Adaline - Gradient Descent')
>>> plt.xlabel('sepal length [standardized]')
>>> plt.ylabel('petal length [standardized]')
>>> plt.legend(loc='upper left')
>>> plt.tight_layout()
>>> plt.show()
>>> plt.plot(range(1, len(ada.cost_) + 1), ada.cost_, marker='o')
>>> plt.xlabel('Epochs')
>>> plt.ylabel('Sum-squared-error')
>>> plt.show()
Una vez ejecutado el código, deberíamos ver una imagen de las regiones de decisión, así como un diagrama del coste decreciente, como se muestra en la siguiente figura:
Como podemos ver en los diagramas, Adaline ahora ha convergido después de entrenar las características normalizadas mediante un rango de aprendizaje
Aprendizaje automático a gran escala y descenso de gradiente estocástico
En la sección anterior, hemos aprendido a minimizar la función de coste dando un paso en la dirección opuesta a un gradiente de coste calculado a partir de un conjunto de entrenamiento completo. Esta es la razón por la que a veces este enfoque también se conoce como descenso de gradiente en lotes. Ahora imaginemos que tenemos un conjunto de datos muy amplio con millones de puntos de datos, cosa bastante frecuente en aplicaciones de aprendizaje automático. En casos como este, ejecutar un descenso de gradiente en lotes puede ser computacionalmente muy costoso, puesto que necesitamos reevaluar todo el conjunto de datos de entrenamiento cada vez que realizamos un paso hacia el mínimo global.
Una conocida alternativa al algoritmo del descenso de gradiente en lotes es el descenso de gradiente estocástico, llamado también a veces «descenso de gradiente online o iterativo». En lugar de actualizar los pesos en base a la suma de los errores acumulados en todas las muestras
Actualizamos los pesos de forma incremental para cada muestra de entrenamiento:
Aunque el descenso de gradiente estocástico se puede considerar como una aproximación al descenso de gradiente, normalmente consigue la convergencia mucho más rápido debido a unas actualizaciones del peso más frecuentes. Como cada gradiente se calcula en base a un único ejemplo de entrenamiento, la superficie de error es más ruidosa que en el descenso de gradiente. El descenso de gradiente estocástico también puede tener la ventaja de que puede escapar de los mínimos locales poco profundos más fácilmente si trabajamos con funciones de coste no lineales, como veremos más adelante en el Capítulo 12, Implementar una red neuronal artificial multicapa desde cero. Para que los resultados sean satisfactorios con el descenso de gradiente estocástico, es importante presentar los datos de entrenamiento en un orden aleatorio; además, nos interesa mezclar los conjuntos de entrenamiento para cada época con el fin de evitar ciclos.
En las implementaciones de descenso de gradiente estocástico, el rango de aprendizaje fijado |
Otra ventaja del descenso de gradiente estocástico es que podemos utilizarlo para aprendizaje online. En el aprendizaje online, nuestro modelo se entrena sobre la marcha al mismo tiempo que van llegando nuevos datos de entrenamiento. Esto resulta especialmente útil si estamos acumulando grandes cantidades de datos, por ejemplo, datos de clientes en aplicaciones web. Con el aprendizaje online, el sistema se puede adaptar de inmediato a los cambios y los datos de entrenamiento pueden ser descartados después de actualizar el modelo si existen problemas con el espacio de almacenamiento.
El equilibrio entre el descenso de gradiente en lotes y el descenso de gradiente estocástico se denomina aprendizaje de minilote. El aprendizaje de minilote puede ser entendido como la aplicación de un descenso de gradiente en lote a subconjuntos más pequeños de datos de entrenamiento; por ejemplo, 32 muestras a la vez. La ventaja sobre el descenso de gradiente en lote es que la convergencia se consigue más rápido mediante minilotes gracias a que las actualizaciones de peso son más frecuentes. Además, el aprendizaje de minilote nos permite sustituir el bucle for en las muestras de entrenamiento en el descenso de gradiente estocástico con operaciones vectorizadas, que pueden mejorar aún más la eficiencia computacional de nuestro algoritmo de aprendizaje. |
Como ya hemos implementado la regla de aprendizaje Adaline con un descenso de gradiente, solo necesitamos realizar