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:
class IEvolvable // интерфейс для подключения эволюционных алгоритмов
{
public:
virtualvoid GetWeightsAsVector(double& weights[]) const; // получаем все изменяемые веса собранные в одном векторе для генетикиvirtualvoid ApplyWeightsVector(double weights[]); // применяем подобранные генетикой веса к сетиvirtualvoid FeedInput(double inData[]); // подаем входvirtualvoid PropagateSignal(); // прогоняем входной сигналvirtualvoid GetOutput(double& outData[]) const; // берем выход
};
class ISerializable // сохранение
{
public:
virtualbool LoadFromFile(string filePath);
virtualbool SaveToFile(string filePath) const;
};
class IBasicNet
: public IEvolvable
, public ISerializable
{
public:
virtualvoid FeedInput(double inData[]); // вход можно брать из коллекции или отдельно. Подразумевается, что коллекция включает в себя обработку входов, поэтому отдельные входы надо преобразовывать коллекциейvirtualvoid FeedInput(int index);
virtualvoid PropagateSignal();
virtualvoid GetOutput(double& outData[]) const;
virtualvoid Init(); // инициализация. Инициализатор можно подавать в конструкторе, можно в функцию, посмотрим как будет удобно
}
class ISupervised // сеть с учителем
: public IBasicNet
{
public:
virtualvoid SetPatternCollection(PatternCollection* collection); // у сетей с учителем обязательно каждому входному образу соответствует выходной поэтому лучше их сразу организовывать по парам
virtualvoid CountError(); // подсчет ошибки. сюда например будет входить ОРО для MLPvirtualvoid Learn(); // изменение весов. никаких итераций внутри, чтобы можно было на каждом шаге просмотреть состояние
};
class IUnsupervised // сеть без учителя
: public IBasicNet
{
public:
virtualvoid SetInputCollection(InputCollection* collection); // у сетей без учителя только входыvirtualvoid Learn();
};
class IInitializer // инициализатор
{
public:
virtualvoid Init(double& value);
virtualvoid Init(double& value[]);
virtualvoid 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.
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.
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.
Vá lá, o que está mais perto de ti?
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?
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...
Primeiras estimativas
Oh, você está online. Resposta sobre topologia.
Primeiras estimativas
Esse é o "oops" que é.
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.