Está en la página 1de 26

Tabla de contenidos

 1. Deep Learning: Concepto


o 1.1. Relación del Aprendizaje profundo con la IA
o 1.2. Aprendizaje profundo
o 1.3. Diferencia entre Aprendizaje automático y Aprendizaje profundo
 2. Redes neuronales
o 2.1. Definición
o 2.2. Conceptos básicos
o 2.3. Tipos de neuronas artificiales
o 2.4. Ventajas de una red neuronal
 3. Entrenamiento de redes neuronales
o 3.1. ¿Cómo se entrena una red neuronal?
o 3.2. Algoritmo de retropropagación de error
o 3.3. Método del descenso del gradiente
o 3.4. Optimización
o 3.5. Función de coste
 4. Tipos de Redes Neuronales Artificiales
o 4.1. Perceptrón simple
o 4.2. Perceptrón multicapa
o 4.3. Redes neuronales convolucionales
o 4.4. Redes neuronales recurrentes
o 4.5. Redes generativas adversarias (GANs)
 5. Herramientas
o 5.1. Conjuntos de datos
o 5.2. Aprendizaje por transferencia
o 5.3. Modelos preentrenados
o 5.4. Programación de redes neuronales
o 5.5. Machine Learning for Kids y Scratch
 6. Uso en el aula
o 6.1. Generación de sonidos
o 6.2. Conducción autónoma
o 6.3. Procesamiento de Lenguaje Natural
 7. Información adicional

Aprendizaje profundo
1. Deep Learning: Concepto

1.1. Relación del Aprendizaje profundo con la IA

La inteligencia artificial está compuesta por diferentes campos y el área más estudiada
en la actualidad es el aprendizaje automático. En este curso vamos a ver ampliamente
las posibles aplicaciones y las técnicas basadas en este campo que pretenden imitar a
la inteligencia humana y cada vez se acercan más a nuestra forma de pensar. El
aprendizaje profundo o Deep Learning se trata de una subárea específica dentro del
aprendizaje automático que se basa en las técnicas que utilizamos los humanos para
aprender y en las que se analiza información con el objetivo de sacar diferentes
conclusiones. Estas conclusiones dependen de muchos factores, entre ellos del
conocimiento previo. El aprendizaje profundo intenta replicar el funcionamiento de las
miles de neuronas que se conectan en nuestro sistema nervioso haciendo uso de lo
que llamamos redes neuronales.

Figura 1: Áreas de la Inteligencia Artificial

Para hacer un breve recordatorio vamos a ver las siguientes definiciones:


 Inteligencia artificial: La inteligencia artificial es el conjunto de técnicas que se
utilizan para que las máquinas sean capaces de imitar a los humanos
 Aprendizaje automático: El aprendizaje automático es el área de la
inteligencia artificial especializada en proveer a las máquinas de la capacidad
de aprender por sí mismas.
 Aprendizaje profundo: Es un conjunto de algoritmos de aprendizaje
automático que utilizan varias capas de procesamiento para imitar el
comportamiento de las neuronas humanas.

1.2. Aprendizaje profundo

El cerebro humano es un órgano complejo del que todavía no conocemos


completamente su funcionamiento. Lo que si sabemos es que está formado por
millones de neuronas que, mediante complicados procesos químicos y corrientes
eléctricas, son capaces de realizar numerosas funciones. Cada una de estas neuronas
transmite los mensajes que reciben de otras neuronas por medio de señales
eléctricas. Los neurotransmisores son sustancias químicas que se utilizan para regular
las conexiones entre neuronas y muchas de la funciones cognitivas. Nuestro cerebro
recibe una gran cantidad de información que procesa para que podamos pensar,
tomar decisiones o hablar.

Las técnicas de aprendizaje profundo o Deep Learning utilizan estructuras que imitan
al sistema nervioso y se organizan en varias capas. Cada una de estas capas está
formada por neuronas y cada neurona realiza una tarea concreta. El sistema nervioso
tiene una estructura característica formada por diferentes áreas y cada una se encarga
de una tarea específica. Por ejemplo, hay muchos científicos que creen que cada lado
del cerebro humano está especializado en unas funciones concretas: el hemisferio
izquierdo es más lógico o analítico y el hemisferio derecho es más emocional y
creativo.

Figura 2: Tarea de cada hemisferio cerebral. Fuente: Pixabay

1.3. Diferencia entre Aprendizaje automático y Aprendizaje profundo

Estos dos términos se refieren a técnicas utilizadas para el aprendizaje automático de


una inteligencia artificial (en adelante IA). Para que una IA sea capaz de aprender,
algunos modelos de aprendizaje automático utilizan las redes de neuronas artificiales.
Las redes neuronales pueden representarse por una simple neurona o por múltiples
capas de neuronas conectadas entre sí. El modelo será más complejo y su
aprendizaje será más profundo mientras más capas contenga. Si lo que se pretende
es simular el funcionamiento del cerebro necesitaremos un gran número de neuronas
organizadas en capas y con un nivel de profundidad considerable. La particularidad de
un modelo de aprendizaje profundo es precisamente el profundo nivel de aprendizaje
que se llega a conseguir gracias a la utilización de un gran número de capas.

En resumen, si en un modelo de aprendizaje automático utilizamos una red neuronal


con una gran cantidad de capas, se trata de un modelo de aprendizaje profundo.
Cuantas más capas utilice el modelo, más complejos son los problemas que podrá
resolver.

Vídeo 1: Diferencias (entre machine learning y Deep learning)

Machine learning  generar modelos que nos permitan predecir, encontrando patrones en
los datos. Nosotros estraemos las características

Deep learning la máquina las estrae ella… son modelos más potentes
2. Redes neuronales

2.1. Definición

