KI

Dieses Thema im Forum "Programmieren" wurde erstellt von cyber_chris2000, 22. Oktober 2001.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. cyber_chris2000

    cyber_chris2000 ROM

    Registriert seit:
    22. Oktober 2001
    Beiträge:
    3
    Ich möchte eine KI Programmieren (in Visual Basic), wer kennt Seiten die sich mit diesem Thema befassen.
    CU
    Cyber Chris
     
  2. kazhar

    kazhar Viertel Gigabyte

    Registriert seit:
    21. Juni 2001
    Beiträge:
    4.420
    Hallo Superman.

    Kurze Frage, aber leider eine ziemlich lange Antwort.

    Neuronale Netze sind eines der Hilfsmittel, um mit einem Rechner "intelligentes" Verhalten oder andere komplexere Muster zu simulieren.
    Als Beispiel meine Buchstabenerkennung: Die ist als Programm ziemlich kompliziert zu realisieren. Immerhin müssen die Informationen aus einem Bild extrahiert werden: Schon ein einziges anders gesetztes Pixel kann (aber muß nicht!) den Sinn verändern. So kann z.B. aus einem i leicht ein l werden oder aus einem v ein y.

    Man könnte das damit versuchen, buchstäblich alle möglichen Pixel-Muster für einen Buchstaben zu eruieren und zu speichern (auch für leicht gedrehte bzw verschobene) und dann mit dem zu erkennenden Bild zu vergleichen - Ziemlich mühsam, vor allem, wenn auch verschiedene Fonts eingesetzt werden sollen oder gar Handschrift.

    Eine andere Möglichkeit wäre, die Bilder in Vektorformat umzurechnen, und dann aus diesen Daten auf die Buchstaben zu schließen (ein T besteht aus 2 Linien, die aufeinender senkrecht stehen und einer der 2 beginnt in der Mitte des Anderen) - Ist schon einfacher, aber um einiges Mathematischer.

    Eine weitere Möglichkeit liegt in den Neuronalen Netzen:

    Ein Neuronales Netz besteht aus _vielen_ s.g. Neuronen ("Nervenzellen"). Ein Neuron kann eigentlich nur wenig: es kann nur Signale, die von den Ausgängen anderer - mit ihm verbundenen - Neuronen kommen, mit einem bestimmten Wert ("Gewichtung") multiplizieren und aufsummieren. Kompliziert? Ein Beispiel:
    Ein Neuron bekommt Infos von 3 anderen Neuronen, von denen jedes ein anderes Gewicht hat:

    Neuron / Gewicht / Signal / Ergebnis
    Neuron A / 2 / 1 / 2
    Neuron B / 3 / 5 / 15
    Neuron C / -2 / 6 / -12
    Summe: 5

    Anschließend vergleicht, das Neuron, ob die Summe der gewichteten Eingänge einen vorgegebenen Wert übersteigt. Tut er das, dann setzt es seinen eigenen Ausgang auf den Wert der Summe, sonst setzt es den Ausgang auf 0.

    Auch die Nervenzellen in unserem Gehirn können nicht mehr! Die enorme "Funktionsvielfalt" entsteht aus dem Muster der Verknüpfungen zwischen den Nervenzellen und den Gewichten der Verbindungen. Genauso ist das mit den Neuronalen Netzwerken.

    Ein typisches Neuronales Netzwerk besteht aus 3 Schichten, wobei die Neuronen innerhalb einer Schicht alle untereinander verbunden sind. Zwischen den Schichten gibt es ebenfalls Verbindungen.
    Die 1. Schicht ist die Eingabeschicht, in der 2. erfolgt die eigentliche Verarbeitung und die 3. Schicht ist für die Ausgabe zuständig.

    Die Anzahl der Neuronen ist nahezu beliebig und nur von der Leistung des Rechners und der Geduld des Programmierers abhängig. Je mehr Neuronen eingesetzt werden, desto genauer und flexibler wird das Netzwerk. Allerdings müssen für jedes Neuron enorme Datenmengen gespeichert werden - Die Gewichte für jede Verbindung mit einem anderen Neuron, der momentane Zustand des Neurons, der eigene Ausgang usw. Ich habe diese Daten in einer Tabelle abgespeichert, die einige MB groß war.

    Jetzt kommt nur noch die Frage, wie bekommt man den auf diese wichtigen Gewichte? Wie bringt man nun die Neuronen dazu, nicht wild durcheinander zu "feuern", sondern nach einigen Simulationsdurchgängen ein brauchbares Ergebnis zu liefern? Die Antwort lautet LERNEN. Das ist ein ziemlich langweiliger und zeitraubender Prozess, der aber zum größten Teil automatisierbar ist: Man gibt dem Netzwerk an den Eingangsneuronen ein bestimmtes Muster vor (z.b. das Pixelmuster eines kleinen Bildes, das einen Buchstaben zeigt) und läßt ein "Tool" - das "weiß" was bei den Ausgangsneuronen herauskommen soll - das Netzwerk von unten nach oben durchrechen. Anschließend werden die Gewichte so geändert, daß das Ergebnis "richtiger ist"; das passiert solange, bis das Ergebnis stimmt. Dann kommt ein anderes Eingabemuster an die Reihe. Möglicherweise muß die Prozedur wiederholt werden.

    Genaugenommen ist dieses "Tool" bzw dieses "anschließend werden die Gewichte geändert" das eigentliche KnowHow bei dem ganzen Netzwerk.

    Der Vorteil daran ist, daß man - wenn das Netzwerk modelliert und das "Tool" einsatzfähig ist - sehr leicht auf andere Aufgaben umstellen kann: Man läßt den Rechner einfach über Nacht an einem anderen Lern-Zyklus rechen. Wenn der damit fertig ist, dann erkennt das Netz eben keine Buchstaben mehr, sondern Gesichter oder geometrische Figuren. Weiters stören sich gut konstruierte Netzwerke nicht an Verzerrungen oder einzelnen fehlerhaften Eingabewerten.

    Der große Nachteil ist die Performance: Selbst auf schnellen Rechnern braucht es eben seine Zeit pro Neuron z.B. 10000 Multiplikationen und 10000 Additionen durchzuführen, wenn es z.B. 50000 Neuronen gibt. Weiters muß das Netzwerk ja nicht nur 1x pro Erkennung durchgerechnet werden sondern mehrmals, weil die Neuronen ja immer nur dann ein Ergebnis liefern können, wenn sie vorher eine Eingabe von einem anderen Neuron erhalten haben.

    Verwenden kann man die Netzwerke überall da, wo eine relativ große Datenmenge verarbeitet und in eine relativ kleine Menge von Ausgangs-Infos umgesetzt werden soll. Z.B. ein Bild wird eingegeben und es soll ein Buchstabe herauskommen (einige kb <=> eines von 2x26 Zeichen).

    mfg KazHar
     
  3. Superman

    Superman Kbyte

    Registriert seit:
    16. März 2001
    Beiträge:
    475
    was sind neuronale Netze und neuronen?????
     
  4. kazhar

    kazhar Viertel Gigabyte

    Registriert seit:
    21. Juni 2001
    Beiträge:
    4.420
    Ich hab einmal ein paar Wochen damit verbracht, neuronale Netze zu programmieren. Das ist aber schon nicht mehr wahr! Damals habe ich auf meinem 386\'er, 25 MHz mit 1 MB Ram, mit Turbo Pascal gewerkelt. Die meiste Zeit ist dafür draufgegangen, eine vernünftige Speicherverwaltung aufzubauen. *LOL*
    Ich wahr ziemlich stolz darauf ein paar tausend Neuronen simmulieren zu können. Ich hab dem System so Sachen wie Buchstabenerkennung beigebracht. War aber ziemlich langsam und ungenau.

    mfg KazHar
     
  5. cyber_chris2000

    cyber_chris2000 ROM

    Registriert seit:
    22. Oktober 2001
    Beiträge:
    3
    Hi, danke für den Tip. In welcher Sprache hast du es probiert?

    mfg CC
     
  6. kazhar

    kazhar Viertel Gigabyte

    Registriert seit:
    21. Juni 2001
    Beiträge:
    4.420
    Viel Spass, Chris!

    Daran beißen sich weltweit etliche Leute die Zähne aus. :)
    Außerdem: Visual Basic ist ziemlich ungeeignet dafür. Ich würde es mit LISP, AI, Prolog oder ähnlichen Sprachen versuchen, die haben die Datenkorrelation besser drauf.

    Wenn es Dich trotzdem interessiert, wirf mal einen Blick auf folgende Seiten:
    http://www.pcai.com/pcai/
    http://www-2.cs.cmu.edu/Groups/AI/html/faqs/lang/lisp/top.html

    Ich hoffe Du kannst damit mehr anfangen als ich 8)

    mfg Kazhar
     
  7. Redshirt02

    Redshirt02 ROM

    Registriert seit:
    10. April 2005
    Beiträge:
    2
    Aloha!

    Ich finde auch, dass Lisp, Prolog oder AI ganz gut ist um K.I. zu programmieren. Ich würde dir aber raten mit perl anzufangen. Es ist leicht zu lernen und man kann einiges damit erreichen.

    Wenn du trotzdem in visual basic programmieren willst, kann ich dir den source code eines K.I. Programms geben. (du müsstest mir eine Mail schicken, da das ganze nich hier hingepasst hat.

    Wie auch immer. Es ist bis jetzt noch keinem Menschen gelungen echte K.I. zu programmieren. Mansche Software wie ELIZA oder PROF PHREAK oder A.L.I.C.E die Intelligenz simulieren aber nicht wirklich intelligent sind.

    ein Beispiel :

    Wenn ich zu ALICE sage : "Hallo, Wie geht's?" würde sie mit "Hi, mir geht es gut" antworten.Jetzt denk man dieses Stück Software ist intelligent - ist es aber nicht , denn ALICE hat null ahnung was du gerade zu ihr gesagt hast und was sie dir geantwortet hat.

    Das Programm nimmt einfach deinen Satz auf und sucht in einer Datenbakn nach einer Antwort die zu diesem Satz passt. Sie ist sich also nicht selbstbewusst.
    Deswegen sind neuronen schon eine gute lösung, aber noch nicht ganz das was man braucht.



    Es ist noch keinem gelungen ein Programm zu schreiben, das sich selbst bewusst ist.
    Es gibt aber theorien zur lösung dieses Problems. Aber die werd ich jetzt hier nich auflisten sonst wird der Post zu lang :) .

    Wenn du willst kannst du mir eine Email schicken : maxi02_43@hotmail.com
    Dann kann ich dir vielleicht bei deinem Projekt behilflich sein.

    ---------------------------------------------------------------------------------
    Talente finden Lösungen, Genies entdecken Probleme.

    Redshirt02
     
  8. kazhar

    kazhar Viertel Gigabyte

    Registriert seit:
    21. Juni 2001
    Beiträge:
    4.420
    Irgendwie bezweifle ich, daß das noch irgendwen interessiert - NACH 3 1/2 JAHREN! :aua:
     
  9. Redshirt02

    Redshirt02 ROM

    Registriert seit:
    10. April 2005
    Beiträge:
    2
    WOW! :eek: Das hba ich voll übersehen! Naja is ja eigentlich auch egal. Aber sag mal wie weit bist du mit deinem Neuronen dings?
     
  10. poro

    poro Ganzes Gigabyte

    Registriert seit:
    31. Juli 2003
    Beiträge:
    13.635
    Die KI nennt sich jetzt kazhar.
     
  11. Schneitz

    Schneitz ROM

    Registriert seit:
    20. Juni 2005
    Beiträge:
    1
     
  12. Speedii

    Speedii ROM

    Registriert seit:
    19. August 2005
    Beiträge:
    1
    Hi,
    ich versteh ja die verknüpfung von Neuronen und so aber kann mal jemand ein konkretes Beispiel geben, wie man das genau programmiert?
     
  13. Homwer

    Homwer ROM

    Registriert seit:
    4. Oktober 2009
    Beiträge:
    1
    Ich bin angenehm überrascht in so einem Umfeld eine so gute / umfassende / quallifizierte Antwort zu finden. Normalerweise werden solche Fragen mit einem; "VB zum KI Proggen, (ich habe selber keine ahnung, aber) NOOB lern erstmal C++" beantwortet.
    Daher meinen Dank an kazhar und Redshirt02.

    Ich befasse mich auch gerade mit dem Thema oder anders gesagt es läßt mich nicht los. Daher, das Thema befasst sich mit mir.

    Aber ich will eigentlich einen anderen Ansatz verfolgen. Anstatt Medien (daten, bilder, text usw) durch wiedererkennen in verwertbaare Daten umzuwandeln möchte ich mit den schon vorhandenen Daten Arbeiten.
    Daher ein Bild von einem T daran erkennen, das der Code ein T ist.
    Oder um es anders zu sagen, ansatt ein T zu erkennen, den Code lesen und sehen, dass ein T ausgegeben werden soll.

    Das Problem daran, wie erkenne ich in einem Bild aus vielen T's das es sich um diese Handelt :D und da ist mann dann doch wieder am Anfang.
     
  14. Marcel GX

    Marcel GX Megabyte

    Registriert seit:
    27. Februar 2006
    Beiträge:
    1.528
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen