Discussão do artigo "Redes Neurais de Maneira Fácil (Parte 5): Cálculos em Paralelo com o OpenCL"

 

Novo artigo Redes Neurais de Maneira Fácil (Parte 5): Cálculos em Paralelo com o OpenCL foi publicado:

Discutimos anteriormente alguns tipos de implementações da rede neural. Nas redes consideradas, as mesmas operações são repetidas para cada neurônio. Uma etapa lógica adicional é utilizar os recursos da computação multithread (paralelismo em nível de threads) fornecidos pela tecnologia moderna em um esforço para acelerar o processo de aprendizagem da rede neural. Uma das possíveis implementações é descrita neste artigo.

Nós selecionamos a tecnologia. Agora, nós precisamos decidir sobre o processo de divisão dos cálculos nas threads. Você se lembra do algoritmo perceptron totalmente conectado durante uma passagem da propagação direta (feed-forward)? O sinal se move sequencialmente da camada de entrada para as camadas ocultas e, em seguida, para a camada de saída. Não adianta alocar uma thread para cada camada, pois os cálculos devem ser executados sequencialmente. O cálculo da camada não pode começar até que seja obtido o resultado da camada anterior. O cálculo de um neurônio individual em uma camada não depende dos resultados do cálculo de outros neurônios nessa camada. Isso significa que nós podemos alocar as threads separadas para cada neurônio e enviar todos os neurônios de uma camada para computar de forma paralela.  

Perceptron totalmente conectado

Descendo ao nível de operações de um neurônio, nós poderíamos considerar a possibilidade de paralelizar o cálculo do produto dos valores de entrada pelos seus coeficientes de peso. No entanto, a soma adicional dos valores resultantes e o cálculo do valor da função de ativação são combinados em uma única thread. Eu decidi implementar essas operações em um único kernel OpenCL usando as funções vetoriais.

Autor: Dmitriy Gizlyk

Razão: