• Lunes 29 de Abril de 2024, 05:16

Autor Tema:  Funcionamiento De Una Neurona. Rna  (Leído 7505 veces)

Hadess_inf

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Funcionamiento De Una Neurona. Rna
« en: Lunes 2 de Junio de 2008, 19:39 »
0
Hola de nuevo. Gracias Nebire por contestar mi post anterior, no quise seguirlo porque no sabia como cambiar el titulo, pero en fin, gracias por tu respuesta y esperare por el ejemplo que te encuentras elaborando; mientras tanto despues de tanto leer y buscar en google, por fin e logrado comprender el funcionamiento de una Neurona. Aqui dejo el ejemplo para que todos vean como lo he conseguido y de paso me digan si es correcto:

Redes neuronales artificiales: Aprendizaje Supervisado
Ejemplo de entrenamiento:

Aprender las entradas:   

Entrada = {1,1} deberá producir la salida = {1}
Entrada = {0,0} deberá producir la salida = {0}
Pesos iniciales: {-1,-1}
Constante de aprendizaje: {1}

Función de transferencia:    rampa   
   
Si el resultado de la suma < 0, entonces la salida = 0
Si el resultado de la suma >= 0 y <= 1,  entonces la salida = entrada
Si el resultado > 1, entonces la salida  = 1

Presentamos el primer objeto:

     -1
1=====|...............|...............|
             |...............|...............|
     -1     |Sumatoria|activacion | ============>
1=====|...............|...............|

Usando la función suma tenemos: 1*-1 + 1*-1 = -2
Aplicando este resultado, la función T:   0

Recordemos que:Entrada = {1,1} debería producir la salida = {1}
De momento, la salida obtenida fue = {0}
Por tanto, hace falta… un ajuste sináptico

Constante = 1
Error = salida esperada - salida obtenida
Peso nuevo = Peso antiguo + ( Error  *  Entrada *  Constante)


Se aplica la regla Delta:
Ajuste para el peso 1
Error = 1- 0 = 1
Peso nuevo =  -1 + (1 * 1 * 1) = 0

Ajuste para el peso 2
Error = 1 - 0 = 1
Peso nuevo = -1 + (1 * 1 * 1) = 0

El primer objeto se presenta nuevamente:

     0
1=====|...............|...............|
             |...............|...............|
     0     |Sumatoria|activacion | ============>
1=====|...............|...............|

Usando la función suma tenemos: 1*0 + 1*0 = 0
Aplicando este resultado, la función T:1

1. Si presentamos nuevamente el segundo objeto, verificaremos que el resultado calculado es el esperado.
2. Se considera, entonces, que la red ha aprendido


Bueno pues con ese ejemplo e logrado enteder el funcionamiento aunque aun me pregunto lo siguiente:

En ese ejemplo solo hay 2 entradas, segun la formula dice que si las dos entradas  tienen un valor 1 generan un valor de salida 1, la pregunta es la siguiente: Que pasaria si son 5 o mas entradas como sabria yo, cuantas deberian ser 1 para que mi salida sea 1. Espero me entiendan.

Gracias.


PD: DIsculparan la representacion de la neurona pero no me dejo poner este post con links,. no se porque. Saludos.

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Funcionamiento De Una Neurona. Rna
« Respuesta #1 en: Miércoles 4 de Junio de 2008, 01:14 »
0
Citar
por fin e logrado comprender el funcionamiento de una Neurona
Pués me alegro por ti...

Citar
Que pasaria si son 5 o mas entradas como sabria yo, cuantas deberian ser 1 para que mi salida sea 1
No estoy seguro de que si lo que dices es lo que me parece entender que preguntas, pero ya me dirás...

Si hay 'n' entradas y hay 'x' valores a 1, la salida será 1, si 'x' es impar (función XOR), por tanto basta contar los '1' y ver si es impar o par para dar 1 ó 0.
Salida= (x mod 2)

Si no he interpretado bien tu pregunta intenta formularla de otro modo.

p. d.: A los nuevos se les limita el uso de links para evitar las malaintencines de los 'trolls'.
«Ma non troppo»
----> ModoVacaciones = False<----

Hadess_inf

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Funcionamiento De Una Neurona. Rna
« Respuesta #2 en: Miércoles 4 de Junio de 2008, 13:11 »
0
Hola nuevamente, y si has interpretado bien mi pregunta, me referia a eso. Si he entendido bien tu respuesta si tengo una neurona que recibira 9 entradas:

Neurona recibe 9 entradas = {1,0,0,1,1,0,0,1,1}
Si e entendido bien, la salida sera 1 porque la cantidad de entradas con el valor de 1 es impar (corrigeme si me equivoco).

Pero entonces porque en el mi post anterior (hago referencia al post inicial) se tenian solo dos entradas y ambas tenian el valor de "1", sin ser impar el numero de "1" esta daba como resultado la salida "1", acaso sera que en ese caso se usaba la funcion AND ¿?, y si ese fuera el caso ayudenme a sacar esta duda:

-La funcion AND solo se usa o aplica cuando hay 2 entradas?
-La funcion XOR solo se usa o aplica cuando hay mas de 2 entradas?
-Cuando se usa la funcion OR ?

Gracias por su tiempo.
Saludos.

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Funcionamiento De Una Neurona. Rna
« Respuesta #3 en: Miércoles 4 de Junio de 2008, 15:46 »
0
Citar
si tengo una neurona que recibira 9 entradas:

Neurona recibe 9 entradas = {1,0,0,1,1,0,0,1,1}
Si e entendido bien, la salida sera 1 porque la cantidad de entradas con el valor de 1 es impar
Efectivamente.

Citar
Pero entonces porque en el mi post anterior (hago referencia al post inicial) se tenian solo dos entradas y ambas tenian el valor de "1", sin ser impar el numero de "1" esta daba como resultado la salida "1"
Veamos, que se haga un 'or' o que se haga un 'and' depende de como se diseñe la neurona, depende de como se quiera hacer. Debes tener en mente que no existe una única neurona, sino tantos modelos como se quiera hacer, el modelo que se te haya presentado con toda seguridad habrá sido un modelo para empezar a entender el funcionamiento interno de una neurona, lo cual no implica que deba ser así exactamente.

Citar
La funcion AND solo se usa o aplica cuando hay 2 entradas?
-La funcion XOR solo se usa o aplica cuando hay mas de 2 entradas?
-Cuando se usa la funcion OR ?

No.
La función 'and' como su traducción indica se usa cuando se requiere que todas estén a 1 independientemente de las entradas a usar, así en tu ejemplo de 9 entradas si se usa un 'and' sólo dará '1' cuando se dé este caso: '111.111.111' (los puntos son sólo para la comodidad de leer o contar)

La función 'or' es menos 'exigente' dará '1' siempre que al menos uno de ellos sea '1'. es decir dará 1 en todos los casos, excepto ('000.000.000') que todos sean 0.

