"New Neural" è un progetto di motore di rete neurale Open Source per la piattaforma MetaTrader 5. - pagina 54

 
TheXpert:
Propongo di implementare per primo l'eco o la SOM lungo la strada e le interfacce possono essere finalizzate.

Dai, cosa c'è di più vicino a te?

Il più semplice sarebbe MLP.

 
Urain:
Dai, cosa c'è di più vicino a te?
Più vicino all'eco, più leggero al SOM. Probabilmente meglio la SOM, perché può essere fatta con o senza un insegnante.
 
TheXpert:
Eco più vicino, SOM più leggero. Probabilmente meglio di SOM, perché può essere fatto con o senza un insegnante.

La SOM è così.

1. inizializzazione della maglia
2. corsa di lavoro della maglia
3. insegnamento della maglia

Chi fa cosa?

O forse dovremmo prima aggiustare la gerarchia delle classi?

 
Urain:

Stavo pensando a come fare in modo che durante l'allenamento i nuovi neuroni nascessero nei posti giusti, ma dopo aver studiato gli algoritmi sono arrivato alla conclusione che non avrebbero avuto una formalizzazione comune, non ci sono praticamente punti di intersezione. Per questo ho rifiutato e mi sono concentrato sulla costruzione di una rete verticale. Tipo:

Dati --> neurone --> rete neurale incapsulata --> rete neurale contenitore

È possibile rendere i GA amorfi. Il genoma umano non è sempre stato composto da 28000 geni.

Ahi...

 
joo:
Oh, sei online. Risposta sulla topologia.
 

Prime stime

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);
};

 
TheXpert:
Oh, sei online. Risposta sulla topologia.
Per quanto mi riguarda, la gestione della topologia può e deve essere considerata come una programmazione genetica. Qui non sono molto forte - è una vasta area di conoscenza separata. Ma, se necessario, riprenderò la questione da vicino. È un GA in cui la lunghezza del cromosoma può cambiare dinamicamente. Nel mio GA, il cromosoma ha una lunghezza fissa. Anche se è possibile aggirare questo problema introducendo bandiere aggiuntive per congelare i singoli geni e prendere la lunghezza del cromosoma con una riserva.
 
TheXpert:

Prime stime

Metti qualche commento su di esso
 
joo:
Questo è l'"ops" che è.
OK, per ora, c'è un modo per aggirare il problema, ci penseremo quando faremo la genetica.
 
Urain:
Questo è il passo successivo e non è direttamente legato al motore, la sua implementazione è attraverso un GA esterno che crea diverse topologie, quelle inizializzano gli oggetti dei diversi motori.

E sì, probabilmente dovreste usare più di un GA. Uno per la topologia e uno per regolare tutti i pesi di tutte le reti. Poi il secondo GA congelerebbe solo alcuni dei geni a seconda della topologia corrente.

Motivazione: