Introduction: Kit Ciencia Y Arte: Inteligencia Artificial
Aprender de inteligencia artificial es mucho más fácil de lo que parece. El primer paso es entender el funcionamiento de una de las unidades más simples en programación, que por analogía con el cerebro humano, es la neurona. En la computación se le llama perceptrón, y como veremos mas adelante, funciona de manera similar a una neurona, pero dentro de la computadora. El perceptrón fue un invento de Frank Rosenblatt en 1957 como un algoritmo que permitiera "discriminar" a una computadora.
Lo interesante es que pensar que una máquina puede aprender es algo sorprenderte, pero como verán, en la computadora todo ocurre guardando unos números reales, que se utilizan en una función matemática, eso es todo.
En este instructable haremos que el Playground aprenda a separar un color , que es el que deseamos, con cualquier otro color. En el video, por ejemplo le enseñamos a distinguir el azul, y como ven aprende bastante rápido.
Contenido preparado por la Fundación Costa Rica para la Innovación, con propósitos educativos. Parte de la Colección con Circuit Playground
http://funcostarica.org/ https://www.instructables.com/id/Kit-Ciencia-Y-Arte-Circuit-Playground/
Step 1: Materiales
Ocupamos:
- Circuit Playground
- Cable USB
- Pads de colores diversos
Step 2: El Perceptrón
¿Que es una neurona? La neurona es un tipo de célula del sistema nervioso que se pueden exitar y transmitir impulsos nerviosos por cambios electro-químicos. Por ahora no nos interesan los detalles, sino aspectos generales del funcionamiento de una neurona.
En la primera foto se ve el esquema de una neurona. Una neurona tiene dendritas que reciben impulsos o señales, tiene un cuerpo que integra o suma toas esas señales, y tiene una terminal o Axón que es donde transmite a efectores o a otras neuronas. Una señal entra por las dendritas y se suma con las de otras. Si la señal es fuerte, entonces se pasa por el axón a un efectos, digamos un músculo.
El perceptrón funciona de manera análoga. Veamos el segundo esquema. Se ve complicado, pero en esencia es lo mismo. Hay una serie de entradas, y estas se suman de manera ponderada, es decir, cada entrada tiene un peso, que llamamos w. Esa suma pasa por una "función de activación" que determina cuando la suma resulta en un +1, en caso de que sea mayor a un valor determinado, o cuando es -1. Las entradas en este ejemplo son el valor de lectura red, Green y Blue (RGB).
EL aprendizaje está en indicarle a la computadora cuando queremos un +1 o un -1, con eso re van re-calculando los valores w, hasta que logremos nuestro objetivo, en ese momento decimos, nuestra computadora aprendió...
En wikipedia pueden encontrar detalles, pero por el momento no son tan importantes.
Al final damos una descripción delAlgoritmo un poco más avanzada, para los que quieran entendero más a fondo.
Step 3: Percepción De Colores
Queremos que el playground aprenda a reconocer un color (o varios). Para eso utilizamos el sensor de luz del playground.
¿Cómo un sensor de luz se puede utilizar para reconocer colores? En realidad es muy sencillo. Si prendemos un led con el color rojo, y luego se mide la intensidad de luz reflejada, prendo el led azul y mido la intensidad reflejada, y luego lo mismo con el verde. El resultado será la cantidad de color que refleja de cada color y por tanto el valor de color RGB. ven es simple.
Como se ve en las fotos, utilizamos el sensor del luz del Playground, y uno de los leds neopixel que está al lado.
También vamos a utilizar el hecho de que cuando se acerca un objeto, se oscurece la luz, para que el playground sepa cuando hay un objeto cerca.
Step 4: Código
Estos dos archivos tienen que estar en el mismo directorio. El código del perceptrón está en el archivo "Perceptron.h". Solamente descarguen el archivo y descomprima. Abra el código "ArtScience_ColorLearn.ino" y súbalo al Playground
Los detalles de lo que está sucediendo están en el mismo código, y acá no daré explicaciones extras.
Attachments
Step 5: Funcionando Y Retos
Para ponerlo a funcionar:
- Acerque un color, el que quiera que aprenda, al sensor de luz
- El Playground hará la combinación de colores del Led y emitirá una predicción: Verde o Rojo
- Verde quiere decir que lo identifica como verdadero u rojo como falso
- Si se equivocó, presione el botón izquierdo, hasta que el playground cambie de color
- De esa manera vaya introduciendo colores que desee que acepte y colores que no, indicando al playgrund cuando se equivocó
- Después de un rato ya reconocerá el color sin equivocarse.
Retos
- Que aprenda más colores, no sólo uno
- Que aprenda de otros sensores
- Que aprenda algo y haga sonar el buzzer. De esa manera entrenar para dar alarmas
Step 6: Detalles Del Perceptrón (Avanzado)
Como se ve en la imágen, hay tres componentes principales de un perceptrón.
- Las entradas,
- la función de suma (con el símbolo sigma)
- función de activación.
Entradas y suma
Cada entrada x1, x2,... se multiplica por un peso w, y estas se suma tal que: w0(t) = x1*w1+x2*w2+...+xn*wn. Entonces sum, es la suma de cada entrada multiplicada por un peso w.
Función de activación
La función de activación out(t), es una función que toma como valor sum, y entonces, Da como resultado -1 si w0(t) es menor que 0 Da como resultado +1 si w0(t) es mayor o igual a 0.
Algoritmo de aprendizaje
El algoritmo de aprendizaje consiste en calcular correctamente los pesos w para obtener el en out(t), que se considera correcto.
En este proyecto en particular tenemos dos entradas que provienen de tres entradas de sensores de color, R y G y B, que están conectados como se ve en la foto.
Digamos entonces que son R,G y B, respectivamente. A esto hay que agregarle una tercera bias entrada que dejamos que siempre sea 1 (se conoce como bias), para evitar sumas 0.
Los valores de entrada de los sensores RGB van de 0 a 1023. Entonces, w0(t)=R*w1 + G*w2 + B*w3+bias*x4 La función de activación out(t) hará que el resultado sea -1 o +1. Noten que se utiliza t para indicar una iteración, pues estos cálculos se realizan una vez por cada loop del procesador.
Ahora bien, digamos que +1 indica color correcto y -1 incorrecto. Para corregir el color calculamos el error de la siguiente manera, error(t) = deseado(t) - out(t). Por último, con este error corregimos los pesos w, nuevo w = w + error * x * c donde c, es una constante entre 0 y 1, de aprendizaje, que se ajusta para determinar que tan rápido debe aprender (si es muy rápido a veces nunca se estabiliza).
Se corrige hasta que el playground de el resultado deseado.