Arquitectura

Generalidades-DL

Nota: (Deep-Learning es un conjunto de algoritmos de aprendizaje automático que intenta modelar abstracciones de alto nivel en datos usando arquitecturas computacionales que admiten transformaciones no lineales múltiples e iterativas de datos expresados en forma matricial o tensorial).

 

Arquitectura

  • El Deep Learning & Aprendizaje-Profundo es parte de un conjunto más amplio de métodos de aprendizaje automático basados en asimilar representaciones de datos. La investigación en esta área intenta definir qué representaciones son las mejores y cómo crear modelos para reconocer estas representaciones, un ejemplo de esto seria reconocimiento facial, reconocimiento de objetos etc .
  • Varias arquitecturas de Deep Learning & Aprendizaje-Profundo como redes neuronales profundas, redes neuronales profundas convolucionales, y redes de creencia profundas, han sido aplicadas a campos como visión por computador, reconocimiento automático del habla, y reconocimiento de señales de audio y música, y han mostrado producir resultados de vanguardia en varias tareas.

 

Definiciones:

-. No existe una única definición de Deep Learning aprendizaje profundo. En general se trata de una clase de algoritmos ideados para el Machine Learning aprendizaje automático. A partir de este punto común, diferentes publicaciones se centran en distintas características, por ejemplo:

  • Usar una cascada de capas con unidades de procesamiento no lineal para extraer y transformar variables. Cada capa usa la salida de la capa anterior como entrada.Los algoritmos pueden utilizar aprendizaje supervisado o aprendizaje no supervisado, y las aplicaciones incluyen modelización de datos y reconocimiento de patrones ,
  • Estar basados en el aprendizaje de múltiples niveles de características o representaciones de datos. Las características de más alto nivel se derivan de las características de nivel inferior para formar una representación jerárquica.
  • Aprender múltiples niveles de representación que corresponden con diferentes niveles de abstracción. Estos niveles forman una jerarquía de conceptos.
  • Todas estas maneras de definir el aprendizaje profundo tienen en común: múltiples capas de procesamiento no lineal; y el aprendizaje supervisado o no supervisado de representaciones de características en cada capa. Las capas forman una jerarquía de características desde un nivel de abstracción más bajo a uno más alto.
  • Los algoritmos de aprendizaje profundo contrastan con los algoritmos de aprendizaje poco profundo por el número de transformaciones aplicadas a la señal mientras se propaga desde la capa de entrada a la capa de salida. Cada una de estas transformaciones incluye parámetros que se pueden entrenar como pesos y umbrales. No existe un estándar de facto para el número de transformaciones (o capas) que convierte a un algoritmo en profundo, pero la mayoría de investigadores en el campo considera que aprendizaje profundo implica más de dos transformaciones intermedias

 

Resumiendo:

  1. -. El Aprendizaje Profundo utiliza Algoritmos de Redes Neuronales Artificiales que imitan el comportamiento biológico del cerebro.
  2. -. Hay 3 tipos de Capas de Neuronas: de Entrada, Ocultas y de Salida.
  3. -. Las conexiones entre neuronas llevan asociadas un peso, que denota la importancia del valor de entrada en esa relación.
  4. -. Las neuronas aplican una Función de Activación para Estandarizar su valor de salida a la próxima capa de neuronas.
  5. -. Para entrenar una red neuronal necesitaremos un gran conjunto de datos.
  6. -. Iterar el conjunto de datos y comparar sus salidas producirá una Función Coste que indicará cuán alejado está nuestra predicción del valor real.
  7. -. Luego de cada iteración del conjunto de datos de entrada, se ajustarán los pesos de las neuronas utilizando el Descenso de Gradiente para reducir el valor de Coste y acercar las predicciones a las salidas reales.

 

Las GPU:

  • Conocidas como GPGPU, las tarjetas de vídeo para procesamiento general permiten ejecutar los algoritmos de entrenamiento y evaluación de los modelos de aprendizaje profundo. Debido a la naturaleza altamente paralelizable de estos problemas, la utilización de las GPGPU permite un aumento en el desempeño de varios órdenes de magnitud.
  • La computación de propósito general en unidades de procesamiento gráfico (GPGPU, del inglés general-purpose computing on graphics processing units) es un concepto reciente dentro de la informática que trata de estudiar y aprovechar las capacidades de cómputo de una GPU.
  • Una GPU es un procesador diseñado para los cómputos implicados en la generación de gráficos 3D interactivos. Algunas de sus características (bajo precio en relación a su potencia de cálculo, gran paralelismo, optimización para cálculos en coma flotante) aunque esto se a combertido en aumento de los precios de los procesadores grafico que no parece tener fin, especialmente en el ámbito científico y de simulación. Así, se han desarrollado técnicas para la implementación de simulaciones de fluidos, bases de datos, algoritmos de clusterización, etc.

 

