"New Neural" est un projet de moteur de réseau neuronal Open Source pour la plateforme MetaTrader 5. - page 54

 
LeXpert:
Je propose que le premier implémente soit l'écho ou le SOM en cours de route et que les interfaces puissent être finalisées.

Allez, qu'est-ce qui est le plus proche de vous ?

Le plus simple serait le MLP.

 
Urain:
Allez, qu'est-ce qui est le plus proche de vous ?
Plus proche de l'écho, plus léger du SOM. Le SOM est probablement meilleur, car il peut être réalisé avec ou sans professeur.
 
TheXpert:
Echo plus proche, SOM plus léger. Probablement meilleure que SOM, car elle peut être pratiquée avec ou sans professeur.

SOM est comme ça.

1. initialisation du maillage
2. course de travail du maillage
3. apprentissage du maillage

Qui fait quoi ?

Ou peut-être devrions-nous d'abord ajuster la hiérarchie des classes ?

 
Urain:

J'ai réfléchi à la manière de faire en sorte que, pendant l'entraînement, de nouveaux neurones naissent aux bons endroits, mais après avoir étudié les algorithmes, je suis arrivé à la conclusion qu'ils n'auraient pas de formalisation commune, il n'y a pratiquement aucun point d'intersection. C'est pourquoi j'ai refusé et me suis concentré sur la construction d'un réseau vertical. Type :

Données --> neurones --> réseau neuronal encapsulé --> réseau neuronal conteneurisé

Il est possible de rendre les GA amorphes. Le génome humain n'a pas toujours été constitué de 28 000 gènes.

Aïe...

 
joo:
Oh, vous êtes en ligne. Réponse sur la topologie.
 

Premières estimations

class IEvolvable // интерфейс для подключения эволюционных алгоритмов
{
public:
   virtual void GetWeightsAsVector(double& weights[]) const; // получаем все изменяемые веса собранные в одном векторе для генетики
   virtual void ApplyWeightsVector(double weights[]); // применяем подобранные генетикой веса к сети
   
   virtual void FeedInput(double inData[]); // подаем вход
   virtual void PropagateSignal(); // прогоняем входной сигнал
   virtual void GetOutput(double& outData[]) const; // берем выход
};

class ISerializable // сохранение
{
public:
   virtual bool LoadFromFile(string filePath);
   virtual bool SaveToFile(string filePath) const;
};

class IBasicNet
   : public IEvolvable
   , public ISerializable
{
public:
   virtual void FeedInput(double inData[]); // вход можно брать из коллекции или отдельно. Подразумевается, что коллекция включает в себя обработку входов, поэтому отдельные входы надо преобразовывать коллекцией
   virtual void FeedInput(int index);
   virtual void PropagateSignal();
   virtual void GetOutput(double& outData[]) const;
   virtual void Init(); // инициализация. Инициализатор можно подавать в конструкторе, можно в функцию, посмотрим как будет удобно
}

class ISupervised // сеть с учителем
   : public IBasicNet
{
public:
   virtual void SetPatternCollection(PatternCollection* collection); // у сетей с учителем обязательно каждому входному образу соответствует выходной поэтому лучше их сразу организовывать по парам
   virtual void CountError(); // подсчет ошибки. сюда например будет входить ОРО для MLP
   virtual void Learn(); // изменение весов. никаких итераций внутри, чтобы можно было на каждом шаге просмотреть состояние
};

class IUnsupervised // сеть без учителя
   : public IBasicNet
{
public:
   virtual void SetInputCollection(InputCollection* collection); // у сетей без учителя только входы
   virtual void Learn();
};

class IInitializer // инициализатор
{
public:
   virtual void Init(double& value);
   virtual void Init(double& value[]);
   virtual void Init(Matrix& value);
};

 
LeXpert:
Oh, vous êtes en ligne. Réponse sur la topologie.
C'est un "oops". En ce qui me concerne, la gestion de la topologie peut et doit être considérée comme de la programmation génétique. Ici, je ne suis pas très fort - c'est un vaste domaine de connaissances à part. Mais, le cas échéant, je reprendrai cette question de près. Il s'agit d'une AG dans laquelle la longueur des chromosomes peut changer dynamiquement. Dans mon AG, le chromosome a une longueur fixe. Il est toutefois possible de contourner ce problème en introduisant des drapeaux supplémentaires pour geler les gènes individuels et prendre la longueur du chromosome avec une réserve.
 
LeXpert:

Premières estimations

Mettez un commentaire dessus
 
joo:
C'est le "oups" que c'est.
OK, pour l'instant, il y a un moyen de contourner le problème, nous y réfléchirons lorsque nous ferons la génétique.
 
Urain:
C'est l'étape suivante et elle n'est pas directement liée au moteur, sa mise en œuvre se fait par le biais d'un AG externe qui crée différentes topologies, qui initialisent les objets des différents moteurs.

Et oui, vous devriez probablement utiliser plus d'une AG. Un pour la topologie et un pour ajuster tous les poids de tous les réseaux. Ensuite, la deuxième AG gèlerait simplement certains des gènes en fonction de la topologie actuelle.