Rede neural sob a forma de um roteiro - página 9

 
Andy_Kon писал (а) >>

Qual a importância da precisão para a sigmoid?

Após 20, a precisão está no 9º dígito.


Em treinamento, tem um efeito. Às vezes pode ter um efeito muito sério na convergência, até e incluindo a desaprendizagem.

Isto não deve ser um problema ao utilizar a GA para treinamento.

 
YuraZ писал (а) >>

3- o que entrar (é claro quantas entradas)

4- quando se reciclar

5-que algoritmo de aprendizagem a escolher

AG - genética

BP -


3. Realmente um problema, tudo depende da imaginação :) .

4. Aqui é onde você pode trapacear. Faça uma rede com a capacidade de esquecer. Não é tão difícil assim.

Vamos supor que você poderia fazer o seguinte (ótimo para aprender com a BP):

Limitar o número de padrões - digamos 1000.

Quando o próximo padrão aparecer (novo TF, digamos)

- apagar o padrão mais antigo

- Faça um ciclo de aprendizagem

- Para um novo padrão, devemos ensiná-lo 5 vezes.



O que você recebe?

+ O ciclo de treinamento não dura muito tempo.

+ O velho padrão não é esquecido de imediato.

- o novo padrão também não é aprendido de imediato, mas

+ mas mais rápido que o antigo padrão é esquecido devido ao aprendizado agressivo (5 vezes ONCE).

- adequado apenas para o aprendizado da BP



5. É um dilema,

GA - vai sempre até o ótimo, tem proteção contra os mínimos locais devido a suas propriedades, mas come muita memória e é extremamente lento.

A BP não garante nenhum resultado, embora a probabilidade seja muito alta (ou seja, se a GA for capaz de ensinar, a BP também ensinará), é mais rápida, não come memória, mas precisa de características como Momentum (livrar-se dos mínimos locais) e passo adaptativo (os mínimos também são pulados, mais a velocidade de aprendizagem aumenta muitas vezes).



Eu sou pela BP.

 
TheXpert писал (а) >>

3. Realmente um problema, tudo depende da imaginação :) .

4. Aqui é onde você pode fazer batota. Faça uma rede com a capacidade de esquecer. Não é tão difícil assim.

Vamos supor que você poderia fazer o seguinte (ótimo para aprender com a BP):

Limitar o número de padrões - digamos 1000.

Quando o próximo padrão aparecer (novo TF, digamos)

- apagar o padrão mais antigo

- Faça um ciclo de aprendizagem

- Para um novo padrão, devemos ensiná-lo 5 vezes.



O que você recebe?

+ O ciclo de treinamento não dura muito tempo.

+ O velho padrão não é esquecido de imediato.

- o novo padrão também não é aprendido de imediato, mas

+ mas mais rápido que o antigo padrão é esquecido devido ao aprendizado agressivo (5 vezes ONCE).

- adequado apenas para o aprendizado da BP



5. É um dilema,

GA - vai sempre até o ótimo, tem proteção contra os mínimos locais devido a suas propriedades, mas come muita memória e é extremamente lento.

A BP não garante nenhum resultado, embora a probabilidade seja muito alta (ou seja, se a GA for capaz de ensinar, 95% da BP também ensinará), é mais rápida, não come memória, mas precisa de características como Momentum (livrar-se dos mínimos locais) e passo adaptativo (os mínimos também são pulados, e a velocidade de aprendizagem aumenta muitas vezes).



Eu sou pela BP.


este é um exemplo de trabalho da GA

fonte em SI...


A GA é elogiada por sua velocidade tão rápida

Há também o MGA, que é ainda mais corajoso.


---

Bem, basicamente GA ou MGA é uma busca rápida máxima ou mínima

pelo menos METAQUOTES usaram GA para velocidade, não para outra coisa ...

Arquivos anexados:
dio.zip  4 kb
 
YuraZ писал (а) >>


em termos de velocidade, a GA é elogiada com a mesma rapidez.

Há também o MGA, que é ainda mais vivo.


---

bem basicamente GA ou MGA é uma busca rápida máxima ou mínima

pelo menos os peritos METAQUOTES usaram GA para a velocidade em seus testes e não outra coisa ...


A GA é definitivamente mais lenta que a BP.

As metaquotas aplicaram-na muito corretamente, pois a GA é uma coisa extremamente versátil. E é claro que será mais rápido do que um simples exagero.

A questão é a mesma que na neurônica -- não é a neurônica que reconhece letras, mas algoritmos especializados, as redes FR não usam.