Creo que no has acabado de comprender el funcionamiento de las neuronas, sino sólo de la neurona que te han presentado, debes intentar hacerlo universal no quedarte sólo en como lo hace una neurona. Piensa que hay diferentes tipos de neuronas, por ejemplo gaussinanas, sigmoidales, de 'función escalón'...  pero una vez más no debes quedarte ahí son 'modelos' de categorizar ni definitivas ni completas. Guste o no sigue siendo un campo a explorar.

Personalmente yo era muy crítico en lo que algunos llamaban red neuronal 'artificial'  por tal y como yo lo entiendo sin embargo a día de hoy esto está resuelto en una subclasificación: 'aprendizaje supervisado' y 'aprendizaje no supervisado'. Cuando el aprendizaje es superviado el motor de inferencia es construído pensando específicamente en el objetivo que se prentende conseguir, entonces el diseño para aplicar un 'or', 'and' etc... depende de esto, no es que se aplique universalmente un 'or' o un 'and'.  (p.d.: bueno se usa universalmente pero para obtener metas fijas dadas unas condicones del mismo modo que se usa universalmente una multiplicación para hallar loe elementos dada una tabla de 'x' columnas por 'y' filas. Evidentemente la suma y la multiplicación se usan universalmente pero para sus objetivos específicos).  Más abajo se explica cuando y cómo se usa realmente a modo 'grosso' un 'or' un 'and' y un 'xor' de modo general... sigue leyendo aunque me ha salido un tocho de mensaje, pero con 4 palabras quizás te siguieran quedando 20 preguntas.

De hecho no todas las entradas se valoran igual, generalmente se ofrece una ponderación por peso  (confiar más en.. en el ejemplo ya lo hemos hecho de entrada que no es el caso típico salvo especialización),  en lo que se entiende como una 'lógica borrosa'.  

Esto es fácil de entender con un ejemplo, que se aprovecha para explicar la mitad eel funcionamiento de una neurona:

Supongamos que tenemos 9 amigos, cada uno de ellos debe responder a una pregunta que yo les he formulado , pactemos de entrada que la pregunta para todos ellos es la misma: " Existe la murrala de China ?". Independientemente de la veracidad de la respuesta, (lo importante aquí ahora es entender el mecanismo de como yo valoro las respuestas) yo no daré el mismo crédito a cada uno de mis amigos. Es lógico conocer que uno suele ser un ttotal fracaso en conocimientos, entonces a ese por ejemplo puntuaré su repuesta de este modo (lo que dé (si o no) por 1, es decir no me fío nada de su respuesta porque no me fío de sus conocimiento, ahora valoro a otros 4 amigos en la forma 2 por el valor que cada uno de ello me dé, digamos que confío en ellos pero no puedo predecir si realmente dominan el tema geográfico, luego a otros 3 amigos los valor así 3 por el valor que me den y al último que me fío mucho de él le doy 5 puntos por su respuesta, es decir si me dice si será 5*1=5 si me dice no será: 5 * 0=0, luego sumo todos los pesos... y establezco una 'frontera' para evaluar como 1 ó 0 el resultado.

La ' función de activación'  no tiene porqué ser discreta, puede ser mostrada en valores contínuos así en el caso anterior el rango podría ir desde todos no: =0 hasta todos sí= 1º (1*1) +  2º(2*1) +  3º(2*1) +  4º(2*1) +  5º(2*1) +  6º(3*1) +  7º(3*1) +  8º(3*1) +  9º(5*1)= 23 indicando así que la neurona puede estar más o menos activada.

En el caso he aplicado un 'or' porque voy 'sumando'  es decir 2d (01 en binario) 'or' 5d (1001 5 en binario) = 6d (1011 6 en binario). ahora te pongo otro ejemplo:

Imagina el mismo ejemplo, anterior muy similar excepto en la apreciación del último, ahora el último su creídito no vale '5' sino la mitad de todos los anteriores es decir el 50% entonces lo expresaría así (posicion(valor)) modo de operar
resultando: sí= 1º (*1) +  2º(*2) +  3º(*2) +  4º(*2) +  5º(*2) +  6º(*3) +  7º(*3) +  8º(*3*1) *  9º(*1) p.d: nota que éste último está multiplicando ('and') por la suma total de los anteriores..

ahora si lo examinas estoy haciendo un 'or' entre los 8 primeros y el resultado de esto lo pondero con el 9º es decir hago un 'and' por tanto si el último es 0, todo el resultado será 0 porque el 'and' exige que ambos términos sean '1' (el primer término  son la suma de los 8 primeros) en cambio si el 9º es '1' el valor de salida es la suma que arrojó los 8 primeros, que nuevamente será 0 si toda su suma es '0' .
Entonces  se podría decir para explicarlo más fácilmente ´con la pregunta reformulada así: a los 8 primeros "¿ Existe la murralla de china?" y al 9º le pregunto: "¿Es cierto lo que dicen los 8 primeros?".

Entonces como puedes ver no es que use un 'or' ni un 'and' sino que en función de lo que se quiera se programa (formula) como ves incluso uniendo operadores y como ves no necesariamente con valores discretos. Pero claro para empezar a entender una neurona lo más lógico es empezar por la neurona más simple, lo que se suele explicar con una de 2 entradas, posiblemente elló induzca a un 'vicio' a causa de las 2 entradas, lo único que suele ser fijo es que devuelve una única salida, es por eso que se concibió una etapa 'oculta' cuando las entradas comunican los valores a un sinfín de 'intermedios', por ello se englobó todo el conjunto como neurona obviando esa parte interna, pués finalmente toda esa parte debe devolver una única salida.

Dicho esto debes entender que es lógico que haya neuronas especializadas. Fíjate que hemos descrito el proceso de salida de una neurona (aunque sin aprendizaje) en el ejemplo de la pregunta (he presentado luego el ejemplo de la 9º  de otro modo porque al final volvemos a ello y espero que se entienda como opera). Entonces para comprender como funciona una neurona (partiendo de loqeu ya he explicado) todo lo que se requiere es utilizar 'memoria' es decir retroalimentar. Eso es lo que voy a explicar ahora... y es donde ese 9º se utilizaría...

Supón que basándonoes en el ejemplo primero nos diron una respuesta de 11 y que consideramos falsa '0' entonces retroalimentamos hacia atrás la respuesta eso nos permitirá poco a poco reconocer los mentirosos, los que no tienen ni idea de China  y por tanto se iría filtrando la veracidad, es aquí donde entra a formar parte la función XOR.... espero que lo entiendas...

Si ya hemos hecho 10 preguntas y se nos ha dado 4 ciertas (valores >=13 sobre el total de23 que fijamos como máximo) y 6 malas, nuestra retroalimentación consistirá en basarlo con aprendizaje supervisado, es decir la muralla de china existe por tanto introducimos una entrada oculta desde la salida si a la pregunta de la muralla nos dieron 0 cuando debió ser 1 devuelvo un 1 a las entradas ahora esa entrada se une a cada entrada de los amigos, vuelvo a formular la misma pregunta: puesto que obtuvimos un 11 debemos afirmar que algunos respondieron bien entonces nuestra 1 retroalimentando deberá desactivar la salida de los amigos que dieron 0 a una respuesta que sabíamos que era 1, al desactivar a esos amigos significa que su respuesta se contará, entonces para saber que amuigos respondieron valor distinto de '1' (recuerda que les dimos valores contínuos) utilizamos 'XOR' pongamos el caso destripado: 101.000.101
esto es el primero cuyo valor era 1 nos da 1, el 2º nos da 0 el 31 nos da 1 el 4º,5º y 6º nos dan 0 el 7º nos da 1 el 8º nos da 0 y el 9º nos da 1 que sumado todos sus valores nos daba 11.

Por lo tanto sólo consideramos las respuéstas de 1,3,7 y9  el xor nos ha permitido filtrar de quien valoramos entonces ahora el rango máximo y mínimo de valores será: de 0 a 1ª(1*1) + 3º(2*1) + 7º(3*1) + 5º(5*1)=11, naturalmente en la siguiente respuesta por tanto nos da un si rotundo, pero eso no significa un éxito total, ya que sólo hemos formulado una pregunta y después de todo nuestro amigos son más inteligentes que nuestro 'diseño',  de hecho le dimos de entrada un valor ponderado a nuestros amigos, por eso obtuvimos ya así de rápido un resultado pleno, esto en la práctica puede ser así o no, sin embargo en sucesivas iteraciones el resultado se irá filtrando más exhaustivamente.

El ejemplo no lo debes tomar al pie de la letra, ya que lo que pretende es ayudar a entender las fases del mecanismo de las neuronas: como las entradas se pueden disponer para ser valoradas, como se prepara una respuesta, como se retroalimenta con 'aprendizaje supervisado', como se activan y desactivan internamente para generar una salida. De hecho para que nuestro aprendizaje sea eficaz y el ejemplo fuera totalmente válido, el ponderamiento que nosotros hemos fijado desde el principio (valor 1 al primer, 2 a los 4 siguientes.... 5 al último) es el auténtico objetivo que tiene encomendado la retroalimentación, es decir es la retroalimentación quien debiera fijar esos valores valorar más al más 'creíble' y eficaz y menos a los demás...

De entrada sino hay razones para confiar más en uno que en otro (caso de la programación) de entrada todos valdrían 1 (salvo que tengamos información específica de un diseño al que se orienta y que podamos aprovechar), nuestro modo de cuantificar  será con 'or'. Con 'xor' para valorar y con 'and' en la retroalimentación para 'activar/desactivar' . Esto luego en la práctica puede complicarse todo lo que se quiera....

Sucede que como somos inteligentes ya de entrada conocemos como son nuestros amigos, desde la primera pregunta ya hemos valorado y ponderado a cada uno y por eso ya tenemos un cierto 'juicio' interpretativo inicial que hace que nuestro ejemplo pudiera malinfluenciar si no se entiende su objetivo.

En fin espero haberme expresado con la claridad suficiente para que se entienda.
En otro momento si quieres comentamos las células de memoria para entender eso de la 'retroalimentación' .

p.d. final:  el segundo ejemplo en el que el 9º amigo se valoraba con el mismo valor que a los 8 restantes, sería forma de de generar la retroalimentación para el aprendizaje supervisado, es decir este noveno podría haber sido un 10º oculto al que se le suministra la respuesta real para retroalimentar el aprendizaje...   Supongo que algún detalle más se me quedará en el aire...

este párrafo tiene condensado el mecanismo de la neurona, quizás haga algún dibujo que ayude a entenderlo bien:

De entrada sino hay razones para confiar más en uno que en otro (caso de la programación) de entrada todos valdrían 1 (salvo que tengamos información específica de un diseño al que se orienta y que podamos aprovechar), nuestro modo de cuantificar  será con 'or'. Con 'xor' para valorar y con 'and' en la retroalimentación para 'activar/desactivar' . Esto luego en la práctica puede complicarse todo lo que se quiera....
«Ma non troppo»
----> ModoVacaciones = False<----

Hadess_inf

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Funcionamiento De Una Neurona. Rna
« Respuesta #4 en: Miércoles 4 de Junio de 2008, 17:40 »
0
Hola de nuevo, pues gracias nuevamente y haber si me confirmas lo que acabo de aprender:

Sobre funciones AND, OR, XOR
AND(*): Devolvera "1" solo si todas las entradas son igual a 1, para todos los demas caso retornara "0".
OR(+): Devolvera "1" siempre y cuando haiga un "1" en algunas de las entradas, solo si todas las entradas son "0" devolvera "0".
XOR: Devolvera "1" siempre y cuango ambas entradas sean diferentes. Aqui tengo otra duda, ¿el XOR solo sirve para comparar 2 valores o entradas?
Citar
Ejemplo de los 9 amigos:
Entradas en orden = {1,1,1,1,1,1,1,1,1}
Pesos en orden={1,2,2,2,2,3,3,3,5}
Sumatoria de X*Y =23
indicando así que la neurona puede estar más o menos activada. A que te refieres con esto?

No entiendo esto por favor te agradeceria si me lo explicas nuevamente. PD: Se que 2 en decimal es "0010" en binario y que "5" en decimal es 0101 en binario y que "6" en decimal es "0110" en binario. ¿Quizas no te refieres a eso?
Citar
En el caso he aplicado un 'or' porque voy 'sumando' es decir 2d (01 en binario) 'or' 5d (1001 5 en binario) = 6d (1011 6 en binario).

Citar
a)1º (1*1) + 2º(2*1) + 3º(2*1) + 4º(2*1) + 5º(2*1) + 6º(3*1) + 7º(3*1) + 8º(3*1) + 9º(5*1)
B)1º (*1) + 2º(*2) + 3º(*2) + 4º(*2) + 5º(*2) + 6º(*3) + 7º(*3) + 8º(*3*1) * 9º(*1)
Se uso OR y el operador +
Se uso AND y el operador *
En conclucion para AND se usa el operador "+" y para OR se usa el operador "*". Es correcto ¿?

Bien bien, resulta que todo esto ya lo tengo entendido aunque como es natural aun sigo con algunas dudas, con lo que respecta a la funcion umbral o valor umbral, tengo entendido que para que una neurona se active el valor de la suma de las entradas por los pesos debe ser lo mas proximo a ese valor umbral, que de cierto tiene esto¿?. Si la suma es mayor a ese umbral la neurona generara una salida de "0" y si la suma es igual o menor al umbral generara una salida de "1" (claro esta que aun no estoy considerando el aprendizaje).

Nuevamente muchas gracias por tomarte el tiempo para responderme, ya que me interesa mucho el tema y se que responder a este tipo de post toma tiempo, Muchas gracias nuevamente y saludos.

 :)  :)  :)  :)

Hadess_inf

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Funcionamiento De Una Neurona. Rna
« Respuesta #5 en: Viernes 6 de Junio de 2008, 04:00 »
0
Hola de nuevo, e seguido con mi lectura en las infinitas paginas del inter y ya consegui otro avanze, haber si me confirman lo que expondre:

1)En una Neurona tanto los pesos como el BIAS se inicializar aleatoriamente.
2)Es el proceso de ajuste del BIAS y PESOS el cual permite aprender a la Neurona.
3)Cuando se ajusta un peso, se trata de llevar el valor del mismo al valor del BIAS.
4)Para que la neurona se excite se evalua la salida utilizando una funcion(hardlims,Hardlim,purelin,logsig).

Variables:

BIAS
-Valor que se genera aleatoriamente.
-Valor que se suma a neta.

NETA
-Suma de los Pesos(W) por las entradas (X)

E
-Error

S
-Salida

Se tiene la siguiente neurona.
Entradas X=(2,6)
Pesos W=(0.5,-0.7)
BIAS B=0.5

S = NETA + BIAS
S = (X1*W1+X2*W2) + 0.5
S = (2*0.5 + 6*-0.7) + 0.5
S = (1 - 4.2) + 0.5
S = -3.2 + 0.5
S = -2.7
Entonces .:. hardlims(S) = -1
Por lo tanto hay error.

E = SalidaEsperada - SalidaOptenida
E = 1 - (-1)
E = 2

Nuevo valor de W1
NW1 = W1 + E*X1
NW1 = 0.5 + 2*2
NW1 = 0.5 + 4
NW1 = 4.5

Nuevo valor de W2
NW2 = W2 + E*X2
NW2 = -0.7 + 6*2
NW2 = -0.7 + 12
NW2 = 11.3

Nuevo Valor de BIAS
BIAS = BIAS + ERROR
BIAS = 0.5 + 2
BIAS = 2.5

La neurona quedo con los siguientes datos
X = (2,6)
W = (4.5,11.3)
BIAS  = 2.5

Red Aprendio.

Bueno una de las grandes dudas que tenia era como calcular el bias inicial en una neurona, ahora entiendo que tanto al bias como los pesos se le indican pesos aleatorios. En este ejemplo ya no hay una COnstante de aprendizaje, aun no entiendo porque. Ahora tratare de crear un ejercicio y luego lo posteo, Saludos.

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Funcionamiento De Una Neurona. Rna
« Respuesta #6 en: Sábado 7 de Junio de 2008, 16:41 »
0
Citar
Sobre funciones AND, OR, XOR
AND(*): Devolvera "1" solo si todas las entradas son igual a 1, para todos los demas caso retornara "0".
OR(+): Devolvera "1" siempre y cuando haiga un "1" en algunas de las entradas, solo si todas las entradas son "0" devolvera "0".
Si.
Citar
XOR: Devolvera "1" siempre y cuango ambas entradas sean diferentes. Aqui tengo otra duda, ¿el XOR solo sirve para comparar 2 valores o entradas?
La primera parte si, la 2ª no. Ya te expliqué que cuando hay más de 2 valores, el resultado se puede totalizar fácilmente sumando los '1' y si es impar da '1' si es par da '0'. Esto no es así porque sí, sino que es la consecuencia directa. Te lo reexplico otra vez con una perspectiva distinta.
Imagina una fila de lo que sea... unos son negros y otros blancos ('1' y '0') y sea la fila: '110.100.101' :
 tomo los 2 primeros y hago un xor con ellos: 1 xor 1=0
ahora tomo el resultado anterior y hago un xor con el siguiente, el 3º: 0 xor 0=0
repito el paso anterior hasta terminar:
nº de dígito | resultado anterior | XOR | valor del dígito nº | = | resultado
____________________________________________________________
4º: 0 xor 1=1     '110.100.101'
5º 1 xor 0=1     '110.100.101'
6º 1 xor 0=1     '110.100.101'
7º 1 xor 1=0     '110.100.101'
8º 0 xor 0=0     '110.100.101'
9º 0 xor 1=1    '110.100.101'
Esto mismo puede hacerse con 'and' y 'or', pero la experiencia nos enseña (y las matemáticas lo confirman) que no es necesario evaluar 2 a 2 hasta evaluar el total, sino que cuando hay muchas entradas podremos conocer el resultado de forma abreviada (igual que cuando tenemos 5 filas y 5 columnas no contamos una a una sino que aplicamos una multiplicación para simplificar la operación, porque es equivalente) si todos son 1 y la operación es and el resultado es 1, si la operación es or y al menos uno es '1' el resultado es 1, y si la operación es xor el resultado será 1 siempre que la suma de 1 sea impares.

Citar
Citar
[color] indicando así que la neurona puede estar más o menos activada.[/color]
A que te refieres con esto

Que una neurona no sólo actua de forma 'si' ó 'no' también puede actuar por grados. El caso más claro para entenderlo: imagina un banco que está evaluando si conceder o no un crédito a una persona, resumir en 'si' o en 'no' es muy arriesgado, entonces a los programas (típicamente una red neuronal en su interior) lo que hace es devolver un valor entre 0 y 100 para dejar que sea el director del banco quien decida en última instancia. Si el valor devuelto es 92% seguramente el director dirá sí, pero qué pasa cuando los valores devueltos son tal como 50% ???. Lo puedes entender. Pero dicho de otro modo, puede todo ser reducido a si o no ?, por supuesto que si, pero ello deja fuera otras evaluaciones, si se ofrece un resultado. La experiencia (por ejemplo de lso banqueros) demostraron que un si o un no rotundo no era eficaz en muchos casos, al preguntar a los programadores sobre el porqué la respuesta es clara,  no es una ciencia exacta, no todo es blanco o negro, un hombre millonario que se supone pagar sus créditos puede arruinarse de la noche a la mañana y un pobre también de la noche a la mañana puede 'ganar' una lotería. Por tanto hay problemas cuando se maneja un problema complejo si se trata de reducirlo a si o no, para limitar en lo posible ese problema se establecen escalas, típicamente del 0 al 100 pero igualmente válido del 0 al 5 o del 3 al 7.... cuando se ofrece una salida de este tipo, se entiende que luego existirán etapas posteriores que serán usadas para evaluar ese dato en conjunto con otros posiblemente de otra índole entre las que no se descarta e incluso suele ser el consumidor habitual un ser humano.

Un caso más práctico: imagina un red neuronal para reconocer caracteres escritos, éstos a diferencia de los impresos puede ser distintos incluso siendo el mismo carácter cada vez que se escriba, es común que haya caracteres muy parecidos si enseñamos a la neurona que que 1 es 1 puede tener problemas cuando se encuentre i y l incluso con j por tanto ya no puede cir si es 'sí' ó si es 'no'. si el signo puede ser confuindido con 4 lo lógico es que pueda dar valores de 0,1,2,3,4 que se corresponderían con 0%, 25% 50%, 75% y 100%, cuando de valores de 0% y 100% no es problema (lo que no quiere decir que sea correcto), pero que pasa cuando dé 25%, 75% y sobretodo cuando de 50%... en dichos casos probeblemente solicitará la ayuda de 'otro' experto que dirima las dudas. Sucede igual con el '0' y la 'o' mayúscula '0O', más cuando es manuscrita, e incluso entre el '6' y la  'ó' y así con varias más...

Por eso aparte de que una neurona haya sido previamente 'instruída' para reconocer caracteres, dado que cada tipo manuscritodifeire mucho entre sí, debe seguir 'aprendiendo' después de su 'escuela' y así cuando no arroje valores discretos puede solicitarse al usuario que le asigne el carácter correcto con lo que ahora se alimenta con un nuevo aprendizaje para, por ejemplo tu tipografía manuscrita.

Citar
No entiendo esto por favor te agradeceria si me lo explicas nuevamente. PD: Se que 2 en decimal es "0010" en binario y que "5" en decimal es 0101 en binario y que "6" en decimal es "0110" en binario. ¿Quizas no te refieres a eso?
Citar
En el caso he aplicado un 'or' porque voy 'sumando' es decir 2d (01 en binario) 'or' 5d (1001 5 en binario) = 6d (1011 6 en binario).
Si, es correcta tu interpretación.
Citar
Citar
a)1º (1*1) + 2º(2*1) + 3º(2*1) + 4º(2*1) + 5º(2*1) + 6º(3*1) + 7º(3*1) + 8º(3*1) + 9º(5*1)
B)1º (*1) + 2º(*2) + 3º(*2) + 4º(*2) + 5º(*2) + 6º(*3) + 7º(*3) + 8º(*3*1) * 9º(*1)

Se uso OR y el operador +
Se uso AND y el operador *
En conclucion para AND se usa el operador "+" y para OR se usa el operador "*". Es correcto ¿?
Hay operaciones lógicas y operaciones aritméticas, las operaciones aritméticas son suma y multiplicación hazlo con 1 y 0  en base decimal, el resultado es el mismo en binario. La suma y productos lógicos equivale a la suma y productos matemáticos de signos donde el '+' sería el 1 y el '-' el '0'.  Esto es pura lógica matemática.

Tener conicmientos de lógica matemática o de electrónica digital ayuda mucho a entender una red neuronal. Una red neuronal es a fin de cuentas un circuito digital basado en  biestables (célula la memoria). Los circuitos digitales se basan íntegramente en lógica matemática (al caso la binaria).

Citar
aun sigo con algunas dudas, con lo que respecta a la funcion umbral o valor umbral, tengo entendido que para que una neurona se active el valor de la suma de las entradas por los pesos debe ser lo mas proximo a ese valor umbral, que de cierto tiene esto¿?.
Esto es cierto pero puede ser malinterpretado. No debe confundirse más próximo al umbral con el valor más alto, se comenta esto a continuación: Es decir para explicar y entender la teoría es válido para la práctica no es necesario... un ejemplo: supongamos que obtengo un valor de 12, en teoría sería prácticamente no activada '0', pero que pasa si ahora yo hago una negación, es decir que ese resultado deba pasar por un filtro posterior que niega el resultado, el resultado sería que el valor arrojado debe ser restado del rango máximo, por tanto sería 100-12=88, sin embargo si hemos de negar todas las salidas, entonces es mejor operar con 'lógica inversa' en las salidas, es decir el valor umbral será el mínimo. Esto contradice de entrada la afirmación de valor máximo, sin embargo es acorde con la consecuencia resultante. Entonces sólo interpretando correctamente el significado de 'umbral' como el más próximo y no como el valor más alto, es cuando se interpreta correctamente. Así diremos que si para cierta activación el umbral máximo es valor 0, expresa que el valor más próximo es el idóneo para activarse e inversamente con el caso opuesto. Y saliendo de la lógica discreta, si decimos que el umbral sería 50 (sobre un rango de 0-99), puede chocar de entrada si pensamos en el valor, así 40 está tan distante como 60, para representarlo en un rango de 'menos' a 'más' lo único que hay que hacer es digujar una gráfica por ejemplo traza una gráfica con forma de '^' el ´vertice es 50, el inicio es 0 el final es 99, ahora puedes recalibrar estos valores en base a su altura, y entonces se entiende el valor más próximo al 'umbral' es el valor más alto.

Recalo en esto porque es frecuente que aunque dices correctamente 'el valor más próximo activa al umbral' con el tiempo tiende a olvidarse el detalle y se queda uno con una idea equivocada de que 'el valor más alto activa el umbral'.


Citar
1)En una Neurona tanto los pesos como el BIAS se inicializar aleatoriamente.
Es frecuente pero no es indipensable, por lo general es así de entrada. Pero puede de entrada contener cierto valor si se sabe cuales han de ser estos. Por ejemplo una neurona que ya ha aprendido a reconocer caracteres ópticos de imprenta, puede ser activada con esos valores para pasar ahora a reconocer mi grafía, es mejor que nada, que empezar de cero.
Pero para un caso estricto de inicio y sobretodo cuando no se sabe o conoce bien es aceptable inicializar con valores fijos o aleatorios.

Citar
2)Es el proceso de ajuste del BIAS y PESOS el cual permite aprender a la Neurona.
 Exactamente. Lo cual se hace comparando la salida con el valor correcto. Es como el proceso de estudio de un escolar: le hacemos una pregunta, el da una respuesta, luego el profesos revisa la respuesta, lo que significa que lee la respuesta del niño y la compara con la respuesta correcta, si está mál indica porqué está mal, lo que equivale a 'esperar' que el niño tome esos datos para retroalimentar su conocimiento y poderlo usar para futuras cuestiones.

Citar
3)Cuando se ajusta un peso, se trata de llevar el valor del mismo al valor del BIAS.
Esto es un ajuste fino, si resultara  ala primera nuestras neuronas aprenderían muy rápido, pero el diseño de las mismas es muy elemental, pero sí, asi es.

Citar
4)Para que la neurona se excite se evalua la salida utilizando una funcion
Basicamente es así. Que función se aplique siempre dependeráde ciertos factores... estoy aprendiendo o 'trabajando'  y sobretodo el enfoque y dedicación, si una neurona se especializa en una cuestión determinada su función será posibllemente más específica.

Citar
En este ejemplo ya no hay una COnstante de aprendizaje
Para un caso generico no puede proveerse cualquier cosa, si al niño se le pregunta '¿ Es la Luna más grande que la Tierra?', la idoneidad de su respuesta debe valorarse con la respuesta de esa pregunta, no con una respuesta cualquiera de otra pregunta, por ejemplo de '¿3 más 6 son 10?' aunque en el caso casulamente den el mismo valor se hace un aprendizaje 'sucio'.  Se acepta el hecho de que si se introduce 'basura' a la neurona sale 'basura' de la neurona.  No entiendo exactamente que quieres decir con constante de aprendizaje... creo suponer que quieres 'dar  nota final' al niño... esto sólo tiene sentido a efectos estadísticos, del mismo modo que al niño el valor de una nota no le reporta conocimiento sino que solo le califica como más o menos apto, tu puedes mientras compruebas la eficiencia de la neurona que diseñes totalizar las preguntas realizadas y las respuestas acertadas, después de 10, después de 100, después de 1000 depueés de 10.000, etc... en función de la complejidad deja de ser 'tonta' a partir de cierto elevado nº de pasos. Compara luego cada 1000 las respuestas afirmativas para ir describiendo una curva de aprendizaje y ver si vas bien o debes hacer 'ajustes manuales' cual mecánico cuando ensambla un conjunto de piezas, que debe apretar cada cosa y calibrarlo bien para que el conjunto opere de la forma más óptima.
«Ma non troppo»
----> ModoVacaciones = False<----

Hadess_inf

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Funcionamiento De Una Neurona. Rna
« Respuesta #7 en: Sábado 7 de Junio de 2008, 19:28 »
0
¿Como se que funcionde transferencia usare para determinada neurona? ¿Cuando usare Harlim, o Hardlims..etc..etc...? y ¿Se pueden usar mas de una funcion para una neurona o solo se puede usar una?

Agradeceria si pusieras un ejemplo completo con una o si es posible para ti con mas neuronas. Asi seria mas sencillo para empezar a plantearme problemas e ir poniendo en practica lo que en estos dias e aprendido, Gracias. Y disculpa si es mucho pedir. Gracias de nuevo.

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Funcionamiento De Una Neurona. Rna
« Respuesta #8 en: Domingo 8 de Junio de 2008, 03:39 »
0
Citar
¿Como se que funcionde transferencia usare para determinada neurona?
La función de transferencia se elige en base a las situaciones que deba resolver.

Citar
¿Se pueden usar mas de una funcion para una neurona o solo se puede usar una?
No existe un límite teórico por el que una salida deba ser realizado de un modo fijo.

Citar
¿Cuando usare Harlim, o Hardlims..etc..etc...?
Por las características de cada uno, tal como se indica en el primer párrafo. Por ejemplo: El limitador fuerte (hardlim) lleva a 2 únicas salidas, '0 ó '1' lo que esto implica es que una neurona con este limitador divide en 2 categorías según las entradas. Por tanto cualquier patrón en el que se desee fijar 2 divisiones es un destino de esta función. En cambio el limitador fuerte simétrico (hardlims) produce resultados con valores entre '1' y '-1' .

Para más detalles el limitador fuerte suele usarse en la red tipo 'perceptrón', el  limitador fuerte simétrico en la red tipo 'adaline' , el sigmoidal logarítmico (logsig) suele emplearse en las redes de múltiples capas.

Aunque no te lo parezca hay bastante información en la red busca cada tipo para ampliar detalles.

Citar
Agradeceria si pusieras un ejemplo completo con una o si es posible para ti con mas neuronas. Asi seria mas sencillo para empezar a plantearme problemas e ir poniendo en practica lo que en estos dias e aprendido, Gracias. Y disculpa si es mucho pedir
Es mucho pedir, pero sólo por mi escaso tiempo libre. Desafortunadamente estoy desplazado y aquí no tengo ni mis apuntes ni mis libros para siquiera hacer una transcripción rápida. Tengo pensado postear un problema completo y explicado detelladamente, pero reconozco que me llevará más tiempo del que quisiera, tengo bastante trabajo y casi la mitad de mi tiempo libre lo dedico a ojear el foro. Si, como creo tienes prisa por 'meterle mano', te recomiendo que hagas búsquedas intensivas en la red que sin duda debe haber decenas de trabajos compartidos y a un nivel asequible para empezar.

p.d.: me extiendo un poco...
Diagmos que el preceptrón lo usaremos cuando tengamos claramente 2 divisiones. El adaline es idéntico al perceptrón excepto que se le retira la función de transferencia para permitir una salida contínua, como los errores entonces pueden ser enormes es donde nace la regla Delta. (valor real - valor logrado)... El adaline va bien para funciones básicas, pero no para funciones complejas . Entonces llega la red multicapa, que reúne a los preceptrones y adaline apoyado por un amplio surtido de funciones de transferencia y es entonces cuando se organiza el flujo en capas, el flujo de entrada, el oculto y el de salida. el oculto se llama así sólo porque visto desde fuera 'no se ve' (por ninguna otra razón). A partir de aquí es todo arbitrario y se decide de forma poco más que empírica.
«Ma non troppo»
----> ModoVacaciones = False<----

Hadess_inf

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Funcionamiento De Una Neurona. Rna
« Respuesta #9 en: Domingo 8 de Junio de 2008, 17:40 »
0
Quisiera poner en practica lo que he aprendido, los ejercicos ayudan bastante a comprender las pequeñas dudas que andan sueltas, quiero empezar con los ejercicios, ir de los mas pequeños a los mas grandes =D .... estas ultimas semanas e buscado y buscado en internet. E encontrado uno que otro ejemplo del perceptron, e de ahi que e entendido unas cosas mas, sin embargo eran ejemplos muy basicos, entiendo que no dispones de tiempo y esperare a que puedas postear el ejercicio que comentas.

¿Me podrias decir algo? . ¿Una neurona siempre se ativa?. Es decir, si tuviera una RNA con 1 capa de entrada (3 neuronas), 1 oculta (2 neuronas) y 1 salida. Para que esa neurona de salida bote un resultado es necesario que todas las anteriores (entrada y salida) hallan botado un resultado de 1, es decir si alguna boto resultado de 0 la salida sera 0¿?. Ademas yo entiendo que siempre la neurona arrojara un valor de 1 (por el aprendizaje que la obliga a eso) es correcto ¿?

Gracias

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Funcionamiento De Una Neurona. Rna
« Respuesta #10 en: Domingo 8 de Junio de 2008, 21:22 »
0
Citar
¿Una neurona siempre se ativa?. Es decir, si tuviera una RNA con 1 capa de entrada (3 neuronas), 1 oculta (2 neuronas) y 1 salida. Para que esa neurona de salida bote un resultado es necesario que todas las anteriores (entrada y salida) hallan botado un resultado de 1, es decir si alguna boto resultado de 0 la salida sera 0
No, no... esto no es así.
La salida final siempre debe dar un valor.
Desde la capa de entrada a la capa oculta se puede acptar o rechazar entradas, pero igualmente deben dar un valor sea 0 , sea 1.
Desde la capa oculta a la salida nuevamente pueden ser aceptadas o rechazadas pero siguen dando un valor.
entonces ¿ qué ? te preguntarás. La cuestión es que se realiza el recuento de valores con el ponderamiento de pesos, si en los valores hay más '0' que '1' implica que en principio habrá menos posibilidades de que se active ya que aunque pondere, si un valor vale 0 * loquesea será 0. Así cada etapa vuelca su resultado en la siguiente etapa. La cuestión estriba en que el estado interno va cambiando no sólo por las entradas sino por la retroalimentación (que contiene información sobre el resultado anterior).

Una sencilla comprobación del resultado podría hacerse asi:
llamemos 'escolar' a la salida de la neurona que está aprendiendo (por referencia al niño que está examinándose en la escuela en su período de aprendizaje).