Una red neuronal se compone por una o más neuronas distribuidas en varios niveles o
capas. Cada neurona está conectada con otras de nivel posterior y anterior mediante
las conexiones. En los primeros niveles se aprenden las tareas más simples y se
envían a los siguientes niveles para realizar aprendizajes cada vez más complejos
hasta llegar a la capa de salida. Una red neuronal artificial es una representación
simple que pretende imitar el modo en el que un cerebro humano procesa e interpreta
la información que le llega del mundo exterior.

Figura 3: Red neuronal con varias capas. Fuente: Subida por Gengiskanhg a
Wikipedia., CC BY-SA 3.0 <http://creativecommons.org/licenses/by-sa/3.0/>, en
Wikimedia Commons
Una red neuronal normalmente se divide es tres partes:

 Conexiones de entrada: Es la capa de entrada que representa a los estímulos


de entrada que llegan a través de los sentidos. Las variables de entrada son de
las que depende el resultado final y pueden ir variando en el tiempo. Estos
valores se van transmitiendo a través de las siguientes capas hasta llegar a la
última.

 Capas ocultas: Las entradas conectan con una o varias capas, llamadas
capas ocultas que realizan un procesado de la señal mediante funciones
matemáticas. A esta parte de la red se le suele denominar también con el
término de “caja negra” porque una vez diseñada la red neuronal ya no es
necesario conocer en detalle los cálculos realizados para entrenarla y
comprobar su funcionamiento.

 Conexiones de salida: Esta es la última capa de la red neuronal y proporciona


el valor de las variables que representan el resultado final del procesado.
Puede estar formada por una o varias neuronas finales.

La unión de todas estas capas es lo que conforma el modelo de aprendizaje basado


en redes neuronales. Una red neuronal consigue resultados más detallados cuantas
más capas ocultas se le añaden pero también exige una potencia de cálculo que
necesita mayores recursos. Para entrenar redes neuronales con muchas capas
necesitaremos ordenadores con potencia de cálculo alta. El equilibrio entre el número
de capas y los recursos necesarios es lo que hará a nuestro modelo adaptarse a las
necesidades del diseño.

2.2. Conceptos básicos

A continuación vamos a ver las definiciones de los principales conceptos que se


utilizan cuando trabajamos con redes neuronales.

Figura 4: Modelo de una neurona artificial. Fuente: Imagen del usuario


Yearofthedragon, CC BY-SA 3.0 <http://creativecommons.org/licenses/by-sa/3.0/>;, en
Wikimedia Commons
Neurona
La unidad básica de procesamiento en una red neuronal es una simple neurona. Una
red neuronal artificial es un sistema computacional inspirado en las sinapsis que
conforman las neuronas de nuestros cerebros. En este caso no son neuronas
biológicas, sino nodos, los nodos pueden ser de entrada, ocultos o de la salida para
mostrar la información procesada.

Cada uno de los nodos puede tener una o varias entradas a donde llegan las señales
o parámetros de entrada (x1, x2,...etc.). Cada señal que llega se multiplica por un valor
que representa la intensidad de esa señal. A la salida de nuestra neurona tenemos la
suma ponderada de cada uno de los datos de entrada y multiplicados por la intensidad
de cada una de ellas. Este modelos es muy parecido al modelo de regresión lineal que
vimos en el anterior curso de aprendizaje automático.

Los valores con los que trabaja una neurona suelen ser valores binarios (0 y 1) por lo
que antes de enviar la señal a otra neurona se realiza un cálculo que transforma la
señal de entrada y se activa la salida. La representación se suele hacer mediante
puertas lógicas que son operaciones matemáticas con número binarios. Este es un
ejemplo del comportamiento de una neurona cuyo funcionamiento se representa como
una puerta lógica OR.

Conexiones
Para solucionar problemas complejos concatenamos varias neuronas que transmiten
la información mediante conexiones. Cada conexión tiene su peso o intensidad, cuyo
valor se asigna al azar de acuerdo a la importancia que considere el diseñador.
Posteriormente, durante el entrenamiento, se estos valores se pueden modificar.

Peso
El peso es la importancia de cada señal de entrada a la neurona. La fuerza de las
señales de entrada se regula modificando estas variables (w1, w2, ...etc.). El objetivo
del entrenamiento es reducir el error al máximo posible y para ello se modifican estos
valores hasta conseguir el punto óptimo.

Sesgo
El sesgo o Bias es una entrada adicional que siempre tiene valor 1 y que se utiliza
para activar la neurona aunque ninguna de las demás entradas nos proporcionen valor
a la entrada. El peso de esta entrada se representa con la letra “b”.

Función de activación
Las neuronas tienen, como hemos visto anteriormente, una respuesta lineal y cuando
conectamos varias neuronas en capas, la respuesta será también una línea recta.
Para obtener salidas diferentes y permitir la resolución de problemas complejos se
añade una función de activación que puede ser de varios tipos según el resultado que
deseemos. Esta función hace que la respuesta total del sistema se convierta en no
lineal y se ajuste de una manera más real a la salida. Lo que hace realmente es
distorsionar el plano de la salida de la neurona para que al sumarse con el resto de
respuestas neuronales forme la figura de nuestra respuesta deseada. Algunas de las
funciones de activación más utilizadas en el diseño de modelos de aprendizaje
profundo son las siguientes:

 Sigmoide: Esta función tiene como entrada cualquier valor real. El rango de
valores de salida de esta función está ente el valor 0 y el valor 1. Cuanto mas
grande sea el valor de entrada, más cerca del valor 1 estará la salida. El valor
de e es una constante matemática que se utiliza como base para los logaritmos
naturales.
 TanH: La función de tangente hiperbólica es muy parecida a la anterior. El
rango de valores de salida para esta función es cualquier valor que se
encuentre entre -1 y +1. La gráfica de su respuesta tiene forma se S y su valor
aumenta cuanto mayor es el valor de la entrada.

 ReLU: Función de activación de unidad lineal rectificada es una de las


