¿Qué haces como programador de Machine Learning y qué hace que lo que haces sea interesante?

Estoy trabajando específicamente en el aprendizaje automático (ML) aplicado a los sistemas de visión por computadora (CV), por mi cuenta, nadie me paga por eso. Estoy diseñando y construyendo un sistema de visión que integra muchos atributos del sistema visual humano (HVS), en un marco compacto y eficiente, como la atención, el aprendizaje gradual, la visión periférica y periférica y el saccade del ojo como el escaneo de escenas visuales al integrar múltiples características de alto nivel juntas. El proyecto se llama sistema de reconocimiento e inferencia integrado por IRIS que comenzó en enero de 2016.

Así que he estado iterando en el diseño durante un año y finalmente este año podría hacer una demostración y escribir sobre los resultados que he estado obteniendo con este sistema. Mi objetivo es que el sistema rompa algunos registros en algunos conjuntos de datos de detección de objetos. No tengo una máquina poderosa para escalar este sistema para entrenar en el desafío ImageNet de clase 1000, así que lo probaré solo en conjuntos de datos MNIST y Pascal VOC para la detección de objetos. Luego, tengo el objetivo de desarrollar aplicaciones que pueda implementar utilizando el sistema completo.

IRIS se finalizará como API más adelante y se pondrá a disposición del público (sin el código fuente), a un costo razonable, para aplicaciones en robots, sistemas de visión integrados, automóviles autónomos y aplicaciones médicas. También estoy planeando construir sistemas de robots utilizando la API IRIS y entrar en un negocio de robótica suministrando juguetes o robots domésticos con tecnología IRIS.

También he creado una aplicación panorámica [1] utilizando nuevos algoritmos de visión por computadora que desarrollé personalmente. Aunque la mayoría de los algoritmos en esa aplicación no están basados ​​en ML, la fase de coincidencia sí lo es, he desarrollado un esquema de coincidencia de características basado en ML rápido para el sistema de visión detrás del sistema de reconocimiento panorámico, llamo a ese algoritmo el “FastMatcher”. No puedo entrar en detalles explicando cómo el sistema combina imágenes juntas porque todavía no he hecho públicos los algoritmos y actualmente no estoy planeando hacer públicos los algoritmos en el corto plazo.

También codifico cada uno de los módulos del sistema anteriores desde cero utilizando programación hardcore C ++. He estado trabajando durante varios años construyendo una biblioteca de visión y aprendizaje automático para impulsar todos mis proyectos. Entonces, para crear el sistema de visión para la aplicación, tuve que comenzar literalmente de la nada, idear algoritmos nuevos y escribir una biblioteca de álgebra lineal, implementando algoritmos como la descomposición de valores singulares (SVD), álgebra no lineal como el algoritmo Levernberg-Marquardt para ajuste de paquete, detector de región prominente, coincidencia de características, integrador de características, consenso de muestras aleatorias (RANSAC), estimador de homografía y muchos, muchos más. Además, introduje redes neuronales, máquinas de vectores de soporte (SVM) y algoritmos de retropropagación (backprop) + descenso de gradiente estocástico (SGD) en la biblioteca como medios para ayudar a la implementación del nuevo sistema IRIS.

También me enseñé todo eso: inteligencia artificial (IA), ML, procesamiento de imágenes, CV y ​​programación en C ++ (competente), Java (desarrollo de Android) y Python (todavía aprendiendo). Me enseñé a mí mismo cómo diseñar e implementar código modular para una fácil administración de la base del código, no solo mentores.

Los amigos se negaron a ayudarme, pensé, joder, lo haré yo mismo.

EDITAR : abriré todo el código una vez que termine IRIS.

Espero que esto ayude.

Notas al pie

[1] Bimostitch Panorama Stitcher – Aplicaciones de Android en Google Play

Como programador de aprendizaje automático, bastante obvio, hago sistemas inteligentes 🙂