Explico esto mejor: imagina una escuela pero imagina que el maestro va a evaluar a toda la escuela de una vez, no alumno a alumno, entonces digamos que cada alumno 'crea' su respuesta y para entregarla al profesor acuerdan hallar la media de la respuesta entre todos (si hay 40 alumnos y 30 dicen que es 0 y 10 que es 1 digamos que 'escolar' la salida será 1 que es lo que el maestro va a escrutar). Esta salida por tanto no es la salida final,  esta salida la evaluamos con la salida que llamaremos 'maestro' (en relación a que es el maestro quien evalúa la respuesta del niño después que ese la reporta, sin embargo acordamos que todos los nños cooperan en una única respuesta).

Entonces tenemos dos salidas que serán las entradas de la etapa de decisión de aprendizaje (en este ejemplo, solo se provee la parte que evalúa y la señal de retroalimentación, pero no como actúa la retroalimentación con las entradas originales de 'escolar'es). La salida 1ª es la que respuesta que da 'escolar' y la salida 2ª es la respuesta válida que ofrece el 'maestro'

digamos que la pregunta debiera dar por resultado '1' es decir maestro=1 y que la salida de escolar fuera=0  (es decir los alumnos han provisto que es 0).

Entonces la evaluación de aprendizaje, escrutando el resultado y si no es satisfactorio enviar la señal correspondiente de etroalimentación sería así:
Código: Text
  1.  
  2. 'escrutar si es válido el resultado
  3. resultadoError = escolar xor maestro
  4. si resultadoError= 1 luego
  5.     sumamos 1 fallo
  6.    'fff'  aquí se prepara el valor de maestro para entregarse a los escolares, sería como decirles mirad es aquí donde os equivocasteis
  7. en otro caso
  8.    sumamos 1 acierto
  9.    'ttt' aquí se anula respuesta del maestro , pero sigue existiendo retroalimentación
  10. fin si
  11.  
  12. ' la señal de retroalimentación puede ser doble , es decir contiene 2 informaciones, la primera [B]señala que si hubo error[/B], la respuesta correcta se une individualmente a cada ponderación de la entrada (se entrega a cada escolar) y el escolar debe ser ponderado de acuerdo a su acierto o fallo. Esta respuesta la hemos gestionado y fabricado en los apartados etiquetados como 'fff' y 'ttt', digamos de modo simplificado que fff será la respuesta que sabe* a que escolares debe castigar y cuales premiar,. ttt puede ser idéntico a fff o puede ser distinto (es decir quizás queramos ponderar de una manera cuando el acierto fue bueno y de otra cuando el acierto fue malo o quizás queramos utlizar la misma ponderación sea cual sea el caso, más aún quizás queramos ponderar sólo cuando hubo fallo y dejarlo tal cual cuando hubo acierto (es deicr si fue bien no tocarlo), bien pués la 2ª señal de retroalimentación debe encargarse de esto, de decidir que se entrega. Con esto se obtiene un control mucho mayor pués podemos probar dieferentas ajustes de forma 'externa' sin retocar código. Está 2ª señal está en cualquier caso influenciada por 'resultadoError' recordemos que es la evaluación qie hizo el maestro.
  13.  
  14. Para empezar y por simplicidad no incluyas esta posibilidad, valora por igual cuando hay error y cuando hay acierto, más adelante vuelvo a esto de una forma más ordenada.
  15.  
  16. * no de forma cualitativa sino cuantitativa
  17.  
  18.  
Es decir usamos un xor para identificar si el resultado es bueno o no, porque si la salida de escolar no coincide con la salida de maestro serán los casos 0-1 ó 1-0, como sea que no coincide implica que siempre hay un 1 y como sólo hay un 1 la operación xor arroja un  1, consecuentemente interpretamos como error. Por tanto  'resultadoError'  será 1 siempre que 'escolar' y 'maestro' sean distintos.

sigamos.
Dijimos que 'resultadoError'  no es la salida definitiva, la salida definitiva será opuesta al caso de error es decir si 'escolar'= 'maestro', como esto ya lo hemos comprobado con el xor basta con negarlo
Código: Text
  1.  
  2.     salidaProvisional= not('resultadoError' )  ' usamos salidaP para abreviar
  3.  
  4.  
Esto es una operación NEXOR (not xor), esta operación dice que si escolar=0 y maestro= 0 salidaP=1 , ó si escolar=1 y maestro=1 salidaP=1
Esta salida provisional indica que la salida es aceptable, pero es una salida provisional porque no contiene datos, sólo control, el dato es la salida de 'escolar', por tanto ahora usamos el dato de escolar y la salida verificada, dicho de otro modo esta salida provisional proporcionará la activación final de salida.

Esto último quiere decir que si, la neurona debe dar datos debe hacerse finalmente esto:
Código: Text
  1.  
  2.     salida= salidaP or 'escolar'
  3.  
  4.  
Pero si nuestra neurona no provee un dato sino que es una etapa de capa la salida debe ser su activación o no activación, por tanto aquí el dato se desprecia, y por tanto la salida es en vez de un dato final es una activación, por tanto:
Código: Text
  1.  
  2.    activado= salidaP
  3.  
  4.  

Bien, he explicado como verificar el resultado del dato con un xor y sólo parte de como tomar los datos que se usarán para retroalimentar, también he explicado la salida final sea de dato o de activación, fíjate que este mismo esquema de activación se puede usar para las entradas en la retroalimentación una vez que decidas 2 cosas, cómo (qué método) quieres ponderar las entradas y qué tipo de los que te señalé para ponderar quieres usar (esto último de momento podrías obviarlo y devolver siempre el mismo método de ponderación tras cada respuesta, cuando ya lo tengas `programado y veas que el código funciona (aunque la neurona no parezca responder bien, lo puedes añadir como una optimización).

puedes guiarte (o no) con un esquema similar a este, guiado por fases y pasos:

Fase: 1  ' lo llamarámos diseño físico
1º Representar x entradas. las entradas tienen 2 campos valor y peso. La entrada es un valor externo, el peso se coloca externamente el inicializar, luego se va actualizando internamente, opcionalmente para para el programa salir y en otra coasión no tener que empezar de 0 podrías salvar a disco el estado de los pesos).

2º Decide que función de ponderación vas a usar para unir pesos y valores unificados.

3º Decide el umbral en base al valor y la función final que se espera cumpla la neurona.

4º prueba todos estos pasos para garantizar que no hay errores de código.

Fase 2  ' añadimos evaluación y parte de la retoralimentación, de momento sólo enganchada tal cual sin funcionalidad de retroalimentación
1º La salida del paso 3 de la fase anterior ahora es paso oculto, la salida se evalúa con el maestro. generar si hubo fallo o acierto con xor

2º Generar si la salida final de acuerdo asi es de dato o de activación. Será de activación si esta neurona es la parte oculta de otra mayor.

3º generar retroalimentación usando valor del paso 1 ( de esta fase). lo enganchamos a cada entrada, ahora cada entrada hace un or simple, sólo porque necesitamos que el dato quede enganchado, a medida que vamos completando...

4º prueba todos estos pasos para garantizar que no hay errores de código.

fase 3 ' añadimos funciones completas retroalimentación.
1º En el paso 3º de la fase anterior pusimos las entradas como un or ente el valor de entrada y el resultado de error, esto queda ahora cambiado a una función más compleja, el or se cambia por un xor.

2º  La entrada se une con or a la salida del xor (esto es un dato)

3º  la salida del el xor (después de recoger el dato del paso 2), se niega (esto es una activación)

4º  Ahora la función de ponderación solo se usa con los datos activados

5º prueba todos estos pasos para garantizar que no hay errores de código.
6º alternativamente desengancha la retroalimentación a la entrada y engánchala a los pesos en vez de al valor.

fase 3
1º añade un contador. El contador es una estructura que tiene 2 variables 'pulsos' totales y aciertos o errores, esto se tomaría desde la salida del paso 1º de la fase 2, para crear estadística

2º Esto (la salida final) es un bit de salida (ya habrás decidido si cambiar el tipo de neurona o no) si necesitas más bits de salida crea una matriz, si elegiste un modelo con algunas diferencias quizás debas ignorar ciertos pasos y seguir otras indicaciones.

3º pon a trabajar la neurona y obtén valores, no esperes resultados pronto, posiblemente y en función de la complejidad de lo que hayas hecho podrás obtener resultado a partir de 1000, 10.000 , 100.000 pulsos....

4º recrea las estadísticas para ver si tu neurona o red mejora.

fase optimización 1  ' estas optimizaciones deberían tener un control externo de modo que puedas cambiarlo libremente desde la interfaz de usuario.
1º Es posible que la ponderación la quieras hacer más o menos indirecta, puedes alterar la retroalimentación para que actúe en el peso en vez de en el valor o en ambos con las diferencias oportunas.

2º puedes añadir la señal doble de retoalimentación como te indiqué más arriba, te da más flexibilidad, básicamente lo que hará será discriminar por ejemplo con 4 resultados distintos (2 bits para decidir cual de los 4 se usa) 00= se aplica la misma ponderación tanto si hay fallo como si hay error (como ocurría hasta ahora), 01= se aplica ponderación sólo si hay fallo, no se altera si hay acierto, 10=se aplica ponderación diferente cuando hay fallo que cuando hay acierto, 11=reservado para la siguiente oprimización.

3º prueba todos estos pasos para garantizar que no hay errores de código.
4º pon a trabajar la neurona y obtén valores
5º recrea las estadísticas para ver si tu neurona o red mejora.

optimización 2
1º decidir si esta neurona será de un ciclo interno, de 2 o varios, si es de dos o más ciclos los valores de entradas sólo se toman de nuevo al término del ciclo, mientras se siguen usando las mismas entradas. La salida queda temporalmente desactivada, va a parar a una lista (o la estructura que se te antoje)... en el paso 3 se completa la explicación

2º con esta optimización puedes ahora añadir otro contador, si el anterior era un contador de pulsos de la neurona ahora ese puede ser sólo un contador de ciclo interno y añadirse uno fuera del ciclo, ó sólo tener 1 fuera del ciclo interno. con pulso pués entendemos que un valor se arroja al exterior.

3º Con esta optimización podemos añadir una nueva etapa, esta sería una lista de salidas de cada pulso del ciclo interno, lo que serían entradas a una etapa tras finalizar el ciclo, esta etapa sería una copia casi idéntica de la anterior. Cuando el ciclo interno termina, esta lista dispersa su valor a entradas de la siguiente etapa, el maestro (la respuesta real) es por tanto el mismo que se ha usado en todo el ciclo. Esta etapa también debería contar con retroalimentación.

4º prueba todos estos pasos para garantizar que no hay errores de código.
5º pon a trabajar la neurona y obtén valores
6º recrea las estadísticas para ver si tu neurona o red mejora.
7º realiza cambios leves no bruscos en las funciones de ponderación para ver si se mejora la situación. Salva 'fórmulas'  de ponderación que veas han sido más prometedoras por si te alejas con sucesivos cambios volver a la más óptima que tenías hasta el momento.
8º Recuerda que tienes entera libertad para añadir, quitar y hacer cambios, lo que cuenta son los resultados.
9º cuando una neurona obtiene resultados digamos que lo que hasta hora era programado(haciendo pequeños cambios) , el estado inerno que has manejado externamente los funciones, etc.. se debe fijar como si fuera una 'ROM' la neurona ya está lista y especializada.

Ten en cuenta que una neurona entrenada para una cosa puede ser totalmente inútil para otra, no pretendas que una única neurona lleve a cabo múltiples funciones distintas. fíjate en los sentidos aunque todo provenga de los nervios, el nervio óptico está superespecializado en colores, la piel en cambio no reconoce colores pero ambos puedes reconocer formas aunque de forma distinta y de distancias distintas.
«Ma non troppo»
----> ModoVacaciones = False<----

Hadess_inf

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Funcionamiento De Una Neurona. Rna
« Respuesta #11 en: Lunes 9 de Junio de 2008, 03:02 »
0
Gracias por tomarte un tiempo para contestarme, seguire leyendo cuantas veces sea necesario para entender el ejemplo. Graias. Te aviso cuando lo entienda o cuando tenga otra duda.

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Funcionamiento De Una Neurona. Rna
« Respuesta #12 en: Lunes 9 de Junio de 2008, 16:21 »
0
Haré unos diagramas a mano alzada (soy muy malo dibujando en el ordenador) y lo escanearé (esto es asequible en tiempo), y luego a medida que vaya encontrando tiempo iré explicando, en detalle el diagrama.

El diagrama responde a lo anotado en el anterior mensaje (que por cierto tiene un par de gazapos).

Con el diagrama y lo que tengas aprendido creo que podrías llevar a cabo tu intento.

El diagrama en realidad serán varios, pero que giran en torno al más básico.
«Ma non troppo»
----> ModoVacaciones = False<----

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Funcionamiento De Una Neurona. Rna
« Respuesta #13 en: Viernes 13 de Junio de 2008, 04:51 »
0
Ya he hecho un par de esquemas, mañana veré si le doy un retoque.
El fin de semana veré si instalo el escáner y subo una de las imágenes y la comento, también he empezado a hacer una clase para ese primer diagrama...

Ahora la duda que tengo es si interesara más hacerlo todo en forma de manual que no a golpe de mensaje, pués la verdad que cuando maduras los conceptos queda más nítido que cuando lo vas 'soltando' sobre la marcha...
«Ma non troppo»
----> ModoVacaciones = False<----

Hadess_inf

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Funcionamiento De Una Neurona. Rna
« Respuesta #14 en: Viernes 13 de Junio de 2008, 06:04 »
0
Hola . gracias nuevamente. Esperare anioso tusfuturos post. Y con lo que respecta al modo de publicarlos, tu eres el Experto.

Saludos.