¿Por qué el aprendizaje automático es menos satisfactorio que la codificación estándar?

Lo que has señalado es un fenómeno muy común en el mundo de ML: las personas que lo usan sin ninguna introducción a la metodología matemática y probabilística y su significado subyacente a menudo se desconectan de lo robótico e inalcanzablemente esotérico que parece. En este sentido, una comprensión de la teoría haría maravillas. Gran parte de las matemáticas debajo de la superficie de ML es fascinante; de ​​hecho, se puede ver como una continuación de la innovación humana en los campos de la inferencia estadística y el modelado empírico para construir una idea precisa de cómo predecir futuros cambios y patrones. La teoría realmente puede ayudar a construir el aprecio de uno por ML y sus increíbles capacidades predictivas, y es de vital importancia si desea perder ese sentimiento de ‘caja negra’ sobre la programación.

Dicho esto, es importante considerar si / en qué medida debe perseguir este conocimiento. ¿Cuánto te ayudará una comprensión de ML basada en la teoría en tus futuros emprendimientos? Ya hay muchos entornos de análisis y clasificación de imágenes (por ejemplo, Tensor Flow, Keras) que le permiten acceder a ML sin mucho o ningún conocimiento teórico. La razón por la que hago esta nota de advertencia es que aprender todo el álgebra lineal, la probabilidad y las matemáticas necesarias para acceder incluso a la teoría detrás de los algoritmos de ML puede ser difícil dependiendo de su experiencia previa en esos campos. Si viene de una posición de interés y deseo de entender, eso es admirable, y le recomiendo comenzar leyendo la teoría detrás de algo dulce y simple como la regresión lineal. Si eso tiene sentido para usted, puede pasar a otros enfoques de aprendizaje automático, como la regresión logística, la agrupación y las redes neuronales. Sin embargo, en general, tener una base teórica sólida en regresiones lineales y logísticas y una comprensión general de la teoría detrás de otros algoritmos importantes es un gran primer paso que puede aumentar de inmediato su apreciación por el campo.

Porque el aprendizaje automático tiene más que ver con las matemáticas que con la codificación.

Usando algunas bibliotecas existentes como scikit-learn o tensor-flow, puede construir aplicaciones de aprendizaje automático en varias líneas de código. La parte de codificación en sí misma es de muy alto nivel.

Básicamente, el aprendizaje automático es muy diferente de la ingeniería de software.

Las principales preocupaciones de los ingenieros de software (creo que puedo clasificarlos como “codificadores”) es cómo crear programas que sean rápidos, estables, escalables y comercializables.

Las personas que trabajan en el aprendizaje automático se parecen más a los matemáticos. Recopilan, limpian y transforman datos y ajustan constantemente los modelos matemáticos que mejor representan los datos.

La parte divertida del aprendizaje automático viene cuando:

  1. Estudias la teoría detrás de esto. El aprendizaje automático es una combinación perfecta de matemáticas e informática, mientras que la informática tradicional se centra más en las matemáticas discretas.
  2. Estás codificando las bibliotecas de aprendizaje automático. La codificación de la biblioteca de flujo de tensor C ++ para el aprendizaje profundo requiere mucha optimización de bajo nivel. También implica tecnologías informáticas de alto rendimiento como GPU y multihilo.
  3. Eres perfeccionista y te gustan las competiciones. Hay muchas competiciones de ciencia de datos que puedes competir con otras personas para obtener la mejor puntuación. Echa un vistazo a kaggle.com.

Diría que si no te gustan las matemáticas, estudiar la teoría detrás de esto no ayudará a hacerlo más interesante. Pero si lo hace, le sugiero que revise lo que hay dentro de la caja negra. Sin embargo, para comprender bien cómo funciona la caja negra, tendrá que conocer las estadísticas, el álgebra lineal y el cálculo multivariable a un nivel de descenso, lo cual es bastante desafiante para muchos programadores de computadoras que ponen más énfasis en el lado de la ingeniería.

Porque estás haciendo que la computadora aprenda sin ser programado explícitamente.

Porque estás tratando con datos. Debe comprender los datos, su estructura, naturaleza y qué se puede hacer para obtener lo mejor de ellos.

Porque no es en la programación web donde tienes que lidiar con solicitudes HTTP, CSS Styling.