funciones más utilizadas en redes neuronales de aprendizaje profundo. Es una
función simple que evita algunas de las limitaciones en la fase de
entrenamiento que tienen las funciones anteriores. Esta función genera un 0 a
la salida siempre que la entrada sea un número negativo y muestra el valor de
entrada cuando la entrada es igual o mayor que 0.

Se utiliza una función de activación para cada capa de la red neuronal y la elección de
esta función es parte del diseño. En las capas ocultas de la red controlará el
aprendizaje durante la la fase de entrenamiento y en la capa de salida nos
proporcionará diferentes tipos de predicciones del modelo. Por esta razón, la elección
de la función de activación es una parte importante del diseño de nuestra red neuronal
artificial que debemos tener muy en cuenta.
2.3. Tipos de neuronas artificiales

Las neuronas artificiales se pueden clasificar dependiendo del tipo de salida que son
capaces de proporcionar. Las salidas de las neuronas pueden ser binarias si a la
salida solo dan los valores 0 y 1 o pueden ser reales si su valor está comprendido
entre 0 y 1. Otra forma de clasificar a las neuronas es teniendo en cuanta si son
lineales o no lineales.

Neuronas lineales
Como hemos visto anteriormente, el funcionamiento de una neurona o nodo de una
red neuronal es muy similar al modelo de regresión lineal que nos da una recta como
salida. La función de la recta depende de las señales de entrada a esa neurona. El
funcionamiento a la salida de una neurona lineal se suele representar con la siguiente
función, en la que b es el sesgo, las w son los pesos y las X son las señales de
entrada.

Uno de los problemas que puede presentar este tipo de neuronas es que con
variaciones pequeñas en las señales de entrada, nuestra recta de salida puede sufrir
grandes variaciones de señal. Además, esta neurona no se podrá adaptar a todo tipo
de señales por las limitaciones del modelo lineal.

Neuronas no lineales
Cuando nuestra salida no depende exclusivamente de las señales de entrada, no sufre
una variación tan brusca al ser modificada la intensidad de estas señales. Si utilizamos
alguna de las funciones de activación que acabamos de ver, nuestra respuesta ya no
será lineal y se podrá acotar la salida a los valores que queramos. Por ejemplo, si
utilizamos la función sigmoide, nuestra salida estará acotada entre los valores 0 y 1
para cualquier valor que tomen las entradas.

2.4. Ventajas de una red neuronal

Las utilización de redes neuronales conlleva una serie de ventajas entre las que
podemos destacar:

 Tolerancia a fallos: En una red de neuronas se guarda la información repetida


en varias neuronas que procesan la información en diferentes puntos de la red.
Al contar con información redundante, nuestro sistema podrá seguir
funcionando en el caso de que una parte de la red deje de funcionar.
 Flexibilidad: La red se adapta a los cambios de las entradas y mantiene el nivel
de la señal de salida aunque se esté recibiendo con ruido o las condiciones de
entrada cambien.

Por nombrar alguna desventaja de utilizar estas redes podríamos decir que el
tiempo de aprendizaje necesario en algunas ocasiones es muy elevado. Se
requiere mucho tiempo para reconocer gran cantidad de patrones para
clasificar cuando la variedad de los datos de entrada es muy abundante.

Vídeo 2: Red neuronal ( Cómo funcionan las redes neuronales)

Habla de las finciones: simoide, etc…

3. Entrenamiento de redes neuronales

 3.1. ¿Cómo se entrena una red neuronal?

El proceso de entrenamiento de una red neuronal hace que el modelo sea capaz de
responder de manera autónoma al ser estimulado mediante diferentes valores de
entrada. Lo que se realiza exactamente es el ajuste de los pesos correspondientes a
las entradas de cada una de las células o nodos. La respuesta en las neuronas de la
capa de salida debe ser lo más parecida posible a los valores esperados y así
conseguir que el error cometido sea el mínimo. Al principio todas las entradas tienen
valores iniciales sin ajustar y la respuesta de la red puede que no tener mucho sentido.
Durante el entrenamiento el modelo va aprendiendo y proporcionará respuestas cada
vez más adecuadas.

Para realizar la fase de entrenamiento necesitamos un conjunto de datos diverso de


los que conocemos todas las respuestas deseadas. Se le van suministrando estos
datos a la red y se va comprobando que las respuestas obtenidas son las correctas,
comparándolas con el resultado deseado. Gracias a esta información, la red neuronal
va buscando el error cometido hacia atrás, en dirección a las entradas, y va
modificando los pesos de las neuronas que deben ser ajustadas. De forma gradual la
precisión de las respuestas va aumentando y los resultados van coincidiendo con las
respuestas correctas.

La red examina cada uno de los valores individualmente y genera una predicción.
Cuando esta predicción es incorrecta realiza los ajustes necesarios modificando los
pesos de algunas neuronas para, de esta manera, ajustar la salida. La repetición de
este proceso se realiza las veces que sean necesarias hasta mejorar la respuesta y
reducir el error al mínimo valor establecido. Cuando haya terminado el entrenamiento
el modelo será capaz de dar respuesta correctas a los problemas o a entradas cuya
respuesta correcta sea conocida previamente.

La función de activación de cada neurona debe tener una señal con forma y rango
establecidos según el tipo de función utilizada. En el momento en el que la señal
analizada no es como esperábamos, es cuando esa neurona reconfigura los pesos de
sus entradas y se vuelve a repetir todo el proceso. Las funciones de activación
estudiadas han sido elegidas, entre otros motivos, porque tienen una derivada de
primer orden fácilmente calculable para un valor de entrada. Esta última característica
es importante ya que, como veremos más adelante, para el entrenamiento de redes
neuronales se suele utilizar el algoritmo de retropropagación en el que se necesita
calcular la función derivada del error de predicción antes de modificar los pesos.

Clasificación entre perro o gato


