O "New Neural" é um projecto de motor de rede neural Open Source para a plataforma MetaTrader 5. - página 54

 
TheXpert:
Eu proponho o primeiro a implementar ou echo ou SOM ao longo do caminho e as interfaces podem ser finalizadas.

Vá lá, o que está mais perto de ti?

O mais simples seria o MLP.

 
Urain:
Vá lá, o que está mais perto de ti?
Mais perto do eco, mais leve para a SOM. Provavelmente é melhor o SOM, porque pode ser feito com ou sem um professor.
 
TheXpert:
Eco mais próximo, SOM mais leve. Provavelmente melhor que a SOM, porque pode ser feito com ou sem um professor.

A SOM é assim.

1. inicialização da malha
2. curso de trabalho da malha
3. malha de ensino

Quem faz o quê?

Ou talvez devêssemos primeiro ajustar a hierarquia de classes?

 
Urain:

Eu estava pensando em como fazer para que durante o treinamento novos neurônios nascessem nos lugares certos, mas após estudar os algoritmos cheguei à conclusão de que eles não teriam uma formalização comum, praticamente não existem pontos de intersecção. Foi por isso que recusei e me concentrei na construção de uma rede vertical. Tipo:

Dados --> neurônio --> rede neural encapsulada --> rede neural encapsulada

É possível tornar as AG amorfas. O genoma humano nem sempre consistiu em 28000 genes.

Ai...

 
Joo:
Oh, você está online. Responda sobre a topologia.
 

Primeiras estimativas

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, você está online. Resposta sobre topologia.
Isso é um "oops". No que me diz respeito, a gestão de topologia pode e deve ser vista como programação genética. Aqui eu não sou muito forte - é uma vasta área de conhecimento separada. Mas, se for preciso, vou abordar esta questão de perto. É uma AG na qual o comprimento do cromossoma pode mudar dinamicamente. Na minha AG, o comprimento do cromossoma é fixo. Embora seja possível contornar isto introduzindo bandeiras adicionais para congelar os genes individuais e tomar o comprimento do cromossoma com uma reserva.
 
TheXpert:

Primeiras estimativas

Faça algum comentário sobre isso
 
Joo:
Esse é o "oops" que é.
OK, por enquanto, há uma maneira de contornar o problema, vamos pensar sobre isso quando fizermos a genética.
 
Urain:
Este é o passo seguinte e não está directamente relacionado com o motor, a sua implementação é através de uma AG externa que cria diferentes topologias, aquelas que inicializam objectos de diferentes motores.

E sim, você provavelmente deveria usar mais de uma AG. Uma para topologia e outra para ajustar todos os pesos de todas as redes. Então a segunda AG apenas congelaria alguns dos genes dependendo da topologia atual.