
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¿qué son "5 porqués" y qué tienen que ver 4 capas? Lo he buscado, un simple árbol de decisión responderá a esta pregunta. El aproximador universal es el NS de 2 capas, que responderá a cualquier número de "por qué" :) Las otras capas se utilizan principalmente para el preprocesamiento de datos en diseños complejos. Por ejemplo, para comprimir una imagen a partir de un gran número de píxeles y luego reconocerla.
"Los 5 porqués" es una técnica para determinar la causalidad Wikipedia. El artículo da por ejemplo cómo se diseña esencialmente una red neuronal para encontrar una relación causal entre los movimientos de precios pasados y la dirección futura del movimiento de precios.
sólo la señal de entrada debe estar también en este intervalo. Por señal de entrada entiendo exactamente la señal de entrada a la neurona, no a la función en discusión.
Teóricamente, la señal de entrada a la neurona puede ser cualquiera. Su influencia se corrige mediante un coeficiente de ponderación. Si la señal de entrada es demasiado pequeña pero tiene un impacto significativo en la solución global, su coeficiente de ponderación se incrementará en el proceso de aprendizaje. Si la señal es de gran importancia, pero su influencia en el resultado es insignificante, su coeficiente de ponderación se reducirá hasta "0" (interrupción de la comunicación entre neuronas).
"Los 5 porqués" es una técnica para determinar la causalidad Wikipedia. El artículo se da por ejemplo como esencialmente una red neuronal diseñada para encontrar una relación causal entre los movimientos de precios pasados y la dirección futura del movimiento de precios.
No entendí la correlación entre el número de preguntas y las capas. La entrada es una serie de atributos, cada uno de los cuales debe responderse (a grandes rasgos). La salida es un resultado resumido. Una capa oculta puede ser suficiente, no necesariamente 4. Se cree que un NS con 2 capas ocultas puede aproximar cualquier función. Esto es sólo una referencia.
Y para desarrollar el tema, una pregunta sobre la arquitectura de la NS. ¿De qué depende?
Simplemente no entendía la correlación entre el número de preguntas y las capas. La entrada es un número de atributos, cada uno de los cuales debe responderse (a grandes rasgos). La salida es un resultado resumido. Una capa oculta puede ser suficiente, no necesariamente 4. Se cree que un NS con 2 capas ocultas puede aproximar cualquier función. Esto es sólo como referencia.
La técnica de los 5 porqués se basa en preguntas secuenciales, en las que cada pregunta responde a la razón de la pregunta anterior. Por ejemplo, observamos un gráfico y un gráfico de precios al alza y construimos preguntas (las preguntas se responden de forma abstracta para explicar la técnica):
1. Dónde operar - Comprar
2. ¿Por qué comprar? - Porque es una tendencia alcista
3. ¿Por qué una tendencia alcista? - La MA50 está subiendo
4. ¿Por qué está subiendo la MA50? - El precio medio de cierre de 50 velas con un desplazamiento de 1 es inferior al precio medio de cierre de las últimas 50 velas.
etc.
Como las preguntas son secuenciales y tienen una relación causa-efecto, creamos capas para observar esta relación. Si utilizamos sólo 2 capas, la relación causa-efecto se pierde, la red neuronal analiza varias opciones independientes y elige la mejor.
Y para desarrollar el tema, una pregunta sobre la arquitectura de la NS. ¿De qué depende?
De la comprensión del proceso por parte del arquitecto. El artículo da la versión más simple de una red neuronal y no considera las arquitecturas convolucionales y otras.
La técnica de los 5 Porqués se construye a partir de preguntas secuenciales en las que cada pregunta responde a la razón de la pregunta anterior. Por ejemplo, observamos un gráfico y un gráfico de precios al alza y y construimos preguntas (las preguntas se responden en abstracto para explicar la técnica):
1. Dónde operar - Comprar
2. ¿Por qué comprar? - Porque es una tendencia alcista
3. ¿Por qué una tendencia alcista? - La MA50 está subiendo
4. ¿Por qué está subiendo la MA50? - El precio medio de cierre de 50 velas con un desplazamiento de 1 es inferior al precio medio de cierre de las últimas 50 velas.
etc.
Como las preguntas son secuenciales y tienen una relación causa-efecto, creamos capas para seguir esta relación. Si utilizamos sólo 2 capas, la relación causa-efecto se pierde, la red neuronal analiza varias opciones independientes y elige la mejor.
No importa en qué orden hagamos estas preguntas, el resultado será el mismo. No es necesario separar por capas.
Buenas noches, Peter.
La neurona interior consta de 2 funciones:
1. Primero calculamos la suma de todas las señales entrantes teniendo en cuenta sus coeficientes de ponderación. Es decir, tomamos el valor en cada entrada de la neurona y lo multiplicamos por el factor de ponderación correspondiente. Y sumamos los valores de los productos obtenidos.
Así, obtenemos un valor determinado que se introduce en la entrada de la función de activación.
2. La función de activación convierte la suma recibida en una señal de salida normalizada. Puede ser una función lógica simple o varias funciones sigmoidales. Estas últimas son más comunes, ya que tienen una transición de cambio de estado más suave.
La comunicación entre neuronas se organiza como una transferencia directa del valor de salida de una neurona a la entrada de una neurona posterior. En este caso, haciendo referencia al punto 1, el valor que llega a la entrada de una neurona se tiene en cuenta en función de su coeficiente de peso.
No hay diferencia en el orden en que se formulan estas preguntas, el resultado será el mismo. No es necesario superponerlas.
Gracias. El artículo y las referencias me ayudaron a entender la esencia del propósito de las redes neuronales - la definición y el procesamiento de la invariante incrustado en el conjunto de datos, y el método más simple de la aplicación técnica, que todavía tengo que entender definitivamente. Pero las explicaciones son muy claras.
Si quieres entender la estructura de MLP, IMHO es mejor que mires este código:
#danila_zaytcev mlp 2018
import random
import math
class mlp:
class activefunc:
def __init__(self, func, derive):
self.func = func
self.derive = derive
def __init__(self, structure, af, learnRate, moment, epohs):
self.leanRate = learnRate
self.af = af
self.moment = moment
self.epohs = epohs
self.layerCount = len(structure) - 1
self.weightCount = [None] * self.layerCount
self.neuronsCount = [None] * self.layerCount
self.Out = [None] * self.layerCount
self.Err = [None] * self.layerCount
self.Drv = [None] * self.layerCount
self.Inputs = [None] * self.layerCount
self.Weigthts = [None] * self.layerCount
for l in range(self.layerCount):
nLen = structure[l + 1]
wLen = structure[l] + 1
self.weightCount[l] = wLen
self.neuronsCount[l] = nLen
self.Out[l] = [0.0] * nLen
self.Err[l] = [0.0] * nLen
self.Drv[l] = [0.0] * nLen
self.Weigthts[l] = [None] * nLen
for n in range(nLen):
self.Weigthts[l][n] = [None] * wLen
for w in range(wLen):
self.Weigthts[l][n][w] = (random.random() * 2 - 1) / wLen
def forward(self, input):
for l in range(self.layerCount):
self.Inputs[l] = input
for n in range(self.neuronsCount[l]):
wcount = self.weightCount[l] - 1
out = 0.0
for w in range(wcount):
out += self.Weigthts[l][n][w] * input[w]
out += self.Weigthts[l][n][wcount]
out = self.af.func(out)
self.Out[l][n] = out
self.Drv[l][n] = self.af.derive(out)
input = self.Out[l];
def backward(self, output):
last = self.layerCount - 1
for n in range( self.neuronsCount[last]):
self.Err[last][n] *= self.moment
self.Err[last][n] += (output[n] - self.Out[last][n])*self.Drv[last][n] * (1.0 - self.moment)
for l in range(last - 1, -1,-1):
for n in range( self.neuronsCount[l]):
backProp = 0
for w in range(self.neuronsCount[l + 1]):
backProp += self.Weigthts[l + 1][w][n] * self.Err[l + 1][w]
self.Err[l][n] = backProp * self.Drv[l][n]
def update(self):
for l in range(self.layerCount):
for n in range(self.neuronsCount[l]):
G = self.Err[l][n] * self.leanRate
for w in range(self.weightCount[l] - 1):
self.Weigthts[l][n][w] += self.Inputs[l][w] * G
self.Weigthts[l][n][self.weightCount[l] - 1] += G
def learn(self, inputs, outputs):
for e in range(self.epohs):
for i in range(len(inputs)):
index = random.randint(0, len(inputs) - 1)
self.forward(inputs[index])
self.backward(outputs[index])
self.update()
def compute(self, vector):
self.forward(vector)
return self.Out[self.layerCount - 1]
def test_mlp():
inputs = [[1.0,1.0],[-1.0,-1.0],[1.0,-1.0],[-1.0,1.0]]
outputs = [[1.0],[1.0],[-1.0],[-1.0]]
af = mlp.activefunc(math.tanh, lambda y: 1.0 - y ** 2)
ml = mlp([2,2,1],af,0.01,0.1,10000)
ml.learn(inputs,outputs)
for i in inputs:
print(str(i) + " = " + str(ml.compute(i)))
Es cinco veces más pequeño, garantiza hacer lo que necesitas, y está en Python, que es mucho más fácil de entender.
Pero el autor del artículo es bueno, por supuesto, mola escribir MLP uno mismo :)