Vamos a ver un ejemplo de entrenamiento de un modelo que aprende a detectar las
diferencias entre perros y gatos. En este caso de aprendizaje profundo se utiliza una
red neuronal con diferentes pesos de señales de entrada que se van ajustando. En el
caso de los perros cada capa de neuronas se especifica en una tareas específica
como identificar el pelaje, los ojos, el hocico, las patas, etc. Para que las neuronas
sean capaces de generalizar e identificar a un perro en cualquier imagen es importante
que se le muestre primero un gran número de imágenes etiquetadas como perro y
también de imágenes que no muestran ningún perro. Las imágenes deben ser de una
variedad de situaciones, con fondo liso y paisaje en el fondo, con luz y con poca
iluminación, con diferentes posturas,...etc. La red de neuronas será capaz de ajustar
los pesos por sí misma para reconocer en todo tipo de imágenes a los perros que se
muestren en ellas. De forma automática el modelo extrae los patrones característicos
que definen la imagen de un perro. La respuesta tendrá un error menor cuantas más
iteraciones de ajuste se hayan realizado. Una característica que se puede ajustar en el
diseño de la red es precisamente este error máximo permitido o el número de
iteraciones.

3.2. Algoritmo de retropropagación de error

Es un mecanismo que permite a las neuronas aprender por sí mismas. Se entrena a la


red para que aprenda de sus propios errores. En la retropropagación se utiliza la regla
de la cadena, con la que se calcula la derivada del error de cada capa y luego la
derivada de la penúltima capa. A estas derivadas se les conoce por el nombre de
gradiente. Se utiliza el descenso del gradiente para ajustar los parámetros o pesos de
las neuronas.

3.3. Método del descenso del gradiente

Para disminuir el error cometido se realiza una estimación del ajuste que se debería
hacer en los valores de entrada. Esta estimación se hace por el método del descenso
del gradiente que calcula la pendiente hasta un error cero por medio de las derivadas.
El valor del gradiente o derivada se le resta al peso y con este cálculos se va
reduciendo el valor de error. En cada iteración el valor de predicción de la red se
acerca cada vez más al valor real.

3.4. Optimización

Después de lo que hemos visto y de saber que los parámetros iniciales en las
entradas de las neuronas se asignan al azar, podemos suponer que la primera
predicción que haga nuestro modelo no será demasiado precisa. Para que nuestro
diseño tenga una calidad aceptable debe tener una tasa de acierto que puede variar
dependiendo del problema a resolver. No es lo mismo reconocer emociones para lo
que nos bastaría con un 90% de confianza, que realizar otras tareas más críticas como
la detección del cáncer o los test de embarazos que deberían ser lo más precisas
posible.

Existen algunas variables que definen la estructura de nuestros modelos y que no se


puedes modificar con la función de retroalimentación como son el número de capas o
el número de neuronas. A estas características de la red se les
llama hiperparámetros y también se adaptan para conseguir modelos más precisos.
Optimizar nuestra red consiste en encontrar el equilibrio entre la precisión de los
resultados y los recursos invertidos. Un factor importante a tener en cuenta es el
tiempo de entrenamiento que en redes de gran tamaño puede llevar días e incluso
semanas o meses. En algunas ocasiones se pueden llegar a entrenar dos modelos
con hiperparámetros diferentes de forma simultánea y posteriormente escoger el que
consiga más precisión. Para poder realizar esto necesitamos disponer de máquinas
con una potencia de cómputo mayor de lo habitual. Por ejemplo, para entrenar
conjuntos de datos consistentes en imágenes en 3D o vídeo de alta definición se
utilizan GPUs muy potentes. Otra opción, si no disponemos de un ordenador con las
prestaciones necesarias, es utilizar alguno de los servicios de la nube para realizar los
cálculos.

Antes del entrenamiento deberíamos decidir la arquitectura y el entorno de


entrenamiento para que el resultado sea óptimo. El problema de elegir el mejor
conjunto de hiperparámetros que vamos a utilizar en nuestras red neuronal es en lo
que consiste la optimización del modelo. Existen varios métodos estadísticos que
ayudan en la toma de decisiones como son la búsqueda en cuadrícula o la
optimización bayesiana. Los principales hiperparámetros que
podemos modificar son:

 Número y tamaño de las capas: La complejidad y la capacidad de


aprendizaje del modelo dependen en gran medida de su tamaño y arquitectura.
Normalmente que primero modificamos el es número de capas ocultas y las
neuronas que las componen.

 Ratio de aprendizaje: Define la rapidez con que se modifican los parámetros


mientras la red va aprendiendo, es cuando se optimiza el modelo. Es difícil
ajustar este valor porque depende de muchos factores. Si es muy alto puede
que el modelo no sea capaz de aprender correctamente y si es muy bajo puede
que el entrenamiento no llegue a finalizar nunca.

 Algoritmo de optimización: El método del descenso del gradiente fue uno de


los primero algoritmos que se utilizaron para entrenar redes. Con el tiempo se
ha visto que cuando la red aumenta mucho su tamaño, este algoritmo no da los
resultados esperados por calcular en ocasiones valores muy cercanos a cero y
detener la optimización. En estos casos utilizaremos otro tipo de algoritmo de
optimización más adecuado.

 Regularización: Un modelo con sobreajuste no es capaz de predecir


correctamente si le proporcionamos datos nuevos porque ha aprendido las
respuestas de memoria. Existen métodos de regularización para evitar este
problema.

3.5. Función de coste

La función de coste o función de error es la diferencia entre los resultados obtenidos y


los resultados esperados. Los ideal sería que esta función se acercara los máximo
posible a cero. El descenso del gradiente muestra como la variación en la intensidad
de las conexiones afecta a la precisión de la respuesta. Después de ajustar los pesos,
la salida debería ser bastante precisa pero podemos observar que no siempre es así y
que, a veces, hay que ajustar el error.

La propagación de la señal hacia adelante se realiza alimentando a la red con las


señales entrada. Lo primero que hacen estas señales es pasar por las primera capa
de neuronas sin que sufran ninguna modificación. En la segunda capa la señal se
multiplica por el valor del peso, se suma al resto de señales de entrada y se pasa por
la función de activación. Los datos van pasando de capa en capa hasta llegar a la
ultima, la capa de salida.