Sistemas como

  1. análisis predictivo: – sistema para predecir el recuento de un evento particular que ocurrirá en un período de tiempo futuro basado en datos históricos. (es decir, análisis de series de tiempo para determinar el número de reservas que pueden ocurrir durante un período de tiempo en un hotel en línea, para determinar fluctuaciones y fraudes).
  2. Motor de reconocimiento de idioma de texto para averiguar el idioma de un texto y mostrarlo a un usuario en función de su ubicación, origen étnico, etc. (es decir, para mostrarle a un usuario de telgu una respuesta RTI en su propio idioma en lugar de la respuesta en inglés que obtuvimos de funcionarios viceversa)
  3. Las redes sociales cuentan con bots de ingeniería para obtener datos a través de las redes sociales y enfocarse en un tema en particular para opciones (es decir, si hay un motín y algo se está popularizando en las redes sociales, así como usted vive en esa área, le preguntaremos si desea archivar sime RTI)
  4. Motor de coincidencia de patrones para calcular patrones en el texto y detectar identificadores de correo electrónico fraudulentos (es decir, un proveedor que explota un sistema en línea al hacer la reserva por sí mismo con varios correos electrónicos pero con el mismo patrón para usar mal los agujeros de bucle)

Estas fueron algunas de las cosas en las que he trabajado. Vea que todo el proceso es muy interesante y agotador, obtiene un gran conjunto de datos, luego visualiza los datos, en función de los cuales descubre algoritmos que pueden funcionar … entra en un ciclo de vida de desarrollo incremental, en cada etapa prueba algo nuevo , utilice la tecnología de optimización, embolsado y optimización para obtener el resultado deseado. Una vez que se pone en marcha, ves el sistema de aprendizaje basado en nuevos datos como un niño recién nacido, que me emociona …

una palabra . simplemente satisfactorio 🙂

En caso de que alguien esté interesado en el análisis de datos y el aprendizaje automático, puede comenzar a leer mis publicaciones (recién comenzado). aquí

¡¡prestigio!!:)

¿Qué se puede hacer con Machine Learning?

Machine Learning (ML) le permite resolver problemas en los que usar algoritmos normales sería demasiado complicado y casi imposible para hacer el trabajo. Imagine tener que codificar manualmente o crear un algoritmo que descubra las tendencias y patrones en el mercado de valores o tener que predecir cuál es el objeto en una imagen en particular. Hasta cierto punto, es posible que pueda preparar algo, pero ML es el camino a seguir cuando se trata de tales problemas. Hay demasiados factores que entran en juego que estarás empeñado en resolverlo tú mismo.

¿En qué consiste el trabajo de alguien haciendo Machine Learning?

Bueno, aquí en useAIble, estamos construyendo un nuevo tipo de motor de ML llamado Ryskamp Learning Machine (RLM) [1] y es bastante diferente de su motor de ML tradicional habitual en que utiliza un algoritmo lógico en lugar de uno matemático. Pero yo diría que seguimos haciendo las mismas cosas que otras personas que trabajan con ML de manera regular, tales como:

  • entender el problema en cuestión y si ML es la solución adecuada para ello
  • para ML tradicional, ¿está utilizando el algoritmo correcto para resolver su problema?
  • obtener suficientes datos para que su red aprenda y pruebe
  • determinar cuáles son sus entradas y salidas
  • ¿Cómo debe calificar (recompensar / castigar) la red?
  • estudiar los resultados, ¿necesita más capacitación? ¿O necesita volver a entrenarlo con diferentes pesos o, en nuestro caso, configuraciones?

¿Cuáles son las cosas que hacen que el aprendizaje automático sea interesante?

Yo diría que tiene que ser la naturaleza impredecible de ML. Realmente no sabes lo que obtendrás y depende del motor de ML o de la red simplemente aprender lo que puede basado en los datos y darte la mejor respuesta posible. Hasta cierto punto, tendrás una idea de cuál es la salida o la predicción de la IA si se hace correctamente, pero aún así, te sorprenderá más de las veces. Lo que lo hace más interesante es que realmente no hemos arañado la superficie del enorme potencial que puede llegar a ser ML, pero a partir de ahora ya es capaz de lograr algunas cosas geniales.

Notas al pie

[1] useAIble ™

Estoy trabajando como ingeniero de I + D de aprendizaje profundo en la herramienta de inferencia de alto rendimiento, TensorRT, que se utiliza en automóviles autónomos, centros de datos de Google / Facebook y para muchos otros clientes.

La mayor parte de mi trabajo consiste en el análisis del rendimiento del sistema actual y la lectura de los últimos artículos que llegan a Arxiv o se publican en grandes conferencias, por ejemplo, NIPS, ICML y KDD. Crear prototipos de las mejoras de rendimiento o escribir documentos para una evaluación adicional si la mejora no es fácil de desarrollar.

