Inteligencia artificial (redes neuronales)
#1
Arcoiris 
Como desarrolladores, podemos crear redes neuronales, hay muchos tipos de redes y usos increíbles.

Una red neuronal es básicamente un conjunto de neuronas conectadas entre sí y la forma o complejidad de conexión hará variar su tipo.

En AMXX parece ser que no existe ninguna API para crear una red neuronal, a eso vamos.

Comencemos con un ejemplo y luego explicaciones más avanzadas.
Código PHP:
#include <amxmodx>

#include neural

public plugin_init() {
    
register_plugin("Neural network example""1.0.0""LuKks");

    
//layers
    
neural_layer(83); //(neurons, inputs) -> hidden/input layer
    //neural_layer(8); //(neurons) -> hidden layer
    //neural_layer(2); //(neurons) -> puedes añadir más capas ocultas
    
neural_layer(1); //(outputs) -> output layer es la última
    
    //dentro del include, al principio, hay máximos establecidos
    //por ejemplo, 6 layers como máximo, lo pueden modificar

    //los rangos son requeridos si vas a usar neural_learn o neural_think en vez de _raw
    
neural_input_range(00.0255.0); //0 -> primer entrada
    
neural_input_range(10.0255.0); //1 -> segunda entrada
    
neural_input_range(20.0255.0); //2 -> tercer entrada

    
neural_output_range(00.01.0); //0 -> primera salida
    //0.0-1.0 son los valores por defecto pero es para ser claros

    
new Float:rate 0.25//tasa de aprendizaje; depende de las capas, neuronas, iteraciones, etcétera

    
new Float:outputs[NEURAL_MAX_SIZE];

    
//benchmark();

    //le consultamos a la red si 255, 255 y 255 es claro o oscuro
    
outputs neural_think(Float:{ 255.0255.0255.0 });
    
server_print("255, 255, 255 [1.0] -> %f"outputs[0]); //valor aleatorio

    //le consultamos a la red si 0, 0 y 0 es claro o oscuro
    
outputs neural_think(Float:{ 0.00.00.0 });
    
server_print("0, 0, 0 [0.0] -> %f"outputs[0]); //valor aleatorio

    
for(new iFloat:mse5001i++) { //iteraciones
        
mse 0.0;
    
        
//dos formas de pasar información
        //raw
        
mse += neural_learn_raw(Float:{ 1.00.00.0 }, Float:{ 1.0 }, rate); //255, 0, 0

        //automático (usando los rangos predefinidos), entre 8% y 27% menos eficiente
        
mse += neural_learn(Float:{ 0.0255.00.0 }, Float:{ 1.0 }, rate);

        
//tiene que ser en rangos de min y max del primer neural_layer
        
mse += neural_learn(Float:{ 0.00.0255.0 }, Float:{ 1.0 }, rate); //light
        
mse += neural_learn(Float:{ 0.00.00.0 }, Float:{ 0.0 }, rate); //dark
        
mse += neural_learn(Float:{ 100.0100.0100.0 }, Float:{ 1.0 }, rate); //light
        
mse += neural_learn(Float:{ 107.0181.0255.0 }, Float:{ 0.0 }, rate); //dark
        
mse += neural_learn(Float:{ 0.053.0105.0 }, Float:{ 0.0 }, rate); //dark
        
mse += neural_learn(Float:{ 150.0150.075.0 }, Float:{ 1.0 }, rate); //light
        
mse += neural_learn(Float:{ 75.075.00.0 }, Float:{ 0.0 }, rate); //dark
        
mse += neural_learn(Float:{ 0.075.075.0 }, Float:{ 0.0 }, rate); //dark
        
mse += neural_learn(Float:{ 150.074.0142.0 }, Float:{ 1.0 }, rate); //light
        
mse += neural_learn(Float:{ 50.050.075.0 }, Float:{ 0.0 }, rate); //dark
        
mse += neural_learn(Float:{ 103.022.094.0 }, Float:{ 0.0 }, rate); //dark
    
        
mse /= 13//es un simple promedio de los errores en cada aprendizaje
        
        //realmente no necesitas obtener el mse (error cuadrático medio)
        //puedes enseñarle sin importar el error

        
if(mse 0.01) { //dejar de aprender cuando error alcance este límite
            
server_print("mse threshold on iter %d"i);
            break;
        }

        if(!(
1000)) {
            
server_print("iter %d, mse %f"imse);
        }
    }

    
//una red simple no puede aprender cualquier patrón, solamente linealeas
    //una red multicapa puede resolver patrones no lineales!
    //OR es lineal y XOR no lo es -> https://vgy.me/dSbEu0.png
    
    //dos maneras de pensar información
    
outputs neural_think_raw(Float:{ 0.9520.7010.039 }); //raw (243, 179, 10)
    
server_print("243, 179, 10 [1.0] -> %f"outputs[0]); //0.999930

    
outputs neural_think(Float:{ 75.050.050.0 }); //automático (usando los rangos predefinidos)
    
server_print("75, 50, 50 [0.0] -> %f"outputs[0]); //0.000430
    
    
outputs neural_think(Float:{ 95.099.0104.0 });
    
server_print("95, 99, 104 [1.0] -> %f"outputs[0]); //0.999359
    
    
outputs neural_think(Float:{ 65.038.070.0 });
    
server_print("65, 38, 70 [0.0] -> %f"outputs[0]); //0.000372

    //si tienes muchas salidas entonces puedes ->
    /*for(new i; i < layers[layers_id - 1][max_neurons]; i++) {
        server_print("output %d -> %f", i, outputs[i]);
    }*/

    //también puedes usar
    //neural_save("zombie-npc");
    //neural_load("zombie-npc");

    //después de _load no puedes crear más capas (neural_layer) ni nada relacionado con configuración
    //si tenés una red creada y cargas una nueva red entonces se va a sobreescribir, así que puedes hacerlo
}