En la retropropagación que ocurre posteriormente, comenzamos con el valor de la


salida que es el valor de la predicción. El error lo podemos calcular comparando el
valor de predicción con el valor que tenemos realmente en la salida. La función de
pérdida nos da el valor del error y posteriormente se calcula la derivada de ese error y
de los pesos. Este proceso se repite las veces que sean necesarias para alcanzar un
valor máximo de error permitido. Se suelen programar uno o varios criterios de parada
con el objetivo de que el entrenamiento no se alargue demasiado en el tiempo.

Vídeo 3: Ejemplo con TensorFlow Playground ( ejemplo con tensorflow )

Playgraund.tensorflow.org

4. Tipos de Redes Neuronales Artificiales


Figura 5: Redes neuronales. Fuente: Pixabay

4.1. Perceptrón simple

Rosenblatt en 1959 creó el perceptrón, el equivalente matemático a una neurona en el


mundo biológico. El modelo inicial era una neurona simple que podía resolver
problemas lineales sencillos de clasificación de objetos. Los investigadores de la
época pronto se dieron cuenta de que con ese modelo no era posible clasificar objetos
de forma no lineal o que tuvieran más de dos clases diferentes. Por esta razón, en lo
años 70 se perdió el interés por seguir investigando en el campo de las neuronas
artificiales. A este periodo en el que en se investigó en el tema se le llama el invierno
de la IA.

4.2. Perceptrón multicapa

En 1986 y gracias al desarrollo del algoritmo de retropropagación de errores se retomó


la investigación en las redes neuronales artificiales. El perceptrón multicapa se basa
en la estructura básica del perceptrón simple. Utiliza neuronas o nodos conectadas
formando capas y cada una de ellas utiliza una función de activación. Antes del
entrenamiento, los pesos se asignan de forma aleatoria y, con la retroalimentación,
estos pesos se van ajustando hasta obtener la salida esperada. Con este modelo es
posible resolver problemas de clasificación no lineales y reconocimiento de patrones.
4.3. Redes neuronales convolucionales

Figura 6: Reconocimiento de patrones en imágenes. Fuente: Pixabay

Este tipo de redes poseen una arquitectura compleja que procesa los datos recibidos
en la numerosas capas que la forman. Cada capa se encarga de una tarea concreta
como reconocer colores, bordes, formas, sombras,...etc. Actualmente son las
estructuras más efectivas para reconocimiento de imágenes o procesado de audios.
Están basadas en la arquitectura de las redes neuronales tradicionales pero se
añaden algunas capas al principio de la red para facilitar el trabajo con los pixeles que
forman las imágenes. Las capas más importantes son las siguientes:

 Capa de convolución: En esta capa se extraen las características principales


de una imagen. Se utilizan unos filtros especializados llamados también
kernels.

 Capa pooling: Esta capa selecciona los pixeles que mas representan a la
imagen y los agrupa para mejorar la respuesta.

 Capa ReLU: Se suele colocar una capa no lineal después de cada capa de
convolución. La función que se suele utilizar es la función ReLU porque permite
un rápido entrenamiento manteniendo una buena precisión a la salida.

La visión por ordenador es un área que ha evolucionado muy rápido gracias a las
redes neuronales convolucionales. Los avances mas importantes en esta área son:
 Clasificación de imágenes: Es la tarea que mejor resuelven este tipo de
redes. A partir de muchas imágenes son capaces de encontrar características
similares y clasificarlas por categorías. ¿Es un perro?, ¿hay un coche? ¿está
triste?. Cada capa oculta de la red se encarga de detectar una característica
específica del objeto que se quiere clasificar y la respuesta dependerá de que
muchas las características que sean similares al objeto dado. Por ejemplo, si
queremos clasificar frutas y le enseñamos un limón a la red, existirá una capa
que detecte su forma ovalada, habrá otra para detectar el color amarillo, otra
para la textura de la corteza,...etc. En el siguiente vídeo se puede ver la
arquitectura de las capas de un modelo de red neuronal convolucional para
detección de imágenes que necesitó semanas de entrenamiento.

Vídeo 4: Clasificar frutas y verduras

VGG16 neuronal networks

1 .- Data collection

2- model creation

3.- model training

4.- visualization

Detección de objetos: Nosotros los humanos podemos reconocer de forma casi


inconsciente cualquier objeto con solo mirarlo durante un momento. Para las máquinas
esta es una tarea complicada y, más aún, si las condiciones de visibilidad no son
favorables. Una red neuronal convolucional es capaz de detectar solamente los
objetos para los que ha sido entrenada, los que no conozca con anterioridad no los
puede detectar. A veces también necesitamos saber la posición a tiempo real de un
objeto y existen redes entrenadas para ello. Normalmente se utiliza un recuadro para
señalar y otro para seguir el movimiento del objeto detectado. Si vamos en un coche
autónomo, este debe detectar a los demás coches, a los peatones y demás objetos en
la calzada incluso bajo condiciones con poca visibilidad. En los siguientes vídeos
puedes ver el funcionamiento de un modelos que es capaz de detectar varios objetos y
clasificarlos según su tipo.

Vídeo 5: Tráfico

Vídeo 6: Detección de carriles

 Transferencia de estilos: Se pueden generar nuevos estilos mezclando


características de varias imágenes. Por ejemplo, yo he pintado un cuadro con
flores y me gustaría ver como se vería mi cuadro con el estilo del pintor Vincent
van Gogh. Una red neuronal convolucional podría detectar y mezclar los
patrones para generar un una nueva versión del lienzo de mis flores incluyendo
el toque característico del artista. A continuación se muestran el ejemplo de las
versiones con el estilo de tres artistas muy famosos: Vincent van Gogh,
Francisco de Goya y Leonardo Da Vinci.

