Cómo participar en concursos de aprendizaje automático. Conferencia en Yandex

Muchos de los asistentes regulares al entrenamiento de ML tienen una opinión razonable de que participar en competiciones es la forma más rápida de ingresar a la profesión. Incluso tuvimos un artículo sobre este tema. El autor de la conferencia de hoy Arthur Kuzin, utilizando su propio ejemplo, mostró cómo puede volver a capacitarse en un par de años desde un campo que no está relacionado con la programación hasta un especialista en análisis de datos.


Hola a todos. Mi nombre es Arthur Cousin, soy un científico de datos líder en Dbrain.

Emil tenía un informe bastante completo, contando muchos aspectos. Me enfocaré en lo que considero más importante y divertido. Antes de llegar al tema del informe, quiero presentarme. En términos generales, me gradué de Física y durante unos 8 años, a partir del tercer año, trabajé en el laboratorio, que se encuentra en el piso del NK. Este laboratorio se dedica a la creación de micro y nanoestructuras.



Todo este tiempo trabajé como investigador, y esto no tenía nada que ver ni con ML ni con la programación. Esto muestra cuán bajo es el umbral para ingresar al aprendizaje automático, qué tan rápido puede desarrollarse en esto. Además, en la región de 2013, mis amigos me llamaron a una startup que estaba involucrada en ML. Y en el transcurso de 2-3 años estudié programación y ML al mismo tiempo. Mi progreso fue bastante lento: estudié materiales, profundicé en ellos, pero no fue tan rápido como está sucediendo ahora. Para mí, todo cambió cuando comencé a participar en competiciones de ML. La primera competencia fue de Avito, sobre la clasificación de los automóviles. Realmente no sabía cómo participar, pero logré tomar el tercer lugar. Inmediatamente después de eso, comenzó otra competencia, ya dedicada a la clasificación de anuncios. Había fotos, texto, descripción, precio, era una competencia compleja. En él, tomé el primer lugar, después de lo cual recibí una oferta casi de inmediato y me llevaron a Avito. Entonces no había un puesto junior, fui tomado inmediatamente por el medio, casi sin experiencia relevante.

Además, cuando ya estaba trabajando en Avito, comencé a participar en competencias en Kaggle y en aproximadamente un año recibí grandes maestros. Ahora estoy en el puesto 58 en el ranking general. Este es mi perfil Después de haber trabajado en Avito durante un año y medio, me mudé a Dbrain y ahora soy un poco director de ciencia de datos, coordinando el trabajo de siete científicos de datos. Todo lo que uso en mi trabajo lo aprendí de las competencias. Por lo tanto, creo que este es un tema muy interesante, y en todas las formas posibles abogo por participar en competencias y desarrollar.



A veces me preguntan qué hay que hacer si quieres convertirte en un científico de datos. Hay dos formas Primero escucha algún curso. Hay muchos de ellos, todos son de muy alta calidad. Pero para mí personalmente no funciona en absoluto. Todas las personas son diferentes, pero no me gusta, simplemente porque, como regla, los cursos son tareas muy abstractas, y cuando paso por una sección, no siempre entiendo por qué necesito saberlo. En contraste con este enfoque, simplemente puede tomar y comenzar a resolver la competencia. Y este es un flujo completamente diferente en términos de enfoque. Se diferencia en que adquieres inmediatamente una cierta cantidad de conocimiento y comienzas a estudiar un nuevo tema cuando te encuentras con un desconocido. Es decir, comienza a decidir y comprender que carece de conocimiento sobre cómo entrenar una red neuronal. Tomas, googleas y estudias, solo cuando lo necesitas. Es muy simple en términos de motivación, progreso, porque ya tienes una tarea estrictamente formulada en el marco de la competencia, una métrica objetivo y mucho apoyo en términos de chat de Open Data Science. Y, como un bono distante, es que su decisión será un proyecto que aún no está allí.



¿Por qué es tan divertido? ¿De dónde son las emociones positivas? La idea es que cuando envía una presentación y es un poco mejor que la anterior, dicen: mejoró la métrica, es genial. Subes a la tabla de clasificación. Por el contrario, si no hace nada y no envía envíos, entonces baja. Y provoca una retroalimentación: te sientes bien cuando progresas, y viceversa. Este es un mecanismo genial que explota, al parecer, solo Kaggle. Y otro punto: Kaggle explota el mismo mecanismo de dependencia que las máquinas tragamonedas y Tinder. No sabe si su presentación es mejor o peor. Esto provoca una expectativa de un resultado desconocido para usted. Por lo tanto, Kaggle es altamente adictivo, pero es bastante constructivo: desarrollas e intentas mejorar tu decisión.

