en el último video hablamos brevemente acerca de la historia de la investigación
en redes neuronales y vimos como a comienzos de 2010 la arquitectura de las
redes neuronales empezó a ganar torneos de aprendizaje de máquina; en particular
estuvo la competencia de ImageNet que implicaba la clasificación de imágenes, en
la que la actuación de la red neuronal fue mucho mejor que cualquier otra
es interesante que ésto se hizo pese a que las actuaciones de los demás usaban
características de código hecha a mano y algoritmos corregidos a mano; esto nos
recuerda un poco acerca del desarrollo del aprendizaje de máquina para jugar al Go
donde AlphaGo tuvo éxito y pudo mejorar gracias a que redujo el impacto de las
características codificadas a mano, que fueron reemplazadas por características
que se aprendieron en forma automática a partir de grandes cantidades de datos
qué fue lo que hizo que el programa de las redes neuronales en ImageNet tan exitoso?
hoy vamos a llamarla al tipo de arquitectura que fue puesta en ImageNet y
que ganó, como una red neuronal profunda o una arquitectura de aprendizaje profundo
y aún cuando esto es un poco una muletilla hay algunas pocas características típicas
que definen a estas redes neuronales y las distingue de los usos de las redes
neuronales anteriores; entonces qué fue lo que pasó? qué fue lo diferente? en 1er
lugar el mismo diseño y la arquitectura de la red neuronal fue mucho más profundo y
estructurado y voy a definir que quiero decir con ambos términos en 1 minuto
2do se le pudo dar un enorme conjunto de datos; el conjunto de datos usado en estas
competencias creció y se hizo más grande con los años y resultó que las redes
neuronales lo hicieron muy bien cuando se las alimenta con muchos datos; por último
el que usó esta red neuronal usó tarjetas gráficas, que se desarrollaron para
mejorar los juegos sobre todo la parte gráfica, pero que pueden hacer un tipo de
operación llamada "multiplicación de matrices" que se usa mucho en las redes
neuronales y la usaron para entrenar la red neuronal en forma mucho más veloz que
con procesadores normales; esto permitió entrenar a la red durante mucho tiempo con
una enorme cantidad de datos y resultó que agregando más información y mayor cantidad
de entrenamiento hizo una gran diferencia en las redes neuronales
volvamos entonces al 1er punto, que estas redes profundas son realmente profundas y
más estructuradas. Recuerden que hablé de las redes neuronales con múltiples niveles
donde en vez de simplemente tener una entrada que va directamente a una salida
final, hay sumas ponderadas en el medio y que procesan en forma no lineal y cada uno
de estos niveles de sumas ponderadas y de procesos no lineales que se encuentran en
el medio de las entradas y las salidas, se denominan "niveles escondidos"
en las redes neuronales profundas hay típicamente muchos muchos muchos niveles
escondidos y muchos más que los que se usaban en los 80 y los 90, donde había
1 o 2 niveles ocultos en una red neuronal típica; hoy en día es posible tener
algunas docenas o incluso cientos de niveles ocultos en la arquitectura
moderna. Quiero que sepan 2 cosas sobre esto, antes del surgimiento de la
arquitectura profunda las redes de entrenamiento con muchos niveles ocultos
tenían varios problemas técnicos; sin embargo usando una función no lineal
resultó que era posible entrenar redes neuronales con muchos niveles ocultos y
resolver algunas de las dificultades computacionales; la otra cosa que quiero
comentarles es que no está del todo claro porque tener más niveles ocultos ayuda a
mejorar la actuación; tenemos algunas ideas; en general si miramos a las redes
neuronales con muchos niveles ocultos, por ejemplo yo diagramé este ejemplo
prototípico de una red neuronal que toma imágenes, toma la información en pixeles y
la salida, por ejemplo el nombre de la persona; puede que hayan visto que esto se
usa en facebook, por ejemplo, cuando reconoce a tus amigos en las fotos
en una red como esta, cuando hay muchos, muchos niveles escondidos y buscamos la
clase de patrones que parecen activar las neuronas en los diferentes niveles, parece
que se transforman, en algún sentido, más y más abstractas y conceptuales; en los
niveles más tempranos lo que en verdad activan las neuronas son cosas como los
bordes y los espacios con altos contrastes
en los niveles intermedios, las neuronas parecen activarse a partir de cosas como
narices, orejas, bocas, partes de la cara
y en los niveles finales parece que las neuronas responden a lo que podemos llamar
caras prototípicas o alguna clase de variación en los tipos de caras y en las
expresiones que la gente suele tener, entonces vemos que agregando más niveles
puede que estemos habilitados para capturar conceptos de niveles más y más
altos y conceptos más abstractos que son entonces recombinados en formas útiles
entonces esencialmente podemos pensar en las redes neuronales profundas como la
codificación de algunos supuestos acerca de que la clase de datos en los que
estamos interesados es frecuentemente jerárquica; tiene muchas escalas y
reutiliza algunos de los componentes de los niveles más bajos de la escala de
diferentes formas en las escalas más altas
la otra cosa que es diferente entre las arquitecturas más recientes de las redes
profundas y las más tradicionales de las
redes neuronales es que muchas de las arquitecturas del aprendizaje profundo
tienen mucha más estructura, acá en la pantalla a la izquierda pueden ver una red
neuronal tradicional; si bien tiene muchos niveles ocultos, esencialmente vemos todas
las neuronas de nivel conectadas a todas las neuronas del siguiente nivel
por ejemplo la red neuronal que ganó en ImagNet, de la que hablamos previamente,
vimos que la topología de esa red, en el lado derecho usando un diagrama de bloque
cada uno de los cubos representa a todo un grupo de neuronas; acá pueden ver que hay
una gran estructura, una suerte de doble flujo; las medidas de los bloques están
cambiando, algunos de ellos están muy conectados, algunos no están conectados,
hay mucho conocimiento y diseño puesto en la forma en que las neuronas se
conectan unas con otras. Quiero agregar que, específicamente para tareas con
imágenes como las de ImageNet, lo que se utiliza a veces es lo que se llama
niveles convolucionales. Los niveles convolucionales tiene patrones de peso
reiterados que son muy estructurados y que imponen una serie de restricciones sobre
las neuronas e imponen una suerte de estructura sobre el patrón de conectividad
posible para la red neuronal. Entonces vemos que a diferencia de las redes
neuronales más tradicionales, las redes profundas son a veces muy estructuradas
no es que tienen conectado todo con todo como se suponía antes; como ya les dije
el diseño de esta clase de arquitectura requiere de un poco de conocimiento del
dominio y en la actualidad es más un arte que una ciencia; la gente no entiende bien
como funciona, pero parece que hace una gran diferencia en la actuación de las
redes neuronales. Es muy interesante que algunos estudios recientes que muestran
que podemos entrenar a los algoritmos de aprendizaje de máquina para que ellos
mismos diseñen la topología de la red neuronal, que fueron entrenadas en grandes
conjuntos de datos; esto es muy interesante debido a que es una clase de
meta aprendizaje o de meta diseño para los algoritmos de aprendizaje de máquina y que
estos diseñen para otros algoritmos de aprendizaje de máquina y lo hacen tan bien
o mejor aún de lo que podrían hacerlos los seres humanos. Probablemente este es el
comienzo de la singularidad
Ahora dada esta receta que mencionamos para grandes cantidades de datos, para
mucho poder de cálculo y de entrenamiento de los procesadores gráficos y las
arquitecturas estructuradas de la conectividad entre las neuronas; las redes
profundas se están volviendo dominantes en casi todos los dominios del aprendizaje de
máquina o al menos en muchos de ellos; hemos hablado acerca del reconocimiento de
imágenes, de la clasificación de imágenes en función de los objetos dentro de ellas
ahora el reconocimiento de la voz, mucha gente se da cuenta que por ejemplo en Siri
en el iPhone o el reconocimiento de voz que usa Android, de repente fueron mucho
mejores; de golpe pudieron reconocer lo que la gente andaba diciendo con mucha
precisión. Muchas de estas tareas son debidas a las redes neuronales y a las
redes neuronales profundas usadas en esas aplicaciones
Otro aspecto está relacionado con la traducción; la traducción de máquina de un
lenguaje humano a otro es tradicionalmente una tarea muy difícil para la inteligencia
artificial y se cree que los modelos estadísticos como las redes neuronales y
muchos otros tipos de algoritmos de aprendizaje de máquina nunca podrán
hacerlo bien debido a que son demasiado estructurados; hay demasiada sintaxis y
demasiadas reglas que seguir, resulta que dada la suficiente cantidad de datos, las
redes neuronales profundas en verdad lo hacen muy bien y si usan el Google
Translate podrán ver que ellos pasaron de un sistema con características diseñadas a
mano, diseñadas durante muchas décadas por linguistas a entrenar a una red neuronal
profunda y muy grande, sobre grandes corpus de textos de Internet y lo hace
mejor traduciendo que los algoritmos que fueron diseñados a mano
y finalmente mencionamos cosas como los video juegos y las placas de juego que
supervisan problemas de apendizaje. Brendan habló acerca del desarrollo de los
algoritmos de juego del Go y hoy día mucho del aprendizaje de máquina que fue usado
por AlphaGo era una red neuronal profunda
entonces en combinación con otras técnicas vimos que con AlphaGo las redes neuronales
profundas realmente resuelven problemas de IA, que parecían que no tenían solución
durante muchos muchos años
hay muchos otros ejemplos del aprendizaje profundo que lo hacen muy bien en tareas
que se pensaba, eran muy difíciles