public 
benchmark() {
    new 
time_starttime_end;

    
//raw
    
time(__time_start);
    for(new 
i200000i++) { //esto demora 7s
        //entonces esto toma ~0.000035s (1/3 de un milisegundo)
        //mi procesador es extremadamente lento: AMD A-10 7860K
        
neural_think_raw(Float:{ 1.01.01.0 });
    }
    
time(__time_end);
    
    
server_print("neural_think_raw = %d -> %d"time_starttime_end); //33 -> 40 (7s)

    //automático
    
time(__time_start);
    for(new 
i200000i++) { //esto demora 9s
        //entonces esto toma ~0.000045s (menos de la mitad de un milisegundo)
        
neural_think(Float:{ 255.0255.0255.0 });
    }
    
time(__time_end);
    
    
server_print("neural_think = %d -> %d"time_starttime_end); //24 -> 33 (9s)
    
    //con estos resultados puedo hacer thinking en tiempo real sin problema


Al principio la red no sabía que 255, 255 y 255 era un color claro (totalmente blanco, de hecho).
Después le enseñamos algunos patrones de colores, de esa forma luego pudo manejar colores que no le enseñamos.

Por cierto, las salidas al final de aprender, no llegan a ser exactos. Tiene su explicación.

Pero antes, qué es una capa?
Bueno, una red simple podría verse de la siguiente manera:
[Imagen: r8Wq1s.png]

Seguramente no ves la palabra "layer" (que en Español significa capa).
Es porque la misma capa de entrada es la única, por eso es simple.

Una red neuronal con múltiples capas está compuesta por una capa de entrada, 1 o más capas ocultas y una capa de salida.
Todas las capas pueden tener cantidades de neuronas distintas.

Por ejemplo, una red podría ser; capa de entrada (que es oculta también) con 3 entradas y 3 neuronas, una capa oculta con otras 4 neuronas y una capa de salida con 2 neuronas (que equivale a 2 salidas).
Visualmente quedaría ->
[Imagen: X2S2KN.png]

Solo para dar a entender que puede haber más capas ocultas, aquí tenemos 6 entradas, una capa oculta con 4 neuronas, otra capa oculta con 3 neuronas y una capa de salida con una neurona.
[Imagen: mtYddt.png]

Recuerdan lo que es un NPC? Non-Player Character
Podrían crear una red neuronal (no simple) para que esta maneje todos los NPC de su juego o mod de una manera realista.
Y no sería muy difícil de hacerlo, es decir, para enseñarle a la red simplemente deberías jugar como si fueses el NPC y hacerle aprender tus movimientos.

Las redes neuronales requieren bastante procesamiento (siempre depende el caso) pero una vez entrenadas no es gran computo el que se utiliza para utilizarlas y son exportables a cualquier otro entorno.
Es decir, una vez tienes tu red experta en la situación, puedes guardar su memoria (cantidad de capas, de neurons, sus weights y bias, etcétera) para utilizarlo incluso en otro lenguaje de programación o en cualquier otra parte.
Además, siempre puedes recolectar primero la información y luego realizar el aprendizaje en otra plataforma, por ejemplo, algún programa de escritorio (máximo rendimiento).

Esto es sólo un comienzo, como dije antes, hay muchos tipos de redes neuronales. https://i.imgur.com/fJ0Rs4R.png
Este tipo (deep feed forward) es la que más utilicé, para otro tipos siempre me ayudé de librerías o sistemas ya hechos porque para mí no vale la pena aprender y re-crear tanta funcionalidad.
Los sistemas actuales siempre me sirvieron como aprendizaje y para adquirir mayor razonamiento.

Una red neuronal pretende ser igual o mejor que un humano.
Una red neuronal no se distrae, no descansa, no mira hacia otro lado, etcétera.
Una red lo que tiene es un margen de error (no es probabilidad, eso es distinto).
Cómo funciona el margen de error? pues, se ve con los resultados del último ejemplo.
0.999930 en vez de 1.0
0.000372 en vez de 0.0

Una red multi capa podría llegar a valores exactos en ese caso pero en la mayoría de casos no vas a querer eso porque para usos reales, llegar a un error de cero es muy jodido (o imposible), normalmente un error muy bajo como 0.000372 para 0.0 está okey pero depende el caso.

Una red que pretenda realizar operaciones quirúrgicas no puede tener tanto margen de error. Tanto? o sea, puede tener en ese caso igual un pequeño margen? pues, los humanos no se mueven con 100% de precisión, mientras la red sea igual o mejor no debería haber problema, verdad?

Por qué no hay una red neuronal que simule un cerebro humano?
Un cerebro humano adulto (ni tanto, mientras no sea recién nacido) tienen tantas neuronas y demasiadas sinapsis, es decir, conexiones neuronales que hacen imposible por una cuestión técnica igualar la capacidad de computo necesario.
Seguro que hay intentos con menos capacidad pero ni ahí de estar cerca pero aún así se logró y se está logrando mucho con lo actual. Hay que seguir de cerca los avances en cuanto a computación cuántica (aunque no se si eso servirá, no he leído al respecto).

Vean esta comparación de cantidad de neuronas.
Abeja = 960.000
Gato = 300.000.000
Chimpancé = 6.200.000.000
Humano = 100.000.000.000
Fuente de las cantidades: psicologiaymente.com

Cómo aprenden las redes neuronales?
Como saben, una red simple tiene solamente una capa con una determinada cantidad de neuronas (ignoremos el bias, una cuestión técnica de matemática/álgebra).

Una neurona posee múltiples pesos (weight -> peso) pero en una red simple digamos que "cada peso simula cada neurona", sólo es una forma de decir.
Entonces, digamos que esta red simple tiene 2 entradas y dos neuronas, entonces, los pesos de una neurona quedarían ->
Weights = [ 0.21749, -0.18305 ]
Por qué esos valores? realmente son aleatorios, todas las neuronas comienzan con valores aleatorios.
Por eso, la red al principio te otorga resultados equivocados.

Cómo se calcula la salida actual para esta neurona? (nota: no es programación por lo que el índice no comenzará por cero)
Digamos que nuestras dos entradas son 0.5 y 0.5 ->
Output = 0.5 * Weights[1] + 0.5 * Weights[2]
Output -> 0.01722

Nosotros queríamos hacer 0.5 + 0.5 y la red actualmente nos dice que es 0.01722.

Hay que enseñarle que es un valor un poco más alto, cómo se corrige?
Modificando los pesos con una tasa de aprendizaje, por ejemplo 0.01.

Además de la tasa de aprendizaje, también existe el margen de error con respecto a las entradas actuales.
Error = 1.0 - 0.01722
O sea -> valor deseado - valor actual

Había escrito todo el procedimiento pero no me convencía, siento que iba a quedar algo complicado de entender textualmente.
Para simplificar el proceso, lo que sucede es que con algunas operaciones matemáticas, se modifican todos los weights de la neurona actual para aproximar a valores que correspondan a un error menor (también teniendo en cuenta la tasa de aprendizaje).
Por eso, al tener múltiples neuronas una red puede aprender múltiples conocimientos, ya que algunas neuronas aprenden más o menos dependiendo su error actual.

De esa forma llegará un momento en que los weights estarán ajustados en valores que al momento de introducir entradas similares van a corresponder a salidas correctas.
Por si no te diste cuenta, básicamente es fuerza bruta.

Mismo aprendizaje, distintos weights?
Es interesante que vean lo siguiente, creé dos veces la misma red neuronal y guardé ambas, es decir, ambas redes producen prácticamente el mismo resultado pero así se ven internamente (abran ambas imágenes en dos tabs para ver mejor la diferencia) ->
https://vgy.me/Xp47Zz.jpg
https://vgy.me/MXfnoF.jpg
Es interesante ver que muy distintos weights producen resultados similares.

Por qué es difícil manejar tantas neuronas?
Imaginarás que al tener mil neuronas, no será sencillo encontrar los weights correctos, aún si le estás dando el patrón más simple que se te ocurra (por decirlo de alguna manera).
Como dije, es fuerza bruta por lo que demorará tanto como tu poder de procesamiento.

Nosotros como humanos, por eso es que luego de interactuar con algo múltiples veces lo vas entendiendo cada vez más.
"La práctica hace al maestro", es una frase típica pero técnicamente es correcto.

Como dije al principio, hay muchos tipos de redes. Por ejemplo, una red neuronal perceptrón multi-capa puede manejar patrones, reconocimiento de imágenes y seguro que muchísimos usos más, probablemente para traducción de lenguajes según recuerdo.
Seguro que manejar un auto también puede, es que hay tantos tipos de redes que a veces hay una solución mejor pero se entiende.

Aprende sobre redes neuronales (Google, YouTube, etcétera):
Siempre puedes googlear para profundizar en cada detalle, aunque te recomiendo YouTube porque es más visual, te costará entender todo a puro texto y matemática.
Para entender como haría una red neuronal para reconocer imágenes -> https://www.youtube.com/watch?v=aircAruvnKk
Se me ocurrió buscar los vídeos que ví hace dos años aproximadamente, es como un pequeño curso -> https://www.youtube.com/watch?v=jaEIv_E29sk
Ahora que recuerdo, me encanta un ejemplo que da, por si no lo llegas a ver, era algo como ->
En psicología un profesional tiene muchos perfiles de pacientes, entonces, una red neuronal podría aprender todo al respecto de los pacientes y de esa manera, la red puede predecir información para los actuales y futuros pacientes.
Más o menos lo modifiqué bastante a lo que habrá dicho pero se entiende.

Con respecto a los ejemplos, siempre puedes hacer un comentario y preguntarme.
Si es un problema que estás teniendo con un plugin quizás debas crear una publicación aparte (de preferencia añade [neural] en el título) pero si es una duda específica al código o al tema, creo que podrías directamente comentarlo así el resto ve tu pregunta también.

Requiere fvault.inc debido a neural_save/load, descargar -> https://forums.alliedmods.net/attachment...1297052495


Archivos adjuntos
.inc   neural.inc (Tamaño: 16.11 KB / Descargas: 9)
Responder
#2
Me interesa aprenderlo en profundidad, voy a leer más acerca de eso, obviamente no comprendí mucho (si lo esencial para entrar en tema), muy buen aporte !

Consulta: cuales son los limites o mejor dicho, que podrias crear fuera de los NPC? por ejemplo, un servidor auto-sustentable? me refiero a que se actualice a partir de que piense solo? es una idea muy al aire, si podrias explayar esto a tu perspectiva te agradeceria...
Responder
#3
(30/08/2018, 02:25 PM)matrix123 escribió: Me interesa aprenderlo en profundidad, voy a leer más acerca de eso, obviamente no comprendí mucho (si lo esencial para entrar en tema), muy buen aporte !

Consulta: cuales son los limites o mejor dicho, que podrias crear fuera de los NPC? por ejemplo, un servidor auto-sustentable? me refiero a que se actualice a partir de que piense solo? es una idea muy al aire, si podrias explayar esto a tu perspectiva te agradeceria...

Yep, lo siento. Simplemente escribí espontáneamente lo que pensaba.

Una red neuronal es en pequeña escala tu cerebro (por cierto, puedes crear múltiples redes con la neural_simple).
Va aprender lo que le enseñes por lo que pueden hacer lo que sea.

No especificaste mucho, a que te refieres con auto-sustentable o con que se "actualice a partir de que piense solo"? pero para lograr algo así siempre vas a tener que definir lo correcto/incorrecto.
Por ejemplo, el servidor (quiero decir, una red neuronal) podría saber todo el tiempo la posición de cada jugador pero no puede tomar decisiones por si sola, tienes que programar las acciones.
Por ejemplo, para un anti-camper, una red no sabe los conceptos de camper o posición estratégica, va a poder distinguir entre estos dos grupos pero no es que vaya a tomar acción por si misma, uno programa tales acciones y uno identifica los grupos.

edit:
Explicado así parece que no tiene mucho sentido usar redes neuronales pero quizás no era el mejor ejemplo.
Una red neuronal te facilita el proceso de reconocimiento, no tienes que programar ni hacer cálculos para resolver problemas.

Quizás una persona puede ser experta y saberse de memoria todo sobre meteorología pero uno como dios desarrollador creamos una red neuronal y le tirás todos los factores que se te ocurran (día, mes, año, temperatura, humedad, velocidad del viento, precipitación/nivel de lluvia 0%-100%, etcétera) y sin siquiera uno mismo saber, la red neuronal encuentra el patrón y te predice los futuros valores.

Va a depender del tipo de red neuronal, como dije, hay muchos y dependiendo el caso hay mejores o peores para el trabajo.

edit 2:
No tienes que entender como funcionan internamente, tienes que aprender a usarlas. Opcionalmente puedes entender el resto.
Primero aprendes a usar una computadora y, opcionalmente, luego entiendes sobre componentes (?).
Responder
#4
Te lo voy a explicar muy burdo, ojalá puedas entender a lo que voy y expandir mi visión

Me refiero con "auto sustentable" (mal dicho) a que un server pueda tomar criterio de que SI y que NO fuera de la programación "básica" que pueda DISCERNIR (ejemplos burdos)

ej:
- que pueda tomar decisiones en base a 'x'
- que pueda mejorar/empeorar un server en base a su "pensamiento"

que sea un programador sin programación, juro que se dificulta explicarlo jaja... vamos de otra forma:

nosotros programamos en base a criterios (si no queremos que campeen hacemos un anti-camper etc) nosotros seriamos PROGRAMADORES que mediante la PROGRAMACION ayudamos a "mejorar el servidor"
osea:

PROGRAMADOR -> PROGRAMACION -> EFECTO EN EL SERVER

hasta ahi todo bien?

PROGRAMADOR (yo) -> PROGRAMACION (codigo) -> EFECTO EN EL SERVER (servidor/plugin)

gracias a esto (inteligencia artificial) podriamos pasar el "codigo" de PROGRAMACION a PROGRAMADOR? más explicación que esto me es imposible jaja
Responder
#5
Si es que te interpreté bien, creo que quizás exageré un poco al decir que es como tu cerebro.
Por eso aclaré que es en pequeña escala, MUY PEQUEÑA ESCALA.

Aunque tengamos los recursos necesarios para crear un cerebro como el nuestro, aún así, a este cerebro tenemos que añadirle todos los inputs para captar el entorno.
Cuáles? audición, tacto, simular un sistema nervioso (para posibles emociones y reacciones -por ejemplo, el dolor-), etcétera.
De esta forma, al estar simplemente ahí podrá aprender y organizar "pensamientos" de alguna manera con el paso del tiempo, pero este cerebro aún teniendo todo lo anterior, sería casi un niño recién nacido.
CASI, porque el bebé tendría genética de cientos de miles de año de evolución :/

Prácticamente, es difícil hacer algo así, siempre se va a comportar como uno le enseñe y siempre estarás limitado a la funcionalidad que le añadas. Por ejemplo, quizás sea más fácil replicar el comportamiento de la dichosa abeja que la de un humano, pero no estás creando un nuevo ser que por aprendió a comportarse de una manera única por si mismo.

Obviamente, siempre puedes crear tus funcionalidades y establecer valores aleatorios Gran sonrisa
De esa forma, tendrías abejas asesinas con una probabilidad controlada de, por ejemplo, 5% del total, abejas que no trabajan, abejas con trastornos, etcétera (lo sé, estoy haciendo analogía con los humanos y el 5% fue random).

Plus, mi limitación de conocimientos y capacidad de explicación quizás no son tan elevados como para elaborar una mejor respuesta :/
Responder
#6
vi bien?

Código:
Puedes intentar enseñarle otra cosa, por ejemplo:
1 + 2 = 3
2 + 3 = 4
3 + 4 = 5
4 + 5 = 6
Enseña eso y luego pregunta sobre 5 + 6, debería responder con casi 7.
[Imagen: b_350_20_323957_202743_f19a15_111111.png]

(18/11/2014, 05:47 PM)Neeeeeeeeeel.- escribió: Por qué necesitan una guía para todo? Meté mano y que salga lo que salga... es la mejor forma de aprender.

(16/05/2016, 11:08 PM)kikizon2 escribió: No cabe duda que tienen mierda en vez de cerebro, par de pendejos v:
Responder
#7
(30/08/2018, 04:00 PM)OsweRRR escribió: vi bien?

Código:
Puedes intentar enseñarle otra cosa, por ejemplo:
1 + 2 = 3
2 + 3 = 4
3 + 4 = 5
4 + 5 = 6
Enseña eso y luego pregunta sobre 5 + 6, debería responder con casi 7.

{ 1.0, 2.0 }, 0.03
{ 2.0, 3.0 }, 0.04
etc
No son sumas, es el número que sigue.
Responder
#8
retiro lo dicho esta persona no es la que creia q era jaja salu2 pacman
Responder
#9
(30/08/2018, 04:33 PM)Pan Bimbo (? escribió: no entendi ni 3/4 (pero me parece un vault que guarda cosa y te las recuerda salu2)

[Imagen: kpfywMlBSpy85n_QXH-P_A.png]

Para comenzar, deberías achicar la imagen, para eso tienes [img=16x4].
Vos mismo decís que no entendiste y aún así envías tal imagen -la cual es un insulto-? no debes tener los weights muy ajustados quizás.

Hablando en serio, no es un tema simple, desde siempre todos en AMXX se manejaron sin redes neuronales, claramente no se necesitan aquí.
Además, a la publicación la enfoque en un tono de aprendizaje, realmente me da igual si lo utilizan en un plugin o no, lo importante es que aprendan que existe dicho tema.

edit:
Con redes neuronales pueden darle más inteligencia a las "cucarachas NPC" ya que les cuesta mucho encontrar jugadores y actuar de manera real.
Responder
#10
Buen aporte Approved, las carreras relacionadas con AI tienen mucho potencial en el futuro, es algo bueno tratar de que mas gente sepa del tema.


Deberías dejar mas claro(con color?) que esto no tiene aplicación practica, sino el tema se va a llenar de preguntas de como si con esto pueden hacer Skynet en un solo plugin (? jaja
_____
Create las cucarachas NPC y te doy rep+2
Responder
#11
(30/08/2018, 05:15 PM)Destro escribió: Buen aporte Approved, las carreras relacionadas con AI tienen mucho potencial en el futuro, es algo bueno tratar de que mas gente sepa del tema.

Deberías dejar mas claro(con color?) que esto no tiene aplicación practica, sino el tema se va a llenar de preguntas de como si con esto pueden hacer Skynet en un solo plugin (? jaja

Justo lo que iba a decir Roflmao

+10 Lince
[Imagen: bvpq9q-6.png]

NO DOY AYUDA VIA MENSAJE PRIVADO

* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook
Responder
#12
Buen aporte!.

(30/08/2018, 05:15 PM)Destro escribió: Create las cucarachas NPC y te doy rep+2

(30/08/2018, 05:15 PM)Destro escribió: Create las cucarachas NPC y te doy rep+2

(30/08/2018, 05:15 PM)Destro escribió: Create las cucarachas NPC y te doy rep+2

(30/08/2018, 05:15 PM)Destro escribió: Create las cucarachas NPC y te doy rep+2
Responder
#13
(30/08/2018, 05:24 PM)Chema escribió: Buen aporte!.

(30/08/2018, 05:15 PM)Destro escribió: Create las cucarachas NPC y te doy rep+2

(30/08/2018, 05:15 PM)Destro escribió: Create las cucarachas NPC y te doy rep+2

(30/08/2018, 05:15 PM)Destro escribió: Create las cucarachas NPC y te doy rep+2

(30/08/2018, 05:15 PM)Destro escribió: Create las cucarachas NPC y te doy rep+2

Responder
#14
Más que decir que es "forma de hacer un modelo de red neuronal", es una variante mutada del regular Modelo de Redes, que tiene una aplicación práctica un poco distópica por que usualmente van ligados de la mano a sistemas inteligentes que van ligados al Machine Learning - cosa que no se ve mucho aquí. Si lo he visto mucho en investigaciones y aplicaciones prácticas complejas, pero para proponerlo aquí sería bueno modelarlo de una forma primitiva, por que 1) ningun simio aquí hará algo con esto más allá que aplicaciones teóricas y 2) enseñar esto omitiendo bastantes conceptos teóricos no es tan ambicioso de adquirir en conocimientos por la gran cantidad de vacíos. De hecho, esta materia, en mi facultad, se ve en la última de una de las ramas, Fundamentos de Inteligencia Artificial, y para llegar ahí hay cerca de 5 asignaturas donde explican bastantes bases teóricas útiles - ya los viste pidiendote un NPC de cucarachas, no habrá más seriedad que eso
Responder
#15
Mi cabeza exploto, mejor digo que gracias por el aporte.
[Imagen: 76561198350936449.png]

Cita:Los precios en la moneda venezolana se fijarán a partir de la reconversión monetaria y valdrá mucho menos de lo que cuesta una Cachapa con queso.
Responder
#16
(30/08/2018, 05:15 PM)Destro escribió: Deberías dejar mas claro(con color?) que esto no tiene aplicación practica, sino el tema se va a llenar de preguntas de como si con esto pueden hacer Skynet en un solo plugin (? jaja
Creo que es difícil generar aplicaciones prácticas pero, no tener ninguna? he dado ejemplos que no están relacionados con el juego pero es sólo por eso mismo, no se me ocurren muchas más que estén buenas y valga la pena aplicarlas.

(30/08/2018, 05:15 PM)Destro escribió: Create las cucarachas NPC y te doy rep+2
Quería publicar esto en plugins nuevos pero al no funcionar la multi-capa no iba a poder armar el plugin.
No puede ser que haya re-codeado dos veces de manera completamente distinta y tenga el mismo error Confundido

(30/08/2018, 06:00 PM)meTaLiCroSS escribió: Más que decir que es "forma de hacer un modelo de red neuronal", es una variante mutada del regular Modelo de Redes, que tiene una aplicación práctica un poco distópica por que usualmente van ligados de la mano a sistemas inteligentes que van ligados al Machine Learning - cosa que no se ve mucho aquí. Si lo he visto mucho en investigaciones y aplicaciones prácticas complejas, pero para proponerlo aquí sería bueno modelarlo de una forma primitiva, por que 1) ningun simio aquí hará algo con esto más allá que aplicaciones teóricas y 2) enseñar esto omitiendo bastantes conceptos teóricos no es tan ambicioso de adquirir en conocimientos por la gran cantidad de vacíos.
No quise pretender enseñar sobre redes neuronales, sólo intentar dar una introducción general sobre cuestiones básicas.
Es decir, que un desarrollador esté aprendiendo sobre redes neuronales no significa que tenga que saber crear de cero los modelos, entonces, todas las explicaciones que no tienen que ver con los ejemplos dados son plus para interesarse en el tema pero no lo suficiente como para que no quieran leer toda la publicación :p

(30/08/2018, 06:00 PM)meTaLiCroSS escribió: De hecho, esta materia, en mi facultad, se ve en la última de una de las ramas, Fundamentos de Inteligencia Artificial, y para llegar ahí hay cerca de 5 asignaturas donde explican bastantes bases teóricas útiles - ya los viste pidiendote un NPC de cucarachas, no habrá más seriedad que eso
Mi ideal sobre manejarme de manera autodidacta es que me puedo saltar conocimientos que no me son relevantes o emocionantes.
No puedo pretender que una persona estudie tanto conocimiento para finalmente hacer un par de líneas de código.
Entiendo la última parte que dijiste pero estamos en Pawn/AMXX, de base esto no es serio.
Responder
#17
(30/08/2018, 09:35 PM)LuKks escribió:
(30/08/2018, 06:00 PM)meTaLiCroSS escribió: Más que decir que es "forma de hacer un modelo de red neuronal", es una variante mutada del regular Modelo de Redes, que tiene una aplicación práctica un poco distópica por que usualmente van ligados de la mano a sistemas inteligentes que van ligados al Machine Learning - cosa que no se ve mucho aquí. Si lo he visto mucho en investigaciones y aplicaciones prácticas complejas, pero para proponerlo aquí sería bueno modelarlo de una forma primitiva, por que 1) ningun simio aquí hará algo con esto más allá que aplicaciones teóricas y 2) enseñar esto omitiendo bastantes conceptos teóricos no es tan ambicioso de adquirir en conocimientos por la gran cantidad de vacíos.
No quise pretender enseñar sobre redes neuronales, sólo intentar dar una introducción general sobre cuestiones básicas.
Es decir, que un desarrollador esté aprendiendo sobre redes neuronales no significa que tenga que saber crear de cero los modelos, entonces, todas las explicaciones que no tienen que ver con los ejemplos dados son plus para interesarse en el tema pero no lo suficiente como para que no quieran leer toda la publicación :p

