Transcripciones
1. Introducción al curso: Bienvenido a redes neuronales de aprendizaje profundo con Python. Yo soy tu instructor, Frank Kane y yo pasamos nueve años en amazon dot com y soy devi dot com construyendo y gestionando algunas de sus características más conocidas. Recomendaciones de productos. People Who Pot también compró top sellers y recomendaciones de películas que I. M. D. B. Todas estas características requerían aplicar técnicas de aprendizaje automático a conjuntos de datos del mundo real , y que es de lo que se trata este curso. No necesito decirles que la inteligencia artificial, deep learning y las redes neuronales artificiales son las habilidades técnicas más valiosas que el dedo tiene. Ahora mismo. Estos campos están explotando con avances en nuevas oportunidades. El curso corto abordará el aprendizaje profundo. Desde un punto de vista práctico aplicado, no
nos meteremos en la notación y las matemáticas, pero entenderás los conceptos detrás de la IA moderna y podrás aplicar las principales técnicas utilizando las herramientas de software más populares disponibles. hoy, comenzaremos con un refresco sobre python y la biblioteca de Pandas en caso de que seas nuevo ellos. Después cubriremos conceptos detrás de redes neuronales artificiales. Después te sumergirás directamente en usar la biblioteca Tensorflow para crear tu primera
red neuronal desde cero y usarás la biblioteca de caricias. Para facilitar aún más la creación de prototipos de redes neuronales, comprenderás y aplicarás Perceptron multinivel, redes neuronales
profundas, convolución, todas las redes neuronales y redes neuronales recurrentes. Al final de este curso, al final, un proyecto final rápido te permitirá practicar lo que has aprendido. Las actividades en este curso son realmente interesantes. Realizarás análisis de sentimientos de reconocimiento de escritura a mano y predecirás los
partidos políticos de las personas utilizando redes neuronales artificiales utilizando una cantidad sorprendentemente pequeña de código. Si eres desarrollador de software o programador que busca entender los emocionantes desarrollos en un yo en los últimos años y cómo funciona todo, este curso es para ti convertirás conceptos a la derecha en código, usando python sin tonterías y sin pretensión académica. Construir una red neuronal no es tan difícil como crees. Todo lo que necesitas alguna experiencia previa en programación o scripting para tener éxito en este curso, el formato general de este curso es introducir el concepto usando algunas diapositivas y ejemplos
gráficos. Entonces veremos el código python que implementa el concepto en algunos datos reales o fabricados . Después se te darán algunas ideas sobre cómo modificar o extender el código tú mismo para conseguir algo de experiencia práctica con cada concepto. El código en este curso se proporciona como un archivo de notebook python eye, lo que significa que además de contener el código de python de trabajo riel
con el que puedes experimentar , también contiene notas sobre cada técnica que puedes mantener alrededor para referencia futura. Si necesitas un recordatorio rápido de cómo funciona cierta técnica, encontrarás esta una manera fácil de refrescarte sin volver a ver un video completo.
2. Introducción y de los de la Pre-Requisites: Es difícil pensar en un tema más caliente que el aprendizaje profundo, y de eso vamos a hablar en profundidad y práctica durante las próximas horas, va a mostrarte cómo funcionan las redes neuronales. Redes neuronales artificiales, perceptrones, perceptrones multicapa. Y luego vamos a hablar de algunos temas más avanzados como las redes neuronales convolucionales y las redes neuronales recurrentes. Nada de eso probablemente signifique nada para ti en este momento. Pero la conclusión es que si has tenido curiosidad sobre cómo funcionan el
deep learning y las redes neuronales artificiales, vas a entender que para el final de estas próximas horas. Entonces piénsalo como aprendizaje profundo para las personas que tienen prisa. Te voy a dar la profundidad suficiente para ser peligroso. Y habrá varias actividades y ejercicios prácticos para que realmente puedas obtener algo de confianza y realmente aplicar estas técnicas y realmente entender cómo funcionan y para qué sirven. Creo que encontrarás que hay mucho más fáciles de usar y podrías haber pensado. Entonces, sumémonos y veamos de qué se trata. Esta sección de mi curso más grande de aprendizaje automático y ciencia de
datos también está disponible como un curso independiente. Entonces si eres nuevo en este curso aquí, vas a necesitar instalar los materiales del curso y un entorno de desarrollo si quieres
seguir junto con las actividades prácticas en esta sección de deep learning. Si eres nuevo y sobre punto inmediato Sun dog dash, soft.com slash machine dash dash learning dot HTML. Presta atención a las mayúsculas y guiones en todos los asuntos. Y debes llegar a esta página aquí. Aquí encontrarás un práctico enlace a los materiales del curso. Basta con descargar eso y descomprimirlo. No obstante lo haces en tu plataforma y recuerda dónde lo pones. Y nuestro entorno de desarrollo para este curso será Anaconda, que es un entorno Scientific Python 3. Puedes instalarlo desde aquí es software libre. Asegúrate de instalar la versión Python 3.7 o más reciente. Una vez que hayas instalado Anaconda, necesitarás instalar el paquete TensorFlow. Entonces en Windows, lo harías yendo al prompt de Anaconda. Entonces ve a Anaconda en tu menú de inicio y abre Anaconda Prompt. En macOS o Linux, simplemente
irías a un prompt de terminal y ya estaría todo configurado para ti. A partir de ahí escribirías Conda, instalarías TensorFlow, y dejarías correr eso para instalar el framework TensorFlow que usaremos dentro de Anaconda. Si tienes una GPU NVIDIA, podrías obtener un mejor rendimiento diciendo GPU con fluidos tensores, pero a veces eso da como resultado problemas de compatibilidad. Entonces no hagas eso a menos que sepas lo que estás haciendo chicos. No es necesario instalar pi dot plus para esta sección en particular de la cámara del curso para hacerlo sin embargo, eso también forma parte de las instrucciones de configuración para el curso más grande. Y también necesitas entender cómo
iniciar realmente los cuadernos una vez que los tengas instalados. Entonces a partir de ese Anaconda Prompt, ese mismo prompt de Anaconda del que hablamos antes para realmente lanzar uno de los cuadernos de este curso, primero
cambiarías tu directorio a donde sea que instalaras los materiales del curso. Entonces para mí, los puse en curso C colon ML. Y si hago un DIR, ya verás todos los materiales del curso están aquí. Desde aquí, si escribo en cuaderno de
Júpiter, Júpiter se deletrea divertido con una
yEso debería lanzar tu navegador web con un directorio de todos los diferentes cuadernos que forman parte de este curso. Entonces cuando digo en este curso para abrir, por ejemplo, no
conozco tensorflow dot PY y ser el Cuaderno TensorFlow, simplemente
se desplazaría hacia abajo a esta lista, abrir TensorFlow dot IPO, enB. Y arriba debería venir. Cuando termines de experimentar y jugar con este cuaderno, solo
puedes ir a Archivo, Cerrar y Alto para salir de él. Cuando termines con Júpiter enteramente para esta sesión, simplemente deja de fumar y eso apagará todo por ti. De acuerdo, así que con eso fuera del camino, sigamos adelante. Hablemos de algunos de los prerrequisitos matemáticos que necesitas para entender el aprendizaje profundo. Va a ser la parte más desafiante del curso, en realidad sólo algo de la jerga matemática con la que necesitamos familiarizarnos. Pero una vez que tengamos estos conceptos básicos abajo, podemos hablar de ellos un poco más fácilmente. Piensa que encontrarás que la inteligencia artificial en sí misma es en realidad un campo muy intuitivo. Y una vez que se bajan estos conceptos básicos, es muy fácil hablar y muy fácil de comprender. lo primero que queremos hablar es descenso gradiente. Esta es básicamente una técnica de optimización del aprendizaje automático para tratar de encontrar el conjunto de parámetros más óptimo para un problema dado. Entonces lo que estamos tramando aquí, básicamente algún tipo de función de costo, alguna medición del error de tu sistema de aprendizaje. Y esto se aplica al aprendizaje automático en general, ¿no? Al igual que tienes que tener algún tipo de función que defina qué tan cerca del resultado quieres, tu modelo produce resultados para, ¿verdad? Por lo que siempre lo estamos haciendo en el contexto del aprendizaje supervisado. Estaremos alimentando nuestro algoritmo o modelo, si se quiere, un grupo de parámetros, algún tipo de formas en que hemos afinado el modelo. Y necesitamos identificar diferentes valores de esos parámetros que producen los resultados óptimos. Entonces la idea con descenso de gradiente es que solo escojas algún punto al azar y cada uno de estos puntos representa algún conjunto de parámetros. Tu modelo, tal vez sean los diversos parámetros para algún modelo del que hemos hablado antes, o tal vez sean los pesos exactos dentro de tu red neuronal, sea lo que sea, prueba algún conjunto de parámetros para empezar. Y entonces mediremos lo que sea que esté el aire que produzca en nuestro sistema. Y entonces lo que hacemos es avanzar por la curva aquí, ¿verdad? Por lo que podríamos probar aquí un conjunto diferente de parámetros. De nuevo, simplemente algo así como moverse en una dirección dada con diferentes valores de parámetros. Y luego medimos el error que obtenemos de eso. Y en este caso, en realidad logramos menos error al probar este nuevo conjunto de parámetros. Entonces decimos, vale, creo que nos dirigimos en la dirección correcta aquí. Vamos a cambiarlos aún más de la misma manera. Y simplemente seguimos haciendo esto a diferentes pasos hasta que finalmente tocamos el fondo de una curva aquí. Y nuestro error comienza a aumentar después de ese punto. Entonces en ese punto sabremos que en realidad tocamos el fondo de este gradiente. Entonces usted entiende la naturaleza del término aquí, descenso gradiente. Básicamente estamos escogiendo algún punto al azar con un conjunto dado de parámetros que medimos el error de cuatro. Y seguimos empujando esos parámetros en una dirección determinada hasta que el error se
minimice y empiece a volver a subir algún otro valor, vale, y así es como funciona el descenso gradiente en pocas palabras, no yendo a meterse en todas las matemáticas de núcleo duro de la misma. Todo El concepto es lo que es importante aquí, porque el descenso gradiente es cómo realmente
entrenamos nuestras redes neuronales para encontrar una solución óptima. Ahora puedes ver aquí hay algunas áreas de mejora para esta idea. En primer lugar, en realidad se puede pensar en esto como una especie de bola rodando cuesta abajo. Entonces sobre la optimización de la que hablaremos más adelante es usar el concepto de un impulso. En realidad puedes tener que esa bola gane velocidad ya que va bajando por la colina aquí, si se quiere. Y despacio a medida que llega al fondo y, ya sabes, un poco de fondo por ahí. Esa es una forma de hacer que converja más rápidamente cuando estás haciendo cosas en, puedo hacer que el entrenamiento real tus redes neuronales sea aún más rápido. Otra cosa de la que vale la pena hablar es el concepto de minimas locales. Entonces, ¿qué si elegí al azar un punto, luego
terminé aquí en esta curva, podría terminar instalándome en este mínimo aquí, que en realidad no es el punto del menor error. El punto del menor error en esta gráfica está por aquí. Eso es un problema. Es decir, ese es un problema general en gradiente, descenso gradiente. ¿ Cómo te aseguras de que no te atasques en lo que se llama un mínimo local. Porque si solo miras esta parte de la gráfica que se parece a la solución óptima. Y si simplemente me pasa a empezar de nuevo aquí,
ahí es donde me voy a quedar atascado. Ahora bien, existen diversas formas de hacer frente a este problema. Obviamente, podrías empezar desde diferentes ubicaciones, así que intenta evitar ese tipo de cosas. Pero en términos prácticos, resulta que los mínimos locales no son realmente tan grandes cuando se trata de entrenar redes neuronales. Es que realmente no sucede tan a menudo. No terminas con formas como esta en la práctica. Por lo que podemos salirnos con la suya no preocuparnos tanto por eso. Eso es muy importante. Qué bueno porque durante mucho tiempo, gente cree que la IA estaría limitada por este efecto mínimo local. Y en la práctica realmente no es tan grande de un trato. Otro concepto que necesitamos para familiarizarse con algo llamado auto diff. Y realmente no necesitamos entrar en las matemáticas hardcore de cómo funciona la autodef. Sólo hay que saber qué es y por qué es importante. Entonces cuando estás haciendo descenso gradiente, alguna manera necesitas saber cuál es el gradiente, ¿verdad? Por lo que necesitamos medir cuál es la pendiente que estamos tomando a lo largo de nuestra función de costos, nuestra medición de error, o podría ser un error estándar medio para todo lo que sabemos. Y para hacer eso matemáticamente, necesitas meterte en el cálculo, ¿verdad? Si estás tratando de encontrar la pendiente de una curva y estás lidiando con múltiples parámetros y estamos hablando de derivados parciales, ¿verdad? Los primeros derivados parciales para descifrar la pendiente en la que nos dirigimos. Ahora resulta que esto es muy matemáticamente intensivo e ineficiente para que lo hagan las computadoras. Por lo que simplemente haciendo el enfoque de fuerza bruta al descenso gradiente. Eso se pone muy caro muy rápido. Auto diff es una técnica para acelerar eso. Por lo que específicamente usamos algo llamado modo inverso auto diff. Y lo que debes saber es que puede computar todos los derivados parciales que necesitas solo atravesando tu gráfica en el número de salidas más una que tienes. Y esto funciona realmente bien en redes neuronales. Porque en una red neuronal se tiende a tener unas neuronas artificiales que tienen muchos insumos, pero probablemente sólo una salida o muy pocas salidas en comparación con los insumos. Entonces esto resulta ser un truco de cálculo bastante bueno. Es complicado. Se puede buscar cómo funciona. Es algo bastante hardcore, pero funciona y eso es lo importante. Y lo que también es importante es que es lo que la biblioteca TensorFlow utiliza debajo del capó para implementar su descenso de gradiente. Por lo que de nuevo, nunca vas a tener que
implementar realmente descenso de gradiente desde cero o implementar auto diferente scratch. Todos estos se hornean en las bibliotecas que estamos usando. Bibliotecas como TensorFlow para hacer deep learning. Pero son términos que tiramos mucho por ahí. Entonces es importante que al menos sepas cuáles son y por qué son importantes. Entonces solo para hacer una copia de seguridad un poco, el descenso de
gradiente es la técnica que estamos utilizando para encontrar
los mínimos locales del error de eso estamos tratando de optimizar para dado un cierto conjunto de parámetros. Y auto diff es una forma de acelerar ese proceso. Por lo tanto, no tenemos que hacer tantas matemáticas o bastantes cómputos para medir realmente ese gradiente del descenso del gradiente. Una de las cosas que necesitamos hablar es softmax. Nuevamente, las matemáticas son, es tan complicado aquí. Pero de nuevo, lo que realmente importa es entender qué es y para qué sirve. Entonces, básicamente, cuando tienes el resultado final de una red neuronal, terminas con un montón de lo que llamamos pesos que salen de la red neuronal al final. Entonces, ¿cómo hacemos uso de eso? ¿ Cómo hacemos un uso práctico de la salida de nuestras redes neuronales? Bueno, ahí es donde entra softmax. Básicamente convierte cada uno de los pesos finales que salen de tu red neuronal en una probabilidad. Entonces si estás tratando de clasificar algo en tu red neuronal, como por ejemplo, decide si una imagen es una imagen de un rostro o una foto de un perro o una imagen de un signo de stop. Podrías usar softmax al final para convertir esas salidas finales de las neuronas en probabilidades para cada clase, ¿de acuerdo? Y entonces solo puedes escoger la clase, tiene la mayor probabilidad. Entonces es solo una forma de normalizar las cosas, si se quiere, en un rango comparable. Y de tal manera que si realmente eliges el valor más alto de la función softmax de las diversas salidas, terminas con la mejor opción de clasificación al final del día. Por lo que es solo una forma de convertir la salida final de tu red neuronal en una respuesta real para un problema de clasificación. Entonces, de nuevo, podrías tener el ejemplo de una red neuronal que está tratando de conducir tu auto por ti. Y necesita identificar imágenes de señales de stop o dar señales o semáforos. Podrías usar softmax al final de alguna red neuronal que tomará tu imagen y clasificada como uno de esos tipos seno, ¿verdad? Entonces de nuevo, solo para recapitular, algoritmo de descenso de
gradiente para minimizar el error en múltiples pasos. Básicamente, comenzamos en algún conjunto aleatorio de parámetros, medimos el error, movemos esos parámetros en una dirección determinada, veamos si eso da como resultado más error o menos error. Y solo intenta moverte en la dirección de minimizar error hasta que encontremos ahí el fondo real de la curva, donde tenemos un conjunto de parámetros que minimiza el error de lo que sea que estés tratando de hacer. Auto diff es solo un truco de cálculo para hacer que el descenso de gradiente sea más rápido. Hace que sea más fácil encontrar los gradientes en descenso
gradiente con solo usar algunos engaños de cálculo. Y Softmax es solo algo que aplicamos encima de nuestra red neuronal
al final para convertir la salida final de nuestra red neuronal a una elección real de clasificación, dados varios tipos de clasificación para elegir. ¿ De acuerdo? Entonces esos son los términos matemáticos básicos o términos
algorítmicos que debes entender para hablar de redes neuronales artificiales. Entonces con eso bajo nuestro cinturón, hablemos de redes neuronales artificiales a continuación.
3. La historia de las redes neural artificiales: Vamos a sumergirnos en redes neuronales artificiales y cómo funcionan a un alto nivel más adelante en
realidad nos ensuciará las manos y en realidad creará algunas. Pero primero necesitamos entender cómo funcionan en donde venían. Entonces es cosas bastante cool. Es decir, todo
este campo de la inteligencia artificial se basa en una comprensión de cómo funcionan nuestros propios cerebros. Entonces, ya
sabes, a lo largo de millones de años de evolución, la naturaleza ha llegado con una manera de hacernos pensar. Y si solo hacemos ingeniería inversa de la forma en que funcionan nuestros cerebros, podemos obtener algunas ideas sobre cómo hacer máquinas que así lo piensen dentro de su cerebro. Específicamente tu corteza cerebral, que es donde vivo, estás pensando que pasa. Tienes un montón de neuronas, las células nerviosas individuales del aire, y están conectadas entre sí vía Exxon y dendritas. Se puede pensar en estos como conexiones. Ya sabes, cables, si se quiere, que conectan diferentes acentos juntos. Ahora una neurona individual disparará o enviará una señal a todas las neuronas a las que está conectada cuando suficiente de sus señales de entrada se active aire para que el nivel de neurona individual sea un mecanismo
muy sencillo. Simplemente tienes esta celda. Esa es neurona que tiene un montón de señales de entrada entrando en ella. Y si suficientes de esas señales de entrada alcanzan cierto umbral, en apagará un conjunto de señales a las neuronas que, su vez, está conectada a un oleaje. Pero cuando se empieza a tener muchas,
muchas, muchas de estas neuronas conectadas entre sí de muchas,
muchas maneras diferentes con diferentes fortalezas entre cada conexión, las cosas se complican mucho. Por lo que esta es una especie de definición de comportamiento emergente. Tienes un concepto muy sencillo, modelo
muy sencillo. Pero cuando se apilan suficientes de ellos juntos, se
puede crear un comportamiento muy complejo al final del día, y esto puede producir un comportamiento de aprendizaje. Esto es en realidad esto realmente funciona y no solo funciona en tu cerebro, también
funciona en nuestras computadoras. Ahora piensa en la escala de tu cerebro. Tienes miles de millones de neuronas, cada una de ellas con miles de conexiones, y eso es lo que se necesita para crear realmente una mente humana. Y esta es una escala con la que ustedes saben que todavía sólo podemos soñar en el campo del
aprendizaje profundo y la inteligencia artificial. Pero Es el mismo concepto básico. Simplemente tienes un montón de neuronas con un montón de conexiones que se comportan individualmente de manera muy simple. Pero una vez que consigues suficiente de ellos juntos cableados lo suficientemente complejos y formas en las que realmente puedes crear pensamientos muy complejos, si quieres, e incluso la conciencia. La plasticidad de tu cerebro básicamente está sintonizando hacia dónde van esas conexiones y qué tan fuerte es cada una, y ahí es donde pasa toda la magia, si se quiere. Además, miramos más profundamente en la biología de tu cerebro. Se puede ver que dentro de su corteza, las neuronas parecen estar dispuestas en pilas o columnas corticales que procesan información en paralelo. Entonces, por ejemplo, en tu corteza visual, diferentes áreas de lo que ves podrían estar siendo procesadas en paralelo por diferentes columnas
o columnas corticales de neuronas. Cada una de estas columnas está a su vez, hecha de estas muchas columnas de alrededor de 100 neuronas por muchas columnas que el aire luego
se organizó en estas hiper columnas más grandes y dentro de tu corteza hay alrededor de 100 millones de estas muchas columnas, por lo que de nuevo simplemente suman rápidamente. Ahora, casualmente, este es un dedo de arquitectura similar. Cómo funciona la tarjeta de video, la tarjeta de video tres d en tu computadora. Tiene un montón de varias unidades de procesamiento simples, muy pequeñas que se encargan de la informática. Cómo se calculan pequeños grupos de píxeles en tu pantalla al final del día, y simplemente sucede que esa es una arquitectura muy útil para imitar cómo
funciona tu cerebro . Entonces es una especie de accidente feliz que la investigación que ha pasado para hacer que los videojuegos se comporten realmente rápidamente o jugar al call of duty o lo que sea que te gusta jugar
se preste a la misma tecnología que hizo posible la inteligencia artificial en un gran escala y a bajo costo. Las mismas tarjetas de video que estás usando para jugar a tus videojuegos también se pueden usar para realizar deep learning y crear redes neuronales artificiales. Piense en lo mejor que sería si realmente hiciéramos chips que fueran construidos
específicamente para una simulación de redes neuronales artificiales. Bueno, resulta que algunas personas están diseñando barcos así ahora mismo. Para cuando veas esto, podrían incluso ser una realidad. Creo que Google está trabajando en uno mientras hablamos, Así que en un momento alguien dijo,
Hey, Hey, la forma en que pensamos que funcionan las neuronas es bastante simple. En realidad no sería demasiado difícil replicar eso nosotros mismos y tal vez tratar construir nuestro propio cerebro. Y la esta idea se remonta a 1943 la gente acaba de proponer una
arquitectura muy simple donde si tienes una neurona artificial, tal vez puedas configurar una arquitectura donde esa neurona artificial dispara si más que un cierto número de sus conexiones de entrada están activas y cuando pensaron en esto más profundamente en un contexto de ciencias de la computación, gente se da cuenta de que en realidad se pueden crear expresiones lógicas expresiones booleanas al hacer esto. Entonces dependiendo del número de conexiones que provienen de cada neurona de entrada y si cada conexión activa o suprime el honor, y en realidad se pueden hacer ambas cosas que funcionan así en la naturaleza también. Se pueden hacer diferentes operaciones lógicas, por lo que este diagrama en particular está implementando una operación u. Entonces imagina que nuestro umbral para nuestra neurona era que si tienes dos o más entradas activas , en
apagarás una señal. En esta puesta aquí, tenemos dos conexiones a la neurona A y giramos a conexiones que llegan desde la neurona B. Si alguna de esas neuronas, producir y señal de entrada que en realidad causará ni en el mar el fuego. Entonces puedes ver que hemos creado una relación o aquí donde si ni en una o neurona B alimenta neurona, mira a las señales de entrada que causarán que están desasientan un fuego y producen una salida verdadera. Entonces hemos implementado aquí la Operación Booleana C es igual a A o B, simplemente usando el mismo cableado que ocurre dentro de tu propio cerebro, y no entraré en los detalles, pero también es posible implementar y no en medios similares. Entonces empezamos a construir sobre esta idea. Creamos algo llamado la Unidad de Umbral Lineal, o LTU, para abreviar en 1957. Esto se acaba de construir sobre las cosas asignando pesos a esos insumos. Entonces en lugar de simplemente simple interruptor de encendido y apagado es, ahora
tenemos la capacidad del concepto de tener esperas en cada una de esas entradas así que puedes sintonizar más y otra vez. Esto está trabajando más hacia nuestra comprensión de la biología. Diferentes conexiones entre diferentes neuronas pueden tener diferentes fortalezas, y podemos modelar esas fortalezas en términos de estos pesos en cada entrada que entra en nuestra neurona
artificial. También vamos a tener que la salida sea dada por una función de paso. Entonces esto es similar en espíritu a cómo lo estábamos usando antes. Pero en lugar de decir que vamos a disparar si un cierto número de entradas están activas, bueno, ya no
hay concepto de activo, no
están activos. Ahí entran pesos. Esos pesos podrían ser positivos o negativos. Entonces diremos que si el algunos de esos pesos es mayor que cero, vamos a seguir adelante y disparar por su cuenta fuera de su lección o lecciones. Cero. No vamos a hacer nada. Entonces sólo una ligera adaptación al concepto de una neurona artificial aquí donde estamos introduciendo pesos en lugar de simplemente un simple interruptor binario de encendido y apagado es así que vamos a construir sobre eso aún más y vamos a crear algo llamado Perceptron. Y un perceptrón es sólo una capa de múltiples unidades de umbral lineal. Ahora estamos empezando a meternos en cosas que realmente pueden aprender. De acuerdo, Entonces reforzando pesos entre estos lt uso que produjo el comportamiento que queremos, podemos crear un sistema que aprenda con el tiempo a producir la salida deseada. Y de nuevo, esto también está trabajando más hacia nuestra creciente comprensión de cómo funciona el cerebro dentro del campo de la neurociencia. Hay un refrán que va las celdas que disparan juntos alambre. Y eso es una especie de hablar con el mecanismo de aprendizaje que está pasando en nuestro perceptrón artificial aquí, donde si tenemos pesos que están llevando al resultado deseado que queremos, ya
sabes, podrían pensar en esos pesas de nuevo como fortalezas de conexiones entre neuronas. Podemos reforzar esos pesos a lo largo del tiempo y recompensar las conexiones que produjeron el comportamiento que queremos. De acuerdo, ya ves, aquí tenemos nuestros insumos entrando en pesos, igual que hicimos en lt años antes. Pero ahora tenemos múltiples lt usan pandilla juntos en una capa, y cada una de esas entradas se conecta a cada neurona individual en esa capa, ¿de acuerdo? Y luego aplicamos la función de paso cada uno. A lo mejor esto se aplicará a, ya
sabes, las clasificaciones. A lo mejor sería un perceptrón que intenta clasificar una imagen en una de tres cosas o algo así. Otra cosa que introdujimos aquí es algo llamado el neutrón de sesgo allá
a la derecha. Y eso es sólo algo para hacer que las matemáticas funcionen. A veces hay que añadir un valor un poco fijo, constante que podría ser otra cosa que puedes optimizar para nosotros. Bueno, entonces esto es un perceptrón. Nos hemos llevado nuestra red artificial. Trasladar eso a una unidad de umbral lineal. Y ahora hemos puesto múltiples unidades de umbral lineal juntas en una capa para crear un perceptrón, y ya tenemos un sistema que realmente puede aprender. Ya
sabes, en realidad puedes intentar optimizar estos pesos, y puedes ver que hay mucho de este punto si tienes cada una de esas entradas yendo a cada LTU de tu capa, se suman rápido, y de ahí viene la complejidad del aprendizaje profundo. Llevemos eso un paso más allá y tendremos un perceptrón multicapa. Se anuncia de una sola capa de perceptrón de uso lt. Vamos a tener más de uno, y en realidad tenemos ahora una capa oculta en el medio ahí, por lo que se puede ver que son entradas aire entrando en una capa en la parte inferior. El resultado inició capa en la parte superior, y en el medio tenemos esta capa oculta de lt adicional utilizada en tus unidades de umbral que pueden realizar lo que llamamos deep learning. Entonces aquí ya tenemos lo que hoy llamaríamos una red neuronal profunda. Ahora hay retos de capacitar estas cosas porque son más complejas. Pero hablaremos de eso más adelante. Se puede hacer. Y otra vez lo que el dedo del pie realmente aprecia aquí es esto cuántas conexiones hay? Entonces, aunque aquí sólo tenemos un puñado de neuronas artificiales, se
puede ver que hay muchas conexiones entre ellas, y hay mucha oportunidad para optimizar los pesos entre cada conexión. De acuerdo, así es como funciona un Perceptron multicapa. Simplemente puedes volver a ver eso. Tenemos un comportamiento emergente aquí, y la unidad de umbral lineal individual es un concepto bastante simple. Pero cuando las juntas en estas capas y tienes múltiples capas todas cableadas juntas, puedes obtener un comportamiento muy complejo porque hay muchas posibilidades diferentes para todos
los pesos entre todos esos diferentes conexiones. Por último, hablaremos de una moderna red neuronal profunda, y realmente, esto es todo lo que hay para ello. Ya sabes, el resto de este curso sólo vamos a estar hablando de formas de implementar algo como esto. OK, entonces todo lo que hemos hecho aquí es que hemos reemplazado esa función de paso por algo mejor. Hablaremos de las funciones de activación alternativas. Esta está ilustrando algo que se llama rela tú de lo que hablaremos más adelante. El punto clave ahí. Aquellos que una función de paso tiene muchas propiedades matemáticas desagradables, sobre todo cuando estás tratando de dedo del pie averiguar sus pendientes en sus derivados. Por lo que resulta que otras formas funcionan mejor y te permiten converger más rápidamente cuando estás tratando de entrenar. Una red neuronal también aplicará soft max a la salida, que hablamos en la conferencia anterior. Esa es sólo una forma de convertir. Las salidas finales de nuestra red neuronal son red neuronal profunda en probabilidades desde donde podemos simplemente elegir la desclasificación con la mayor probabilidad. Y también entrenaremos a esta red neuronal usando descenso codicioso o alguna variación de la misma. Hay varios de ellos para elegir. Hablaremos de eso con más detalle también. A lo mejor eso usará auto diff, que también hablamos antes para hacer realmente más eficiente ese entrenamiento. Entonces eso es más o menos. Ya sabes, en los últimos cinco minutos o así que hemos estado hablando, te
he dado toda la historia, más o
menos de redes neuronales profundas en el aprendizaje profundo. Y esos son los conceptos principales. No es tan complicado, ¿verdad? Esa es realmente la belleza de la misma. Es un comportamiento emergente. Tienes bloques de construcción muy simples. Pero cuando uno pone estos bloques de construcción juntos de formas interesantes, muy complejas y francamente misteriosas, las cosas pueden suceder. Entonces me pongo bastante emocionado con estas cosas. Vamos a sumergirnos en más detalles sobre cómo realmente funciona a continuación.
4. Hands-On en el área de Tensorflow: Entonces ahora que entendemos los conceptos de redes neuronales artificiales y aprendizaje profundo, vamos a meternos con ello. Es sorprendentemente fácil de hacer. La gente detrás de Tensorflow en Google ha creado un bonito sitio web llamado Playground dot tensor fluid out consciente que nos permite experimentar con la creación de nuestras propias redes neuronales y no escribes una línea de código para hacerlo. Entonces es una gran manera de conseguir una especie de, ah, manos encima y de sentir cómo funcionan. Así que vamos a sumergirnos así que dirígete a playground dot tensorflow dot org y deberías ver una pantalla como esta puedes seguir aquí o simplemente mirarme hacerlo. Pero definitivamente te animo a jugar con esto tú mismo y obtener una especie de, ah, intuitiva sensación de cómo funciona el aprendizaje profundo. Esto es algo muy poderoso si puedes entender lo que está pasando en esta página Web. Entonces lo que estamos tratando de hacer aquí es clasificar un montón de puntos solo en base a su ubicación en esta imagen de dos D. Entonces esta es nuestra capacitación, dijeron
datos, si se quiere. Tenemos un montón de puntos aquí y los que están en el medio están clasificados es azul, y los que están en el exterior están clasificados como naranja. Por lo que nuestro objetivo es crear una red neuronal que, sin conocimiento previo, pueda realmente averiguar si un punto dado debe ser azul o naranja y predecir con éxito cuáles deben ser las clasificaciones. Entonces piensa en esto son nuestros datos de entrenamiento. De acuerdo, sabemos con anticipación cuáles son las clasificaciones correctas para cada uno de estos puntos. Y vamos a usar esta información para entrenar a nuestra red neuronal para que ojalá aprendan que cosas en el medio deben ser azules, y las cosas en el exterior deben ser de color naranja. Ahora, aquí tenemos un diagrama de la propia red neuronal, y podemos jugar con esto. Podemos manipularlo. Podemos agregar capas para sacar capas. ADM o neuronas. Dos capas. Sea lo que sea que quieras hacer, repasemos lo que está pasando aquí. Entonces, en primer lugar,
estamos seleccionando el conjunto de datos con el que queremos jugar donde empieza con este valor predeterminado, uno que se llama Circle the Input Air. Simplemente, la X e Y coordina la posición vertical y horizontal de cada punto de datos, por lo que a nuestra red neuronal se le da un punto para clasificar. Todo con lo que tiene que trabajar son esos dos valores, su posición horizontal y su posición vertical. Y el inicio es igualmente ponderado siendo horizontal una vertical, por lo que podríamos definir la posición de cualquiera de estos puntos en cuanto a su resultado y posición
vertical. Por ejemplo, este punto aquí tendría una posición horizontal de uno negativo en una posición vertical de aproximadamente cinco negativos, y luego lo alimentamos a nuestra red. Se puede ver que estas notas de entrada tienen conexiones con cada una de estas cuatro neuronas y son capa oculta. Y podemos manipular los pesos entre cada una de estas conexiones para crear el aprendizaje que queremos. Aquellos a su vez se alimentan en dos neuronas de salida aquí que en última instancia decidirán clasificaciones queremos al final del día. Por lo que ten en cuenta, este es un problema de clasificación de Byeon Eri. Es azul o naranja, Así que al final del día, sólo
necesitamos ah señal única, de
verdad, verdad, y eso es lo que entra en esta salida aquí. Adelante, hit play y veamos qué pasa. Lo que va a hacer empezó manojo de iteraciones donde aprende de estos datos de entrenamiento. Por lo que vamos a seguir alimentándolo entrada de este conjunto de datos de entrenamiento. Y conforme va según se genere a través de él, comenzarás a reforzar las conexiones que llevan a las clasificaciones correctas través de Grady hacia el centro. Algún mecanismo similar, ¿verdad? Y si hacemos eso suficientes veces, debería converger hacia una red neuronal que sea capaz de clasificar de manera confiable estas cosas . Vamos a golpear jugando. Basta con verlo en acción. Así que mantén el ojo en esa imagen a la derecha ahí. Está bien, se
puede ver que ya hemos convergido en una solución. Puedo seguir adelante y pausar eso ahora y cosas bastante cool para que veas que ha
creado con éxito este patrón donde las cosas que encajan en esta zona media aquí se clasifica es azul , y las cosas en el exterior se clasifica como naranja así podemos sumergirnos en lo que realmente sucedió aquí. Estos espesores de todas estas conexiones representan sus pesos para que puedas ver los pesos
individuales que están cableados entre cada una de estas neuronas. Empezamos aquí, se ven estos aire más o menos igual ponderados. Uh, bueno no exactamente. De igual manera, algunas de estas son un poco débiles. Pero, ¿qué? Al menos dos es este comportamiento en el medio? Por lo que empezamos con coordenadas X e Y igualmente ponderadas. Esos van a esta capa aquí. Entonces, por ejemplo, esta capa oculta aquí esta neurona está diciendo que quiero esperar las cosas un poco más pesadamente en esta esquina, ¿de acuerdo? Y cosas que son como en la esquina inferior izquierda, no tanto. Y entonces este otro está recogiendo cosas en la parte superior e inferior. Este es un poco más diagonal al fondo, ¿
verdad? Y este es incluso mawr fondo derecho pesado. Y si combinas estas cosas juntas, subimos con estas capas de salida que se veían así. ¿ De acuerdo? Y así tenemos Terminamos con estas dos cosas blobby donde estamos dando un impulso a
las cosas de la derecha y dando un impulso a las cosas que se encuentran dentro de especie de esto. Ah, más área circular blobby. Y luego combinamos esos juntos terminamos con nuestra salida final. Eso se ve así. Ahora bien, esto podría verse diferente de correr a correr. Ya sabes, hay algo aleatorio, algo de aleatoriedad a cómo todo esto se inicializa. ¿ En realidad necesitamos incluso una red neuronal profunda para hacer esto, aunque una cosa de optimización es eliminar capas y ver si te salgas con la tuya. A lo mejor ni siquiera necesitamos aprendizaje profundo. Es decir, verdad, esto es una especie de cosa simple. Ya sabes, las cosas en el medio son azules. Cosas en el exterior es naranja. Sigamos adelante y eliminemos de nuevo una de estas neuronas de la capa de salida. Todo lo que necesitamos es una compra un resultado de todos modos. ¿ Todavía puede funcionar? Sí lo hace. De hecho, es sólo que es rápido. Entonces, ¿necesito siquiera esa capa en absoluto? Adelante y quitemos esa capa final en absoluto todavía funciona, ¿
verdad? Entonces para este problema muy básico fuera incluso necesidad de aprendizaje profundo. Todo lo que tengo aquí es una sola capa. Entonces esto es simplemente No es ni siquiera un perceptrón multicapa. Es sólo un perceptrón. ¿ Necesito siquiera neuronas ahí dentro? Bueno, creo que tal vez sí, pero este de aquí no está haciendo mucho bien. Todo lo que está haciendo es básicamente hacerlo pasó a través, y las entradas que entran en ella se ponderaron a casi nada. Entonces mejor que ni siquiera necesito esa. Vamos a deshacernos de él. Todavía funciona. ¿ No es ese tipo de cool? Es decir, piensa en eso. Sólo tenemos tres neuronas artificiales, y eso es todo lo que se necesita para hacer este problema. Es decir, compara eso con los miles de millones de neuronas que existen dentro de tu cabeza. Ahora probablemente no podamos salirnos con menos que eso. Vamos a seguir adelante y tratar de hacer turno a las neuronas y ver qué pasa. Sí, eso no va a pasar, ¿verdad? Entonces para este problema en particular, todo lo que necesitas son tres neuronas para no cortarlo. Juguemos un poco más. Probemos un conjunto de datos más desafiante. De acuerdo, así que aquí hay un patrón en espiral, y se puede decir que esto va a ser más difícil porque no podemos simplemente decir cosas en esta esquina va a ser esta, uh, esta clasificación, como necesitamos una forma mucho más fina de grano, como identificar estas espirales individuales. Y de nuevo vamos a ver si sólo podríamos entrenar y Earl Network para averiguar eso descartar por sí mismo. Y, bueno, obviamente los afinadores lo cortarán. Volvamos a cuatro. A ver si es suficiente. Apuesto a que no lo es. Se puede ver que es lo que está intentando, pero realmente está luchando. Podemos dejar que esto funcione por un tiempo, y se puede ver que está empezando a llegar algo así. Ya sabes, las áreas azules están convergiendo en algunas áreas azules, y es que realmente se está esforzando duro, pero simplemente no son suficientes neuronas para sacar a ésta. Sigamos adelante y agreguemos otra capa. A ver si eso ayuda. Se puede ver que está haciendo cosas más complicadas ahora que tiene más neuronas con las que trabajar. Pero todavía no puedo llegar del todo a donde necesita estar. Añadamos un par de neuronas más a cada capa. En términos generales, puede agregar más neuronas a una capa. Agrega más capas. Es, ah, va a producir los mismos resultados. Pero podría afectar la velocidad en la que converge, dependiendo de qué enfoque tomar. Simplemente fascinante. Viendo este trabajo, ¿no? Está bien, éste se quedó atascado. Todavía no puede lograrlo del todo. Añadamos una capa más. Este es en realidad un patrón muy común. Verás que comienzas con un montón de capas al principio y les gusta que las estrechen a medida que avanzas. OK, entonces vamos a ir a una capa de entrada inicial de seis neuronas a una capa oculta de cuatro neuronas y luego a una capa de dos neuronas que finalmente producirá una salida binaria
al final . Bueno, creo que está llegando ahí. Aquí, Río. Wow. De acuerdo, entonces ,
técnicamente, sigue siendo como refinarse en sí mismo, pero como que lo hizo bien. Es decir, ahora esto es lo que llamamos por encajar hasta cierto punto, ¿sabes? Es decir, obviamente lo ha hecho. Es como si el aire de zarcillos cortara por aquí, y eso no es realmente parte del patrón que estamos buscando. Aunque sigue yendo . Esos zarcillos aire tipo de debilitarse y debilitarse. Entonces, ya
sabes, todavía no tiene suficientes neuronas para hacer exactamente lo que haríamos intuitivamente. Pero quiero decir aún, quiero decir, este es un problema de clasificaciones bastante complicado. Se dio cuenta y tal vez por encima de encajar un poco. Pero lo descubrí, y todo lo que tenemos es qué, ¿ 12 neuronas aquí? Quiero decir, eso es una locura ahora mismo. Otra cosa de la que quiero hablar aquí, también. es que tipo de ilustra el hecho de que una vez que te metes en una múltiples capas, se vuelve muy difícil entender intuitivamente lo que está pasando dentro de la red neuronal. Esto se pone un poco espeluznante, ¿sabes? Es decir, ¿qué significa realmente esta forma? Es decir, una vez que tienes suficientes neuronas, es un poco duro ajuste en el dedo del pie dentro de tu propia cabeza. De lo que realmente representan los patrones de los. Es decir, la primera capa es bastante sencilla. Ya sabes, básicamente está dividiendo la imagen en diferentes secciones. Pero a medida que te metes en estas capas ocultas, las cosas empiezan a ponerse un poco raras a medida que se combinan juntas. Sigamos adelante y sumamos una forma más de voluntad. Debí haber dicho dos más a esta capa de salida y añadir una capa más al final. Veamos si eso ayuda a que las cosas converjan un poco más rápidamente. Sí, está
bien. Empezar a luchar un poco. Ve eso como si en realidad tuviera una forma de espiral pasando aquí ahora. Entonces con esas neuronas extra, fue capaz de hacer algo más interesante. Todavía tenemos esto. Ah, este pequeño pico aquí que está haciendo lo incorrecto, y no puede parecer bastante pensar su salida de ese dio unos cuantos más en el de Irán, aunque podría resolverlo. Estos también están mal clasificados. Pero me parece interesante que realmente creara un patrón espiral aquí por sí solo. Entonces puede que con unas pocas neuronas más o una capa más, en realidad
podrías crear una solución aún mejor. Pero lo dejaré como ejercicio para ustedes. Ahora, ya sabes, para jugar alrededor de esto, realmente
te animo a que solo te metas con él y veas qué tipo de resultados puedes obtener. Este patrón espiral es en particular un problema interesante. Basta con explicar aquí algunos de los otros parámetros. Estamos haciendo una clasificación aquí. Ahí es donde vamos a estar haciendo a lo largo de esta sección. La función de activación de la que hablamos no usar una función de paso y usar otra cosa , algunas otras que son populares Rally era en realidad muy popular ahora mismo de la
función de realización de la que aún no hemos hablado. El índice de aprendizaje es simplemente básicamente el tamaño de paso en el ingrediente Descensos que estamos haciendo, así que puedes ajustar eso si quieres,
así,
vamos a así, ver si realmente bien realmente hace una diferencia lo esperaría para sólo, ya
sabes, afectar la velocidad. Oh, Dios
mío. Mira eso. Eso está bastante cerca de lo que queremos, verdad? Es decir, hay aparte de esta pequeña espiga aquí que no está realmente ni siquiera ahí un poco de exceso de ajuste yendo allá. Pero básicamente hemos creado esa forma espiral recién salido de este puñado de neurona. Scott, podría hacer esto todo el día, chicos. Y espero que lo hagas, ya
sabes, solo jugar esto Es tan divertido, y te da una comprensión tan concreta de lo que está pasando bajo el capó. Quiero decir, mira esta capa oculta aquí. Vamos donde estas formas espirales comenzaban a emerger y se juntaban. Y cuando piensas en el hecho de que tu cerebro funciona de muy de la misma manera, es literalmente mi empleo de todos modos. Mete por ahí con esto. Es un ejercicio realmente genial y espero que te diviertas un poco con él.
5. Detalles de aprendizaje profundo: todo bien. Sé que probablemente tengas ganas de sumergirte en algún código a estas alturas, pero hay un poco más de teoría que necesitamos cubrir con aprendizaje profundo. Yo quiero hablar un poco de exactamente cómo están entrenados y algunos consejos para afinarlos ahora que has tenido un poco de experiencia manos en las manos con ellos usando el patio de
recreo Tensorflow . Entonces, ¿cómo se entrena un Perceptron multicapa? Bueno, está usando una técnica llamada propagación de espalda. No es tan complicado, en realidad. A nivel conceptual, todo lo que estamos haciendo es Grady en disentimiento como hablamos antes, usando ese truco matemático del modo inverso auto def. Para que suceda de manera eficiente para cada paso de entrenamiento, solo
calculamos el error de salida para los pesos que tenemos actualmente en su lugar para cada conexión entre cada neurona artificial. Y luego es aquí donde ocurrió la propagación de la espalda. Ya que hay múltiples capas con las que lidiar, tenemos que tomar ese error que se computa al final de nuestra red neuronal y de nuevo propagado hacia abajo en la otra dirección, empujarlo hacia atrás a través de la red neuronal, ok, Y de esa manera podemos repartir ese error a través de cada conexión todo el camino de vuelta a las entradas usando los pesos que actualmente estamos usando en este paso de entrenamiento. De acuerdo, Concepto
tan bastante simple. Nos limitamos a tomar el aire. Utilizamos los pesos que actualmente estamos usando en nuestra red neuronal para volver a propagar que nuestro error a conexiones individuales. Y entonces podemos usar esa información para ajustar los pesos a través de Grady y disidencia para intentar
realmente llegar a un mejor valor en el siguiente pase en la siguiente época, si se quiere, de nuestros pases de entrenamiento. Entonces eso está todo de vuelta. Propagación es que ejecutamos un conjunto de pesos, medimos el error, volvemos a propagar ese error. Usando eso espera a las cosas en las que está, muy bien, enviado. Inténtalo de nuevo y solo seguimos haciendo esto una y otra vez. Hasta que nuestro sistema converja. Deberíamos hablar un poco sobre la función de activación. Por lo que en nuestro ejercicio anterior, usando el patio de recreo Tensorflow, estábamos usando la función de activación de tangente hiperbólica por defecto. Y luego cambiamos a algo llamado Rela, y vimos que los resultados fueron un poco mejores. ¿ Qué pasaba ahí? Bueno, la función de activación es sólo la función que determina la salida de una neurona, dados los algunos de sus insumos. Entonces tomas la suma de todos los pesos de los insumos que entran en una neurona. La función de activación es lo que toma que algunos y lo convierte en una señal de salida. Ahora, como hablamos de camino atrás en la conferencia uno usando una función de paso es lo que la gente hizo originalmente. Pero eso realmente no funciona con Grady y disidencia porque ahí no hay Grady int. Si se trata de una función de escalón, no
hay pendiente. Está encendida o apagada. Ya sabes, o
es recto a través o arriba y abajo. No hay ningún derivado útil ahí en absoluto. Entonces, por eso las funciones alternativas funcionan un poco mejor en la práctica. Existen algunos otros llamados la Función Logística,
la función tangente hiperbólica que produce más de una curva curvilínea. Si piensas en cómo se ve una tangente hiperbólica, es ah más de Ah, no tiene ese agudo corte de su cero el origen, por lo que eso puede funcionar bastante bien. También hay algo que se llama la unidad Lineal Exponencial, que también es un poco más curvilínea. Lo que terminamos usando, sin embargo, fue Rallo. Eso significa unidad lineal rectificada. Y eso es lo que esta gráfica aquí está mostrando básicamente cero si es menor que cero, y si es mayor que cero, sube en un ángulo de 45 grados. Entonces es solo, ya
sabes, conseguirte lo real. Parte de la entrada espera como su salida si esa salida es mayor que cero. De acuerdo, para que la ventaja que tiene Rela es que es muy simple, muy fácil y muy rápido de computar. Entonces si te preocupa converger rápidamente y tu recurso informático lo es, rela es una opción realmente buena. Ahora hay variantes de rela que funcionan aún mejor si no te importa tanto la eficiencia cuando se llama leaky rela. Y todo
lo que es es en lugar de ser plana izquierda de cero, en realidad tiene un poco de pendiente ahí también, una pendiente muy pequeña y de nuevo, eso es para fines matemáticos tener un derivado significativo real ahí para trabajar con , para que eso pueda proporcionar una convergencia aún mejor. También es algo llamado rela ruidosa, que también puede ayudar con la convergencia. Pero, ah, estos días te grita. La unidad lineal exponencial a menudo producirá un aprendizaje más rápido. Eso es una especie de la Está ganando popularidad ahora que el recurso informático es el aire cada vez menos de una preocupación ahora que en realidad se puede hacer deep learning a través de un clúster de PCs en red en la nube. Entonces de eso se trata las funciones de activación. También puedes elegir diferentes funciones de optimización. Ya sabes, hemos hablado en términos muy generales sobre Grady y disidencia, pero hay varias variaciones de Grady en algo que también puedes usar. Hablamos un poco antes sobre la optimización de mo mentum. Básicamente, la idea que hay de acelerar las cosas es que vas bajando una colina y frenando las cosas a medida empiezas a acercarte a ese mínimo. Entonces es una forma de hacer que la rejilla a enviar sucediera más rápido por tipo de saltar sobre esas partes más pronunciadas de tu curva de aprendizaje. Bueno, nunca
usé la curva de aprendizaje de palabras en el contexto. Palabra en realidad significa algo matemáticamente significativo. Pero de todos modos, también
hay algo llamado el Nesterov aceleró Grady en, que es solo un retoque en la cima de la optimización del impulso. Básicamente, es mirar hacia adelante un poco a la Grady y frente a ti tomar
en cuenta esa información . Para que eso funcione aún mejor. También hay algo llamado prop RMS, que es solo usar una tasa de aprendizaje adaptativa que de nuevo ayuda a apuntarte en la
dirección correcta hacia el mínimo. Recuerda volver a cómo funciona el saludo a enviado. No siempre es obvio en qué dirección vas a estar dirigiendo, dado un cambio en los parámetros. Por lo que nuestro desorden apuntala es solo una forma más sofisticada de tratar de averiguar la
dirección correcta . Por último, hay algo llamado Adam significa esten de momento adaptativo. Básicamente, es el optimizador Mo mentum y RMS prop combinado tipo de te da lo mejor de ambos mundos, y esa es una opción popular hoy en día porque funciona muy bien. Es muy fácil volver a usar las librerías que vas a usar para este material para un
nivel muy alto y muy fácil de usar. Entonces no es que vas a tener que implementar el duelo acelerado de Nesterov desde cero . Simplemente vas a decir que optimizador es igual a Adam y se acabe con él. Ya sabes, es solo cuestión de elegir el que tenga sentido para lo que estás tratando de hacer. Haga sus propias compensaciones entre velocidad de ah, convergencia y recursos computacionales y el tiempo requerido para realmente hacer esa Convergencia. Hablemos de más de encajar también. Puedes ver que a menudo terminas con patrones como este donde sabes que realmente no estás obteniendo una solución limpia. Ya sabes, como estos picos extraños a veces y a veces si dejas que las cosas pasen un poco demasiado tiempo , termina reforzando esos picos. Ya sabes, esas sobre áreas ajustadas donde realmente no estás ajustada al patrón que estás buscando. Simplemente estás ajustando a los datos de entrenamiento que te dieron. De acuerdo, entonces hay formas de combatir eso. Y obviamente, si tienes miles de pesos por afinar, sabes que esas conexiones entre cada neurona y cada capa de tus neuronas pueden sumar realmente rápidamente. Por lo que es muy fácil para que pase el dedo del pie más ajustada. Hay formas de lidiar con ello cuando se llama parada temprana. Entonces, tan pronto como veas que el rendimiento empieza a caer, eso podría ser de una manera trice de decirte que podría ser hora de que dejes de aprender . Ya sabes, a estas alturas, tal vez estás poco más de ajuste. También hay términos de regularización. Se puede agregar a la función de costo durante el entrenamiento. Ya sabes que a eso le puede gustar básicamente el giro de sesgo del que hablamos antes que podría
ayudar . Pero una técnica sorprendentemente efectiva se llama deserción, y un Kennison es un ejemplo de una idea muy simple que es muy efectiva. La idea es simplemente ignorar, digamos, la
mitad de las neuronas al azar cada paso de entrenamiento, pretender que no lo existen todo. Y la razón por la que esto funciona es porque obliga a tu modelo a difundir su aprendizaje. Si básicamente te estás quitando la mitad de su cerebro, si lo harás en cada paso de entrenamiento vas a obligar a la mitad restante de esas neuronas a hacer tanto trabajo como sea posible. Por lo que esto evita que las cosas donde tienes neuronas individuales asuman más del trabajo del que deberían. Incluso viste en algunos de los ejemplos que corrimos en el patio de recreo Tensorflow, que a veces no lo hacemos con neuronas que apenas se usaban todo, y al usar la gota que habría obligado a esa neurona a ser para haber sido utilizada más de manera efectiva. Concepto tan muy sencillo muy efectivo para asegurarte de que estás haciendo pleno uso de tu red
neuronal. Hablemos de afinar tu topología otra forma de mejorar los resultados de tu red de deep learning es simplemente jugar juegos con cuántas neuronas tienes y cuántas capas de neuronas tienes. Una forma de lidiar con ello es sólo el juicio y el error. Ya sabes, es una especie de lo que hicimos en Tensorflow Playground, pero ya sabes, puede
haber una metodología para eso. E incluso se puede empezar con la estrategia de evaluar una red más pequeña con menos neuronas en las capas ocultas, donde se puede evaluar una red más grande con más capas. Entonces, básicamente, quieres ver. ¿ Puedo salirme con una red más pequeña y aún así obtener buenos resultados y simplemente seguir haciéndola cada vez más pequeña hasta que encuentres la más pequeña, puede ser segura, o puedes tratar de hacer tu red más grande y más grande y ver que sabes en qué punto deja brindarte más beneficios. Entonces, ya
sabes, solo empieza a dimensionar las cosas de manera diferente y ve qué funciona y qué no otra vez. Hay una especie de aspecto espeluznante cómo todo esto funciona en conjunto. Es muy difícil entender intuitivamente lo que está pasando dentro de una red neuronal,
una red de aprendizaje profundo en particular, por lo que a veces solo tienes dedo del pie. Usa tu intuición para tratar de afinar la cosa y llegar al número correcto de recurso es que necesitas también,ya
sabes, ya
sabes, nuevo en los modernos entornos informáticos de hoy en día. A veces realmente no te importa tanto. Probablemente está bien. dedo del pie tiene una red neuronal profunda que tiene más neuronas que realmente necesita, ¿
verdad? Es decir, ¿cuál es el verdadero caro que implica eso en estos días? Probablemente no mucho. Diré que más capas a menudo rendirán un aprendizaje más rápido que tener más neuronas y menos capas. Entonces, si te importa la velocidad de convergencia, agregar más capas suele ser lo correcto. O también puedes usar algo llamado zoos modelo. En realidad hay bibliotecas por ahí de red neuronal para disculparse por problemas específicos . Entonces si no crees que eres la primera persona en el mundo en resolver un problema de
clasificaciones específico o cualquier otra cosa, estás tratando de aplicar una red neuronal profunda para tal vez deberías revisar una. Los modelos rezuman por ahí para ver si alguien ya ha descubierto la topología óptima para ti tratando de lograr en lugar de intentar reinventar la rueda. De acuerdo, gente comparte estas cosas por una razón, y te puede ahorrar mucho tiempo. Para que eso sea suficiente teoría. Ya basta con hablar. En nuestra próxima conferencia, nos ensuciaremos las manos con tensorflow y empezaremos a escribir algún código python real para implementar nuestras propias redes neuronales.
6. Introducción a la tensorflow: Si has hecho alguna investigación previa en deep learning, probablemente
hayas oído hablar de la biblioteca TensorFlow. Se trata de un marco muy popular desarrollado por la gente de Google. Y han sido lo suficientemente amables de hacerlo de código abierto y libremente disponible para el mundo. Entonces hablemos de qué se trata TensorFlow y cómo puede ayudarte a construir redes neuronales artificiales. Lo que tipo de me tomó por sorpresa cuando me encontré por primera vez con TensorFlow fue que realmente no estaba construido a propósito para el aprendizaje profundo al principio, o incluso para las redes neuronales en general. Se trata de una herramienta de propósito mucho más general que Google desarrolló que simplemente resulta ser útil para desarrollar deep learning y redes neuronales. De manera más general, se trata de una arquitectura para ejecutar un gráfico de operaciones numéricas. No se trata sólo de redes neuronales. Se puede tener cualquier secuencia de operaciones y definir un gráfico de cómo encajan esas operaciones. Lo que realmente hace TensorFlow es averiguar cómo distribuir ese procesamiento a través los diversos núcleos de GPU de su PC o a través de varias máquinas en una red. Y asegúrate de que puedes hacer problemas informáticos masivos de manera distribuida. En ese sentido, suena mucho a Apache Spark. Si me has tomado otros cursos, probablemente me hayas escuchado hablar de Spark. Es una tecnología muy emocionante. Y Spark también está desarrollando capacidades de aprendizaje automático e inteligencia artificial y aprendizaje profundo propias. Por lo que de alguna manera, tensorflow es un competidor de Apache Spark. Pero hay algunas diferencias clave de las que debemos hablar. No se trata solo de distribuir gráficos de cómputación a través de un clúster o a través de tu GPU. También puedes ejecutar TensorFlow en casi cualquier cosa. Entonces una cosa que es especial de TensorFlow es que incluso puedo ejecutarlo en mi teléfono si quiero. No se limita a ejecutarse en computadoras de un clúster en algún centro de datos. Eso es importante porque en el mundo real es posible que desee empujar ese procesamiento hasta el dispositivo del usuario final. Tomemos el ejemplo de un auto autoconducido. No querrías que tu auto se estrellara repentinamente contra una pared sólo porque perdió su conexión de red con la Nube. ¿ Ahora lo harías? La forma en que realmente funciona es que podrías empujar la red neuronal entrenada real hacia abajo al
propio auto y ejecutar en realidad esa red neuronal en la computadora que está corriendo incrustada dentro de tu auto. Porque el levantamiento pesado del deep-learning es capacitar a esa red. puedas hacer ese entrenamiento fuera de línea, empujar los pesos de esa red hacia abajo a tu auto, que es relativamente pequeño. Y luego ejecuta esa red neuronal completamente dentro de tu propio auto. Al poder ejecutar TensorFlow y una variedad de dispositivos, abre muchas posibilidades sobre realmente hacer deep learning en el borde, en los dispositivos reales en los que intentas usarlo. Tensorflow está escrito en C plus bajo el capó, mientras que Spark está escrito en Scala, que en última instancia corre encima de una JVM al bajar al nivel C Plus Plus con TensorFlow, eso te va a dar mayor eficiencia. Pero al mismo tiempo tiene una interfaz de Python. Por lo que puedes hablar con ella igual que lo harías cualquier otra biblioteca de Python que hace que sea fácil de programar y fácil de usar como desarrollador, pero muy eficiente y muy rápido bajo el capó. La otra diferencia clave entre TensorFlow y algo así como Spark es que puede funcionar en GPU. Una GPU es solo tu tarjeta de video, la misma tarjeta de video que estás usando para jugar a Fortnite o lo que sea que juegues. En realidad puedes distribuir el trabajo a través de los núcleos de GPU de tu PC. Y es una configuración muy común incluso tener múltiples tarjetas de video en un solo equipo y en realidad usar eso para obtener más rendimiento en clústeres que están diseñados especialmente para el aprendizaje profundo. Además TensorFlow es gratuito y está hecho por Google. Apenas el hecho de que lo haga Google ha llevado a mucha adopción. Hay bibliotecas competidoras por ahí a TensorFlow, notablemente Apache MXNet. Tensorflow a partir de ahora sigue siendo con mucho el más popular. Instalar TensorFlow es realmente fácil. Todo lo que tienes que hacer es utilizar los comandos de Conda en tu entorno Anaconda para instalar TensorFlow. O bien puedes usar Anaconda Navigator para hacerlo todo a través de una interfaz gráfica de usuario. También hay un paquete de GPU de tablero TensorFlow que puedes instalar en su lugar si quieres aprovechar la aceleración de GPU, si estás ejecutando esto en Windows, yo no iría por ahí todavía. He tenido algunos problemas para conseguir que TensorFlow GPU funcione en mi propio sistema Windows. Encontrarás que muchas de estas tecnologías se desarrollan principalmente para sistemas Linux que se ejecutan en un clúster. Entonces, si estás corriendo en una computadora diseñada especialmente en un clúster en EC2 o algo que esté hecho para el aprendizaje profundo. Adelante e instala TensorFlow dash GPU, aunque probablemente se vaya a instalar para ti Todo listo. Hablemos de lo que se trata TensorFlow. ¿ Qué es un tensor de todos modos? Bueno, este es otro ejemplo de terminología pretenciosa de
fantasía que la gente usa para hacerse lucir inteligentes. Al final del día, un tensor es sólo un nombre elegante para una matriz o una matriz de valores. Es solo una colección estructurada de números y eso es todo. Eso es todo un tensor es. Usando. Tensorflow puede ser un poco contra-intuitivo, pero es similar a cómo funcionaría algo como Apache Spark también. En realidad no ejecutas las cosas de inmediato. En cambio, construyes una gráfica de cómo quieres que las cosas se ejecuten. Y luego cuando estés listo para ejecutarlo,
dices, vale, TensorFlow ve a hacer esto. Entonces Tensorflow irá y descubrirá la forma óptima de distribuir y paralelizar
que funcionan a través de todo tu conjunto de GPU y computadoras de tu clúster. Entonces echemos un vistazo aquí a la aplicación TensorFlow más simple del mundo en Python. Todo esto va a hacer es sumar uno más dos juntos. Pero es un buen ejemplo ilustrado de lo que realmente está pasando bajo el capó. Empezamos importando la biblioteca TensorFlow. Vamos a referirnos a ella como tf como una taquigrafía. Empezaremos diciendo un igual a tf variable punto un nombre de coma es igual a. Y todo lo que está haciendo es configurar una variable en TensorFlow, un objeto variable que contiene un solo valor uno y que va por el nombre de a. Y todo lo que está haciendo es configurar una variable en TensorFlow,
un objeto variable que contiene un solo valor uno y que va por el nombre de a.
es lo que aparecerá en las herramientas de
visualización para tu gráfica si estás usando ese tipo de cosas. Pero internamente también asignará eso a una variable en Python llamada a.Entonces configuramos una variable B que se asigna al valor dos y se le da el nombre B. Aquí es donde comienza a suceder la magia. Decimos que F es igual a un más b. Y se podría pensar que eso pondrá el número tres en la variable f, pero no lo hace. F es en realidad tu gráfica. Es la conexión que estás construyendo entre los tensores a y b para agregarlos juntos. Entonces f igual a un plus b no hace nada excepto establecer esa relación entre a y B y su dependencia juntos en esa gráfica f que estás creando. En realidad no pasa nada hasta que intentamos acceder al valor de f, en el que puntos TensorFlow 2 usa algo llamado
ejecución ansiosa para ejecutar realmente esa gráfica en ese punto, dirá, vale, necesito crear una gráfica que tome la a variable que contiene uno y la variable B que contiene dos y los suman juntos. Descubrirá cómo distribuir esa operación increíblemente complicada. Estoy siendo sarcástico, a través de todo tu clúster. Y eso finalmente imprimirá el valor tres en forma de un nuevo tensor. Por lo que acabamos de crear la forma más complicada imaginable de computar uno más dos. Pero si estos fueran tensores más grandes que trataran con conjuntos de datos más grandes o por ejemplo, una enorme matriz o una matriz de pesos en una red neuronal, esa distribución del trabajo se vuelve importante. Entonces aunque agregar 1 más 2 no es un ejercicio útil que ver con el TensorFlow. Una vez que escalas esto hasta las
muchas, muchas conexiones en una gran red neuronal, se vuelve muy importante poder distribuir estas cosas de manera efectiva. Entonces, ¿cómo extendemos esta idea a las redes neuronales? Bueno, lo que pasa con TensorFlow es que no solo está hecho para redes neuronales, puede hacer cosas como la multiplicación de matrices. Y resulta que se puede pensar en aplicar todos los diferentes pesos y sumas que sucedieron dentro una sola capa de un perceptrón y modelo que es sólo una multiplicación matricial. Simplemente puedes tomar la salida de la capa anterior en tu perceptrón multicapa y hacer una multiplicación matricial con una matriz que describa los pesos entre cada neurona de las dos capas que estás computando. Entonces se puede agregar en un vector que contenga los términos de sesgo también. Entonces al final del día, puedes modificar este diagrama de fantasía aquí de cómo se ve
un perceptrón y simplemente modelarlo como una multiplicación matricial en adición vectorial. Vuelve atrás y lee tu álgebra lineal si
quieres saber más sobre cómo funciona eso matemáticamente. Pero esto es sólo una operación de multiplicación de matriz sencilla con la adición vectorial al final para los términos de sesgo. Al usar las API de nivel inferior de TensorFlow. Estamos haciendo esto de la manera difícil, pero hay API de mayor nivel en TensorFlow que hacen que sea mucho más simple e intuitivo
definir redes neuronales profundas ya que estamos describiendo TensorFlow a un nivel bajo en este momento, su propósito en la vida es sólo distribuir las operaciones
matemáticas sobre grupos de números son tensores. Y nos toca a nosotros describir lo que estamos tratando de hacer en términos matemáticos. Resulta que realmente no es tan difícil de hacer con la red neuronal para nosotros calcular realmente una red de deep learning completa de extremo a extremo. Hay más en ello que simplemente calcular los pesos entre las diferentes capas de neuronas. Tenemos que entrenar realmente esta cosa de alguna manera y en realidad ejecutarla cuando hayamos terminado. Por lo que lo primero que tenemos que hacer es cargar los datos de entrenamiento que contienen las características en las que queremos entrenar y las etiquetas objetivo. Para entrenar una red neuronal, necesitas tener un conjunto de entradas conocidas con un conjunto de respuestas correctas
conocidas que puedas usar para descender realmente, converger en la solución correcta de pesos que conducen al comportamiento que deseas. Después de eso, necesitamos asociar algún tipo de optimizador a la red. Tensorflow hace que sea muy fácil de hacer. Puede ser descenso gradiente o alguna variación de los mismos como átomo. Posteriormente ejecutaremos nuestro optimizador usando nuestros datos de entrenamiento. Y de nuevo, tensorflow hace que eso sea bastante fácil de hacer también. Por último, evaluaremos los resultados de nuestra red de capacitación utilizando nuestro conjunto de datos de pruebas. Para recapitular a un alto nivel, vamos a crear una topología de red dada y encajar los datos de entrenamiento usando descenso de
gradiente para converger realmente en los pesos óptimos entre cada neurona en nuestra red. Cuando hayamos terminado, podemos evaluar el rendimiento de esta red utilizando un conjunto de datos de prueba que nunca se ha visto antes y ver si puede clasificar
correctamente esos datos en los que no se entrenó. Una otra. Gotcha. Cuando estás usando redes neuronales, es muy importante asegurarte de que tus datos de entrada estén normalizados, lo que significa que todo está escalado al mismo rango. En términos generales, desea asegurarse de que sus datos de entrada
tengan un valor medio de 0 y varianza de unidad. Esa es solo la mejor manera de hacer que las diversas funciones de activación funcionen matemáticamente. Lo que es realmente importante es que tus características de entrada son comparables en términos de magnitud. De lo contrario es difícil combinar esos pesos juntos de una manera significativa. Tus entradas están todas al mismo nivel en la parte inferior de tu red neuronal y encajando en esa capa inferior, es importante que sean comparables en términos de magnitudes. Para que no termines sesgando las cosas en esperar cosas de formas extrañas. Por ejemplo, si ya creé una red neuronal que trate de clasificar a las personas en función de su edad y sus ingresos. La edad podría oscilar entre 0 y 100, pero los ingresos podrían oscilar entre 0 y 1 millón. Esos son rangos salvajemente diferentes. Por lo que esos van a llevar a problemas matemáticos reales que no están escalados al rango correcto al principio. Afortunadamente, la biblioteca de Python scikit-learn tiene un paquete escalador estándar que puedes usar que automáticamente lo hará con una sola línea de código. Todo lo que tienes que hacer es recordar usarlo. Y muchos conjuntos de datos que utilizamos mientras investigamos se normalizarán para empezar. Uno que estamos a punto de usar el suyo ya normalizado, así que en realidad no tenemos que hacer eso. Pero más adelante en el curso, te
mostraré un ejemplo de usar realmente escalar estándar. Hemos hablado de cómo funciona todo esto a un nivel bajo. Y en TensorFlow 2, todavía es posible
implementar una red neuronal completa básicamente desde cero. Pero en TensorFlow 2, han reemplazado gran parte de esa funcionalidad de bajo nivel por una API de mayor nivel llamada Keras. Hay valor en entender cómo funciona todo bajo el capó primero. Entonces vamos a trabajar a través de un simple ejemplo de una red neuronal usando las API de nivel inferior. A continuación, después de eso, veremos cómo la API de Keras simplifica las configuraciones de redes neuronales comunes y alza mucha de esta complejidad de ti.
7. Usar Tensorflow para el reconocimiento de la escritura a mano, parte 1: De acuerdo, así que juguemos con tensorflow usando su AP de nivel inferior, I Así obtienes más de una apreciación ah de lo que está pasando bajo el capó, si se quiere. En Windows empezará yendo a nuestro menú Inicio y encontrando al grupo Anaconda tres. Y a partir de ahí, abre tu anaconda. Piensa en la caballa en X, claro, solo
abrirás una terminal, lo que
provoca que serás bueno. Lo primero que quieres hacer es asegurarte de que realmente has instalado tensorflow en sí mismo . Entonces si aún no te has encargado de eso, solo
puedes decir que Kanda instala tensorflow. Y ya lo he hecho así que en realidad no va a hacer nada por mí. Pero si necesitas instalarlo o actualizarlo, eso te impulsará a hacerlo. Dale a eso un segundo solo para revisar todo bien, parece que estamos bien. Siguiente. ¿ Quieres ver el en el directorio donde instalaste los materiales del curso? Entonces para mí, eso va a ser CD C colon,
barra inversa, ml curso, ml curso, y desde dentro del tipo directorio de materiales del curso en Júpiter con un cuaderno de mentiras. Debería traer tu navegador web favorito desde aquí encontrar el cuaderno Tensorflow y
seguir adelante y abrir eso y empecemos a jugar, así que empezaremos ejecutando la aplicación tensorflow más simple del mundo que miramos en el diapositivas solo iban a sumar los números uno más dos Juntos usando tensorflow, comenzamos importando la propia biblioteca Tensorflow y le daremos el nombre. TF, como taquigrafía, creará dos variables en tensorflow una llamada AM uno llamada Be the Variable A
tendrá el número uno asociado a él, y la variable B se inicializará con el número dos. Entonces decimos que F es igual a un plus. B, que no pone el número tres en F f solo representa la gráfica que estamos definiendo . Eso dice F, representa la adición de lo que esté en A y B juntos. Entonces nada ha pasado aquí, en realidad, excepto por construir esa gráfica. Es sólo cuando decimos TF dot print buscando la salida de F que Tensorflow utilizará lo que se llama ejecución ansiosa para desconectarse y realmente ejecutar esa gráfica y evaluar sus resultados. Entonces en ese punto, se apaga y dice:
Vale, Vale, tenemos esta nave construida de A y B A contiene una. B contiene dos. Asumémoslos juntos y obtengamos la salida de la gráfica F e imprimamos eso. Y en realidad podría distribuir eso a través de todo un clúster si tuviera que hacerlo. Pero obviamente por solo agregar uno más dos, no
hay necesidad de todo eso. Pero vamos a ver si funciona. Adelante y toca turno entrar dentro de esa cuadra después de hacer clic dentro de ella, y deberíamos conseguir el número tres. Suficiente para algunos de los tres de la NBA. Oye, funciona. Entonces hagamos algo un poco más interesante. Hagamos realmente reconocimiento de escritura a mano usando tensorflow. Este es un ejemplo bastante común para usar cuando la gente está aprendiendo tensorflow. Básicamente, se trata de un conjunto de datos de 70 mil muestras de escritura a mano donde cada muestra representa
a alguien tratando de dibujar los números del cero al nueve. Por lo que tenemos 70 mil imágenes que son 28 por 28 imágenes de personas dibujando el número cero a nueve. Y nuestro reto es crear una red neuronal que mire esas imágenes e intente averiguar qué número representan. Ahora bien, este es un ejemplo muy común cuando la gente está aprendiendo tensorflow tal vez un poco demasiado común. Pero hay una buena razón para eso. Está integrado en tensorflow. Es fácil envolver la cabeza. Es realmente bueno para aprender. Y nuestro pequeño giro en él, que no vas a ver en muchos otros lugares, realidad
está usando ojos AP de nivel inferior para implementar esta red neuronal para empezar. Entonces, vamos a sumergirnos aquí. Entonces vamos a caminar por realmente cargando estos datos y convirtiéndolos al formato que
necesitamos . El primero que vamos a hacer es importar las bibliotecas que necesitamos,
y vamos a estar usando tarta numb y también tensorflow en sí mismo y el M. Este conjunto de datos en sí es parte de flujos tensores llevar paquete de conjuntos de datos de stock por lo que solo
importamos eso derecho en y tener esos datos accesibles para nosotros definirá algunas variables convenientes. Aquí. Clases numéricas es 10 que representa el número total de clasificaciones para cada una de estas imágenes. Entonces de nuevo, estos pueden representar los números del cero al nueve, y eso es un total de 10 clasificaciones posibles. Nuestras características son 784 en número, y lo obtenemos diciendo que cada imagen es una imagen de 28 por 28, correcto, lo que tenemos 28 veces 28 que es 784 píxeles individuales por cada imagen de entrenamiento que tenemos . Por lo que nuestras características de entrenamiento son cada píxel individual de cada imagen individual que estamos utilizando para entrenar nuestra red neuronal. Empecemos cargando el conjunto de datos en sí por lo que diremos y Mr on load data para
recuperar realmente esos datos de TENSORFLOW. Y pondremos aquí el conjunto de datos resultante en estas variables. Por lo que la convención de que usualmente usamos ese verso extra se refiere a sus datos de características. Esta es tu, ah, en nuestro caso, las propias imágenes. ¿ Y por qué se refiere a tus etiquetas? Por lo que esto representará si esa imagen representa los números del cero al nueve. Además, dividimos las cosas en conjuntos de datos de capacitación y pruebas. Entonces con amnistía, tenemos 60 mil muestras de capacitación y 10 mil muestras de prueba. Eso significa que sólo vamos a entrenar a nuestra red neuronal usando ese conjunto de 60 mil muestras de entrenamiento y estábamos sosteniendo un lado de 10 mil muestras de prueba para que realmente podamos probar qué tan bien están entrenados funciona red en datos que nunca antes se ha visto. Es así como evitamos el sobreajuste. En realidad evaluamos nuestro modelo en base a datos que el modelo nunca había visto antes, por lo que no tuvo oportunidad de sobreencajar en esos datos para empezar. A continuación, necesitamos convertir esto a valores de punto flotante de 32 bits, porque eso es lo que espera Tensorflow. Entonces comenzamos por crear estos rayos de pira entumecidos de los datos de entrenamiento y prueba subyacentes y convertir eso para terminar orinado bajos 32 tipos de datos. Después aplanamos esas imágenes hacia abajo para que llegue como imágenes bidimensionales de 28 por 28. Y hay formas de construir redes neuronales. Puedo lidiar con datos bidimensionales. Llegaremos allí. Pero por ahora vamos a mantener las cosas simples y simplemente tratar. Cada imagen es una matriz unidimensional o vector o tensor, si se quiere, De Senador en 84 cuenta con 184 píxeles. En este caso, el comando rehape es lo que hace eso Así que al decir remodelar negativo uno entumecido cuenta con algunas características. De nuevo, son 784 los que van a aplanar estos rayos bidimensionales hasta un 784 10
sirs unidimensionales . Entonces eso va a tener un nuevo tren X y una nueva prueba X que pueda que contenga estos sensores de
una dimensión de 784 píxeles . A continuación, necesitamos normalizar nuestros datos. Hablamos de eso en las diapositivas también. Por lo que los datos brutos que vienen de este conjunto de datos tienen todos los representantes de píxeles y el
valor entero entre cero y 2 55 cero representa un píxel negro 255 representa un píxel blanco, y los valores en el medio representan varios tonos de gris. Tenemos que escalar eso hasta el rango de 0 a 1. Entonces para hacer eso, manera
muy simple, solo dividimos todo por 2 55 ya terminamos. Está bien. Por lo que hemos preparado y fregado y limpiado nuestros datos aquí. Hagamos en realidad algunas cosas más con él. Empecemos por envolver nuestras cabezas en torno a cómo se ven estos datos. Por lo que siempre es una buena idea especie de visualizar tus datos
con los que vas a estar entrenando y entender sus peculiaridades y matices antes de que realmente intentes implementar un algoritmo. Eso es lo que estamos haciendo en esta función de muestra de visualización aquí. Nos va a llevar entrada. Un número específico de una muestra a partir de nuestros datos de capacitación que queremos ver, y solo extraeremos la etiqueta de la misma. Entonces, ¿por qué entrenar otra vez? ¿ Las etiquetas de entrenamiento son el número cero a nueve que representa esa imagen? Y luego reconfiguraremos eso a una bidimensional de 28 por 28 minutos para que realmente podamos mostrarlo en la pantalla. Le daremos un título, demostraremos que las imágenes bidimensionales gran escala y solo lo mostraremos. Entonces sigamos adelante y pateemos eso. En realidad no arrancó este mercado anterior con, ¿verdad? Entonces antes de que nos olvidemos, vuelve a subir a este bloque donde preparamos nuestros datos y cambiamos enter para ejecutar eso. Y ahora que lo hemos hecho, en realidad
podríamos visualizar esos datos que hemos cargado Click abajo aquí y desplazar Enter. Y aquí hay un punto de conjunto de datos de muestra. Entonces el número de muestra 1000 es esta imagen de aquí, y podemos ver que se supone que representa el número cero y, bueno, parece un cero. Entonces esto no es uno particularmente desafiante para que aprendamos. Ojalá, pudieras jugar por aquí. Pruebe diferentes números de muestra es para tener una mejor idea de cómo es el estado. Entonces probemos 1500. Resulta que ese es el número nueve, um, un
poco raro de aspecto nueve, así que eso podría ser un poco de reto. Qué tal, no
sé, 1700. Ese es el uno. Parece uno. Pero si sigues, ya
sabes, metiendo por aquí y probando diferentes valores, eventualmente encontrarás algunos raros. Por ejemplo, ese es un aspecto bastante divertido. Pero ya sabes, puedes ver que hay una amplia variedad de capacidades de escritura a mano de personas que hicieron estos
datos de prueba . Entonces esa es una buena manera de envolverte la cabeza alrededor de lo que estamos tratando. Pasando adelante. Podríamos llevar esta visualización al siguiente paso y realmente visualizar esos rayos
unidimensionales que realmente estaban entrenando nuestra red neuronal. Entonces esto nos dará una mejor imagen de la entrada que nuestra red neuronal va a ver y una especie de hacer que apreciemos justo lo que está pasando aquí y lo diferente que así lo piensa, ah, cita uncomillas. Lo que vamos a hacer aquí es volver a dar forma a todo hacia abajo a matrices unidimensionales de 784 píxeles. Toma esto en uno de nuestros conjuntos de datos de entrenamiento aquí, y vamos a comer a través de las 1. 500 muestras y podemos capitanear ocho cada
imagen individual a esa imagen original ahí de cero. Entonces no lo estamos. Toma básicamente las primeras 500 imágenes de entrenamiento, aplanarlas hasta matrices unidimensionales de viaje central para valores de epístola, y luego combina eso todo en una sola imagen bidimensional que trazará. Sigamos adelante y pinchemos en eso y cambiemos de entrada para ejecutarlo. Y esto es interesante. Entonces esto te está mostrando la entrada que está entrando en nuestra red neuronal real para cada imagen
individual para las 1 ª 500 imágenes, y puedes ver que tu cerebro no hace un muy buen trabajo en absoluto de averiguar qué estas cosas representar, ¿verdad? Por lo que cada fila de esta imagen representa los datos de entrada que van a nuestra red neuronal. Por lo que nuestra red neuronal va a poder tomar cada una de esas filas de datos
unidimensionales y tratar de averiguar qué número representa en el espacio bidimensional para que veas que es pensar en el mundo o percibir el mundo. Recibir estas imágenes más específicamente de una manera muy diferente a la que hace tu propio cerebro. Entonces ya sabes, a veces
es una suposición peligrosa pensar que las redes neuronales funcionan de la misma manera que lo hace tu cerebro. Están inspirados en tu cerebro, pero no siempre funcionan de la misma manera. Distinción tan importante ahí. Muy bien, en realidad
empecemos a configurar nuestra red neuronal así que empezaremos definiendo algunos parámetros o hiper parámetros, si se quiere, que definieron cómo van a funcionar realmente el entrenamiento. El índice de aprendizaje es básicamente lo rápido que descenderá por Grady y disidencia en
tratar de encontrar los valores otoñales. El óptimo espera para nuestros pasos de entrenamiento de red neuronal es básicamente cuántos entrenamientos en Box realmente conducirán cuántas veces realmente se repasarán e iterando sobre
toda esta red neuronal tratando de entrenarlo tamaños de murciélagos. Cuántas muestras aleatorias tomarán de nuestros datos de entrenamiento durante cada paso y desplazados hacia arriba es exactamente con qué frecuencia mostrará nuestro progreso mientras entrenamos esta red neuronal y subrayamos Oculto representa cuántas neuronas ocultas tendrán en nuestra capa oculta para que la
capa media de neuronas y nuestra red neuronal tengan 512 neuronas dentro de ella. Y se puede jugar con ese número. Vea qué número funciona mejor para usted. Estos son todos hiper parámetros, y el pequeño secreto sucio del aprendizaje automático es que Ah, mucho de tu éxito depende de lo bien que puedas adivinar los mejores valores para estos. Mucho es solo ensayo y error,
tratando de encontrar el valor correcto de la tasa de aprendizaje, el número correcto de neuronas ocultas. Estos números se determinan básicamente a través de la experimentación. Entonces, ya
sabes, no
es del todo la ciencia exacta que podrías pensar que es ISS. Adelante y ejecutemos ese turno de bloque. Entrar. Y también vamos a rebanar aún más nuestro conjunto de datos aquí y prepararlo más para capacitar al usuario tensorflow. Por lo que vamos a utilizar ah TFT conjunto de datos obsoletos para crear lo que se llama un
objeto de conjunto de datos dentro de tensorflow a partir de nuestras imágenes de entrenamiento y etiquetas de entrenamiento. Entonces usaremos ese conjunto de datos para crear nuestros lotes individuales con los que usamos para entrenar la red
neuronal. Por lo que barajar 60,000 significa que voy a barajar todas las 60.000 imágenes de entrenamiento que acabo barajar
aleatoriamente todas. Entonces los repartiré en lotes de 250 pre buscar el 1er lote. Entonces tengo eso listo para ir. Eso es todo lo que está pasando aquí. Turno Entrar. Muy bien, ahora vamos a empezar a construir realmente nuestra red neuronal misma empezará por crear las variables que almacenarán los pesos y términos sesgados para cada capa de nuestra red
neuronal. Entonces empezamos por,
ah, ah, inicializando todas las variables con variables aleatorias solo para asegurarnos de que tenemos un conjunto de ajustes aleatorios iniciales ahí para nuestros pesos. Queremos empezar con algo, y por falta de algo mejor empezaremos con valores aleatorios. En realidad, su elección de valores de inicialización ah puede marcar una gran diferencia en cómo funcionan sus
redes neuronales . Por lo que vale la pena mirar cómo elegir los valores iniciales correctos Para un determinado tipo de red
neuronal. Configuramos aquí nuestros pesos para la capa oculta, llamaremos a esos pesos H y usaremos nuestra función aleatoria, normal que acabamos de definir aquí. Para inicializar esos pesos de forma aleatoria y oculta como se podría recordar de nuevo, es volvamos a mirar aquí arriba otra vez. Cinco años 12. Por lo que esto creará 512 variables que contenían los pesos para las neuronas ocultas. También necesitamos un conjunto de pesos en nuestra capa de salida de 10 neuronas de salida. Por lo que la salida va a ser de 10 neuronas donde cada neurona representa la probabilidad de que eso sea que dadas las clasificaciones de cero a nueve, también
necesitamos tener sesgos asociados con ambas capas, Así será el conjunto de sesgos con nuestra capa oculta. Nuevamente, habrá de 5 a 12 de esos. Y también tenemos sesgos asociados con su capa de salida de neuronas tenor en la
capa de salida también. Estos serán ceros inicializados. De acuerdo, así que un poco diferente ahí para los sesgos Por defecto. Queremos que nuestros sesgos sean cero. Adelante y ejecutemos eso. Muy bien, adelante.
8. Uso de Tensorflow para el reconocimiento de la escritura a mano, parte 2: Ahora vamos a montar la topología de nuestra propia red neuronal. Entonces eso es lo que hace aquí la red neuronal. Y como dijimos en las diapositivas, se pueden
definir estas redes neuronales de fantasía es simplemente matriz simple, funciones de
multiplicación y adición
aquí, ¿no? Entonces empezaremos diciendo TF dot matt Mole. Eso es solo una multiplicación matricial de nuestras neuronas de entrada, que son los valores brutos de 784 píxeles con los 512 pesos en nuestra capa oculta de neuronas ahí para que la multiplicación matricial se esté multiplicando cada uno de esos valores de entrada por los pesos en esa capa oculta. Entonces decimos TF dot add to add to add in the sesased terms, que nuevamente se almacenan en la variable B que acabamos de definir arriba. De acuerdo, continuación, a
continuación,
necesitamos aplicar una función sigmoide a la salida de esa capa oculta. Entonces esa es básicamente la función de activación en cada oculto o en Ok, eso es todo lo que está pasando. Son muy simples. La capa de salida lo volverá a hacer, así que diremos, haz una multiplicación matricial con nuestros pesos de salida
y la capa oculta, y luego agregaremos esos sesgos de salida al final también, y llamaremos soft Max a en realidad normalizar esas neuronas de salida a una probabilidad final de cada clasificación individual. Tan suave max otra vez. Es sólo un truco matemático para tomar las salidas de estas redes neuronales y convertir esos valores de neuronas de salida a lo que podemos interpretar como una probabilidad de cada clasificación
individual que esas neuronas representan ser correctas. Adelante y ejecuta eso. Y eso también es rápido. Nuevamente recuerda, todo lo que estamos haciendo es definir nuestra gráfica. En este punto, realidad no
estamos entrenando nada ni corriendo nada todavía, pero sí, ¿Te tomas el tiempo para fideos en eso? Básicamente hemos construido la disculpa de la propia red neuronal. Lo siguiente que no necesitábamos hacer es averiguar cómo entrenar realmente esta red neuronal , ¿
verdad? Entonces de nuevo, estamos haciendo esto de la manera difícil, así que tenemos que escribir esto a mano. Empezaremos definiendo nuestra función de pérdida y su llamada entropía cruzada. Básicamente, es una forma de hacer Grady y el disenso está suministrando una escala arrítmica log, y eso tiene el efecto de penalizar clasificaciones incorrectas mucho más que las que están cerca de la respuesta correcta. Eso es ah, propiedad
práctica para hacer que el entrenamiento vaya rápido. Entonces dentro de esta función va a pasar a las cosas. ¿ Por qué? Pred son los valores pronosticados que están saliendo de nuestra red neuronal y por qué verdaderos son los verdaderos sellos
conocidos que se asocian a cada imagen. Por lo que tenemos que hablar de una codificación caliente en este punto. Hablamos de esto cuando hablamos de ingeniería de características en el curso, pero con el fin se puede comparar ese valor conocido esa etiqueta conocida, que es un número del 0 al 9 a la salida de esta red neuronal. Recuerde, la salida de la red neuronal es en realidad 10 neuronas diferentes donde cada una representa la probabilidad de una clasificación dada. En realidad compara eso con el valor correcto conocido. Necesitamos convertir ese número correcto conocido a un formato similar, así que vamos a usar una codificación en caliente. Se entiende mejor con un ejemplo. Entonces digamos que sabemos que la respuesta para la etiqueta correcta conocida para una imagen es una. Nosotros uno codificaría caliente eso como una matriz de 10 valores aquí, donde cada valor representa la probabilidad de ah, eso dadas clasificaciones, ya que ya sabemos con 100% de certeza que esta imagen era una. Podemos decir que para las clasificaciones cero, hay un 0% de probabilidad de eso para la clasificación uno, hay un 100% de probabilidad de ese punto. Ah, y para dos va a ser cero por 30 así y así sucesivamente. Entonces esa es una codificación caliente. Simplemente estás creando una representación binaria de un valor entero, si quieres. Por lo que el número uno es representativo. 0100000 Cada una de esas ranuras en la matriz que hay representa un
valor de clasificación diferente , y esto simplemente facilita que las matemáticas funcionen y construyan cosas. De acuerdo, entonces empezamos, como codificar, esa etiqueta conocida a una matriz
codificada y caliente . Después hacemos algunos recorte sus para evitar algunos problemas numéricos matemáticos que registran cero. Y entonces podríamos simplemente comparar ese Ah, y calcular el término real de entropía cruzada haciendo reducir algunos para ir a través de todo el conjunto de todos los valores dentro de este parche y usando esta comparación arrítmica log como dijimos que
realmente hacer cruz entropía sin registro propiedad arrítmica. Entonces sigamos adelante y ah,
turno, turno, Enter Para hacer eso de nuevo, las cosas clave aquí se me reducen y reducen algunas, lo que significa que vamos a aplicar esto en todo el lote de una vez. Está bien. A continuación tenemos que definir lo que se llama optimizador, y en este caso, vamos a usar un Grady estocástico y disentimiento. Ya hemos hablado de eso antes, y usaremos nuestro parámetro hiper de tasa de aprendizaje, que nuevamente querrá sintonizar a través de la experimentación más adelante. Teoh, define ese optimizador. Necesitamos escribir una función para ejecutar realmente esa optimización. Y de nuevo con los ojos de nivel inferior tensorflow ap. Tenemos que hacer esto de la manera difícil. Vamos a usar algo llamado cinta radiante para hacer esto automáticamente. Lo que eso está haciendo es que puedes ver aquí en realidad está llamando a nuestra función de red neuronal que define la topología de nuestra red neuronal. Vamos a calcular la función de pérdida son función de entropía cruzada que definimos
anteriormente también. Entonces esto está atándolo todo y en realidad permitiéndonos optimizar esta red neuronal dentro de esta única función aquí. Entonces no terriblemente importante entender lo que está pasando aquí a un nivel bajo se puede
entender aquí a través de los comentarios, nosotros, uh estamos actualizando nuestras variables a medida que lo atravesamos. Paso aquí. Computamos los INTs Grady y luego actualizamos nuestros pesos y sesgos a gusto paso de entrenamiento. Entonces este código es lo que está computando nuevos pesos y sesgos a través de cada pase de entrenamiento otra vez, Esto va a ser mucho más fácil usando la caricia nivel superior AP I Así que en este momento solo te estamos mostrando esto para darte una apreciación de lo que está pasando bajo el capó. Sigamos adelante y nos desplazamos. Entra a esa también. Muy bien, entonces ahora tenemos todo lo que necesitamos. Tenemos definida la topología de nuestra red. Tenemos las variables definidas para nuestros pesos y sesgos. Tenemos definida una función perdida, que es la entropía cruzada, y tenemos una función de optimización que lo une todo llamado Optimización Ejecutar. Adelante y empecemos a entrenar esta cosa. Entonces eso es lo que está pasando aquí. Oh, espera. Una cosa más. Necesitamos una métrica de precisión también, Así que una función de pérdida no es suficiente. También queremos mostrar la precisión real en cada etapa dos y todo lo que
hace esta métrica de precisión es decir, vamos a comparar el argumento máximo real de cada matriz de salida que va a corresponder a nuestro único valor codificado en caliente. Y compare eso con el valor caliente, codificado, conocido que tenemos para esa etiqueta. Entonces esta es solo una forma de quedarte. Vamos a llamar, reducirme para calcular realmente la precisión de cada predicción individual y promedio eso todo el conjunto de días. Entonces eso es lo que hace nuestra métrica de precisión aquí también. Turno, entrar. Y ahora en realidad podemos patearlo para que veas que hemos hecho todo el levantamiento pesado. Ahora es bastante sencillo hacerlo en realidad. Por lo que para cada paso de entrenamiento, vamos a tomar un lote de nuestros datos de capacitación. Recuerda, creamos esos lotes antes al usar un conjunto de datos a través de los pasos de entrenamiento. Eso va a ser ah, 3000. Creo que dijimos que lo era. Y por cada lote cada paso de entrenamiento, vamos a ejecutar la optimización. Entonces eso es llamar a esa única función que tenemos que ató todo para aplicar nuestra
optimización a través de nuestra red neuronal en computar los pesos y sesgos óptimos en cada paso y sí, cada 100 pasos. Eso es lo que es el paso de exhibición. Pondremos nuestro progreso a medida que avancemos. Así que cada 1/100 épocas, en realidad,
uh,
ejecutaremos nuestra red neuronal aquí en el lote actual y
obtenemos uh, un conjunto de predicciones para ese lote de 250 valores ahí y calcularemos entropía cruzada en eso para obtener un instantánea de nuestra función de pérdida
actual y la precisión de cálculo en eso también. Tash, obtienes una métrica de nuestra precisión en cada estado para que podamos ver esto converge en el tiempo por cada 100 pasos a lo largo de nuestros 3000 pasos de entrenamiento o ese cuadro, si así lo deseas. Adelante y pateemos eso. Y aquí es donde está sucediendo la acción. Entonces esto va a iterar sobre una caja de más de 3000 F y podemos ver esa precisión cambiando medida que avanzamos. Es un poco interesante ver esto porque la precisión es una especie de fluctuación un
poco a medida que vamos Miedo Así que ya sabes, puedes decir este tipo de como tal vez acomodándose en unos mínimos locales aquí y trabajando su salida de esos y encontrar mejores soluciones a lo largo del tiempo. Pero a medida que
va, empezará a converger en mejores y mejores valores. Entonces, ya
sabes, empezamos con Justin 84% de precisión. este momento, estamos hasta cerca del 90 4% pero sigue siendo un poco por todo el lugar. Démosle un poco más de tiempo con bastante firmeza en los noventa en este punto. Entonces eso es bueno. 90 tres's, diría hasta 2000 esa caja. Ahora recuerda, vamos a subir a 3000 y otra vez, ya
sabes, sólo
vas a tener que ver esto y ver donde empieza a converger. Podríamos hacer una parada temprana para averiguar en qué momento en realidad dejamos de conseguir una mejora. Pero como que tienes que hacer un globo ocular de la primera para tener una idea de cuántas una viruela realmente
necesitas . Ya casi estamos ahí y parece que no vamos a hacer mucho mejor que el 93% de precisión. Entonces ahí lo tenemos. Nosotros más de 3000 esa caja terminamos con una precisión de 92.8% y esto es realmente recordar usando nuestro conjunto de datos de entrenamiento. Entonces existe la posibilidad de que estemos más ajustados aquí para evaluar realmente qué tan bien lo hace este modelo. Queremos evaluarlo en los datos de prueba establecidos en datos que nunca antes se había visto. Entonces sigamos adelante y usemos ese conjunto de datos de prueba que dejamos a un lado al principio y ejecutamos la red
neuronal en ella y en realidad llamemos a nuestra función de precisión para ver qué tan bien lo hace en las imágenes de prueba de datos de prueba que nunca antes se había visto. 93%. No está mal, ya
sabes. O sea, podríamos hacerlo mejor. Pero para una toma muy simple de usar tensorflow y configurar una red neuronal muy simple con solo una capa oculta, eso no está tan mal. Lo haremos mejor a lo largo del curso. Vamos a probar diferentes técnicas, pero vamos a un buen comienzo aquí mismo otra vez. Es bueno entender tus datos, visualizar cosas, ver lo que realmente está pasando bajo el capó. Entonces echemos un vistazo a algunas de esas imágenes mal clasificadas y saquemos más de una tripa de lo bueno que es nuestro modelo realmente. Echemos un vistazo a los ejemplos de imágenes que no clasificó correctamente y
veamos cuán perdonables son esos errores. Entonces eso es lo que esta función está haciendo. Básicamente, estamos pasando por 200 imágenes que se sabía que eran incorrectas. Echando un vistazo al valor real predicho, tomando
así art max en la matriz de salida allí de la capa de neurona de salida. Y comparando eso con las etiquetas correctas conocidas. Y, si no es correcto, lo
imprimirá con la etiqueta original y la puntera de la etiqueta prevista. Obtén una idea de lo que está pasando aquí. Turno entrar. Muy bien, entonces estos son algunos ejemplos bastante desordenados en este ejemplo. Um, teníamos que sabíamos que este tipo intentaba sacar cinco. Pensamos que era 1/6. Sí, eso no lo entiendo. Sí, quiero decir, ese es un cinco de aspecto realmente desagradable, y es un caso bastante bueno ahí para decir que en realidad era un seis. Entonces ese es un caso en el que tu cerebro humano no podría realmente hacer mucho mejor. Yo no conseguiría eso. Eso es un cinco, igual que parece un garabato. Esta para,
um, um, nuestra mejor conjetura para mi modelo fue un seis. El hombre pretendía cuatro que no me parece un cuatro. Es decir, se ve como la mitad de un cuatro, básicamente como que no sé qué pasó con el brazo del tipo cuando lo estaba dibujando. Pero de nuevo, ya
sabes esto te permite apreciar lo bien que lo está haciendo o no. Ah, éste. No estoy seguro de cómo pensó nuestra modelo que era un siete otra vez. Ese es un seis de aspecto muy raro, pero parece un siete, tampoco , de
todos modos ,
ese, ,
ese,
también un poco desagradable, parece un dos al cerebro. Es un aspecto realmente divertido, machacado, machacado,
extraño, pero ah, este es un ejemplo de donde tu cerebro hace un mejor trabajo que lo que son simple red neuronal. Pero en general, ya
sabes, estos son errores en gran medida perdonables. Alguien de donde me estropeé eran algunos ejemplos bastante raros, desordenados como, ¿Qué es eso? Um, supongo que se supone que es un dos. Supongo que fue un nueve. Ya sabes, en realidad podría ver eso yendo en cualquier dirección. Entonces, um, no muy malos, ¿sabes? En fin, si quieres jugar con él, te animo a hacerlo. A ver si puedes mejorar las cosas. Entonces como hablamos, aquí
hay muchos hiper parámetros diferentes para jugar con la tasa de aprendizaje. ¿ Cuántas neuronas ocultas tenemos? Y así probar diferentes valores. Prueba diferentes tasas de aprendizaje. Prueba más neuronas, menos neuronas. Ve qué efecto que acaba de jugar con él. Porque en el mundo real, eso es lo que tienes que hacer. Intenta agregar una segunda capa oculta par o diferentes tamaños de lote o un número diferente de esa caja. Tan solo tienes que ensuciarte las manos y obtener una buena sensación de cómo esos diferentes parámetros afectan la salida en los resultados finales que obtienes. Entonces dale una oportunidad. Y si puedes obtener más del 93% de precisión, nos encantaría oír hablar de ello en las Q y A.
9. Introducción a Keras: Por lo que hemos echado un vistazo a desarrollar redes neuronales usando tensorflow especie de
ojos AP de nivel inferior . Donde en lugar de pensar realmente en neuronas o unidades, estás pensando más en 10. Señores y maitresse facilidad y multiplicarlos juntos directamente, y esa es una forma muy eficiente de hacerlo. Pero no es realmente intuitivo. Podría ser un poco confuso, sobre todo cuando estás empezando a intentar implementar una red neuronal en esos términos. Afortunadamente, hay,
ah, ah, AP de nivel
superior que llamé caricia que ahora está integrada en Tensorflow. Solía ser un producto separado que estaba encima de Tensorflow. Pero a partir de tensorflow 1.9, realidad se ha incorporado al propio tensorflow como alternativa, nivel
superior a p I que se puede utilizar. Y es realmente agradable porque es realmente construido a propósito para el aprendizaje profundo. Por lo que todo el código está muy construido alrededor del concepto de redes neuronales artificiales, y hace que sea muy fácil construir las capas de la red neuronal y conectarlas y utilizar diferentes funciones de optimización sobre ellas. Es mucho menos código y muchas menos cosas que podrían salir mal. En consecuencia, otro beneficio de la caricia
en, además de su facilidad de uso es su integración con facilidad. Psiquiatría Aprendió biblioteca. Entonces si estás acostumbrado a hacer aprendizaje automático en python, probablemente
uses psíquico aprender mucho y usar caricia. En realidad puedes integrar tus redes neuronales profundas con el aprendizaje psíquico. Y podría haber notado en nuestra conferencia anterior que tipo de perdimos por el problema de hacer
realmente pruebas entrenadas o validación cruzada en nuestra red neuronal porque habría sido una especie de gran dolor en el trasero, pero lo haría psique aprende. Es muy fácil hacer validación cruzada y, como, realizar análisis y evaluación adecuados de esta red neuronal. Entonces eso hace más fácil evaluar lo que estamos haciendo e integrarlo con otros modelos o incluso cadena ah, red
neuronal con otras técnicas de aprendizaje profundo o aprendizaje automático. También hay mucho menos en lo que pensar, y eso significa que a menudo se pueden obtener mejores resultados sin siquiera intentarlo. Ya sabes, con tensorflow, hay que pensar en cada pequeño detalle a nivel de álgebra lineal de cómo se construyen estas
redes neuronales porque realmente no soporta de forma nativa las redes neuronales fuera de la caja. Tienes que descifrar, ¿Cómo multiplico todos los pesos juntos? ¿ Cómo agrego en los términos de sesgo? ¿ Cómo le aplico un optimizador? ¿ Cómo definimos una función de pérdida? Cosas así, mientras que los quilates pueden cuidar muchos de esos detalles por ti. Entonces cuando hay menos cosas para que arruines y más cosas que la caricia puede asumir por ti en cuanto a optimizar cosas donde realmente estás tratando de hacer a menudo puedes obtener mejores resultados sin hacernos mucho trabajo, lo cual es genial. ¿ Por qué es eso importante? Bueno, cuanto más rápido puedas experimentar y crear prototipos
de cosas, mejores serán tus resultados. Entonces si es mucho más fácil para ti probar diferentes capas en tu red neuronal, ya
sabes, diferentes disculpas, diferentes optimizadores, diferentes variaciones. Va a ser mucho más fácil y rápido para que converjas en el tipo óptimo de red
neuronal para el problema que estás tratando de resolver. tanto que de Tensorflow está poniendo un montón de bloqueos de carretera para ti en el camino. Al final del día, solo
tienes tanto tiempo para dedicarte a estos problemas, ¿
verdad? Por lo que cuanto más tiempo puedas dedicar a la topología y afinación de tu red neuronal, y cuanto menos en la implementación de
la misma, mejores serán tus resultados al final del día. Ahora podrías encontrar que París es en última instancia una herramienta de creación de prototipos para ti. No es tan rápido como ir directo a Tensorflow. Por lo que ya sabes, a
veces quieres converger en la topología deseada, luego vuelve atrás e implementa eso en la capa tensorflow. Pero de nuevo, sólo ese uso de prototipos por sí solo vale la pena. Hace la vida mucho más fácil. Entonces echemos un vistazo más de cerca. Y de nuevo la caricia es solo una capa encima del tensorflow que hace mucho más fácil el aprendizaje profundo . Todo lo que necesitamos hacer es empezar importando estas cosas que necesitamos. Entonces vamos a importar la biblioteca de caricias y algunos módulos específicos de ella. Tenemos aquí los datos de amnistía que vamos a experimentar con el modelo secuencial , que es una forma muy rápida de ensamblar las capas de una red neuronal. Vamos a importar las capas densas y de deserción también, por lo que en realidad podemos agregar algunas cosas nuevas a esta red neuronal para que sea aún mejor y evitar el sobreajuste. Y vamos a importar el optimizador de problemas RMS, que es lo que vamos a usar para nuestro Grady y disidencia. Desplazarse, entrar y se puede ver que ya han cargado caricia con sólo importar esas cosas. Está usando Tensorflow es el back end. Adelante y carguemos el conjunto de datos de amnistía que hemos utilizado en el ejemplo anterior. La versión de París es un poco diferente, en realidad tiene 60 mil muestras de entrenamiento frente a 55 mil todavía 10 mil muestras de prueba, y eso es sólo una operación de una línea. Muy bien, así que ahora necesitamos, como antes, convertir esto a la forma que Tensorflow espera bajo el capó. Por lo que vamos a remodelar las imágenes de entrenamiento para que sean 60,000 por 7 84 Nuevamente, vamos a seguir tratándolas como imágenes de una D. Vamos a aplanar todo esto en remolque una D rosa de 784 píxeles por cada
imagen de 28 por 28 . También tenemos nuestro conjunto de datos de prueba de 10,000 imágenes, cada una con 784 píxeles de paz y emitiremos explícitamente las imágenes como
valores flotantes de 0.32 bits , y eso es solo para que la biblioteca sea un poco más feliz. Además, vamos a normalizar estas cosas por 2 55 Así que los datos de la imagen aquí en realidad son de ocho bits en la fuente, así que 0 a 2 55 Así que para convertir eso a 01 lo que estamos haciendo, básicamente aquí lo está convirtiendo a un número de punto flotante primero de ese 0 a 2 55 imager y luego dividiéndolo por 2 55 para volver a escalar esos datos de entrada 20 a 1. Ya hemos hablado antes de la importancia de normalizar tus datos de entrada, y eso es todo lo que estamos haciendo aquí. Solo estamos tomando datos que comenzaron como datos de ocho bits 0 a 2 55 y convirtiendo eso a valores de punto flotante de
32 bits entre cero y uno. Siempre está pasando ahí como antes, vamos a convertir las etiquetas ARD a un formato caliente, así que eso es lo que hace demasiado categórico para ti. Simplemente convierte los datos de la etiqueta tanto en el entrenamiento como en la fecha de prueba se establece. Teoh uno caliente 0 10 valores. Adelante y corremos ese bloque anterior ahí antes de que nos olvidemos y correremos. Esto está bien otra vez. Yo sólo estoy dando un turno. Ingresa después de seleccionar los bloques de código correspondientes aquí. Muy bien, como antes, visualicemos algunos de los datos solo para asegurarnos de que se cargaron con éxito. Esto es más o menos lo mismo que el ejemplo anterior. Simplemente vamos a ver nuestros datos de entrada para un número de muestra. 1234 y pudimos ver que son una etiqueta caliente aquí está mostrando una y posición para y desde que empezamos a contarlo, 00123 Eso indica etiqueta tres. El uso no son Max. Eso nos devuelve la etiqueta legible humana. Y al remodelar esa matriz de 768 píxeles en una forma de dos D, podemos ver que este es el intento de alguien de dibujar el número tres. OK, hasta ahora, tan buenos datos de Armor parece que tiene sentido y se cargó correctamente. Ahora recuérdalo De vuelta en cuando estábamos lidiando con tensorflow, tuvimos que hacer todo un montón de trabajo para configurar nuestra red neuronal. Veremos lo mucho más fácil que es con caricia todo lo que necesitamos hacer es decir que estamos
configurando un modelo, un modelo secuencial. Y eso significa que podemos agregar capas individuales a nuestra red neuronal una capa a la vez , secuencialmente, si se quiere. Por lo que comenzaremos agregando una densa capa de 512 neuronas con una forma de entrada de 784 neuronas. Entonces esta es básicamente nuestra primera capa que toma nuestras 784 señales de entrada de cada imagen una por cada píxel y la alimenta a una capa oculta de 512 neuronas. Y esas neuronas tendrán la función de activación rela oh asociada a, um Así que con una línea de código, hemos hecho todo un trabajo que teníamos que hacer en tensorflow antes, y luego encima de eso pondrá una activación max suave encima de ella a una capa final de 10 que mapeará a nuestra clasificación final de lo que un número de esto representa del 0 al 9. De acuerdo, así que no fue tan fácil. Incluso podemos pedir cuidado es que nos devuelvan un resumen de lo que configuramos solo para asegurarnos de que
las cosas se vean de la manera que esperábamos. Y seguro, tenemos dos capas aquí,ya
sabes, ya
sabes, una que tiene 512 y luego yendo a una capa de 10 neuronas para la clasificación final. Y esto sí que omite la capa de entrada. Pero sí tenemos esa forma de entrada de 784 entidades entrando en esa primera capa. Muy bien ahora, también
podrías recordar que fue una especie de dolor en el trasero conseguir que la función de optimización y perdida se configurara de nuevo en Tensorflow. Eso es un solo liner en caricia. Bueno, tenemos que hacer es decir que se pierden La función es entropía cruzada categórica, y sabrá qué hacer Ahí. Vamos a utilizar el optimizador de prop RMS sólo por diversión. Podríamos usar cualquiera de la que queríamos. Podríamos ver a Adam si quisieras. O hay otras opciones, como Ocho. Un graduado SG puede leer sobre los de este enlace aquí si quieres, y mediremos la precisión a medida que avancemos. Entonces eso es todo ese dicho, Vamos adelante y golpeemos eso y eso construirá la gráfica subyacente que queremos ejecutar en tensorflow. Está bien, así que ahora en realidad tenemos que ejecutarlo. Y de nuevo, esa es sólo una línea de código con caricia. Todo lo que necesitamos hacer es decir que iban a encajar este modelo usando este conjunto de datos de entrenamiento estos airean las características de entrada, las capas de entrada con las que se iban a entrenar. Queremos utilizar tamaños de lote de 100. Eso vamos a correr 10 veces. Voy a establecer nivel de verbosidad de dos porque eso es lo que mejor funciona con un ojo cuaderno nocturno
Python y para la validación, proporcionaremos el conjunto de datos de prueba también. Entonces en lugar de escribir esta gran función que hace consideración de aprender a mano como
hicimos en la caricia tensorflow lo hace todo por nosotros. Entonces sigamos adelante y golpeemos,
cambiemos, cambiemos, entramos y pateemos esa oficina. Bueno, ahora la caricia es más lenta que el tensorflow, y sabes que está haciendo un poco más de trabajo bajo el capó, por lo que esto tomará más tiempo, pero verás que los resultados son realmente buenos. Es decir, incluso en esa primera generación, ya
hemos igualado la precisión que obtuvimos después de 2000 iteraciones en nuestra implementación de
tensorflow codificada a mano . Ya estamos hasta Epoch seis y nos acercamos al 99% de precisión en nuestros datos de entrenamiento. Ten en cuenta que esto es medir la precisión en el conjunto de datos de entrenamiento, y casi estamos ahí, pero sí. O sea, incluso con sólo 10? Viruela? Hemos hecho mucho mejor que usar tensorflow. Y de nuevo, ya
sabes, caricia es una especie de hacer muchas de las cosas correctas para ti automáticamente, sin hacerte ni siquiera pensar en ello. Ese es el poder de la caricia. A pesar de que es más lento, podría darte mejores resultados en menos tiempo al final del día. Ahora, aquí hay algo que realmente no podíamos hacer fácilmente con el flujo de transferencia. Es posible. Yo sólo, ya
sabes, no me metí porque esa conferencia fue lo suficientemente larga. ¿ Es waas? Pero recuerda que en realidad podemos integrar la caricia con el aprendizaje psíquico por lo que solo podemos decir punto
modelo evaluar. Y eso es igual que un modelo aprendido psíquico. A medida que las faras Pythons se preocupan y en realidad miden en base a nuestros datos de prueba, establecer cuál es la precisión y usar el conjunto de datos de prueba como punto de referencia, tuvo una tasa de éxito del 98% clasificando incorrectamente esas imágenes, por lo que eso no está mal. Ahora, claro, mucha investigación va a optimizar esto,
y este problema de conjunto de datos en 98% no se considera realmente un buen resultado. Como dije más adelante en el curso, hablaremos de algunos mejores enfoques que podemos usar. Pero, oye, eso es mucho mejor de lo que conseguimos en la conferencia anterior, ¿no? Al igual que antes, sigamos adelante y echemos un vistazo a algunos de los que se equivocó sólo para tener una idea de dónde ha perturbado las cosas que están. red neuronal tiene retos. El código aquí es similar. Simplemente vamos a pasar por las 1eras 1000 imágenes de prueba aquí, y como sí tiene una tasa de precisión mucho mayor, tenemos que profundizar en eso. Probado para encontrar ejemplos de cosas que salieron mal remodelará cada dato cada imagen y hará una matriz plana de 784 píxeles, que es lo que la red neuronal espera es entrada. Llame a nuestro Max sobre la clasificación resultante y un formato caliente y vea si esa
clasificación predicha coincide con la etiqueta real para esos datos. Si no imprime. Está bien, así que puedes ver aquí que este modelo realmente lo está haciendo mejor. El que dijo Se está equivocando son bastante incómodo. De acuerdo, entonces en este caso, predijimos que este era un número nueve. Y si lo mirara yo mismo, podría adivinar que también fue un nueve. Resulta que esta persona estaba tratando de dibujar el número cuatro,
pero, ya
sabes, ya
sabes, este es un caso en el que incluso un cerebro humano está empezando a tropezar con problemas en cuanto a lo que esta persona estaba tratando de escribir en realidad. No sé qué se supone que sea eso. Al parecer, intentaban dibujar el número cuatro. Nuestra mejor suposición fue el número seis no irrazonable, dada la forma de las cosas. Aquí hay alguien que intentaba dibujar, también. Pero se parece mucho más a un siete otra vez. Yo estaría demasiado seguro de eso. Entonces, ya
sabes, aunque aplanamos estos datos a una dimensión, esta red neuronal que hemos construido ya está rivalizando con el cerebro humano en cuanto a
hacer reconocimiento de escritura a mano en estos números. Es decir, eso es algo increíble ese uno, y probablemente hubiera adivinado un tres en ese, pero de nuevo. Se puede ver que la calidad de las cosas con las que tiene problemas es realmente escasa. ¿ Qué es eso, Un escorpión? Al parecer, se suponía
que era un ocho. Y nuestra mejor conjetura fue un dos. Pero eso es mucho Wow. De acuerdo, Sí, algunas personas realmente no pueden. ¿ Verdad? Eso es un siete. Sí. Es decir, tú consigues el punto aquí, Así que con solo usar caricia, hemos conseguido una mejor precisión. Tenemos un mejor resultado porque hay menos en lo que pensar. Está bien. Y probablemente puedas tener mejorar en esto aún más de nuevo como antes. Con tensorflow. Yo quiero que regreses y veas si realmente mejoras en estos resultados. Intenta usar un optimizador diferente al RMS prop try. Ya sabes, diferentes disculpas. Y la belleza con caricia es que es mucho más fácil probar esos diferentes Tell disculpas ahora, ¿
verdad? En realidad, Zanahorias viene en su documentación con un ejemplo de usar la amnistía, y esta es la topología real que utilizan en sus ejemplos. Así que vuelve atrás. Dale una oportunidad a eso, ver si en realidad es mejor o no. A ver si puedes mejorar las cosas. Una cosa que puedes ver aquí es que en realidad están agregando capas de deserción para evitar un exceso de ajuste. Por lo que es muy fácil agregar ese tipo de características aquí. Básicamente, lo
hemos hecho aquí es en una misma capa densa, 512 neuronas ocultas tomando las 17 84 características. Y luego vamos a dejar el 20% de las neuronas que la siguiente capa para forzar el aprendizaje a extenderse más y evitar sobreajuste. Por lo que podría ser interesante ver si eso realmente mejora tus resultados en el conjunto de datos de prueba agregando esas capas de deserción. Está bien, así que ve a jugar con esa mamá, vuelve. Haremos algunas cosas aún más interesantes usando caricias.
10. Uso de Keras para aprender afiliaciones políticas: Entonces eso fue mucho más fácil usar caricias, ¿
no? Ahora, dijeron
los datos del M NIST, es sólo un tipo de problema que podrías resolver la red neuronal. Es lo que llamamos clasificación multiclase, multiclase, porque las clasificaciones en las que estábamos encajando van desde el número cero hasta el nueve. Entonces en este caso tuvimos 10 diferentes valores de clasificaciones posibles, y eso hace de esto un problema de clasificación multiclase. Ahora, basado en la caricia es documentación y ejemplos. Tienen asesoría general sobre cómo manejar diferentes tipos de problemas. Entonces, aquí hay un ejemplo de cómo sugieren configurar un tema de clasificación multiclase en general. Para que se pueda ver aquí que tenemos a él capas. Aquí tenemos una dimensión de entrada de las muchas características que tengas entrando en el sistema. En este ejemplo, hay 20 pero dependiendo de la naturaleza de tu problema, puede
haber más. Se está configurando para rela capas de funciones de activación, cada una con 64 neuronas cada una y otra vez, eso es algo que te gustaría una melodía, dependiendo de la complejidad de lo que estás tratando de lograr, se pega en un capa de deserción para descartar la mitad de las neuronas y cada paso de trading de nuevo. Eso es para evitar el exceso de ajuste. Y al final, está usando una activación max suave a uno de en este ejemplo 10 valores de salida diferentes. OK, entonces así es como van a resolver el problema de amnistía dentro de su propia documentación. Después usan un SG de optimizador en una función de cruz categórica y pérdida de entropía. Entonces de nuevo, podrías simplemente referirte al aumento del carrusel para algún punto de partida general en algún lugar del dedo del pie comienzan por lo menos cuando vuelves a abordar un tipo específico de problema, los números reales de neuronas y el número de capas, el número de entradas y salidas. Bueno, obviamente, muy dependiendo del problema, estás tratando de resolverlo. Esta es la orientación general que te dan sobre cuál es la función de pérdida correcta para empezar . ¿ Cuál es el optimizador adecuado para empezar podría ser otro tipo de problema de clasificación es comprar una reclasificación? A lo mejor estás tratando de decidir si las imágenes o las personas son imágenes de hombres o mujeres puede estar tratando de decidir si el partido político de alguien es demócrata o republicano. Si no tienes ninguno o tipo de problema, entonces eso es lo que llamamos un problema de clasificación binaria, y puedes ver aquí allá. recomendación aquí es usar una función de activación sigmoide al final en lugar de soft max , porque realmente no necesitas la complejidad del soft max si solo estás intentando, como, ir entre cero y uno. Por lo que sigmoide es la función de activación de elección. En el caso de las clasificaciones binarias, también
están recomendando el optimizador de prop RMS, y la función perdida en este caso será la entropía cruzada binaria en particular tan pocas cosas que son especiales acerca de hacer la clasificación binaria como opuesta a la multiclase. Por último, quiero hablar un poco más sobre el uso de la caricia con psique. Se aprende. Sí hace que sea mucho más fácil hacer cosas como la validación cruzada. Y aquí hay un pequeño fragmento de código de cómo podría verse eso. Entonces aquí hay una pequeña función que crea un modelo que se puede usar con psique, aprendió. Básicamente, tenemos ah crear función modelo aquí que crea nuestra red neuronal real. Entonces estamos usando un modelo secuencial, poniendo una capa densa con cuatro entradas y seis neuronas y esa capa que se alimenta a otra capa oculta de cuatro neuronas. Y finalmente se va a un clasificador binario al final con una función de activación sigmoide . lo que un pequeño ejemplo de configurar un poco de compra clasificaciones Eri Red neuronal. Podemos entonces configurar un estimador usando la función clasificador de caricias ahí, y eso nos permite recuperar un estimador que sea compatible con psique. Se aprende. Entonces ves al final ahí en realidad estamos pasando ese estimador en psíquico aprende la función de puntuación
Val cruzado y eso permitirá que psique aprenda a ejecutar tu red neuronal al igual que cualquier otro modelo de aprendizaje automático integrado en psiquis. Se aprende que significa que la puntuación cruzada Val puede entrenar automáticamente a tu modelo y luego evaluar sus resultados utilizando una cuidadosa validación cruzada y darte unos resultados muy significativos para lo precisa que es en su capacidad de predecir correctamente las clasificaciones para datos que nunca se había visto antes. Entonces, ¿qué esos fragmentos bajo nuestro cinturón? Vamos a probar, um, o ejemplo interesante. Por fin nos movamos más allá de la muestra de amnistía que vamos a hacer es tratar de predecir los partidos
políticos del diputado recién en base a sus votos en el Congreso usando la
biblioteca de caricias . Entonces probemos esto ahora. Esto en realidad va a ser un ejemplo que te voy a dar para que pruebes tú mismo como ejercicio. Entonces te voy a ayudar a cargar estos datos y a limpiarlos. Pero después de eso, te
voy a dejar que en realidad implemente una red neuronal con caricia para clasificar estas cosas así de nuevo, para retroceder. Lo que vamos a hacer es cargar algunos datos sobre un montón de votos del Congreso que varios políticos hicieron. Y vamos a tratar de ver si podemos predecir si un político es republicano o demócrata,
sólo en base a cómo votaron en 17 temas diferentes. Y esto es datos más antiguos es de 1984. Por lo que definitivamente necesitas ser de cierta edad, digamos, para recordar cuáles fueron estos temas. Y si eres de fuera de Estados Unidos sólo para darte una breve imprimación en
política estadounidense , básicamente hay dos partidos políticos principales en Estados Unidos los republicanos, que tienden a ser más conservadores, y los demócratas, que tienden a ser más progresistas, y obviamente esos han cambiado a lo largo de los años. Pero esa es la comida actual. Entonces dejemos pasar por encima de nuestros datos de muestra. Voy a usar la biblioteca Pandas. Eso es parte de nuestro entorno científico pitón aquí. Para cargar realmente estos archivos CSB o simplemente archivos de datos de valor separados por comas y masajear datos, limpiarlos un poco y ponerlos en una forma que la caricia pueda aceptar. Por lo que empezaremos importando. La Biblioteca Panis llamará a un PD para abreviar. He construido esta matriz de nombres de columna porque en realidad no es parte del archivo C S V , así que necesito proporcionar eso a mano. Por lo que las columnas de los datos de entrada van a ser el partido político, republicano o demócrata, y luego una lista de votos diferentes que votaron. Entonces, por ejemplo, podemos ver si cada político votó sí o no en grupos religiosos y escuelas. Y mi realmente corto los detalles de ese proyecto de ley en particular fueron. Pero al leer estos, probablemente
puedas adivinar la dirección por la que probablemente votarían los diferentes partidos . Así que adelante y lee ese archivo CSP. Usando pandas leer ver función SV. Diremos que cualquier valor faltante se rellenará con un signo de interrogación y pasará en una matriz de nombres del nombre de la entidad. lo que sabemos cómo llamar a las columnas que solo mostrarán el marco de datos resultante utilizando el comando head. Así que adelante, Hit, turno, entra para levantarse eso y deberíamos ver algo como esto es sólo la 1ª 5 entradas. Por lo que para el 1er 5 políticos al frente de nuestros datos, podemos ver cómo está el partido de cada persona en la etiqueta que le hemos asignado a esa persona, la etiqueta conocida que vamos a tratar de predecir y sus votos en cada tema. Ahora, también
podemos usar la función describir en el marco de datos resultante para obtener una
visión general de alto nivel de la naturaleza de los datos. Por ejemplo, se
puede ver este montón de datos faltantes, por ejemplo, pesar de que hay 435 personas en el tienen una fiesta asociada con ellas. En Lee, 387 de ellos en realidad tenían un voto sobre el proyecto de ley de reparto de costos del proyecto de agua, por ejemplo. Entonces tenemos que lidiar con los datos que faltan aquí de alguna manera. Y lo más fácil de hacer es simplemente tirar a la basura a Rose que tienen datos faltantes Ahora en el mundo
real, querrías asegurarte de que no estás introduciendo algún tipo de sesgo no intencional
haciendo eso. Ya sabes, tal vez hay más tendencia para que los republicanos no voten que demócratas o viceversa . Si ese fuera el caso, entonces podrías estar sesgando tu análisis arrojando a políticos que no votaron en cada tema real aquí. Pero supongamos que no existe tal sesgo y sólo podemos seguir adelante y bajar esos
valores faltantes . Eso es lo que hace esta pequeña línea de aquí. Dice: Coloca en un lugar. Era cierto. Eso sólo significa que vamos a dejar caer cualquier fila que falte datos de nuestro marco de
datos de votación . Y luego volveremos a describir y deberíamos ver que cada columna tiene el mismo conteo porque no faltan datos en este punto. Entonces tenemos cosas de ventana abajo a 232 políticos aquí, no ideal. Pero, oye, eso es con lo que tenemos que trabajar. Lo siguiente que tenemos que hacer es realmente masajear estos datos en una forma que la caricia puede consumir . Por lo que Carris no trata con sabio y termina. Se ocupa de los números, así que vamos a reemplazar a todos los sabios y termina con unos y ceros usando esta línea aquí. Panis tiene una útil función dandy reemplazada en marcos de datos que puede usar para hacer eso y igual manera reemplazará las cuerdas Demócrata y Republicana, también con los números uno y cero. Entonces esto está convirtiendo esto en un problema de clasificación binaria. Si clasificamos a alguien como perteneciente a la etiqueta uno, y eso indicará su demócrata y etiquetado cero indicará que es republicano. Entonces sigamos adelante y ejecutemos esa limpieza de esos datos, y deberíamos ver ahora si vuelves a correr adelante en ese marco de datos. Todo se ha convertido en datos numéricos entre cero y uno, que es exactamente lo que queremos para la entrada a una red neuronal. Muy bien, finalmente, vamos a extraer estos datos en, uh, num pastel raise que realmente podemos alimentar para acariciar. Entonces para hacer eso, solo
vamos a llamar a valores de punto en las columnas que nos importan. Vamos a extraer todas las columnas de entidad en la matriz de características y todas las etiquetas
reales en las partes reales en todas las clases array. Entonces sigamos adelante y entramos para meternos eso y en este punto, te lo
voy a entregar. Por ahora. En realidad, los fragmentos de código que necesitas estaban cubiertos en las diapositivas justo antes de salir a este cuaderno aquí. Entonces, solo refiérate a eso, y eso debería darte las cosas que necesitas para trabajar y de hecho darle a las cosas una aquí. Entonces quiero que te pruebes tú mismo. Ahora, mi respuesta está abajo aquí. Nada de mirar. Puse un poco de atracón ahí para tratar de evitar que se desplace más lejos de lo que debiera. Pero si quieres golpear pausa aquí, podemos volver más tarde. Y puedes comparar tus resultados con los míos. De acuerdo, Entonces en este punto, quiero que paren este video y le den una oportunidad usted mismo. Y cuando creas que tienes algo en marcha o si solo ah,
quieres saltarte adelante y ver cómo lo hice pegó de nuevo y te mostraré ahora mismo. Está bien. Espero que hayas hecho tu tarea aquí. Sigamos adelante y echemos un vistazo a mi implementación aquí otra vez. Es más o menos recto. Tomado de las diapositivas que te mostré antes. Todo lo que vamos a hacer es importar esa cosa que necesitamos de Caris aquí. Estamos usando deserción densa y secuencial, y también vamos a usar cross Val anotó en realidad modelo evaluador y en realidad ilustrar la integración de caricia con psíquica aprendida como hablamos también. Entonces cuando fueron entrevistados con, como, aprenden necesitamos crear una función que cree nuestros modelos. Podemos pasar eso al marcador Val cruzado. En última instancia, vamos a crear modelo secuencial, y sólo vamos a seguir el patrón que mostramos antes de hacer un problema de
clasificación binaria . Entonces en este caso, tenemos 16 temas diferentes por los que la gente votó. Vamos a utilizar una función de activación rela con una capa de 32 neuronas. Y un patrón bastante común es comenzar con un gran número de neuronas y cosas de una capa y ventana hacia abajo a medida que se obtienen las capas más altas. Entonces vamos a destilar esas 32 neuronas hacia abajo a otra capa oculta de 16 neuronas, y estoy usando el término unidades en este ejemplo en particular aquí un poco de un lado, investigadores de
Mawr y Mawr aire usando el término unidad en lugar de neurona. Y lo estás viendo en algunos de los ojos AP y bibliotecas que están saliendo. La razón de ser es que estamos empezando a divergir un poco entre
las redes neuronales artificiales y cómo funcionan y cómo funciona el cerebro humano en algunos casos
realmente estaban mejorando en biología. Por lo que algunos investigadores están tomando problemas con llamar realmente a estas neuronas artificiales porque nos estamos moviendo más allá de las neuronas, y se están convirtiendo en algo propio en este punto. Por último, tendremos una última capa con una única neurona de salida. Para hay clasificación binaria con una función de activación sigmoide para elegir entre cero y uno,
y vamos a utilizar la función de pérdida de entropía cruzada binaria el Optimizador Adam y patearlo. En ese punto, consideramos un clasificador de caricias para realmente ejecutar eso, y crearemos un objeto estimador a partir de aquel que luego podremos pasar a psique. Se aprende cruzado viale puntaje puntera, en realidad realiza la validación cruzada K fold automáticamente, y mostraremos el resultado medio cuando hayamos terminado. Entonces turno, entra y ve cuánto tiempo tarda esto. Eso sí que en 1984 los políticos no estaban tan polarizados como lo son hoy, por lo que podría ser un poco más difícil de lo que sería hoy. Predecir realmente los partidos de alguien sólo en base a sus votos será muy interesante ver si ese es el caso usando datos más modernos. Hey, ya
terminamos 93.9% de precisión, y eso es sin siquiera intentarlo demasiado. Entonces, ya
sabes, realmente no
pasamos tiempo afinando la topología de esta red. Todo tal vez podrías hacer un mejor trabajo, ya
sabes, si conseguiste unos resultados significativamente mejores, publica eso en el curso aquí, estoy seguro que a los alumnos les gustaría saber de lo que hiciste. Por lo que ahí lo tienes usando quilates para amore. Ejemplo interesante. Predecir los partidos políticos de las personas utilizando una red neuronal y también integrarla con psíquica aprendió a hacer la vida aún más fácil. Esa es la magia de la caricia para ti.
11. Redes de neutrales de Convolutional: hasta ahora, hemos visto el poder de simplemente usar un simple perceptrón multicapa para resolver una amplia variedad de problemas. Pero puedes subir las cosas a una muesca. Jeque arregla juntas Maura complicadas redes neuronales y hacen
problemas más complicados con ellas. Entonces comencemos hablando de convolución sola, redes
neuronales o CNN para abreviar. Por lo general, oye hablar de CNN en el contexto del análisis de imágenes, y todo su punto es encontrar cosas en sus datos que podrían no estar exactamente donde se
espera que esté. Por lo que técnicamente, llamamos a esta característica ubicación. En variante, eso significa que si estás buscando algún patrón o alguna característica en tus datos, pero no sabes dónde podría estar exactamente en tus datos, una CNN puede escanear tus datos y encontrar esos patrones para ti dondequiera que estén. Entonces, por ejemplo, en esta imagen de aquí, ese signo de stop podría estar en cualquier parte de la imagen, y una CNN es capaz de encontrar ese signo de stop sin importar dónde pudiera estar. Ahora
bien, no sólo se limita al análisis de imágenes. También se puede utilizar para cualquier tipo de problema en el que no sepas dónde las características que estás podrían estar ubicadas dentro de tus
pruebas de procesamiento de datos y traducción automática de datos o lenguaje natural . Ven a la mente para eso, no necesariamente sabes dónde podría
estar el sustantivo o el verbo o una frase que te importa en algún párrafo por ciento y decir que estás analizando, pero una CNN lo confinó y lo escoge para ti. Análisis de Sentimento. Otra aplicación de CNN por lo que podría no saber exactamente dónde podría estar una frase que indica algún sentimiento feliz o algún sentimiento frustrado, ¿
o qué? Lo que sea que estés buscando. Pero una CNN puede escanear tus datos y arrancarlos, y verás que la idea detrás de ella no es realmente tan complicada como suena. Este es otro ejemplo de usar palabras de fantasía. Teoh hace que las cosas suenan más complicadas de lo que realmente son. Entonces, ¿cómo funcionan? Si bien la convolución de CNN, todas las redes neuronales están inspiradas en la biología de tu corteza visual, toma señales de cómo tu cerebro procesa en realidad imágenes de tu retina, y es bastante genial. Y también es otro ejemplo de interesante comportamiento emergente. Entonces la forma en que funcionan tus ojos es que grupos individuales de neuronas atienden una parte específica de tu campo de visión. Entonces llamamos a estos campos receptivos locales ahí solo grupos de neuronas que responden solo a una parte de lo que eres. Veo que es sub muestras la imagen que entra de tus retinas y solo tiene
grupos especializados de neuronas para procesar partes específicas del campo de visión que ves con
los ojos . Ahora estas pequeñas áreas se superponen entre sí para cubrir todo tu campo visual, y esto se llama convolución. Convolución es solo una palabra elegante de decir que voy a romper estos datos en pequeños
trozos y procesar esos trozos individualmente, y luego van a armar un panorama más grande de lo que estás viendo más arriba en la cadena. Entonces la forma en que funciona dentro de tu cerebro es que tienes muchas capas. Se trata de una red neuronal profunda que identifica diversas ciudades complejas de características, si se quiere. Por lo que la primera capa en la que entras desde tu convolución, toda red neuronal dentro de tu cabeza podría simplemente identificar líneas horizontales o líneas en diferentes ángulos o, ya
sabes, tiempos de corte
específicos de los bordes. Nosotros llamamos a estos filtros, y eso podría alimentarse en una capa por encima de ellos que luego ensamblaría esas líneas que identificó en el nivel inferior en formas. Y tal vez haya una capa por encima de esa que sería capaz de reconocer objetos basados en los patrones de formas que se ven. Y luego, si estás lidiando con imágenes en color, tenemos que multiplicar todo por tres porque realmente tienes células especializadas dentro tu derecho lo suficiente para detectar la luz roja, verde y azul. Y tenemos que armar esos juntos también. Esos cada uno se procesan individualmente a Así que eso es todo una CNN es. Simplemente es tomar una fuente, imagen o un dato fuente de cualquier tipo, realmente dividiéndolo en pequeños trozos llamados convoluciones. Y luego los ensamblamos y buscamos patrones y complejidades cada vez más altas en niveles superiores en tu red neuronal. Entonces, ¿cómo sabe tu cerebro que estás mirando un cartel de stop ahí? Hablemos de esto y de un lenguaje más coloquial, si se quiere. Entonces, como dijimos, tienes campos receptivos locales individuales que son responsables de procesar
partes específicas de lo que ves y esos campos receptivos locales escaneando por aire tu imagen y se superponen entre sí buscando bordes. Es posible que notes que tu cerebro es muy sensible a los bordes de contraste que ve en el mundo sí tiende a captar tu atención, ¿
verdad? Es por eso que las letras de esta diapositiva captan tu atención porque hay un alto contraste entre las letras y el fondo blanco detrás de ellas. Por lo que a un nivel muy bajo, estás recogiendo en los bordes de ese signo de stop y los bordes de las letras en el signo de stop Ahora. . Ah, nivel
superior podría tomar esos bordes y reconocer la forma de esa parada dice la Ciencia. Ah, ahí hay un octágono que significa algo especial para mí. O esas letras forman la palabra stop. Eso significa algo especial para mí,
también, también, y en última instancia eso se igualará contra cualquier patrón de clasificaciones que
tenga tu cerebro de un signo de stop. Por lo que no importa qué campo receptivo recogió ese signo de stop en alguna capa, se reconocerá en una señal de stop. Y además, debido a que estás procesando datos y color, también
podría usar la información de que el signo stop es rojo y usar más eso para ayudar en su clasificación de lo que realmente es este objeto. Entonces en algún lugar de tu cabeza, hay una red neuronal que dice:
Oye, Oye, si veo bordes arreglando un patrón octogonal que tiene mucho rojo en él y dice: Detente en el medio. Eso significa que probablemente debería golpear los frenos de mi auto y es algún nivel aún más alto. El cerebro extraño en realidad está haciendo un razonamiento más alto. Eso fue lo que pasó. Hay un cable que dice, Hey, hay un cartel de stop viniendo aquí. Será mejor que golpee los frenos en mi auto. Y si llevas el tiempo suficiente conduciendo, ya ni siquiera
piensas realmente en ello. ¿ Te gusta Es casi duro cableado, y ese literalmente puede ser el caso de todos modos. Una convolución, toda red neuronal, una convolución artificial. Toda la red neuronal funciona de la misma manera. Misma idea exacta. Entonces, ¿cómo se construye una CNN con caricia? Obviamente, probablemente no quieras hacer esto en la capa de tensorflow de nivel inferior que puedas. Pero los CNN se complican bastante. Ah, biblioteca de nivel
superior como las zanahorias se vuelve esencial. En primer lugar,
debes asegurarte de que tus datos de origen sean de las dimensiones apropiadas de la
forma apropiada si lo deseas, y vas a estar preservando la estructura real de dos D de una imagen. Si estás tratando con datos de imagen aquí, por lo que la forma de tus datos podría ser la con veces la longitud, tiempos, el número de canales de color y por canales de color. decir, Esdecir,
si es una imagen en blanco y negro, solo
hay un color blanco y negro, así que no tienes un canal de color para una imagen en escala de grises. Pero si se trata de una imagen en color, tendrías tres canales de color uno para rojo, uno para verde y otro para azul, porque puedes crear cualquier color combinando rojo, verde y azul juntos. De acuerdo, ahora hay algunos tipos especializados de capas en Carriacou usan cuando estás lidiando con convolución, todas las redes neuronales, por ejemplo, está el tipo de capa convertida a D que hace el convolución real en una imagen de dos D. Y de nuevo, convolución solo está dividiendo esa imagen en pequeños subcampos que se superponen entre sí para el procesamiento individual. También hay una capa conv uno D y una con tres D disponible también. No tienes que usar CNN's con imágenes como dijimos. También se puede utilizar con datos de texto, por ejemplo. Eso podría ser un ejemplo de datos unidimensionales, y también es una estafa. También está disponible una capa de tres D. Si estás tratando con tres datos volumétricos D de algún tipo. Por lo que el montón de posibilidades ahí tienen una capa especializada y caricias por CNN's. ¿ Max es pooling a D? Obviamente, eso es un uno D y tres d muy en eso también. La idea de eso es solo reducir el tamaño de tus datos hacia abajo. Entonces si tomo sólo el valor máximo visto en un bloque dado de una imagen y lo remito a capas hacia abajo a esos valores máximos, es solo una forma de reducir las imágenes de tal manera que pueda reducir la
carga de procesamiento en la CNN. Como verás el procesamiento, CNN es muy intensivo en computación, y cuanto más puedas hacer para reducir el trabajo, tienes que hacerlo mejor. Entonces si tienes más datos en tu imagen de los que necesitas un máximo, tirar de dos capas D puede ser útil para destilar eso hasta la esencia desnuda de lo que necesitas analizar. Por último, en algún momento necesitas alimentar estos datos a una capa plana de neuronas, justo que en algún momento va a entrar en un perceptrón, y en esta etapa, necesitamos aplanar esa capa de dos D en una sola capa D para que pudiéramos simplemente pasarlo a una capa de neuronas. Y a partir de ese punto, simplemente se parece a cualquier otra percepción multinivel. Entonces la magia de CNN realmente sucede a un nivel más bajo, ya
sabes. En última instancia, se convierte en lo que parece los mismos tipos de multicapa Perceptron es que hemos estado usando antes de que ocurra la magia y en realidad procesando tus datos que lo involucran y reduciéndolos a algo que es manejable. Por lo que el uso típico del procesamiento de imágenes con la CNN se vería así. Podría comenzar con un conto de layer que haga la convolución real de sus datos de imagen. Podrías seguir eso con un máximo tirando de dos capas D encima de esa que destila esa imagen hacia abajo solo reduce la cantidad de datos con los que tienes que lidiar. Podrían entonces hacer una capa de deserción encima de eso, lo que solo evita que el exceso de ajuste como ya hablamos antes. En ese punto, podría aplicar una capa aplanada para poder realmente alimentar esos datos a un perceptrón, y ahí es donde un densamente o podría entrar en juego. Tan densa capa y caricia es sólo un Perceptron, de
verdad , Ya
sabes, es una capa de, ah, capa
oculta de neuronas. A partir de ahí podría hacer otro pasado de abandono para evitar aún más el sobreajuste y finalmente hacer un max suave para elegir la clasificación final que sale de tu red neuronal ahora. Como dije, CNN es nuestro intensivo de cómputos. Son muy pesados y tu CPU, tu GP tú y tus requisitos de memoria barajando todos esos datos alrededor involucrándolo se
suma realmente, muy rápido. Y más allá de eso, hay mucho de lo que llamamos hiper parámetros un montón de diferentes perillas y diales que
puedes ajustar en CNN. Entonces, además de lo habitual, puedes sintonizar como la topología de tu red neuronal o qué optimizar a tu usuario, qué función perdida usar o qué función de activación usar. También hay opciones que hacer sobre los tamaños del coronel. ¿ Cuál es el área que realmente involucras a través? ¿ Cuántas capas tienes? ¿ Cuántos años tienes? ¿ Cuánto pooling haces cuando estás reduciendo la imagen hacia abajo? Aquí hay un montón de varios que es casi una cantidad infinita de posibilidades aquí para configurar una CNN y muchas veces. Simplemente obtener los datos para entrenar a tu CNN es la parte más difícil. Entonces, por ejemplo, si quieres de Tesla eso en realidad es tomar fotos del mundo que te rodea en la carretera te
rodea y todas las señales de la calle y semáforos mientras conduces y cada noche manda todos esos imágenes de vuelta a algunos servidores de datos en algún lugar. Por lo que Tesla realmente puede ejecutar el entrenamiento en sus propias redes neuronales basadas en esos datos. Entonces, si te pones en los frenos mientras conduces un Tesla por la noche, esa información se va a apresurar hacia un big data center en algún lugar, y Tesla va a reventar eso y decir:
Oye, ¿ hay un patrón aquí para se enteren de lo que vi de las cámaras desde el auto? Eso significa que debes golpear las roturas en el caso de un auto auto conducido, y piensas en el alcance de ese problema, solo la pura magnitud de procesar y obtener y analizar todos esos datos que se vuelven muy desafiantes en y por sí misma. Ahora, afortunadamente, el problema de afinar los parámetros no tiene que ser un SARD, como lo describí para ser, hay arquitecturas especializadas de convolución, todas las redes neuronales que hacen algunos de ese trabajo para ti. Por lo que la investigación de Lauder entra en tratar de encontrar las disculpas y parámetros óptimos para una CNN por un determinado tipo de problema, y solo podrías pensar que esto es como una biblioteca de la que puedes sacar. Entonces, por ejemplo, está la arquitectura Lynette cinco que puedes usar que es adecuada para el
reconocimiento de escritura a mano. En particular, también
hay uno llamado Alex Net, que es apropiado para la clasificación de imágenes. Es una red neuronal más profunda que Lynette, ya
sabes. Entonces en el ejemplo del que hablamos en la diapositiva anterior, por lo que sólo teníamos una sola capa oculta. Pero puedes tener tantas como quieras liberadas como cuestión de cuánta potencia computacional tienes disponible. También hay algo llamado Google Lynette. Probablemente puedas adivinar a quién se le ocurrió eso. Es aún más profundo, pero tiene mejor rendimiento porque introduce este concepto llamado Inception Module. Básicamente agrupan capas de convolución juntas, y esa es una optimización útil para cómo funciona todo. Por último, la más sofisticada hoy en día se llama rez Net que significa red residual. Se trata de una red neuronal aún más profunda, pero mantiene el rendimiento por lo que se llama skip Connection. Por lo que tiene conexiones especiales entre las capas del Perceptron para acelerar aún más las cosas. Por lo que es algo así como se basa en la arquitectura fundamental de un dedo del pie de red neuronal, optimizar su rendimiento, y como verás CNN, puede ser muy exigente en el rendimiento. Entonces con eso, vamos a darle una oportunidad. En realidad usemos una CNN y veamos si podemos hacer un mejor trabajo en clasificación de imágenes de lo que hemos hecho antes de usar una.
12. Uso de la de la de CNN para el reconocimiento de la escritura a mano: y vamos a revisitar el problema de reconocimiento de escritura a mano M NIST donde tratamos de
clasificar un montón de imágenes de personas están dibujando el número es de cero a nueve y ver si podríamos hacer un mejor trabajo de ello. Usar CNN's contra CNN's son más adecuados para los datos de imagen en general, especialmente si no sabes exactamente dónde está la característica que estás buscando dentro de tu imagen. Por lo que debemos esperar obtener mejores resultados aquí. Muy bien, entonces vamos a empezar importando todas las cosas que de caricia estábamos importando el m este conjunto de
datos que estaban jugando con el modelo secuencial para que podamos armar nuestra red neuronal . Y luego vamos a importar todos estos tipos de capas diferentes de los que hablamos en las diapositivas. El denso abandono calma a De Max, tirando a t y aplanando tipos de capas, y en este ejemplo usará el optimizador de prop RMS. Adelante y patea eso. Y el resto aquí por cargar los datos de entrenamiento y prueba va a quedar igual que antes. Siguen esperando que eso se preocupa por inicializarse ahí. De acuerdo, así que eso debería cargar el conjunto de datos de M nus, vamos a dar forma al estado un poco diferente. Entonces desde ah, convolución, todas las redes neuronales pueden procesar a D datos en todos sus dos d gloria. No vamos a remodelar esos datos en matrices planas una D de 768 píxeles. En cambio, vamos a darle forma en el con veces la longitud por el número de canales de color. Por lo que en este caso, nuestros datos son de escala de grises en naturaleza. Por lo que solo hay un solo canal de color que solo define qué tan amplias son las imágenes el píxel específico. Y hay un par de maneras diferentes en que los datos se pueden almacenar. Por lo que necesitamos manejar un par de casos diferentes aquí. Podría estar organizado como canales de color por con tiempos de longitud o podría ser con tiempos, vidas, canales
de color. Entonces esto es de lo que se trata este pedacito de código aquí. Pero de cualquier manera, veremos si se trata de un primer formato de canales o no, y remodelar los datos en consecuencia. Y vamos a almacenar esa forma en esta cosa llamada forma de entrada. Esa es la forma de nuestros datos de prueba de entrada y datos de entrenamiento, para el caso. Al igual que antes, vamos a escalar estos datos hacia abajo, por lo que viene como datos de ocho bits de byte, y necesitamos convertir eso en punto flotante normalizado en su lugar. Entonces convertiremos esos datos en valores flotantes de 80.0.32 bits y luego dividiremos cada píxel por 2 55 para transformar eso en algún número entre cero y uno. Adelante, hit, turno. Entra ahí para patear eso, está
bien. Y como antes, vamos a convertir los datos de la etiqueta en un formato caliente, categórico porque eso coincidirá muy bien con la salida de nuestra red neuronal y nada diferente aquí. Acabamos de volver a un cheque de cordura para asegurarnos de que importamos con éxito nuestros datos. Por lo que escogeremos un conjunto de entrenamiento aleatorio muestra dedo del pie print aquí en exhibición. Y ahí está el formato uno caliente de los tres etiquetados 0123 Eso es correcto. Formato legible en humanos. Tres. Y así se ve. Ciertamente, eso se parece al número tres, por lo que parece que nuestros datos están en buena forma para su procesamiento. Por lo que ahora realmente pongamos una CNN y veamos cómo funciona eso. Entonces recorremos lo que está pasando en este próximo bloque de código aquí como antes, empezamos configurando un modelo secuencial que solo nos permita construir
capas muy fácilmente para construir aquí nuestra red neuronal. Y vamos a empezar con una calma a distribuidor. Entonces lo que esta sintaxis aquí significa es que nuestra convolución, todas las dos capas d, va a tener 32 ventanas o 32 campos regionales, si se quiere, que usará para muestrear esa imagen con y cada una de esas muestras será alrededor de tres por tres tamaño coronel. También necesita conocer la forma de sus datos de entrada los cuales almacenamos previamente ese CEO ganó por 28 por 28 o 28 por 28 por 28, dependiendo del formato de entrada. Ahí, agregaremos luego una segunda convolución. Todo filtra encima de eso para poder identificar características de nivel superior. Este tendrá 64 coroneles, también un tamaño tres por tres, y vamos a usar una función de activación de acción amarilla en eso también. Por lo que hemos acumulado hasta capas de convolución aquí. Ah, y de nuevo quieres simplemente reutilizar cualquier investigación previa que puedas hacer por un problema dado. Hay tantas formas de configurar CNN's que si comienzas desde cero, vas a tener un momento muy difícil para afinarlo, sobre todo cuando se considera cuánto tiempo se tarda en generar entre cada carrera. Estos son muy intensivos en recursos. Por lo que acabo de sacar esto del ejemplo de CNN que viene con la biblioteca de caricias y sacar de ella
mi topología inicial. Entonces ahora que hemos hecho nuestras capas de convolución, vamos a hacer un max tirando de dos d steptoe, en realidad reducimos eso un poco. Entonces vamos a tomar un tamaño de pool de dos por dos y por cada bloque de dos por dos píxeles en esta etapa, vamos a reducir eso hasta un solo píxel que representa el píxel máximo que se encuentra dentro de ese pool. Por lo tanto, tenga en cuenta que el tamaño de la piscina puede ser diferente del tamaño del coronel subyacente de la convolución. Lo hiciste Así que realmente, esto es solo una técnica para reducir tus datos a algo que es más manejable en este punto. Hará una deserción pasada para evitar sobreajuste. Entonces aplanaremos lo que tenemos hasta el momento. Por lo que eso tomará R dos datos D y lo aplanará a una capa de una d. Y a partir de este punto, sólo
se va a ver como cualquier otra multicapa Perceptron igual que usamos antes. Entonces toda la magia de la CNN ha sucedido en este punto, y ahora sólo la vamos a convertir en una capa plana que ingresamos en una capa oculta de neuronas. En este caso, vamos a tener 128 en esa capa otra vez con un riel. Tu función de activación hará una gota más pasado para evitar sobreajuste y finalmente elegir nuestra categorización final del número cero a nueve mediante la construcción de una capa de
salida final de 10 neuronas con facilidad. Función de activación max suave en él. Está bien, así que sigamos adelante y dejemos que eso vuelva a correr. no pasa nada hasta que realmente arrancamos el modelo, así que eso no toma tiempo en absoluto. Podemos hacer un modelo ese resumen solo para comprobar que todo es la forma en que
pretendíamos que fuera. Y se puede ver que tenemos aquí son dos capas de convolución, seguidas de una capa de agrupación, seguida de una gota de aplanamiento. Y a partir de ahí tenemos una densa deserción en denso multicapa Perceptron realmente hacer nuestras clasificaciones
finales. Muy bien, finalmente, necesitamos compilar ese modelo con un optimizador específico y función perdida. En este caso, vamos a utilizar el Optimizador Adam y la entropía cruzada categórica porque esa es la función de pérdida
adecuada para un problema de clasificación de categorías múltiples. Y por último, en realidad lo
vamos a ejecutar ahora. Como dije, aire de
CNN es muy caro para correr. Entonces cuando hablamos de lo que hace este comando, en
primer lugar, nada inusual aquí sólo dice que vamos a ejecutar lotes de 32 que es más pequeño que antes, porque hay un costo computacional mucho mayor de. Esto realmente llegó a correr 10 épocas esta vez porque de nuevo, lleva mucho tiempo o sería mejor. Pero sólo hay tanto que tenemos tiempo para hacer verbosidad nivel dos porque eso es lo que
quieres elegir para correr dentro de un cuaderno de python ojo y pasaremos en nuestro A datos de prueba de
validación para que funcione con nosotros? Bueno, ahora, realidad no
voy a ejecutar esto porque esto en realidad podría tardar alrededor de una hora en correr, y si no tienes la máquina beefy, podría no terminarlo todo. Ya sabes, si no tienes suficiente ram eran suficiente poder de CPU. Esto podría incluso ser demasiado para un sistema. Entonces me voy a saltar por aquí. En realidad corrió esto antes y sí tomó unos 45 minutos. Pero se puede ver que muy rápidamente convergió a un muy buen Valle de Precisión aquí y seguía aumentando. Por lo que probablemente habría habido valor para ir incluso más allá de 10 iteraciones del entrenamiento aquí. Pero incluso después de apenas 10 en caja o 10 iteraciones, terminamos con una precisión de más del 99%. Y en realidad podemos evaluar eso en base a nuestros datos de prueba y recrear esa precisión del 99%. Entonces eso es algo impresionante. Entonces definitivamente vale la pena hacer CNN si la precisión es clave y para aplicaciones donde están en
juego vidas , como un auto auto auto conducido, Obviamente eso vale la pena el esfuerzo, ¿
verdad? Quieres completa precisión de detección Si hay una señal de stop frente a ti alta Teeley , ¿
verdad? Incluso el error del 0.1% va a ser inaceptable en una situación como esa. Entonces ese es el poder de la CNN. Son más complicados para tomar mucho más tiempo para correr. Pero como dijimos, el poder del tensorflow, que acaricia se está ejecutando encima de significa que podrías distribuir su trabajo a través de toda una nube de computadoras en toda una matriz de GP usan nuestro en cada computadora. Por lo que hay formas de acelerar esto. Simplemente no estamos aprovechando eso en este pequeño ejemplo. Aquí, solo
es ilustrativo. Entonces ahí lo tienes, tu primera convolución, toda red neuronal, y puedes ver lo poderoso que es y haciendo exitosamente la clasificación de imágenes, entre otras cosas. Tan cool, pasemos a otro tipo de red neuronal siguiente.
13. Redes de neurales recurde: Hablemos de otro tipo de red neuronal, la red neuronal recurrente. ¿ Para qué son nuestros y los extremos? Bueno, un par de cosas, básicamente sus primeras secuencias de datos. Y eso podría ser una secuencia en el tiempo por lo que podría usarlo para un procesamiento de datos de series de tiempo . Estamos tratando de mirar una secuencia de puntos de datos a lo largo del tiempo y predecir que el comportamiento futuro es algo a lo largo del tiempo. A su vez, así que no están basadas en respuestas para datos secuenciales de algún tipo. Algunos ejemplos de datos serios en el tiempo podrían ser los weblogs, donde recibes diferentes hits a tu sitio web a lo largo del tiempo, o los registros de sensores estaban obteniendo diferentes entradas de sensores del Internet de las cosas. O tal vez estás tratando de predecir el comportamiento de las acciones mirando
información histórica sobre el comercio de acciones . Estas son todas aplicaciones potenciales para redes neuronales recurrentes porque pueden echar un vistazo al comportamiento a lo largo del tiempo y tratar de tomar en cuenta ese comportamiento cuando haga proyecciones
futuras. Otro ejemplo podría ser Si estás tratando de desarrollar un auto auto auto conducido, es posible que tengas un historial de dónde ha estado tu auto. Sus trayectorias pasadas, y tal vez eso pueda informar cómo tu auto podría querer girar en el futuro, por lo que podrías tener en cuenta que tu auto ha estado girando por una curva para predecir que tal vez deberían seguir conduciendo a lo largo de una curva hasta que el camino se endereza. Y otro ejemplo. No tiene que ser sólo tiempo. Puede ser cualquier tipo de secuencia de longitud arbitraria. Entonces algo más que viene a la mente son idiomas, ya
sabes, frases ahí, solo secuencias de palabras, correcto, por lo que también puedes aplicar nuestros y extremos al lenguaje o máquina. La traducción están produciendo subtítulos para videos o imágenes. Estos son ejemplos de dónde podría importar el orden de las palabras en la oración, y la estructura de la oración y cómo se juntan estas palabras podrían transmitir más significado. Entonces podrías conseguir simplemente mirando esas palabras individualmente sin contexto. Entonces nuevamente, en nuestro nn podemos hacer uso de ese ordenamiento de las palabras y tratar de usar eso como parte de su modelo. Otra aplicación interesante de son un fin es la música generada por máquina. También puedes pensar en música como texto, donde en lugar de una secuencia de palabras o letras, tienes una secuencia de notas musicales. Entonces es algo interesante. En realidad se puede construir una red neuronal que pueda tomar pieza de música existente y una especie de extenderse sobre ella mediante el uso de una red neuronal recurrente para tratar de aprender los patrones que eran estéticamente agradables a la música en el pasado. Conceptualmente, así es como se ve una sola neurona recurrente en cuanto a un modelo. Entonces se parece mucho a una, uh, una neurona artificial que hemos mirado antes. La gran diferencia es este pequeño bucle aquí. De acuerdo, entonces ahora, mientras hacemos un paso de entrenamiento en esta neurona, algunos datos de entrenamiento se alimentan en ella. O tal vez esta es una entrada de una capa anterior en nuestra red neuronal, y aplicará algún tipo de función de paso después de algo todas las entradas en ella. En este caso, vamos a estar dibujando algo más como una tangente hiperbólica porque matemáticamente, quieres asegurarte de que conservemos parte de la información que entra y más de una manera
fluida. Ahora, por lo general acabaríamos de emitir el resultado de esa suma y esa función de activación como la salida de esta neurona. Pero también vamos a alimentar eso de nuevo a la misma neurona. Por lo que la próxima vez que ejecutemos una carrera, algunos datos a través de esta tienda sobre esos datos de la carrera anterior también se suman en los resultados. Vale, Así que mientras sigamos corriendo esta cosa una y otra vez tendremos algunos nuevos datos entrando que se mezclan junto con la salida de la corrida anterior a través de esta neurona, y eso solo sigue pasando una y otra vez . Por lo que se puede ver que con el tiempo el comportamiento pasado de esta neurona influye en su
comportamiento futuro , e influye en cómo aprende. Otra forma de pensar en esto es desenrollándolo a tiempo. Entonces lo que muestra este diagrama es la misma neurona única, sólo un tres tiempos diferentes pasos. Y cuando comienzas a profundizar en las matemáticas de cómo funcionan nuestros fines, esta es una forma más útil de pensarlo. Entonces consideramos que esto es tiempo, paso cero. Se puede ver que entra algún tipo de entrada de datos en esta neurona recurrente y que
producirá algún tipo de salida después de pasar por su función de activación. Y esa salida también se alimenta al siguiente paso de tiempo. Entonces si este es el momento Paso uno con la misma neurona. Se puede ver que esta neurona está recibiendo no sólo una nueva entrada sino también la salida del paso de tiempo
anterior y esos se juntan algunos, la función de activación se le aplica, y eso obtiene salida también. Y la salida de esa combinación luego se alimenta al siguiente paso de tiempo llamado este paso de tiempo a donde una nueva entrada para el tiempo El paso dos se alimenta a esta neurona, y la salida del paso anterior también se alimenta. Se juntan algunos, se ejecuta
la función de activación y tenemos una nueva salida. A esto se le llama célula de memoria porque sí mantiene la memoria de sus salidas anteriores a lo largo tiempo. Y se puede ver que a pesar de que se está juntando algunos a cada paso de tiempo, esos comportamientos anteriores se diluyen, ¿
verdad? Entonces ya sabes, estamos agregando en ese tiempo, paso a ese paso de tiempo y luego las algunas de esas dos cosas que trabajando en esta, por lo que una propiedad de las células de memoria es que el comportamiento más reciente tiende a tener más de un influencia en el comportamiento actual que se obtiene de una neurona recurrente, y esto podría ser un problema en algunas aplicaciones. Entonces hay formas de trabajar en contra de eso de lo que podemos hablar más adelante. Intensificando esto. Puedes tener una capa de Irlanda recurrente, así que no tienes que tener solo una, obviamente. Entonces en este diagrama estamos viendo cuatro neuronas recurrentes individuales que están trabajando juntas como parte de una capa, y se puede tener alguna entrada. Entrar en esta capa es el agujero que se gasta en estas cuatro
neuronas recurrentes diferentes . Y entonces la salida de esas neuronas puede luego ser alimentada de nuevo al siguiente paso a cada neurona en esa capa. Entonces todo lo que estamos haciendo es, ah, escalar esto horizontalmente. Entonces en lugar de un solo Irán recurrente, tenemos una capa de cuatro neuronas recurrentes en este ejemplo, donde toda la salida de esas neuronas se está alimentando con el comportamiento de esas neuronas en el siguiente paso de aprendizaje. De acuerdo, así que nos puedes escalar para tener más de una neurona y aprender patrones más complicados como resultado, no son extremos abren una amplia gama de posibilidades porque ahora tenemos la capacidad de lidiar, no solo con vectores de información instantáneas estáticas de algún tipo de estado. También podemos lidiar con secuencias de datos también, por lo que aquí hay cuatro combinaciones diferentes con las que puedes lidiar. Podemos lidiar con secuencia a secuenciar redes neuronales. Si tenemos la entrada es un tiempo de Siri o algún tipo de secuencia de datos. También podemos tener una salida que es un tiempo de Siri o alguna secuencia de datos también. Entonces, si estás tratando de predecir los precios de las acciones en el futuro con base en operaciones históricas, eso podría ser un ejemplo de topología de secuencia a secuencia. También podemos mezclar y emparejar secuencias con los estados estáticos vectoriales más antiguos que predijimos nuevo con solo usar Perceptron multicapa. Eso llamaríamos una secuencia a vector. Entonces si empezáramos con una secuencia de datos, podríamos producir sólo una instantánea de algún estado. Derivado de analizar esa secuencia. Un ejemplo podría estar mirando la secuencia de palabras en una frase para producir alguna idea
del sentimiento que esa frase transmite desde el último. La gente obtiene eso un ejemplo en breve. Podrías ir al revés, también. Se puede pasar de un vector a una secuencia, lo que un ejemplo de eso sería tomar una imagen, que es un vector estático de información, y luego producir una secuencia a partir de ese factor, por ejemplo, palabras en una frase creando un título a partir de una imagen. Y podemos cambiar estas cosas juntas de maneras interesantes también. Podemos tener codificadores y decodificadores construidos que se alimentan entre sí. Por ejemplo, podríamos empezar con una secuencia de información de,
ah, ah, frase de algún lenguaje, encarnar lo que esa frase significa como algún tipo de representación vectorial y luego darle la vuelta
a eso en una nueva secuencia de palabras en algún otro idioma. Entonces así podría ser como podría funcionar un sistema de traducción automática. Por ejemplo, podría
comenzar con una secuencia de palabras en francés, construir un vector que tipo de encarna el significado de esa frase y luego producir un nuevo secreto de palabras en inglés o en cualquier idioma que desee. Ese es un ejemplo de usar una red neuronal recurrente para la traducción automática. Por lo que muchas posibilidades emocionantes aquí el entrenamiento son y termina igual que el de CNN. Es duro. De alguna manera. Es aún más difícil. El giro principal aquí es que necesitamos retropropagarnos no sólo a través de la
propia red neuronal en todas sus capas,
sino también a través del tiempo. Y en un punto de vista práctico, cada uno de esos tiempos pasos termina pareciendo otra capa en nuestra red neuronal mientras estamos tratando de entrenar nuestra red neuronal y esos tiempos pasos pueden sumar rápido. Entonces con el tiempo terminamos con,
como, como, una red neuronal aún más profunda y profunda que necesitamos entrenar y el costo de realmente realizar Grady y disidencia en esa red neuronal cada vez más profunda se vuelve cada vez más grande. Soto puso una gorra superior en ese tiempo libre de entrenamiento. Cuando limitamos la propagación de la espalda a un número limitado de pasos de tiempo, llamamos a esta propagación truncada a través del tiempo. Entonces sólo algo a tener en cuenta cuando estás entrenando en R N N. No solo necesitas volver a propagar a través de la topología de red neuronal que has creado , también
necesitas un bolsillo trasero propagar a través de todos los pasos de tiempo que te han construido hasta ese punto ahora. Hablamos antes sobre el hecho de que como se está acumulando en nuestro a fin, el estado de tiempos anteriores. Pasos terminan por diluirse con el tiempo porque simplemente seguimos alimentándonos en comportamiento desde el paso
anterior en nuestra carrera hasta el paso actual. Y esto podría ser un problema si tienes un sistema donde el comportamiento más antiguo no importa menos que el comportamiento más reciente. Por ejemplo, si estás mirando palabras en una oración, las palabras al principio de su frase podrían incluso ser más importantes que las palabras hacia el final. Entonces si estás tratando de aprender el significado de una oración, la posición de la palabra en la oración no hay relación inherente entre dónde es
esa palabra y lo importante que podría ser en muchos casos. Entonces ese es un ejemplo de dónde podría querer hacer algo para contrarrestar ese efecto. Y una forma de hacerlo es algo llamado la célula L S. T. M. se extiende por una
célula de memoria de largo y
corto plazo, y la idea aquí es que mantenga ideas separadas tanto de corto como de largo plazo establece, y lo hace de una manera bastante compleja. Ahora, afortunadamente, realidad no
necesitas entender los detalles despejados de cómo funciona. Aquí hay una imagen de la misma para que veas si tienes curiosidad. Pero, ya
sabes, las bibliotecas que utilizas implementarán esto por ti. Lo importante a entender es que si estás tratando con una secuencia de datos donde no
quieres dar un trato preferencial a datos más recientes, probablemente
quieras usar una celda L S T M en lugar de simplemente usar una recta arriba r n. También hay una optimización en la parte superior de las celdas L S T M llamadas celdas G R U que significa unidad recurrente
cerrada. Es sólo una simplificación en las células Ellis TM que realiza casi un oleaje. Entonces si necesitas alcanzar un equilibrio o un compromiso entre el rendimiento en cuanto a lo bien funciona
tu modelo y el rendimiento en cuanto al tiempo que tarda en entrenarlo, Aguiar que vendas podría ser una buena opción. Entrenarlos es realmente difícil. Si pensabas que la CNN era dura, espera a que la VCR y acabe. Son muy sensibles a la topología es que tú eliges y la elección de hiper parámetros. Y ya que tenemos que simular las cosas a lo largo del tiempo, y no sólo a través de ustedes conocen la topología estática de su red. Podrían llegar a ser extremadamente intensivos en recursos. Y si tomas las decisiones equivocadas aquí, podrías tener una recurrente o una red que no lo converja todo. Sabes que podría ser completamente inútil, incluso después de haber corrido durante horas para ver si realmente funciona. Por lo que de nuevo, es importante trabajar en investigaciones previas. Trata de encontrar algunos conjuntos de disculpas y parámetros que funcionen bien para problemas similares a lo que estás tratando de dio. Todo esto tiene mucho más sentido con un ejemplo, y verás que en realidad no está tan duro como suena cuando estás usando caricia Now. Solía trabajar en IMDB, así que no puedo resistirme a usar un ejemplo relacionado con una película. Entonces vamos a sumergirnos en eso siguiente y ver nuestras y termina redes neuronales recurrentes en acción
14. Uso de RNN's para el análisis de análisis de sentimos: lo que vamos a hacer aquí es tratar de hacer análisis de sentimientos. Entonces esto va a ser un ejemplo de una secuencia a vector están en y problema donde estamos tomando la secuencia de palabras en una revisión de película escrita por el usuario. Y tratamos de generar un vector que sea sólo un valor binario único de si a ese usuario gusta o no la película donde dio una calificación positiva. lo que este es un ejemplo de hacer clasificaciones de sentimientos usando datos de revisión de usuarios de riel de IMDB. Y como solía correr, soy departamento de ingeniería de DVS. Esto es un poco demasiado tentador para mí no hacer es un ejemplo aquí. Ahora, ten en cuenta que solo das crédito donde se debe el crédito. Esto se dibuja fuertemente en uno de los ejemplos que envía con caricia la
muestra IMDb l s t M . Tengo una especie de embellecido un poco aquí, pero la idea es que ahí dice dar crédito donde se debe el crédito y sí calienta mi corazón por cierto que incluyen el conjunto de datos IMDb como parte de caricia libre para experimentar. Entonces es ah saltando buenos recuerdos para mí. Disfruté trabajando ahí. De todos modos, este no es otro ejemplo de cómo vamos a usar células L S t M células de memoria
de largo plazo a corto plazo porque de nuevo, cuando estás tratando con secuencia de datos textuales de palabras en la oración, no necesariamente materia donde en la frase aparecía esa palabra. No quieres la propiedad de las palabras hacia el final de la frase contando mawr hacia tus clasificaciones que las palabras al principio de la frase. De hecho, muchas veces es al revés. Por lo que vamos a utilizar una celda L S T m para tratar de contrarrestar ese efecto que se ve en extremos
normales de RN donde los datos se diluyen con el tiempo o a medida que avanza la secuencia en este ejemplo. Entonces, solo zambullémonos y veamos cómo funciona. Empezaremos importando todas las cosas que necesitamos de Caris. Vamos a utilizar módulos de pre procesamiento de secuencia, modelo
secuencial para que podamos incrustar diferentes capas. Juntos, vamos a introducir una nueva capa de incrustación como parte de nuestra y además de la
capa densa que teníamos antes, importaremos el módulo LS tm y finalmente importaremos el conjunto de datos IMDb Así que sigamos adelante y nave entró para hacer todo eso y conseguir que se inicializara la caricia. Y eso ya está hecho. Por lo que ahora podemos importar nuestros datos de capacitación y pruebas. Como dije, Caris tiene un práctico conjunto de datos dandy IMDb preinstalado. Curiosamente, tiene 5000 revisiones de entrenamiento y 25 mil revisiones de pruebas, lo que me parece al revés. Pero es lo que es. El único parámetro que estás viendo aquí para palabras entumecidas, indica cuántas palabras únicas quieres cargar en tu
conjunto de datos de entrenamiento y pruebas . Entonces diciendo números equivale a 20 mil eso significa que voy a limitar mis datos a las 20 mil palabras
más populares y al conjunto de datos. Entonces alguien usa alguna palabra realmente oscura. No va a aparecer en nuestros datos de entrada. Adelante y cargemos eso. Y como sí tiene que hacer algo de pensar, no regresa instantáneamente sino bastante rápido. OK, si estuviéramos en el negocio aquí. Echemos un vistazo a cómo se ven estos datos. Entonces echemos un vistazo a la primera instancia de datos de entrenamiento aquí, y qué diablos, Es solo un montón de números. A mí no me parece una crítica de cine. Bueno, puedes estar muy agradecido con la gente que se preocupa por hacer esto por ti. Entonces la cosa es que
cuando estás haciendo aprendizaje automático en general, generalmente los modelos no funcionan con palabras. Trabajan con números, ¿verdad? Por lo que necesitamos convertir estas palabras en número. De alguna manera es el primer paso, y la caricia ya ha hecho todo este pre procesamiento para ti. Entonces ya sabes, el número uno podría corresponder a la palabra el o yo en realidad no tengo idea
a qué corresponde , Pero han codificado cada palabra única entre cero y 20,000 porque dijimos que queríamos los 20,000 más palabras populares dos números. De acuerdo, entonces es una especie de fastidio que en realidad no podamos leer estas críticas y obtener una especie de significado
intuitivo de lo que dicen estas críticas al aire. Pero nos ahorra todo un montón de trabajo. Y ya he dicho antes que muchas veces mucho del trabajo en el aprendizaje automático no es tanto construir tus modelos y afinarlos. Es solo procesar y masajear sus datos de entrada y asegurarse de que sus datos de entrada se vean bien para ir. Entonces a pesar de que esto no parece una crítica de cine. Se trata de una crítica de cine. Acaban de reemplazar todas las palabras con números únicos que representan cada palabra. También podemos echar un vistazo a los datos de entrenamiento. Por lo que la clasificación de esta revisión en particular fue una que sólo significa que les gustó . Por lo que las únicas clasificaciones son cero y una que corresponde a un
sentimiento negativo o positivo para esa revisión. De acuerdo, entonces tenemos todos los datos de entrada convertidos ya a formato numérico. Eso es genial. Ahora sólo tenemos que seguir adelante y armar las cosas. Empecemos por crear algunos vectores se introdujeron aquí. Entonces vamos a romper nuestros datos de entrenamiento y pruebas aquí. Vamos a llamar secuencias de stop pad de secuencia solo para asegurarnos de que todo tenga un límite en ellas a 80 palabras. Entonces la razón por la que estamos haciendo esto es porque, como dijimos, nuestros y extremos pueden explotar muy rápidamente. Tienes que volver a propagar a través del tiempo. Por lo que queremos tener un encuadernado superior sobre cuántas veces necesitamos volver a propagar. Entonces al decir Max Line equivale a 80 eso significa que solo vamos a mirar las primeras 80 palabras en cada revisión y limitar nuestro análisis a eso. Entonces esa es una forma de truncar nuestra propagación de la espalda a través del tiempo. Es una forma de baja tecnología de hacerlo, pero es efectiva. De lo contrario estaríamos dirigiendo esta cosa por días. De acuerdo, entonces el único punto aquí es recortar todas estas revisiones tanto en el entrenamiento como en los
datos de prueba establecidos a sus 1er 80 palabras, que de nuevo se han convertido en números para nosotros ya. Construyamos el modelo en sí. Oye, realidad no
corrimos. Corre. Eso vamos a seguir adelante. Ish hit, turno, Entrar en esa cuadra. De acuerdo, ahora podemos construir el modelo en sí. Y para una red neuronal tan complicada, creo que es bastante notable lo pocas líneas de código Zehr pasando aquí. Entonces hablemos a través. Esto comenzará por crear un modelo secuencial, lo que significa que solo podemos construir la topología de nuestra red un paso a la vez aquí, por lo que comenzaremos con algún pre procesamiento adicional que estaban usando se llamó capa de incrustación aquí, y todo lo que hace es convertir nuestra fecha de entrada de palabras de a las primeras 80 palabras y dar una revisión en vectores densos de algún tamaño fijo. Entonces va a crear un vector denso de un tamaño fijo de 20,000 palabras y luego embudar eso en 128 hit y neuronas dentro de mi red neuronal. Entonces eso es todo lo que la capa de incrustación está haciendo es solo tomar esos datos textuales de entrada que han sido codificados y convertir eso en un formato que adecuado para la entrada en mi
red neuronal . Entonces, con una sola línea de código, construimos nuestra red neuronal recurrente. Entonces solo decimos, Agregar en L S T M. Y podemos ir por las propiedades aquí una vez que quieran tener 128 neuronas recurrentes en esa capa de Ellis TM. Y también podemos especificar términos de deserción justo en ese mismo comando aquí. Entonces podemos decir que queremos hacer una deserción del 20% y eso es todo lo que hay en ello. Esa línea de código configura la red neuronal R l s T M con 128 neuronas recurrentes y agrega fases de
deserción del 20% todo en un solo paso. Por último, necesitamos reducir eso a una neurona de salida única con una función de activación sigmoide porque estamos tratando con un problema de clasificación binaria, y eso es todo. Por lo que hemos definido la topología de nuestra red con tan solo cuatro líneas de código, pesar de que es una red neuronal muy complicada y
recurrente que utiliza células L S T M y fases de deserción. Pero la caricia hace que todo sea muy fácil de hacer. Entonces necesitamos decirle a caricia cómo optimizar esta red neuronal, cómo entrenarla Así usaremos entropía cruzada binaria porque esto es en última instancia un problema de
clasificación binaria . ¿ A la persona le gustó esta película o no, usará el Optimizador de Adam esta vez sólo porque eso es una especie de lo mejor de ambos mundos para Optimizadores, y entonces podemos iniciarla. Entonces vamos a seguir adelante y correr estos dos bloques anteriores turno, entrar, cambiar, entrar y en este punto, estás listo para entrenar realmente tu red neuronal. Y sólo pasemos por aquí está pasando. Es muy similar a los ejemplos anteriores. En este caso, vamos a utilizar tamaños de lote de 32 revisiones a la vez. Lo vamos a ejecutar más de 15 pasos de entrenamiento o épocas conjunto de capa de verbosidad que es compatible con I cuadernos Python y proporcionar los datos de validación cuarenta también. Ahora, nuevo, realidad no
voy a correr esto ahora mismo porque va a tardar alrededor de una hora. Como dije, nuestros y extremos son duros. Toman mucha computación. Recurso es. Y como todo lo que estoy haciendo es ejecutar esta sola CPU en línea, ni siquiera
tengo cosas configuradas para usar mi GP. Estás mucho menos un clúster de computadoras. Esto lleva mucho tiempo. Pero sí lo ejecuté antes, y se pueden ver los resultados aquí. Por lo que más de 50 Net box, se
puede ver que la precisión que estaba midiendo en los datos de entrenamiento comenzaba a converger. Parece que después de unos 13 pasos, se estaba poniendo tan bueno como iba a llegar. Y entonces además, en realidad
podemos evaluar ese modelo dado el conjunto de datos de prueba. Entonces sigamos adelante y llamemos a Evaluar sobre eso con nuestros datos de prueba nuevamente usando 32 lotes y si fuéramos a correr eso veríamos que terminamos con una precisión del 81% en nuestro modelo aquí . No suena tan impresionante, pero cuando consideras que todo lo que estamos haciendo es mirar las primeras 80 palabras de cada revisión y tratar de descifrar sólo en base a ese comienzo. Ya sea o no a un usuario le guste la película o no, eso no está tan mal. Pero de nuevo, retrocede y piensa en lo que acabamos de hacer aquí. Hemos hecho una red neuronal que esencialmente puede leer comentarios en inglés y determinar algún tipo de significado detrás de ellos. En este caso, lo
hemos entrenado como tomar una secuencia de palabras al inicio de una película, revisar que algún camino humano y clasificar eso como una revisión positiva o una crítica negativa. Entonces, en un sentido muy real, hemos en algún nivel en un nivel muy básico, enseñado a nuestra computadora a leer. ¿ Qué tan guay es eso? Y la cantidad de código que escribimos para hacer eso era mínima, ¿
verdad? Entonces es una especie de calumniación. En realidad es solo cuestión de saber qué técnica usar para construir tu red neuronal, proporcionando los datos de entrenamiento apropiados, y luego tu red neuronal hace el resto. Es realmente un poco espeluznante cuando te sientas y lo piensas de todos modos. Cosas geniales. Entonces es un gran ejemplo de lo poderosa que puede ser la caricia y un gran ejemplo de una aplicación de una red neuronal recurrente no usando el ejemplo típico de datos de trading de acciones o algo así, sino para el análisis de sentimientos donde tomamos una secuencia de palabras y usamos eso para crear una clasificación binaria de un sentimiento basado en esa secuencia, así que las cosas divertidas están en extremos y caricias.
15. Transfer aprendizaje: el mundo de unos ojos en un tiempo extraño y emocionante. Con el aprendizaje por transferencia, nunca había sido más fácil implementar un modelo de inteligencia artificial totalmente capacitado y comenzar a usarlo para problemas del mundo real. Aquí la idea es utilizar modelos preformados ya que están ahí fuera, disponibles en Internet para que cualquiera lo use. Y para muchos problemas comunes, solo
puedes importar un modelo pre entrenado que alguien más hizo todo el arduo trabajo de
armar y optimizar y averiguar los parámetros correctos y la topología correcta y simplemente usarlos. Entonces, por ejemplo, si estás tratando de hacer clasificación de imagen, hay modelos pre entrenados por ahí que solo puedes importar parte del asesinato llamado rez. Net Inception, Mobile Net en Oxford, v G. O algunos ejemplos. Y vienen pre entrenados con una muy amplia variedad de tipos de objetos. Por lo que en muchos casos puedes simplemente dar rienda suelta a uno de estos modelos fuera de la estantería, apuntar una cámara a algo, y te dirá lo que es. Eso es un poco raro. De igual manera, para el procesamiento del lenguaje natural, también
hay modelos pre-entrenados disponibles, como donde Tyvek y guante que puedes usar para básicamente enseñar a tu computadora a leer . Con sólo unas pocas líneas de código. Ahora, solo
puedes usarlos como están, pero también puedes usarlos como punto de partida si quieres extenderlos o construir sobre ellos para problemas más específicos. Por lo que aunque no resuelvan el problema específico que estás tratando de resolver, todavía
puedes usar estos modelos pre entrenados como punto de partida para construir fuera de eso es, sabes mucho más fácil de seguir adelante. No hay que perder mucho tiempo tratando de averiguar la topología y los
parámetros adecuados para un tipo específico de problema. Puedes empezar con ellos todo lo que ya se ha dado cuenta de todo eso para ti y solo sumar encima de ello. A esto se le llama aprendizaje de transferencia. Básicamente, estamos transfiriendo y modelo de tren existente de otra persona a tu aplicación. Ahora puedes encontrar más de estos modelos pre entrenados y lo que se llaman zoos modelo. A uno popular se le llama los Modelos Cafe. Ooh, y es ah, no
estoy seguro de pensar en todo esto. decir, Esdecir,es súper fácil desplegar un I. Ahora, como pronto verás en nuestro siguiente ejemplo, solo
puedes importar unos modelos existentes que modelen y empiecen a usarlo con, solo, ya
sabes, cuatro o cinco líneas de código. No tienes que ser realmente,
Ah, Ah, muy buen desarrollador ya para usar realmente IA para aplicaciones prácticas. Así que tipo de un lugar raro para que la industria esté ahora mismo y como que abre
muchas posibilidades interesantes y potencialmente aterradoras. Cómo la gente podría empezar a usar esta tecnología cuando hay una barrera tan baja para la entrada ahora de realmente usarla de todos modos, Vamos a sumergirnos en un ejemplo del mundo real, y te mostraré lo aterrador fácil que es ahora. Entonces vamos a sumergirnos en el aprendizaje de transferencia. Abre el cuaderno de aprendizaje de transferencia en los materiales de tu curso, y deberías ver esto, y pronto verás lo loco fácil que es usar y lo bueno que puede ser. Entonces vamos a estar usando el modelo resonante 50 aquí. Esto se utiliza para la clasificación de imágenes, por lo que es una manera increíblemente fácil de identificar objetos en imágenes arbitrarias. Entonces si tienes,
ah, ah, una foto de algo Tal vez esta viniendo de una cámara o fotogramas de video o que tienes este comptel te? ¿ Qué hay en esa foto? Bastante confiablemente, resulta. Entonces vamos a ah, divertirnos un poco con él. Entonces solo para probar un punto, voy a probar aquí algunos de mis propios votantes de vacaciones con él. Es así que vamos a estar seguros de que las fotos que le estoy dando a residente 50 para clasificar nuestras fotos que nunca se ha visto antes y ver qué podría hacer con ella. Por ejemplo, tomé esta foto de un jet de combate mientras exploraba los desiertos de California. Vamos a correr eso Esto está incluido con los materiales de tu curso, y ahí tenemos una foto de un jet de combate. Entonces como inicio, veamos si el modelo residente 50 puede identificarlo y ver qué está involucrado en realmente recubrir eso. En primer lugar. Simplemente necesitamos importar los módulos que necesitamos, por lo que necesitamos importar el modelo residente 50 de nuevo que está incorporado en la caricia, junto con varios otros modelos también. Ni siquiera tenemos que meternos en la molestia de descargarlo e instalarlo. Es justo ahí y de nosotros también vamos a las importaciones para gestionar las herramientas de pre procesamiento, tanto desde la propia caricia como forma parte del propio paquete Resident 50. También vamos a importante,
um, pastel, pastel, porque vamos a usar tarta entumecida para manipular realmente los datos de la imagen en un rayo número más alto, que es en última instancia lo que necesitamos para alimentar a un neuronal red. Entonces sigamos adelante y corremos ese bloque ahora. Una especie de limitación del modelo 50 residente es que tus imágenes de entrada tienen que ser a 24 por 2 24 de resolución. Ya sabes, eso es en parte para asegurarse de que pueda funcionar eficientemente. También está limitado a una de las 1000 categorías posibles, y eso podría no sonar como mucho. Pero creo que te sorprenderás de cuánto detalle te dará en cuanto a cuál es la cosa. Entonces sigamos adelante y cargemos de nuevo esa imagen. Esta vez, lo
reduciremos a 2 24 por 2 24 mientras lo estamos cargando,
y lo convertiremos en un pirata entumecido con estas dos líneas de código y luego llamaremos al residente 50 modelos pre entrada de proceso para hacer algo que prepare ese datos. Asumo que lo está escalando hacia abajo a cualquier rango que quiera y tal vez haciendo algún
pre-procesamiento de la imagen en sí para que funcione mejor. Es una especie de caja negra, y eso es un poco. ¿ Qué tiene de raro usar el aprendizaje de transferencia? Ya
sabes, solo estás tomando en la fe que está haciendo lo correcto. Pero desde un punto de vista práctico, eso no es malo para Dio. Vamos a seguir adelante y ejecutar esto bien, así que está pre procesado mi imagen. Eso fue bastante rápido. Ahora cargaremos el modelo real en sí. Una línea de código es todo lo que se necesita. Modelo es igual a residente 50. Los pesos ahí representan que va a usar pesos aprendidos del
conjunto de datos neto de imagen . Por lo que incluso puedes usar variaciones de residentes 50 que fueron entrenados en diferentes conjuntos de imágenes . Ahí potencialmente. Entonces sigamos adelante y cargemos el modelo y eso está hecho. Por lo que ahora sólo podemos usarlo. Por lo que ahora tenemos un modelo de clasificación de imágenes pre-entrenado aquí con una línea de código, y solo podemos usarlo ahora. Todo lo que tiene que hacer es llamar. Predice en ello y ya estamos hechos que eso es todo. Es realmente así de fácil. Entonces probémoslo. Tenemos. Ah, como recuerdan nuestra imagen de jet de caza pre procesada aquí en el rayo X aquí, y solo llamaremos mazos operativos modelados y veremos con qué regresa. Volveré con una clasificación y para traducir eso en algo legible por humanos solo
llamará a la función de predicciones de decodificación que viene con el modelo residente 50
también . Simplemente es así de fácil. De acuerdo, literalmente dos líneas de código aquí, ¿verdad? Decidimos una línea para cargar realmente el modelo 50 residente y transferir ese aprendizaje a nuestra aplicación, si se quiere, especificando un conjunto dado de pesos que se aprendió previamente de un conjunto determinado de imágenes. Y luego solo llamamos, Predice en ese modelo y ya terminamos. Eso es todo. Vamos a ejecutar eso y a ver si realmente funciona. Wow. De acuerdo, entonces, sí, es la máxima predicción fue en realidad avión de guerra, y eso es exactamente de lo que esta es una foto, a
pesar de que nunca se ha visto esta imagen antes, nunca. Y no hice nada para asegurarme de que la foto fuera como desde el ángulo recto o bien enmarcada o algo así o, ya
sabes, pre procesada. Con mucho contraste, solo
funciona. Es un poco espeluznante. Bien. Es segundo adivinado fue un misil seguido de proyectil. Y sí, también había misiles y proyectiles en ese avión. Entonces no sólo me dijo que era un avión de guerra y me dijo que era un avión de guerra que tenía misiles en él. Quiero decir, Wow, eso es Eso es una locura. Bien, ¿verdad? Probemos con algunas otras imágenes. May acabamos de tener suerte. Entonces hagamos un poco conveniente. Ah, funciona aquí para hacer esto en una imagen dada más rápidamente. Entonces vamos a escribir un poco de función clasificar aquí, y empezará mostrando una imagen de lo que estamos empezando a clasificar aquí. Entonces bajará esa imagen hacia arriba, reduciéndola a la dimensión requerida a 24 por 2 24. Convierte eso en una pira entumecida, un pre procesarlo y luego solo llama, predice en el modelo 50 residente y ve con qué regresa. Entonces ahora podríamos simplemente decir clasificar y cualquiera que sea nuestro nombre de archivo de imagen, y nos dirá qué ISS Así que hemos reducido nuestro poco de código aquí a solo una línea ahora, así que ahora puedo solo un hit shift enter para definir esa función. Y ahora sólo podría decir,
Bueno, tengo, tengo, AH archivo llamado Bunny Dodge a Pig y mis materiales del curso. Clasificemos ese turno. Entrar. Hay una foto de un conejo conejito en mi patio delantero que tomé una vez, Y por supuesto, la clasificación superior es conejo seguiría de pelo. Entonces no sólo es decir que es un conejo es decirme qué tipo de conejo realmente no conozco mi especie de conejo,
así que no estoy seguro si eso es realmente un conejo de madera, pero podría ser, Ya
sabes tu camino. Es bastante impresionante. O
sea, ni siquiera es como una pieza prominente de esta imagen. Es algo así como sentarme ahí en medio, mi césped. Ni siquiera está tan claro de una foto, tampoco. Imagina esta escala baja 2 a 24 por 2 24 Realmente no va a haber mucha información ahí, pero todavía se ha descubierto que eso es un conejo. ¿ Qué tal una foto de camión de bomberos de un camión de bomberos y este tampoco es un camión de bomberos normal. Esto es como en ese mismo museo de aviación que tomé una foto de ese avión de guerra de su ah , una
especie de camión de bomberos antiguo que fue utilizado por la Fuerza Aérea. Pero aún así, motor de
bomberos es la máxima predicción. Uh, wow, eso es algo genial. Um, me tomé una foto de mi desayuno una vez en un hotel de lujo en Londres. Veamos qué hace con eso. Un desayuno inglés completo, Mente. Cuando en Londres, uno debe comer. Sus londinenses sí. En realidad, no
sé si realmente sintió el desayuno inglés ahí, pero sigue siendo bueno. Ah, sí. Por lo que recogió que hay una mesa de comedor en esta imagen. Ahí hay una bandeja que contiene mi comida. Un restaurante. Es decir, Bueno, esto en realidad era servicio de habitaciones, pero definitivamente podrías imaginar que eso está en un restaurante en su lugar. Entonces, sí, nuevo, Un trabajo impresionante aquí en una foto aleatoria de vacaciones. Nunca antes se había visto esta imagen. Tomé absolutamente no, uh, no pensé en asegurarme de que esta fuera una imagen que funcionaría bien con el
aprendizaje automático . Inteligencia artificial para clasificaciones de imágenes. Sigamos adelante. Um, cuando era Inglaterra, visité algunos castillos en Gales. Imagen de un elenco vive Las ballenas Dieron Goto. Chicos, ahí
es hermoso. Uh, sí, es un castillo. Eso es todo. Detener la predicción. Segunda conjetura fue un monasterio o un palacio. Ambas buenas conjeturas, Pero sí, es un castillo. Y, ya
sabes, ni siquiera
es un castillo de aspecto típico. Todavía lo había averiguado. Esto es algo increíble. Muy bien, veamos si puedo tropezarlo. También hice un viaje a Nuevo México una vez y visité se llamaba el Array Very Large. Se trata básicamente de una variedad de platos gigantes de radioastronomía con solo 1000 clasificaciones . No me imaginaría que lo hiciera bien. Entonces hay una foto. Es sólo un montón de,
ah, ah, gigantes telescopios radioastronómicos. Y dice que es un radiotelescopio. Uh, ¿hizo esto? Esto es cosa de soplar mente, chicos. Está bien, una más. Una vez me tomé una foto de bridge y recuerdas lo que es Bridget. Puente de Londres. Al parecer eso Vale, qué es este residente 50 un puente colgante. Y también hay aparecer en una valla de cadena y eslabones de cadena ahí dentro también, para buena medida. Entonces Ah, eso es bastante impresionante, ¿verdad? Es decir, así que si necesitas hacer clasificación de imagen. Ni siquiera necesitas conocer los detalles de cómo trabajaban las redes neuronales de convolución l, cómo afinarlas. Y, ah, ya
sabes
como,
construir como, la disculpa correcta y se arregló en los hiper parámetros correctos. Simplemente puedes usar el trabajo de alguien más ya lo hizo, y al usar modelos ooze de los modelos cafe que están en otro lugar por muchos
problemas comunes , te congestionas levantarte y corriendo en un par de líneas de código. Nunca había sido más fácil usar la inteligencia artificial en una aplicación del mundo real ahora. Entonces, aunque es bueno entender los fundamentos, sobre todo si vas a estar haciendo algo que nadie ha hecho antes por problemas comunes de
ai, ha
habido tanta investigación en los últimos años que hay una buena probabilidad que alguien ya ha resuelto el problema que estás tratando de resolver. Y puedes simplemente reutilizar sus resultados si fueran lo suficientemente amables de publicarlos en unas modelos que en algún lugar, Wow ,
así que sí, probaron en algunas fotos propias a mi No si tienes algunos solo tirando el curso materiales y llame a mi función clasificar en él y ver qué hace con él. Simplemente diviértete un poco con él, y también puedes probar algunos modelos diferentes para y ver cómo se comportan de manera diferente. Residente 50 fue en realidad la modelo que mejor funcionó para mis fotos. Pero hay otros modelos incluidos con caricia, entre ellos Inception y Mobile Net que quizá quieras probar. Si sí quieres jugar con ellos, tendrás que regresar para a la documentación aquí. Aquí hay un enlace a ella. Sí necesitas saber en qué dimensiones de imagen espera la entrada, por ejemplo, o alguien trabajando todo. Entonces sí, doy para intentarlo y ah, hombre, es cosa de soplar mente. Los chicos simplemente como,
uh, uh, sentarse ahí y dejar que se hunda en eso es así de fácil usar ai ahora mismo.
16. Afinar redes de orgas: velocidad de aprendizaje y Hyperparameters de tamaño de tamaño de lote: Hablemos un poco de afinar tus redes neuronales. Esto no es algo que se enseña típicamente, pero no estoy tratando de transmitirlo lo mejor que puedo. Entonces hablemos de tasa de aprendizaje. En primer lugar, ¿a qué nos referimos con tasa de aprendizaje? Bueno, hay que entender cómo se entrenan estas redes neuronales. Están usando una técnica llamada gradiente descenso o algo similar al descenso gradiente es varios sabores diferentes de ella por ahí. El concepto básico es que empecemos en algún punto aleatorio de pesos en nuestra red neuronal. Y acabamos de muestrear diferentes soluciones, diferentes conjuntos de pesos tratando de minimizar alguna función de costo que definimos a lo largo de varias épocas. Entonces esas son las palabras clave ahí. Tenemos muchas épocas, iteraciones sobre las que entrenamos. En cada época, intentamos un conjunto diferente de pesos en nuestra red neuronal, tratando de minimizar alguna función de costo, que podría ser la precisión general de
lo bien que hace predicciones en nuestro conjunto de validación. Entonces necesitamos tener algún tipo de rima y razón en cuanto a cómo hacemos esas muestras de diferentes soluciones, diferentes pesos, si se quiere, si fuéramos a hervir esto en una especie de gráfica bidimensional, tal vez se vería algo así, donde sólo estamos tomando muestras de diferentes puntos aquí a lo largo de una curva de soluciones. Y estamos tratando de encontrar la que minimice la función de costo. Entonces ese es el eje y aquí. Entonces lo que estamos tratando de encontrar es el punto más bajo en esta gráfica. Y estamos tratando de llegar allí tomando muestras en diferentes puntos y aprendiendo de cada muestra anterior. De eso se trata el descenso gradiente. Por lo que la tasa de aprendizaje es todo acerca de lo lejos que están esas muestras. Entonces ven aquí podríamos haber empezado aquí y nuestra tasa de aprendizaje dijo: Vale, voy a probar otro punto aquí y volver a intentarlo aquí,
así sucesivamente y así sucesivamente hasta que finalmente encuentre el punto más bajo a lo largo de esta curva y llamar a eso mi mejor solución. Entonces no demasiado difícil de entender el efecto de la tasa de aprendizaje en tu entrenamiento, ¿verdad? Si tienes una tasa de aprendizaje demasiado alta, podrías rebasar esa solución por completo. Entonces imagina que mi tasa de aprendizaje fue enorme y fui directo de aquí a aquí. Podría extrañar ese punto de fondo. Están enteramente si mi tasa de aprendizaje fuera demasiado alta. Pero puedes ver que si mi tasa de aprendizaje es demasiado pequeña, voy a estar tomando muestras de un montón de puntos diferentes aquí. Y va a tomar muchas
épocas, muchos pasos para encontrar realmente esa solución óptima. Por lo tanto, demasiado alto de una tasa de aprendizaje podría significar que rebasé completamente la solución correcta, pero demasiado pequeño para la tasa de aprendizaje significará que mi formación podría tardar más tiempo del que necesita. Ahora, la tasa de aprendizaje es un ejemplo de lo que llamamos hiperparámetros. Es una de las perillas y diales que usas mientras entrenas tu modelo de deep learning que puede afectar su resultado final. Y muchas veces, estos hiperparámetros pueden tener tanta influencia en la calidad de su modelo como la topología del modelo,
la ingeniería de características que ha hecho en todo lo demás. Entonces es sólo otra pieza del rompecabezas aquí a la que necesitas llegar experimentalmente. Además de la tasa de aprendizaje, otro hiperparámetro importante es el tamaño del lote, y este es el número de muestras de entrenamiento que se utilizan dentro de cada época. Ahora, te metió esto en la cabeza chicos, porque es un poco contrario intuitivo. Pensarías que un gran tamaño de lote sería algo bueno, ¿verdad? Cuantos más datos mejor. Pero no, así no es como termina funcionando. Resulta que si tienes un tamaño de lote pequeño, tiene una mejor capacidad para trabajar su salida de lo que llamamos mínimos locales. Entonces en este ejemplo aquí puedes ver que aquí tenemos un minima, una especie de dip en el gráfico aquí, donde tenemos un valor de función de baja pérdida bastante bueno, bonito aquí, para
lo que estamos tratando de optimizar es bastante bueno. Pero existe el riesgo durante el descenso de gradiente de que nos quedemos atrapados en esos mínimos locales cuando de hecho la mejor solución está por aquí en alguna parte. Por lo que queremos asegurarnos de que durante el proceso de descenso gradiente, tengamos alguna habilidad para desviarnos de esta cosa y encontrar esa mejor solución. Resulta que tamaños de lotes más pequeños pueden hacer eso de manera más efectiva que los más grandes. Por lo que un pequeño tamaño de lote puede menear su salida de estos mínimos locales. Pero un gran tamaño de lote podría terminar atascado ahí dentro, como básicamente esperarlo abajo si se quiere. Por lo que los tamaños de lote que son demasiado grandes pueden terminar atascado en la solución equivocada. Y lo que es aún más raro es que porque
normalmente barajarás al azar tus datos al comienzo de cada época de entrenamiento. Esto puede terminar manifestándose como obteniendo resultados muy inconsistentes de ejecución a ejecución. Entonces si el tamaño de mi lote es un poco demasiado grande, tal vez a veces me quede atascado en este mínimo y a veces no lo haré. Y voy a ver que al final los resultados es ver eso de correr a correr. A veces conseguiré esa respuesta y a veces conseguirán esa respuesta, verdad. Por lo que martillado esto en tu cabeza chicos es tamaños de lote
más pequeños tienden a no atascarse en los mínimos locales, pero los tamaños de lote grandes pueden converger en la solución incorrecta al azar. Una gran tasa de aprendizaje puede terminar superando la solución correcta, pero las tasas de aprendizaje pequeñas pueden aumentar el tiempo de entrenamiento. Entonces recuerda esto, escríbalo, cosas
importantes y es de nuevo,
es un ejemplo de cosas que la mayoría de la gente acaba de aprender de la manera difícil a través de la experiencia, pero estoy tratando de enseñártelo hasta la frontera.
17. Regulación de aprendizaje profundo con la eliminación y la puesta puesta en Regularization: Vamos a sumergirnos en las técnicas de regularización en el mundo de las redes neuronales. ¿ Qué es la regularización de todos modos? Bueno, básicamente, la regularización es cualquier técnica que se pretenda evitar el sobreajuste. ¿ Qué es el sobreajuste? Bueno, si tienes un modelo que es bueno para hacer
predicciones sobre los datos en los que se entrenó, pero no le va tan bien en nuevos datos que no ha visto antes. Entonces decimos que ese modelo está sobrecargado. Eso significa que son patrones aprendidos en tus datos de entrenamiento que
realmente no existen en el sentido general en el mundo real. Entonces, si ve una alta precisión en su conjunto de datos de capacitación, pero una precisión menor en su conjunto de pruebas o en su conjunto de datos de evaluación. Esa es la forma en que la naturaleza te dice que podrías estar sobreajustada. Demos un paso atrás aquí. Esta es probablemente la primera vez que utilizo el conjunto de datos de evaluación de palabras. Nuevamente, si eres nuevo en este mundo, en el mundo del deep learning, típicamente hablamos de tres conjuntos de datos diferentes. Por lo que tenemos el conjunto de datos de capacitación. Estos son los datos reales de entrenamiento que se introducen en tu red neuronal de abajo hacia arriba. Y eso es en lo que realmente entrenamos a la red, ¿verdad? Y luego mientras estamos entrenando cada época, podemos evaluar los resultados de esa red contra un conjunto de datos de evaluación. Entonces básicamente ese es el conjunto del conjunto de entrenamiento que se aparta para evaluar los resultados y la precisión de tu modelo a medida que se está entrenando. Y entonces también podemos tener un conjunto de datos de pruebas a que vive fuera de todo eso. Por lo que una vez que tengamos un modelo totalmente capacitado, podemos entonces usar nuestro conjunto de datos de pruebas para evaluar el modelo completo, terminado, si así lo deseas. Entonces, de nuevo, si estás viendo que tu precisión de entrenamiento es mucho más que la precisión medida contra tus datos de evaluación o tus datos de prueba al final, probablemente signifique que estás sobreajustando los datos de entrenamiento. Esta gráfica de la derecha aquí hace que sea un poco más fácil de entender. Entonces imagina que estoy tratando de construir un modelo que simplemente separa las
cosas que son azules de las que aquí son rojas. Entonces si haces un globo ocular con estos datos, tu cerebro puede más o menos averiguar que esta probablemente esta curva que tipo de separa donde está la cosa más azulada y donde está la cosa roja, ¿verdad? Pero en el mundo real, los datos son desordenados. Ahí también hay un poco de ruido. Entonces si, si un modelo que estamos sobreajustando, en
realidad podría aprender esa curva verde ahí que en realidad está entrando y saliendo de todos los datos para tratar de gustarle encajar eso a los datos de entrenamiento. Exactamente. Pero ya sabes, eso es sólo ruido, ¿verdad? Es decir, solo mirándolo, tu cerebro sabe que eso no es correcto. Pero tu red neuronal realmente no tiene esa intuición incorporada en ella. Por lo que necesitamos técnicas de regularización para especie de evitar que eso suceda, para evitar que una red neuronal o cualquier modelo
de aprendizaje automático se curva y ondule y especie de hacer que estas frecuencias más altas pasen fuera del camino para sobreajustar sus datos a su modelo. Está bien, Eso es lo que sobreajuste es es una buena manera de generalizarlo. El llamado respuesta correcta, el modelo correcto sería esa línea negra, pero un modelo sobreequipado sería más parecido a la línea verde. Y esto en realidad es algo que realmente sucede en las redes neuronales. Si tienes una red neuronal realmente profunda con muchos pesos y conexiones y neuronas que están incorporadas en ella. Se puede retomar totalmente en patrones complejos como ese. Por lo que sí hay que tener cuidado con ello. Entonces ahí es donde entra el mundo de las técnicas de regularización. Vamos a entrar en algunos. Entonces una cosa muy simple podría ser, podrías simplemente tener un modelo demasiado complejo. A lo mejor tienes demasiadas capas son demasiadas neuronas. Entonces podrías tener una red neuronal profunda que sea demasiado profunda o tal vez demasiado ancha o tal vez ambas, ¿verdad? Entonces. Al simplificar realmente tu modelo hacia abajo, eso restringe su capacidad para aprender esos patrones más complicados que podrían estar sobreajustados. Entonces un modelo muy simple que es sólo una curva simple como esa,
que probablemente podría lograrse a través de una regresión. A lo mejor estás con un modelo más simple. Y la técnica de regularización más simple es simplemente
usar menos neuronas o usar menos capas. Eso es algo totalmente válido para hacer. A veces hay que experimentar con eso. Entonces si encuentras que tu modelo está sobreajustada, probablemente lo más simple es solo usar un modelo más simple. Prueba, prueba menos capas, prueba menos neuronas en cada capa y ve qué tipo de efecto tiene si aún puedes tener la misma precisión y tu conjunto de datos de prueba, pero no sobreajustarte a tu conjunto de datos de entrenamiento, entonces por qué usar más neuronas de las que necesitas? Otra técnica se llama deserción. Y esta es una especie de interesante. Entonces la idea con una capa de deserción es que en realidad elimina algunas de las neuronas de tu red en cada época ya que está entrenando. Y esto tiene el efecto de básicamente forzar a tu modelo a aprender y extenderse. Es aprender entre las diferentes neuronas y capas dentro de tu red. Por lo que al dejar caer neuronas específicas que se eligen al azar y cada paso de entrenamiento, básicamente
estamos forzando al aprendizaje a extenderse más. Y esto tiene el efecto de evitar que cualquier neurona individual sobreajuste a un punto de datos específico, ¿verdad? Por lo que es un poco contra-intuitivo que en realidad eliminar neuronas de tu red neuronal y hacer que en realidad se entrenen mejor. Pero eso es lo que pasa, eso evita el sobreajuste. Entonces de eso se trata la deserción escolar. Nuevamente, una técnica de regularización muy efectiva. Esto lo vemos mucho en decir CNN por ejemplo, es bastante estándar tener una capa de deserción bastante agresiva como tal vez hasta el 50 por ciento siendo retenida para mí por cada pasado de entrenamiento. Entonces eso es todo deserción es. Es solo eliminar algunas neuronas al azar, en cada paso de entrenamiento para forzar a tu modelo a difundir un poco mejor su aprendizaje. Y eso tiene un efecto de regularización que evita el sobreajuste. Otra solución muy simple se llama parada temprana. Entonces echemos un vistazo a esta huella ya que en realidad estamos entrenando una red neuronal real. Por lo que puedes ver que si miras la precisión en el conjunto de validación, Esa es la columna de la derecha ahí. Hemos pasado del 95 por ciento al 97% y las cosas están mejorando. Y luego de repente nos levantamos a gustar alrededor del 98% y las cosas empiezan a ponerse raras. Empieza a oscilar, ¿verdad? Entonces podemos decir con solo mirar esto, que después de alrededor de la época cinco no estamos haciendo ninguna, ningún beneficio más entrenando más. De hecho, podríamos estar haciendo más daño que bien porque en este punto probablemente estamos empezando a sobreajustar. Y de hecho, si miras la precisión del conjunto de entrenamiento, esa es esa primera columna de precisión, la segunda columna de números que has visto esta pantalla, la precisión en el conjunto de entrenamiento sigue aumentando a medida que entrenamos cada vez más épocas. Pero la precisión en el conjunto de validación prácticamente dejó de mejorar alrededor de las cinco. Por lo que esto está bastante claro empezando a sobreencajar más allá de la quinta época. Está bien. Voy a detenerme temprano es, es una forma de detectar automáticamente eso. Y es un algoritmo que solo diremos, vale, la precisión de validación está nivelada. Mi precisión de entrenamiento sigue aumentando. Probablemente deberíamos simplemente pararnos ahora. Tan temprano parar sólo significa, vale, sé que querías diez épocas, pero puedo ver aquí que después cinco las cosas apenas están empeorando en lo que va el sobreajuste. Entonces vamos a parar a cinco chicos, ya terminamos aquí. Eso es todo. Eso es todo temprano pararse temprano se trata. Es solo asegurarte de que no estás entrenando tu red neuronal más allá de lo que deberías. Y eso evita el sobreajuste. Solución muy sencilla. Ahí.
18. La de de de aprendizaje profundo: Mucha gente está hablando de la ética del aprendizaje profundo. ¿ Estamos creando realmente algo que es bueno para la humanidad o en última instancia, malo para la humanidad? Entonces vayamos ahí ahora. No te voy a predicar sobre cinci en robots que se apoderan del mundo. O sea, tal vez eso sea un problema dentro de 50 años, tal vez incluso antes. Pero para el futuro inmediato, son formas más sutiles en las que el aprendizaje profundo puede ser mal utilizado, que debes preocuparte. Y es alguien que entra al campo, ya sea como investigador o practicante. Depende de ti asegurarte de que esta poderosa tecnología se utilice para el bien y no para el mal. Y a veces esto puede ser muy sutil, por lo que podrías desplegar una nueva tecnología en tu entusiasmo, y podría tener consecuencias no deseadas. Y eso es principalmente de lo que quiero hablar en esta conferencia. Entender las consecuencias no deseadas de los sistemas que estás desarrollando con deep learning. En primer lugar, es importante entender que la precisión no cuenta toda la historia. Por lo que hemos evaluado nuestras redes neuronales por su capacidad para clasificar algo con precisión, y si vemos como un valor de precisión del 99.9% nos felicitamos y nos
palmaditas en la espalda, pero muchas veces eso no basta para pensar. En primer lugar, hay diferentes tipos de errores. Eso es lo que llamamos un error tipo uno, que es un falso positivo. Ahí es cuando dices que algo es algo que no es. Por ejemplo, tal vez te pierdes malinterpretado un tumor que fue medido por algunos ya sabes, biopsia que se tomó de una muestra de mama como maligna, y que el falso positivo de resultado canceroso maligno podría resultar en riel innecesario cirugía a alguien. O tal vez estás desarrollando un auto auto auto conducido, y tu cámara en la parte delantera de tu auto ve una sombra desde un paso elevado frente a ti. Esto realmente me pasa a mí, por cierto, y golpea los frenos porque piensa que el camino apenas se está cayendo en el olvido
en esta masa oscura, y no hay nada para que conduzcas delante de ti. Ambos de esos no son muy buenos resultados. Eso podría ser peor. sí,
quiero decir, posiblemente, es peor dejar un cáncer sin tratamiento que tener un falso positivo o uno. O podría ser peor. Toe en realidad conducir fuera del borde de un acantilado que golpear en tus frenos. Pero el del también podría ser muy malo también, ¿verdad? Necesitas pensar en las ramificaciones de lo que sucede cuando tu modelo se pone algo mal ahora para el ejemplo. El auto auto auto conducido. A lo mejor podría tomar el nivel de confianza de lo que piensa que está frente a ti y tal vez trabajar eso en quién está detrás de ti. Entonces, al menos si haces un golpe en los frenos sin razón, podrías asegurarte de que no haya alguien montando en tu cola va a Rear Andy o algo así. Así que piensa en lo que sucede cuando tu modelo es incorrecto porque incluso una precisión del 99.9% significa que una vez de 1000 vas a entenderlo mal. Y si la gente está usando tu sistema más de 1000 veces, va a
haber alguna mala consecuencia que suceda. En consecuencia, necesitas envolver la cabeza alrededor de qué es ese resultado y cómo quieres lidiar con él. El segundo tipo es un falso negativo, y, por ejemplo, podrías tener cáncer de mama pero no lo detectó. Es posible que haya clasificado mal. Es ser benigno en lugar de maligno. Alguien muere si te equivocas eso. ¿ De acuerdo? Así que piensa muy de cerca en cómo se va a usar tu sistema y las adversidades que
pones en su lugar, y las cajas de seguridad de fallas y las copias de seguridad que tienes que asegurarte de que si tienes un sistema que se sabe produce errores bajo algunos condiciones, usted está tratando con los de una manera responsable. Otro ejemplo de un falso negativo sería pensar que no hay nada frente a los sindicatos, auto
auto conducido, cuando de hecho lo hay. A lo mejor no detecta el auto que se detuvo en un semáforo frente a ti. Esto también me pasa a mí. Qué pasa entonces, Si eres si el conductor no está alerta, chocas contra el auto que tienes delante y eso es realmente malo otra vez. La gente puede morir. OK, entonces la gente está muy ansiosa por aplicar el aprendizaje profundo a diferentes situaciones en el mundo real. Pero a menudo las consecuencias del mundo real de equivocarse algo es un asunto de vida y muerte , literalmente. Entonces necesitas pensar de verdad, verdad, de
verdad,de verdad en cómo se está utilizando tu sistema. Y asegúrate de que tus superiores y las personas que realmente están lanzando esto al
mundo entiendan las consecuencias de lo que sucede cuando las cosas salen mal y las probabilidades de
que las cosas salgan mundo entiendan las consecuencias de lo que sucede cuando las cosas salen mal y las probabilidades de mal. Ya sabes que no puedes vender más tus sistemas está siendo totalmente confiable porque te prometo que no
lo son. También podría haber sesgos ocultos en su sistema. Entonces sólo porque la red neuronal artificial que has construido no sea humana no significa que
sea inherentemente justa e imparcial. Recuerda, tu modelo solo es tan bueno como los datos con los que lo entrenas. Entonces tomemos el ejemplo si vas a construir una red neuronal que pueda intentar predecir si alguien es contratado o no solo en base a atributos de esa persona. Ahora usted, su modelo mismo, puede ser todo puro y lo que no. Pero si lo estás alimentando datos de entrenamiento de humanos reales que tomaron decisiones de contratación que capacitar va a reflejar todos sus sesgos implícitos. Eso es sólo un ejemplo. Por lo que podría terminar con un sistema que es, hecho, racista o de edad o o sexista simplemente porque los datos de entrenamiento que usted le proporciona fueron hechos por personas que tienen estos sesgos implícitos que tal vez ni siquiera hayan sido plenamente conscientes de ellos en el tiempo. OK, así que necesitas tener cuidado con estas cosas. Cosas sencillas que puedes hacer. Es decir, obviamente, hacer una característica real para este modelo que incluya edad o sexo o raza o religión
sería una idea bastante mala, ¿
verdad? Pero puedo ver a algunas personas haciendo eso. Piénsalo dos veces antes de hacer algo así. Pero incluso si no pones implícitamente características que no quieres considerar es parte de tu modelo, podría
haber consecuencias o dependencias no deseadas en tus características en las que quizás no
hayas pensado. Por ejemplo, si estás alimentando en años de experiencia al sistema que predice si
alguien debe o no conseguir una entrevista de trabajo, vas a tener un sesgo implícito en su derecho. Definitivamente los años de experiencia estarán correlacionados con la edad del aspirante. Entonces si tus datos de entrenamiento pasados tenían un sesgo hacia ti sabes, hombres
blancos de veinte años que están recién fuera de la universidad, tu sistema va a penalizar a candidatos más experimentados que de hecho podrían ser mejores candidatos que se aprobaron simplemente porque eran vistos como demasiado viejos por la gente humana. Así que piensa profundamente si el sistema que estás desarrollando tiene sesgos ocultos y qué
puedes hacer para al menos ser transparente sobre cuáles son esos sesgos. Otra cosa a considerar es, es el sistema que acabas de construir realmente mejor que un humano. Entonces si estás construyendo un sistema de deep learning que las personas en tu departamento de ventas o tu dirección o tus inversionistas realmente quieran vender un algo que pueda reemplazar empleos y
salvar a la gente fueran ahorrar dinero a las empresas. Más bien, hay
que pensar en si el sistema que estás vendiendo realmente es tan bueno como un humano. Y si no lo es, ¿cuáles son las consecuencias de eso? Por ejemplo, puedes construir sistemas de deep learning que realicen diagnósticos médicos, y podrías tener un representante de ventas muy ansioso que quiera vender eso es ser mejor que un médico
humano. Es realmente lo que pasa cuando tu sistema it sale mal? ¿ Muere gente? Eso va a ser malo. Sería mejor insistir con sus superiores en que este sistema sólo se comercializa como una herramienta complementaria para ayudar a los médicos a tomar una decisión y no como sustituto de
los seres humanos, tomar una
decisión que pudiera afectar la vida o la muerte otra vez. Auto conducción auto es otro ejemplo donde si te equivocas, si eres un auto auto conducido, realidad
no es mejor que un ser humano y alguien pone tu auto en piloto automático, realidad puede matar a la gente. Entonces ya veo que esto sucede. Ya sabes dónde se están sobrevendiendo los autos auto conducidos y hay muchos casos de borde en el mundo todavía donde los autos auto conducidos simplemente no pueden cortarlo donde podría ser humano, Y creo que eso es muy peligroso. También, piense en aplicaciones no deseadas de su investigación. Entonces déjame contarte una historia, porque esto realmente me pasa más de una vez. En ocasiones desarrollas algo que crees que es algo bueno que se utilizará para un uso
positivo en el mundo real. Pero termina siendo torcido por otras personas en algo que es destructivo, y eso es algo más en lo que debes pensar. Entonces déjame contarte una historia, así que debes pensar en cómo la tecnología que estás desarrollando podría ser utilizada de formas que nunca
anticipaste. Y esos usos pueden ser, dehecho, hecho, maliciosos. Esto realmente me está pasando un par de veces. No estoy hablando teóricamente aquí, y esto no se limita sólo al aprendizaje profundo. Es realmente un problema con el aprendizaje automático en general o realmente cualquier tecnología nueva y
poderosa. A veces nuestra tecnología se adelanta a nosotros mismos como especie, ya
sabes, socialmente. Déjame contarte una historia. Entonces esto no es realmente no se relacionan con el aprendizaje profundo. Pero una de las primeras cosas que construí en mi carrera fue en realidad un simulador de vuelo militar
y un simulador de entrenamiento. Era idea simular el combate en una especie de,
ah,entorno de ah, realidad
virtual con el fin de entrenar a nuestros soldados para que preserven mejor sus propias vidas y, ya
sabes, salgan del campo de batalla con seguridad. Sentí que eso era algo positivo. Oye, estoy salvando la vida de los soldados. Pero después de unos años, la misma tecnología que inventé terminó siendo utilizada en un sistema de mando y control. Estaba siendo utilizado para ayudar a los comandantes a visualizar realmente cómo desplegar
tropas reales y en realidad matar a gente real. No estaba bien con eso. Y dejé la industria en parte por eso. Un ejemplo más relevante. Allá cuando trabajaba en amazon dot com, yo era uno de los hombres que quiero tomar demasiado crédito por esto porque la gente que se acercó las ideas estaba antes que yo. Pero yo fui una de las primeras personas realmente implementando algoritmos de recomendación y algoritmos de
personalización en Internet, tomando tu comportamiento de usuario en Internet y destilando eso hacia abajo en recomendaciones de
contenido para mostrarte. Y eso terminó siendo una especie de la base que se construyó a lo largo de los años. Eso en última instancia llevó a cosas como los algoritmos de segmentación de Facebook es otro ejemplo de eso. Y ya sabes, cuando miro cómo la gente está usando noticias falsas y cuentas falsas en redes sociales para probar dedo del pie , difundir sus creencias políticas o, ya
sabes, algún motivo ulterior que puede ser impulsado financieramente y no realmente para beneficio de la humanidad, no
me siento muy bien por eso,ya
sabes, ya
sabes, me refiero a la tecnología que creé en ese momento solo dedo del pie vendo más libros, cual parecía bastante inofensivo, terminó convirtiéndose en algo que realmente cambió el curso de la historia de formas que podrían ser buenas o malas, dependiendo de tus inclinaciones políticas. Entonces de nuevo, recuerda que si realmente tienes un trabajo en deep learning y machine learning, puedes ir a donde quieras. Si se te pide que hagas algo que sea moralmente cuestionable, no
tienes que hacerlo. Puedes encontrar un nuevo trabajo mañana, ¿de acuerdo? Es decir, este es un campo realmente caliente, y en su momento, cuando tengas experiencia en el mundo real, el mundo es tu ostra. Ya sabes, si te encuentras pidiendo que estés haciendo algo que es moralmente cuestionable, puedes decir que no, alguien más te contratará mañana. Te lo prometo, si eres bueno en absoluto. Entonces veo que esto sucede mucho últimamente. Hay mucha gente publicando investigaciones sobre el uso de redes neuronales para descifrar las
contraseñas de las personas . O Teoh, ya
sabes, ilustra cómo podría usarse para el mal,
por
ejemplo, ejemplo, al tratar de predecir la orientación sexual de las personas sólo en base a una imagen de su rostro. Es decir, esto no puede ir a ninguna parte. Buenos chicos. ¿ Qué estás tratando de mostrar publicando realmente este tipo de investigación? Así que piénsalo dos veces antes de publicar cosas así, piénsalo dos veces antes de implementar cosas así para un empleador porque a tu empleador solo le importa ganar dinero para obtener ganancias. Están menos preocupados por las implicaciones morales sobre la tecnología que estás desarrollando para entregar esa ganancia, y la gente verá lo que estás construyendo por ahí, y probablemente tomarán esa misma tecnología, esas mismas ideas y retorcido en algo que quizá no hayas considerado. Entonces solo quiero que mantengas estas ideas y estas preocupaciones en la parte posterior de tu cabeza, porque aquí estás lidiando con nuevas y poderosas tecnologías. Y realmente nos toca a nosotros como tecnólogos tratar de dirigir esa tecnología en la
dirección correcta y utilizarla para el bien de la humanidad y no para el detrimento de la humanidad. Suena muy, muy alto nivel, predicación de caballos
altos, lo
sé. Pero estas son preocupaciones muy reales, y hay mucha gente por ahí que comparte mi preocupación. Por lo tanto, por favor, considere estas preocupaciones al ahondar en su carrera de aprendizaje profundo.
19. Auto-Encoders variacional (VAE): Muy bien, Es hora de entrar en la parte divertida de este curso. Vamos a hablar de modelado generativo. Esta es la tecnología detrás de todas esas aplicaciones virales que te
permiten intercambiar caras alrededor y envejecer a la gente y cosas así. También la tecnología detrás de falsas profundas, especie de cartel hijo de la discusión de ética que tuvimos antes en el curso, pero te ahorraré mi despotricación en eso por ahora antes de que podamos hablar de redes adversariales generativas sin embargo, que es la tecnología detrás de todas esas cosas. Tenemos que hablar de autocodificadores variacionales, que es el sustento de las redes adversariales generativas. Entonces vamos a sumergirnos en los VAEs primero antes de hablar de autocodificadores variacionales, Hablemos primero de los codificadores de automóviles en general. Tipo de diagrama de cómo funcionan. Por lo que un codificador aprende a reducir la entrada hasta sus características latentes. Entonces ese es un poco el lado izquierdo de este diagrama aquí, la parte amarilla allá. Entonces básicamente tomamos un insumo que a menudo es una imagen. Y al usar convolución, igual que vimos en redes neuronales convolucionales, destiñamos que hasta algún tipo de representación de las características latentes son vectores latentes de esa señal de entrada. Por lo que nuestro codificador ahí se parece mucho a una CNN. Está usando capas convolucionales y max-pooling y todas esas cosas para especie de destilar los patrones en la entrada con la que lo estamos entrenando, hasta estos vectores latentes que estamos representando aquí como la caja z azul en el centro ahí. Entonces nada realmente a nuevo ahí. Del otro lado que tenemos el decodificador, que es básicamente el inverso del codificador. Por lo que se está entrenando sobre cómo reconstruir imágenes completas son datos completos, más generalmente de esos vectores latentes en el cuadro z de ahí. Entonces mediante el uso de convoluciones transpuestas y max d pooling y cosas así. Aprende a tomar esos vectores latentes y
reconstruirlos en una imagen completa o en un conjunto de datos completo. Entonces mientras estamos entrenando esto, el objetivo es tratar de que el insumo y el insumo reconstruido sean lo más similares posible. Eso es lo que estamos tratando de optimizar para ahí. Entonces x debe ser igual a x prime, donde x es las imágenes de entrada originales que lo estamos entrenando en x prime o las imágenes reconstruidas basadas en esos factores latentes, esos vectores latentes que hemos aprendido a través del entrenamiento proceso. Cosas tan interesantes. Ahora el sistema en su conjunto está entrenado de tal manera que la entrada original que en el codificador es lo más cercana posible a los datos reconstruidos generados por el decodificador. ¿ Sabes lo que acabo de decir? Pero déjame intentar hacerlo un poco más ejemplo del mundo real. Digamos que estamos entrenando esto en fotos de zapatos, bien, solo para escoger algo de la nada ahí. Por lo que el codificador destilaría eso
hacia abajo en especie de la esencia de lo que hace un tipo diferente de zapato. Y no va a estar pensando en ello en estos términos. Es sólo una red neuronal, ¿verdad? Pero lo que esos vectores latentes podrían representar en última instancia es que esta cosa se ajusta al patrón de una sandalia, y este tipo de cosas se ajusta al patrón de una zapatilla. Y esta otra cosa se ajusta al patrón de una bota que he aprendido. No sabe etiquetarlos ni llamarlos esas cosas, pero eso es lo que podría aprender en esos vectores latentes en la caja z en el medio ahí. Y el decodificador aprenderá a tomar eso y reconstruir una imagen completa de una bota o una sandalia o una zapatilla basada en ese vector latente de ahí. Y podría haber más que una clasificación, ¿no? Es decir, un vector latente muy simple sería sólo una clasificación de qué tipo de zapato es éste, pero podemos tener más información ahí dentro que sea más matizada. Y eso es un poco la belleza de este sistema es un poco más, un poco más flexible. Y qué, una vez que entrenamos todo el sistema, en realidad podríamos tirar el codificador porque simplemente lo usamos para entrenar realmente al decodificador. Entonces si solo quieres generar imágenes sintéticas de diferentes tipos de zapatos, podrías usar el decodificador para hacer eso y las ideas, puedes generar un montón de imágenes sintéticas generadas de sandalias o zapatillas de deporte o lo que sea al azar si lo quisieras. Y de ahí viene el sustento de todo este tipo de, ya
sabes, rostros fabricados que ves en las aplicaciones virales. Por lo que hay muchas aplicaciones a esto. Es decir, ya sabes, volviendo a la discusión de ética, nadie realmente pretendía que esto fuera utilizado para falsificaciones profundas están engañando a la gente escribe el objetivo original era en realidad para la compresión. Por lo que puedes pensar en esto como una especie de forma silenciosa de comprimir datos hacia abajo. Entonces si quieres tener una forma realmente limpia de decir, solo
quiero tener una foto de una sandalia. Aquí hay una forma de hacerlo con sólo básicamente unos pocos bytes de información potencialmente, donde aprende a reconstruir eso sin ningún ruido. También, se puede aplicar a la reducción de dos dimensionalidad. Obviamente tipo de lo mismo que la compresión. Estamos tomando esa entrada de dimensiones más altas y hirviéndola hacia abajo a esos vectores latentes que hay en su lugar a una representación de menor dimensión. También cuenta con aplicaciones en búsqueda. Por lo que podríamos usar eso para especie de destilar un corpus de datos de texto hasta sus términos de búsqueda relevantes. Des-ruido, podemos, el decodificador se puede utilizar para reconstruir una imagen que no tiene ruido en ella basada en imagen que sí tiene ruido en ella. Esa es otra buena aplicación de la misma. Eso he usado en Photoshop todo el tiempo en realidad. O una coloración también es una aplicación genial. A lo mejor esto entonces se pueda entrenar para reconocer que esta imagen de una persona parece que lleva un par de jeans y esta imagen en blanco y negro. Y en base a la forma y el tono de gris en esa imagen, pensamos que es un par de jeans y tal vez debería colorearlo de azul porque la mayoría de los genes son azules. Entonces otra vez, no es pensar en ello en esos términos, pero esas son las etiquetas que podríamos adjuntar a lo que está pasando ahí bajo el capó. Entonces nuevamente, el truco para hacer esto en el decodificador es usar una convolución de transposición en lugar de las convoluciones. Entonces en lugar de capas
Conf 2D. Estamos utilizando capas transpuestas conf 2D para
reconstruir imágenes a partir de esas características latentes de las que hablamos. Entonces lo que va a estar aprendiendo todos los pesos a usar para crear una nueva imagen con nuevos píxeles a partir de una representación de menor dimensión. Y de nuevo, se puede usar en más que solo imágenes como hablamos, información de
búsqueda y texto es otra aplicación, pero las imágenes son como el ejemplo más fácil para envolver la cabeza por aquí. Entonces con una convolución de transposición, no
estamos destilando las cosas hacia abajo ni encogiendo las imágenes hacia abajo. En realidad los estamos expandiendo a su forma original. Estamos intentando, a menudo lo verás usado con una zancada de dos. También he visto algunos decodificadores donde especie de intersperse intenta golpear de 12 a diferentes capas. Entonces si necesitas más complejidad, pero probablemente verás una zancada de dos por ahí en alguna parte. Y de nuevo, si vas a estar usando max pooling en lugar de max pooling, como hablamos cuando hablamos de redes neuronales convolucionales. Así que piensa en el Dakota o más o menos como una CNN que funciona al revés es una especie de buena manera de envolverte la cabeza alrededor de él. Entonces hablemos específicamente de autocodificadores variacionales. ¿ A qué nos referimos con eso? Entonces en un autocodificador variacional, esos vectores latentes son distribuciones de probabilidad. Y esta es la forma en que podríamos graficar esas, esas distribuciones de probabilidad para un determinado, dado conjunto de categorías o lo que tienes. Por lo que representamos esas distribuciones de probabilidad por la media y varianza de la distribución normal gaussiana. Por lo que un autocodificador variacional está usando específicamente distribuciones normales gaussianas
y las propiedades de esas distribuciones como sus vectores latentes que aprende con el tiempo. Matemáticamente, podemos expresarlo así. El dato de entrada x se expresa como una probabilidad de Z dada X donde Z o son esos vectores latentes. Y entonces podemos reconstruir z usando una probabilidad de X dada Z. Así volteando eso de nuevo en su cabeza para reconstruir la imagen original. Y esta es la inspiración de redes adversariales generativas o GANs. Entonces vamos a llegar pronto. Ya veremos que las GANs son solo otro giro en autocodificadores
variacionales donde es
más general que usar distribuciones normales gaussianas. Algo que vas a ver en el código del que deberíamos hablar es algo llamado las reparaciones. Wow, eso es difícil de decir. Truco de reparametrización. No voy a decir eso otra vez porque eso es un trabalenguas. Entonces un problema matemático con la idea de los VAes es que la distribución de probabilidad que estamos llamando Z no se puede diferenciar. cualquier momento tienes aleatoriedad en la ecuación ahí, estas distribuciones aleatorias que arrojan una llave al cálculo, ¿verdad? Y como podrían recordar de cuando hablamos de formación de redes neuronales, necesitamos utilizar los derivados del sistema para la retropropagación y el aprendizaje real para trabajar, ¿no? Entonces el truco que usamos para movernos eso es
convirtiendo el muestreo aleatorio y z a una forma determinista. Por lo que matemáticamente podríamos llamar a que Z es igual a mu más sigma veces epsilon. Las letras griegas específicas que usó, no importan, en realidad estamos usando diferentes en el diagrama aquí. Pero la idea es que estamos introduciendo este nuevo término de Epsilon o como quieras llamarlo, donde se mueve la aleatoriedad. Por lo que epsilon es la variable aleatoria de la distribución normal estándar aquí. Y al empujar eso hacia fuera en su propio término, eso empuja el paso aleatorio fuera de la red, tiene una entrada y luego podemos tener una gráfica conectada otra vez que realmente podemos diferenciar y realmente hacer entrenamiento sobre y retropropagación. Entonces no voy a meterme demasiado en las matemáticas de eso. Simplemente quiere que sepas qué es eso. También en el tema de las cosas solo necesitas saber cuáles son es Kullback-Leibler o divergencia KL para abreviar. Esto resuelve el problema de medir la distancia entre dos distribuciones de probabilidad. Entonces lo que necesitamos como reentrenamiento para medir la distancia entre las distribuciones de probabilidad de nuestros datos originales y los datos reconstruidos. Queremos que esto esté lo más cerca posible, ¿verdad? Y una forma de medir eso es la divergencia de KL. En ocasiones lo llaman la distancia del movimiento de tierra por una analogía utilizada de cuánta tierra necesitarías moverte para
transformar a Estados Unidos en la forma del Reino Unido. Creo que ese es el ejemplo real usado. Pero es una manera más sencilla de pensar en ello como este diagrama aquí. Digamos que tenemos una, una forma de tres pilas de tres bloques. Es básicamente cuántos bloques tengo que mover para que se vea como nueve pilas de una sola cuadra, ¿verdad? Entonces es solo la cantidad de información que necesito para moverme para hacer que estas dos distribuciones, estas gráficas 2D, se alineen entre sí. Matemáticamente se ve así. Entonces suma de P de x veces el log de P de x sobre q de x, que es equivalente matemáticamente a la entropía cruzada de p y q menos la entropía de P. Así que a veces también llamamos a esta entropía relativa. Y como tal vez recuerden, entropía es una función de pérdida realmente común. Por lo que significa que podemos usar esto como una función de pérdida mientras estamos
entrenando nuestro autocodificador variacional. Y más allá podemos descomponer que como esta función aquí, no
voy a meterme en la derivación matemática de eso. Pero cuando ves esa función, aquí es de donde viene. Esa es la función de pérdida Kullback-Leibler aquí, expresada como podría verlo en TensorFlow. Entonces con eso, sumémonos en un cuaderno y veamos cómo funcionan realmente los VAEs.
20. VAE: práctica con el MNIST de la moda: Muy bien, Vamos a ver autocodificadores variacionales en acción y el pobrecito poco de giro en las cosas. No vamos a utilizar el conjunto de datos tradicional del MNIST de números
escritos a mano ejecutar East LA Fashion MNIST dataset, que en realidad es una pequeña imagen son piezas de ropa, así que mézclalo un poco aquí. Vamos a tratar de hacer es entrenar a nuestro VAE para generar imágenes de ropa. Entonces veamos cómo funciona. Muy bien, así que vamos a sumergirnos aquí, abre el cuaderno de autocodificadores variacionales de los materiales del curso si quieres seguir adelante. Si sí quieres seguir adelante sin embargo, es bastante importante que tengas una GPU disponible,
que tengas instalada la GPU TensorFlow. De lo contrario vas a encontrar que esto tarda mucho tiempo en entrenar. Entonces si no solo te diriges a este enlace aquí en tensorflow.org slash instala slash GPU. Y eso te guiará por lo que necesitas. Necesitarás una tarjeta gráfica NVIDIA y probablemente necesites ir al sitio web
del desarrollador de NVIDIA e inscribirte para tener instalada también la Biblioteca CU DNN. Pero esto te guiará a través de lo que debes hacer si sí quieres seguir y
no tienes instalada la GPU TensorFlow si no sabes si tienes soporte de GPU todo listo. Eso es lo que comprueba este primer bloque. Entonces sigamos adelante y Turnos Entrar aquí. Y solo va a enumerar a cuántas GPU tengo acceso desde TensorFlow. También va a cargar la propia biblioteca TensorFlow. Entonces eso va a llevar un poco de tiempo extra. Puedo escuchar mi disco duro chupando lejos es que carga TensorFlow. Está bien, El chugging, se está desacelerando. Tenemos una GPU disponible. Eso es suficiente. Pero si vuelve a decir 0, probablemente
vas a querer parar en ya sea ir a instalar TensorFlow GPU o simplemente ver el video sin seguir adelante porque de lo contrario tanto los VAes como los GAN tardarán mucho tiempo en entrenar. Muy bien, También vamos a establecer una semilla aleatoria consistente para que pueda obtener resultados
algo consistentes de este cuaderno y no tener sorpresas desagradables. Esto es bastante complicado. Es más difícil de lo que se podría pensar tener una semilla aleatoria consistente y obtener resultados consistentes. Y eso es porque estamos usando una GPU. Entonces estamos haciendo un montón de entrenamiento en paralelo y obteniendo resultados consistentes de eso cuando estás lidiando con condiciones iniciales generadas
aleatoriamente y diversa aleatoriedad dentro del modelo mismo. Incluso eso se puede poner un poco dificil. Incluso con todo esto que estamos haciendo aquí, no
vamos a obtener resultados perfectamente consistentes, pero al menos estará cerca. Entonces sigamos adelante y Shift Enter también en eso. De acuerdo, hablemos un poco de ese conjunto de datos de moda m-nest. Entonces como dije, es como el conjunto de datos del MNIST, el que hemos estado usando antes, donde sólo son dígitos escritos a mano del 00 al nueve, ¿verdad? La diferencia es que en lugar de números, estamos viendo fotos de ropa. Por lo que un poco interesante. Y las diversas clases que tenemos a nuestro alcance, nuestras playeras, pantalones, y pull overs. Supongo que esto vino del Reino Unido o algo que sean pantalones y suéteres de donde vengo. Vestidos, abrigos, sandalias, shorts, sneakers, bolsos y botines. Y así se puede ver ese ejemplo del que hablé en las diapositivas tienen diferentes tipos de zapatos no era teórico. Realmente vamos a estar buscando sandalias, zapatillas y botas de forma independiente aquí. Entonces, empecemos importando nuestros datos en y asegurándonos de que entendemos la dimensionalidad de los mismos. Entonces todo lo que vamos a hacer aquí es cargar el conjunto de datos de moda m-nest, que convenientemente está integrado en conjuntos de datos Keras dot ya para nosotros, aunque eso arriba y solo comprobaremos que todo es como esperamos, 60 mil imágenes de entrenamiento y 10 mil imágenes de prueba. Cada una es de 28 por 28 imagen en escala de grises. Muy bien, Turno Entrar y nada se queja. Entonces todo es como esperamos. Y siempre es una buena idea echar un vistazo a los datos y hacerles una idea antes de empezar a jugar con ellos. Entonces lo que vamos a hacer aquí es complot. se ve esto en una cuadrícula nueve por nueve tomará nueve muestras al azar de nuestro set de entrenamiento 60000 y trazará cada una usando escala de grises. Y veamos si nos acaban de arrancar nueve al azar. Para que veas que tenemos luce como un, supongo que se llamaría bolso de sandalia. Abordemos algunos pantalones o pantalones como lo llaman, bota de
tobillo, supongo. Honestamente, no estoy seguro de qué es eso. Creo que eso es un bolso. Entonces puedes ver que los datos no son los más grandes para empezar, pero eso es lo que los hace desafiante e interesante, ¿verdad? Pero son bonitas para esa cosa. No estoy seguro de qué es eso. Todo lo demás es bastante reconocible como una pieza de ropa. Muy bien, entonces lo primero que tenemos que hacer es preprocesar nuestros datos. Lo primero que vamos a hacer es combinar juntos nuestros datos de entrenamiento y pruebas. ¿ Por qué? Porque esto no es un problema de clasificación no estoy tratando de descifrar es este acercamiento es un par de pantalones. Estoy tratando de crear un sistema que pueda generar imágenes de ropa en general. Entonces porque en realidad no estoy tratando de probar mi capacidad para clasificar estas cosas que prueban dataset con esos datos de etiqueta. Eso me dice si lo clasifiqué bien, no es realmente útil para este problema. Entonces en cambio, solo lo voy a usar para datos de entrenamiento extra. Entonces lo primero que vamos a hacer es concatenar el conjunto de datos de capacitación y
el conjunto de datos de prueba en un único conjunto de datos llamado conjunto de datos creativamente. También voy a agregar una dimensión extra a ese conjunto de datos porque nuestras capas convolucionales esperaban tres canales de entrada, no solo para. También voy a convertir eso a datos de punto flotante y normalizarlo a 0 a uno. Por lo que los datos sin procesar solo van a ser datos enteros de 0 a 255 que representan lo brillante que es ese píxel. Esto realmente transforma eso a un número de punto flotante entre 01 porque los valores de activación sigmoide en nuestro modelo están entre 01. Por lo que solo estamos masajeando los datos aquí para ajustarse a la entrada de nuestras capas convolucionales. Mejor Turno Entrar para ejecutar eso. Está bien, así que ahora las cosas se ponen interesantes. Lo primero que vamos a configurar es nuestra capa de muestreo aquí. aquí es donde ese truco de reparameterización, en realidad lo
ponen bien, entra en juego aquí. Entonces recuerda, necesitamos mover ese componente aleatorio a un término epsilon mientras retenemos a Mu y Sigma, la media y varianza de nuestros datos entrando aquí, en realidad vamos a estar usando el log de la varianza ya que entramos aquí, como verán en breve. Por lo que nuestra capa de muestreo va a ser esta capa personalizada, y tomará las entradas de la varianza media y log. Entonces extraerá cómo, cuál es el tamaño del lote mirando la primera dimensión de la entrada media z entrando. Y la dimensionalidad de esos datos al mirar la segunda dimensión, entonces
calculamos epsilon, ese es el término aleatorio del que hablamos en las diapositivas. Es sólo un número aleatorio normalizado de esa forma que esperamos igualar lo que estamos metiendo para los datos z media que están llegando. Por lo que estamos creando un montón de números aleatorios epsilon en el tamaño de lo que sea que los tamaños de lote veces el número de dimensiones que tenemos. Y lo que regresamos es solo u más sigma veces epsilon. Es un poco más complicado porque de nuevo, estamos usando el registro de la varianza aquí para fines de entrenamiento más adelante. Entonces para convertir eso de nuevo a ocho varianza real, tomamos la exponencial de la de 0.5 veces el log de la varianza. Entonces un poco de álgebra básica ahí. Pero fundamentalmente esto está devolviendo el truco de reparameterización del que hablamos z es igual a mu más sigma veces epsilon. Muy bien, Siguiente vamos a crear realmente nuestro modelo de codificador. Corremos eso antes de que olvidemos Shift Enter. Vamos a estar usando las API funcionales de Keras para construir esto porque es un poco complicado o más complicado de lo habitual. En realidad no es tan difícil. Muy bien, entonces vamos a tener este código o función de edificio. Su trabajo es devolver un modelo Keras para la parte codificadora de nuestro modelo más grande. Empecemos configurando un modelo secuencial que consta de dos capas conf, 2D. Vamos a empezar con un 128. Número de filtros está bajando a 64, entonces
aplanará eso hacia fuera y lo arrojará en una densa capa de 256 neuronas al final. Y a dos, como hablamos. Nuevamente, estos son un poco hiperparámetros, esa topología de esto, el número exacto de filtros que lo usas, cada capa de convolución, esas son cosas con las que puedes jugar. El número de capas de convolución que tienes, cuáles son las zancadas. Por lo que he visto a la gente, como dije, inters dejan una zancada de 12 ahí por más complejidad. Si necesitan más, más neuronas en su modelo para hacer una tarea más compleja. Nuevamente, es mucho juicio y error hacer bien esto. Entonces es una especie de secreto sucio del aprendizaje profundo y mucho es solo experimentación y probar cosas diferentes hasta que veas lo que funciona mejor. Muy bien, entonces vamos a pasar en nuestros insumos por ese bloque convolucional. Entonces simplemente llamamos a ese modelo secuencial que acabamos configurar con las entradas del codificador que entran en esta función, este código de construcción o función. A continuación, crearemos una capa dedicada para aprender la media y la varianza en paralelo. Entonces los estamos enviando a diferentes capas aquí. Uno va a ser una capa densa de la dimensionalidad que pasamos como parámetro para volver a construir codificador, otro hiperparámetro con el que podemos jugar. Uno va a dedicarse a aprender los medios, y otros se dedicarán a aprender los registros de las varianzas a medida que avancemos. ¿ De acuerdo? Entonces llamamos capa de muestreo con la z media y z log Vera que acabamos de configurar ahí. De nuevo, eso es tirarlo aquí donde aplicamos ese truco de reparametrización para combinarlo todo junto. De acuerdo, y regresamos finalmente el modelo real de Keras que está compuesto en absoluto. Pasamos en el modelo con el codificador entradas Z, me, ver log var y los vectores latentes ahí, z. Muy bien, y una pequeña nota aquí en los comentarios aquí para notar que z mean y z log vara o no la salida final de este codificador, pero vamos a alimentar eso en la pérdida de divergencia KL. Y un poco, ahora que tenemos nuestra función para construir el codificador, en realidad lo
usemos. Vamos a configurar aquí nuestra capa de entrada de 28 por 28 por 1. Por lo que de nuevo, nuestras imágenes de entrada de moda m-nest o 28 por 28 con un solo canal de color, solo escala de grises. Llamaremos a ese codificador. Las entradas lo pasan al codificador de construcción con unas dimensiones latentes de tan solo dos. Y los insumos que acabamos de cargar. Y vamos a imprimir el resumen sólo para hacer un chequeo de cordura, Shift Enter. Ves, llegamos allá vamos. Está bien, me parece razonable. Pasando adelante. Ahora necesitamos implementar también nuestro decodificador. Entonces, de nuevo, es una especie de lo inverso de lo que acabamos de hacer. Simplemente vamos a estar usando la transposición 2D tranquila en lugar de 2D tranquilo porque en lugar de tratar de reducir estas imágenes a sus vectores latentes, vamos a estar expandiéndolas de sus vectores latentes a una imagen. Entonces estamos como yendo hacia atrás aquí. El modelo aquí va a empezar con la densa capa alrededor de una remodelación que a 7 por 7 por 64. Y luego configuraremos tres capas transpuestas 2D com, comenzando en 128, filtra hasta 64, y luego finalmente abajo a una sola imagen con la que deberíamos terminar. Un poco confuso potencialmente aquí porque podría decirse a sí mismo, ¿por qué estamos bajando de tamaño aquí cuando estamos tratando de hacer una imagen más grande. Pero esta es la dimensionalidad del número de filtros que estamos aplicando aquí y no del tamaño de la imagen que estamos produciendo. Por lo tanto, ten eso en cuenta. Muy bien, le devolveremos el modelo. Nuevamente, simplemente pasando en ese modelo que lo llamamos L1 aquí con una entradas latentes que se pasan al decodificador de compilación. Y lo llamaremos decodificador. Y entonces realmente lo construiremos cargando la forma de entrada ahí otra vez, la forma que entra es sólo dos porque
creamos el codificador con la dimensionalidad de dos justo encima de nosotros, entonces
llamaremos a Bill decodificador ahí e imprimirá el resumen del modelo decodificador. Turno Entrar. Sí, me parece razonable. Muy bien, Siguiente necesitamos configurar nuestras funciones de pérdida. Sí, plural, hay dos de ellos, y realmente no lo hice explícito en las diapositivas, no lo creo, pero definitivamente aquí es explícito. Por lo que aquí hay dos funciones de pérdida. Una es la pérdida de reconstrucción, y eso es lo que va a estar penalizando imágenes que no son similares a las imágenes originales. Entonces recuerda que nuestro objetivo general es que nuestro decodificador genere imágenes lo más cercanas posible a las imágenes originales que fueron alimentadas en el codificador automático. Y esta es la función de pérdida que mide que solo está usando entropía cruzada binaria en los datos originales encajan y los datos reconstruidos que fue generado por nuestro decodificador. De acuerdo, cosas bastante simples ahí, Turno Enter. Y luego también vamos a medir la pérdida de divergencia KL aquí también. Y de esto hablamos a fondo en las diapositivas de qué se trata todo eso. Entonces no lo voy a volver a repasar, pero sí hablamos de dónde salieron todas estas fórmulas de ahí. Nuevamente, esto está mirando la distancia entre las distribuciones de probabilidad en ambos lados. Por lo que estamos viendo la distribución de probabilidad de los datos originales versus la distribución de probabilidad generada a partir de los datos generados. Y queremos que esos vuelvan a estar lo más cerca posible. Y estamos midiendo eso con la función de pérdida de divergencia KL aquí. Entonces sigamos adelante y definamos eso también. Turno Entrar. Y bueno, necesitamos tener una función de pérdida general al final del día, realmente no
se pueden tener dos funciones de pérdida al mismo tiempo. Entonces eso es lo que hace este siguiente bloque que calcula la pérdida total en función tanto de la pérdida de reconstrucción, que de nuevo sólo está midiendo lo similares son las imágenes originales y reconstruidas entre sí. Y la pérdida de divergencia KL, que de nuevo está midiendo lo cerca que están las distribuciones de probabilidad de cada imagen. Ahora necesitamos combinarlos de alguna manera. Lo obvio sería simplemente tomar la media de los dos. Pero resulta que la ponderación que también es otro hiperparámetro importante que hay que afinar. Entonces puedes ver que nos estamos metiendo bastante profundo en el número de hiperparámetros que necesitan afinación en este modelo en el autocodificador variacional. Por eso es tan difícil que estas cosas se entrenen bien. Ahora este peso KL es básicamente lo que estamos llamando a ese parámetro 3. Básicamente vamos a estar esperando la pérdida de divergencia KL por ese número. Y ese es un parámetro muy importante para efectiva lo buenos que son sus resultados finales, resulta, así que ya he hecho algunos experimentos y asentado en el número de tres, pero tal vez puedas hacerlo mejor. A lo mejor de una manera diferente producirá en realidad mejores resultados para ti. Vamos adelante y Turnos Entrar. Otra vez. Todo lo que estamos haciendo aquí es tomar la pérdida de reconstrucción, llamando a esa pérdida una, la pérdida de divergencia de KL llamando a que perdió dos. Y estamos devolviendo tanto las pérdidas individuales para que podamos mantenerlas al tanto mientras entrenamos. Pero la pérdida total final que realmente vamos a estar optimizando va a ser la pérdida de reconstrucción más el peso de tres veces la pérdida de divergencia KL. Es así como los estamos combinando juntos en la función de pérdida general. Muy bien, adelante. Entonces debido a que tenemos una función de pérdida personalizada, poco
tenemos que hacer nuestro propio modelo personalizado que lo use. La mayoría de este código parece mucho código,
pero la mayoría de nosotros simplemente haciendo un seguimiento de esas diferentes funciones de pérdida para
poder graficarlas y visualizarlas más adelante. Vamos a crear aquí un modelo VAE que deriva del modelo keras dot. Por lo que es solo un modelo personalizado. Vamos a crear aquí nuestro pequeño constructor que acaba de configurar un rastreador de pérdidas totales,
un rastreador de pérdidas CE
y un rastreadores de pérdidas KL. Por lo que esto sólo se va a utilizar para hacer un seguimiento de la pérdida total que combinan pérdida de la que hablamos, eso incluye ese peso en la pérdida de KL, la pérdida de reconstrucción, que aquí se llama pérdida CE, y el pérdida que se llama k l os. Y declaramos esos como todos siendo observables aquí en este bloque de código. Y aquí es donde llegamos a la carne real de nuestro modelo real aquí anulando la función de paso del tren. Por lo que utilizamos una cinta de gradiente aquí en flujo tensor para definir explícitamente cómo funciona el entrenamiento. Para el camino de avance, solo
llamamos codificador autodidacta con los datos entrando. Y eso regresa como vimos arriba, la z media, la z log var y la z misma. Entonces construimos la imagen reconstruida llamando auto dot d codificador y en realidad nos devolverán nuestras imágenes reconstruidas. Por lo que encoder de nuevo está ejecutando nuestro modelo de codificador para reducir esas imágenes a esa distribución de probabilidad Z. Y también estamos haciendo un seguimiento de las medias y varianzas de forma independiente aquí también. Y entonces se llama al decodificador con esa distribución de probabilidad resultante Z para tratar de reconstruir esa imagen. Y estamos llamando a esa reconstrucción. A continuación calculamos la pérdida total entre los dos. Y de nuevo, la pérdida total de calc está mirando
tanto a la pérdida de reconstrucción como a la pérdida de divergencia de KL. Y los vamos a hacer un seguimiento de ambos de forma independiente para poder verlos. Por último, basta con mirar la pérdida total entre los dos para el entrenamiento real mismo que ocurre en la fase de retropropagación, ¿verdad? Si recuerdas, tengo redes neuronales solo funcionan en general. Entonces lo que vamos a hacer aquí es simplemente calcular los gradientes aquí en base a los pesos entrenables que configuramos. Y aplicaremos gradientes simplemente
volteando esos gradientes y los pesos entrenables. Y optimizaremos en esos pesos entrenables. Lo que nos une a todos es usar esa pérdida total aquí que vino de pérdida total de
calc para realmente hornear eso en cómo funciona la retropropagación. Entonces ahí es realmente donde estamos incorporando nuestra función de pérdida personalizada en cómo se capacita este modelo. Nuevamente, vamos a hacer un seguimiento de todas esas funciones individuales de pérdida. Tanto el caos, la pérdida de reconstrucción como la función de pérdida total que combina los dos de forma independiente para que podamos graficarlos todos de forma independiente también. Y hemos regresado los tres solo para que podamos mantenerlos al tanto. Muy bien, Shift Enter para configurar eso no debería tardar mucho, pero este próximo bloque tomará mucho tiempo. Aquí realmente vamos a hacer el entrenamiento. Entonces vamos a configurar nuestro modelo VAE pasando en nuestro modelo de codificador y nuestro modelo decodificador, el modelo VAE los pone todos juntos. Compilaremos ese modelo usando el optimizador Adam. Y esta tasa de aprendizaje es otro hiperparámetro que hay que afinar. Este es uno que tuve que retocar bastante mientras experimentaba con este cuaderno yo mismo. Y por último, llamaremos a fit para realmente hacer el entrenamiento por sí mismo. Vamos a usar 32 épocas de entrenamiento y un tamaño de lote de un 128. Aún más hiperparámetros que necesitan ser sintonizados. En general, más épocas es mejor. Pero si estás encontrando que el modelo no es estable, lo cual es bastante común, más podría no ser mejor. Por lo que de nuevo, se necesita experimentación para ver cuántas épocas realmente necesitas una vez que consigues todo lo demás bien para obtener buenos resultados. Y qué tamaño de lote tiene sentido. Tan fácil de sobreinstalar aquí, muy fácil para, ya sabes, llegar a quedar atascado en un mínimo local y no salir de él. Eso también es algo que sucede mucho cuando estás entrenando estos ajustes. Entonces voy a seguir adelante y patear esto con una GPU. Se va a llevar un tiempo. Entonces lo que voy a hacer es a través de la magia de la edición de video, solo para pausar esta grabación y volver cuando esté hecho, Miremos la primera época corrida al menos aunque antes de hacer eso, creo que el acto de grabar este video fue en realidad compitiendo por recursos en mi GPU. Ahí va. Por lo que se puede ver aquí que podemos ver la pérdida de reconstrucción de la pérdida de KL y la pérdida total se juntan ahí. Y se puede ver como por qué teníamos un peso que KL pierde un poco. Esos son números mucho más pequeños, al
menos al principio comparar con la pérdida de reconstrucción. Por lo que la pérdida de reconstrucción realmente está dominando el comercio este
momento y su contribución a la pérdida total. Y a medida que avanzamos con el tiempo, deberíamos ver que la pérdida de reconstrucción se hace cada vez más pequeña. Y como eso sucede, la pérdida del KL será más de un factor a medida que entrena más adelante. Entonces realmente, cuantas más épocas tengas, mejor
se pone y más entrará en juego la pérdida de KL. Está bien, Otra vez, como dije, solo voy a pausar esto y volver cuando esté hecho. Está bien, eso tardó unos 10 minutos incluso con una GPU, pero nuestro entrenamiento finalmente se ha envuelto y podemos especie de globo ocular lo que pasó aquí mirando las funciones de pérdida reportadas a lo largo del tiempo. Se puede ver que empezamos con una pérdida total de 313 y bajamos a cerca de 266 aquí. Definitivamente puedes ver con solo mirarlo, que realmente fue un poco llegar a un punto de rendimientos decrecientes aquí, en realidad
estaba realmente luchando. cuando llegamos a 31, en realidad volvió a subir a los 32. Por lo que 266 parece ser casi tan bueno como podemos conseguir. Ya sea porque encontró la mejor solución o porque se quedó atascado en un mínimo local. Bueno, supongo que lo averiguaremos. También se puede ver que la pérdida de reconstrucción es realmente mucho mayor que la pérdida de KL. Entonces eso era realmente pagar mucho, jugando un papel mucho más grande que k l pérdidas fuimos. Por lo que podría tener sentido experimentar con el uso de un peso más grande en el k Una pérdida si tienes tiempo, es posible que quieras jugar un poco con eso. Y también es posible que nos quedamos atrapados en un mínimo local aquí, supongo que veremos lo buenos que son los resultados en un momento aquí. Pero de ser así, experimentar con el tamaño del lote podría ser una buena manera de tratar de salir de ese mínimo más fácilmente. De todos modos, podemos hacer un vistazo a lo que está pasando aquí, pero vamos a trazar porque pasamos por toda esta molestia de hacer un seguimiento de todos esos números. Entonces Luke, y aquí en realidad podemos ver plotted la pérdida total, la pérdida de reconstrucción, y la pérdida de KL. Nuevamente, el caos siendo un valor mucho menor. Difícil ver qué está pasando ahí. Y se puede ver que después de sólo un par de épocas aquí, como
que realmente estaba luchando para mejorar y disminuir esa función de pérdida del almuerzo más allá, este caos es difícil de ver porque es tan pequeño en comparación. Así que vamos a acercar y sólo mirar la pérdida de KL de forma independiente aquí. Se puede ver que en realidad estaba empeorando con el tiempo. Entonces eso es algo interesante, ¿verdad? Entonces ya sabes, definitivamente no la dirección que quieres ir por una función de pérdida, pero al menos no fue como, ya sabes, subir exponencialmente, al menos empezó a nivelar. Por lo que esto podría sugerir que el entrenamiento para aún más épocas puede haber sido beneficioso porque estamos empezando a llegar a un punto en el que realmente no pudimos exprimir nada más de la pérdida de reconstrucción, pero hay mejoras en se haga sobre pérdida de KL. Entonces si fuimos más allá y
entrenamos, podríamos haber visto que la ley de KL empieza a caer ya que
básicamente empezó a recurrir a eso para hacer que el modelo sea mejor. Muy bien, entonces veamos qué tipo de resultados tenemos aquí. Entonces solo vamos a escoger al azar un mu de uno y un sigma de varianza de dos y ver qué sacamos. Entonces otra vez, la idea aquí es una especie de ahora que hemos entrenado al modelo, podemos tirar el codificador y simplemente usar el decodificador para construir imágenes sintéticas. Entonces veamos qué nos da una distribución de probabilidad de 12. Entonces solo vamos a llamar al decodificador, pedirle que prediga, realmente generar una imagen basada en la entrada de una coma dos. Y de nuevo, eso corresponde a nuestra media y varianza solo trazará eso como una imagen en escala de grises 28 por 28 y veremos qué recuperamos de ella. Oye, eso es bastante guay. Entonces hemos creado sintéticamente, al parecer un par de pantalones que luce razonable, ¿verdad? Entonces oye, estoy bastante contento con eso. Esa es la capacitación trabajada. Impresionante. Vamos más allá. Entonces, en realidad generemos 256 imágenes ahora totalmente aleatorias. Lo que vamos a hacer es solo adivinar en la distribución Z cada vez con un mu aleatorio y Sigma. Y no te preocupes por adivinar aquí, en realidad
podemos recuperar el mu y
sigma real asociado a cada categoría sistemáticamente, o al menos aproximarlo si queremos. Pero por ahora solo generemos 256 imágenes aleatorias. Entonces solo vamos a adivinar con distribuciones normales aleatorias
tanto para Mu como para Sigma en una escala de cuatro y ver qué recuperamos. Entonces este constructo 256, por lo que esas distribuciones aleatorias llamaron al decodificador en esa matriz entera de valores de entrada y los trazan todos uno a la vez como de nuevo, y 28 por 28 imágenes en escala de grises y una cuadrícula de 16 por 16. Y ahí lo tenemos. 256 imágenes generadas sintéticamente de cerradas. Y estos son en realidad bastante malditamente buenos. Wow, estoy contento con eso. Entonces sí, quiero decir, esto no es realmente mucho peor que las imágenes de origen realmente. Entonces creo que tuvimos suerte esa vez y en
realidad nos tocamos con una solución real aquí durante el entrenamiento, sí, veo, ya sabes, suéteres,
veo camisas , veo pantalones, veo sandalias, veo botines. Sí, realmente tuvimos suerte en este. Tan buenos resultados, diría que hasta ahora. Entonces eso está todo bien y bien. Podemos generar imágenes aleatorias de piezas de ropa. Pero ¿y si quiero generar un tipo específico de una pieza de ropa? ¿ Cómo hago eso? ¿ Y si solo quiero dibujar un par de sandalias o algo así, verdad? Bueno, una forma de hacerlo sería simplemente ejecutar
un caso conocido de una categoría dada a través del codificador, observar el Mu y Sigma que regresaron del codificador para esa imagen y enviar eso de nuevo al decodificador para tratar de conseguir una imagen similar a la que acabas de pasar al codificador, ¿
verdad? No es perfecto. No es una forma totalmente concreta de hacerlo. Hay algo llamado
autocodificadores variacionales condicionales si quieres un enfoque más concreto para hacer esto, pero esta es una forma razonable de hacerlo. Ya sabes, toma una foto de una camisa y ponla al decodificador y di, quiero una foto que se vea así y probablemente te pongas una espalda corta. Entonces, solo escojamos al azar un número de imagen ciento,
doscientos ochenta, lo que sea en nuestro conjunto de datos de capacitación. Voy a seguir adelante y ampliar eso en tres dimensiones en como el codificador espera que sea. Y sigue adelante y convierte eso a un valor de punto flotante entre 01, va a imprimir la forma de eso solo para volver a comprobarlo, enviarlo a nuestro codificador, pedirle que prediga qué será
esa distribución de probabilidad terminan siendo para esa imagen específica. Y luego pasaremos esa distribución de probabilidad a nuestro decodificador para recuperar una imagen sintetizada. Y veremos qué es exactamente esa distribución de probabilidad simplemente escribiendo z al final ahí para imprimirla. Turno Entrar. Está bien, para que podamos verificar que tenemos una imagen de 28 por 28 por 1. Son justo como esperábamos. Y lo que volvió del codificador fue una distribución de probabilidad con una media de 0.427 negativa y una varianza de 1.259. Está bien, genial. Entonces sigamos adelante y tomemos esa distribución y veamos qué nos da. Por lo que ya llamamos al decodificador en eso y guardar el resultado en sintetizado visualizar qué sinth pecado. Y lo visualizaremos al lado de la imagen original también. Por lo que configurar una parcela aquí. Vamos a trazar la imagen de entrenamiento que introdujimos en el codificador para conseguir una cosa a la que ser similar. Y volverán a escupir esa imagen sintetizada que debería ser similar a ella. Entonces Turno Entrar. Y sí, claro, resulta que la imagen número 11280 es dirección, y recuperamos una forma que se parece a dirección. Por lo que al hacer esto, pudimos sintetizar una categoría específica de cierre. Entonces esa es una forma de seguir usando ese VAE. Otra cosa para la que puedes usar los VAes es básicamente el aprendizaje sin supervisión. Entonces visualicemos qué buscan esas distribuciones de probabilidad si a, las
coloreamos por las clasificaciones reales conocidas. Entonces voy a alimentarme en etiquetas desde nuestros datos de capacitación y prueba aquí hasta este gráfico y
trazar los medios y varianzas a lo largo de todo nuestro conjunto de datos allá desde el codificador. Por lo que vamos a lanzar todo el conjunto de datos en nuestro codificador, graficar, las distribuciones de probabilidad resultantes, y colorear las basadas en sus categorías conocidas. Lo tengo. Sigamos adelante y Shift Enter y veamos cómo se ve eso. Y ahí lo tienes. Para que veas que estamos viendo esos cúmulos. En realidad podemos visualizar que hay distribuciones de probabilidad distintas, estos diferentes tipos de ropa. Entonces no sé qué representan estos diferentes colores. A lo mejor los morados son pantalones y serían los verdes son vestidos. No lo sé. Pero se puede pensar en esto como una forma de aprendizaje no supervisado donde esas diferentes áreas distintas de distribuciones de probabilidad probablemente correspondan a clasificaciones, diferentes tipos de cosas en nuestros datos fuente. Entonces si no supiera cuáles eran esas etiquetas antes de tiempo, tal vez podría inferirlas indagando en lo que estas diferentes distribuciones de probabilidad atan en nuestros datos fuente. Por lo que otra posible aplicación de los VAEs, aprendizaje
no supervisado de categorías. Pero la aplicación más interesante es en generar imágenes sintéticas. Y a continuación nos basaremos en eso con las GANs.
21. Redes de publicidad Generative (de GAN): Muy bien, Ahora que tenemos autocodificadores variacionales bajo nuestro cinturón, hablemos de redes adversariales generativas. Es una idea similar pero diferente, ya
sabes, lo suficientemente diferente como para que sea cosa propia. Sí, esta es la tecnología detrás de las falsificaciones profundas y todas esas aplicaciones de cambio de cara viral en aplicaciones envejecidas que has visto antes. Por ejemplo, esta es una imagen de alguien que no existe. Este es el resultado de una red adversarial generativa que acaba de ser entrenada sobre cómo generar imágenes de aspecto realista de cabezas de personas. Cosa real. Sí, y de nuevo, no voy a meterme en la ética de esto. Ya te dimos conferencias sobre eso antes en el curso. Pero esta es la tecnología detrás de las falsificaciones profundas, pero también es la tecnología detrás de todas esas aplicaciones virales que ves para el intercambio de caras en personas envejecidas, en hacer que la gente parezca personajes de Disney y todas esas cosas, ¿verdad? Investigador así tenía intenciones más nobles para este trabajo. Originalmente, algunas de las aplicaciones proyectadas, estamos generando conjuntos de datos sintéticos si tienes información privada. Entonces esto es especialmente útil en el campo médico donde no
puedes obtener fácilmente datos reales de entrenamiento debido a las leyes de privacidad, ¿verdad? Entonces si estás tratando de generar una nueva red neuronal que pueda aprender a detectar cáncer de mama o algo así. Es difícil obtener datos reales para que eso lo capacite. Pero al capacitar a un GAN sobre datos reales, podemos una especie de entrenarlo sobre cómo hacer conjuntos de datos sintéticos que estén muy cerca de los originales pero sin ninguna información privada real en él. Entonces esa es una aplicación práctica de GAN que no es solo una aplicación viral en tu teléfono. También se puede utilizar para la detección de anomalías. Se puede utilizar para comparar una imagen con lo que piensa que debe ser
una imagen y detectar anomalías automáticamente de esa manera. También cuenta con aplicaciones en autos autoconducidos. Cuenta además con aplicaciones en arte y música. Ya sabes, podrías entrenar un GAN sobre cómo
crear una obra de arte al estilo de Picasso o lo que sea tu artista favorito, o cómo generar una sinfonía y el estilo de Beethoven o Mozart. Y esta cosa realmente funciona. Se pueden generar piezas de arte sintético y obras sintéticas de música utilizando GANs que son bastante convincentes. Entonces cuando ustedes todas estas impresionantes demos de una IA que hizo su propia sinfonía, así es como funciona y creo que eso está a punto de desmitificarse para ustedes. En realidad no es tan complicado como se podría pensar. De acuerdo, así que para entender cómo funcionan realmente los
GAN, hay que realmente fideos en
este diagrama aquí, esto realmente resume cómo todo se junta. Y como puedes ver, no es tan difícil, ¿verdad? Entonces es bastante simple. Entonces, en primer lugar, no asumimos distribuciones normales
gaussianas en los vectores latentes que estamos aprendiendo como los VAEs. Podría ser cualquier cosa en el caso de las GAN. Pero lo que realmente es diferente aquí es que estamos mapeando el ruido aleatorio en nuestro generador a distribuciones de probabilidad o lo que sea que terminen siendo. Y al hacer eso, tomando ruidos aleatorios y entrada, podemos generar aleatorios, lo que sea como la salida de éste, de este generador. Entonces el generador aprende a tomar algún tipo de señal
aleatoria y hacer una cara aleatoria o una pieza de música aleatoria, o un arte aleatorio, o un conjunto de datos aleatorios, ¿verdad? Entonces ahí es donde entra esa aleatoriedad como entrada al generador ahí. Y del otro lado tenemos un discriminador que está tratando de aprender Cuál es la diferencia entre las imágenes
reales en las que estoy entrenando el sistema en su conjunto versus las imágenes generadas provenientes del generador. De acuerdo, Entonces este es realmente el corazón de todo. Tenemos este generador que está aprendiendo a generar cualquier tipo de imágenes o, o datos que estamos tratando de crear. Y el trabajo de los discriminadores es detectar si esas imágenes generadas se pueden distinguir de las imágenes reales en general, ¿no? Entonces vas a estar entrenando esto en un conjunto de imágenes de rostros de ejemplo. Entonces démosle un montón de imágenes reales de cara. El discriminador va a estar aprendiendo a distinguir esos rostros reales de los rostros generados en general. Y cuando llegó al punto donde el discriminador ya no puede decir la diferencia. Ahí es cuando terminamos de entrenar. Por lo que tiene esta red adversarial adversa pasando aquí. El lado adversarial es que el generador está en adversario del discriminador. Por lo que el generador está tratando de engañar siempre
al discriminador para que piense que la imagen es que está creando son reales. Y el discriminador está tratando de atrapar al generador en la mentira, ¿verdad? Entonces hay una especie de intención el uno con el otro. Y eso hace que sea algo muy complicado entrenar, ya sabes, en prácticas es un sistema muy frágil para realmente ponerse en marcha. Pero una vez que funciona, funciona muy bien. Y por eso digo que una vez que el discriminador
ya no puede decir la diferencia entre las caras reales y
las caras generadas son las reales lo que hay en los generados lo que estamos haciendo entrenamiento en teoría. Porque en la práctica es realmente difícil conseguir esto entrenado ¿verdad? Es, hay una tonelada de hiperparámetros que sintonizar. Termina siendo muy inestable. Por lo que se necesita un montón de prueba y error para realmente entrenar una de estas cosas y obtener buenos resultados de ella. Pero cuando tomas ese esfuerzo, terminas con algunas cosas bastante impresionantes de GAN. Entonces antes de seguir adelante, quiero dejarte una especie de fideos en ese diagrama un poco más porque este es realmente el corazón de entender a GAN. Entonces, vale, entonces tenemos ruido aleatorio que estamos usando que es entrar en un tren, un generador que aprende a generar, fabricado lo que sea que se enfrente en este ejemplo. Entonces estamos entrenando el sistema en su conjunto con caras reales también. El discriminador está siendo entrenado para distinguir lo real de las imágenes o datos falsos. En general, están con el tiempo el discriminador tiene un tiempo cada vez más difícil de aprender lo que es real y falso ya que un generador se pone mejor y mejor en generar imágenes falsas convincentes. Llegaremos a un punto una vez que el discriminador ya no pueda decir la diferencia, tenemos aquí una red adversarial generativa realmente bien entrenada. De acuerdo, así que ese es un poco el corazón de ello. Estamos capacitando a un generador cómo generar datos falsos, un discriminador que está capacitado en cómo distinguir la diferencia entre datos reales y datos falsos. Y cuando estas cosas se juntan, tenemos un generador que puede generar cosas que el discriminador no puede decir la diferencia entre de las cosas reales. ¿ De acuerdo? Matemáticas de fantasía. Esto es a lo que todo se reduce. No va a meterse demasiado, pero esa es la función de pérdida adversarial para el sistema en su conjunto. Nosotros lo llamamos un juego min-max, así que vale la pena hablar de eso. Nuevamente, el generador está tratando de minimizar su pérdida y crear imágenes realistas. En tanto que el discriminador está maximizando su capacidad para detectar, para detectar falsificaciones. Entonces es cuando decimos Min sub g, eso es un generador minimizando su pérdida y max sub D ahí está el discriminador maximizando su capacidad para detectar falsificaciones. Entonces eso es lo que todo eso significa en términos de las matemáticas de fantasía. Yo como dije, todo es muy complicado y delicado. El entrenamiento puede ser muy inestable. Hay mucha afinación, mucha prueba y error involucrados para que funcione bien. Y sólo en hacer el cuaderno que estamos a punto de mirar, tomó mucho tiempo para juntarlo y se obtiene resultados medio decentes de él. También puede tardar mucho tiempo en entrenar, una gran cantidad de recursos computacionales para entrenar. Pero una vez que lo tienes, es una forma muy eficiente de crear imágenes falsas de caras o lo que sea que estás tratando de crear algunos otros problemas que se topa con esos algo llamado colapso del modo. Entonces un problema es que si tienes diferentes tipos de algo, ya
sabes, diferentes tipos de caras, diferentes tipos de fotos de zapatos, lo que sea. El sistema sólo puede aprender a hacer una de esas cosas de manera muy eficiente y muy convincente. Y eso seguirá resultando en una función de baja pérdida en todo el sistema. Entonces no es raro, por ejemplo, si estás tratando de entrenarlo como crear imágenes falsas de zapatos. Para que solo aprenda realmente a hacer imágenes falsas de una sandalia. Y ese es un problema que se llama colapso del modo, donde acabamos de aprender a hacer realmente bien un tipo específico de cosas. Pero no es tan general como queremos que sea. También sufre mucho el problema del gradiente de fuga. Hablamos de eso antes en el curso. Y con eso, vamos a entrar en algunos ejemplos de ver GANs en acción porque creo que tiene mucho más sentido cuando un poco
ve lo que está sucediendo en tiempo real bajo el capó. Y luego nos sumergimos en un cuaderno y en realidad nos pondremos manos a la obra con el uso de uno.
22. Demos de GAN y entrenamiento en vivo: Por lo tanto, para ayudarte a entender cómo se capacitan las GAN, veamos aquí algunos ejemplos interactivos prácticos. Y luego después de esto, pasaremos por un cuaderno para pasarlo con más detalle. Pero una herramienta realmente agradable para visualizar cómo funciona esta capacitación es el laboratorio de GAN aquí. Y hablemos de lo que está pasando aquí. Entonces en lugar de comenzar tratando de generar imágenes falsas, Empecemos con algo más simple, más fácil de envolver nuestras cabezas. Sólo elijamos una distribución de datos bidimensional aquí. Entonces lo que voy a hacer es intentar crear un GAN que aprenda a crear un anillo. ¿ De acuerdo? Por lo que tenemos esta distribución de puntos 2D en esta forma general de anillo aquí. Y lo que queremos hacer es entrenar un GAN para tomar una entrada aleatoria y una distribución generada aleatoriamente que coincida con eso lo mejor posible. Entonces en esta visualización, vamos a ver los puntos de datos reales trazados en verde. Esto viene de nuestra distribución real y las falsas que está creando nuestro generador se mostrarán en morado mientras entrenamos. Y a medida que avanza el entrenamiento, podremos visualizar en un mapa de calor, las funciones de pérdida del generador y del discriminador. Entonces a medida que vayamos veremos que el discriminador tratando de clasificar estos puntos es real o falso. Y lo que deberíamos ver es que
eventualmente debería converger alrededor de una especie de forma de anillo donde identifica las cosas en el anillo como reales y las cosas que están fuera del anillo como falsas. Y en realidad podemos ver con el tiempo lo bien que el generador está haciendo un complicado el discriminador y lo bueno que el discriminador está haciendo un decir real y falso aparte. Entonces sigamos adelante y pateemos esto. Vamos a golpear juego y podemos verlo en acción. Entonces puedes ver que nuestros datos falsos aquí, es un poco como ir por todo el lugar aquí al principio ya que empieza a aprender. Pero bastante rápido va a empezar a caer en cada vez más una forma de anillo. Y podemos ver a nuestro discriminador aquí, mapas de calor. Entonces ahora mismo el discriminador está diciendo, vale, los falsos están por aquí, ellos están aquí. El morado de nuevo es falso y el verde es real. Y ya podemos ver que estamos consiguiendo una especie de este anillo, este círculo aquí de blanco, donde va a empezar a poner esa clasificación real verde alrededor ese anillo y una clasificación falsa morada en todas partes. Y a medida que continuamos y debemos ponernos más apretados y más apretados ya estamos viendo que generaron muestras falsas moradas
tratando de conseguir cada vez más dentro esa distribución real que vino de la distribución original de datos reales ahí. Y echemos un vistazo a las métricas por aquí. Entonces podemos ver que con el tiempo la función de pérdida de discriminadores está disminuyendo pero un poco manteniéndose estable porque está empezando a hacerse cada vez más difícil distinguir a los dos, ¿verdad? Pero la función de pérdida del generador está empezando a estabilizarse aquí. Podría ser mejor. Aquí se ponen un poco inestables. Podemos ver que ya tenemos una especie de tal vez golpeó a un mínimo local ahí y un poco se puso un poco inestable ahí. Y es un poco tratando de trabajar su camino de regreso a algo mejor. Y de nuevo, ya sabes, lo que pasa con las GAN es que son muy inestables. Por lo que realmente se necesita justo el conjunto adecuado de hiperparámetros para que esto funcione bien en un golpe de suerte. Suerte, francamente, porque hay algunos componentes aleatorios al entrenamiento que está pasando aquí. Pero eventualmente sí parece estar volviendo a donde debería estar aquí. Creo que es salir de eso y empezar a volver a donde quiere estar. Tenemos una especie de esta rara forma de media luna
pasando al discriminador ahora mismo que obviamente no es correcto. Las formas circulares son notoriamente difíciles de aprender. Y esas muestras generadas realmente están cayendo en una línea. No son realmente un círculo que en realidad fuera mejor temprano, antes. Oh espera, espera, creo que estamos volviendo a un mejor estado aquí. Muy bien, ahora estamos empezando a converger a algo que se ve un poco mejor. Sí, se puede ver eso empezando a estabilizarse. Y podemos ver en el pasto aquí que la función de pérdida del generador está disminuyendo. El discriminador perdida-función está empezando a estabilizarse. Esos son todos bastante buenos signos. Pero de nuevo, ya sabes, no impresionante. Podemos ver el colector general del generador aquí. No es realmente esa forma de círculo, pero al menos se está acercando. Eso se está cayendo del borde aquí con esa distribución. Y realmente no puede parecer salir de eso en este caso. Entonces estamos un poco atrapados aquí. Parece que si lo volviéramos a empezar, probablemente
obtendríamos resultados diferentes. Entonces, intentémoslo de nuevo. Ahora tenemos una mejor sensación de lo que está pasando. De acuerdo, así que de nuevo, estamos, el generador se pone un poco más afortunado esta vez en realidad nos estamos metiendo en más de esa forma de círculo un poco antes sobre lo que parece. Y podemos ver que las funciones de pérdida son más o menos estables aquí. Porque de nuevo, como que adivinamos correctamente desde el principio, aun así conseguimos algunas de esas muestras falsas en el medio ahí donde no deberían estar. Ya veremos si eso mejora con el tiempo. Esto empezó a lucir mejor. Ese generador son múltiples, hay silicio más circular. discriminador sigue un poco enfocándose en ese cuadrante superior derecho de ahí. Pero en general los resultados no son tan malos. Y ahora estamos empezando a lucir bien. Entonces ahora el discriminador está realmente consiguiendo esa forma de círculo y aprendiendo eso para que cualquier cosa fuera de ese círculo, sepa que es falso. Y al mismo tiempo el generador empieza a volverse un poco inestable otra vez. Entonces otra vez, es inestable, ¿verdad? Entonces estamos aprendiendo aquí que las GANs son difíciles de entrenar. Pueden volverse inestables, consiguiendo esos hiperparámetros y el número de épocas apenas golpeando el tamaño del lote. Simplemente escribe todo crítico para un buen desempeño. Si bien intentamos algo un poco más simple, Probemos esta distribución de datos, que es sólo una línea recta. Ese debería ser un caso más fácil aquí. Y podemos ver que el generador está convergiendo bastante rápidamente en esa línea de ahí. Y deberíamos ver al discriminador empezando a retomar eso también. Pero ya el generador está bastante cerca de los datos reales. Entonces sí, eso es mucho más fácil, ¿verdad? Por lo que los círculos siempre son duros, pero en este caso convergen en algo mucho mejor, mucho más rápido. Y se puede ver aquí que la divergencia de KL realmente se encogía rápidamente allí. El discriminador pérdida en la pérdida del generador o básicamente estable en este punto. Entonces creo que eso es tan bueno como se va a poner. Y así si quieres jugar con esto tú mismo, dirígete al Polo Club dot github dot io slash GAN lab, y puedes jugar con esto tú mismo. Hay otros modelos al año que puedes probar y jugar con diferentes escenarios aquí y ver qué pasa. Muy bien, adelante. Llevando esto a otro nivel, veamos aquí el patio de juegos del GAN. Acude a Ryan en Kano.com. No estoy seguro de cómo decir eso. juegos. Esto en realidad está usando el viejo dataset m-nest en lugar de esas distribuciones de datos más sintéticas. Entonces en este caso, sigamos adelante y golpeemos tren aquí. Entonces vamos a estar entrenando esto para generar números, imágenes y números. Y recuerda de nuevo con un GAN, no lo
estamos entrenando para generar números específicos, así que no espero ver un nueve aquí asociado con el nueve o seis con el seis solo está generando números en general. Entonces de nuevo, está ese modo colapso degenerado estado donde sólo aprende a hacer un número de manera confiable. Pero ojalá veamos algo más interesante es que el entrenamiento continúa aquí. Entonces lo que estamos viendo aquí visualmente es lo bien que el discriminador está haciendo un contador real y falso aparte. Por lo que estas son las imágenes reales entrando y las imágenes generadas también. ¿ Y cómo va el discriminador a decir aparte a los dos? Entonces podemos ver en este momento estamos recibiendo un 60% más o menos. La tasa de éxito en la identificación de imágenes reales es real. En realidad, de repente se ha puesto mucho mejor. Y estamos identificando que la imagen falsa es falsa más a menudo que no tan bien, aunque
todavía no es genial. Obviamente los resultados visuales aquí no son impresionantes, pero están mejorando visualmente con el tiempo. Por lo que hacer un número es una tarea mucho más complicada y simplemente hacer un círculo como estábamos tratando de hacer con el laboratorio de GAN antes. Por lo que esperarías que esto fuera un poco más computacionalmente caro. Y también podemos visualizar la función de pérdida está en el discriminador y el generador aquí también. Podemos ver que ya, ya sabes, está un poco luchando por mejorar, pero dado el tiempo suficiente y lo hará, ya
sabes, si quieres, deja que esto se ejecute por un tiempo después de unas diez pulgadas. Entonces encuentro que los resultados se ponen bastante interesantes y ya empiezan a parecer números, un poco parece un cinco. Todavía hay algo de margen de mejora, ¿verdad? Ese tipo de parece un ocho. Es llegar ahí, pero dale más tiempo. Y estos se verán cada vez más como números. Y ya creo que están mejorando, ¿verdad? Entonces Carlos, como un tipo de cosa floreciente ahí. Pero dada la capacitación suficiente, no
podemos ver que lenta pero seguramente ese costo discriminador está disminuyendo. Generador, sin embargo, realmente luchando por mejorar. Ahora puedes jugar con la diferente topología de la red aquí si quieres, y los diferentes hiperparámetros ver si puedes hacer un mejor trabajo. Pero, ya sabes, tiene que estar alto. Va a ser duro. Pero si sí quieres jugar con esto de forma interactiva, esa es una forma de hacerlo. Detengamos esto y pasemos a ejemplo más divertido. Por lo que esta es una demo de Nvidia GAN llamada Gauguin. deletrearon intencionalmente que con GAN Al final de Gauguin, después del famoso pintor. Y es usar un GAN para generar imágenes falsas de diferentes tipos de paisajes, ¿verdad? Entonces si solo presiono el botón aquí, Va a tomar automáticamente este mapa de segmentación aquí que
dibujé que dice que quiero agua aquí abajo y cielo aquí arriba. Y generará un océano sintético. Y es un cielo sintético que coincide con esos segmentos que definí. Por lo que tengo que aceptar los términos y condiciones primero. Y ahora deberíamos ver una imagen así. Por lo que tienen un GAN que está entrenado sobre cómo hacer agua y lo que está tratando, cómo hacer un cielo y simplemente los juntó ahí. Aunque se pone más interesante. En realidad seleccionemos el paisaje aquí y pongamos algunas montañas en el horizonte. Siéntete como Bob Ross aquí. Y puedes hacer cualquier tipo de paisaje que quieras de esta manera. Entonces ahora realmente ido empezando en cualquier matemática o topologías de red neuronal aquí. Por lo que es una especie de ejemplo divertido de lo que se puede hacer con las GANs. Y tenemos unas montañas ahí, una
especie de límite raro ahí entre montañas y agua. Vamos a darle algo,
algo de tierra ahí, algo de tierra. Y voy a hacer de ese océano un lago. No quiero perder demasiado tiempo en esto. Esta no es una clase de pintura. Pero sólo para darte una idea de lo que esto puede hacer. Y mientras estamos en ello, pongamos unas pequeñas nubes felices allá arriba a alrededor de una ahí, una aquí y otra allá. Y ahí tenemos nuestro pequeño paisaje falso. Entonces un poquito, poquito de agua. Están rodeados de algunos montículos de tierra en el fondo y algunas nubes en el cielo todas generadas a través GANs que fueron entrenados en cómo hacer esos diferentes tipos de características en una pintura al azar algorítmicamente. Tan como un ejemplo divertido ahí de GAN. Está bien, así que ya has visto GANs en acción. Vamos a entrar en un cuaderno real y sumergirnos en cómo estos realmente están funcionando bajo el capó.
23. Gan: práctica con el MNIST de la moda: Muy bien, nos hemos divertido. Así que sigamos adelante e implementemos una red adversarial generativa usando aquí
un cuaderno y realmente veamos cómo se están ejecutando aquí bajo el capó y cómo realmente codificar uno hacia arriba. Sorprendentemente pequeña cantidad de código aquí. Y así no mucho para pasar realmente por ahí. Engañosamente simples, aunque son muy complejos para entrenar. Ahora de nuevo, estas son cosas muy computacionalmente intensivas para entrenar. Entonces si no tienes una GPU, probablemente no quieras estar haciendo esto tú mismo. Adelante y comprobemos si tenemos uno con este primer bloque de código. Y eso se va a apagar y cargar TensorFlow, que vamos a tomar un poco. Pero podemos ver que sí tengo una GPU disponible para la capacitación. Si eres dice 0 y sí tienes una GPU NVIDIA, vuelve a dirigirte a este enlace y te hablará sobre cómo
instalar GPU tensorflow bajo Anaconda, solo pip instalar TensorFlow dash GPU. Pero primero, probablemente tendrás que instalar algunas dependencias como la Biblioteca CU DNN, que requiere ir a los sitios web de desarrolladores de NVIDIA registrándose para una cuenta ahí y todo eso, pero vale la pena por acelerar esta capacitación. Muy bien, como antes con la muestra VAE, vamos a cargar el conjunto de datos de moda m-nest. Y vamos a estar creando un GAN que pueda generar artículos aleatorios de ropa. Entonces sigamos adelante y cargemos eso desde el paquete de conjuntos de datos keras dot. Y como antes, vamos a
fusionar los conjuntos de datos de capacitación y pruebas solo para obtener más datos de capacitación. Nuevamente, nuestro objetivo aquí no es clasificar datos, es generar datos falsos. Por lo que realmente no sirve el conjunto de datos de prueba aquí. Simplemente lo vamos a enloquecer todo juntos. Y mientras estamos en ello normalizaremos esos datos
de imagen de valores de caracteres de 0 a 255 a valores de coma flotante entre 01, porque eso es lo que esperan las funciones sigmoides. Y vamos a remodelar los datos, agregando esa dimensión extra que necesitamos para las capas CNN, las capas convolucionales también lo barajarán y lo agruparán mientras estamos en ello. En un tamaño de lote de 64 arriba, Ahí está nuestro primer hiperparámetro que podríamos querer ajustar. No pasa mucho ahí. Muy bien, así que empecemos configurando nuestro modelo de generador. Nuevamente, esto es lo que está tratando de generar imágenes falsas que acaban de dar una entrada aleatoria. Por lo que hace fotos aleatorias de, bueno, artículos de ropa en nuestro ejemplo aquí. De acuerdo, pasemos por lo que está pasando aquí. Importamos las cosas que necesitamos de TensorFlow y Keras, otro hiperparámetro aquí. ¿ Cuántas dimensiones de ruido tenemos? ¿ Cuántos insumos tenemos entrando en esta cosa? Entonces vamos a empezar con unos 150 valores aleatorios de ruido aquí. Y usaremos eso como nuestro insumo. Y de nuevo, se puede cambiar eso y ver qué impacto tiene. Posteriormente. Vamos a configurar un modelo secuencial y Keras empezando con ese vector de ruido ahí si un 150 valores de ruido. Y podemos jugar con qué tipo de distribución es ese ruido también. Eso lo alimentaremos en una densa capa de siete por siete por 256. Y haremos una convolución de transposición sobre eso en tres capas, trabajando hasta una imagen final cuando hayamos terminado para reconstruir eso. Entonces otra vez, esto es muy similar al decodificador de un VAE, ¿verdad? Más o menos lo mismo. Por lo que se puede ver cómo estas cosas están muy estrechamente relacionadas. Pronuncia un resumen del modelo solo para asegurarnos de que se vea justo antes de seguir adelante. Sí, a mí me parece cuerdo. A continuación, haremos nuestro modelo discriminador. Y de nuevo, esto se parece mucho al codificador del VAE, ¿verdad? Entonces lo que estamos tomando aquí como entrada es una imagen de 28 por 28 por 1, 28 por 28 píxeles, un canal de alimentación de escala de grises de color que en una capa 2D convolucional de 256 elementos que a una 128. Y lo aplanaremos hasta una densa capa de tan solo 64 neuronas. Y le aplicaremos una cara de deserción a eso para evitar el sobreajuste. Y finalmente salida un número final de sí o no. ¿ Esta cosa piensa que en realidad es real o falso? Entonces esa es la principal diferencia ahí con respecto a los VAEs. En realidad no estamos tratando de generar un vector de características
latentes aquí donde acabo de generar una salida de ¿Creo que esta es una imagen real o creo que esta es una imagen falsa, pero por lo demás bastante similar al codificador de un VAE. Adelante y golpeemos a ese modelo me parece correcto. Una de las cosas que olvidé señalar, estamos usando la función de activación de ReLU aquí en el discriminador y la función de activación de ReLU con fugas en el generador. Y eso es algo que la gente ha aprendido a lo largo del tiempo que el trabajo funciona bien. Justo la mejor práctica estándar allí. De acuerdo, vamos a configurar aquí nuestros optimizadores y funciones de pérdida. Entonces yay, más hiperparámetros. Por lo que de nuevo, tenemos un optimizador para el generador y discriminador. Estamos llamando a ese optimizador G y optimizador D. Ambos van a estar usando el optimizador Adam, pero con diferentes tasas de aprendizaje. Y estos son críticos para hacerlo bien si quieres tener un modelo estable mientras estás entrenando, si te equivocas, Solo
va a explotar un poco como vimos durante esa demo anterior de tratar de gustarte aprender que una forma de anillo, si recuerdas de nuevo en el patio de recreo de GAN, nuestro clasificador para la función de pérdida es bastante sencillo sin embargo. Solo estamos tratando de averiguar si las cosas son reales o falsas. Por lo que la entropía cruzada binaria encaja en la factura para eso De igual manera, para la precisión, queremos ver qué tan precisos somos en adivinar sí o no. ¿ Es ésta una imagen real? Tan binaria, precisión binaria. Es totalmente razonable para eso también. Turno Entrar. Eso tenemos todo preparado. Muy bien, vamos a atarlo todo juntos. Por lo que comenzaremos definiendo nuestra formación para el discriminador. De acuerdo, entonces el lote entrando donde me gustaría leer la forma de los datos para averiguar cuál es la dimensionalidad de eso,
cuál es el tamaño del lote. Y luego crearemos un vector de ruido aleatorio que coincida con ese tamaño de lote para el vector de ruido aquí. Y estamos usando punto aleatorio normal aquí para una distribución normal no necesariamente tiene que ser una distribución normal. Podrías probar una distribución uniforme aquí si quisieras también y ver qué hace eso si tienes tiempo para jugar con ella. Y lo que vamos a hacer a continuación es concatenar las etiquetas reales y falsas. Entonces como vamos a ver, en realidad vamos a pegar los datos reales y los falsos juntos mientras los alimentamos al discriminador. Y así vamos a tener todos los datos reales con una etiqueta de uno, seguido de todos los datos falsos con una etiqueta de 0. Conforme entramos y definimos aquí nuestras etiquetas para los datos que estamos alimentando. Eso es lo que está pasando ahí. Contamos aquí nuestra cinta de gradiente para el entrenamiento. Primero generamos nuestros datos falsos llamando al generador con ese vector de ruido para obtener un conjunto de imágenes falsas. Entonces concatenamos eso con los datos reales juntos. Entonces tenemos los datos reales seguidos de los datos falsos. Y de nuevo, eso se alina con estas etiquetas de real y falso que configuramos arriba aquí bajo y subrayamos true. Entonces alimentamos eso al discriminador para ver qué tan bien le va a adivinar si se trata de imágenes reales o falsas. Y luego calcular la función de pérdida que definimos anteriormente en cuanto a si lo hizo bien o no. Muy bien, tenemos que definir también el camino hacia atrás para el entrenamiento aquí. Sólo estamos configurando de nuevo una cinta de gradiente aquí, optimizador D que configuramos antes. Aplicar gradientes. Nada realmente interesante aquí es una especie de código calderado aquí, pero sí pasamos en esa función de pérdida discriminadora que definimos antes. De acuerdo, reportamos la precisión aquí atrás y hacemos un seguimiento de eso impreso a lo largo del tiempo. Y eso es todo lo que hay al modelo discriminador. Vamos a Turnos Enter para configurar eso. Y ahora volvamos nuestra atención al generador. Entonces el trabajo del generador es no quedar atrapado por el discriminador, ¿verdad? Entonces vamos a decir, queremos probar lo bien que estás en adivinar que era real. Entonces a medida que entramos en nuestro discriminador, estamos midiendo nuestro éxito que
adivinara o no que era una imagen real a pesar de que es falsa. Entonces eso es lo que está en el corazón de este entrenamiento para el generador que está pasando aquí. Nuevamente, extraemos el tamaño del lote de la forma de los datos de entrada. Nosotros configuramos un vector de ruido que coincide con ese tamaño de lote. Y acabamos de montar un vector de unos porque estamos midiendo lo bien que lo estamos haciendo siendo clasificados como reales. Eso es lo que uno representa. Entonces configuramos nuestra cinta de gradiente aquí, y esto es un poco el corazón de todo aquí. Tomamos ese ruido que generamos, lo
pasamos al generador para crear un montón de imágenes
falsas para cualquiera que sea el tamaño del lote. Tomamos esas imágenes falsas y luego las pasamos al discriminador. Y volvemos de eso. Si el discriminador pensó que esas diferentes imágenes eran reales o falsas. Entonces calculamos nuestra pérdida en base a lo bien que hicimos al hacer que el discriminador piense que son imágenes falsas eran en realidad reales. De acuerdo, así que eso es lo que está pasando aquí. Ya sabes, no, no demasiado código en realidad. El resto es una especie de caldereta. Nuevamente, estamos atando nuestra retropropagación y haciendo un seguimiento de la pérdida y precisión a lo largo del tiempo. Entonces Shift Enter para configurar eso. Está bien, una función dandy un poco útil aquí para visualizar las imágenes generadas a medida que vamos. Entonces todo esto va a hacer es tomar como entrada un modelo. Aquí va a recoger 81 números aleatorios y pasar eso a lo que sea ese modelo, algún tipo de generador y visualizar con qué salió en una cuadrícula nueve por nueve. Por lo que sólo una pequeña función de ayudante para visualizar 81 imágenes aleatorias dado algún modelo. Y ahora hagamos realmente el entrenamiento. Por lo que no vamos a usar un método de ajuste de una línea aquí para hacer eso. El motivo es que el papel original de GAN en realidad ejecutaría múltiples conjuntos de entrenamiento discriminador para cada paso del generador. Pero en nuestro caso aquí, vamos a mantenerlo sencillo y
solo hacer un paso de entrenamiento discriminador seguido de un paso de entrenamiento de generador. Pero si quisieras, en realidad podrías duplicar este entrenamiento discriminador varias veces para que más coincida con el papel original lo hizo. Entonces, te da cierta flexibilidad y cosas con las que experimentar. De nuevo, fundamentalmente aunque todo lo que vamos a hacer es pasar por 30 épocas. Vamos a entrenar al discriminador, hacer un
seguimiento de la pérdida general en precisión. Entrena nuevamente al generador, realiza un
seguimiento de nuestra pérdida general en precisión e imprime el rendimiento a medida que avanzamos. También para cada otra época, vamos a llamar a esa función auxiliar de imágenes de trama de nuevo para visualizar imágenes de muestra aleatorias de AT ones de nuestro modelo de generador. Por lo que en cada segunda época, vamos a tomar nuestro modelo generador actual, actualmente tren y todos los pesos que se ha aprendido hasta ahora. Y simplemente visualice lo bueno que está haciendo en generar imágenes falsas de cerca. Entonces sigamos adelante y pongamos eso. Y aquí es donde comienza el entrenamiento. Esto va a llevar un rato chicos, pero vamos al menos a ver si arranca con éxito. Y con la GPU, Esta va a ser una operación increíblemente intensiva. De acuerdo, aquí vamos. Entonces aquí estamos en época 0, un poco consiguiendo manchas aleatorias aquí en este punto como cabría esperar. Pero esperemos por lo menos la siguiente visualización aquí en época a. De nuevo, lo que está pasando aquí es que nuestro generador es aprender a engañar al discriminador. Y el discriminador está tratando de aprender a detectar para discriminar reales de imágenes falsas al mismo tiempo. Es adversarial porque estas dos cosas son intención entre sí. Y conseguir ese equilibrio justo es la clave para crear un generador que pueda crear falsificaciones convincentes. De acuerdo, época para finalmente volvió y bueno, todavía no
es realmente reconocible, pero se puede ver que ya estamos sacando formas algo más complejas de ella. Vamos a seguir adelante y dejar que esto funcione por 30 épocas y ver con qué terminamos. Va a llevar un tiempo. Entonces solo voy a pausar el video aquí y volver cuando esté hecho mientras mi GPU calienta mi habitación. Está bien. Ha pasado alrededor de media hora aquí en mi GPU ha estado trabajando horas extras aquí. En realidad hace calor en la oficina ahora aquí. Entonces el otro tipo de secreto sucio del aprendizaje profundo es la cantidad de energía que consume, definitivamente algo de lo que debe ser consciente y consciente. A ver qué pasó sin embargo. Entonces como puedes ver, una época 0 solo consiguiendo algunas manchas aleatorias que puck para no tanto mejor. Y por época hacia adelante comienzan a hacer algunas cosas más complicadas aquí. Y empezando a formarse en algo especie de reconocible por época ocho, estos están empezando a parecerse a camisas y pantalones, creo. Y para cuando lleguemos a 10, definitivamente
están empezando a volverse reconocibles. Con el tiempo. Simplemente se pone mejor y mejor y mejor. Entonces a pesar de que lo detuvimos a 30 épocas, porque simplemente no quiero destruir el planeta haciéndolo correr más allá. Se puede ver aquí la tendencia de que de hecho es cada vez mejor y mejor con el tiempo. Y para cuando llegamos a 30, bueno, en realidad
dejamos de imprimirlo de 28 aquí solo a un vagario del código. Pero incluso en la 29ª época de opcode, que es realmente 30 porque empezamos a contar a 0. Y el discriminador seguía siendo tan sólo un 80% efectivo para discriminar real de falso. Por lo que aún quedaba margen de mejora aquí. Podríamos dejar que este tren aún más tiempo para obtener resultados
aún mejores si quisiéramos muy intensivos para entrenar estas cosas. Y de nuevo, son muy conmocionados. Entonces dado que realmente hay que ejecutar estas cosas repetidamente para afinar todos esos hiperparámetros, se puede ver cómo entrenar un GAN puede ser una proposición que consume mucho tiempo y consume energía. Pero estos son resultados razonables. Ya sabes, estos definitivamente parecían vestidos y camisas. Bueno, en su mayoría son vestidos. Seguro, ¿no es que hablaremos de eso en un momento? Sólo tomemos el modelo final del tren. Y de nuevo, sólo para escupir aquí nueve por nueve imágenes aleatorias para ver cuáles son nuestros resultados finales. Y un poco señala hacia abajo en los comentarios aquí eso es un poco notable lo rápido que puede generar esas imágenes una vez que tengas el modelo entrenado. Por lo que en realidad hay una demo en el sitio web de NVIDIA donde
crearon un GAN que recrea un juego de Pac-Man. Simplemente basado en analizar el video de la gente reproduciéndolo una y otra vez. Por lo que realmente podemos representar cualquier cosa que quieras sin ninguna realmente, ningún conocimiento real de lo que está pasando necesariamente. De todos modos, se puede ver aquí, estos parecen vestidos y suéteres razonables, supongo, pero eso es todo. Entonces estamos viendo ese problema de colapso del modo del que hablamos antes donde realmente solo estamos midiendo su capacidad para generar imágenes de ropa. Y no estamos midiendo su capacidad para generar tipos específicos de ropa. Simplemente si ese generador puede generar o no una imagen que pueda engañar al discriminador para que piense que es real. Entonces encontró un poco la manera de hacer trampa aquí porque, ya sabes, diferentes tipos de elegir van a ser más complicados que generar una imagen de un par de pantalones o una camisa. Y dado el limitado tiempo de entrenamiento que teníamos, eso es un poco en lo que convergió. Entonces ese es el problema de colapso de modo que discutimos antes en las diapositivas. Pero en general resultados bastante satisfactorios dados solo 30 épocas en un conjunto de datos de entrenamiento bastante simple allí. Obviamente puedes decir que aquí hay mucho más por explorar. Hasta ahora hay bastante brecha entre estos resultados y todas esas aplicaciones de intercambio de cara que ves en,
en tu teléfono, ¿verdad? Por lo que obviamente estas GANs mucho más grandes por ahí que entrenan por un periodo de
tiempo mucho más largo que son capaces de generar esas falsificaciones convincentes de imágenes reales de rostros humanos, cual es realmente lo más difícil de hacer bien. Pero está ahí fuera y esto es sólo la punta del iceberg. En lo que respecta a la investigación de GAN, realidad
es la vanguardia de la investigación de aprendizaje profundo en estos días. Si subirías, buscarías zoos modelo GAN, verás que hay una gran variedad de modelos diferentes por ahí de los que
puedes trabajar y construir para problemas muy específicos. Y personas que incorporan GAN a sistemas más grandes. Por ejemplo, hay algo por ahí que generará automáticamente una cabeza parlante. Dada una imagen de alguien que puede mirar a su alrededor, sus ojos, puede moverse. Puede fingir hablar contigo y todo por especie de fusión entre sí la extracción de características de la cara de alguien con GANs que pueden crear parches de esa cara que hacen cosas diferentes. Por lo que se está dando mucha innovación emocionante en este espacio ahora mismo, de nuevo, te
recordaré desde el punto de vista de la ética, por favor usa esta tecnología para siempre y por favor ten conocimiento de la energía que requiere para la formación. Entonces eso son las GANs y la introducción al menos suficiente
para que te vayas y aprendas más y seas un poco peligroso con ella.
24. Introducción de proyectos de aprendizaje profundo: Entonces es momento de aplicar lo que has aprendido hasta ahora en este curso de aprendizaje profundo. Tu proyecto final es tomar algunos datos del mundo real. Hablamos de esto en la conferencia de ética, realidad de masas detectadas y mamografías, y simplemente en base a las mediciones de los en masivo ver si se pueden predecir si son benignos o malignos. Entonces tenemos un conjunto de datos de masas de mamograma que se detectaron en personas reales, y hemos tenido riel. Los médicos miran esos y determinan si son o no de naturaleza benigna y maligna Entonces veamos si puedes configurar una red neuronal propia que pueda clasificar con éxito . si estas masas son de naturaleza benigna o maligna. Vamos a sumergirnos. Por lo que te he dado algunos datos y una plantilla desde la que trabajar. Al menos los datos con los que vamos a estar trabajando está en los materiales de tu curso. Las mamografías subrayando masas punto fechado Un archivo de texto son los datos crudos que estarás usando para entrenar a tu modelo, y puedes ver que son solo, ah, seis columnas de cosas o esas cosas representan. Te mostraremos en un minuto. En realidad hay una descripción del estado se establece en el archivo de texto de puntos nombres aquí que va junto con ese conjunto de datos. Pero para que empieces, te
he dado un poco de plantilla con la que trabajar si abres el
proyecto de deep learning en archivo I p Y N b. Entonces esto vino del repositorio U. C I, y te di un poquito de enlace a donde provenían los datos originales. En realidad es un gran recurso para encontrar otros datos con los que jugar. Entonces si todavía estás aprendiendo aprendizaje automático, ese es un gran lugar para encontrar cosas con las que meterte con un experimento. Pero para este ejemplo, ahí es cuando vamos a estar jugando. Entonces aquí está la descripción de esas seis columnas. uno se le llama el comprador como evaluación, y eso es básicamente una medición de lo confiado que era el diagnóstico de esta
masa en particular . Ahora, eso es una especie de regalar la respuesta. No es lo que llamamos atributos predictivos, así que en realidad no vamos a usar eso para entrenamiento o modelo. A continuación, tenemos la edad del paciente. Tenemos una clasificación de la forma de la masa. Tenemos una clasificación del margen de masa, pero ¿cómo? Se parece a la densidad de la masa. Y finalmente tenemos lo que estamos tratando de predecir. Entonces esta es la etiqueta, la severidad, ya sea benigna, cero o maligna. Entonces tenemos lo que hay aquí, un problema de clasificación binaria muy similar a cosas que hemos hecho antes en el curso , Y no deberías necesitar mucho más que usar fragmentos de código de ejercicios anteriores en este curso y adaptándolos a este conjunto de datos. De acuerdo, ahora, una pequeña salvedad aquí. Normalmente, cuando estás haciendo aprendizaje automático, no
quieres lidiar con lo que llamamos datos nominales, y tanto la forma como el margen son datos técnicamente nominales. Si bien los estamos convirtiendo en números, esos números no necesariamente tienen sentido en cuanto a su gran asiático. Ya sabes, ir del 1 al 4 no significa que vayamos cada vez más de uno a ronda dos irregulares de manera lineal. Pero a veces tienes que arreglarte con lo que tienes. Es mejor que nada, y al menos hay alguna lógica a la progresión de las puntuaciones numéricas aquí a estas descripciones. Por lo que generalmente van de, ya
sabes, mawr tumba regular o irregular a medida que esos números aumentaron. Entonces vamos a seguir adelante y usar esos de todos modos. De todos modos, esto es algo importante. Ya sabes, hay mucha angustia y cirugía innecesaria que viene de falsos positivos en manera donde las mamografías. Entonces si puedes construir una mejor manera de, ah, diagnosticar estas cosas aún mejor. Pero de nuevo, piensa de nuevo en mi conferencia de ética. No quieres sobrevender esto. Quieres estar seguro de que esto es solo una herramienta que podría usarse para un médico realmente humano A menos que estés muy seguro de que el sistema puede realmente superar a un humano. Y por definición, no puede
porque estamos entrenando esto en datos que fueron creados por los humanos. Entonces, ¿cómo podría posiblemente ser mejor que un humano? Piensa en eso. Muy bien, así que tu trabajo es construir un perceptrón multicapa para clasificar estas cosas, pude obtener más del 80% de precisión con la mía. Veamos cómo puedes hacerlo ahora. Mucho del trabajo solo va a ser en la limpieza de los datos, y te paso a través de las cosas que necesitas hacer aquí. Por lo tanto, comience importando el archivo de datos utilizando la función read See SV. Después puedes echar un vistazo a eso, convertir los datos faltantes en no de números y asegurarte de importar todos los nombres de las columnas . Es posible que necesite limpiar los datos, así que trate de hacerse una idea de la naturaleza de los datos mediante el uso de describe en su marco de
datos de pandas resultante . A continuación, necesitarás soltar rosa. Tiene datos faltantes y de lo que has cuidado que necesitas para convertir los marcos de datos en tarta numb. Levanta que luego puedes pasar a psique aprende o a acariciar. De acuerdo, así que también necesitas normalizar los datos antes de analizarlos con caricia. Por lo que una pequeña pista hay que usar los estándares de punto de pre procesamiento escalador fuera de SK aprendido que puede hacer las cosas muy fáciles para usted. Eso es lo único que realmente no hemos hecho antes. El resto de esto, deberías poder descifrarlo solo en base a ejemplos anteriores. Una vez que tienes los datos en el formato adecuado, ha sido bastante sencillo construir un modelo M LTP usando caricia y puedes experimentar con diferentes disculpas guardadas, diferentes hiper parámetros y ver qué tan bien puedes hacerlo yo soy te voy a soltar aquí y darle una oportunidad a esto. Veamos cómo te va cuando vuelvas en la próxima conferencia. Te mostraré mi solución y cómo paso por esto yo mismo. Entonces ve adelante y practica lo que has aprendido.
25. Solución de proyectos de aprendizaje profundo: Entonces espero que tengas alguna buena experiencia ahí y en realidad aplicando lo que aprendiste para crear una red neuronal que pueda clasificar las masas encontradas en mamografías. Es benigno o maligno. Como dije, mismo
obtuve alrededor del 80% de precisión. pregunto cómo lo hiciste de todos modos? Empecé con solo dedo del pie leyendo ciegamente en archivo CSP usando pd dot reid CSP y echándole un vistazo. Y vi en ese punto que los nombres de las columnas estaban equivocados. Faltaba información de nombre de columna en el archivo de datos, y ahí faltaban valores. Fueron señalados por pregunta Mark, así que hay que leer eso en un poco más inteligentemente. Entonces en mi segundo intento aquí, llamé leer, ver SV pasando y explícitamente el conocimiento de que los signos de interrogación significan valores faltantes o cualquier valor y pasar una matriz de nombres de columna como lo hicimos antes e hicimos otra cabeza en el marco de datos Panis resultante. Y las cosas se ven mucho mejor ahora. En ese punto, tenemos que limpiar los datos ahora que está en un formato adecuado y organizado adecuadamente, podríamos hacer una descripción sobre eso para echar un vistazo a las cosas y tener idea de que nos faltan algunos datos y las cosas parecen estar razonablemente bien distribuida. Al menos en este punto, hicimos un pequeño recuento aquí para ver qué es exactamente lo que falta. Entonces mi estrategia aquí fue ver si hay algún tipo de sesgo que voy a introducir eliminando realmente los valores que faltan. Y si tuviera que ver que los datos que faltan parecen estar distribuidos aleatoriamente con solo mirarlo, al
menos eso probablemente sea una buena indicación de que es seguro simplemente seguir adelante y dejar caer esas rosas
faltantes. Entonces dado que he determinado que eso es algo bueno que hacer, he ido adelante y he llamado Drop in a on ese marco de datos y lo he descrito, y ahora puedo ver que sí tengo el mismo número de conteos de rosa en cada
columna individual . Entonces ahora tengo un conjunto de datos completo donde he tirado filas que faltan datos, y me he convencido de que eso es algo bueno hacer estadísticamente. Muy bien, entonces ahora necesitamos extraer realmente las características y valores que queremos alimentar a nuestro modelo, nuestra red neuronal. Por lo que he extraído la fecha característica de la edad, forma, margen y densidad de ese marco de datos y extraído eso en un volcado. Recuerdo todas las características. También he extraído la columna de severidad y convertido eso, también, en todas las clases array que puedo pasar como mis datos de etiqueta. Y también he creado una práctica matriz dandy de nombres de columna ya que lo necesito más adelante. Entonces solo para visualizar, he perforado en todas las características solo para echar un vistazo a cómo se ve eso. Y, supuesto, se ve legítimo como array de cuatro características. A Pete's en cada fila parece razonable. En ese punto. Necesito escalar mis datos hacia abajo. Entonces para hacer eso, todo lo que necesito hacer es importar la función escalador de estándares de punto de pre procesamiento allí y
aplicarlo a mis datos de características. Y si miro a todas las características escala que salió de esa transformación, pude ver que todo parece estar normalmente distribuido ahora centrado alrededor de cero cuando, con una desviación estándar de uno, que es lo que querer, recuerda, cuando estás poniendo entradas en una red neuronal, es importante que tus datos se normalicen antes de ponerlos. Ahora llegamos a la carne real de la cosa, en realidad configurando nuestro modelo MLP, y voy a envolver esto de tal manera que pueda usar psique. Se aprende puntuación cruzada Val para evaluar su desempeño. Entonces en mi ejemplo aquí he creado poca función llamada crear modelo que crea un modelo
secuencial, agrega en una capa densa con seis unidades o seis neuronas usando la función de activación rela Oh. He agregado en otra capa con una que hace mis clasificaciones sigmoides finales, mi clasificación binaria encima de eso,
y he compilado eso con el Adam Optimizer y la entropía binaria Cross perdida función . Entonces con esto, hemos configurado una sola capa de seis neuronas que se alimenta en una
capa final de clasificación binaria . Muy simple, y entonces he ido adelante y utilizado el clasificador de caricia para construir un psíquico aprender
versión compatible de esta red neuronal, y he pasado eso en cruz Val puntaje dedo en realidad hacer K fold cruz validación en este estuche con 10 pliegues e imprimir los resultados. Entonces con tan solo estas seis neuronas, pude lograr una precisión del 80% y predecir correctamente si una masa era o no benigna o maligna, sólo en base a las mediciones de esa masa. Ahora en el mundo real, Doctor, se utiliza mucha más información que sólo esas mediciones. Entonces ya sabes dónde nuestro algoritmo está en desventaja en comparación con esos
médicos humanos para empezar. Pero eso no es tan malo si lo hiciste mejor si utilizabas más capas más neuronas hiedra, curioso por ver si realmente conseguiste un mejor resultado. Resulta que a veces no se necesita mucho para obtener realmente el resultado óptimo de los datos que se tienen. Pero si pudieras mejorar sustancialmente ese resultado, felicidades. Por lo que espero que el aprendizaje profundo haya sido de mistificado para ti. Y a continuación hablaremos de cómo toe continue learning mawr en el campo del deep learning.