La operación de convolución

Figura 7: Transferencia de estilos de pintores famosos. Fuente: Elaboración propia

El cálculo de la convolución extrae una porción del mapa de pixeles de la imagen y le


aplica un filtro para conocer nuevas características del objeto. Se crea un mapa de
características a la salida del modelo que puede tener un tamaño y profundidad
diferente a la entrada. El tamaño de la porción que se extrae suele ser de entre 3x3 y
5x5 pixeles. La profundidad del mapa de características depende del número de filtros
que se le haya aplicado. Se extraen varias porciones de la imagen del mismo tamaño
y se van moviendo en el espacio pixel a pixel hasta cubrir el total de pixeles. Con esta
técnica se consigue que el valor de cada uno de los píxeles del mapa de
características esté relacionado con varios de los píxeles vecinos.
Figura 8: Convolución de matrices para el filtrado de imágenes. Fuente: Elaboración
propia

Al aplicar un filtro se está multiplicando cada valor de la porción extraída de la imagen


por el valor que se encuentra en la misma posición del filtro convolucional.
Posteriormente se suman todos estos valores y se coloca el resultado en la posición
correspondiente del mapa de características de la salida. Repitiendo este proceso para
todas las porciones posibles obtenemos el resto de los valores de la matriz resultante
una vez aplicado el filtro convolucional.

Durante el entrenamiento se va mejorando la eficacia de los filtros para detectar mejor


las diferentes características. Cuanto más aumenta la calidad de los filtros, o la
profundidad del mapa de características a la salida, más aumenta el número de
características que el modelo es capaz de detectar. El tiempo necesario para el
entrenamiento va aumentando a medida que aumentan los filtros por lo que el diseño
debe tener en cuenta esto con el objetivo de no añadir más filtros de los necesarios.

En definitiva, los filtros de nuestro modelos van aprendiendo a detectar patrones con el
entrenamiento. Para obtener cada uno de estos filtros se realizan diferentes cálculos
matemáticos sobre los pixeles de la imagen de entrada, entre ellos la operación de
convolución.

4.4. Redes neuronales recurrentes

Las redes neuronales que hemos visto hasta ahora tienen un flujo de datos que
siempre va en la misma dirección, desde la capa de entrada hacia la capa de salida.
También existen redes en las cuales la información se transmite desde una capa hacia
las capas anteriores. La neuronas de una capa oculta pueden tener una conexión a las
neuronas de entrada y, a la vez, a las neuronas de su misma capa. De esta manera la
red puede modificar una respuesta dependiendo de las respuestas que ha tenido
anteriormente. Este tipo de red se utiliza para calcular secuencias de datos en el
tiempo y dotan de “memoria” al modelo.

Una de las aplicaciones de estas redes es para el análisis de textos. Por ejemplo, para
detectar si una frase tiene un significado positivo o negativo, la red va obteniendo y
modificando la respuesta mientras escribimos las frase. El último resultado tendrá en
cuenta los resultados anteriores que se han calculado antes de terminar la frase. Con
estas predicciones la red está utilizando su memoria para predecir la misma salida
pero en momentos diferentes.
Anteriormente vimos el algoritmo de retropropagación que se utiliza en el
entrenamiento de redes neuronales. Para las redes recurrentes no es posible utilizar
este algoritmo directamente por las conexiones que existen con las capas anteriores.
Se pueden utilizar otros algoritmos de optimización para entrenar este tipo de redes
aunque no son tan eficientes como el de retropropagación. Por esta razón una de las
soluciones es adaptar el algoritmo de retropropagación. La adaptación de este
algoritmo convierte la red recurrente en una red de una sola dirección y recibe el
nombre de algoritmo de retropropagación en el tiempo.

Codificador automático
Es un tipo de arquitectura de red en la que primero se obtiene toda la secuencia de
datos de entrada y cuando se ha terminado es cuando se genera la respuesta del
modelo. Las redes neuronales recurrente suelen utilizar esta configuración, ya que se
utilizan principalmente para trabajar con secuencias de datos. Se le llama codificador a
la primera parte de la red y decodificador a la segunda parte. El decodificador es el
encargado de crear la secuencia de salida que dependerá de los datos que ha recibido
del codificador.

En el campo de la traducción automática del lenguaje este modelo es aplicado con


gran éxito. La red primero utiliza toda la información que le llega de una frase en el
idioma a traducir y después genera la frase traducida palabra por palabra. El
codificador en este caso comprime toda la frase en un vector que posteriormente el
decodificador será capaz de interpretar.

4.5. Redes generativas adversarias (GANs)

Un tipo de red que se está utilizando mucho en la actualidad es la red generativa


adversaria o también llanada red antagónica. Los modelos de redes generativos
utilizan el aprendizaje profundo para generar nuevas respuestas de tipo imágenes,
composiciones musicales o historias escritas. Para poder realizar la tarea de
generación se hace uso de dos redes neuronales con numerosas capas ocultas que
se encuentras enfrentadas entre sí. Cada una de las redes por separado tiene una
tarea contraria, una genera respuestas y la otra discrimina.

Un ejemplo de esto podría ser una IA que genera imágenes nuevas de objetos a partir
de, solamente, algunas indicaciones. Si le indicamos que genere una foto de una casa
con chimenea en el campo a la primera de las redes, la red generadora, creará una
imagen que se parezca lo máximo posible a una casa con esas características. La
segunda red, la red discriminadora, va a recibir la imagen generada y va a comprobar
si lo que muestra en ella se parece a la foto de una casa o no.

Este tipo de redes se entrenan con millones de imágenes diferentes para que la red
que discrimina sea capaz de reconocer una casa real de una casa generada por
ordenador. En el ejemplo anterior tendríamos a la entrada del modelo muchísimas
fotos de casas con diferentes chimeneas y en lugares de la naturaleza diferentes. En
un principio, para la segunda red es fácil acertar porque la primera red genera
imágenes de casas al azar y sin mucha precisión. Pero con el tiempo, la red
generativa va aprendiendo y compone fotos cada vez más realistas con lo que la tarea
de la red discriminadora se va complicando. Como vemos, en la fase de entrenamiento
las dos redes aprenden al mismo tiempo mejorando ambas su respuesta.