(30/08/2018, 06:00 PM)meTaLiCroSS escribió: De hecho, esta materia, en mi facultad, se ve en la última de una de las ramas, Fundamentos de Inteligencia Artificial, y para llegar ahí hay cerca de 5 asignaturas donde explican bastantes bases teóricas útiles - ya los viste pidiendote un NPC de cucarachas, no habrá más seriedad que eso
Mi ideal sobre manejarme de manera autodidacta es que me puedo saltar conocimientos que no me son relevantes o emocionantes.
No puedo pretender que una persona estudie tanto conocimiento para finalmente hacer un par de líneas de código.
Entiendo la última parte que dijiste pero estamos en Pawn/AMXX, de base esto no es serio.

Comprendo a que apuntas. Pero considera que hablas de cosas básicas, lo básico es la base, eso dice y cambia mucho. No menciono tampoco que deban saber crear modelos de 0 ni nada al respecto, yo puedo llegar y aprender de esto como un todo y aplicarlo sanamente omitiendo y obviando definiciones y conceptos (como llegar y editar un plugin random sin saber siquiera cosas como el tipo y tamaño de datos, una persona cualquiera desde el ocio de su hogar) y hacerlo "bien". Pero esta materia es buena, es oro, y desde mi perspectiva es mucho para tan poco. Y tambien que, no me gusta omitir la base del conocimiento. (Si, en mis estudios sólo me tiran libros, papers y presentaciones, en un principio sólo quería programar, me advirtieron que era un pensamiento inmaduro, tenían razón)