Entonces, otra parte de mi trabajo es implementar realmente las ideas. Estoy escribiendo código principalmente en C ++ 17, CUDA y el lenguaje ensamblador de GPU. Luego, escribir pruebas unitarias, corregir errores y mejorar la infraestructura general.

Para mí, la parte más interesante de Machine Learning es que hay muchas áreas y algoritmos que aún no se han descubierto. Y cuando se descubre, puede impactar positivamente a muchas personas.

No soy un “programador de Machine Learning”. Empecé con ML hace unos 3 meses. Sin embargo, estoy haciendo algo que creo que es muy interesante, así que lo compartiré.

¿Alguna vez te has preguntado cómo rastrean el tumor en pacientes con cáncer de pulmón dado que los pulmones están en constante movimiento? Yo tampoco. Al parecer, los métodos actuales de seguimiento del tumor son … digamos que su idea de margen de error aceptable es muy diferente a la mía (y sospecho que la mayoría de los pacientes estarían de acuerdo).

Así que aquí está mi desafío: desarrollar un modelo que reconstruya una imagen 3D completa de la cavidad torácica del paciente en tiempo real usando una sola radiografía . ¡Oh casi lo olvido! Recibo 10 ejemplos de entrenamiento … con mucho ruido.

Para reformularlo más matemáticamente:

Hay una función [math] f: \ mathbb {R} ^ {~ 6,000,000} \ to \ mathbb {R} ^ {~ 100,000} [/ math] (la proyección) y me dan una aproximación aproximada de esta función en [matemáticas] 10 [/ matemáticas] puntos y necesito encontrar la rama apropiada de la inversa de [matemáticas] f [/ matemáticas] (porque la función no es una biyección).

Suena casi imposible, ¿verdad?

Hasta ahora está funcionando bastante bien. Se debe al peor de los casos de error [matemático] ~ 6% [/ matemático] en la reconstrucción. Si arreglo la parte del modelo en la que estoy trabajando ahora, espero que se reduzca a [matemáticas] ~ 4% [/ matemáticas] en el peor de los casos. Hay media docena de otros métodos que quiero explorar en este problema, pero no sé si tendré tiempo.

Respondiendo en partes …

¿En qué consiste el trabajo de alguien haciendo Machine Learning?

  • La respuesta a esta pregunta podría clasificarse ampliamente en dos cubos
  • Los que crean modelos completamente nuevos.
  • Aquellos como yo que adaptan / combinan esos nuevos modelos: esta sería una categoría más grande que la primera.
  • Entonces, una de mis tareas es buscar nuevos modelos que puedan arrojar mejores resultados para los problemas que necesitamos resolver, y adaptarlos / combinarlos para satisfacer nuestras necesidades. Esto implica leer documentos, comprender los méritos y limitaciones de un modelo y probar el modelo si su fuente está disponible.
  • Una parte importante del trabajo es algo bastante mundano, como limpiar datos, ajustar los parámetros del modelo para mejorar el rendimiento, lidiar con problemas de escalabilidad / rendimiento (la mayoría de los modelos que se hacen de código abierto requieren un trabajo adicional considerable para que sea de calidad de producción ), etc.

¿Qué lo hace interesante?

  • Como programador, después de haber creado cosas en el pasado mediante la codificación, para ver un modelo de aprendizaje automático, aprenderá automáticamente las características para ciertos tipos de problemas ( por ejemplo, clasificar imágenes en gatos y perros, extraer información semántica del texto sin supervisión ) y producir resultados, ningún programador puede imaginarse escribir un programa para ( nuestros programas serían frágiles y no se pueden generalizar en ningún lugar cercano a lo que puede hacer un modelo ), lo hace fascinante.
  • Por supuesto, nos hace, irónicamente, como primates girando perillas, pero de todos modos es divertido. Incluso las pequeñas ideas de solo girar perillas son inmensamente gratificantes …

Solo soy un humilde programador, pero busqué en otro lado, con información de fuentes como Google, TED y algunos buenos promotores de la ciencia como Big Think y más, fue posible echar un vistazo. Primero, la IA está al borde de la ciencia cognitiva, las matemáticas y las preguntas filosóficas generales y también toma parte de los estudios evolutivos, ya que la evolución se basa principalmente en resolver problemas.

