¿A qué se parece un modelo de ML entrenado?
Una red neuronal no entrenada con un número de capas específico comenzará con pesos asignados aleatoriamente para las conexiones entre las capas. Como el modelo aprende del conjunto de datos, ajustará el peso de esas conexiones. A medida que los datos de entrada del sensor sin procesar pasan a través de las capas de un modelo entrenado, los pesos asociados con las conexiones modificarán esos datos. En la capa de salida, los datos sin procesar ahora indicarán el evento que generó esos datos, como una caída.
Un valor de peso normalmente se encontrará entre -0,5 y +0,5. Durante el entrenamiento, los pesos se ajustan hacia arriba o hacia abajo. Dicho ajuste refleja la fortaleza de la conexión en un camino hacia una acción específica. Un peso positivo se llama conexión excitadora, mientras que un peso negativo es una conexión inhibidora. Los pesos que se encuentran cerca del cero tienen menos importancia que aquellos que están próximos a los límites superior o inferior.

Cada capa en el modelo entrenado es esencialmente un tensor (matriz multidimensional). Las capas se pueden representar en un lenguaje de programación de alto nivel, como Python, C o C++. A partir de aquí, el lenguaje de alto nivel se compila en código de máquina para ejecutarse en una arquitectura de conjunto de instrucciones específica.
Una vez entrenado, el modelo aplica su inteligencia aprendida en datos no conocidos para inferir la fuente de los datos. La inferencia requiere menos recursos, por lo que se puede aplicar en el borde utilizando hardware más sencillo.
El rendimiento del modelo depende del sistema embebido. Si el procesador puede ejecutar matemáticas multidimensionales de forma eficaz, proporcionará unas buenas prestaciones. Pero el tamaño del modelo, el número de capas y el ancho de las capas tienen un gran impacto. La memoria de acceso rápido es otro parámetro importante. Esta es la razón por la que el desarrollo de una aplicación de ML para ejecutarla en un punto final es fundamentalmente una extensión de un buen diseño de sistema embebido.
Haciendo que los modelos ML sean más pequeños
Incluso con un modelo bien entrenado, el rendimiento de ML en el borde se basa en gran medida en los recursos de procesamiento disponibles. El objetivo primordial en el diseño de un sistema embebido siempre ha sido utilizar la menor cantidad de recursos posible. Para abordar esta dicotomía, los investigadores han buscado diferentes formas de hacer que los modelos entrenados sean más pequeños.
Los dos enfoques habituales son cuantización y depuración. La cuantización conlleva simplificar los números de coma flotante o convertirlos a enteros. Un valor cuantizado ocupa menos memoria. Para una mayor precisión, se utilizan números de coma flotante durante el entrenamiento para almacenar los pesos de cada nodo en una capa, ya que dotan de la máxima precisión. El propósito es reducir la precisión de los números de coma flotante o convertir estos números en enteros tras el entrenamiento, sin alterar la precisión total. En muchos nodos, la pérdida de precisión resulta intrascendente para el resultado, pero la reducción en los recursos de memoria puede ser significativa.
Por su parte, la depuración implica eliminar nodos con pesos que son demasiados bajos para tener un impacto apreciable en el resultado. Los desarrolladores también pueden optar por “cortar” en función de la magnitud del peso, eliminando únicamente los pesos con valores cercanos a cero. En ambos casos, el modelo necesita ser probado de forma reiterada para garantizar que mantiene la precisión suficiente para ser útil.











