====== 01 - Introducción IA ======
La inteligencia artificial (IA) está cada vez más presente en nuestras vidas. Sin embargo, la IA significa cosas diferentes para diferentes personas. Para algunos, la IA se trata de formas de vida artificial que pueden superar la inteligencia humana, mientras que para otros casi cualquier tecnología de procesamiento de datos puede llamarse IA.
{{ :clase:ia:saa:artificial-intelligence-3382507_1920.jpg?nolink&400 |}}
Algunos ejemplos del uso de IA en diferentes campos son:
* **Coches autónomos**: Los automóviles autónomos requieren una combinación de técnicas de inteligencia artificial de muchos tipos: búsqueda y planificación para encontrar la ruta más conveniente de A a B, visión por computadora para identificar obstáculos y toma de decisiones en condiciones de incertidumbre para hacer frente al entorno complejo y dinámico. Cada uno de ellos debe funcionar con una precisión casi perfecta para evitar accidentes.\\ \\ Las mismas tecnologías también se utilizan en otros sistemas autónomos como robots de reparto, drones voladores y barcos autónomos.
* **Recomendación de contenido**: Mucha de la información que encontramos en el transcurso de un día típico es personalizada. Los ejemplos incluyen Facebook, Twitter, Instagram y otros contenidos de redes sociales; anuncios en línea; recomendaciones de música en Spotify; recomendaciones de películas en Netflix, HBO y otros servicios de transmisión.\\ \\ Muchos editores en línea, como los sitios web de periódicos y empresas de radiodifusión, así como motores de búsqueda como Google, también personalizan el contenido que ofrecen.
*** Procesamiento de imágenes y vídeos**: El reconocimiento facial ya es un producto que se utiliza en muchas aplicaciones gubernamentales, comerciales y de clientes, como la organización de sus fotos según las personas, el etiquetado automático en las redes sociales y el control de pasaportes. Se pueden utilizar técnicas similares para reconocer otros automóviles y obstáculos alrededor de un automóvil autónomo, o para estimar las poblaciones de vida silvestre, solo por nombrar algunos ejemplos.\\ \\ La IA también se puede utilizar para generar o alterar contenido visual. Los ejemplos que ya se utilizan en la actualidad incluyen la transferencia de estilo, mediante la cual puede adaptar sus fotos personales para que parezcan pintadas por Vincent van Gogh, y personajes generados por computadora en películas como Avatar , el Señor de los Anillos y animaciones populares de Pixar donde los personajes animados reproducen gestos realizados por actores humanos reales.
===== ¿Qué es la Inteligencia Artificial? =====
Definir la Inteligencia Artificial no es nada fácil. Incluso los investigadores de IA no tienen una definición exacta. Más bien, el campo se redefine constantemente cuando algunos temas se clasifican como no IA y surgen nuevos temas.
Hace cincuenta años, por ejemplo, se consideraba que los métodos automáticos de búsqueda y planificación pertenecían al dominio de la IA. Hoy en día, estos métodos se enseñan a todos los estudiantes de informática. De manera similar, ciertos métodos para procesar información incierta se están entendiendo tan bien que es probable que se pasen de la IA a las estadísticas o la probabilidad muy pronto.
Un intento de definición sería enumerar las propiedades que son características de la IA:
* **Autonomía**: La capacidad de realizar tareas en entornos complejos sin la guía constante de un usuario.
* **Adaptabilidad**: La capacidad de mejorar el desempeño aprendiendo de la experiencia.
===== IA débil vs IA fuerte =====
Al pensar en inteligencia artificial, la mayoría de nosotros tiene en mente una IA con capacidades mentales humanas, un programa que nos supera con un largo margen, o una persona sintética capaz de imitarnos e incluso combatirnos.
{{ :clase:ia:saa:iia:ultron.jpg?nolink&400 |}}
Los tres casos mencionados son ejemplos de inteligencia artificial fuerte (IAF): inteligencia artificial igual o superior a la capacidad humana promedio. De momento, todos estos casos quedan dentro de la ciencia ficción.
A día de hoy, no hemos conseguido programar una IA fuerte. Todo nuestro desarrollo y avance científico ha cristalizado en una forma de inteligencia que, aunque puede superar algunas capacidades humanas y va a tener un enorme impacto en nuestra economía, **solo puede orientarse a un objetivo**.
Es la llamada inteligencia artificial débil (IAD).
«Débil» no significa que no tenga valor. La IAD nos es de gran ayuda a la hora de detectar una metástasis, por ejemplo. También nos echa una mano cuando tratamos de extraer valor de un gran conjunto de datos o cuando necesitamos coordinar una flota en una ciudad, clave para la movilidad autónoma.
Lo cierto es que la inteligencia artificial débil ya se encuentra a nuestro alrededor y la damos multitud de usos.
Para diferenciar IAD de IAF, Huawei ha elaborado la siguiente infografia para clasificar sus respectivas características:
{{ :clase:ia:saa:iia:infografia-editorial-huawei-ia.png?nolink&400 |}}
===== Aprendizaje automático (machine learning) =====
Hoy en día, el machine learning se utiliza en multitud de aplicaciones que utilizamos cada día, como un sistema de recomendaciones, traducción automática de textos, reconocimiento de voz…
Dentro de los tipos de machine learning, uno de lo más populares hoy en día (y que es en parte responsable del auge de la IA) son las redes neuronales (Neural Nets) y el aprendizaje profundo (Deep Learning).
{{ :clase:ia:saa:iia:relaciones.jpg?400 |}}
* **Inteligencia artificial (AI)**: Rama de la informática que intenta simular diferentes comportamientos humanos por parte de las máquinas.
* **Aprendizaje automático (ML)**: Es una parte de la inteligencia artificial (pero no la única) que permite a las máquinas aprender a partir de los datos sin ser programadas.
* **Redes neuronales (NN)**: Uno de los tipos de aprendizaje automático (hoy en día, uno de los más populares)
* **Aprendizaje profundo (DL)**: Método para construir, entrenar y usar redes neuronales.
\\
==== Tipos de machine learning ====
=== Aprendizaje supervisado/no supervisado ===
En el **aprendizaje supervisado**, el conjunto de entrenamiento incluye las soluciones deseadas, denominadas “etiquetas”.
{{ :clase:ia:saa:iia:aprendizaje-supervisado.jpg?400 |}}
Por el contrario, en el aprendizaje no supervisado los datos de entrenamiento no incluyen las soluciones (no están etiquetados). El modelo es capaz de aprender de forma totalmente autónoma.
{{ :clase:ia:saa:iia:aprendizaje_no_supervisado.png?400 |}}
Las dos tareas típicas del aprendizaje supervisado son la **regresión** y la **clasificación**. En las tareas de regresión el algoritmo intenta predecir un valor numérico “objetivo” si se da un conjunto de características, denominados “predictores”.
{{ :clase:ia:saa:iia:regresion.png?400 |}}
En los problemas de clasificación, el modelo intenta clasificar las nuevas instancias según sus características. En este caso, la etiqueta de los datos de entrenamiento será la clase a la que pertenece cada instancia.
{{ :clase:ia:saa:iia:clasificacion.png?400 |}}
Puesto que etiquetar datos suele llevar mucho tiempo y supone un gasto importante, a menudo tendremos un montón de instancias sin etiquetar y unas pocas etiquetadas. Algunos algoritmos pueden ocuparse de datos que están etiquetados en parte. Esto se llama **aprendizaje semisupervisado**.
{{ :clase:ia:saa:iia:aprendizaje_semisupervisado.png?400 |}}
El aprendizaje por refuerzo es algo totalmente diferente. En este caso, la máquina aprende recibiendo “recompensas” (o “castigos”) según las acciones que tome.
{{ :clase:ia:saa:iia:aprendizaje_refuerzo.png?400 |}}
\\
=== Aprendizaje por lotes/online ===
En el **aprendizaje por lotes** el sistema no puede aprender de forma gradual; tiene que entrenarse usando todos los datos disponibles en ese momento. Una vez se entrena el modelo se lanza a producción, y si entran nuevos datos tenemos que volver a entrenar al modelo con todos los datos disponibles (los nuevos y los viejos). Esto se llama **aprendizaje offline**.
Uno de los problemas con este tipo de aprendizaje es que entrenar un modelo completo puede tardar varias horas, con lo que normalmente se hace cada 24 horas o cada semana. Si necesitamos actualizar el sistema con datos que cambian con rapidez, necesitamos otras soluciones.
En el **aprendizaje online** el sistema es capaz de aprender de forma gradual, ya sea con datos individuales o en grupos pequeños de datos llamados //minilotes//.
{{ :clase:ia:saa:iia:online_learning.png?400 |}}
También se pueden utilizar este tipo de sistemas cuando el volumen de datos para entrenar es enorme. El algoritmo carga parte de los datos, ejecuta un paso de entrenamiento con esos datos y repite el proceso hasta que ha procesado todos los datos.
{{ :clase:ia:saa:iia:online_learning_2.png?400 |}}
Un parámetro importante en este tipo de sistemas es la **tasa de aprendizaje**: la rapidez con la que debe adaptarse el sistema a los datos cambiantes. Si la tasa de aprendizaje es muy alta, el sistema se adaptará con rapidez a los datos nuevos, pero también tenderá a olvidar rápido los datos antiguos (por ejemplo, en un filtro de spam no nos interesa que el sistema olvide los tipos de spam que ya ha aprendido). Por el contrario, con una tasa de aprendizaje muy baja, el sistema aprenderá más despacio, pero será menos sensible al ruido de los datos nuevos.
\\ \\
=== Aprendizaje basado en instancias/basado en modelos ===
En el **aprendizaje basado en instancias**, el sistema aprende los ejemplos de memoria y, después, generaliza a nuevos casos utilizando una medida de similitud para compararlos con los ejemplos aprendidos.
{{ :clase:ia:saa:iia:aprendizaje_instancias.png?400 |}}
Otra forma de generalizar es crear un modelo a partir de un conjunto de ejemplos y, después, utilizarlo para hacer predicciones. Esto se denomina **aprendizaje basado en modelos**.
{{ :clase:ia:saa:iia:aprendizaje_modelos.png?400 |}}
\\ \\
==== Principales problemas del machine learning ====
Ejemplos de problemas con los datos:
* **Cantidad insuficiente de datos de entrenamiento**: La mayoría de modelos de machine learning necesitan miles (o millones en el caso de imágenes, por ejemplo) de datos para aprender.\\ \\
* **Datos de entrenamiento no representativos**: Para poder generalizar bien, es crucial que los datos de entrenamiento sean representativos de los casos nuevos que queremos generalizar. Si utilizamos un conjunto de entrenamiento no representativo, entrenaremos un modelo con pocas probabilidades de hacer predicciones exactas. Esto se llama **sesgo muestral**.\\ \\
* **Datos de mala calidad**: Si nuestros datos de entrenamiento están repletos de errores, valores atípicos y ruido, será más difícil que el sistema detecte patrones subyacentes y tendrá menos probabilidad de funcionar bien.\\ \\
* **Características no relevantes**: El sistema solo podrá aprender si los datos de entrenamiento contienen suficientes características relevantes y no demasiadas irrelevantes.\\ \\
Ejemplo de problemas con los algoritmos:
* **Sobreajustar los datos de entrenamiento**: El modelo tiene un buen rendimiento con los datos de entrenamiento, pero no generaliza bien.\\ \\
* **Subajustar los datos de entrenamiento**: El modelo es demasiado simple para aprender la estructura subyacente de los datos.\\ \\
==== Probar y validar ====
Normalmente, se dividen los datos en tres conjuntos:\\
* **Datos de entrenamiento**: Los datos que utilizamos para entrenar nuestro modelo. Como veremos más adelante, es habitual dividir este conjunto en otro dos: **entrenamiento** y **validación**.\\ \\
* **Datos de prueba**: Los datos que utilizamos para comprobar si nuestro modelo generaliza bien.\\
Es habitual utilizar el 80% de los datos para el entrenamiento y el 20% para las pruebas (sin embargo, esto depende del tamaño del conjunto de datos)
===== Redes neuronales =====
Las redes neuronales son un modelo de machine learning inspirado en el funcionamiento de las redes neuronales de los organismos vivos: un conjunto de neuronas conectadas entre sí y que trabajan en conjunto.
==== Perceptrón ====
En las redes neuronales de los organismos vivos la unidad básica es la neurona. Se compone de un cuerpo celular que contiene el núcleo, muchas extensiones de conexión llamadas //dentritas//, y una extensión muy larga denominada //axón//.
{{ :clase:ia:saa:iia:neurona.png?400 |}}
El equivalente a las neuronas en las redes neuronales artificiales es el **perceptrón**.
{{ :clase:ia:saa:iia:perceptron.png?400 |}}
Su tarea es hacer una suma ponderada de las entradas (asignándole un peso a cada una de ellas) más una entrada adicional con valor constante igual a 1 (con su peso correspondiente) llamada **bias**.
La salida del perceptrón es lineal, con lo que se le aplica una función (llamada **función de activación**) para añadir no linealidad al resultado.
{{ :clase:ia:saa:iia:activacion.jpeg?200 |}}
Existen muchas funciones de activación, y seleccionaremos una en función del problema a resolver.
==== Aprendizaje profundo (deep learning) ====
El **aprendizaje profundo (deep learning)** es un caso particular de red neuronal. Se trata de conectar varias capas de neuronas entre sí (cada una de las cuales puede tener diferente número de neuronas).
En realidad, lo que define al aprendizaje profundo no es el número de capas, sino el procesamiento de datos de forma jerárquica. Cada capa extrae características de nivel más alto hasta llegar a la respuesta final
{{ :clase:ia:saa:iia:deep-learning-proceso.png?400 |}}
La primera capa se llama **capa de entrada**, y tendrá tantas neuronas como entradas tenga nuestro algoritmo (por ejemplo, si queremos predecir el precio de una casa en función de la ciudad, barrio y metros cuadrados, nuestra red tendrá 3 entradas). Del mismo modo, la última capa recibe el nombre de **capa de salida**, y tendrá tantas neuronas como salidas tenga nuesto modelo (en el caso anterior, una salida: la predicción del precio).
Las capas intermedias se denominan **capas ocultas**, y estarán conectadas entre sí, de forma que las salidas de la capa k serán las entradas de la capa k-1. Cada de una de estas capas ocultas puede estar formado por un número diferente de neuronas.
{{ :clase:ia:saa:iia:capas.png?400 |}}
==== Backpropagation ====
Durante el proceso de entrenamiento de una red neuronal, ésta va ajustando los pesos de cada una de las neuronas para ir minimizando el error de la red. El algoritmo utilizado es el de **backpropagation**: se calcula el error de la salida y se propaga ese error hacia las capas anteriores para ir ajustando sus pesos.
{{ :clase:ia:saa:iia:backpropagation.png?400 |}}
==== Tipos de redes neuronales ====
Existen muchos tipos de redes neuronales. A continuación veremos algunas de las más utilizadas.
=== Redes neuronales convolucionales (CNN) ===
Se utilizan principalmente para el tratamiento de imágenes. Las primeras capas se encargan de reconocer formas sencillas (líneas, curvas..) y las siguientes se van especializando hasta poder reconocer características más complejas (ojos, ruedas, caras...).
{{ :clase:ia:saa:iia:convolutional.jpg?400 |}}
=== Redes neuronales recurrentes (RNN) ===
Se trata de redes neuronales a las que se agrega un estado de memoria a las neuronas. En una red neuronal tradicional, el modelo produce la salida multiplicando la entrada con el peso y la función de activación. Con un RNN, esta salida se envía de nuevo a sí mismo durante un determinado periodo de tiempo.
Este tipo de redes se suelen utilizar para el tratamiento de textos (para dar sentido a una frase, debemos conocer la posición de las palabras anteriores).
{{ :clase:ia:saa:iia:recurrent.png?400 |}}
=== Redes neuronales generativa adversarias (GAN) ===
Los modelos generativos utilizan dos redes neuronales profundas que compiten entre ellas: el **generador** y el **discriminador**.
Se suelen utilizar para crear imágenes realistas desde cero (también pueden generar otro tipo de datos, como música).
Por ejemplo, el generador se encarga de crear caras lo más realistas posibles, mientras que la tarea del discriminador será decir si una cara es auténtica o falsa. Al rechazar las primeras imágenes, el generador irá mejorando la creación de caras y será capaz de crear imágenes que engañen al discriminador.
{{ :clase:ia:saa:iia:gans.png?400 |}}
Podéis ver algunos de ejemplos de fotos de personas que no existen creadas por este tipo de redes en la web https://thispersondoesnotexist.com/
===== Ejercicios =====
**Ejercicio 1**
Define con tus propias palabras el machine learning
**Ejercicio 2**
¿Qué es un conjunto de entrenamiento etiquetado y en qué tipo de machine learning se utiliza?
**Ejercicio 3**
¿Cuáles son las dos tareas supervisadas más comunes?
**Ejercicio 4**
¿Qué tipo de algoritmo de machine learning utilizarías para permitir a un robot caminar por varios terrenos desconocidos?
**Ejercicio 5**
¿Qué tipo de algoritmo de machine learning utilizarías para segmentar a tus clientes en múltiples grupos?
**Ejercicio 6**
¿Definirías el problema de detección de spam como un problema de aprendizaje supervisado o no supervisado?
**Ejercicio 7**
¿Porqué es útil separar los datos en entrenamiento y prueba?
**Ejercicio 8**
¿Para qué se utiliza la función de activación de un perceptrón?
**Ejercicio 9**
Tenemos un conjunto de datos de personas con los campos edad, sexo, peso, altura y el índice de masa corporal. Si queremos entrenar una red neuronal para hacer una predicción de este último parámetro (índice de masa temporal) en función del resto, ¿cuántas neuronas tendrá nuestra red neuronal en la capa de entrada?
**Ejercicio 10**
¿Cuántas neuronas tendrá la capa de salida de la red anterior?
**Ejercicio 11**
¿Cuántas neuronas hacen falta en la capa de salida para clasificar mails entre correo no deseado y correo deseado?
**Ejercicio 12**
¿Qué tipo de red neuronal utilizarías para crear un traductor de texto?