Curso práctico de Aprendizaje profundo. Lección I
Curso práctico de Aprendizaje profundo. Lección I
Bienvenido a Aprendizaje Profundo Práctico para programadores, lección uno. Esta es la versión cinco de este curso, y es la primera nueva que hemos hecho en dos años. Entonces, ¡tenemos muchas cosas geniales que cubrir! Es increíble cuánto ha cambiado. Aquí hay un xkcd de finales de 2015.
¿Quién aquí ha visto cómics de xkcd antes? …Casi todo el mundo. No es sorprendente.
Así que el chiste básico aquí es… Te dejaré leerlo y luego volveré a él.
Por lo tanto, puede ser difícil saber qué es fácil y qué es casi imposible, y en 2015 o a fines de 2015, la idea de verificar si algo es una foto de un pájaro se consideró casi imposible. Tan imposible, era la idea básica de una broma. Porque todo el mundo sabe que
eso es casi imposible. ¡Ahora vamos a construir exactamente ese sistema de forma gratuita en unos dos minutos!
Entonces, construyamos un sistema de «¿es un pájaro?». Entonces, vamos a usar python, y voy a repasar esto muy rápido. No se espera que lo analices conmigo porque volveremos a eso. Pero sigamos adelante y ejecutemos esa celda.
Bien, entonces lo que estamos haciendo es buscar en DuckDuckgo imágenes de fotos de aves y solo vamos a tomar una y aquí está la URL del pájaro que tomamos.
Bien, lo descargaremos. Bien, ahí está. Así que tomamos un pájaro y ahora tenemos algo que puede descargar imágenes de pájaros. Ahora vamos a necesitar construir un sistema que pueda reconocer cosas que son pájaros versus cosas que no son pájaros, a partir de fotos. Ahora, por supuesto, las computadoras necesitan números para trabajar, pero afortunadamente las imágenes están hechas de números.
De hecho, encontré este sitio web realmente agradable llamado pixby donde puedo agarrar un pájaro, y si me muevo sobre él (escojamos su pico) verás aquí que esa parte del pico tenía 251 brillos de rojo, 48 de verde y 21 de azul. Así que eso es RGB. Entonces, pueden ver que mientras agito la mano, esos colores están cambiando (esos números). Entonces, esta imagen, lo que reconocemos como imagen, es en realidad 256 x 171 x 3 números, entre 0 y 255, que representan la cantidad de rojo, verde y azul en cada píxel. Eso será una entrada
para nuestro programa, que intentará averiguar si se trata de una imagen de un pájaro o no.
De acuerdo, sigamos adelante y ejecutemos esta celda, que va a pasar por… (y necesitaba pájaro y no pájaro, pero realmente no puedes buscar imágenes de Google o imágenes de DuckDuckGo para no un pájaro, simplemente no funciona de esa manera. Así que simplemente decidí usar bosque; pensé que bien, las imágenes de bosque frente a las imágenes de pájaros suenan como un buen punto de partida). Así que revisé cada uno de: bosque y pájaro. Y busco foto de bosque y foto de pájaro, descargo imágenes, y luego las cambio de tamaño para que no superen los 400 píxeles por lado, solo porque no necesitamos unas particularmente grandes y toma una cantidad de tiempo sorprendentemente grande solo por un computadora para abrir una imagen. Bien, ahora tenemos 200 de cada uno. Encuentro que cuando descargo imágenes, a menudo obtengo algunas rotas y si intenta entrenar un modelo con imágenes rotas, no funcionará. Así que aquí hay algo que solo verifica cada imagen y desvincula, por lo que elimina las que no funcionan Bien, ahora podemos crear lo que se llama un bloque de datos. Entonces, después de ejecutar esta celda, verá que básicamente… Revisaré los detalles de esto más adelante, pero… un bloque de datos proporciona a fast.ai (la biblioteca) toda la información que necesita para crear una visión por computadora. modelo. Y entonces, en este caso, básicamente lo decimos… obtener todos los archivos de imagen que acabamos de descargar.
Y luego decimos muéstrame algunos hasta seis, y veamos… sí, así que tenemos algunos pájaros, bosque, pájaro, pájaro, bosque. De acuerdo, una de las cosas buenas de hacer modelos de visión por computadora es que es realmente fácil verificar sus datos porque solo puede mirarlos, lo que no es el caso para muchos tipos de modelos. Bien, ahora hemos descargado 200 imágenes de pájaros, 200 imágenes de bosques,
así que ahora presionaremos ejecutar. Y este modelo se está ejecutando en mi computadora portátil, por lo que no está utilizando un gran centro de datos. Se está ejecutando en mi computadora portátil de presentación. Y lo está haciendo al mismo tiempo que mi computadora portátil está transmitiendo video, lo que posiblemente sea una mala idea. Entonces, lo que va a hacer es revisar cada foto de esas 400,
y para las que son bosques, aprenderá un poco más sobre cómo se ve el bosque y para las que son pájaros, aprenderá un poco más sobre cómo se ve el pájaro. Entonces, en general, tomó menos de 30 segundos, y lo creas o no, eso es suficiente para terminar de hacer lo que estaba en ese cómic de xkcd.
Verifiquemos pasando ese pájaro que descargamos al principio. Este es un pájaro. Probabilidad de que sea un pájaro: 1,0000 (redondeado a los cuatro decimales más cercanos). Así que algo bastante extraordinario ha sucedido desde finales de 2015, que es literalmente algo que ha pasado de ser tan imposible que es una broma a tan fácil que puedo ejecutarlo en mi computadora portátil en (no sé cuánto tiempo fue) alrededor de dos minutos. . Y espero que eso te dé la sensación de que crear programas realmente interesantes, ya sabes, que realmente funcionen con aprendizaje profundo es algo que… no requiere mucho código, no tomó nada de matemáticas, no tomó más que mi computadora portátil . De hecho, es bastante accesible.
Eso es realmente lo que vamos a aprender en las próximas siete semanas. Entonces, ¿dónde hemos llegado ahora con el aprendizaje profundo? Bueno, se mueve muy rápido, pero incluso en las últimas semanas, lo hemos llevado a otro nivel como comunidad. Es posible que hayas visto que se ha lanzado algo llamado DALLꞏEꞏ2 que utiliza el aprendizaje profundo para generar nuevas imágenes. Y pensé que esto era algo increíble que hizo este chico, tomó las biografías de Twitter de sus amigos y las escribió en la entrada DALLꞏEꞏ2 y generó estas imágenes. Así que este tipo… escribió compromiso, simpático, psicodélico, filosófico, y generó estas imágenes. Así que solo te mostraré algunos de estos. Te dejaré leerlos…
Me encanta eso. ¡Esa es bastante increíble, creo! Realmente. Me encanta esto. Happy Sisyphus en realidad tiene una roca feliz para moverse. Así que esto es como, um, sí, no sé. Cuando los miro, todavía me sorprende que se trate de un algoritmo informático que no usa nada más que esta entrada de texto para generar estas imágenes arbitrarias. En este caso de cosas bastante, ya sabes, complejas y creativas. Entonces, el tipo que hizo esos puntos, esto es como… pasa unos dos minutos más o menos, ya sabes, creando cada uno de estos. Por ejemplo, prueba algunas indicaciones diferentes y prueba algunas imágenes diferentes, ya sabes, por lo que ha dado un ejemplo aquí de… como cuando escribe algo en el sistema … aquí hay un ejemplo de 10 cosas diferentes que recibe cuando él pone una «pintura expresiva de un hombre que brilla rayos de justicia y transparencia, en un logotipo de twitter de pájaro azul».
Así que no es solo, ya sabes, DALLꞏEꞏ2, para ser claro. Hay, ya sabes, muchos sistemas diferentes haciendo algo como esto ahora. Hay algo llamado MidJourney, que esta cuenta de Twitter publicó: una «mujer científica con una computadora portátil escribiendo código, en un estilo simbólico, significativo y vibrante». Esta de aquí es «una foto en HD de un raro elefante rosa psicodélico». Y este creo que es el segundo aquí (nunca sé cómo pronunciarlo realmente). Este es bastante genial, «un murciélago ciego con grandes gafas de sol con un bastón en la mano». Entonces, cuando los artistas reales, ya sabes, esto por ejemplo, este tipo dijo que no sabe nada sobre arte, sabes que no tiene talento artístico, es solo algo que sabes, él armó. Este tipo es un artista que en realidad escribe su propio software basado en el aprendizaje profundo y pasa, ya sabes, meses creando cosas y, como puedes ver, realmente puedes llevarlo al siguiente nivel. De hecho, ha sido genial ver cómo muchos ex alumnos de fast.ai con antecedentes como artistas han logrado unir el aprendizaje profundo y el arte, y es una dirección muy emocionante. Y no son solo imágenes para ser claros, sabes que una de las otras cosas interesantes que han aparecido en
las últimas semanas es el modelo de lenguaje de rutas de Google que puede tomar cualquier inglés arbitrario como texto, una pregunta y puede crear una respuesta que no solo responde la pregunta, pero también explica su forma de pensar (sea lo que sea que signifique que un modelo de lenguaje esté pensando). Una de las que me pareció bastante sorprendente fue que puede explicar una broma. Te dejaré leer esto…
Entonces, en realidad es una broma que probablemente necesite explicaciones para cualquiera que no esté familiarizado con las TPU. Entonces, este modelo, solo tomó el texto como entrada y creó este texto como salida. Y para que pueda ver, ya sabe, nuevamente, los modelos de aprendizaje profundo están haciendo cosas que creo que muy pocos, si alguno de nosotros hubiera creído que sería posible hacer con computadoras incluso en nuestra vida. Esto significa que hay mucho de consideraciones prácticas y éticas. Los abordaremos durante este curso, pero no podemos esperar hacerles justicia. Por lo tanto, sin duda lo alentaría a que consulte ética.fast.ai para ver todo nuestro curso de ética de datos, impartido por mi cofundadora, la Dra. Rachel Thomas, que aborda estos temas con mucho más detalle. Muy bien, además de ser un investigador de inteligencia artificial en la Universidad de Queensland y fast.ai, también soy un maestro de escuela primaria de educación en el hogar y por esa razón estudio mucho la educación. Una de las personas que me encantan en la educación es un tipo llamado Dylan Williams y tiene este gran enfoque en sus aulas para averiguar cómo se llevan sus alumnos, que consiste en poner un vaso de color en su escritorio , verde para indicar que estoy bien, taza amarilla para indicar que no estoy muy seguro y taza roja para indicar que no tengo ni idea de lo que está pasando. Ahora, dado que la mayoría de ustedes está viendo esto de forma remota, no puedo mirar sus vasos y no creo que nadie haya comprado vasos de colores con ellos hoy, así que tenemos una versión en línea de esto. Entonces, lo que quiero que hagas es ir a cups.fast.ai/fast – eso es cups.fast.ai/fast – y no hagas esto si eres, como, un experto en fast.ai que ha realizado el curso cinco veces, porque si estás siguiendo eso no significa mucho, obviamente. Esto es realmente para personas que,
ya sabes, aún no son expertos en fast.ai. Y entonces haga clic en uno de estos botones de colores. Y lo que haré es ir a la versión para maestros y ver qué botones estás presionando. ¡Está bien! Entonces, hasta ahora, la gente siente que no estamos yendo demasiado rápido en general. Tenemos uno, no, no uno, breve rojo. ¡De acuerdo! Entonces, hola Nick, esta URL, lo mismo con el maestro al final, si puedes, mantén eso abierto también y avísame si de repente se cubre de rojo. Si eres alguien que es rojo, no voy a acudir a ti ahora porque no hay suficiente de ti para detener la clase. Así que depende de usted preguntar en el foro o en el chat en vivo de YouTube, y hay muchas personas afortunadamente que podrán ayudarlo, espero. ¡Está bien! Quería hacer un gran saludo a Radek. Radeck creó cups.fast.ai para
mí. Le dije la semana pasada que necesito una forma de ver tazas de colores en Internet y lo escribió en una tarde. Y también quería mencionar que Radek acaba de anunciar hoy que consiguió un trabajo en Nvidia AI y quería decir, ya sabes, que los ex alumnos de fast.ai de todo el mundo con mucha frecuencia, como cada uno o dos días, me envían un correo electrónico a dicen que tienen el trabajo de sus sueños. Sí… Si buscas inspiración sobre cómo incursionar en este campo, no podría recomendarte nada… nada sería mejor que ver el trabajo de Radek. Y de hecho ha escrito un libro sobre su viaje. Tiene muchos consejos en particular sobre cómo aprovechar fast.ai: aprovechar al máximo estas lecciones. Y entonces, ciertamente lo haría… así que échale un vistazo también. Y si estás aquí en vivo, él también es uno de nuestros TA, así que puedes saludarlo después. Se ve exactamente como esta foto aquí. Así que mencioné que pasé mucho tiempo estudiando educación tanto para mis deberes de educación en el hogar como para mis cursos, y verán que hay algo un poco diferente, muy diferente en este curso… que es que comenzamos capacitando a un modelo. No comenzamos haciendo una revisión en profundidad de álgebra lineal y cálculo. Eso se debe a que dos de mis escritores e investigadores favoritos sobre educación, Paul Lockhart y David Perkins, y muchos otros, hablan sobre cómo las personas aprenden mucho mejor cuando aprenden con un contexto establecido. Entonces, la forma en que aprendemos matemáticas en la escuela donde contamos y luego sumamos y luego fracciones y luego decimales y luego bla, bla, bla y ya sabes, 15 años después , comenzamos a hacer cosas realmente interesantes en la escuela de posgrado. Esa no es la forma en que la mayoría de las personas aprenden de manera efectiva. La forma en que la mayoría de las personas aprende de manera efectiva es a partir de la forma en que enseñamos deportes, por ejemplo, cuando le mostramos un juego completo de deportes.
Te mostramos lo divertido que es. Vas y empiezas a practicar deportes, versiones simples de ellos, no eres muy bueno, verdad y luego poco a poco vas juntando más y más piezas. Así es como hacemos el aprendizaje profundo. Profundizarás tanto como las clases más sofisticadas y
técnicamente detalladas que encontrarás, ¡más tarde, cierto! Pero primero aprenderá a ser muy, muy bueno construyendo e implementando modelos. Y aprenderá por qué y cómo funcionan las cosas según sus necesidades, para pasar al siguiente nivel. Para aquellos de ustedes que han pasado mucho tiempo en educación técnica (como si han hecho un doctorado o algo así) encontrarán esto profundamente incómodo porque querrán entender por qué todo funciona desde el principio. Solo haz tu mejor esfuerzo para aceptarlo. Aquellos de ustedes que no lo hayan hecho encontrarán esto muy natural. ¡Vaya! Y este es Dylan Wiliam, a quien mencioné antes, el tipo que ideó las cosas realmente geniales de las tazas. Habrá muchos trucos que han surgido de la literatura de investigación educativa dispersa a lo largo de este curso. En general, no los llamaré, solo estarán allí, pero tal vez de vez en cuando hablemos de ellos. ¡Está bien! Entonces, antes de comenzar a hablar sobre cómo construimos realmente ese modelo y cómo funciona, supongo que debería convencerlos de que vale la pena escucharme. Trataré de hacerlo razonablemente rápido, porque no me gusta hacer sonar mi propio cuerno, pero sé que es importante. Entonces, lo primero
que mencioné sobre mí es que mi amigo Silvain y yo escribimos este libro extremadamente popular «Aprendizaje profundo para programadores» y ese libro es en lo que se basa en gran medida este curso. No vamos a usar ningún material del libro directamente, y eso podría sorprenderte, pero la razón en realidad es que la literatura de investigación educativa muestra que las personas aprenden mejor las cosas cuando escuchan lo mismo de muchas formas diferentes. Así que quiero que lea el libro y también verá la misma información presentada de una manera diferente, en estos videos. Entonces, una de las partes de la tarea después de cada lección será leer un capítulo del libro.
A mucha gente le gusta el libro. A Peter Norvig, director de investigación, le encanta el libro. De hecho, los suyos aquí «una de las mejores fuentes para que un programador se vuelva experto en aprendizaje profundo». A Eric Topple le encanta el libro. A Hal Varian, profesor emérito de Berkeley, economista jefe de Google, le gusta el libro. A Jerome Pecente, que es el jefe de IA en Facebook, le gusta el libro. A mucha gente le gusta el libro, así que espero que a usted también le guste este material. Pasé unos 30 años de mi vida trabajando en el aprendizaje automático y en torno a él, incluida la creación de varias empresas que dependían de él.
Y se convirtió en el competidor mejor clasificado del mundo en Kaggle en competencias de aprendizaje automático. Mi empresa, Enlitic, que fundé, fue la primera empresa en especializarse en aprendizaje profundo para la medicina, y el MIT la votó como una de las 50 empresas más inteligentes en 2016, justo por encima de Facebook y Spacex. Empecé fast.ai con Rachel Thomas y eso fue hace bastantes años, pero ya ha tenido un gran impacto en el mundo, incluido el trabajo que hemos hecho con nuestros estudiantes, ha sido reconocido mundialmente, como nuestra victoria en el Competencia DAWNBench que mostró cómo podemos entrenar grandes redes neuronales más rápido que nadie en el mundo y más barato que nadie en el mundo.
Y ese fue un gran paso en 2018, que en realidad marcó una gran diferencia. Google
comenzó a utilizar nuestros enfoques especiales en sus modelos. Nvidia comenzó a optimizar
sus cosas usando nuestros enfoques. Así que hizo una gran diferencia allí.
Soy el inventor del algoritmo ULMFiT que, según el libro de Transformers,
fue uno de los dos pilares fundamentales de la revolución moderna de la PNL. Este es el
documento aquí. Y en realidad, ya sabes, un punto interesante sobre eso, en realidad se inventó para
un curso de fast.ai. Así que la primera vez que apareció no fue en realidad en
la revista. En realidad, fue en la lección cuatro
del curso, creo, el curso de 2016, si no recuerdo mal.
Y, lo más importante, por supuesto, he estado enseñando este curso desde la versión uno. Y
, en realidad, creo que esta es la primera versión (que incluso en ese entonces
estaba llamando la atención de hbr). Mucha gente ha estado viendo el curso y ha sido, ya sabes,
muy utilizado. Youtube ya no muestra Me gusta, así que tengo que mostrarte nuestros Me gusta.
Sabes, ha sido increíble ver cuántos exalumnos han pasado de esto a, ya sabes,
a hacer cosas realmente increíbles, ya sabes. Y así, por ejemplo, Andrej Karpathy me dijo
que en Tesla, creo que dijo, casi todos los que se unen a Tesla en IA
están destinados a hacer este curso. Creo que en OpenAI me dijeron que
todos los residentes que se unen allí primero hacen este curso. Así que este, ya sabes, este curso,
se usa mucho en la industria y la investigación para las personas, y tienen mucho éxito.
De acuerdo, hay un poco de información breve sobre por qué, con suerte, deberías continuar con esto.
Muy bien, volvamos a lo que sucedió aquí. ¿Por qué podemos crear
un reconocedor de aves en uno o dos minutos? ¿Y por qué no pudimos hacerlo antes?
Así que voy a volver a 2012 y en 2012 así era como se hacía el reconocimiento de imágenes.
Este es el patólogo computacional: fue un proyecto realizado en Stanford. Un proyecto muy exitoso y
muy famoso que analizaba la supervivencia de cinco años de pacientes con cáncer de mama
al observar sus diapositivas de imágenes de histopatología. Ahora bien, esto es lo que yo llamaría un enfoque clásico de
aprendizaje automático. Y hablé con la autora principal de esto, Daphne Koller,
y le pregunté por qué no usaban el aprendizaje profundo y ella dijo: «bueno,
ya sabes, no estaba realmente en el radar en ese momento». Entonces, esto es como un enfoque previo al aprendizaje profundo
. Entonces, la forma en que lo hicieron fue que consiguieron un gran equipo de matemáticos,
informáticos, patólogos, etc., para que se reunieran y construyeran estas ideas para características,
como las relaciones entre vecinos nucleares epiteliales . De hecho, crearon miles y miles
de características, y cada una requirió mucha experiencia de un grupo interdisciplinario de
expertos en Stanford. Así que este proyecto llevó años , mucha gente, mucho código y
muchas matemáticas. Y luego, una vez que tenían todas estas características, las introdujeron en un
modelo de aprendizaje automático, en este caso, regresión logística, para predecir la supervivencia. Como digo tiene mucho éxito,
cierto, pero no es algo que pueda crear para ti en un minuto al comienzo de un curso.
La diferencia con las redes neuronales es que las redes neuronales no requieren que desarrollemos estas funciones.
¡Ellos los construyen para nosotros! Entonces, lo que realmente sucedió fue, creo que fue en 2015,
Matt Zeiler y Rob Fergus tomaron una red neuronal entrenada y miraron dentro de ella
para ver qué había aprendido. Así que no le damos funciones, le pedimos que aprenda funciones.
Entonces, cuando Zeiler y Zeiler miraron dentro de una red neuronal, miraron los
pesos reales en el modelo y dibujaron una imagen de ellos. Y estos fueron nueve de los juegos de pesas
que encontraron. Y este conjunto de pesos, por ejemplo, encuentra bordes diagonales. Este conjunto de pesos encuentra
gradientes de amarillo a azul. Y este conjunto de pesos encuentra gradientes de rojo a verde, y así sucesivamente, correcto.
Y luego aquí abajo hay ejemplos de algunos fragmentos de fotos que coinciden estrechamente, por ejemplo, con
este detector de funciones. Y el aprendizaje profundo, quiero decir, es profundo porque podemos tomar
estas funciones y combinarlas para crear funciones más avanzadas.
Estas son algunas características de la capa dos. Entonces, hay una función, por ejemplo, que encuentra esquinas.
Y una característica que encuentra curvas. Y una característica que encuentra círculos.
Y aquí hay algunos ejemplos de fragmentos de imágenes que encontró el buscador de círculos. Y recuerde,
con una red neuronal, que es la función básica utilizada en el aprendizaje profundo, no tenemos que codificar a mano ninguno
de estos ni proponer ninguna de estas ideas. Simplemente comienzas con una red neuronal aleatoria
y le das ejemplos y haces que aprenda a reconocer cosas, y resulta
que estas son las cosas que crea para sí mismo. Entonces puedes combinar estas características.
Y cuando combina estas funciones, crea un detector de funciones, por ejemplo, que encuentra
formas geométricas repetitivas. Y crea un detector de características, por ejemplo, que encuentra una especie de
pequeñas cosas con volantes, que parecen estar encontrando los bordes de las flores. Y este
detector de características aquí parece estar encontrando palabras. Y así, cuanto más profundiza, más sofisticadas son las
funciones que puede encontrar. Entonces, puedes imaginar que tratar de codificar estas cosas a mano sería,
ya sabes, increíblemente difícil, y ni siquiera sabrías qué codificar a mano,
¡verdad! Entonces, lo que vamos a aprender es cómo las redes neuronales hacen esto automáticamente, correcto, pero esta
es la diferencia clave de por qué ahora podemos hacer cosas que antes ni siquiera concebíamos como
posibles, porque ahora no las hacemos. tenemos que codificar a mano las características que buscamos. Todos se pueden aprender.
es importante reconocer que vamos a pasar algún tiempo aprendiendo sobre la creación de
algoritmos basados en imágenes y los algoritmos basados en imágenes no son solo para imágenes y, de hecho,
este será un tema general. Le mostraremos algunas técnicas fundamentales, pero con creatividad,
estas técnicas fundamentales se pueden utilizar de forma muy amplia. Entonces, por ejemplo, un reconocedor de imágenes
también se puede usar para clasificar sonidos. Este fue un ejemplo de uno de nuestros estudiantes
que publicó en el foro y dijo que para su proyecto intentarían clasificar los sonidos
y básicamente tomaron sonidos y crearon imágenes a partir de sus formas de onda
y luego usaron un reconocedor de imágenes en eso y obtuvieron una resultado de última generación por cierto.
Otro de nuestros estudiantes en el foro dijo que hicieron algo muy similar
para tomar series de tiempo y convertirlas en imágenes y luego usar clasificadores de imágenes.
Otro de nuestros estudiantes creó imágenes a partir de movimientos del mouse de… de usuarios de
un sistema informático. Entonces, los clics se convirtieron en puntos y los movimientos en líneas y
la velocidad del movimiento se convirtió en colores y luego se usaron para crear un clasificador de imágenes.
Así que puedes ver con… con un poco de creatividad, hay muchas cosas que puedes hacer con las imágenes.
Hay algo más que quería señalar y es que, como vieron, cuando entrenamos un
modelo de imagen de reconocimiento de aves que funcionaba realmente, no necesitábamos muchas matemáticas; no había ninguno. No necesitábamos muchos
datos. Teníamos 200 fotos. No necesitábamos muchas computadoras costosas; solo usamos mi computadora portátil. Este
suele ser el caso de la gran mayoría del aprendizaje profundo que necesitará en… en la vida real.
Aparecerán algunas matemáticas durante este curso, pero se las enseñaremos según sea necesario o
lo derivaremos a recursos externos según sea necesario, pero solo serán los pequeños detalles
que realmente necesita. Creo que el mito de que el aprendizaje profundo necesita muchos datos lo
transmiten principalmente las grandes empresas que quieren venderle computadoras para almacenar muchos datos y
procesarlos. Descubrimos que la mayoría de los proyectos del mundo real no necesitan cantidades extraordinarias de datos en absoluto
y, como verá, en realidad hay muchos lugares fantásticos en los
que puede hacer trabajos de última generación de forma gratuita hoy en día, lo cual es… es una gran noticia
Una de las razones clave de esto se debe a algo llamado aprendizaje por transferencia, sobre el
cual aprenderemos mucho durante este curso y es algo que
muy pocas personas conocen como recompensa.
En este curso usaremos Pytorch. Para aquellos de ustedes que no están particularmente
cerca del mundo del aprendizaje profundo, es posible que hayan oído hablar de Tensorflow y no de Pytorch.
Es posible que se sorprenda al saber que Tensorflow ha perdido popularidad en los últimos años
y Pytorch en realidad está creciendo rápidamente y en… en los repositorios de investigación entre los principales artículos,
Tensorflow ahora es una pequeña minoría en comparación con Pytorch. Esta también es una
gran investigación que salió de Ryan O’Connor. También descubrió que…
la mayoría de las personas que usaban Tensorflow en 2018 investigadores, la mayoría ahora cambió
a Pytorch y menciono esto porque lo que la gente usa en la investigación es un indicador principal muy fuerte
de lo que sucederá en la industria porque aquí es donde sabes que
van a salir todos los nuevos algoritmos. aquí es donde se escribirán todos los artículos.
va a ser cada vez más difícil usar Tensorflow. Hemos estado usando Pytorch desde antes de
que saliera, antes del lanzamiento inicial porque sabíamos, solo por los fundamentos técnicos, que era
mucho mejor. Este curso ha estado usando Pytorch durante mucho tiempo.
Sin embargo, diré que Pytorch requiere mucho código peludo para cosas relativamente simples. Este es
el código requerido para implementar un optimizador particular llamado AdamW en Pytorch simple.
De hecho, copié este código del repositorio de Pytorch para que puedas ver que hay mucho.
Este bit gris aquí es el código requerido para hacer lo mismo con fast.ai. fast.ai es una biblioteca que
construimos sobre Pytorch. Esta gran diferencia no se debe a que Pytorch sea malo. Es porque
Pytorch está diseñado para ser una base sólida sobre la que construir cosas, como fast.ai. Entonces…
Cuando usa fast.ai, la biblioteca, también obtiene acceso a todo el poder de Pytorch, pero
no debería estar escribiendo todo este código si solo necesita escribir tanto código, ¿verdad? El problema
de escribir mucho código es que hay muchas cosas con las que cometer errores, muchas cosas en las que,
ya sabes, no tener las mejores prácticas, muchas cosas que mantener. En general, hemos encontrado,
particularmente con el aprendizaje profundo: menos código es mejor. Particularmente con fastai,
el código que no escribe es código que básicamente hemos encontrado como mejores prácticas
para usted. Entonces, cuando usa el código que le proporcionamos, sabe que
generalmente obtendrá mejores resultados. Así que… tan rápido.ai ha sido una biblioteca muy popular y se
usa mucho en la industria, en el mundo académico y en la enseñanza y, a medida que avancemos en este curso, veremos
más y más Pytorch puro a medida que profundicemos y más profundo debajo para ver exactamente cómo funcionan las cosas.
La biblioteca fast.ai acaba de ganar el premio al mejor artículo de 2020 por el artículo sobre ella
en Información, por lo que nuevamente puede ver que es una biblioteca muy bien considerada. Está bien, entonces…
Está bien, todavía estamos verdes, eso es bueno.
Es posible que haya notado algo interesante, que es que en realidad estoy ejecutando código
en estas diapositivas. Eso es porque estas diapositivas no están en PowerPoint. Estas diapositivas están en un
cuaderno de Jupyter Notebook. Jupyter notebook es el entorno en el que realizará la
mayor parte de su computación. Es una aplicación basada en la web
que es extremadamente popular y ampliamente utilizada en la industria, en el mundo académico y en la enseñanza,
y es una forma muy, muy poderosa de experimentar, explorar y construir.
Hoy en día, diría que la mayoría de las personas, al menos, la mayoría de los estudiantes ejecutan cuadernos jupyter no en
sus propias computadoras, particularmente para la ciencia de datos, sino en un servidor en la nube,
de los cuales hay bastantes y, como mencioné anteriormente, si va a
Course.fast.ai, puede ver cómo usar varios servidores en la nube diferentes.
Uno del que voy a mostrar un ejemplo es Kaggle. Entonces, Kaggle no solo tiene competencias, sino que
también tiene un servidor de notebook en la nube y tengo bastantes ejemplos allí.
Permítanme darles un ejemplo rápido de cómo usamos los cuadernos Jupyter. Para… para…
para construir cosas, para… para experimentar, para explorar. Entonces, en Kaggle, si comienza con el
cuaderno de otra persona… entonces, ¿por qué no comienza con este? Jupyter notebook 101. Si es su propio
cuaderno, verá un botón llamado editar. Si es de otra persona, ese botón dirá copiar y editar.
Si usa el cuaderno de alguien que le gusta, asegúrese de hacer clic en el
botón de voto a favor para alentarlo y ayudar a otras personas a encontrarlo
antes de continuar, copiar y editar. Y una vez que estamos en el modo de edición, ahora podemos usar este
cuaderno y para usarlo podemos escribir cualquier expresión arbitraria en python y hacer clic en ejecutar
y la primera vez que lo hacemos dice que la sesión está comenzando, básicamente está iniciando
una computadora virtual para nosotros para ejecutar nuestro código. Todo esto es gratis.
En cierto sentido, es como la calculadora más poderosa del mundo . Es una calculadora en la que tiene
todas las capacidades del, creo, lenguaje de programación más popular del mundo (ciertamente
y javascript serían los dos principales) directamente a su disposición. Entonces, python sabe cómo
hacer uno más uno, y como puede ver aquí, escupe la respuesta. Odio hacer clic. Siempre utilizo
métodos abreviados de teclado, así que en lugar de hacer clic en esta pequeña flecha, solo presiona Mayús Intro para hacer
lo mismo, pero como puede ver, aquí no solo hay cálculos, también hay
prosa, por lo que los cuadernos de jupyter son excelentes para explicar a usted la versión de usted mismo
dentro de seis meses, qué demonios estaba haciendo, o a sus compañeros de trabajo, o a las personas
en la comunidad de código abierto, o a las personas para las que está blogueando, etc., entonces simplemente escribe
prosa, y como puede ver cuando creamos una nueva celda, puede crear una celda de código que es una celda
que le permite escribir cálculos, o una celda de descuento que es una celda que le permite crear prosa.
Y la prosa usa formato en un pequeño mini lenguaje llamado «markdown». Hay tantos
tutoriales que no te los explicaré, pero te permite hacer cosas como enlaces, etc.
Así que te dejaré seguir el tutorial en tu propio tiempo porque realmente te explica
qué hacer. Una cosa para señalar es que a veces me verás usar celdas con un
signo de exclamación al principio. Eso no es Python, es un comando bash shell,
¿de acuerdo? así que eso es lo que significa el signo de exclamación.
Como puede ver, puede colocar imágenes en cuadernos, por lo que la imagen que incluí aquí era la que
mostraba que Jupyter ganó el premio al sistema de software de 2017 , que es prácticamente el premio más grande
que existe para este tipo de software. Bien , esa es la idea básica de cómo usamos las libretas.
Así que echemos un vistazo a cómo hacemos nuestro modelo de pájaro o no pájaro.
Una cosa que siempre me gusta hacer cuando uso algo como colab o kaggle cloud,
plataformas en la nube que no controlo, es asegurarme de que estoy usando la versión más reciente de cualquier
software. Así que mi primera celda aquí es el signo de exclamación pip install menos u , (eso significa actualización)
q (para silencioso) fast.ai. Eso asegura que tengamos la última versión de fast.ai,
y si siempre tiene eso al comienzo de sus cuadernos, nunca tendrá esos
incómodos hilos del foro donde dice «¿por qué esto no funciona?» y alguien
te dice «¡oh, estás usando una versión antigua de algún software!»
Entonces, verá aquí que este cuaderno
es exactamente lo que le estaba mostrando al comienzo de esta lección.
Por lo tanto, si no ha trabajado mucho con Python, es posible que se sorprenda del poco código que hay aquí,
y así python es un lenguaje conciso pero no demasiado conciso. Verá que hay menos
repeticiones que otros idiomas con los que podría estar familiarizado, y también estoy
aprovechando muchas bibliotecas tan rápido. AI le ofrece muchas cosas convenientes. Oh, olvidé importar…
Entonces, para usar una biblioteca externa, usamos import para «importar un símbolo de una biblioteca».
fast.ai tiene muchas bibliotecas que proporcionamos. Por lo general, comienzan con
«algo rápido», por lo que, por ejemplo, para facilitar la descarga de una URL, «fastdownload» tiene
download_url(). Para facilitar la creación de una miniatura, tenemos Image.to_thumb() y así sucesivamente.
Por lo tanto, siempre me gusta ver, mientras construyo un modelo, mis datos en cada paso. Es por eso
que primero tomo un pájaro, luego tomo una foto del bosque y las miro
para asegurarme de que se ven razonables.
Y una vez que pienso, «está bien, se ven bien», sigo adelante y descargo.
Y, entonces, puede ver que fast.ai tiene download_images() donde solo
proporciona una lista de direcciones URL, así de fácil es, y lo hace en paralelo. Entonces lo hace,
ya sabes, sorprendentemente rápido. Otra cosa de fast.ai que estoy usando aquí es resize_images(). En
general, encontrará que para los algoritmos de visión por computadora no necesita imágenes particularmente grandes,
por lo que estoy cambiando el tamaño de estas a una longitud máxima de tamaño de 400 porque simplemente… en realidad es mucho más rápido
porque los gpus son muy rápidos para imágenes grandes. , la mayor parte del tiempo se puede dedicar simplemente a abrirlo.
La red neuronal en sí misma a menudo toma menos tiempo. Esa es otra buena razón para hacerlos más pequeños.
Bien, lo principal que quería contarles era este comando de bloque de datos. Por lo tanto, el bloque de datos
es la clave con la que querrán familiarizarse como profesionales del aprendizaje profundo
al comienzo de su viaje porque lo principal que intentarán descubrir es cómo
obtengo estos datos. en mi modelo? Ahora eso podría sorprenderte. Tal vez estés pensando que
deberíamos dedicar todo nuestro tiempo a hablar sobre arquitecturas de redes neuronales, multiplicación de matrices,
gradientes y cosas por el estilo. La verdad es que muy poco de eso surge en la práctica, y la
razón es que, en este punto, el la comunidad de aprendizaje profundo ha encontrado una cantidad razonablemente pequeña de
tipos de modelos que funcionan para casi todas las aplicaciones principales que necesitará;
y fast.ai creará el tipo de modelo adecuado para usted la gran mayoría de las veces.
Entonces, todas esas cosas sobre ajustar las arquitecturas de redes neuronales y esas cosas… Quiero decir, lo
abordaremos eventualmente en este curso, pero puede que se sorprenda al descubrir
que casi nunca surge. Algo así como si alguna vez te gustara un curso de ciencias de la computación o algo así
y dedicaron todo este tiempo a los detalles de los compiladores y los sistemas operativos, y luego
llegas al mundo real y nunca lo vuelves a usar. Este curso se llama aprendizaje profundo práctico,
por lo que nos vamos a centrar en las cosas que son prácticamente importantes.
Bien, nuestras imágenes terminaron de descargarse y dos de ellas estaban rotas, así que las eliminamos.
Por cierto, otra cosa que notará si es
un ingeniero de software entusiasta es que tiendo a usar mucho estilo funcional en mis
programas. Encuentro que para el tipo de trabajo que hago, un estilo funcional funciona muy bien si usted es,
usted sabe que mucha gente en python está menos familiarizada, que es más, tal vez viene,
más de otras cosas. Entonces, sí, es por eso que me verás usando cosas como mapas y otras cosas bastante.
Muy bien, un bloque de datos es la clave que debe conocer
si quiere saber cómo usar diferentes tipos de conjuntos de datos,
y estas son todas las cosas, básicamente, que proporcionará.
Entonces, lo que hicimos cuando diseñamos el bloque de datos fue mirar y decir «bien, en
cientos de proyectos, ¿cuáles son todas las cosas que cambian de un proyecto a otro para que los datos tengan
la forma correcta?», y nos dimos cuenta de que podíamos básicamente dividirlo en estas cinco cosas.
Entonces, lo primero que le decimos a fast.ai es «¿qué tipo de entrada tenemos»? Entonces,
hay muchos bloques en fast.ai para diferentes tipos de entradas, así que dijimos «ah, la entrada es ¡una imagen!;
«¿Qué tipo de salida hay?», «¿Qué tipo de etiqueta?». La salida es una categoría,
lo que significa que es una de varias posibilidades.
Eso es suficiente para que fast.ai sepa qué tipo de modelo debe construir para usted.
Entonces, ¿cuáles son los artículos en este modelo? ¿qué es lo que realmente voy a estar mirando para mirar
para entrenar? ¡Esta es una función! De hecho, es posible que hayas notado si estuvieras observando
detenidamente que usamos esta función aquí.
Es una función que devuelve una lista de todos los archivos de imagen en una ruta basada en la extensión,
por lo que cada vez que intente averiguar de qué elementos entrenar, utilizará
esa función. En este caso, obtendremos una lista de archivos de imagen. Algo de lo que hablaremos en breve es
que es fundamental que guarde algunos datos para probar la precisión de su modelo que se
llama «conjunto de validación». Es tan importante que fast.ai no le permitirá entrenar un modelo sin uno,
por lo que en realidad tiene que decirle cómo crear un conjunto de validación,
cómo reservar algunos datos y, en este caso , decimos «aleatoriamente, reservar 20% de los datos.”
Bien, la siguiente pregunta, entonces tienes que decirle a fast.ai «¿cómo sabemos la etiqueta correcta
de una foto?», ¿cómo sabemos si es una foto de un pájaro o una foto de un bosque? y esta es otra función,
y esta función simplemente devuelve la carpeta principal de una ruta y, en este caso,
guardamos nuestras imágenes en un bosque o en un pájaro. Entonces, de ahí es de donde vendrán las etiquetas.
Y finalmente, la
mayoría de las arquitecturas de visión por computadora necesitan todas sus entradas a medida que entrena para que tengan el mismo tamaño,
por lo que las «transformaciones de elementos» son todos los bits de código que se ejecutarán en cada elemento,
en cada imagen en este caso, y estamos diciendo bien, queremos que cambie el tamaño de cada uno de ellos a
192 por 192 píxeles. Hay dos formas de cambiar el tamaño: puede recortar
una pieza en el medio o puede aplastarla, por lo que decimos «aplastar».
Ese es el bloque de datos que es todo lo que necesita, y desde allí creamos una
clase importante llamada cargadores de datos. Los cargadores de datos son las cosas que, en realidad,
pytorch itera para obtener un montón de datos a la vez. La forma en que puede hacerlo tan rápido es usando una GPU,
que es algo que puede hacer miles de cosas al mismo tiempo y eso significa que necesita hacer miles
de cosas al mismo tiempo, por lo que un cargador de datos alimentará el algoritmo de entrenamiento con un «montón»
de tus imágenes a la vez; de hecho, no lo llamamos un grupo, lo llamamos un «lote» o un «mini lote».
Entonces, cuando decimos mostrar «lote», en realidad es una palabra muy específica en el aprendizaje profundo. Está
diciendo muéstrame un ejemplo de un lote de datos que estarías pasando al modelo,
y para que puedas ver, showbatch te da, te dice , dos cosas: la entrada, que es la imagen,
y la etiqueta, ¡y recuerda! la etiqueta vino llamando a esa función. Entonces,
cuando llegue a construir sus propios modelos querrá saber qué tipo de divisores
existen. ¿Qué tipos de funciones de etiquetado existen? y así sucesivamente, qué botón está mal
querrá saber qué tipo de funciones de etiquetado hay y qué tipo de divisores
hay y así sucesivamente, y docs.fast.ai es donde debe ir para obtener esa información. A menudo, el
mejor lugar para ir es elegir los tutoriales. Entonces, por ejemplo, aquí hay un tutorial de bloque de datos completo,
y hay muchos, muchos ejemplos, así que, con suerte, puede comenzar encontrando
algo similar a lo que quiere hacer y ver cómo lo hicimos, pero luego, por supuesto, también está
el subyacente información de api, ¡ así que aquí están los bloques de datos!
Bueno. ¿Cómo vamos? ¡Sigue haciéndolo bien! Bien.
Entonces, al final de todo esto, tenemos un objeto llamado «dls» que significa «cargadores de datos»
y que contiene iteradores que pytorch puede ejecutar para tomar lotes de
imágenes de entrenamiento divididas aleatoriamente para entrenar el modelo con, y validación Imágenes para probar el modelo.
Así que ahora necesitamos un modelo.
El concepto crítico aquí en fastai se llama «aprendiz». Un «aprendiz» es algo que
combina un modelo, es decir, la función real de la red neuronal que estaremos entrenando
y los datos que usamos para entrenarla; y es por eso que tiene que pasar dos cosas:
los datos que son el objeto de los cargadores de datos y un modelo. Entonces, el
modelo será la función real de la red neuronal que desea transmitir y, como dije, hay
un número relativamente pequeño que básicamente funciona para la gran mayoría de las cosas que hace.
Si pasa solo un símbolo simple como este, será uno de los
modelos integrados de fast.ai, pero lo que es particularmente interesante
es que integramos una biblioteca maravillosa de Ross Wightman llamada «timm» (los modelos de imagen pytorch)
que es el La colección más grande de modelos de visión artificial del mundo y, en este momento, fast.ai es
el primer y único marco que integra esto. Entonces, puede usar cualquiera de los modelos de imagen de pytorch
y uno de nuestros estudiantes, Amanamoro, tuvo la amabilidad de crear esta fantástica documentación
donde puede encontrar todo sobre los diferentes modelos.
Y si hacemos clic aquí, puede obtener mucha, mucha información sobre todos los diferentes modelos que
Ross ha proporcionado. Habiendo dicho eso, la familia de modelos llamada «resnet
» probablemente estará bien para casi todas las cosas que desea hacer, pero es divertido
probar diferentes modelos para que pueda escribir cualquier cadena aquí para usar cualquiera de esos otros modelos
Bueno, si ejecutamos eso, veamos qué sucede, ¿de acuerdo? Así que esto es interesante… Así que cuando ejecuté esto
… recuerda que en Kaggle está creando una nueva
computadora virtual para nosotros, por lo que realmente no tiene nada listo para funcionar,
así que cuando ejecuté esto, lo primero que hizo fue decir “descargando resnet18.pth”
¿Qué es eso? bueno, la razón por la que podemos hacer esto tan rápido es porque alguien más ya ha entrenado
este modelo para reconocer más de 1 millón de imágenes de más de 1000 tipos diferentes;
algo llamado el conjunto de datos «ImageNet», y luego pusieron a disposición esos pesos, esos
parámetros, disponibles en Internet para que cualquiera los descargara. De forma predeterminada en fast.ai, cuando
solicita un modelo, descargamos esos pesos por usted, para que no comience con una
red aleatoria que no pueda hacer nada. De hecho, comienza con una red que puede hacer muchísimo,
y entonces, algo que tiene fast.ai, que es único, es este método fine_tune,
que, lo que hace es: toma esos pesos preentrenados que descargamos para usted , y los
ajusta de una manera muy cuidadosamente controlada para simplemente enseñarle al modelo las diferencias
entre su conjunto de datos y para lo que fue originalmente entrenado. Eso se llama «ajuste fino»;
de ahí el nombre. Es por eso que verá que esta descarga se realiza primero y, como puede
ver al final, este es el error justo aquí después de unos segundos, es 100% preciso
. Ahora tenemos un alumno, y este alumno tiene ha sido, ha comenzado con, un modelo pre-entrenado
que ha sido ajustado con el propósito de reconocer imágenes de pájaros de imágenes de bosques.
Entonces, ahora puede llamar a la predicción de puntos, y la predicción de puntos le pasa una imagen, y así es
como implementaría su modelo. Así que en el código tienes todo lo que tiene que hacer.
Entonces, en este caso particular, esta persona tenía alguna razón por la que necesita
la aplicación para verificar si está en el parque nacional y si es una foto de un pájaro,
así que en el veterinario donde necesitan saber si es una foto de un pájaro simplemente llamaría a
esta línea de código learn.predict(); y eso va a devolver
si es un pájaro o no como una cadena, si es un pájaro o no como un número entero, y
la probabilidad de que no sea un pájaro o sea un pájaro; y por eso es que podemos imprimir estas cosas.
De acuerdo, así es como podemos crear un modelo de visión por computadora.
¿Qué pasa con otros tipos de modelos? ¿Correcto? Hay mucho más en el mundo que solo la visión artificial.
Mucho más que reconocimiento de imágenes. Bueno, incluso dentro de la visión por computadora,
hay mucho más que solo el reconocimiento de imágenes. Por ejemplo,
por ejemplo, ¡hay segmentación!
Entonces, segmentación, tal vez la mejor manera de explicar la segmentación es mostrarle el resultado de este
modelo. La segmentación es donde tomamos fotos ( en este caso, escenas de carreteras) y coloreamos
cada píxel según lo que es, lo que es. Entonces, en este caso, tenemos marrón como los autos, ¿el
azul es cercas, supongo? rojo es edificios? o marrón?
Y así, aquí a la izquierda, algunas fotos que alguien ya revisó,
y clasificó cada píxel, cada una de estas imágenes según de qué píxel es un píxel,
y luego a la derecha está lo que nuestro modelo está adivinando, y como puede
ver, muchos de los píxeles son correctos y algunos de ellos son incorrectos.
De hecho, es asombroso cuántos son correctos porque este modelo en particular
lo entrené en aproximadamente 20 segundos usando una cantidad de datos diminuta, diminuta. Entonces, nuevamente
, pensaría que este sería un problema particularmente difícil de resolver, pero tomó alrededor de
20 segundos de entrenamiento para resolverlo, no sorprendentemente bien, pero bastante bien. Si lo entrenara durante otros
dos minutos, probablemente sería casi perfecto. Entonces, esto se llama «segmentación». Ahora verá que
se requieren muy, muy pocos datos y… lo siento, se requiere muy poco CÓDIGO y los pasos en
realidad le resultarán bastante familiares. De hecho, en este caso estamos usando un enfoque aún más simple.
Anteriormente, usamos «bloques de datos». Los bloques de datos son una especie de enfoque de nivel intermedio muy…
flexible que puede tomar para manejar casi cualquier tipo de datos, pero para los tipos de datos que
ocurren mucho, puede usar estas clases especiales de cargadores de datos que le permiten usar incluso menos código.
Entonces, en este caso, para crear cargadores de datos para la segmentación
, solo puede decir: «está bien, le pasaré una función para etiquetar»; y pueden ver
aquí hay cosas bastante similares que pasamos a lo que pasamos antes para los bloques de datos.
Entonces, nuestro nombre de archivo es get_image_files() nuevamente, y luego nuestra función de etiqueta
es algo que toma esta ruta y los códigos. Entonces, las etiquetas para una mayor segmentación, lo siento,
los códigos. Entonces, «¿qué significa cada código ?» va a ser este archivo de texto,
pero puede ver que la información básica que proporcionamos es muy similar, independientemente de si estamos
haciendo segmentación o reconocimiento de objetos; y luego los siguientes pasos son más o menos los mismos.
Creamos un alumno para la segmentación. Creamos,
por lo tanto, tenemos un alumno de UNet sobre el que aprenderemos más adelante, y nuevamente, llamamos fine_tune() ¡
así que eso es todo! ¡y así creamos un modelo de segmentación!
¿Qué hay de alejarse de la visión artificial? Entonces, quizás el tipo de
modelo más utilizado en la industria es el análisis tabular. Por lo tanto,
tomar cosas como hojas de cálculo y tablas de bases de datos e intentar predecir columnas de ellas.
Entonces, en el análisis tabular, realmente se ve muy similar a lo que ya hemos visto.
Tomamos algunos datos y verán cuando llamo a este untar_data(), esto es lo que está en fast.ai
que descarga algunos datos y los descomprime. es para usted y hay una gran cantidad de direcciones URL proporcionadas por
fast.ai para todos los tipos de conjuntos de datos comunes que podría querer usar; ¿Conoces todos los que
están en el libro? o muchos conjuntos de datos que se usan ampliamente en el aprendizaje y la investigación?
Por lo tanto, te hace la vida agradable y fácil. Entonces , de nuevo, vamos a crear cargadores de datos,
pero esta vez son cargadores de datos tabulares, pero proporcionamos un tipo de información bastante similar a la que
teníamos antes. Un par de cosas nuevas que tenemos que contar. «¿Cuáles de las columnas son categóricas?»
por lo que solo pueden tomar uno de unos pocos valores, y «cuáles son continuos»
para que puedan tomar, básicamente, cualquier número real y, de nuevo, podemos usar exactamente el mismo
show_batch() que hemos visto antes, para ver los datos y, por lo tanto, fast.ai usa una gran cantidad de
algo llamado «despacho de tipos», que es un sistema que es particularmente popular en un
lenguaje llamado Julia, para básicamente, automáticamente, hacer lo correcto
con sus datos, independientemente de lo que tipo de datos que es. Por lo tanto, si llama a show_batch() en algo,
debería recuperar algo «útil», independientemente del tipo de información que haya proporcionado.
Entonces, para una tabla, le muestra la información en esa tabla. Este conjunto de datos en particular es un conjunto
de datos de si las personas tienen menos de cincuenta mil dólares o más de cincuenta mil dólares en
salario para diferentes distritos según la información demográfica de cada distrito.
Entonces, para construir un modelo para ese cargador de datos, hacemos como siempre
«algo» subrayado «aprendiz». En este caso es un alumno tabular.
Ahora esta vez no decimos: “fine_tune(”); decimos «encajar». Específicamente, fit_one_cycle().
Esto se debe a que, para los modelos tabulares, generalmente no habrá un modelo preentrenado
que ya haga algo como lo que desea, porque cada tabla de datos es muy diferente,
mientras que las imágenes suelen tener un tema similar, ¿sabe? Son todas las imágenes. Todos tienen
el mismo tipo de «idea general» de lo que son las imágenes. Por eso, por lo general
, no tiene mucho sentido ajustar un modelo tabular. Entonces, en cambio, simplemente encajas.
Así que hay una diferencia allí. Voy a mostrar otro ejemplo.
Bien, entonces, filtrado colaborativo.
El «filtrado colaborativo» es la base de la mayoría de los sistemas de recomendación actuales.
Es un sistema en el que básicamente tomamos un conjunto de datos que dice: a qué usuarios les gustó qué productos,
o qué usuarios usaron qué productos, y luego lo usamos para adivinar qué otros productos les
podrían gustar a esos usuarios en función de encontrar usuarios similares, y qué usuarios similares me gusta. Lo interesante del
filtrado colaborativo es que cuando decimos «usuarios similares», no nos referimos a
demográficamente similares, sino similares en el sentido de personas a las que les gustaron los mismos tipos de
productos. Entonces, por ejemplo, si usa alguno de los sistemas de música como Spotify o Apple Music,
o lo que sea, primero le preguntará, como, «¿cuáles son algunas piezas de música que le gustan?» y usted las dice,
y luego dice «está bien, tal vez empecemos a tocar esta música para ti», y así es
como funciona. Utiliza filtrado colaborativo. Entonces , podemos crear cargadores de datos de filtrado colaborativo
exactamente de la misma manera que estamos acostumbrados, al descargar y descomprimir algunos datos,
crear nuestros cargadores de datos de colaboración. En este caso, podemos simplemente guardar desde csv,
y pasar un csv, y así es como se ven los datos de filtrado colaborativo. Tendrá, en
términos generales, una identificación de usuario, algún tipo de identificación de producto; en este caso, una película y una calificación.
Entonces, en este caso, este usuario le dio a esta película una calificación de 3.5 de 5,
y así, nuevamente, puedes ver show_batch, ¿verdad? Así que usa show batch. Debería recuperar
alguna visualización útil de sus datos, independientemente de qué tipo de datos sean,
y así nuevamente, creamos un «aprendiz».
Esta vez, el alumno de «filtrado colaborativo» , y usted pasa sus datos.
En este caso, le damos una información adicional, que es, porque esto
no está prediciendo una categoría, sino un número real, le decimos:
«cuál es el rango posible». El rango real es de uno a cinco,
pero por razones que aprenderá más adelante, es una buena idea ir desde un poco más
bajo que el mínimo posible hasta un poco más alto. Por eso digo 0,5 a 5,5,
y luego afino. Ahora, nuevamente, sabe que realmente no necesitamos afinar aquí porque no
existe realmente un modelo de filtrado colaborativo entrenado previamente. Podríamos decir simplemente «ajuste»
o «ajuste_un_ciclo», pero en realidad fine_tune() también funciona bien. Entonces, después de entrenarlo por un tiempo,
esto aquí es el «error cuadrático medio», por lo que es básicamente eso: «en promedio, qué tan lejos estamos
para el conjunto de validación». Y puede ver a medida que entrenamos,
y es literalmente tan rápido (es menos de un segundo cada época)
que el error sube y baja, y para cualquier tipo de modelo fast.ai siempre puede llamar a show_results() ,
y obtener algo sensato . Entonces, en este caso, se mostrarán algunos ejemplos de usuarios y películas.
Esta es la calificación real que el usuario le dio a esa película y esta es la calificación que predijo el modelo.
De acuerdo, entonces, aparentemente muchas personas en el foro preguntan cómo voy a
convertir este cuaderno en una presentación.
Por lo tanto, estaré encantado de mostrárselo, porque estoy muy complacido de que estas personas hayan hecho esto
de forma gratuita para que lo usemos. Se llama «Rise», y todo lo que hago es una extensión de la libreta,
y en tu libreta te da una cosita extra en el lado donde dices qué cosas son
diapositivas, o qué cosas son fragmentos, y un fragmento simplemente se … entonces, esto es una diapositiva, eso es
un fragmento. Entonces, si hago eso, verás que comienza con una diapositiva y luego se agrega el fragmento. ¡
Sí, eso es todo! En realidad, es bastante bueno y está muy
bien documentado. Solo mencionaré, como qué hago con los cuadernos de Jupyter:
todo este libro fue escrito en su totalidad en cuadernos de Jupyter.
Aquí están los cuadernos. Entonces, si va al repositorio de Fastbook Fastbook… si va al
repositorio de FastBook Fastai, puede leer el libro completo y, como está todo en cuadernos, cada vez que decimos:
«así es como se crea esta trama» o «aquí está cómo entrena este modelo”, puede
crear la trama o entrenar el modelo, porque son todos cuadernos.
Toda la biblioteca fast.ai está escrita en cuadernos.
Por lo tanto, es posible que se sorprenda al descubrir que, si va a fast.ai fast.ai,
el código fuente de toda la biblioteca son cuadernos,
y lo bueno de esto es que, ya sabe, el código fuente
de fast.ai biblioteca tiene imágenes reales de las cosas reales que estamos construyendo, por ejemplo.
¿Qué más hemos hecho con los cuadernos? ¡oh!
blogueando!
Me encanta escribir blogs con cuadernos, porque cuando quiero explicar algo
, solo escribo el código y puedes ver los resultados y todo funciona.
Otra cosa que te puede sorprender es que todas nuestras pruebas y la integración
continua también se encuentran en notebooks. Entonces, cada vez que cambiamos una de nuestras computadoras portátiles…
cada vez que cambiamos una de nuestras computadoras portátiles, se ejecutan automáticamente cientos de pruebas,
en paralelo, y si hay algún problema , lo averiguaremos. Entonces, sí, ¡los
cuadernos son geniales! and rise is… es una forma realmente agradable de hacer diapositivas en cuadernos.
Bien.
Entonces, ¿qué puede hacer el aprendizaje profundo en la actualidad?
Todavía estamos rascando esto como la punta del iceberg, a pesar de que es una tecnología muy promocionada, ya sabes
, esta tecnología muy comercializada… ya sabes, cuando comenzamos en 2014 más o menos,
no mucha gente hablaba de aprendizaje profundo, y realmente no había una forma accesible de
empezar con él. No había modelos preentrenados que pudieras descargar, ya sabes.
Recién comenzaban a aparecer algunos de los primeros software de código abierto que se ejecutarían en GPU,
pero sí, quiero decir, pero a pesar de que hoy en día hay mucha gente hablando de
aprendizaje profundo, solo estamos arañando la superficie. Cada vez que alguien me dice
que trabajo en el dominio x, y pensé que podría probar el aprendizaje profundo para ver si puede ayudar,
y los veo unos meses después y digo «¿cómo te fue?»
casi siempre dicen: «bueno, acabamos de romper los resultados de última generación en nuestro campo».
Entonces, ya sabes, cuando digo que estas son cosas para las que actualmente es lo más avanzado, estas
son las que la gente ha probado hasta ahora , pero aún así, la mayoría de las cosas no se han probado.
Entonces, en PNL, el aprendizaje profundo es el
método de vanguardia en todo este tipo de cosas y mucho más; visión por computadora, medicina,
sistemas de recomendación de biología, juegos, robótica… Quiero decir que es solo… lo intenté… lo intenté en otros lugares
para hacer listas más grandes, ¡y terminé con páginas y páginas y páginas! así que sí es… en
términos generales, ya sabes, si es algo que un humano puede hacer razonablemente rápido,
como mirar un tablero de go y decidir si parece un buen
tablero de go o no, incluso si tiene que ser un ex incluso… si tiene que ser un ser humano experto
, probablemente sea algo en lo que el aprendizaje profundo sea bastante bueno.
Si es algo que requiere muchos procesos de pensamiento lógicos durante un período prolongado,
ya sabes, especialmente si no se basa en muchos datos, tal vez no. Ya sabes, como,
«quién va a ganar las próximas elecciones», o algo así. Así sería, en términos generales,
cómo trato de decidir: ¿tu cosa es útil para profundo… ya sabes, bueno para el aprendizaje profundo o no?
Sabes que ha pasado mucho tiempo para llegar a este punto.
Sí, el aprendizaje profundo es increíblemente poderoso ahora, pero ha llevado décadas de trabajo. Esta fue la primera
red neuronal. Recuerde, las redes neuronales son la base del aprendizaje profundo. Así que esto fue en 1957.
Las ideas básicas no han cambiado mucho, pero ahora tenemos cosas como GPU,
unidades de estado sólido y cosas así y, por supuesto, muchos más datos, simplemente están disponibles.
ahora, pero han sido décadas de trabajo muy duro por parte de muchas personas para llegar a este punto.
Entonces, demos un paso atrás y hablemos sobre qué está pasando
en estos modelos, y voy a describir la idea básica del aprendizaje automático en
gran parte como lo describió Arthur Samuel a finales de los años 50 cuando fue inventado,
y voy a hacerlo con estos gráficos; oh, que, por cierto
, puede resultarte divertido… estos gráficos son en sí mismos…
creados con cuadernos de Jupyter. Entonces, estas son descripciones de graphviz que se
convertirán en estas, ¿así que hay un pequeño adelanto detrás de escena para usted?
Entonces, comencemos con una especie de gráfico de, bueno, ¿cómo se ve un programa normal? ¿Correcto?
Entonces, en los días previos al aprendizaje profundo y al aprendizaje automático , bueno, ya sabes, tendrías… todavía tienes
entradas y todavía tienes resultados. ¿Derecha? y luego codificas un programa en el medio, que es,
ya sabes, un montón de condicionales, bucles, variables de configuración y bla, bla, bla. Bueno.
Un «modelo de aprendizaje automático» no se ve tan diferente…
pero…
El programa se reemplazó con algo llamado «un modelo», y ahora no solo tenemos entradas
, ahora también tenemos pesos, que también se llaman «parámetros». ”, y la clave es esta:
el modelo ya no es un montón de condicionales, bucles y cosas.
Es una función matemática.
En el caso de una red neuronal, es una función matemática que toma las entradas, las
multiplica por los pesos ( por un conjunto de pesos) y los suma;
y luego lo vuelve a hacer para un segundo conjunto de pesos y los suma
, lo vuelve a hacer para un tercer conjunto de pesos, y los suma y así sucesivamente.
Luego toma todos los números negativos y los reemplaza con ceros,
y luego los toma como entradas para la siguiente capa. Hace la misma cosa;
los multiplica un montón de veces y los suma, y lo hace unas cuantas veces,
y eso se llama «una red neuronal». Ahora, el modelo
, por lo tanto, no va a hacer nada útil, a menos que estos pesos se elijan con mucho cuidado.
Y, entonces, la forma en que funciona es que en realidad comenzamos con estos pesos como
aleatorios. Entonces, inicialmente, ¡esta cosa no hace nada útil en absoluto!
Entonces, lo que hacemos, tal como lo describió Arthur Samuel a fines de los años 50
(el inventor del aprendizaje automático), es , dijo: «bien, tomemos las entradas
y los pesos, pasémoslos por nuestro modelo». No estaba hablando particularmente
de redes neuronales. Es como… cualquier modelo que te guste…
obtén los resultados y luego decidamos qué tan «buenos» son, ¿no? Entonces, si por ejemplo,
estamos tratando de decidir: «¿es esta una imagen de un pájaro?» y el modelo dijo, que inicialmente
es aleatorio, dice «esto no es un pájaro», y en realidad ES un pájaro, diríamos: «¡oh, te equivocas!» Entonces
, luego calculamos «la pérdida». Entonces, la pérdida es un número que dice qué tan buenos fueron los resultados.
Así que todo eso es bastante sencillo, ya sabes. Podríamos, por ejemplo, decir oh, ¿cuál es
la precisión? Podríamos mirar 100 fotos y decir qué porcentaje de ellas lo hizo bien.
Sin preocupaciones. Ahora el paso crítico es esta flecha. Necesitamos una forma de actualizar las ponderaciones
que está surgiendo con un nuevo conjunto de ponderaciones que son un poco mejores que el conjunto anterior.
Bueno. Y por un poco mejor queremos decir que debería hacer que la
pérdida mejore un poco. Así que tenemos este número que dice qué tan bueno es nuestro modelo e
inicialmente es terrible, ¿verdad? es aleatorio Necesitamos algún mecanismo para mejorar un poco.
Si solo podemos hacer eso,
entonces solo necesitamos iterar esto varias veces. Porque cada vez que ponemos más entradas
y… y ponemos nuestros pesos y obtenemos nuestra pérdida y lo usamos para hacerlo un poco mejor,
entonces, si lo hacemos un poco mejor lo suficiente, eventualmente se va a poner bien.
Asumiendo que nuestro modelo es lo suficientemente flexible para representar lo que queremos hacer. Ahora recuerde
lo que le dije antes sobre lo que es una red neuronal: que básicamente es multiplicar cosas
juntas y sumarlas y reemplazar los negativos con ceros y lo hace varias veces,
es probable que sea una función infinitamente flexible.
Entonces, en realidad resulta que esa secuencia de pasos increíblemente simple, si la repite
varias veces, hace lo suficiente, puede resolver cualquier función computable. Y algo como generar
una obra de arte basada en la biografía de Twitter de alguien es un ejemplo de una función computable, ¿verdad?
O traducir del inglés al chino es un ejemplo de una función computable. Por lo tanto, no son el
tipo de funciones normales que haces en matemáticas de octavo año, pero son funciones computables.
y por lo tanto, si podemos simplemente crear este paso y luego usar la red neuronal como nuestro modelo,
entonces estamos listos para comenzar. En teoría, podemos resolver cualquier cosa con suficiente tiempo y suficientes datos,
y eso es exactamente lo que hacemos.
Entonces, una vez que hayamos terminado ese procedimiento de entrenamiento,
ya no necesitamos la pérdida e incluso los pesos mismos, podemos integrarlos, como
en el modelo, ¿verdad? Terminamos de cambiarlos para que podamos decir que ahora está arreglado
y, una vez que lo hayamos hecho, ahora tenemos algo que toma entradas, las
pasa a través de un modelo y nos da resultados. Se ve exactamente como nuestra idea original de un programa
y es por eso que podemos hacer lo que describí anteriormente, es decir, una vez que tenemos ese learn.predict para nuestro
reconocedor de pájaros, podemos insertarlo en cualquier pieza de código de computadora, ¿verdad? Una vez que tenemos un
modelo entrenado, es solo otra pieza de código que podemos llamar con algunas entradas y obtener algunas salidas.
La implementación de modelos de aprendizaje automático en la práctica puede venir con muchos, ya sabes, pequeños detalles complicados,
pero la idea básica en su código es que solo tendrá una línea de código que dice
aprender.predecir y luego simplemente ajustarlo. con todo el resto de su código de la manera habitual.
Y esta es la razón: porque un modelo entrenado es solo otra cosa que asigna entradas a resultados.
Bueno.
Está bien. Entonces, ahora que terminamos esta primera lección,
para aquellos de ustedes que ya están familiarizados con los cuadernos y Python, hay… ya saben… esto
tiene que ser bastante fácil para ustedes. Solo usará algunas cosas con las que ya está
familiarizado y algunas bibliotecas ligeramente nuevas. Para aquellos de ustedes que no están familiarizados con Python,
ya saben, ustedes… están mordiendo algo importante aquí. Obviamente,
tendrá que aprender muchas cosas y, para que quede claro, no voy a enseñar Python en este curso,
pero tenemos enlaces a excelentes recursos de Python en el foro. Así que echa un vistazo… echa un vistazo a ese hilo.
Independientemente de dónde se encuentre, lo más importante es experimentar, por lo que experimentar
podría ser tan simple como ejecutar esos portátiles Kaggle que le he mostrado solo para verlos
ejecutar. Podrías intentar cambiar un poco las cosas. Realmente me encantaría que intentaras hacer el… el ejercicio del pájaro
o del bosque, pero piensa en otra cosa. Tal vez intente usar tres o cuatro categorías en
lugar de dos, ya sabe. Piensa en algo que creas que sería divertido probar.
Dependiendo de dónde te encuentres, ya sabes, esfuérzate un poco, pero no demasiado. Así que
asegúrate de terminar algo antes de la próxima lección. Lo más importante, lea el capítulo uno del
libro. Tiene casi lo mismo que hemos visto hoy, pero presentado de una manera ligeramente diferente.
Y luego regrese a los foros y presente lo que ha hecho en el hilo comparta su trabajo aquí
. Después de la primera vez que hicimos esto en el primer año del curso
, recibimos más de mil respuestas y de esas respuestas es sorprendente cuántas
de ellas terminaron convirtiéndose en nuevas empresas, artículos científicos, ofertas de trabajo.
Ha sido genial ver los viajes de las personas y algunos de ellos son simplemente divertidos, ya sabes. Entonces,
esta persona clasificó diferentes tipos de personas de Trinidad y Tobago. Entonces, ya sabes, la
gente hace cosas según el lugar donde vive y cuáles son sus intereses.
No sé si esta persona está particularmente interesada en calabacín y pepino, pero
hizo un clasificador de calabacín y pepino. Pensé que esto era realmente interesante:
clasificar las imágenes satelitales en qué ciudad es probablemente una imagen. Sorprendentemente preciso en
realidad. 85 por ciento con 110 clases. Clasificador de autobuses de la ciudad de Panamá. Clasificador de tela batik.
Este, ya sabes, muy importante desde el punto de vista práctico, ya sabes, reconocer el estado de los edificios.
Hemos tenido bastantes estudiantes que realmente se movieron hacia la resiliencia ante desastres basada en imágenes satelitales
usando exactamente este tipo de trabajo. Ya hemos visto este ejemplo. Ethan Sutin el… el
clasificador de sonido y mencioné que era lo último en tecnología. De hecho, revisó el
sitio web del conjunto de datos y descubrió que superó el estado del arte para eso. Alena Harley hizo una secuenciación tumoral normal
. Así que ella estaba en Human Longevity International. Así que en realidad hizo tres
piezas diferentes de trabajo sobre el cáncer realmente interesantes durante ese primer curso, si no recuerdo mal.
Y te mostré esta foto antes. Lo que no mencioné es en realidad esto… este estudiante
Gleb era un desarrollador de software en Splunk, una gran empresa que cotiza en NASDAQ. Y este proyecto estudiantil
que hizo se convirtió en un nuevo producto patentado en Splunk y una gran publicación de blog y todo
resultó ser realmente genial. Básicamente, algo para identificar a los estafadores que utilizan el reconocimiento de imágenes
con estas imágenes que discutimos. Uno de nuestros estudiantes creó esta startup llamada Envision.
De todos modos ha habido montones y montones de ejemplos. Entonces, todo esto es para decir, ya sabes, tener… probar,
ya sabes, empezar algo. Crea algo que creas que sería divertido o interesante y
compártelo en el foro. Si eres un principiante total con Python, entonces comienza… comienza
con algo simple. Pero creo que encontrará personas muy alentadoras y si ha hecho
esto varias veces antes, intente esforzarse un poco más. Y no olvide
mirar las preguntas del cuestionario al final del libro y ver si puede responderlas todas correctamente.
Muy bien, gracias a todos, muchas gracias por venir. Bueno. Muchas gracias por venir a todos. Adiós.