Da mesma forma, é melhor usar algoritmos especializados para o treinamento, eles são a priori melhores.

 
TheXpert писал (а) >>

A GA é claramente mais lenta que a BP.

As metaquotas aplicaram-na muito corretamente porque a GA é extremamente versátil. E, é claro, será mais rápido do que a simples força bruta.

A questão é diferente, assim como nos neurônios -- as letras não são reconhecidas pelos neurônios, mas por algoritmos especializados, as redes FR não usam.

Da mesma forma, é melhor usar algoritmos especializados para o treinamento, eles são a priori melhores.

E de onde vem esta informação, se não é um segredo? E o treinamento FR com exemplos, então?

E qual é a diferença (em princípio) entre um algoritmo especializado e uma rede neural treinada?

 
Sergey_Murzinov писал (а) >>

De onde veio esta informação, se não é um segredo? E o treinamento FR com exemplos?

E qual é a diferença (em princípio) entre algoritmo especializado e rede neural treinada (treinada)?

Antes de tudo, as redes neurais não são a melhor solução para o reconhecimento de caracteres. Embora o neocognitron tenha alcançado 99,7% com o dicionário, em caracteres com voltas, realmente não é o ponto.

Vá para RSDN.ru e leia os tópicos relacionados às redes neurais. A propósito, há lá caras muito espertos, acho que você pode encontrar alguns deles aqui também :) .


Sobre aprender pelo exemplo, como este:

- vetorizar (fazer um esqueleto)

- contar interseções e suas posições relativas

- tomar, digamos, um par de coeficientes de primeira transformação de Fourier, normalizando de antemão para insensíveis ao tamanho. A propósito, com o FT pode-se ficar insensível à rotação, o EMMNIP.

- média para exemplos

- colocá-lo na base como uma referência


Qual é a diferença?

Quando você usa um algoritmo especial, você sabe como ele funciona.

Você não sabe como uma rede neural o faz. Você apenas sabe que esta função particular definida por uma rede neural é capaz de interpolar as entradas nas saídas com um alto grau de precisão.

 

Yaaaaaaaaaa!!!!!!!

A propósito, RSDN.RU é um fórum para programadores, não desenvolvedores de algoritmos de redes neurais e suas aplicações.

Informo que o FineReader utiliza blocos de tecnologia de redes neurais (versões mais recentes). E também aconselho a leitura de literatura especial (não popular científica) e a leitura de ramos de fóruns especializados para se ter uma idéia sobre redes neurais.

E uma rede bem treinada é um algoritmo especial. O exemplo mais simples pode ser visto se você gerar o código C no programa NeuroShell2. O código de rede é perfeitamente visível.

 
Sergey_Murzinov писал (а) >>

Só para que você saiba, o FineReader utiliza blocos de tecnologia de redes neurais (versões mais recentes). E para ter uma idéia das redes neurais, aconselho a leitura de literatura especial (não popular) e a leitura de ramos de fóruns especializados.

OK, posso ter alguns links sobre o assunto?
 

2 YuraZ

Quero dizer desde já muito obrigado por seu código de rede neural.

Após uma análise detalhada, entendi que você usa o método de offset neural (arrays _threshold e _t_change) e também o método de pulso (parâmetro Momentum) para acelerar os cálculos.

Tenho algumas perguntas sobre sua implementação.
1) Você muda _t_change na função de correção de pesos, mas depois não use essa correção em nenhum lugar para calcular o novo _threshold array de pesos.

2) Quando você passa a saída para a função sigmóide, você subtrai o parâmetro _threshold da soma, embora, como escrito na literatura, este peso limite não seja -1, mas +1. Portanto, você deve acrescentar, e não subtrair. Ainda mais, ao ajustar os pesos você alimenta exatamente +1 e não -1.
Na verdade, tenho mexido com esse limite e pulsação, e acontece que isso realmente ajuda a velocidade dos cálculos. O tempo é reduzido em várias vezes.

3) Eu também estava interessado na função sigmóide. Como eu entendo, seus parâmetros se devem à sua experiência prática nesta área, mas acho que você leu os livros de Usserman, onde ele escreve que a faixa {0,1} não é a ideal. O valor da correção do peso é proporcional ao nível de saída, e o nível de saída zero leva a que o peso não mude. E como com vetores de entrada binários metade dos valores será zero em média, os pesos aos quais eles estão associados também não aprenderão!
A solução é trazer as entradas para a faixa {-0,5,0,5} e adicionar um deslocamento para o sigmóide também por 0,5. Tal sigmóide [1/(1+Exp(-x))-0,5], com uma faixa {-0,5,0,5} reduz o tempo de convergência em 30-50%.
O único problema neste caso é reduzir o vetor de entrada a uma faixa de {-0,5,0,5}. Provavelmente terei que normalizá-lo. Eu tentei fazer isso, mas por alguma razão o resultado sigmóide foi sempre positivo. Gostaria de ouvir sua opinião sobre este assunto.

4) Agora, o que dizer da forma como as entradas são definidas. Talvez devêssemos automatizar este processo. O que você acha desta abordagem: Na saída, esperamos os valores 100, 010, 001, como de costume.
Para definir automaticamente um conjunto de saídas, sugiro definir a relação de preço máximo e mínimo no próximo intervalo para cada barra (por exemplo, 5000 barras em barras de um minuto). O valor desta relação será uma indicação de para onde o preço se deslocou. Se for por volta de 1, é plano. Se estiver acima de 1, então está acima. Se estiver entre 0 e 1, está abaixo. Mas acho que a faixa ideal para análise não é [0, +Є], mas [-EЄ, -A; -A, A; A, +Є], o que incidentalmente corresponderia aos nossos vetores de saída
. A entrada da rede será os últimos valores K das médias móveis de N (ou a diferença entre MA e o preço médio da barra). Assim, as entradas serão N*K no total.

Estou colando um código base um pouco mais leve e claro (biblioteca de suas funções). Em geral, em um estágio tão precoce de desenvolvimento provavelmente não é necessário criar um produto Expert Advisor completo. Vamos primeiro implementar uma lógica clara de cálculos no roteiro. Vamos testar tudo e depois escrever um indicador padrão em sua base. E então, nesta base, avançaremos mais - ligações em atraso e comitês de redes, e provavelmente um monte de coisas interessantes.

P.S.
Espero que você continue compartilhando seus desenvolvimentos, por isso tenho um pequeno pedido. Se você não se importa, por favor remova "Inserir espaços" nas opções do editor, é um pouco difícil de ler o código. Ansioso por uma nova versão. São possíveis sugestões para testes conjuntos.

Arquivos anexados:
 
sergeev писал (а) >>

2 YuraZ


2) Ao enviar a saída para a função sigmóide, você subtrai o parâmetro _threshold da soma, embora, como escrito na literatura, este peso limite não seja -1, mas +1. Portanto, você deve acrescentar, e não subtrair. Ainda mais, ao ajustar os pesos você alimenta exatamente +1 e não -1.
Na verdade, tenho mexido com esse limite e pulsação, e acontece que isso realmente ajuda a velocidade dos cálculos. O tempo é reduzido em várias vezes.

3) Eu também estava interessado na função sigmóide. Como eu entendo, tais parâmetros se devem a sua experiência prática nesta área, mas acho que você leu os livros de Usserman, onde ele escreve que a faixa {0,1} não é a ideal. O valor da correção do peso é proporcional ao nível de saída, e o nível de saída zero leva a que o peso não mude. E como com vetores de entrada binários metade dos valores será zero em média, os pesos aos quais eles estão associados também não aprenderão!
A solução é trazer as entradas para a faixa {-0,5,0,5} e adicionar um deslocamento para o sigmóide também por 0,5. Tal sigmóide [1/(1+Exp(-x))-0,5], com uma faixa {-0,5,0,5} reduz o tempo de convergência em 30-50%.
O único problema neste caso é reduzir o vetor de entrada a uma faixa de {-0,5,0,5}. Provavelmente terei que normalizá-lo. Eu tentei fazer isso, mas por alguma razão o resultado sigmóide foi sempre positivo. Gostaria de ouvir sua opinião sobre este assunto.

2. a fórmula original é assim -- S[j] = Sum(i)(y[i]*w[i,j] - t[j]). Ou seja, o limiar é tirado, por isso foi chamado de limiar. E dois "minus" na fórmula de recálculo resultam em mais, ou seja, não há erro no uso de limiar e recálculo de parâmetros.

Se eu estiver errado, o autor pode me corrigir.

3. isto não é um sigmóide - é um meio-sigmóide. O tempo de convergência para estas funções depende dos dados de entrada na rede. Pode acontecer de o bisigmóide convergir muitas vezes mais rápido, mas com dados diferentes você pode obter uma imagem completamente diferente.

Razão: