Machine Learning

en tu navegador

Who am I? Why I want to talk about this topic? Vamos a hablar de Machine Learning, pero cambiando el medio donde lo aplicamos y acercándolo al usuario final.

Raúl Yeguas

Who am I? Why I want to talk about this topic? Vamos a hablar de Machine Learning, pero cambiando el medio donde lo aplicamos y acercándolo al usuario final. Geographica hace ensaladas; pero ensaladas gourmet.

¿Qué es Machine Learning?

Versión lite Un campo de la informática que desarrolla técnicas que permitan a un ordenador "aprender" mediante "datos" sin ser programado explícitamente para la tarea que "aprenderá".

Árboles de decisiones Reglas de asociación Algoritmos genéticos Redes neuronales Máquinas de vectores Algoritmos de agrupamientos Redes bayesianas Sentiment Redes neuronales convolucionales Perceptrón Procesos de Markov Deep Learning Redes prealimentadas Neuroevolution Modelos preentrenados Aprendizaje por refuerzo

Existen muchos conceptos en Machine Learning He escuchado de todo, es estadística con adornos, todo se basa en lo mismo,... Nos centraremos en cómo usarlo, enfoque pragmático Hay alguna charla acerca de esto??

Antes todo esto era Python (o R)

... según el ámbito Todo enfocado a servidores porque se requiere de mucha potencia y de muchos datos, sobretodo en DeepLearning

Ya... eso no va a funcionar

No es puro para servidor (except node). Cliente es + lento. Tiene - potencia. Consumo. No es para Data Scientist, no usan JS. Entonces, qué tenemos? (Siguiente)

JavaScript vs Python

Math (cálculo de matrices, sumas vectoriales, ...) --> Numpy vs math.js Data Analysis (agrupación, filtrado de datos) --> Pandas vs D3.js Data Mining (uso de Spark) --> PySpark vs node-spark? Performance (librerías más completas, aceleración) --> Tensorflow/Keras vs DeepLearn/Keras.js/Tensorfire Entonces, funciona? Demo time!

Demo 1

Reinforcement learning

Flappylearning (neuroevolution) https://github.com/xviniette/FlappyLearning Algoritmo evolutivo (Red Neuronal Artificial) Genera parámetros, topologías y ** reglas ** Su supervisión es muy sencilla, se basa en si ganas o pierdes. No necesitas un diccionario de datos de entrada-salida correctos inmenso. Neuroevolution, or neuro-evolution, is a form of artificial intelligence that uses evolutionary algorithms to generate artificial neural networks (ANN), parameters, topology and rules.[1] It is most commonly applied in artificial life, general game playing[2] and evolutionary robotics. The main benefit is that neuroevolution can be applied more widely than supervised learning algorithms, which require a syllabus of correct input-output pairs. In contrast, neuroevolution requires only a measure of a network's performance at a task. For example, the outcome of a game (i.e. whether one player won or lost) can be easily measured without providing labeled examples of desired strategies. Neuroevolution can be contrasted with conventional deep learning techniques that use gradient descent on a neural network with a fixed topology.

Demo 2

Tratamiento de imágenes con RNA

Red Neuronal Convolucional (Red neuronal prealimentada) Es una variación de Perceptron Multicapa -- Synaptic -> http://caza.la/synaptic/#/image-filters ConvNetJS (Standford) -> https://cs.stanford.edu/people/karpathy/convnetjs/demo/image_regression.html Hopfield (RNA) -> http://caza.la/synaptic/#/self-organizing-map Red neuronal prealimentada -> http://caza.la/synaptic/#/paint-an-image
Perceptron Multicapa (Red neuronal prealimentada) La red aprenderá usando la imagen original y la filtrada como valores RGB.
Redes neuronales convolucionales Usa ConvNetJS. Proyecto Univ Standford. Actualmente no matenida.

Demo 3

Reconocimiento de objetos

https://mil-tokyo.github.io/webdnn/#neural-style-transfer
WebDNN - DeepLearning Aplicaciones en: * reconocimiento de elementos en imágenes * sistemas de recomendación * Procesamiento del lenguaje natural

Demo 4

Tensorflow.js

Explicar un poco de Tensorflow.js API similar a TensorFlow. No soporta aún todo. DeppLearning.js + utilidades

Un poco de código

Reconocimiento de escritura

Usando Tensorflow.js Demo reconocimiento escritura con modelo precargado Jeff Delaney Cargaremos un modelo preentrenado desde Kaggle.

Convertir modelo a Tensorflow.js


  tensorflowjs_converter 
    --input_format keras 
    keras/yourWeights.h5 
    src/assets
          
Primero importaremos nuestro modelo para convertirlo al formato que necesitamos Podemos usar SaveModels de Tensorflow o modelos de Keras.

Carga del modelo en la aplicación


  async loadModel() {
    this.model = await tf.loadModel('/assets/model.json');
  }
          
Cargaremos el modelo usando una función síncrona para esperar a que esté disponible.

Obtención de datos de entrada


  <canvas drawable (newImage)="predict($event)"></canvas>
          
Canvas que permite dibujado Su evento "newImage" envía el contenido del canvas a nuestra función predict.

Preparación de los datos de entrada


  // Canvas pixels -> Tensor
  let img = tf.fromPixels(imageData, 1);
  
  // Ajustamos el formato al necesario para el modelo
  img = img.reshape([1, 28, 28, 1]);
  img = tf.cast(img, 'float32');
          
Nuestro input será imageData. Los datos del canvas

Generación de la predicción del modelo


  const output = this.model.predict(img) as any;
  this.predictions = Array.from(output.dataSync()); 
          
DataSync obtiene los valores del tensor de forma síncrona

Función completa


  predict(imageData: ImageData) {
    tf.tidy(() => {
      let img = tf.fromPixels(imageData, 1);
      img = img.reshape([1, 28, 28, 1]);
      img = tf.cast(img, 'float32');
  
      const output = this.model.predict(img) as any;
      this.predictions = Array.from(output.dataSync());
    });
  }
            
tf.Tidy se utiliza para asegurarnos de liberar los recusos que no son necesarios al terminar

Pacman

Detección de poses

Y todo esto ¿para qué sirve?

Ventajas: * No necesita instalación (mejor distribución, multiplataforma) * Movilidad y Sensores en móviles * PWA * Puedes trabajar en local (privacidad, offline) Posibles usos: * Bots de conversación * Comunicación y control adaptado * Adaptación al comportamiento del usuario * Monitorización de salud y ayuda a diagnósticos * ... igual que las aplicaciones ML actuales, pero con las ventajas de la web y movilidad Sentiment puede ser muy útil. Reconocimiento de los sentimientos del usuario. Rendimiento: https://mil-tokyo.github.io/webdnn/#benchmark TensorFlow.js with WebGL is 1.5-2x slower than TensorFlow Python with AVX. Varía mucho del modelo. WebDNN aprovecha WebAssembly y WebGPU y mejora ese rendimiento. Podemos usar modelos preentrenados o hacerlos de 0

Gracias