Además, el tema de la inteligencia es tan antiguo como la humanidad misma, en la antigüedad, en la filosofía, vino de entender lo que es la sabiduría y lo que hace a alguien más sabio y más, siempre quisimos entender la mente de Dios (no exactamente el Dios que eres contaba sobre religión pero, por ejemplo, sobre el Dios del que hablan Einstein y Hawkings, en este caso las reglas fundamentales de todo y que predice y revela todo), lo que en su mayoría alentó gran parte del desarrollo de las matemáticas, la física y la lógica, también sabe lo que hace Pensamientos y debates más consistentes es otro motivador. También siempre desarrollamos desafíos para comparar nuestra capacidad cognitiva y siempre desarrollamos muchas estrategias para ello. Una historia más reciente proviene de Liebinitz, Boole y Turing.

Por lo tanto, hay algunas cosas para hablar al respecto, el desarrollo del marco más básico se ha desarrollado en general y aún hasta ahora, en áreas muy diversas, desde juegos, psicología, filosofía, matemáticas, física, lógica, etc., el trabajo en IA sucede tanto en este marco general como en su compilación para llegar a algunas conclusiones, esas conclusiones vienen en forma de técnicas y paradigmas para desarrollar IA y a partir de esto se decide cómo programar cualquier cosa en esta área y, por supuesto, es en esa parte que tener los algoritmos abstractos (pseudocódigo). La parte más difícil y no especializada es del marco y tenemos una actividad más consistente por parte del código. Ahora, Machine Learning es el núcleo del desarrollo de la inteligencia artificial y, sobre todo, es importante, cuanto menos explícito sea necesario para que su software sea mejor, por lo que el trabajo de un programador de Machine Learning es aprovechar todo lo que sabe que generará un software inteligente y lo programará para el propósito más general posible y garantizar que el software pueda definir sus propias formas de resolver los problemas actuales y comprender las propiedades y patrones subyacentes del mundo que lo rodea, y una cosa muy importante que debe saber es que la prioridad no es, como ocurre generalmente en la programación: defina cómo resolver problemas, pero en su lugar, defina cómo resolver la solución para grandes espectros de problemas, por lo que el software sabe en gran medida cómo entender y adaptarse a algo hasta que finalmente llegue a una conclusión sobre su comportamiento sobre ese tema y sobre las soluciones en sí.

Entonces, más que solo la programación, Machine Learning también involucra cómo entrenar el software y garantizar que el comportamiento en sí mismo no sea dañino y que podamos controlarlo, ya que el software tiene objetivos y visiones al respecto que pueden entrar en conflicto con el dominio externo y Por supuesto, también puede saber cómo evitar hacer cosas no deseadas.

Estudiamos datos y muchos de ellos. Pasamos mucho tiempo limpiándolo, procesándolo y analizándolo. Ocasionalmente, obtenemos una nueva visión interesante. Esto es lo que hace que todo valga la pena.

More Interesting

¿Cómo puedo demostrar que si no escalo las características antes de aplicar el descenso de gradiente, disminuirá la convergencia?

¿Cuál es el artículo o recurso web más informativo sobre el modelado similar?

¿Es posible que una máquina de IA en el futuro descubra o pruebe una ley de la naturaleza por sí misma?

Si planeo obtener un doctorado en aprendizaje de refuerzo teórico, ¿qué profesores y universidades debería considerar?

¿Cuál es el mejor enfoque para medir la "calidad de las características" en una red neuronal?

¿Cuál es la mejor manera de predecir una clase +/- en un escenario de aprendizaje automático donde tengo k características trinarias y un conjunto de datos del orden de cientos o miles?

¿Cuáles son las ventajas y desventajas de Tracking Learning Detection (TLD) frente a otros métodos de rastreo de objetos como el filtrado de partículas?

¿Qué es el aprendizaje automático y sus diferencias con la inteligencia artificial?

Cómo encontrar el siguiente número de la lista de números anteriores usando el aprendizaje profundo

Si alguien está haciendo una maestría en OMS CS de Georgia Tech, ¿cuál es la mejor especialización en términos de perspectivas (suponiendo el mismo nivel de interés en cada una), bases de datos e ingeniería de software, aprendizaje automático o inteligencia interactiva?

# ¿Cómo puedo comenzar un trabajo de investigación sobre aprendizaje automático?

¿El proceso gaussiano supone que sus covarianzas se mantienen constantes?

¿Cuáles son los conjuntos de datos canónicos de aprendizaje automático utilizados como punto de referencia para demostrar un nuevo método?

Como científico de datos, ¿qué te inspiró a seguir una carrera en ciencia de datos?

¿Se puede colocar un previo en el hiperparámetro de un modelo bayesiano jerárquico?