Beiträge von Lotes

    Versuch und Irrtum würde ich dann sagen. Die neuronalen Netze die ich aus besagtem Buch kenne sind sehr verständlich. Es ist wie das Entwickeln von Algorithmen, nur kommen da neue Aspekte hinzu...

    Mein Anliegen mit diesem Spiel ist es neuronale Netze schmackhaft zu machen. Die Theorie zu künstlichen neuronalen Netzen ist, finde ich, recht komplex um damit rumzuspielen und hier und da mal was auszuprobieren.


    Beispielsweise Handschrifterkennung mittels vorwärtsgerichteten Netzen. Man belegt die Kanten mit Zufallsgewichten, trainiert dann das Netz mit Ein- und Ausgaben mittels Gradientenabstiegsverfahren gegen die Fehlerfunktion und hat dann einen Klassifizierer für z.B. alle Buchstaben. Klasse. Man sieht es dem Netz aber nicht an. Das ist das eine was mich nervt.


    Das waren nun vorwärtsgerichtete Neuronen. Die Ausgabe der einen Schicht ist die Eingabe der nächsten Schicht. Schichtenarchitektur quasi xD. Keine Rückkopplungen. Es gibt dann noch rekurrente Netze - mit Rückkopplungen. Diese sind schwieriger zu trainieren und die Theorie ist noch komplexer. Sie können aber auch mehr und sind aber meiner Meinung nach ein Schlüssel in die Erforschung von künstlichen Intelligenzen und vom Aufbau von "Geist und Seele".


    Nun zum Spiel... was kann man einstellen? In einem Editor für neuronale Netze viel:

    • der Schwellwert für das Neuron, bei welcher eingehenden Signalstärke feuert es? wenn man es noch komplizierter will, kann man auch eine Funktion angeben, die Sigmoide z.B
    • wenn das Neuron feuert, wie stark ist die Verstärkung und was ist das Maximum - das gleiche für die Kanten
    • Lernkonstante, Verlernkonstante, Vergessenskonstante


    Aber ich denke für ein Spiel sollte man das auf das nötigste reduzieren. Mir schwebt sowas vor wie:

    • Neuronen mit festen Schwellwert, z.B. in den Varianten >=1, 2, 3
    • Spezialneuronen mit einer festen Vergessenskonstante
    • Verbindungen mit festen Gewichten

    So ist die Handlung für den Spieler auf Drag n Drop und verbinden beschränkt. Und denken natürlich.


    Den Aspekt mit dem Anlernen könnte man in höheren Leveln mit einbinden. Ich will eigentlich erstmal sehen wie weit man mit den genannten Mitteln kommt.


    Puhh.. ich hab allein für dieses Projekt so viele Ideen. Ich kann die jetzt nicht alle runterschreiben. Wie weit konnte ich euch denn mit der Idee mitnehmen?


    Fischkralle: Was meinst du mit Heuristik?
    Vergesst auch bitte meine Fragen aus dem Initialpost nicht :* .
    Wenn euch noch was anderes unklar ist, zögert nicht mich zu fragen. Gern auch per PN, falls es im Forum sowas gibt.

    Ich mach es erstmal in ASCII-Art. Ich gebe euch ein paar simple Beispiele.


    Aktivierend:

    Code
    Input:      Output:
      O---------->O

    Liegt am Input eine 1 an, wird der Schwellenwert des Neurons überschritten und leitet selber eine 1 weiter. Am Output kommt also 1 an.



    Hemmend: logisches NOT

    Code
    Input:             Output:
       O----------------|O
                         ^
                         |
      (1)----------------/

    Liegt hier am Input eine 1 an, feuert das Neuron eine 1. Durch die Endung --| wird am Output von den Eingangssignalen eine 1 abgezogen (Hemmung). Der Output bekommt durchgehend eine 1 geliefert. Er feuert also 1, falls 0 am Input anliegt. Andersherum feuert er 0, falls am Input eine 1 anliegt (wegen der Hemmung). Wir haben also ein NOT nachgebaut.



    Jetzt zu der Spieleidee... Stellt euch vor es sind nur ein paar Neuronen gegeben (Input und Output z.B.). Ihr bekommt eine Menge von Neuronen und Kanten (Nervenstränge nenne ich sie) und eine Aufgabe mit einem visualisierten Abnahmetest (Oszilloskop/Verlauf der Signale bei Input/Output). Löst die Aufgabe mit den gegebenen Mitteln. Ich mach es mal ganz konkret:



    Gegeben:

    Code
    Input:                     Output:
    
    
        flow                    then:
          O-->...              -->O  
        condition               else:
          O-->...               -->O

    Gesucht ist eine Vernetzung bei der gilt:

    • liegt an flow eine 0 an, sind die Output-Neuronen auch 0.
    • liegt an flow eine 1 an und

      • bei "condition" eine 0, liegt in spätestens 3 Zyklen an "then" eine 0 an und an "else" eine 1.
      • bei "condition" eine 1, liegt in spätestens 3 Zyklen an "then" eine 1 an und an "else" eine 0.

    Du hast 4 Neuronen und beliebige Kanten (hemmend oder aktivierend) mit beliebiger Gewichtung zur Verfügung (2 = Signal wird verdoppelt, 0.5 = wird halbiert).
    Die Lösung schreibe ich später rein. *arbeit arbeit*

    Ah ok... die Idee kreist bei mir schon ein paar Jahre im Kopf. Ich werde mal ein paar Zeichnungen anfertigen. Dann ist es hoffentlich klarer. Das kann aber etwas dauern, da ich demnächst in den Urlaub fahre.
    Kam die Funktionsweise der Nervenzelle zumindest einigermaßen verständlich rüber?

    Hallo zusammen,


    ich finde künstliche, neuronale Netze interessant. Insbesondere das Entwickeln neuraler Programme nach dem Buch "Bauplan für eine Seele" haben es mir angetan.


    Deshalb würde ich gerne ein Spiel entwickeln bei dem man eine Aufgabe bekommt, die man mittels Vernetzung von Neuronen lösen muss.


    Zur Erklärung: Ein Neuron ist eine Nervenzelle. Diese hat, abstrakt gesprochen, beliebig viele Eingänge und einen Ausgang. Wenn genügend Potential (Strom) über die Eingänge eingespeist wird (Schwellwert), ist die Zelle erregt und leitet das Signal ggf. verstärkt weiter. Die Eingänge können auch Potential abziehen (hemmend, nicht aktivierend). Der Schwellwert hingegen ist immer positiv, genauso wie das Ausgangspotential. Desweiteren können die Nervenstränge zwischen den Neuronen auch mit Eingängen benetzt sein. Liegt ein Potential an, wird die Verbindung gestärkt oder geschwächt, analog zu den Neuronen.


    Das Spiel stelle ich mir wie Rohreverlegen vor. Es gibt ein Level mit gegebenen Neuronen und der Spieler hat eine Menge von Neuronen und Nervensträngen und muss das Level knacken, indem das Netz ein oder mehrere Testfälle besteht (eine Melodie abspielen oder die richtige Menge Dampf aus dem Hochdruckkessel entlassen, mittels Ausgabeneuronen).


    Was ist alles möglich?

    • binäre Funktionen
    • bedingte Anweisungen
    • Schleifen
    • Filtern
    • neuronale Speicherverwaltung und Timer
    • Bilderkennung


    Hier müsste ich einige Aufgaben ausformulieren und selbst lösen.


    Meine Fragen sind folgende:
    Denkt ihr das würde Spaß machen?
    Was fehlt eurer Meinung nach?
    Habt ihr noch andere Überlegungen dazu, die ich gerade nicht erblicke?
    Sollte ich erst nen Editor bauen und dann das Spiel? Das Spiel sollte im Gegensatz zum Editor nicht voll konfigurierbar sein, da es sonst zu unübersichtlich wird und den Spieler verwirrt. Es gibt leider ne ganze Ladung an Stellschrauben. Daher denke ich es wäre sinnvoll Neuronbausteine nur in festen Konfigurationen dem Spieler zugänglich zu machen.


    Freue mich auf Antworten. 8)

    Tach,


    Ick bin der Markus und will mich auch mal in Android probieren.


    Eckdaten

    • 30 Jahre alt
    • Berliner
    • studierter Informatiker
    • 5 Jahre beruflich Programmierer
    • Hauptsprachen C# und Javascript, hab aber schon *fast* überall men Programmiernäschen drin gehabt.

    An sich hab ich immer zig Ideen, die man umsetzen könnte. Leider mangelt es dann an Zeit oder das Problem wird zu komplex.
    Beispiel: ich wollte mal nen Online-Judge-Portal entwickeln. Dazu brauchte ich ne Möglichkeit Befehle zu zählen. Also schrieb ich ne C-ähnliche Sprache und ne VM dazu. Hatte ich auch irgendwann geschafft, aber dann hatte ich schon ne andere Idee ^^. Bin voll der Code-Messi *lach*


    Jedenfalls entwickle ich gerne Sprachen. Android eigne ich mir grad an, weil ich - wer hätts gedacht - wieder ne Idee verfolge.


    Man liest sich.

    ich kann den HTTrack Website Copier dafür empfehlen. Der wandert alle Links ab und speichert alles, was du für eine lokale Kopie brauchst. Die Kopie kannste dann natürlich woanders hochladen. Allerdings solltest du eine bestehende robots.txt vorher löschen.


    P.S. gibt es auch im Play Store.

    Computer sind zwar schnell, können aber nur 8 Sachen gleichzetig (bei 8 Kernen).


    Das menschliche Gehirn besteht aus 100 Milliarden von Nervenzellen. Ein Neuron ist mit ca. 10.000 anderen Neuronen unterschiedlich stark verknüpft und hat eine Taktfrequenz von 1 kHz. Das Gehirn läuft massivst parallel.


    Ich habe mal ein Buch zur neuronalen Programmierung gelesen, "Bauplan für eine Seele" von Dietrich Dörner. Der Autor benutzt zur Programmierung ausschließlich Neuronen und kommt damit auf verständliche Weise erstaunlich weit.


    Um Gedanken zu formen ist es wichtig eine Sprache zu verstehen. Das ist der Schlüssel. Zumindest habe ich auch das aus dem genannten Buch mitgenommen.

    Jede Programmiersprache zu erklären ist etwas viel verlangt. Es gibt aber grundlegende Richtungen in die sich eine Sprache entfalten kann. Einige Richtungen die mir da einfallen sind:

    • Imperativ
    • Object oriented
    • Logisch
    • Funktional

    Die Kernprinzipien sind schnell verstanden. Der Rest ist dann hoffentlich nur syntaktischer Zucker.
    Google sei mit dir.


    Ein anderes spannendes Thema sind Übersetzer von Programmiersprachen. Siehe z.B. ANTLR.
    Unter
    https://github.com/antlr/grammars-v4
    gibt es es für unzählige Sprachen die Grammatiken. Wie im Deutschunterricht xD. Da bekommst schnell einen Eindruck wie komplex allein syntaktisch eine Sprache ist.