¿Cómo obtener la primera dosis? Necesitas entrar en la sección de núcleos. Presentan algunas piezas de tubería o la solución completa. Una pregunta separada es por qué la gente hace esto. Un hombre pasó un tiempo desarrollándose: ¿qué sentido tiene ponerlo en público? Pueden aprovechar y evitar al autor.

La idea es que, en primer lugar, no se presentan las mejores soluciones. Como regla general, estas soluciones no son óptimas desde el punto de vista de los modelos de capacitación, no tienen todos los matices, pero hay una tubería completa desde el principio hasta el final para que no resuelva tareas rutinarias relacionadas con el procesamiento de datos, el postprocesamiento, la recopilación de envíos, etc. Esto está bajando el umbral de entrada para atraer nuevos participantes. Debe comprender que la comunidad de científicos de datos está muy abierta a la discusión y, en general, es bastante positiva. No he visto esto en la comunidad científica. La principal motivación es que las personas nuevas vienen con nuevas ideas. Esto desarrolla una discusión sobre el problema, la competencia y permite que toda la comunidad se desarrolle.

Si tomaste la decisión de otra persona, la lanzaste, comenzaste a entrenar, entonces lo siguiente que recomiendo hacer es analizar los datos. Consejo banal, pero no vas a creer cuántas personas de la parte superior no lo usan. Para entender por qué esto es importante, le aconsejo que vea el informe de Eugene Nizhibitsky. Habla sobre las caras en los concursos de cine y sobre la cara en Airbus , que también se puede ver simplemente mirando los datos. Esto no lleva mucho tiempo y ayuda a comprender el problema. Y las caras en las imágenes eran sobre el hecho de que en diferentes plataformas y en diferentes competiciones era posible obtener respuestas de prueba del tren. Es decir, no puede entrenar ningún modelo, solo mire los datos y comprenda cómo puede recopilar las respuestas para su prueba, parcial o completamente. Este es un hábito que es importante no solo en las competiciones, sino también en la práctica real, cuando trabajas con científicos de datos. En la vida real, lo más probable es que la tarea esté mal formulada. No lo formula, pero necesita comprender cuál es su esencia y la esencia de los datos. El hábito de mirar los datos es muy importante, dedicar tiempo a ellos.

A continuación, debe comprender cuál es la tarea. Si observa los datos y comprende cuál es el objetivo ... Usted, si lo entiendo correctamente, en su mayor parte, es de Fiztekh. Debes tener un pensamiento crítico que te lleve a la pregunta: ¿por qué las personas que diseñaron la competencia hicieron todo bien? ¿Por qué no cambiar, por ejemplo, la métrica objetivo, buscar otra cosa y recopilar las cosas correctas de la nueva métrica? En mi opinión, ahora que hay un montón de tutoriales y código de otras personas, hacer que la predicción de feeds no sea un problema. Entrenar un modelo, entrenar una red neuronal es una tarea muy simple, accesible para un círculo muy amplio de personas. Pero es importante entender cuál es su objetivo, qué predice y cómo armar su métrica objetivo. Si predices algo irrelevante en la realidad objetiva, entonces el modelo simplemente no aprende y obtienes muy mala velocidad.

Ejemplos. Hubo una competencia que tuvo lugar en el Topcoder Konica-Minolta.



Consistía en lo siguiente: tiene dos imágenes, la superior, y una de ellas tiene suciedad, un pequeño punto a la derecha. Era necesario resaltarlo y segmentarlo. Parecería una tarea muy simple, y las redes neuronales deberían resolverlo a la vez. Pero el problema es que estas son dos imágenes que se tomaron con diferencia horaria o con cámaras diferentes. Como resultado, una imagen se movió un poco en relación con otra. La escala era realmente muy pequeña. Pero había otra característica de esta tarea: las máscaras también son pequeñas. Hay una imagen que se movió en relación con otra, mientras que la máscara todavía se movió en relación con ella. Está aproximadamente claro cuál es la dificultad.



Aleksey Buslaev en tercer lugar, tomó la red neuronal siamesa con dos entradas para que estos jefes siameses aprendieran algunas transformaciones con respecto a esta imagen distorsionada. Después de eso, combinó estas características, tuvo un conjunto de circunvoluciones y obtuvo algún tipo de predicción. Para nivelar este cant en los datos, creó una red bastante complicada. Por ejemplo, nunca he entrenado una red siamesa, no he tenido que hacer esto. Lo hizo, es genial, tomó el tercer lugar. En primer lugar fue Evgeny (nrzb.), Que simplemente cambió el tamaño de la imagen. Él vio esto como un error en los datos, porque los miró, redimensionó las imágenes y entrenó a la vainilla UNet. Esta es una red neuronal muy simple, está solo en el libro de texto, en los artículos. Esto muestra que si observa los datos y selecciona el objetivo correcto, puede estar en la cima con una solución simple.