Modelo de programación de GPU:

  • Debido a las diferencias fundamentales entre las arquitecturas de una GPU y una CPU, no todos los problemas se pueden beneficiar de una implementación en la GPU. En concreto, el acceso a memoria plantea las mayores dificultades. Las CPU están diseñadas para el acceso aleatorio a memoria. Esto favorece la creación de estructuras de datos complejas, con punteros a posiciones arbitrarias en memoria. En cambio, en una GPU, el acceso a memoria está mucho más restringido. Por ejemplo, en un procesador de vértices (la parte de una GPU diseñada para transformar vértice en aplicaciones 3D), se favorece el modelo de distribución, en el que el programa lee en una posición predeterminada de la memoria, pero escribe en una o varias posiciones arbitrarias. En cambio, un procesador de píxeles, o fragmentos, favorece el modelo de recolección, pudiendo el programa leer de varias posiciones arbitrarias, pero escribir en sólo una posición predeterminada.
  • La tarea del diseñador de algoritmos GPGPU consiste principalmente en adaptar los accesos a memoria y las estructuras de datos a las características de la GPU. Generalmente, la forma de almacenar datos es en un búfer 2D, en lugar de lo que normalmente sería una textura. El acceso a esas estructuras de datos es el equivalente a una lectura o escritura de una posición en la textura. Puesto que generalmente no se puede leer y escribir en la misma textura, si esta operación es imprescindible para el desarrollo del algoritmo, éste se debe dividir en varias pasadas.
  • Pese a que cualquier algoritmo que sea implementable en una CPU lo es también en una GPU, esas implementaciones no serán igual de eficientes en las dos arquitecturas. En concreto, los algoritmos con un alto grado de paralelismo, sin necesidad de estructuras de datos complejas y con una alta intensidad aritmética son los que mayores beneficios obtienen de su implementación en la GPU.

 

Herramientas:

  • Tradicionalmente, el desarrollo de software GPGPU se había hecho bien en lenguaje ensamblador, o bien en alguno de los lenguajes específicos para aplicaciones gráficas usando la GPU, como GLSL, Cg o HLSL. Perorecientemente han surgido herramientas para facilitar el desarrollo de aplicaciones GPGPU, al abstraer muchos de los detalles relacionados con los gráficos, y presentar una interfaz de más alto nivel. Una de ellas es BrookGPU, desarrollada en la Universidad de Stanford, consistente en una extensión a ANSI C que proporciona nuevos tipos de datos y operaciones (flujo de datos, núcleo, reducción, etc.) automáticamente convertidos a una implementación que aprovecha la GPU sin intervención explícita por parte del programador. Otra herramienta con objetivos similares es Sh, una extensión de C++ para metaprogramación con una implementación automática en la GPU. La opción más extendida en la actualidad es CUDA, de NVidia, una extensión de C que permite la codificación de algoritmos en GPU de NVidia. Por último, podemos incluir en esta discusión a OpenCL, una combinación de interfaz y lenguaje de programación para el desarrollo de aplicaciones paralelas que puedan ser ejecutadas, de forma transparente, en diversas unidades de procesamiento (CPU multinúcleo, GPU, etc.).
  • Este modulo es uno de los sistema que dispongo ,este un ejemplos, lo compre de segunda mano y actual mente se a multiplicado el precio por 10 . Sistema en módulos (SOM) NVIDIA Jetson Xavier NX Module .
  • El módulo Seeed Studio NVIDIA® Jetson Xavier™ NX presenta el rendimiento de una supercomputadora en un sistema en módulo (SOM) compacto. Es más pequeño que una tarjeta de crédito y cuenta con un nuevo soporte nativo de la nube. El módulo acelera la pila de software de NVIDIA con más de 10 veces el rendimiento de su predecesor ampliamente adoptado, Jetson TX2. Esta eficiencia energética permite una inferencia de IA precisa y multimodal en un factor de forma pequeño.

Nota: Otra opción mas económica para laboratorios experimental. Kit de desarrollador 2GB con Wi-Fi.

  • El kit de desarrollador Nvidia Jetson Nano™ 2GB es una potente placa de ordenador AI que se ha diseñado tanto para el aprendizaje como para la fabricación. El kit combina las capacidades técnicas de la inteligencia artificial moderna con un rendimiento potente y un consumo de energía eficiente en una plataforma fácil de usar.

 

Recapitulando:

Son muchas definiciones que tienen Deep Learning , algunas publicaciones la consideran (IA) otras que es un conjunto de algoritmos de Aprendizaje Automático etc., expongo que son las GPU la cuales han aumentado el procesamiento de una manera extraordinaria, con los procesadores NVIDIA expongo dos ejemplos para tal fin.