Este workshop baseia-se em conteúdo da Dyalog Ltd. e está licenciado sob uma licença CC BY-NC-SA 4.0 International.
Os conteúdos desta página e do workshop são providenciados sem qualquer tipo de garantia.
Este workshop inspirou esta série de vídeos no YouTube para aprender APL com redes neuronais. (A série é em inglês.)
O objetivo deste workshop é introduzir as pessoas a programação com APL, sendo este primeiro contacto direcionado para a implementação de uma rede neuronal de raíz. É útil que a audiência tenha alguns conhecimentos de programação (numa linguagem de programação qualquer) e que já tenha ouvido falar de redes neuronais, mas isto não é um requisito inegociável.
Há duas razões pelas quais eu uso redes neuronais para introduzir APL aos novatos que vêm ao workshop:
O objetivo do workshop é implementar um "namespace" de forma progressiva, para que este tenha funcionalidades suficientes para criar uma rede neuronal que possa ser treinada nos dados MNIST (mnistdata.rar
) e que aprenda a classificar dígitos desenhados à mão.
Ou seja, a rede neuronal vai receber imagens como as que se seguem e deve ser capaz de identificar o dígito presente.
Neste sentido, segue aqui a ordem aproximada pela qual eu abordo as pequenas componentes que têm de ser implementadas (esta ordem é muito parecida com a ordem dos objetos definidos no ficheiro NeuralNets.apln
):
O tamanho da audiência, os seus conhecimentos prévios de APL e sobre redes neuronais, bem como outros fatores semelhantes vão impactar o quanto se consegue fazer.
Se tudo nesta lista for feito dentro do tempo previsto, seguem algumas possíveis direções para o workshop que têm custos de oportunidade reduzidos:
No fim do workshop os participantes terão uma implementação de uma rede neuronal (ou estarão perto disso) escrita numa linguagem com que nunca tinham trabalhado, APL.
Os participantes terão usado pela primeira vez uma linguagem que é puramente orientada para tensores e tê-la-ão usado para implementar de raíz um modelo de aprendizagem automática que é moderno e popular.
Finalmente, a sua implementação de uma rede neuronal pode ser treinada em menos de 2 minutos para reconhecer dígitos com uma precisão de 89% (tempo medido no meu portátil). Aqui está um exemplo de alguns dígitos desenhados à mão, junto dos palpites da rede treinada:
@@
@@@
@@@ @@@
@@@@ @@@@@@@@
@@@@ @ @@@@@@@@@@ @@ @ @@
@@@ @@@@@@@@ @@@@@@@ @@@ @@@@@@@ @@ @@
@@@ @@@@@@@@@@@@@ @@@@@ @@@ @@@@@@@@ @@@ @@@
@@@@ @@@@@@@@@@@@@ @@@ @@@ @@@@ @@@ @@@ @@@
@@@ @@@@@@@@@@@ @@@ @@@ @@@ @@@ @@@
@@@ @@@@ @@@@ @@@ @@ @@@ @@
@@@ @@@@ @@@@@ @@@ @@@ @@@ @@@@ @@@
@@@ @@@@@@ @@@@@ @@@@ @@@ @@@@ @@@@ @@@
@@@ @@@@@@@ @@@@ @@@@ @@@@ @@@@@@@ @@@@@ @@@
@@@ @@@@ @@ @@@@@ @@@@@ @@@@@@@@@@@@@ @@@@@@@@@@
@@ @@@@ @@ @@@@ @@@@@@@@ @@@@@@@@ @@@ @@@@@@@@
@@@@@@ @@@ @@@@@ @@@@@@@@@@@@@ @@ @@@ @@@
@@@@@@ @@@@@ @@@@@ @@@@@@@@ @@@@@@ @@ @@@
@@@@@@@@@@ @@@@ @@@@@@@ @@@@ @@@ @@
@@@@@@@@ @@@@ @@@@@@@ @@ @@ @@@
@@@@ @@@@ @@@@@@ @@@ @@@
@@@@ @@@@ @@@ @@
@@@@ @@@ @@@ @@@
@@@@ @@@ @@@
@@@ @@@ @@
guessing 6 guessing 7 guessing 2 guessing 9 guessing 4
Aqui tens algumas opiniões de pessoas que foram ao workshop:
“Acho incrível o que nós conseguimos fazer em apenas 2 horas [...] No final senti-me cansado mas satisfeito e fascinado com o que fiz e aprendi.” — João Afonso
“Esta hands-on approach de aprender uma linguagem de programação nova torna o processo de aprendizagem mais interessante do que o habitual.” — Carlos
“Gostei muito da maneira simples e acessível como foi explicado.” — Anónim@
Para além do código de referência, que está disponível neste repositório do GitHub, os seguintes links podem ser úteis: