seguramente han escuchado recientemente mucho acerca de lo que se llama redes profundas o redes neuronales o arquitectura de aprendizaje profundo, qué son estas? y como aparecieron, vamos a hablar de esto comenzando por el principio de lo que se llama la investigación en redes neuronales y siguiendo su rastro hasta donde están hoy en día, la investigación moderna sobre las redes neuronales puede ser rastreada hasta el psicólogo Donald Hebb en los 40s, Donald Hebb propuso que las redes de unidades simples siguiendo reglas de aprendizaje muy simples pueden aprender y entender y modelizar patrones muy complicados y la regla más simple que él propuso fue que "si 2 unidades están activas al mismo tiempo, la conexión neuronal entre ambas se hará más fuerte y si no están activas al mismo tiempo entonces se hará más débil esto fue inspirado principalmente por sus ideas acerca de las neuronas biológicas y como pueden aprender patrones y desde entonces hemos encontrado que las neuronas biológicas siguen a veces estas reglas muy simples; estas reglas que Donald Hebb propuso son llamadas hoy en día aprendizaje hebbiano; hay algunas pequeñas diferencias que se utilizan en el aprendizaje supervisado, que juegan un papel más importante en el aprendizaje no supervisado, por lo que no hablaremos mucho de ello; pero este fue el comienzo de nuestra concepción de red neuronal, que son modelos de unidades simples que están conectadas unas con otras y que aprenden cambiando los pesos entre las unidades ahora bien, la red neuronal moderna en verdad surgió con el trabajo de Frank Rosenblatt que fue otro psicólogo y que en los 50s inventó lo que él llamó el "Perceptrón", el perceptrón fue un modelo computacional de aprendizaje con una arquitectura supervisada, por lo que puede aprender y predecir patrones que les son dados y Frank Rosenblatt en los 50s demostró que podía entrenar el perceptron para que reconozca patrones simples como letras y esto creó un ambiente de excitación en su tiempo debido a que no había precedentes en la investigación en AI; entonces cómo es que el perceptron funciona? el perceptron consiste en, como se dijo, en muchas unidades simples que llamamos neuronas o nodos y en este diagrama vemos el esquema esencial; entonces acá hay 2 de las llamadas neuronas de entrada, que etiqueté como X1 y X2; ahora si recordamos de las discusiones previas acerca de clasificar algo como imágenes de perros y gatos y los graficamos en 2 dimensiones, estas 2 dimensiones serán los números que alimentan tanto a X1 como a X2; pero por supuesto lo que quiero decir es que podemos tener muchas más entradas, podemos tener miles de entradas si así lo queremos pero por razones conceptuales lo vamos a mantener tan simple como podamos; entonces tenemos 2 neuronas de entrada, X1 y X2, y estas se combinan, usando algo que se llama la suma ponderada, esencialmente para cada una de estas neuronas hay un peso y las neuronas pueden tener distintos valores y multiplicamos ese valor por el peso y lo sumamos todo junto, eso es lo que ven en el círculo azul y luego de eso, la suma ponderada se pasa a algo que se llama "no lineal", lo "no lineal" es una función no lineal y la que usaba el perceptron se llamaba el "umbral no lineal" y básicamente consiste en si la suma ponderada está por debajo de un umbral, entonces la salida es 0 y si está por encima del umbral entonces la salida es 1; es algo simple ahora bien el algoritmo de aprendizaje del perceptron incluye ajustar los pesos, en este caso los pesos 1 y 2 y también el umbral B; para que pueda aprender un cierto mapa de las neuronas de entrada para un valor de 0 o 1 de salida; que podría ser por ejemplo un perro o un gato de ahora en más la representación de la suma ponderada en forma no lineal es una neurona combinada en este color verde azulado que luego mostraremos en las diapositivas que siguen si recuerdan hemos visto como un algoritmo de aprendizaje supervisado que hemos entrenado con algunos conjuntos de datos que tiene, por ejemplo, entradas de 2 clases, aunque podrían ser más clases, pero para dejarlo simple usamos 2 clases y hemos visto como aprende a diferenciar en una superficie que separa las entradas de una clase y de otra; ahora esta clase de perceptron que ustedes ven acá tiene como superficie una línea y sabemos que es una línea, si recuerdan algo de la geometría de la escuela, una suma ponderada en forma esencial define una línea; en este caso tenemos una suma ponderada y luego vemos si está por encima o por debajo del umbral y esto genera esta línea que separa la superficie donde lo que queda de un lado pertenece a la clase 1 y todo lo que está del otro lado de la línea pertenece a la clase 0 y usamos el algoritmo de entrenamiento de la percepción podemos aprender que la clase de superficies separadas que vemos acá donde el conjunto de datos está representado por el signo + que significa una clase y el signo - que significa la otra clase si bien el perceptron apareció en los 50s ya poseía todos los ingredientes de las redes neuronales modernas y todo el desarrollo que se hizo desde aquella época se hizo sobre la base de esta arquitectura básica un desarrollo importante en la investigación sobre redes neuronales ocurrió en 1969 cuando 2 pioneros de la IA Minsky y Papert publicaron un libro titulado "Perceptrones"; ellos estaban muy interesados en la idea que propuso Frank Rosenblatt y realizaron mucho análisis matemático y teórico del perceptron, sin embargo uno de los hallazgos resultó en el freno de la investigación sobre redes neuronales durante los siguientes 20 años y lo que ellos probaron fue que la clase de perceptron que vimos en la diapositiva anterior no podía aprender a reconocer cierta clase de patrones ahora ya pueden tener alguna idea de la clase de patrones que no puede reconocer pero, otra vez, es fácil de ver; como ya dije antes, para el perceptron, las superficies separadas son siempre 1 línea ahora si tenemos al conjunto de entrenamiento, como el que pueden ver en la esquina de abajo de su pantalla, con los miembros de las clases menos y más ordenados de la manera en que lo están, no hay forma de separar los menos y los más usando una línea sola esta clase de problemas es llamado un problema no lineal no separable debido a que los miembros de las diferentes clases no pueden ser separados por una línea sola como el perceptron sólo puede aprender superficies que se separan por una línea, no hay forma de que esta clase de perceptron pueda aprender a clasificar en forma apropiada las categorías de menos y más ordenadas de esta forma; al mismo tiempo esta clase de problemas y los que no son linealmente separables aparecen en muchos casos; aparecen cada vez que un elemento de una categoría tiene o bien 1 cosa o la otra, pero no ambas y claramente esto ocurre en muchas situaciones y uno quisiera que el aprendizaje de máquina pudiera aprender este tipo de patrones este es un gran problema para el perceptron y entonces la gente perdió el interés y pensaron que en realidad no podían realizar cosas interesantes la situación cambió en forma dramática en la mitad de los 80s; cuando 2 científicos cognitivos Rumelhart y McLelland publicaron el libro "procesamiento paralelo y distribuído" vimos en el caso anterior la forma más simple del perceptron; tenemos 2 entradas o alguna cantidad de entradas, hay una suma ponderada y una salida no lineal lo que "procesamiento paralelo y distribuído" discute es que el perceptron o en forma más amplia las redes neuronales en las cuales hay muchos niveles anidados hay un conjunto de neuronas de entrada, se suman y son pasadas a una función no lineal, pero hay muchas de estas funciones no lineales y éstas sirven como entrada para el siguiente nivel, las salidas son ellas mismas sumas que se pasan a otra función no lineal y así sucesivamente; en este diagrama pueden ver una red neuronal multinivel donde el nivel de entrada, esta entrada va a 2 diferentes sumas no lineales y estas a su vez van a 2 a otras funciones no lineales y llamamos a algunas de estas funciones no lineales como un nivel escondido lo que nos muestra el procesamiento en paralelo y distribuido es que se puede diseñar redes neuronales de multi nivel que son muy eficientes en términos computacionales como reglas de aprendizaje que pueden entrenar los pesos de estas redes neuronales multi nivel y que éstas redes neuronales multi nivel pueden aprender patrones en problemas que no pueden ser separados en forma lineal; de hecho hay resultados que muestran que con los suficientes niveles escondidos pueden aprender cualquier función en el mundo, se ve como cualquier red neuronal multi nivel puede en verdad resolver algo como un problema no separable en forma lineal, que era un verdadero tema para el perceptron de un solo nivel; entonces sabemos que cada individuo esperó algo que sea no lineal, esencialmente definiendo una línea de separación de superficies; entonces podemos pensar en cada una de las sumas ponderadas en el nivel oculto como asignando su propia línea de separación de superficies entonces acá arriba, por ejemplo, podemos decir que la clase 1 es todo lo que está arriba y a la izquierda de la línea roja y que abajo podemos decir que la clase 1 es todo lo que está abajo y a la derecha de la línea roja modificada es interesante notar que podemos representar una intersección como una suma ponderada no lineal; imaginen que podemos asignar a ambos de los pesos entrantes a 1 y luego decir que si la suma ponderada es menos que 2 la salida es 0 y si es 2 o más grande que 2 la salida será 1; esto significa que en una neurona de salida sólo se activará si las 2 neuronas de entrada también se activan; esencialmente tomando la intersección de la región de la clase 1 de ambos niveles ocultos y en este caso es justo lo que necesitamos para resolver el problema no lineal y separar los menos de los más en el ejemplo de separación no lineal que vimos antes; ahora como ya les dije el perceptron original usaba algo que se llamaba umbral no lineal que básicamente cambiaba de 0 a 1 a medida que las sumas ponderadas de las entradas superaban un cierto umbral; en las redes neuronales actuales, incluyendo aquellas que fueron usadas a comienzos de los 80s, usamos una no linealidad diferencial; esto significa que es una función suave y donde podemos tomar la derivada y minimizar el error de entrenamiento esencialmente usando la derivada de las funciones que se usan para transformar nuestras señales esto suena complicado pero es muy simple de pensar en forma visual; si pensamos en alguna función como el error de entrenamiento definido sobre los valores de los pesos que definen las conexiones en nuestra red, entonces este algoritmo de entrenamiento trata en forma esencial de bajar la colina y de cambiar los pesos para minimizar el error de entrenamiento y como usamos derivadas podemos saber hacia que lado bajar; este conjunto de algoritmos que en forma amplia siguen las derivadas hacia abajo para minimizar el entrenamiento paso a paso son llamados también algoritmos de descenso de gradientes; seguramente escucharon muchas veces en el vocabulario del aprendizaje de máquina moderno algo como descenso de gradiente estocástico (SDG) que es una variante pequeña de esta idea básica esto es muy exitoso para entrenar redes neuronales de múltiples niveles yo agregaría también que una razón de su éxito fue debido a que se usa un truco, que fue descubierto para que haga el descenso de gradiente de la red neuronal si simplemente quieren calcular de que forma se deben cambiar las formas para minimizar el error de entrenamiento para una red neuronal muy grande, entonces nos enfrentamos con un problema computacional serio; seguramente escucharon el término "propagación hacia atrás" o "back prop" que es esencialmente una forma rápida computacional para hacer descenso de gradientes y que se volvió muy popular en los 90s y que hizo que las redes neuronales sean prácticas a la hora de entrenar comenzando a mediados de los 90s y hasta 2010 aproximadamente, las redes neuronales generaron un gran impacto entre psicólogos y científicos cognitivos; ellos las veían como buenos modos de la performance en la percepción humana y para diferentes tipos de conducta que la gente suele realizar en las pruebas psicológicas; sin embargo en lo que respecta a las aplicaciones de aprendizaje de máquina simplemente no eran tan buenas; no formaban parte del estado del arte y otros algoritmos lo hacían mejor que las redes neuronales en pruebas aplicadas como el reconocimiento de imágenes y en determinar si es un perro o un gato debido a esto hubo una suerte de invierno de las redes neuronales aplicadas que duró casi 2 décadas o aún un poco más; donde la gente no tomaba a las redes neuronales en forma muy seria como si fuera el estado del arte en los algoritmos del aprendizaje de máquina esto cambió dramáticamente a comienzos de 2010 y en forma particular hubo una suerte de explosión dramática de interés en las redes neuronales en 2012 voy a mostrarlo sobre bases anuales que hay varias competencias en la comunidad académica del aprendizaje de máquina donde grupos diferentes tratan de resolver problemas de aprendizaje de máquina y donde compiten unos contra otros basándose en qué algoritmos lo hacen mejor hay una competencia en particular que incluye la clasificación de imágenes en función de como se las muestran, ya hablamos antes de clasificar imágenes y decidir si son perros o gatos esta competencia, que se llama red de imágenes, tiene en verdad miles de clases clases que como pueden ver, en esta diapo tiene cosas como leopardos, hongos, ratones, toda clase de cosas, por lo que es una tarea mucho más difícil, no es simplemente perro o gato, tiene algo así como 1000 clases y el objetivo es tratar de predecir a qué clase pertenece la imagen; ahora bien han habido algunas mejoras en esta tarea en cada año; puede que la mejor actuación haya mejorado en un 1 o 2% y en 2012 sucedió algo muy dramático; por 1ra vez un algoritmo de una red neuronal obtuvo el 1er lugar en una competencia y mejoró en forma dramática por encima de cualquier programa que no fuera una red neuronal; en particular la red neuronal que fue enviada y que ganó el 1er puesto ganó por más de un 10% a las siguientes entradas que obtuvieron algo así como un 25% de error en vez de 15 ahora la mejor entrada utilizó características en el código programadas a mano cuyos objetivos eran capturar algunos aspectos de las imágenes y del reconocimiento visual usando algoritmos que fueron ajustados a mano y que habían estado en desarrollo por muchos muchos años por gente muy inteligente; pero la red neuronal esencialmente comenzó de 0 y aprendió a ganar por mucho, esto en verdad sorprendió a la gente, que una red neuronal que era de un tipo que no era de un dominio específico y que no había sido ajustada a mano lo pudiera hacer tan bien en el próximo video vamos a discutir que fue lo que hizo que esa red neuronal lo hiciera tan bien en esta competencia y que comenzara lo que podemos llamar la revolución del aprendizaje profundo que se está desarrollando justo ahora