Hemos visto la película "Ex-machina". Ahora vamos ha conocer cuáles son los todos los elementos que puede incluir un sistema basado en IA en el siguiente Canva.
Actividad 1. Si has consultado la presentación anterior, habrás visto que hay 7 facetas que los sistemas de IA pueden incluir:
Percepción (no todos los sistemas lo tienen)
Actuadores (no todos los sistemas lo tienen)
Representación
Aprendizaje
Razonamiento (no todos los sistemas lo tienen)
Motivación (no todos los sistemas lo tienen)
Ética (no todos los sistemas lo tienen)
En el siguiente enlace se habla sobre algunos de estos aspectos: https://www.tesla.com/es_es/models. Consulta el contenido del enlace y determina qué dice sobre los siguientes aspectos:
Percepción
Actuadores
Representación
Razonamiento.
Crea un documento donde:
Escribas un apartado para cada aspecto (percepción, actuadores, representación y razonamiento).
Explica brevemente qué comenta la página de Tesla sobre cada aspecto.
Toma una captura donde se pueda ver en qué punto de la página menciona dicho aspecto.
Actividad 2. Algunos aspectos de los sistemas de IA no aparecen mencionados en el documento del ejercicio anterior. Sin embargo, existen ejemplos de estos aspectos en la película de Ex-Machina. Al igual que hiciste en el ejercicio anterior, crea un documento donde hables de los siguientes aspectos:
Aprendizaje
Motivación
Ética
Crea un documento donde:
Crees un apartado para cada aspecto (aprendizaje, motivación y ética).
Explica en qué parte de la película se puede apreciar la presencia de esa faceta (o su ausencia).
Actividad 3. Existen tres términos relacionados con la película Ex-Machina, que son los siguientes:
Inteligencia artificial débil
Inteligencia artificial fuerte
La singularidad tecnológica
Pregunta a ChatGPT qué son estos términos, y responde:
¿Ava posee inteligencia artificial débil o fuerte? ¿Por qué lo piensas?
¿ChatGPT posee inteligencia artificial fuerte o déibl? ¿Por qué lo afirmas?
¿Dirías que en la película se ha alcanzado la Singularidad Tecnológica? ¿Por qué lo crees?
El razonamiento en la inteligencia artificial se basa en algoritmos. Vamos a conocer uno de esos algoritmos. En concreto se trata del algoritmo de Dijkstra, utilizado por Google para calcular la ruta más corta desde un punto a otro en Google Maps. El siguiente vídeo explica cómo se calcula la ruta más corta.
Vamos a practicar un poco. Observa el siguiente grafo:
Calcula la ruta mínima desde el nodo a hasta el nodo z utilizando el algoritmo de Dijkstra. Para ello, utiliza la siguiente plantilla: Tabla de Dijkstra.
Actividad 4. Descarga el siguiente documento: Actividades de grafos. Sólo tienes que resolver uno de ellos, concretamente el que coincide con tu ubicación en clase. En tu mesa hay un número (en la base del monitor). Busca en el documento el grafo con el mismo número.
Utiliza la misma plantilla de la actividad propuesta anterior.
Entrega el camino mas corto
El aprendizaje automático se puede clasificar en tres tipos de aprendizaje machine learning:
aprendizaje supervisado,
aprendizaje no supervisado
aprendizaje reforzado.
El aprendizaje supervisado es una tarea de aprendizaje automático donde el algoritmo aprende de datos con pares de ejemplos de entradas-salidas, es decir, el modelo aprende a realizar una tarea a partir de ejemplos etiquetados, que se le enseñan en la fase de entrenamiento.
Cuando se trata de aprendizaje supervisado, primero debemos recordar que el conjunto de datos utilizado para entrenar el algoritmo de Machine Learning estará compuesto por variables de características (también llamadas de features), que estarán rotuladas por una variable objetivo (o target).
En este enfoque, el modelo aprende a realizar una tarea a partir de ejemplos etiquetados, que se le enseñan en la fase de entrenamiento. Pero, ¿qué subcategoría de algoritmo elegir?
Los algoritmos de aprendizaje supervisado se sub categorizan en dos grupos: Clasificación y Regresión. La diferencia entre ellos está en el tipo de resultado que queremos que produzca la técnica de aprendizaje automático. Veamos la diferencia.
El objetivo es identificar a qué categoría pertenece una determinada muestra del problema, entre un número limitado de categorías.
Si un correo electrónico es SPAM o no; si el riesgo de otorgar crédito a un cliente es bajo, moderado o alto; si un mensaje tiene un sentimiento positivo, negativo o neutral; qué personajes de dibujos animados aparecen en una determinada imagen, etc.
A diferencia de la clasificación, en el aprendizaje supervisado de regresión la idea es predecir un valor numérico; o en otros términos: identificar una categoría en una escala continua. En este caso, el algoritmo aprende de los datos y los modela en una función para hacer predicciones.
Este tipo de algoritmos se pueden utilizar, por ejemplo, para predecir el precio de un inmueble, el número de transacciones y el valor de compra que realizará un cliente en el próximo mes, calcular el vida útil de una máquina, cuántas uvas se recogerán en una cosecha, o cualquier otra cantidad cuantitativa.
Lo que diferencia si un problema es del tipo clasificación o regresión, no es una simple distinción entre la predicción de un número, o una letra/palabra, ya que podemos, por ejemplo, utilizar números para representar categorías de cosas.
Hay varias técnicas de Machine Learning que podemos utilizar en problemas de clasificación y de Regresión. Ejemplos de aprendizaje supervisado:
Clasificación: Naive Bayes, Máquinas de Vectores de Soporte (Support Vector Machines, SVM), Regresión Logística, Árboles de Decisión, Bosques Aleatorios y Redes Neuronales.
Regresión: Regresión Lineal, Regresión no Lineal, Máquinas de Vectores de Soporte (SVM), Árboles de Decisión, Bosques Aleatorios y Redes Neuronales.
Es posible que hayas notado que muchas de las técnicas no se limitan solo a la clasificación o solo a la regresión, algunas funcionan para ambos problemas.
Otro motivo de confusión frecuente, interesante de señalar, es la técnica de regresión logística. Por su nombre, nos lleva a pensar que se trata de una técnica de regresión, pero en realidad es una técnica utilizada únicamente para problemas de clasificación.
Ya hemos visto cómo funcionan los árboles de decisión y las regresiones lineales.
Árboles de decisión: nos permiten clasificar una información, para saber de qué clase es. En nuestro trabajo en BigData utilizamos los árboles de decisión para clasificar una tupla de datos según una clase objetivo ({SÍ, NO} por ejemplo)
Regresiones lineales: nos permiten obtener a partir de un conjunto de datos de entrada un dato de salida. Cuando vimos las regresiones lineales en BigData utilizamos funciones monovariables (una única variable de entrada), pero las regresiones pueden ser multivariables (es decir, que obtenemos un valor a partir de varias variables de entrada).
Ahora vamos a hablar sobre redes neuronales. Las redes neuronales existen desde hace medio siglo, pero han tenido su etapa de mayor éxito en los últimos años con la mejora de la tecnología.
Una red neuronal es un sistema de procesamiento que se compone de elementos más pequeños llamados "neuronas".
¿Qué es una neurona? una neurona es la unidad básica de procesamiento que nos vamos a encontrar dentro de una red neuronal. En el siguiente vídeo nos va a quedar muy claro:
Una neurona artificial es el bloque más básico de una red neuronal. Funciona de manera muy parecida a una fórmula matemática sencilla que toma unos datos de entrada, los pesa, les suma un sesgo (bias) y genera una salida.
Cuando una neurona se usa para predecir un valor numérico (no clasificar categorías), se comporta como un regresor, y su modelo matemático es una regresión lineal.
Imagina esta fórmula:
En esta fórmula podemos ver:
Problema: Predicción de condiciones adecuadas para el bienestar de un bebé.
Queremos predecir cómo de adecuadas son las condiciones físicas en una habitación para que un bebé se sienta bien (del 0 al 10) en función de las siguientes entradas:
X1: Temperatura (ºC)
X2: Nivel de ruido (dB)
X3: Nivel de luz (lux)
La neurona calcula:
Y = W1 · X1 + W2 · X2 + W3 · X3 + b
Vamos a probar con unos pesos de prueba:
W1 = 0.3
W2 = -0.5
W3 = 0.2
b = 1
Supongamos que las entradas son:
Temperatura: X1 = 22
Ruido: X2 = 50
Luz: X3 = 300
El resultado es:
y = 0.3 ⋅ 22 + (−0.5) ⋅ 50 + 0.2 ⋅ 300 + 1 =
6.6 −25 + 60 + 1 = 42.6
Mediante una hoja de cálculo podemos obtener las salidas de esta neurona para varios valores para X1, X2 y X3.
¿Son estos valores correctos?
Depende del valor que esperásemos. Por ejemplo si nuestra idea es que los valores ideales son Temperatura de 25º, ruido bajo (20 dB) y luz media (100), entonces el valor más alto debería tenerlo la entrada (X1, X2, X3) = (25,20,100). Sin embargo esto no se cumple, ya que el valor más alto lo tiene (X1,X2,X3) = (30,20,300).
Puedes probar con valores para los pesos en el siguiente enlace: https://docs.google.com/spreadsheets/d/1iDcu7k133-izK5hCG3-SARtunmlt7o7H3ACJSmj2O98/edit?usp=sharing
Actividad 5. Supón que queremos predecir la satisfacción (de 0 a 10) de un bebé solo con estas dos variables:
Temperatura
Ruido
Y tenemos estos datos:
Averigua los pesos y el sesgo ideales de una neurona usando una hoja de cálculo.
Paso 1:
Asigna valores iniciales a los pesos:
w1=0.1
w2=−0.1
b=0
Paso 2:
Calcula la salida con esos valores para los tres casos.
Paso 3:
Compara los resultados con las expectativas.
Paso 4:
Propón cómo ajustar los pesos (aumentar o disminuir) para que la neurona se acerque más a los resultados esperados.
Utiliza la siguiente hoja de cálculo para resolver el ejercicio: https://docs.google.com/spreadsheets/d/1U9nM4hK7Ix0Jq3hq4ixAa4AuG1cF8DIkctmc2iDtT6M/edit?usp=sharing
Entrega la hoja de cálculo donde has ajustado los pesos y el sesgo para acercarte lo más posible a los valores ideales.
En el siguiente vídeo, vamos a dar un paso más, para aprender los siguientes conceptos:
Capa de neuronas y aprendizaje profundo
Función de activación (escalonada, sigmoide, tanh y relu)
Para ver cómo funciona todo esto de forma práctica, vamos a utilizar la siguiente aplicación: https://playground.tensorflow.org/
Para saber cómo funciona todo esto, puedes ver el siguiente vídeo: https://www.youtube.com/watch?v=FVozZVUNOOA
Actividad 6. Crea una red neuronal para poder identificar en https://playground.tensorflow.org/ el siguiente patrón:
En la siguiente imagen se puede ver cómo la red neuronal diseñada es capaz de clasificar la nube de puntos correctamente:
Entrega una captura donde se pueda ver la red neuronal que has diseñado para poder identificar el patrón indicado. La captura debe incluir la pantalla completa de https://playground.tensorflow.org/
Vamos a utilizar una plataforma llamada "Teachable machine" para entrenar una red neuronal y clasificar objetos.
Esta es una plataforma web desarrollada por Google que permite a usuarios como nosotros crear rápidamente modelos de aprendizaje automático sin necesidad de tener conocimientos de programación. Sí, has leído bien, ¡no se necesita experiencia en programación! La plataforma se basa en un tipo de aprendizaje automático llamado aprendizaje profundo y permite entrenar modelos para reconocer imágenes, sonidos y posturas corporales.
Ahora, pongámonos manos a la obra. ¡Empecemos a enseñar a nuestras máquinas!
Desarrollo del proyecto
PASO 1
Abre el sitio web de Teachable Machine en tu navegador.
PASO 2
Haz clic en «Primeros pasos».
PASO 3
Selecciona Proyecto de imagen.
Y en la ventana que sale, selecciona la primera opción: «Modelo de imagen estándar».
PASO 4.
Verás tres categorías: "Class 1", "Class 2" y "Anadir una clase".
Las clases son la forma que tenemos de clasificar los objetos. Por ejemplo: si queremos distinguir entre manzanas y peras, Class 1 serían las imágenes de los distintos tipos de manzanas, y Class 2 las imágenes de los distintos tipos de peras.
Para añadir la lista de imágenes de cada clase, podemos tomar muchas fotos de forma automática desde nuestra webcam (mostrando distintos tipos de manzanas), o directamente subir nosotros un montón de fotos distintas de manzanas que tengamos guardadas en nuestro equipo (como mínimo 20). En nuestro caso vamos a intentar que nuestro modelo reconozca lo que es un bolígrafo. Así que, pincha sobre "Class 1" y llámale "ES UN BOLI". Igualmente pincha en "Class 2" y llámale "NO ES UN BOLI".
PASO 5.
Ahora clica en el botón «Webcam» en la primera clase y comienza a tomar fotos de un objeto específico (en nuestro caso, un bolígrafo). Haz clic en el botón de la cámara para capturar cada foto. Intenta tomar diferentes fotos del objeto con diferentes ángulos y posiciones.
PASO 6.
Repite el paso 5 para la segunda clase, pero esta vez con un objeto diferente (por ejemplo, un cuaderno, una goma, un sacapuntas o cualquier otro objeto).
PASO 7.
Una vez que hayas capturado suficientes fotos para cada clase (al menos 30 para cada una), haz clic en el botón «Preparar modelo».
PASO 8.
Espera a que Teachable Machine entrene el modelo. Este proceso puede tardar unos minutos.
PASO 9.
Una vez que el modelo esté entrenado, puedes probarlo utilizando la cámara web. Coloca uno de los objetos en frente de la cámara y observa cómo el modelo es capaz de identificarlo.
PASO 10.
Finalmente, puedes exportar el modelo para usarlo en otras aplicaciones o compartirlo con tus compañeros de clase. Simplemente en la vista previa pulsa sobre el botón «Exportar modelo».
En la página que nos sale, seleccionamos «Subir» y pulsamos sobre el botón que aparece a la derecha. Una vez hecho, se actualizará el enlace y podremos copiarlo para enviarlo a un compañero, un amigo o el profesor para que evalúe tu trabajo.
Finalmente, si quieres seguir trabajando otro día con tu proyecto, puedes subirlo a tu Drive e incluso descargar el proyecto como archivos. Más tarde siempre podrás volver a abrir el proyecto con independencia del método que eligieras para guardarlo. Las opciones que te permiten realizar todo esto las puedes encontrar en el menú principal de la herramienta.
Recuerda que la calidad de tu modelo depende de la calidad de las imágenes de entrenamiento. Si el modelo no está funcionando bien, puedes volver a entrenarlo con más imágenes o con imágenes más claras.
Si tu modelo es capaz de distinguir claramente tu objeto de entrenamiento, te felicito, ya has creado y entrenado tu primer modelo de Inteligencia Artificial.
Actividad 7 Crea un modelo en Teachable Machine para identificar perros y gatos. Para entrenar tu modelo, dispones del siguiente conjunto de datos: https://drive.google.com/file/d/171zjgi_AT3ipv-sMNpYjXUSafn88lOW9/view?usp=sharing. En este archivo dispones de miles de imágenes de perros y gatos.
Entrena tu sistema para que dada una imagen de un perro descargada desde Internet, sea capaz de identificar si se trata de un perro o de un gato.
Entrega tu modelo en Classroom mediante un enlace.
¿Qué pasa cuando le muestras una imagen de una rata?
Es un tipo de aprendizaje automático en el que el sistema intenta encontrar patrones, relaciones o agrupaciones en los datos sin que nadie le diga qué es cada cosa.
No le damos etiquetas, solo le damos los datos… y él intenta organizarlos.
Obviamente, el sistema debe tener algun criterio previo para organizar los datos.
Por ejemplo, imagina la siguiente situación:
En un instituto se utilzan partes de tres colores:
Verde, para sanciones leves.
Amarillo, para sanciones graves.
Rosa, para sanciones muy graves.
Si entrego a una persona que no sabe nada sobre las categorías de partes una carpeta que incluye partes de los tres tipos y le digo que los ordene, ¿Cómo los organizaría?
NOTA: La clave en este ejemplo, es que la persona no sabe nada de las clases departes que hay.
Práctica guiada de Aprendizaje no supervisado
Vamos a hacer una práctica guiada para organizar formas simples (cuadrados, círculos y triángulos). Para ello, vamos a utilizar una plataforma llamada Google Colab, que nos permite ejecutar código Python directamente en Internet.
Para poder hacer esta práctica deberás usar una cuenta de Google con dominio @gmail.com.
Abre el siguiente cuaderno de Colab: https://colab.research.google.com/drive/15qRdm4e2Pd3jx2KaxQA61j1zWxOZLOXn?usp=sharing
En dicho cuaderno puedes ver los siguientes fragmentos:
# Estas librerías ya están disponibles en Google Colab
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.decomposition import PCA
from PIL import Image, ImageDraw
Vamos a crear imágenes pequeñas (28x28 píxeles) con formas geométricas sencillas: círculos, cuadrados y triángulos. Cada imagen estará en blanco y negro. No vamos a decirle al ordenador qué forma es — solo verá números (de los píxeles).
# función para obtener un número aleatorio pequeño
def get_random():
return np.random.randint(-2,2)
# Función para crear imágenes sencillas
def crear_imagen(forma, tamaño=(28, 28)):
img = Image.new("L", tamaño, 0)
draw = ImageDraw.Draw(img)
if forma == 'circulo':
draw.ellipse((4+ get_random(),4+ get_random(),24 + get_random(),24 + get_random()), fill=255)
elif forma == 'cuadrado':
draw.rectangle((4 + get_random(),4 + get_random(),24 + get_random(),24 + get_random()), fill=255)
elif forma == 'triangulo':
draw.polygon([(14 + get_random(),4 + get_random()), (4 + get_random(), 24 + get_random()), (24 + get_random(),24 + get_random())], fill=255)
return np.array(img).flatten()
# Crear dataset de imágenes
imagenes = []
etiquetas_reales = []
formas = ['circulo', 'cuadrado', 'triangulo']
for forma in formas:
for _ in range(30): # 30 imágenes por clase
imagen = crear_imagen(forma)
imagenes.append(imagen)
etiquetas_reales.append(forma)
imagenes = np.array(imagenes)
Ahora aplicaremos K-Means, un algoritmo que agrupa las imágenes en 3 grupos (clusters) sin saber qué son.
Solo mirará los números de las imágenes (los píxeles).
Si quieres ver más sobre K-Means, puedes mirar el siguiente vídeo: https://www.youtube.com/watch?v=2kfY0R34Dy0&t=152s¡
# Agrupar las imágenes en 3 clusters
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(imagenes)
Usaremos PCA (Análisis de Componentes Principales) para reducir los datos a 2 dimensiones y dibujar cómo han quedado agrupadas las imágenes.
# Reducir a 2 dimensiones para dibujar
pca = PCA(2)
reduced = pca.fit_transform(imagenes)
# Dibujar los puntos agrupados
plt.figure(figsize=(8,6))
plt.scatter(reduced[:,0], reduced[:,1], c=clusters, cmap='viridis')
plt.title("Agrupamiento de Imágenes con K-Means")
plt.xlabel("Componente Principal 1")
plt.ylabel("Componente Principal 2")
plt.colorbar(label='Cluster')
plt.show()
Mostramos 5 imágenes aleatorias de cada grupo para ver cómo las ha clasificado el ordenador.
# Mostrar 5 imágenes de cada cluster
fig, axs = plt.subplots(3, 5, figsize=(10,6))
for cluster_num in range(3):
idx = np.where(clusters == cluster_num)[0]
muestras = np.random.choice(idx, 5, replace=False)
for i, m in enumerate(muestras):
axs[cluster_num, i].imshow(imagenes[m].reshape(28,28), cmap='gray')
axs[cluster_num, i].axis('off')
axs[cluster_num,0].set_ylabel(f'Cluster {cluster_num}', size=12)
plt.tight_layout()
plt.show()
Actividad 8. Reflexiona sobre las siguientes preguntas, y responde en un documento de texto:
¿Qué es el aprendizaje no supervisado?
¿Qué diferencias hay entre supervisado y no supervisado?
Durante la práctica:
¿Cuántas formas hemos creado? ¿Y cuántos grupos le hemos pedido al algoritmo?
Observa el gráfico de colores: ¿ves grupos bien separados o mezclados?
Mira las imágenes de cada grupo: ¿las formas que hay dentro de un mismo grupo se parecen?
¿Crees que el ordenador ha agrupado bien las formas? Explica por qué.
Cambia el número de clusters de 3 a 2 o a 4 en el código de KMeans, ejecuta de nuevo
Para ello debes hacer lo siguiente en el código:
En la línea donde aparece:
kmeans = KMeans(n_clusters=3, random_state=42)
Debes cambiar el número 3 por 4 para que quede así:
kmeans = KMeans(n_clusters=4, random_state=42)
En la línea donde aparece:
fig, axs = plt.subplots(3, 5, figsize=(10,6))
Debes cambiar el número 3 por 4 para que quede así:
fig, axs = plt.subplots(4, 5, figsize=(10,6))
En la línea donde aparece:
for cluster_num in range(3):
Debes cambiar el número 3 por 4 para que quede así:
for cluster_num in range(4):
responde:
¿Qué pasa si usamos 2 grupos?
¿Y si usamos 4 grupos?
Entrega el documento en Classroom.
Continuaremos con un curso de Gemini y NotebookLM