Los resultados generados pueden llagar a ser espectaculares y tienen diferentes


aplicaciones, desde mejorar la resolución de una imagen hasta componer la banda
sonora de una película. La calidad del resultado es tan alta que, en la mayoría de
ocasiones, incluso a los humanos nos será difícil diferenciar si algo ha sido generado
por una persona o por un ordenador. ¿Cuáles de las siguientes imágenes crees que
pertenecen a personas reales? ¿Cuáles han sido generadas por una IA?.

Figura 9: Fotos de personas generadas por ordenador. Fuente: Elaboración propia

La empresa Nvidia utiliza las redes generativas adversarias para mejorar la calidad e
imagen de las videoconferencias en sus productos. Al recibir un vídeo se ocupa mucho
espacio del ancho de banda de la conexión. Con este método solamente es necesario
enviar alguna imagen de la persona que se va a conectar al principio de la conexión y
la red le añade los cambios faciales para hablar, moverse o reír. Lo que realmente se
transmite son puntos de referencia, que ocupan mucho menos espacio, y
posteriormente, la red neuronal se encará de aplicar los cambios a la foto enviada
inicialmente.

5. Herramientas
Hasta ahora hemos visto en qué consiste el aprendizaje automático y los tipos de
redes neuronales que podemos utilizar. Para entrenar a estas redes e implementar
nuestros diseños necesitaremos además, una serie de herramientas o elementos que
nos van a facilitar la tarea. El entrenamiento de modelos con aprendizaje profundo es
complejo y requiere de una inversión considerable de tiempo así que, se utilizan
modelos prediseñados y preentrenados para ahorrar tiempo al diseño.

5.1. Conjuntos de datos

Hemos hablado anteriormente de que se necesitan cientos o miles de datos para


entrenar a una red neuronal de cierta profundidad para que nos entregue una
respuesta lo suficientemente precisa. Habitualmente se trabaja con conjuntos de datos
pero ¿de donde salen esos datos? Podríamos dedicarnos a viajar por el mundo y
sacar fotos de casas con chimeneas de diferentes tipos y tamaños pero esto nos
llevaría muchísimo tiempo.

Un conjunto de datos o también llamados dataset, es un grupo de objetos que


comparten algunas características o propiedades. Estos objetos pueden ser números,
imágenes, textos o audios. Cuando ya hemos conseguido los datos, todavía
necesitamos prepararlos con el formato correcto y evitar situaciones indeseadas como
los sesgos. Para facilitar todo este proceso existen varios conjuntos de datos
púbicos ya preparados que cualquier persona podría utilizar para entrenar
directamente a sus modelos.
Por ejemplo, si nos registramos en la página de la comunidad kaggle podremos
descargas conjuntos de datos públicos como, por ejemplo, los precios de las casas en
la ciudad de Boston. Además, en esta comunidad se organizan competiciones y
cuenta con una plataforma para la educación en IA.

5.2. Aprendizaje por transferencia

Una técnica de aprendizaje muy interesante consiste en transferir un modelo ya


entrenado anteriormente para una tarea concreta a otro proyecto que realice una tarea
parecida. Gracias a esto es posible avanzar mucho más rápido simplemente
mejorando o adaptando el modelo inicial. En el área del aprendizaje profundo, esta
técnica es especialmente utilizada por la gran cantidad de datos y amplios tiempos de
entrenamiento que se necesitan.

Como hemos visto, entrenamiento de una red neuronal consiste en ajustar los pesos
de las entradas a las neuronas y, una vez entrenado el modelo, estos valores quedan
guardados. Cuando hacemos uso del aprendizaje por transferencia estamos enviando
todos estos valores a otra red neuronal diferente. Existen varios tipos de transferencia
pero el más utilizado es incluir en nuestro proyecto un modelo ya preentrenado. Este
modelo ha sido creado por otra persona y de esta manera, no tenemos que empezar a
construir nuestro modelo desde cero.

5.3. Modelos preentrenados

Existen numerosos modelos que ya han sido entrenados previamente y que podemos
utilizar en nuestros diseños. Cada modelo se ha especializado en una tarea concreta y
se ha optimizado para proporcionar el mejor resultado posible. Las tareas pueden ser
de lo más variopintas como clasificar verduras o mantener una conversación escrita.
Vamos a nombrar solamente algunos ejemplos:

VGG-16: Red neuronal convolucional preentrenada con imágenes y que cuenta con 16
capas. Esta red fue entrenada para la clasificación de 1000 tipos de imágenes, entre
ellas muchos tipos de animales situados en diferentes escenarios. El conjunto de
datos que se utilizó para el entrenamiento y test se llama ImageNet y cuenta con más
de 1 millón de fotografías. En el vídeo que vimos anteriormente sobre la clasificación
de frutas y verduras se utilizó este modelo preentrenado.

Google BERT: Es un modelo preentrenado que utiliza el aprendizaje profundo para


tareas de programación del lenguaje natural en búsquedas por palabras y ser capaz
de detectar el tono y el contexto de las palabras. Es una red formada por 12 capas y
fue entrenada con millones de palabras de Wikipedia y BookCorpus.

En definitiva, actualmente disponemos de fácil acceso a modelos de redes neuronales


muy potentes y en muchas ocasiones es posible utilizarlos en proyectos propios. Estos
modelos nos ofrecen una herramienta muy útil para solucionar la mayoría de
problemas complejos y en particular para proyectos de visión artificial y tratamiento de
textos.

5.4. Programación de redes neuronales

Existen varias formas de utilizar un modelo preentrenado e incluirlo en nuestro


