Red neuronal en forma de guión - página 9

 
Andy_Kon писал (а) >>

¿Qué importancia tiene la precisión para el sigmoide?

Después de 20 la precisión está en el noveno dígito...


En el entrenamiento, tiene un efecto. A veces puede tener un efecto muy grave en la convergencia, hasta el desaprendizaje.

Esto no debería ser un problema cuando se utiliza GA para la formación.

 
YuraZ писал (а) >>

3 - qué introducir (está claro el número de entradas)

4. cuándo volver a entrenar

5-qué algoritmo de aprendizaje elegir

GA - genética

BP -


3. Realmente un problema, todo depende de la imaginación :) .

4. Aquí es donde se puede hacer trampa. Hacer una red con capacidad de olvido. No es tan difícil.

Supongamos que se puede hacer lo siguiente (es ideal para aprender con BP):

Limite el número de patrones, digamos 1000.

Cuando aparezca el siguiente patrón (un nuevo TF, por ejemplo)

- borrar el patrón más antiguo

- Hacer un ciclo de aprendizaje

- Para un nuevo patrón debemos enseñarlo 5 veces.



¿Qué obtienes?

+ El ciclo de formación no dura mucho tiempo.

+ El viejo patrón no se olvida de inmediato.

- el nuevo patrón tampoco se aprende de inmediato, pero

+ pero más rápido que el viejo patrón se olvida debido al aprendizaje agresivo (5 veces ONCE).

- sólo apto para el aprendizaje de BP



5. es un dilema,

GA - baja constantemente al óptimo, tiene protección contra los mínimos locales debido a sus propiedades, pero come mucha memoria y es tremendamente lento.

BP no garantiza ningún resultado, aunque la probabilidad es muy alta (es decir, si GA es capaz de enseñar, BP enseñará también), es más rápido, no come memoria, pero necesita características como Momentum (deshacerse de los mínimos locales) y paso adaptativo (los mínimos se saltan también, además la velocidad de aprendizaje aumenta muchas veces).



Estoy a favor de BP.

 
TheXpert писал (а) >>

3. Realmente un problema, todo depende de la imaginación :) .

4. Aquí es donde se puede hacer trampa. Hacer una red con capacidad de olvido. No es tan difícil.

Supongamos que se puede hacer lo siguiente (es ideal para aprender con BP):

Limite el número de patrones, digamos 1000.

Cuando aparezca el siguiente patrón (un nuevo TF, por ejemplo)

- borrar el patrón más antiguo

- Hacer un ciclo de aprendizaje

- Para un nuevo patrón debemos enseñarlo 5 veces.



¿Qué obtienes?

+ El ciclo de formación no dura mucho tiempo.

+ El viejo patrón no se olvida de inmediato.

- el nuevo patrón tampoco se aprende de inmediato, pero

+ pero más rápido que el viejo patrón se olvida debido al aprendizaje agresivo (5 veces ONCE).

- sólo apto para el aprendizaje de BP



5. es un dilema,

GA - baja constantemente al óptimo, tiene protección contra los mínimos locales debido a sus propiedades, pero come mucha memoria y es tremendamente lento.

BP no garantiza ningún resultado, aunque la probabilidad es muy alta (es decir, si GA es capaz de enseñar, el 95% de BP también enseñará), es más rápido, no come memoria, pero necesita características como Momentum (deshacerse de los mínimos locales) y paso adaptativo (los mínimos se saltan también, y la velocidad de aprendizaje aumenta muchas veces).



Estoy a favor de BP.


este es un ejemplo de trabajo de AG

fuente en SI...


El GA es alabado por su rapidez, ya que

También hay MGA, que es aún más valiente.


---

Bueno, básicamente GA o MGA es una búsqueda rápida de máximos o mínimos

al menos METAQUOTES utilizó GA para la velocidad, no otra cosa ...

Archivos adjuntos:
dio.zip  4 kb
 
YuraZ писал (а) >>


En términos de velocidad, el GA es alabado como rápido.

También está el MGA, que es aún más animado.


---

Bueno, básicamente GA o MGA es una búsqueda máxima o mínima rápida

al menos los expertos de METAQUOTES utilizaron GA para la velocidad en su prueba y no otra cosa ...


GA es definitivamente más lento que BP.

Metaquotes lo aplicó muy correctamente, ya que GA es una cosa muy versátil. Y, por supuesto, será más rápido que una simple sobrecarga.

La cuestión es la misma que en la neurónica: no son las neuronas las que reconocen las letras, sino algoritmos especializados, que las redes FR no utilizan.

