Discusión sobre el artículo "Redes neuronales: así de sencillo (Parte 5): Cálculos multihilo en OpenCL"

 

Artículo publicado Redes neuronales: así de sencillo (Parte 5): Cálculos multihilo en OpenCL:

Ya hemos analizado algunos tipos de implementación de redes neuronales. Podemos ver con facilidad que se repiten las mismas operaciones para cada neurona de la red. Y aquí sentimos el legítimo deseo de aprovechar las posibilidades que ofrece la computación multihilo de la tecnología moderna para acelerar el proceso de aprendizaje de una red neuronal. En el presente artículo, analizaremos una de las opciones para tal implementación.

Una vez hemos decidido la tecnología a usar, es momento de pensar en el proceso de división de los cálculos en subprocesos. Recordemos el algoritmo del perceptrón completamente conectado con la propagación hacia adelante. La señal se mueve secuencialmente desde la capa de entrada a las capas ocultas y luego hacia la capa de salida. La asignación de un hilo para cada capa no dará un resultado, ya que los cálculos deben realizarse de forma secuencial. No podemos empezar a calcular una capa hasta que obtengamos el resultado de la anterior. Al mismo tiempo, el recálculo de una neurona individual en una capa no depende de los resultados del recálculo de las otras neuronas en esta capa. Es decir, podemos asignar con seguridad un hilo para cada neurona y enviar inmediatamente todas las neuronas de la capa al cálculo paralelo.  

Perceptrón completamente conectado

Si descendemos al nivel de las operaciones de una neurona, podemos analizar la posibilidad de paralelizar el cálculo de los productos de los valores de entrada por sus coeficientes de peso. Pero posterior la suma de los valores obtenidos y el cálculo del valor de la función de activación se unen en un solo hilo. Tras considerar todas las ventajas y desventajas, decidimos implementar estas operaciones en un solo núcleo OpenCL utilizando funciones vectoriales.

Autor: Dmitriy Gizlyk