Cita:Entiendo la última parte que dijiste pero estamos en Pawn/AMXX, de base esto no es serio.

Claro, con eso te respondes, aplica esto a algo más complejo, o expónelo en el foro oficial, quizás la recepción sea distinta.

Cita:Mi ideal sobre manejarme de manera autodidacta es que me puedo saltar conocimientos que no me son relevantes o emocionantes.
No puedo pretender que una persona estudie tanto conocimiento para finalmente hacer un par de líneas de código.

Te ves como un Programador ahí. Yo lo veo como un Informático lo que difiere en su enfoque ampliamente, me faltó clarificar ese detalle.

https://forums.alliedmods.net/forumdisplay.php?f=83 - obtén feedback preciso ahí
Responder
#18
(31/08/2018, 03:42 AM)meTaLiCroSS escribió: Comprendo a que apuntas. Pero considera que hablas de cosas básicas, lo básico es la base, eso dice y cambia mucho. No menciono tampoco que deban saber crear modelos de 0 ni nada al respecto, yo puedo llegar y aprender de esto como un todo y aplicarlo sanamente omitiendo y obviando definiciones y conceptos (como llegar y editar un plugin random sin saber siquiera cosas como el tipo y tamaño de datos, una persona cualquiera desde el ocio de su hogar) y hacerlo "bien". Pero esta materia es buena, es oro, y desde mi perspectiva es mucho para tan poco. Y tambien que, no me gusta omitir la base del conocimiento. (Si, en mis estudios sólo me tiran libros, papers y presentaciones, en un principio sólo quería programar, me advirtieron que era un pensamiento inmaduro, tenían razón)
Primer oración de mi primer comentario:
LuKks escribió:Yep, lo siento. Simplemente escribí espontáneamente lo que pensaba.

