Você consegue deixar Módulo mais rápido se ele for ad hoc. Mas parece que você deseja uma solução bem generalista.
Outro problema; usar JS para fazer o treinamento de Redes Neurais é como "martelar parafusos" (Akita).
Pode usar C++ para o treinamento, exportar os pesos, e então usar o JS para fazer o Forward.
Quanto à inicialização; que você gostaria de descartar a aleatoriedade, ainda não existe um método que seja melhor, você terá que ir muito fundo nas pesquisas, provavelmente usando gradientes nos seus cálculos...
Eu já fiz o seguinte (mas não fugindo da aleatoriedade):
- supondo que seja uma rede com 2 neurônios e 2 pesos,
- suponto que foram inicializados com ,025 e -,01
Neste caso eu crio 4 redes (sendo n o número de pesos; 2^n Redes); com os seguintes pesos:
RN | W1 | W2 |
---|---|---|
RN1 | ,025 | -,01 |
RN2 | ,025 | ,01 |
RN3 | -,025 | -,01 |
RN4 | -,025 | ,01 |
Executo o treinamento de todas elas em paralelo.
Uma delas vai convergir mais rápido para o mínimo global.
E uma grande observação aqui:
às vezes fazer isso é muito interessante para as Redes que ficam muito travadas em um mínimo local;
às vezes não, só dificulta o problema.