Recentemente conheci o BrainJS, uma biblioteca de Rede Neural Artificial toda desenvolvida em Javascript disponível para instalação com npm no NodeJS (veja como instalar o NodeJS + npm).
Como funciona uma rede neural?
A resposta curta é: com magia negra.
Esta é uma rede neural não artificial: um cérebro de chipanzé.
A reposta um pouco mais longa, é que a rede neural recebe uma série de dados (inputs) e a resposta esperada para cada caso de conjunto de inputs.
Depois de coletar alguns inputs com respostas que você já saiba você pode executar o "treinamento" desta rede neural, e o resultado deste treinamento será um algoritmo. Este algoritmo calculará uma probabilidade de resposta para os próximos inputs que você colocar neste rede neural.
A rede neural é utilizada para sistemas de inteligência artificial, com o constante treinamento da rede (e input de informações) suas respostas ficam mais acertadas com o tempo.
Leia mais sobre redes neurais artificiais na Wikipedia.
BrainJS
Agora que você já tem uma idéia de como uma rede neural artificial funciona, pode fazer como eu e ficar impressionado por isso funcionar em javascript (server-side com NodeJS) ou client side, utilizando a artimanha do browserify.
Eu fiz uma série de experimentos com o BrainJS, quase todos relacionados a seletores de cores – sabem como é difícil a vida de um daltônico? Pensei em uma ferramenta para me auxiliar na identificação de cores e está dando certo…
Treinando uma rede neural com BrainJS
// instanciamos nossa rede neural, spongebob
var spongebob = new NeuralNetwork();
Agora vamos inputar dados de altura (h) e largura (w) e os resultados esperados: se o objeto é vertical ou horizontal.
spongebob.train([
{input: {w:200,h:100}, output: {horizontal: 1}},
{input: {w:500,h:400}, output: {horizontal: 1}},
{input: {w:100,h:110}, output: {vertical: 1}},
{input: {w:5,h:7}, output: {vertical: 1}},
]);
O resultado do treinamento da rede é um objeto que traz informações do sucesso (ou não) do treinamento e do número de iterações feitas para treinar sua rede neural. O treinamento pode levar um tempo pois é aqui que o algoritmo da sua rede neural é calculado.
Fazendo a rede neural trabalhar
Agora vamos fazer a rede neural trabalhar! Depois de inputar informações que você sabia a resposta você pode colocar dados que você não saiba a resposta e deixar a rede fazer o trabalho dela.
var resultado = spongebob.run({w:50,h:400});
Cada run vai resulta um objeto com as prováveis respostas, no exemplo acima:
horizontal: 0.45137855383391234
vertical: 0.5486215106258696
É ou não magia negra?