No es que quiera omitirlo, simplemente habiendo tantos cursos, vídeos, imágenes, blogs, etcétera (tales como ambos enlaces de YouTube que dejé), comparar mis posibles explicaciones contra el resto de contenido existente no me resulta muy razonable.

El segundo vídeo es parte de un curso de 7 vídeos, múltiples imágenes ->
[Imagen: BOj5R2.jpg][Imagen: rnDs7K.jpg]
+3 horas y media de contenido explicativo, y es sólo el que vi hace mucho.

Pude haber replicado el contenido de algún vídeo corto pero no quise porque quería explicarlo de manera espontánea como ya dije.

(31/08/2018, 03:42 AM)meTaLiCroSS escribió: Claro, con eso te respondes, aplica esto a algo más complejo, o expónelo en el foro oficial, quizás la recepción sea distinta.
Lo había pensando pero tengo mi cuenta baneada y no sé que tan correcto sería crearme otra.
Si alguien quiere replicar/referenciar la publicación puede tranquilamente, no hay problema. O pedir que me desbaneen sería óptimo.

(31/08/2018, 03:42 AM)meTaLiCroSS escribió: Te ves como un Programador ahí. Yo lo veo como un Informático lo que difiere en su enfoque ampliamente, me faltó clarificar ese detalle.
Es cierto, parece que sólo me importaría desarrollar pero lo veo como un punto medio; observo como funcionan las cosas pero no voy a emplear tanto tiempo a un mismo tema. Podemos aprender mucho, no todo.
Responder
#19
Actualizado.

- La versión multi-capa ahora funciona correctamente (fix)
- Quité la versión con arrays dinámicos (diversas razones, sobre todo rendimiento y legibilidad de código).
- Añadí spoilers a la publicación con sus respectivas preguntas, así no es tan extenso.
- A la versión neural_multi añadí dos funciones útiles: neural_normalize y neural_range
- En estos días finalizaré neural_save y neural_load (el save está hecho pero comentado porque hay un problema con las celdas de una variable Confundido).
- También quiero hacer neural_denormalize, está creada la función pero no tiene contenido, si algún crack quiere hacer la inversa de normalize, me ahorraría bastante Gran sonrisa

* Para los que leyeron anteriormente la publicación, la modificación más importante fue la del ejemplo de neural_multi. Incluso, la API es distinta, ahora es mucho más similar a la simple y es más fácil de usar.

edit 2:
- neural_save y neural_load actualizados, require fvault.
- Añadí algo de contenido al respecto en la publicación -> Mismo aprendizaje, distintos weights?
- También volví a modificar el ejemplo de multicapa aclarando sobre neural_save/load.
- Cambié los enums con el prefijo N_* para que no hagan conflictos con sus plugins (N_id, N_error, etcétera).
- Nota: no tengo pensado añadir las mismas funcionalidades a neural_simple porque es demasiado limitado, lo considero una librería para aprender de manera básica como funciona una sencilla red neuronal internamente, siempre pueden preguntar.
Responder
#20
Actualizado.

Últimos cambios
- Cambié el ejemplo a uno más práctico y comprensible.
- Añadí algunas funciones para facilitar el uso: neural_values, neural_learn_values y neural_think_values.
- Corrección de optimización pero nada notable.
- Quité lo mencionado a neural_simple ya que no es muy útil más que para aprendizaje pero mantengo el include adjuntado.
Responder
#21
Esto funcionaría para NPC que siguen una ruta no?

por ejemplo que llegue de la base TT a la base CT por varias rutas?

Si es así me gustaría ver si puedes dejar un ejemplo porque no le entendí mucho a las natives Whatdone
[Imagen: b_350_20_323957_202743_f19a15_111111.png]

Estudia siempre; el tiempo es oro, lo material se puede recuperar pero el tiempo no se puede recuperar.
(02/10/2016, 05:05 PM)meTaLiCroSS escribió: Siempre me gusta ayudar cuando alguien esta interesado realmente en ver que esta programando.
(08/08/2019, 05:32 PM)meTaLiCroSS escribió: grax x el dato cr4ck


Mis aportes

PLUGINS
MAPAS
Menú LANG [SF] Sistema de Frags
Say System (Admin Prefix)
Responder
#22
Ladrillo 
Me gusto el Aporte, a un que aprendí más de la definición de las neuronas que del Tema central de aporte, lo cual me llevo a unos tropiezos al leer el aporte, ya que mi pensamiento se concentra mas en la definición de la neurona, que del include o plugin. Genius

(30/08/2018, 06:00 PM)meTaLiCroSS escribió: Enseñar esto omitiendo bastantes conceptos teóricos no es tan ambicioso de adquirir en conocimientos por la gran cantidad de vacíos.

(30/08/2018, 06:00 PM)meTaLiCroSS escribió: De hecho, esta materia, en mi facultad, se ve en la última de una de las ramas, Fundamentos de Inteligencia Artificial, y para llegar ahí hay cerca de 5 asignaturas donde explican bastantes bases teóricas útiles

Desde un inicio, después de leer el aporte, pensé casi en eso…

De todos modos me gusto mucho leer el aporte Approved y como estudiante de Sistema en bueno que sepa algo de esto Whatever .
[Imagen: jrXxqRT.png]
*Maper Del Cstrike* - *Estudiante De Sistema*
(03/09/2018, 08:32 PM)Skylar escribió: Obviamente, no va a hablar con super pro para que le mueva el thread
(04/01/2019, 05:12 PM)Pan Bimbo (? escribió: QUE HICISTE QUE??????? YO QUERIA LA PLACA DE VIDEO PORQUE LA TIRASTE CTM
(15/01/2019, 04:08 AM)FreDDy escribió:
(15/01/2019, 03:45 AM)Hernandez escribió: Qué más dan las palabras si a donde vayas están en tetas protestando sin sentido

No todas salen en tetas y no todas protestan sin sentido. Estás generalizando algo que sólo unas pocas lo hacen a diferencia de las muchas que realmente tienen un motivo para protestar.
(17/01/2019, 12:34 PM)totopizza escribió: el orden de los factores no altera el producto xD
(23/01/2019, 01:10 AM)GoldenCosta escribió:
Cita:E visto que este ZP , ESTA AQUI EN EL FORO PERO NO ES EL ORIGINAL POR QUE? , LE FALTAN MILES DE COSAS ESTA BUGEADO , LE FALTAN CÓDIGOS NI SE IMAGINAN , BUENO EL MOD ESTE SE VENDE POR 70 DOLARES , ACEPTO PAYPAL Y EN PESOS CHILENOS $42.584
ya esta publicado.... y 70 us en arg son 2625,35 pesos... estas loco con esa guita neel mantiene el foro por 2 años
(23/01/2019, 01:17 AM)Skylar escribió:
(22/01/2019, 10:30 PM)el_juan_fail escribió:
(22/01/2019, 10:03 AM)Neeeeeeeeeel.- escribió: Por favor subir las cosas al foro y no links a blogs externos. Solamente en caso de que haya recursos que no se pudiesen subir por un tema de tamaño, poenr un link de descarga directo (tipo mega) de los recursos y subir los plugins y demás archivos livianos al foro.

deberia ponerle en un link mediante el mediafire o mega o link externo lo que sea pero no es bueno dejar cosa agregada sin descargar solo por el blog no se puede se puede bajar el recurso o que haya sido creado disculpa neeeeel. estaba leyendose las reglas u.uMario

Dijiste lo mismo que dijo Neeel!
(27/02/2019, 08:00 PM)Sugisaki escribió:
(27/02/2019, 05:37 PM)Pan Bimbo (? escribió:
(27/02/2019, 12:06 AM)luxor xD escribió: Hola, si precacheo algo en un plugin, no es necesario precachearlo en otro plugin?

Si yo cargo una caja en un camion, mi amigo puede cargar la MISMA caja en el camion?, y no porque ya esta cargada.
[R]ak escribió: Mis conocimientos aumentaron un 500% con este post
(14/03/2019, 10:26 PM)KrR10VnZl escribió: en Venezuela aprendes a ser desde bombas molotov hasta velas, es algo así como supervivencia al desnudo jaja
(18/04/2019, 11:04 PM)Jose88 escribió:
(18/04/2019, 09:55 PM)Hypnotize escribió: arriba marica

papa me va perdonar pero aquí no sale ningún download. solo sale esto

Código PHP:
PDNiños Ratas eviten sacar el autor jaja.
REMOVIDO POR TUTOR Y SLOWHACK
(21/04/2019, 09:38 AM)SHENK! =D escribió: ASDASD

Si nos organizamos cojemos todos.
(11/08/2019, 05:11 PM)Cr3470r escribió: Todo Software es crackeable ... No importa cuantas validaciones hagan, la ventaja siempre la tenemos nosotros ...
(28/07/2015, 09:34 PM)Nazi.- escribió: :ohgodwhy buen aporte

PD: situación sentimental: Sin internetOh god why

Sigue así Proud

(28/02/2020, 12:23 AM)Skylar escribió:
(27/02/2020, 11:28 PM)4evergaming escribió: Ya me puse como autor y lo subi a mi empresa


Abrazos

FIX
Responder
#23
(29/03/2019, 06:00 PM)totopizza escribió: Esto funcionaría para NPC que siguen una ruta no?

por ejemplo que llegue de la base TT a la base CT por varias rutas?

Si es así me gustaría ver si puedes dejar un ejemplo porque no le entendí mucho a las natives Whatdone

Últimamente no tengo mucho tiempo, en alliedmods me dejaron una idea muy buena para hacer pero es un drama el tiempo.

Con respecto al NPC, esto funcionaría para crear un bot que siga aproximaciones que le des de ejemplo (siempre va a aprender lo que le enseñes).
Por ejemplo, un enfoque básico puede ser que para los inputs sean posición x/y dentro del mapa, algunas distancias entre paredes, etcétera y luego para los outputs pueden ser los movimientos (adelante, atrás, etcétera) o alguna acción como saltar, agacharse, etcétera.

De todas formas, yo nunca llegué hacer un bot así porque no hago nada relacionado a juegos, siempre usé esto para análisis, predicciones y cosas similares.
Y en Pawn va a ser más difícil de lo que ya es porque el entorno es muy lento para procesar tanta información en tiempo real, aunque capaz sí es factible dependendiendo tu pc.

No digo que no se pueda hacer nada con redes neuronales, como dije antes en alliedmods dejaron una idea bastante genial.

Con respecto a que no entendiste las natives:
Pensá los inputs y outputs como una pregunta y respuesta hacía la red neuronal.

Para neural_learn* sería decirle a la red: la pregunta es A y la respuesta es B.
Para neural_think* sería decirle a la red: la pregunta es A entonces cuál es la respuesta?

Entonces, si yo te digo: El siguiente color R:107, G:181, B:255 es claro u oscuro?
Probablemente no lo puedas responder porque no estuviste leyendo ni viendo conjuntos de colores similares (aprendizaje) pero la red sí sabría responderlo porque previamente relacionó múltiples ejemplos.

En fin, no quiero extenderme más pero podrías decirme específicamente que cosa no entendiste y puedo explicar específicamente eso.
Deberías jugar con el mismo ejemplo que hice e ir comprobando los colores vos mismo con la consola de algún navegador o color-hex.com.

La mejor parte son los últimos neural_think* porque ahí estás consultando a la red sobre valores (rgb) que nunca vió en los ejemplos pero aún así los resultados son muy precisos.
Por ejemplo, R:95, G:99, B:104 sabe que es claro debido principalmente al ejemplo R:100, G:100, B:100 pero también se apoya del resto y que de por sí los colores son relacionables (tienen un patrón).


(29/03/2019, 08:01 PM)El pirucho XP-007 escribió: -

Quizás deba resumir un poco las explicaciones y remarcar más los enlaces que dejé al final, lo veré más tarde.
De todas formas no es malo que hayas aprendido más de conceptos que de código, es cuestión de tiempo o quizás este no es el lenguaje en el que vas a aplicar código relacionado a redes neuronales pero sí en otro en algún futuro Gran sonrisa
Responder
#24
Podrían mirar este vídeo, explica de manera sencilla como hacer algo sencillo y sin tantas complicaciones una red neuronal.

https://www.youtube.com/watch?v=KtPpoMThKUs

Saludos,
Búsqueda de la ecuación perfecta.
Responder
#25
Actualización:
- Optimizaciones: principalmente loops reducidos.
- Añadido: muchas explicaciones dentro del include (.inc).
- Añadido: neural_learn_raw y _think_raw.
- Renombrado: anteriores funciones como neural_learn_values ahora son neural_learn e igual con _think.
- Añadido: neural_input_range y _output_range para definir individualmente rangos para cada valor (más fácil de usar).
- Removido: neural_simple.inc.
- Renombrado: neural_multi.inc now is just neural.inc

Posibles siguientes actualizaciones:
- Soporte simple para strings como valores, por ejemplo, para reconocer textos
- Veo algunas optimizaciones que pueden ser hechas.
- Subir un vídeo haciendo un plugin desde cero como "neural anti-spam" o algo así para realmente entender como funciona.

Una sugerencia podría ser tomar el código ejemplo y quitarle todos los comentarios, benchmark y lo de neural_save/load, así uno mismo ver el código y omitir las explicaciones inicialmente entonces de a poco ir viendo como funciona cada una.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)