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