Del mismo modo, es mejor utilizar algoritmos especializados para el entrenamiento, son a priori mejores.

 
TheXpert писал (а) >>

GA es claramente más lento que BP.

Metaquotes lo aplicó con bastante acierto porque GA es tremendamente versátil. Y, por supuesto, será más rápido que la simple fuerza bruta.

La cuestión es diferente, al igual que con las neuronas: las letras no son reconocidas por las neuronas, sino por algoritmos especializados, que las redes de FR no utilizan.

Del mismo modo, es mejor utilizar algoritmos especializados para el entrenamiento, son a priori mejores.

¿Y de dónde viene esta información, si no es un secreto? ¿Qué pasa entonces con la formación de FR con ejemplos?

¿Y cuál es la diferencia (en principio) entre un algoritmo especializado y una red neuronal entrenada?

 
Sergey_Murzinov писал (а) >>

¿De dónde viene esta información, si no es un secreto? ¿Y la formación en FR con ejemplos?

¿Y cuál es la diferencia (en principio) entre algoritmo especializado y red neuronal entrenada (adiestrada)?

En primer lugar, las redes neuronales no son la mejor solución para el reconocimiento de caracteres. Aunque el neocognitrón logró un 99,7% con el diccionario, en caracteres con giros, realmente no es el punto.

Vaya a RSDN.ru y lea los hilos relacionados con las redes neuronales. Hay tipos muy inteligentes allí, por cierto, creo que puedes encontrar algunos de ellos aquí también :) .


Sobre aprender con el ejemplo, así:

- vectorizar (hacer un esqueleto)

- contar las intersecciones y sus posiciones relativas

- tomar, por ejemplo, un par de coeficientes de la primera transformada de Fourier, normalizando de antemano para que sean insensibles al tamaño. Por cierto, con FT se puede conseguir la insensibilidad a la rotación, EMMNIP.

- media para los ejemplos

- ponerlo en la base como referencia


¿En qué se diferencia?

Cuando se utiliza un algoritmo especial, se sabe cómo funciona.

No sabes cómo lo hace una red neuronal. Sólo sabe que esta función concreta definida por una red neuronal es capaz de interpolar las entradas en las salidas con un alto grado de precisión.

 

¡¡¡¡¡¡¡Yaaaaaaaaa!!!!!!!

Por cierto, RSDN.RU es un foro para programadores, no para desarrolladores de algoritmos de redes neuronales y sus aplicaciones.

Le informo que FineReader utiliza bloques de tecnología de red neural (últimas versiones). Y también aconsejo leer literatura especial (no de divulgación científica) y leer ramas de foros especializados para hacerse una idea de las redes neuronales.

Una red entrenada es también un algoritmo especial. El ejemplo más sencillo puede verse generando código C en el programa NeuroShell2. El código de la red es perfectamente visible.

 
Sergey_Murzinov писал (а) >>

Para que lo sepa, FineReader utiliza bloques de tecnología de red neural (últimas versiones). Y para hacerse una idea de las redes neuronales aconsejo leer literatura especial (no de divulgación científica) y leer ramas de foros especializados.

De acuerdo, ¿podría tener algunos enlaces sobre el tema?
 

2 YuraZ

En primer lugar, quiero dar las gracias por su código de red neuronal.

Después de un análisis detallado, entendí que utiliza el método de desplazamiento neural (arrays _threshold y _t_change) y también el método de impulso (parámetro Momentum) para acelerar los cálculos.

Tengo algunas preguntas sobre su aplicación.
1) Cambias _t_change en la función de corrección de pesos, pero luego no utilizas esa corrección en ningún sitio para calcular la nueva matriz de pesos _threshold.

2) Cuando se pasa la salida a la función sigmoidea, se resta el parámetro _threshold de la suma, aunque tal como está escrito en la literatura, este peso umbral no es -1 sino +1. Por lo tanto, hay que sumar, no restar. Más aún, cuando al ajustar los pesos se alimenta exactamente +1 y no -1.
De hecho he estado trasteando con este umbral y pulso, y resulta que ayuda mucho a la velocidad de los cálculos. El tiempo se reduce varias veces.