Debido a que termina completamente con un algoritmo adecuado predefinido para seleccionar sus problemas y resolverlos con códigos de soporte adicionales.

Porque Machine Learning trata con el 50% de las estadísticas donde necesita hablar estadísticamente el idioma de sus datos.

Porque no estamos tratando con el programa de escritura para Kernel OS.

Debido a que tiene que visualizar los datos, ajuste el modelo, preprocese para obtener lo mejor de él.

ML se vuelve aburrido cuando usas cajas negras. Así es como me di cuenta de la pureza del aprendizaje automático.

En mi primer semestre, tuvimos una pequeña tarea en la que tuvimos que construir una red neuronal con una sola capa oculta para clasificar las imágenes. No hay cajas negras, pero puede usar paquetes de uso general como Numpy.

Era la primera vez que codificaba la propagación hacia atrás, me di cuenta de que el ML era genial. Fue solo un proceso gráfico. Multiplica las entradas con pesos aleatorios y sesgos para pasar a la capa oculta (con activación). Ahora, la capa oculta se convierte en la capa de entrada a la siguiente capa, y nuevamente multiplica pesos aleatorios y sesgos con estas entradas de capas ocultas y pasa a través de una función softmax (en mi caso). Tienes que considerar el aprendizaje automático como una intuición humana para sentir esa esencia.

Sabes que las CNN funcionan. ¿Sabes por qué? Aprende a decodificar la razón. Encontrarás fallas. Entonces intentarás abdicar de aquellos que usan Keras. Te darás cuenta de que no puedes. Luego leerá un libro de aprendizaje profundo o consultará algunos videos de YouTube. Intentará generar algo por su cuenta utilizando TensorFlow. Te molesta porque tienes que pasar por los detalles de la arquitectura TF. Tu dirás
“A la mierda” en voz alta, y creará un nuevo programa. Importará solo bibliotecas generales y otras bibliotecas generales, y codificará su programa de la manera que desee. Eso es aprendizaje automático. Enseñarle a una máquina a hacer las cosas como tú.

La respuesta de Anirudh Suresh es acertada: si no le gusta el cuadro negro, ábralo. Eso no es fácil, pero es más fácil de lo que cabría esperar. El nivel de sofisticación necesario para algo como TensorFlow se debe a que es una biblioteca general que maneja casos comunes y especiales. No es el camino normal.

La necesidad de que las personas diseñen sistemas de ML, en lugar de usarlos (desarrollarlos alrededor), es relativamente pequeña. Para la mayoría de las personas, esto hace que entender el funcionamiento interno de los sistemas de ML parezca una pérdida de tiempo. No lo encontré así porque lo encontré intelectualmente satisfactorio. Por supuesto, comencé esto cuando tenía que escribir su propio código; No sé si habría construido sistemas desde cero hoy. Es algo así como estructuras de datos; debe saber cómo construirlos, pero en los sistemas diseñados para su uso (no para demostración o experimentación) debe usar bibliotecas estándar siempre que sea humanamente posible.

Terminaría afirmando que las redes neuronales generalmente no son el único tipo de ML. Hay mucha más libertad en áreas como el aprendizaje no supervisado. Mi preferencia es por algoritmos genéticos. Sin embargo, no puede obtener un trabajo utilizando GAs tan fácilmente como las redes neuronales y las bibliotecas ML NN estándar.

Las personas apasionadas por la comprensión nunca deberían detenerse. Es una buena manera de aburrirse, y las personas aburridas se complacen y se frustran. Conozco a un chico, no mucho mayor que yo, brillante, pero está atrapado en un trabajo estable. Tiene un ingreso decente (no grande). Aparentemente no tiene incentivos ni tolerancia al riesgo, a pesar de que odia su trabajo y está muy por debajo de su potencial. Él podría hacer algo diferente, pero he conocido gente así, y rara vez cambian. Profundice más como si su futuro profesional y su satisfacción personal dependieran de ello, ¡porque probablemente lo haga!

El aprendizaje automático no es menos satisfactorio para todos. De hecho, para algunos es mucho más satisfactorio, y el campamento en el que caes depende de cómo te guste abordar los problemas.

El mundo del desarrollo de software ahora tiene 2 opciones cuando se trata de producir un comportamiento de software:

  1. Programación Inside Out : escriba manualmente reglas explícitas para producir el comportamiento con el que los usuarios interactúan;
  2. Afuera En programación: capacite a las computadoras para que produzcan constantemente el comportamiento que ven en los datos.

La primera opción proviene de la programación informática tradicional / estándar . Aquí, el programador tiene el control total sobre cómo el sistema produce su salida. Así es como se ha definido la ingeniería desde la revolución industrial. Pensamos profundamente sobre cada parte del sistema y cómo interactúan. Escribimos todas las reglas del juego, probamos que esas reglas no se desvían del comportamiento esperado y tratamos de gestionar la creciente complejidad de nuestros sistemas utilizando reglas y patrones de diseño adicionales.

La segunda opción proviene del aprendizaje automático . Aquí cedemos el control de la escritura de reglas a las máquinas. Hacemos esto porque muchos de los desafíos que enfrentamos ahora en el software no pueden resolverse escribiendo reglas que los humanos entiendan. Intente utilizar la programación estándar para reconocer una cara en una imagen, la identidad de una persona que habla, un código malicioso, una cartera financiera óptima, para crear un automóvil autónomo, mostrar el mejor diagnóstico para un paciente, los mejores candidatos químicos para una nueva droga, los temas que existen en miles de documentos, estructuran una campaña de marketing rentable, pronostican accidentes en el lugar de trabajo o crean un servicio de chat que puede responder a un número y un tipo de preguntas aparentemente infinitas.

No podemos abordar los desafíos más grandes de la actualidad escribiendo reglas explícitas utilizando codificación estándar. Está más allá de nuestra capacidad descubrir cuáles son esas reglas y, por lo tanto, debemos aceptar que nuestro estilo reduccionista de resolución de problemas se está convirtiendo rápidamente en un enfoque anticuado para los sistemas de ingeniería.

Aceptar la naturaleza de “caja negra” del aprendizaje automático no es algo natural para aquellos a quienes se les ha enseñado que la ingeniería se trata de saber cómo funcionan los sistemas en su nivel más profundo, y que mediante reglas de codificación rígida podemos producir máquinas que resuelvan problemas. Pero es algo natural para aquellos que están acostumbrados a usar la tecnología en un nivel superior de abstracción, incorporando cosas como el comportamiento humano y otros conceptos más suaves en el proceso de fabricación de productos de software. Estas personas no intentan revelar las leyes básicas fundamentales, sino que son más estratégicas y conceptuales en su enfoque para resolver problemas. Por lo tanto, su nivel de comodidad puede provenir de cómo piensa utilizar la tecnología.

Esto puede sorprender a quienes buscan ingresar al aprendizaje automático y, en particular, a la Ciencia de datos, donde resolvemos desafíos muy estratégicos utilizando un software que explica y predice el uso de sus propias reglas aprendidas. Las habilidades necesarias en un campo como Data Science tienen que ver con aprender a trabajar con máquinas, en lugar de cómo construirlas desde cero.

Por lo tanto, el aprendizaje automático es más satisfactorio para muchos porque puede resolver problemas mucho más complejos que con la programación tradicional basada en reglas. También es menos satisfactorio para aquellos que desean un control explícito sobre cómo cada pieza de programación produce sus resultados. Por supuesto, el software siempre necesitará ambos enfoques, pero la codificación estándar se está relegando al andamiaje que mantiene el aprendizaje automático en su lugar.

Los 2 roles modernos para construir software basado en datos son Ingeniería de Datos y Ciencia de Datos . Mi consejo para aquellos que buscan ingresar a los datos es decidir en qué campamento, según lo anterior, se sienten más cómodos. La ingeniería de datos está más cerca del enfoque estándar, ya que esta área construye sistemas para mantener el aprendizaje automático funcionando sin problemas y hacerlo funcionar con las otras piezas más tradicionales de la aplicación. Data Science trata más sobre el arte de hacer que las máquinas escriban reglas excelentes, basadas en los datos que hemos reunido y preparado, y nuestra capacidad para validar modelos tanto estadísticamente como en base a los comentarios de los usuarios. Data Science combina la comprensión matemática con los conceptos de comportamiento, creando un software que se adapta a su entorno a través de los datos a los que está expuesto; no usar reglas explícitas codificadas por personas.

