J'essaie donc de m'enseigner les réseaux de neurones (pour les applications de régression, pas pour classer les photos de chats).
Mes premières expériences ont été la formation d'un réseau pour implémenter un filtre FIR et une transformée de Fourier discrète (formation sur les signaux "avant" et "après"), car ce sont deux opérations linéaires qui peuvent être mises en œuvre par une seule couche sans fonction d'activation. Les deux ont bien fonctionné.
Alors j'ai voulu voir si je pouvais ajouter un abs()
et lui faire apprendre un spectre d'amplitude. J'ai d'abord pensé au nombre de nœuds dont il aurait besoin dans la couche cachée, et j'ai réalisé que 3 ReLU sont suffisants pour une approximation grossière de abs(x+jy) = sqrt(x² + y²)
, alors j'ai testé cette opération par elle-même sur des nombres complexes isolés (2 entrées → 3 nœuds ReLU couche cachée → 1 production). Parfois, cela fonctionne:
Mais la plupart du temps que je l'essaye, il reste bloqué dans un minimum local et ne parvient pas à trouver la bonne forme:
J'ai essayé tous les optimiseurs et variantes ReLU de Keras, mais ils ne font pas beaucoup de différence. Y a-t-il autre chose que je peux faire pour que des réseaux simples comme celui-ci convergent de manière fiable? Ou suis-je en train d'approcher cela avec la mauvaise attitude, et vous êtes censé jeter bien plus de nœuds que nécessaire au problème et si la moitié d'entre eux meurent, ce n'est pas considéré comme un gros problème?