A2A.
I. LA GRAN IMAGEN:
Problema que intentamos resolver : dados algunos datos, el objetivo del aprendizaje automático es encontrar patrones en los datos. Hay varios entornos, como aprendizaje supervisado, aprendizaje no supervisado, aprendizaje por refuerzo, etc. Pero el más común es el aprendizaje supervisado; así que vamos a centrarnos solo en eso en el panorama general. Aquí, se le dan datos etiquetados [llamados “datos de entrenamiento”], y desea inferir etiquetas sobre datos nuevos [llamados “datos de prueba”]. Por ejemplo, considere los coches de auto-conducción. Los datos etiquetados incluirían la imagen de la carretera por delante en una instancia particular vista desde el automóvil, y la etiqueta correspondiente sería el ángulo de dirección [supongamos que la velocidad se controla manualmente, para simplificar]. El objetivo del auto manejo es que, dada una nueva imagen de la carretera por delante, el sistema debería poder determinar el ángulo de giro óptimo.
Cómo resolverlo : la mayor parte del aprendizaje automático supervisado se puede ver utilizando el siguiente marco: se le dan puntos de datos de entrenamiento [math] (x_1, y_1), \ ldots, (x_n, y_n) [/ math], donde [math] x_i [/ math] son los datos [por ejemplo, imagen de carretera en el ejemplo anterior], y [math] y_i [/ math] es la etiqueta correspondiente. Desea encontrar una función [math] f [/ math] que se ajuste bien a los datos, es decir, dado que [math] x_i [/ math], genera algo lo suficientemente cerca de [math] y_i [/ math]. Ahora, ¿de dónde obtiene esta función [math] f [/ math]? Una forma, que es la más común en ML, es definir una clase de funciones [math] \ mathcal {F} [/ math], y buscar en esta clase la función que mejor se ajuste a los datos. Por ejemplo, si desea predecir el precio de un apartamento en función de características como el número de habitaciones, el número de baños, el área cubierta, etc., puede suponer razonablemente que el precio es una combinación lineal de todas estas características, en cuyo caso, la clase de función [math] \ mathcal {F} [/ math] se define como la clase de todas las funciones lineales. Para los autos que conducen solos, la clase de función [math] \ mathcal {F} [/ math] que necesitará será mucho más compleja.
Cómo evaluar : Tenga en cuenta que simplemente ajustar los datos de entrenamiento no es suficiente. Los datos son ruidosos: por ejemplo, todos los apartamentos con el mismo número de habitaciones, el mismo número de baños y la misma área cubierta no tienen el mismo precio. De manera similar, si etiqueta datos para autos que conducen por cuenta propia, puede esperar cierta aleatoriedad debido al conductor humano. Lo que necesita es que su marco sea capaz de extraer el patrón e ignorar el ruido aleatorio. En otras palabras, debería funcionar bien con datos invisibles . Por lo tanto, la forma de evaluar los modelos es mantener una parte de los datos de entrenamiento [llamado “conjunto de validación”], y predecir sobre estos datos ocultos para medir qué tan bueno es su modelo.
Ahora, independientemente de lo que estudie en el aprendizaje automático, debe tratar de relacionar los temas con el panorama general anterior. Por ejemplo, en la regresión lineal, la clase de función es lineal y el método de evaluación es la pérdida cuadrada, en la SVM lineal, la clase de función es lineal y el método de evaluación es la pérdida de la bisagra, y así sucesivamente. Primero entienda estos algoritmos en alto nivel. Luego, entra en los detalles técnicos. Verá que encontrar la mejor función [math] f [/ math] en la clase de función [math] \ mathcal {F} [/ math] a menudo resulta en un problema de optimización, para el cual utiliza el descenso de gradiente estocástico.
II. CAMINO PARA EL APRENDIZAJE DE LA MÁQUINA DE APRENDIZAJE:
Para tener una base matemática básica, necesita tener algún conocimiento de los siguientes conceptos matemáticos:
– Probabilidades y estadísticas
– Álgebra lineal
– Optimización
– Cálculo multivariable
– Análisis funcional (no esencial).
– Lógica de primer orden (no esencial).
Puede encontrar material razonable en la mayoría de estos buscando “notas de lectura” en Google. Por lo general, encontrará buenas notas de clase compiladas por algún profesor que enseña ese curso. Los primeros resultados deben darle un buen conjunto para elegir. Vea la respuesta de Prasoon Goyal a ¿Cómo debo comenzar a aprender las matemáticas para el aprendizaje automático y desde dónde?
Hojea estos. No es necesario que los revises con mucho detalle. Puede volver a estudiar las matemáticas cuando sea necesario mientras aprende ML.
Luego, para obtener una descripción general rápida de ML, puede seguir la siguiente hoja de ruta (escribí sobre muchos de estos temas en varias respuestas en Quora; vinculé las más relevantes para una referencia rápida).
Día 1:
- Configuraciones más comunes: configuración supervisada, configuración no supervisada, configuración semi-supervisada, aprendizaje de refuerzo.
- Problemas más comunes: Clasificación (binario y multiclase), Regresión, Agrupación en clúster.
- Preprocesamiento de datos: Normalización de datos.
- Conceptos de conjuntos de hipótesis, error empírico, error verdadero, complejidad de conjuntos de hipótesis, regularización, compensación sesgo-varianza, funciones de pérdida, validación cruzada.
Dia 2:
- Conceptos básicos de optimización:
- Terminología y conceptos básicos: optimización convexa, lagrangiano, problemas primarios y duales, gradientes y subgradientes, [math] \ ell_1 [/ math] y [math] \ ell_2 [/ math] funciones objetivas regularizadas.
- Algoritmos: Pendiente de gradiente de lotes y gradiente de gradiente estocástico, Pendiente de gradiente de coordenadas.
- Implementación: escriba el código para el descenso del gradiente estocástico para una función objetivo simple, ajuste el tamaño del paso y obtenga una intuición del algoritmo.
Día 3:
- Regresión logística
- Máquinas de vectores de soporte: intuición geométrica, formulaciones primarias-duales, noción de vectores de soporte, truco del kernel, comprensión de los hiperparámetros, búsqueda en cuadrícula.
- Herramienta en línea para SVM: juegue con esta herramienta en línea para SVM (desplácese hacia abajo hasta “Interfaz gráfica”) para obtener una intuición del algoritmo.
Día 4:
- Regresión de cresta
- k-medias y algoritmo de expectativa-maximización.
- Clúster jerárquico de arriba hacia abajo y de abajo hacia arriba.
Dia 5:
- Terminología básica: antecedentes, posteriores, probabilidad, estimación de máxima verosimilitud e inferencia máxima a posteriori.
- Modelos de mezclas gaussianas
- Asignación de Dirichlet Latente: El modelo generativo y la idea básica de la estimación de parámetros.
Día 6:
- Terminología básica: redes bayesianas, redes Markov / campos aleatorios Markov.
- Algoritmos de inferencia: eliminación de variables, propagación de creencias.
- Ejemplos simples: Modelos ocultos de Markov. Modelo de ising
Días 7–8:
- Terminología básica: Neurona, función de activación, capa oculta.
- Redes neuronales convolucionales: capa convolucional, capa de agrupación, Backpropagation.
- Redes neuronales basadas en la memoria: redes neuronales recurrentes, memoria a corto y largo plazo.
- Tutoriales: estoy familiarizado con este tutorial de Torch (querrá ver el directorio [math] \ texttt {1_supervised} [/ math]). Puede haber otros tutoriales en otros marcos de aprendizaje profundo.
Día 9:
- Métodos de conjunto
- Árboles de decisión
- Sistemas de recomendación
- Procesos de decisión de markov
- Bandidos multiestados
Día 10: (día del presupuesto)
- Puede usar el último día para ponerse al día con cualquier cosa que haya quedado de los días anteriores, u obtener más información sobre el tema que le resulte más interesante / útil para su trabajo futuro.
Una vez que haya pasado por lo anterior, querrá comenzar con algún curso estándar en línea o texto ML. El curso de Andrew Ng en Coursera es un buen punto de partida. Una versión avanzada del curso está disponible en The Open Academy (Aprendizaje de máquinas | The Open Academy). Los libros populares con los que tengo experiencia son los siguientes:
- Reconocimiento de patrones y aprendizaje automático: Christopher Bishop
- Aprendizaje automático: una perspectiva probabilística: Kevin P. Murphy
Si bien el libro de Murphy es más actual y más elaborado, creo que Bishop’s es más accesible para los principiantes. Puedes elegir uno de ellos según tu nivel.
En este punto, debe tener un conocimiento práctico del aprendizaje automático. Más allá de esto, si está interesado en un tema en particular, busque recursos específicos en línea sobre el tema, lea artículos seminales en el subcampo, intente encontrar algunos problemas más simples e impleméntelos.
Para el aprendizaje profundo, aquí hay un tutorial del laboratorio de Yoshua Bengio que se escribió en los primeros días de aprendizaje profundo: Tutoriales de aprendizaje profundo. Esto explica las ideas centrales en el aprendizaje profundo, sin entrar en muchos detalles.
Debido a que el aprendizaje profundo es un campo más empírico que teórico, es importante codificar y experimentar con modelos. Aquí hay un tutorial en TensorFlow que brinda implementaciones de muchas tareas diferentes de aprendizaje profundo: aymericdamien / TensorFlow-Example. Intente ejecutar los algoritmos y juegue con el código para comprender mejor los conceptos subyacentes.
Finalmente, puede consultar el libro Deep Learning, que explica el aprendizaje profundo de una manera mucho más sistemática y detallada. Para los últimos algoritmos que no están en el libro, deberá consultar los documentos originales.
III. CONSEJOS PARA LA IMPLEMENTACIÓN:
Hay diferentes niveles en los que puedes entender un algoritmo.
En el nivel más alto, sabes qué es lo que un algoritmo está tratando de hacer y cómo. Así, por ejemplo, el descenso de gradiente encuentra un mínimo local dando pequeños pasos a lo largo del gradiente negativo.
Yendo un poco más profundo, profundizarás en las matemáticas. Una vez más, tomando el descenso de gradiente, por ejemplo, aprenderá cómo usar el gradiente para cantidades vectoriales, normas, etc. En aproximadamente el mismo nivel de profundidad, también tendrá otras variantes del algoritmo, como las restricciones de manejo en el descenso de gradiente. Este es también el nivel en el que aprendes a usar las bibliotecas para ejecutar tu algoritmo específico.
Más profundo, implementa el algoritmo desde cero, con pequeños trucos de optimización. Por ejemplo, en Python, deseará usar vectorización. Considere los siguientes dos fragmentos de código:
# Versión 1:
importar numpy como np
N = 10000000
a = np.random.rand (N, 1)
b = np.random.rand (N, 1)
para i en rango (N):
s = s + a [i] * b [i]
imprimir s
# Versión 2:
importar numpy como np
N = 10000000
a = np.random.rand (N, 1)
b = np.random.rand (N, 1)
s = a * b
imprimir s
Ambos tienen la misma funcionalidad, pero el segundo es 20 veces más rápido. De manera similar, aprenderá algunas otras técnicas de implementación importantes, como paralelizar código, crear perfiles, etc. También aprenderá algunos detalles específicos del algoritmo, como cómo inicializar su modelo para una convergencia más rápida, cómo establecer la condición de terminación para el intercambio. la precisión y el tiempo de entrenamiento, cómo manejar los casos de esquina [como los puntos de silla de montar en pendiente de gradiente], etc. Finalmente, aprenderá técnicas para depurar el código de aprendizaje automático, que a menudo es complicado para los principiantes.
Finalmente, llega la profundidad a la que se escriben las bibliotecas. Esto requiere mucho más conocimiento de sistemas que los pasos anteriores: saber cómo manejar datos muy grandes, eficiencia computacional, administración de memoria efectiva, escritura de código GPU, multihilo efectivo, etc.
Ahora, ¿con cuántos detalles necesitas conocer los algoritmos? En su mayor parte, no necesita conocer los algoritmos en la profundidad de la implementación de la biblioteca, a menos que esté en la programación de sistemas. Para los algoritmos más importantes en el descenso de gradiente similar a ML, SVM, regresión logística, redes neuronales, etc., es necesario comprender las matemáticas y cómo usar las bibliotecas para ejecutarlas. Esto sería suficiente si no es un ingeniero de ML, y solo usa ML como una caja negra en su trabajo diario.
Sin embargo, si va a trabajar como ingeniero de ML / científico de datos / científico de investigación, también debe implementar algunos algoritmos desde cero. Por lo general, los cubiertos en cursos en línea son suficientes. Esto te ayuda a aprender muchos más matices de diferentes herramientas y algoritmos. Además, esto le ayudará con los nuevos algoritmos que podría necesitar implementar.