3) También me interesaba la función sigmoidea. Según tengo entendido, tales sus parámetros se deben a su experiencia práctica en esta área, pero creo que ha leído los libros de Usserman, donde escribe que el rango {0,1} no es óptimo. El valor de la corrección del peso es proporcional al nivel de salida, y un nivel de salida cero hace que el peso no cambie. Y como con los vectores de entrada binarios la mitad de los valores serán, por término medio, cero, ¡los pesos a los que están asociados tampoco aprenderán!
La solución es llevar las entradas al rango {-0,5,0,5} y añadir un desplazamiento a la sigmoidea también en 0,5. Esta sigmoide [1/(1+Exp(-x))-0,5], con un rango {-0,5,0,5} reduce el tiempo de convergencia en un 30-50%.
El único problema en este caso es reducir el vector de entrada a un rango de {-0,5,0,5}. Probablemente tendré que normalizarlo. Intenté hacerlo, pero por alguna razón el resultado de la sigmoidea era siempre positivo. Me gustaría conocer su opinión sobre este asunto.

4) Ahora, ¿qué pasa con la forma en que se establecen las entradas? Quizás deberíamos automatizar este proceso. Qué te parece este planteamiento: En la salida esperaremos los valores 100, 010, 001, como siempre.
Para establecer automáticamente una serie de salidas, sugiero definir la relación del precio máximo y mínimo en el siguiente intervalo para cada barra (por ejemplo, 5000 barras en barras de un minuto). El valor de este ratio será una indicación de hacia dónde se ha movido el precio. Si está en torno a 1, es plana. Si está por encima de 1, es que ha subido. Si está entre 0 y 1, es que ha bajado. Pero creo que el rango óptimo para el análisis no es [0, +Є], sino [-EЄ, -A; -A, A; A, +Є], que por cierto se correspondería con nuestros vectores de salida
. La entrada de la red serán los últimos K valores de N medias móviles (o la diferencia entre MA y el precio medio de la barra). Así, las entradas serán N*K en total.

Estoy pegando un código base un poco más ligero y claro (biblioteca de sus funciones). En general, en una fase tan temprana de desarrollo probablemente no sea necesario crear un producto completo de Asesor Experto. Primero vamos a implementar una lógica clara de cálculos en el script. Probemos todo y luego escribamos un indicador estándar sobre su base. Y luego, sobre esta base, seguiremos avanzando: retroalimentación y comités de redes, y probablemente un montón de cosas interesantes.

P.D.
Espero que sigas compartiendo tus avances, así que tengo una pequeña petición. Si no te importa, por favor quita "Insertar espacios" en las opciones del editor, es un poco difícil de leer el código. Espero con ansias la nueva versión. Se pueden hacer sugerencias para realizar pruebas conjuntas.

Archivos adjuntos:
 
sergeev писал (а) >>

2 YuraZ


2) Al enviar la salida a la función sigmoidea, se resta el parámetro _threshold de la suma, aunque como está escrito en la literatura, este peso umbral no es -1, sino +1. Por lo tanto, hay que sumar, no restar. Más aún, cuando al ajustar los pesos se alimenta exactamente +1 y no -1.
En realidad he estado trasteando con este umbral y pulso, y resulta que ayuda mucho a la velocidad de los cálculos. El tiempo se reduce varias veces.

3) También me interesaba la función sigmoidea. Según tengo entendido, tales sus parámetros se deben a su experiencia práctica en esta área, pero creo que ha leído los libros de Usserman, donde escribe que el rango {0,1} no es óptimo. El valor de la corrección del peso es proporcional al nivel de salida, y un nivel de salida cero hace que el peso no cambie. Y como con los vectores de entrada binarios la mitad de los valores serán cero por término medio, ¡los pesos a los que están asociados tampoco aprenderán!
La solución es llevar las entradas al rango {-0,5,0,5} y añadir un desplazamiento a la sigmoidea también en 0,5. Esta sigmoide [1/(1+Exp(-x))-0,5], con un rango {-0,5,0,5} reduce el tiempo de convergencia en un 30-50%.
El único problema en este caso es reducir el vector de entrada a un rango de {-0,5,0,5}. Probablemente tendré que normalizarlo. Intenté hacerlo, pero por alguna razón el resultado de la sigmoidea era siempre positivo. Me gustaría conocer su opinión sobre este asunto.

2. La fórmula original es así -- S[j] = Suma(i)(y[i]*w[i,j] - t[j]). Es decir, se quita el umbral, que es por lo que se llamaba el umbral. Y dos puntos negativos en la fórmula de recálculo dan como resultado un plus, es decir, no hay error en el uso del umbral y el recálculo de los parámetros.

Si me equivoco, el autor puede corregirme.

3. Esto no es una sigmoidea, es una semigmoidea. El tiempo de convergencia de estas funciones depende de los datos de entrada a la red. Puede ocurrir que el bisigmoide converja muchas veces más rápido, pero con datos diferentes se puede obtener una imagen completamente distinta.

Razón de la queja: