¿Implementó algoritmos de aprendizaje automático desde cero con el propósito de aprender?

Richard Feynman tenía esto en su pizarra

Es completamente posible hacer ciencia de datos simplemente leyendo libros y luego usando el algoritmo implementado por sklearn o keras. Sin embargo, si elige implementar desde cero, llegará al fondo del algoritmo. Allí, tendría una mejor visión de cómo funcionan las cosas y qué salió mal si encuentra un error. Como principiante en el aprendizaje automático, me esfuerzo por implementar desde cero (también conocido como puro numpy) cada algoritmo que encuentro. Me está funcionando muy bien hasta ahora.

Aquí están mis primeros intentos de implementar algoritmos desde cero. Puede ser muy primitivo (como no reutilizable), porque soy un novato tanto en ML como en programación, pero juega un papel importante en mi autoeducación.

Clasificador lineal MNIST

Máquina de Boltzmann restringida

Creo que la cita de Feynman en la pizarra “lo que no puedes crear no lo entiendes” es perfecto. No solo en el aprendizaje automático, sino en cualquier campo.

Una vez me golpeó el profesor Petros Koumoutsakos en ETH cuando no sabía cómo funciona el algoritmo de optimización que utilicé. ¡El proyecto ni siquiera se trataba de optimización per se! Y, aunque siento que fue demasiado, puedo identificarme con la actitud.

Pero creo que debería venir desde adentro. Debe ser impulsado por su propia curiosidad y una mente inquisitiva. La mayoría de los algoritmos no son tan brillantes y elegantes cuando conoce los detalles. El proceso de revisión por pares impulsa a las personas a minimizar las limitaciones de sus innovaciones algorítmicas en publicaciones. Entonces, a menos que el algoritmo sea muy maduro, tendrá que encontrarlos usted mismo. Y personalmente no me siento cómodo sabiendo que no sé por qué fallará mi herramienta.

Verificar sus implementaciones también lo obliga a trabajar en ejemplos mínimos, preferiblemente en datos sintéticos donde se conoce la verdad fundamental. Te sorprenderá lo fácil que es romper muchos algoritmos o engañarlos para que den la respuesta incorrecta. Nunca olvidarás estas sorpresas.

Entonces, si bien es cierto que aprende mucho sobre cómo funcionan al implementar algoritmos, personalmente creo que el beneficio principal es saber cuándo y cómo fallarán.

Soy nuevo en Machine Learning. ¿Qué sería lo mejor para mí? ¿Implementar desde cero o usar sk-learn? Esto es realmente lo que estaba sucediendo en mi mente durante mis días de comenzar con Machine Learning.

He implementado algoritmos de aprendizaje automático desde cero. Aprender. Durante la mayor parte del tiempo para proyectos, no había necesidad de hacerlo.

Inculqué este habito mientras hacía el curso de Andrew Ng. No solo esto me ayudó a comprender lo que está sucediendo en el algoritmo, sino que también me ayudó a mejorar mis matemáticas.

El algoritmo más difícil de entender para mí fue SVM (Support Vector Machine) y cuando lo codifiqué por mí mismo pude entenderlo completamente.

de sklearn import svm
clf = svm.SVC
clf.fit (x, y)

Se rascará la cabeza si lee estas dos líneas de código y no tiene intuición para implementar el algoritmo en los datos, pero si comprende lo que sucede detrás de esas dos líneas, utilizará el algoritmo correctamente.

Y si desea investigar en Machine Learning, necesita saber qué sucede debajo.

Sí, y esa es la razón principal por la que he implementado algoritmos de aprendizaje automático desde cero. Aprender. Para la mayoría de mis proyectos reales, no había necesidad de hacerlo.

De hecho, todavía estoy implementando algoritmos desde cero de forma regular tres años después de comenzar. Puede leer acerca de los algoritmos todo lo que quiera e intentar comprenderlos en un nivel superior, pero en realidad no hay nada mejor que codificarlos.

Después de luchar con los detalles de implementación de un algoritmo durante algunas horas, comienza a desarrollar una intuición de cómo y por qué funciona. Ya no necesita memorizar la teoría detrás de ella, porque solo la entiende intuitivamente.

Muchas personas no se molestan con eso. Es muy tentador ir con algo como …

clf = RandomForestClassifier ()
clf.fit (x, y)

… pero si comprende todo lo que sucede detrás de esas dos líneas (que es mucho), estará en una posición mucho mejor para utilizar el algoritmo correctamente.

Para mí considero que esta actividad es un código kata y me gusta mucho.

Me gusta abrir al azar un libro de aprendizaje automático o estadísticas, leer un poco e intentar implementar algo sin otro objetivo que pensar en cómo. Como hay muchas bibliotecas que ya hacen lo que dice la fuente, es fácil ver qué tan cerca estaba. También es divertido ver cómo diferentes idiomas y bibliotecas implementan lo mismo de manera diferente. A veces obtienen resultados ligeramente diferentes.

Ahora, no soy realmente un muy buen estudiante académico. Así que no hago esto para aprender los algoritmos mismos. Olvidaré los nombres y detalles con bastante rapidez. No estoy conectado para ese tipo de cosas. Estoy más interesado en ejercitar los músculos de resolución de problemas, patrones de diseño, habilidades de lenguaje y me gusta estar expuesto a los patrones en este dominio. No sería un buen científico de datos. Afortunadamente solo tengo que crear herramientas y servicios que quieran usar.

Si. Cuando implementa un algoritmo, comprende que aumenta exponencialmente. Además, es posible que tengas que modificar ese algoritmo algún día. ¿Cómo puede ajustar el algoritmo si no tiene una comprensión sólida de cómo funciona? Ahora muchas veces, las personas piensan que pueden obtener este conocimiento al estudiar viciosamente el algoritmo; pero si realmente quieres entenderlo, codificarlo como un control de cordura es un gran comienzo. También debe conocer los pros y los contras de cada algoritmo; que son IMO tan importantes como poder implementarlo porque debes saber en qué situaciones funciona mejor el algoritmo.

Sí, lo hice. En mi opinión, implementar algoritmos de aprendizaje automático desde cero ayuda mucho. Estoy de acuerdo con otras respuestas en que le permite comprenderlas claramente y, por lo tanto, aprende a usarlas con habilidad.

Concretamente, recientemente implementé una red neuronal de alimentación directa desde cero: rvinas / nnn. Aunque he estado usando redes neuronales de avance durante algunos meses, ahora siento que las entiendo completamente.

Para ser más específico, obtuve la intuición de cómo aprenden representaciones abstractas de datos y por qué son tan poderosos. Además, también podría probar mi comprensión del algoritmo de retropropagación (escribí una publicación de Quora aquí).

¿Alguien puede aprender sobre automóviles únicamente conduciendo un automóvil automático desde el tablero del conductor agradable? Supongo que uno tiene que abrir el capó en algún momento y mirar el motor / la mecánica que lo acciona.

Para mí, Sklearn, Spark ML, H20, etc.son como un buen tablero de instrumentos para el automóvil. Sus botones .predict y .train son realmente buenos. Tienden a llevarme a destino en el 80-90% de mis casos.

Pero creo que obtener el Dominio de algo requiere construir Intuición para ello. La intuición proviene de enfrentar y solucionar los problemas de primera mano. En el caso de ML, encuentro que la codificación desde cero realmente me ayuda a lograrlo.

Sí, principalmente algoritmos de agrupamiento y sistemas de recomendación.

Utilicé el lenguaje de programación Java para la implementación de esos algoritmos y escribí sobre esto aquí: la respuesta de Alket Cecaj a Como científico de datos o ingeniero de aprendizaje automático, ¿cuánto tiempo dedicas a los algoritmos?

Feliz aprendizaje 🙂