Por supuesto, su función siempre combinará un poco de ambos campos, pero es importante decidir cómo le gusta abordar los problemas. El aprendizaje automático es una forma fundamentalmente diferente de crear software, y solo estamos comenzando a comprender cómo llevar su potencial al mundo tradicional de la programación basada en reglas. Hay mucha fricción en la intersección de estos 2 campamentos, pero con la fricción viene una oportunidad increíble para hacer mejores productos.

Para usted, puede que nunca sea tan satisfactorio como la “codificación estándar”. Bien podría ser que el aprendizaje automático no sea lo tuyo. Ser capaz de hacerlo no significa que debas convertirlo en tu carrera. Cocino un bistec decente, pero eso no significa que deba convertirme en chef.

Como ejemplo, disfruto el desarrollo de back-end. No me importa el desarrollo front-end, pero realmente disfruto back-end. Tengo una sensación de satisfacción cuando finalizo un proyecto front-end, pero siento una mayor satisfacción al completar un proyecto back-end. Lo mismo ocurre con el desarrollo de bases de datos. Me siento cómodo con eso, pero no es mi favorito. Si se me da la opción, SIEMPRE tomaré un proyecto de back end sobre un front end o proyecto de base de datos. ¡SIEMPRE!

Suponiendo que para muchos en realidad es cierto que construir soluciones de aprendizaje automático es menos satisfactorio que la codificación estándar, solo puedo suponer que para muchos es el caso que la codificación es más satisfactoria porque alimenta mejor un sentido de “resolución de problemas”.

Lo que quiero decir con eso es que en ML, la parte difícil de resolver el problema, o al menos encontrar una solución óptima al problema, se deja a la computadora. Sin embargo, en programación, el programador todavía resuelve el problema. De acuerdo, en ambos casos, la persona puede usar bibliotecas, API de stock, kits de herramientas, etc. Sin embargo, me parece que, en la mayoría de los casos, el estado actual de ML es que la construcción de la solución es bastante rutinaria. Sin embargo, para la codificación, la mayoría de las veces el programador tiene más libertad y más “pizarra en blanco” para la construcción de la solución. Por lo tanto, las soluciones codificadas parecen más satisfactorias.

Tal es mi teoría.

Puede ser extremadamente gratificante, incluso una pasión obsesiva si:

  1. Generalmente tiene curiosidad sobre el mundo y quiere resolver problemas usando las matemáticas.
  2. Te encantan las matemáticas y entiendes principios básicos para comenzar, como la probabilidad, permutaciones y combinaciones, matrices, cálculo, álgebra lineal, geometría / trigonometría.
  3. Ninguna respuesta es una respuesta fija o la mejor, ¡puedes mejorarlas!

¡Espero que esto ayude!

Creo que se entusiasmará más con el aprendizaje automático cuando comprenda más teoría, porque podrá reconocer por qué los algoritmos de “caja negra” se comportan de la manera en que lo hacen y, finalmente, diseñar nuevos.

Personalmente, puedo encontrar el aprendizaje automático muy satisfactorio cuando me doy cuenta de que estoy usando matemática y codificación de alto nivel para comprender las soluciones a los problemas del mundo real. ¿Cuántas personas pueden hacer eso?

Creo que es así. ML es un tipo de programación de muy alto nivel. No es como la programación de sistemas en la que tienes que ocuparte de cada pequeño detalle de bajo nivel, o la programación web en la que tienes que lidiar con la manipulación DOM, las solicitudes HTTP, las consultas a la base de datos, el estilo CSS, etc. Otras áreas que son muy similares en este el respeto incluye la ciencia de datos (o “Big Data”) y la computación numérica.

Incluso si comprende la teoría, al final del día solo está integrando el algoritmo de algún profesor con un flujo de datos.

Otros tipos de codificación pueden ser más gratificantes porque está creando algo desde cero y tiene mucha información sobre cómo está diseñado.

Es muy parecido a ser un gerente: agitas un montón de manos, haces algunas cosas que no tienes idea si funcionarán o por qué, y esperas que algo bueno suceda. A veces lo hace, puedes tomar crédito por eso, y siempre se siente un poco sucio cuando lo haces.

Porque escribir 11 líneas de python y una referencia a tensorflow no es aprendizaje automático.

Podría ser la matemática, el algoritmo y la teoría que llega a las personas. Ciertamente me está afectando. Tengo que repasar muchas matemáticas con las que no estoy familiarizado.

A diferencia de la codificación estándar donde se ejecuta y se produce un resultado, este es un camino largo y largo.