Terminé en segundo lugar, porque soy amigo de Zhenya, después de eso los topcoders se ofendieron por alguna razón y no me llevaron al equipo de Kaggle. Pero son muchachos geniales, Topcoder tomó 5-6 lugar, esto (NRZB.) Y Victor Durnov. Alexander Buslaev tomó el tercer lugar. Se unieron y mostraron a la clase en una competencia que estaba en Kaggle. Este también es un ejemplo de una solución muy hermosa, cuando los tipos no solo desarrollaron una arquitectura monstruosa, sino que eligieron el objetivo correcto.


Enlace desde la diapositiva

La tarea aquí era segmentar las células, y no solo decir dónde está la célula y dónde no, sino que era necesario aislar las células individuales, como la segmentación por etapas de cada célula independiente. Además, antes de esta competencia hubo muchas competiciones de segmentación, y se afirmó que el problema de la segmentación fue resuelto bastante bien por la comunidad ODS, a nivel de oficio, una cierta ciencia de punta que nos permite resolver bien este problema.

Al mismo tiempo, la tarea de segmentación inst, cuando necesita separar las celdas, se resolvió muy mal. El estado del arte antes de esta competencia fue MacrCNN, que es un tipo de detector, un extractor de funciones, luego un bloque que realiza la segmentación de máscaras, y todo es bastante difícil de entrenar, debes entrenar cada pieza de la tubería por separado, es una canción completa.

En cambio, Topcoder desarrolló una tubería cuando solo predice celdas y bordes. La segmentación de la tubería es complicada por menor y le permite hacer una segmentación muy hermosa, restando los bordes de las celdas. Después de eso, elevaron el listón en términos de la precisión de este algoritmo, mientras que su red neuronal separada predice las células mejor que cualquier cosa que los académicos hayan hecho antes en esta área. Esto es genial para los topcoders y muy malo para los académicos. Hasta donde yo sé, recientemente los académicos intentaron publicar un artículo sobre este datasat, lo rechazaron porque no pudieron superar el resultado en Kaggle. Han llegado tiempos difíciles para los académicos, ahora tenemos que hacer algo normal, y no solo hacer un trabajo cifrado en su campo.



Lo siguiente por lo que me ahogo mucho, no solo en Kaggle, sino también en el trabajo, es el entrenamiento de tuberías. No veo muchos valores al hacer una monstruosa arquitectura de red neuronal, creando piezas geniales con atenuación, con concatenaciones de características. Todo funciona, pero es mucho más importante poder entrenar una red neuronal. Y no tiene sentido cohete, es algo bastante simple, teniendo en cuenta que ahora hay un montón de artículos, tutoriales, etc. Veo muchos valores en el hecho de que solo tuvo un entrenamiento de tubería. Entiendo esto como un código que se ejecuta en una configuración, y le enseña una red neuronal de una manera controlada, predecible y bastante rápida.

Esta diapositiva muestra los registros de entrenamiento de la competencia que se está llevando a cabo ahora, Kaggle Salt. Todavía tengo un montón de tarjetas de video, esto también es una ventaja. La idea es que, con la ayuda de la tubería, hice una búsqueda en la cuadrícula de arquitecturas que me parecieron las más interesantes. Acabo de hacer una configuración de lanzamiento para todas las arquitecturas, por convención, un foro en el zoológico de redes neuronales, me acerqué y entrené a todas las redes neuronales sin hacer ningún esfuerzo. Esta es una gran ventaja, y esto es lo que reutilizo de competencia en competencia y en el trabajo. Por lo tanto, estoy extremadamente agitado no solo para entrenar redes neuronales, sino también para pensar en lo que está enseñando y lo que escribe en términos de la tubería, para que pueda reutilizarlo.



Aquí destaqué algunas cosas clave que deberían estar en la tubería de capacitación. Esta es una configuración de inicio que define completamente el proceso de aprendizaje. Donde especifique todos los parámetros sobre datos, sobre redes neuronales, sobre pérdidas, todo debería estar en la configuración de inicio. Esto debería ser controlable. Registro adicional. Los hermosos registros que mostré son el resultado del hecho de que grabo cada paso que doy.

La modularidad significa que no le llevará mucho tiempo agregar una nueva red neuronal, un nuevo aumento, un nuevo conjunto de datos. Todo esto debería ser muy simple y fácil de mantener.

La reproducibilidad es solo arreglar las semillas, aunque no solo las aleatorias en NumPy y Random, sino que todavía hay algunos paiterchiks, te contaré más. Y reutilización. Una vez que haya desarrollado una tubería, puede usarse en otras tareas. Y esta es una gran ventaja, aquellos que comienzan a participar en las competiciones antes de tiempo, pueden continuar usando estas tuberías en las competiciones y en el trabajo, todo esto brinda una gran ventaja a otros participantes.