proyecto. En realidad lo que se hace es cargar un fichero con la información de las
conexiones y los pesos que se obtuvieron durante el entrenamiento. Dependiendo de
la plataforma y lenguaje que estemos utilizando, la tarea de transferir el modelo puede
ser muy sencilla o requerir algunos conocimientos de programación. Vamos a ver
algunos ejemplos, comenzando por el más sencillo que podremos utilizar en nuestras
clases de secundaria.

5.5. Machine Learning for Kids y Scratch

Ya hemos utilizado esta herramienta para crear y entrenar algún modelo de


aprendizaje automático pero también es capaz de utilizar los modelos preentrenados
que son proporcionados por la plataforma. Abriendo la plataforma Scratch y
seleccionando el botón de extensiones azul, nos aparecerán los modelos disponibles.
Podemos elegir entre dictado de voz, reconocimiento facial o preguntas y respuestas
entre otros. Cada modelo muestra una breve descripción de las técnicas y datos que
ha utilizado para ser entrenado. Además, se puede consultar la tarjeta del modelo con
las características detalladas.

Otra forma más sencilla, es copiar una platilla directamente con los datos de entrada
preparados y en la que podremos realizar cambios para adaptar nuestro modelo antes
de entrenarlo. En este caso tendremos menos cantidad de modelos a elegir y
podremos modificar o añadir etiquetas antes de comenzar con la fase de
entrenamiento.

Keras
Si nos atrevemos a programar en Python, uno de los lenguaje de programación mas
utilizados para aprendizaje automático, disponemos de esta biblioteca compatible y de
código abierto con numerosas redes neuronales. Esta herramienta está especialmente
diseñada para trabajar con redes de aprendizaje profundo. Con Keras podemos
entrenar y validar redes neuronales convolucionales y redes neuronales recurrentes.
No es necesario entender el funcionamiento que hay detrás porque se trabaja a nivel
de modelos, proporcionando bloques para construir redes complejas de aprendizaje
profundo. Un ejemplo del código utilizado para crear y entrenar un modelo se muestra
a continuación:

Importar librerías y cargas datos de entrada

Función para crear y compilar la red


Función para entrenar el modelo

Llamada a las funciones y validación del modelo

Figura 10: Código para crear y entrenar una red neuronal utilizando Keras. Fuente:
Código modificado y extraído de developers.google.com

TensorFlow
En las primeras líneas del código anterior, hemos importado el paquete de TensorFlow
que previamente deberíamos haber descargado. Este es un sistema de aprendizaje
automático desarrollado por Google y de código abierto. Con esta herramienta
podemos realizar cálculos numéricos complejos para crear y entrenar redes
neuronales. Si queremos, podremos diseñar una red desde cero en lugar de utilizar la
biblioteca anterior y programando línea a línea todo el código.

Vídeo 7: Detector de gestos - Enunciado  ( enseñar un juego)

Vídeo 8: Detector de gestos – Implementación

6. Uso en el aula

6.1. Generación de sonidos


Hemos vistos que las redes neuronales son capaces de generar imágenes pero
también sonidos y música. Existen composiciones totalmente creadas por una IA con
diferente ritmos y tonos. Este es un recurso que puede utilizarse en niveles de primaria
para que los niños vayan familiarizándose con la nueva tecnología. Pueden aprender
como las máquinas entienden el mundo exterior y comunicarse con ellas. Esta es la
idea de un profesor en Oviedo que ha creado un grupo de herramientas llamadas
“Sonidos en el aire”. Una red neuronal permite interactuar con el sonido gracias al
reconocimiento de los gestos y las imágenes. La red neuronal se puede entrenar con
el patrón de movimiento que queramos. El siguiente enlace muestra la explicación de
la herramienta.

https://cproviedo.es/sonidos-en-el-aire-herramientas-tic-educativas-para-crear-sonido-
con-inteligencia-articificial

6.2. Conducción autónoma

Todas la técnicas que hemos visto en este curso han hecho posible los grandes
avances en conducción autónoma de estos últimos años. La detección de objetos se
utiliza para diferenciar a otros vehículos, a peatones y a los semáforos. Las
arquitecturas de redes neuronales de aprendizaje profundo se utilizan en la visión
artificial, tecnología que los coches autónomos utilizan para poder ver a su alrededor.
Una actividad interesante que se puede realizar en el aula es el diseño de un coche
autónomo. Con lenguaje Python y una placa Arduino puedes hacer que un coche
cambie su dirección cuando encuentre un obstáculo sin necesidad de ninguna
indicación humana. A la entrada de la red tendrá los datos obtenidos de dos sensores,
uno de distancia al obstáculo y otro para saber si el obstáculos se encuentra a la
derecha o a la izquierda. A la salida, la red decidirá si gira a derecha, a izquierda o si
cambia de dirección cuando detecta un obstáculo. En el siguiente enlace tienen más
información por si te decides a implementar el proyecto en el aula.

https://www.aprendemachinelearning.com/programa-un-coche-arduino-con-
inteligencia-artificial/

6.3. Procesamiento de Lenguaje Natural


Las redes neuronales implementan modelos para imitar y entender el lenguaje
humano. Nuestra lengua sigue una serie de patrones de los que no somos conscientes
pero una IA no es capaz de reconocerlos a no ser que se le entrene para ello. Una
actividad en la que se realicen preguntas y respuestas a un ordenador se puede
implementar en distintos niveles educativos para mejorar el lenguaje y conocer las
reglas gramaticales. En Machine Learnig for Kids tenemos el modelo preentrenado de
aprendizaje BERT. Se pueden crear proyectos que tengan como entrada textos de
cualquier temática y los alumnos deberán realizar preguntas acerca del tema.

7. Información adicional
Conjuntos de datos https://www.kaggle.com/datasets

Principales modelos para reconocimiento de


imágenes https://microscope.openai.com/models

Librería de Python https://keras.io/

Aplicaciones de Google https://experiments.withgoogle.com/collection/ai

También podría gustarte