Algunos pueden preguntar: ¿No sé cómo codificar, qué hacer, cómo desarrollar una tubería? Hay una solución


Enlaces de la diapositiva: primero , segundo , tercero

Sergey Kolesnikov es mi colega que trabaja en Dbrain, ha estado desarrollando tal cosa durante mucho tiempo. Al principio la llamó PyTorch Common, luego la llamó Prometeo, ahora se llama Catalista. Lo más probable es que en una semana el nombre sea diferente, pero el enlace será al siguiente nombre, siga el enlace "Catalista".

La idea es que Sergey ha desarrollado algún tipo de lib, que es un trainloop. Y en la versión actual tiene casi todas las propiedades que describí. Todavía hay un montón de ejemplos sobre cómo hacer la clasificación, la segmentación y un montón de otras cosas interesantes que desarrolló.

Aquí hay una lista de características que están y están en desarrollo. Puede tomar esta biblioteca y comenzar a usarla para entrenar sus algoritmos, sus redes neuronales en la competencia que se está llevando a cabo actualmente. Recomiendo a todos que lo hagan.

En contraste, hay otro FastAI, recientemente lanzado, versión 1.0, pero hay un código desagradable y nada está claro.

Puede dominarlo, le dará un poco de crecimiento, pero debido al hecho de que está muy mal escrito en términos de código, tienen su propio flujo en términos de cómo debería escribirse. Comenzando en algún momento, no entenderás lo que está sucediendo. Por lo tanto, no recomiendo FastAI, recomiendo usar cualquier "Catalista".



Ahora suponga que pasó por todo esto, tiene su propia tubería, su propia decisión, y ahora puede participar en el equipo. A Emil le preguntaron cuán justificable es unirse a un equipo si participa de cómo sucede esto. Me parece que el trabajo en equipo vale la pena de todos modos, incluso si no estás en la cima, sino en algún lugar en el medio. Si desarrolló su solución usted mismo, siempre difiere de la decisión de otras personas en algunos detalles. Y cuando se combina, casi siempre da impulso con otros participantes.

Además, es divertido, es un poco de trabajo en equipo en términos del hecho de que ahora tendrán un repositorio común donde pueden ver el código del otro, tienen un formato común para las presentaciones y una sala de chat donde sucede toda la diversión. La interacción social y las habilidades sociales también son muy importantes en el trabajo, que también vale la pena desarrollar.



Esta es una gran ventaja en el sentido de que ahora ves el código de otras personas, cómo toman esta o aquella decisión. Y a menudo busco en el repositorio con mis comandos anteriores, encuentro soluciones interesantes en términos del código en sí. Esto es lo que se puede sacar de la competencia en forma de trabajo en equipo.

Supongamos que has ido toda esta ronda. ¿Qué has soportado?



Lo más probable es que hayas aprendido a ejecutar el código de otra persona. Realmente espero que hayas desarrollado el hábito de mirar datos. Entiende el problema, ha aprendido a realizar experimentos, tiene algún tipo de solución propia y ahora puede diseñarlo en forma de proyecto. Si observa de manera abstracta, es muy similar al trabajo normal en alguna empresa de TI. Si pasó por una competencia y mostró un buen resultado, este es un punto fuerte en el currículum, al menos para mí. Alrededor de 20-25 me entrevistaron cuando recluté en Dbrain. Algunos casos límite podrían identificarse allí. Había un tipo que acababa de ejecutar el núcleo público, y realmente no lo resolvió. Se veía mal para mí, solo quería que el tipo entendiera el problema, no lo tomé.

Otro tipo que honestamente dijo que estaba en la clasificación, pero al mismo tiempo contó todos los detalles de su decisión, que estaba en el Datascience Bowl, lo tomamos, realmente me gusta trabajar con él. Kaggle y su decisión de que hay un punto bastante fuerte en su currículum, si puede formatearlo correctamente en forma de presentación, es un buen espectáculo para el futuro empleador.

Si tengo preguntas sobre ganancias personales, espero haber cerrado, ¿por qué las empresas necesitan esto?



Trabajé en Avito, regularmente realizaban concursos sobre análisis de datos. Hay varias razones para esto. Cuando se lleva a cabo la competencia, debe recopilar al menos un conjunto de datos y formular muy bien la tarea, lo cual es un poco complicado.


Enlace desde la diapositiva

Es decir, la declaración del problema más el conjunto de datos ya es mucho para la empresa. , «» , , , , . — , , .

, , , , . , , . - , , , .

, , — . , . , «» , . «» — , .



, — . , - . , — , . , , , . — importance XGBoost . , , . . , . , . , .

, , - , , , . , , , .



Coursera , . — ML- ODS- . .

Source: https://habr.com/ru/post/es426889/


All Articles