Wie funktioniert künstliche Intelligenz, wo ist die Schnittstelle von Soft-/Hardware?

ProUser

ProUser

Aktives Mitglied
Thread Starter
Dabei seit
15.11.2006
Beiträge
3.814
Reaktionspunkte
387
Mich beschäftigt eine grundlegende Frage: Bei der Hardware werden physikalische Gesetze der Materie, die nun mal da sind, ausgenutzt und so miteinander kombiniert, dass Bedingungen entstehen, nach denen die Einzelteile, Komponenten und das ganze Gerät schlussendlich funktioniert. Bei der Software verstehe ich es nur bedingt. Klar ist, dass auch dort Bedingungen geschaffen werden, aber: Wonach richtet sich denn alles (Hardware=phys.Gesetze) bei der Software? Ok, Computersprachen.. aber woher weiß der Computer, dass dieses oder jenes Zeichen oder Zeichenfolge genau diese oder jene Bedeutung hat? Der Computer ist doch "dumm", da ist kein Bewusstsein wie beim Menschen - wie funktioniert es?
 
aber woher weiß der Computer, dass dieses oder jenes Zeichen oder Zeichenfolge genau diese oder jene Bedeutung hat?
Er weiß es nicht. Er weiß nicht einmal, was ein Zeichen oder eine Zeichenfolge ist. Es gibt nur 1 oder 0, an oder aus, Spannung oder nicht Spannung bzw. Strom oder kein Strom. Und wenn man es ganz auf die Hardwarekleinstbausteine zurückführt: Wenn an dieser Stelle Strom fließt, dann fließt an der anderen Stelle auch welcher, sonst nicht - das ist der Transistor. Da fängt alles an. Und jetzt werden aus mehreren Transistoren komplexere Schalter aufgebaut, die abhängig von mehreren Eingängen reagieren. Daraus werden wiederum komplexere Dinge aufgebaut, die Zustände speichern können. Daraus wieder komplexere Dinge, die Zustände verknüpfen (rechnen) und immer so weiter, bis man schließlich bei einem Prozessor und Speicherbausteinen angelangt ist.
Man könnte hier die Analogie versuchen vom Einzeller bis zum Menschen und sich fragen, ob ab einer gewissen Komplexität eines Systems Bewußtsein entsteht. Eine interessante philosophische Frage (wobei der Einzeller ja schon wesentlich komplizierter als ein Transistor ist und der Mensch ja ungleich mehr Zellen hat als ein Prozessor Transistoren).
 
Danke, aber Du hast mir gerade den Teil erklärt, den ich auch verstehe, sprich: die Hardware. Wie funktioniert die Schnittstelle zwischen Software (Computersprache, Programm) und Hardware (Strom An/Aus, Transistor, Prozessor)? Woher "weiß" die Hardware, was die Software "will"?
 
Die Software selbst existiert nicht greifbar. Man sagt, daß sich Software auf einem Computer befindet, wenn sich bestimmte Speicherbausteine (die Bits speichern) in einem bestimmten Zustand befinden.
 
Damit wäre erklärt, wie die Software auf der Hardware gespeichert wird, jedoch immer noch nicht, wie diese miteinander interagieren?
 
Wie funktioniert künstliche Intelligenz, wo ist die Schnittstelle von Soft-/Hardware?
Wenn man lang darüber nachdenkt verschwimmt die Grenze und ist plötzlich weg. :confused:
Die Anordnung der Bits geschieht auf der Hardware. Im Grunde wird die
Hardware physisch verändert und "nur" konfiguriert.

Erhält die Software ihre Qualität (im Sinne vom Dasein) nicht eigentlich von uns als User der sie einfach als Software definiert?
 
Nun, vielleicht hilft, einfach mal davon auszugehen, daß es Software nicht gibt. Software ist ein Gedankengebäude von Menschen. Die Hardware weiß nicht, daß es Software gibt. Die Hardware interagiert nur mit sich selbst. Die Speicherbausteine haben zu einem bestimmten Zeitpunkt einen bestimmten Zustand. Gemäß ihrer Konstruktion wird die Maschine abhängig von diesem Zustand einen anderen Zustand einnehmen. Und beim nächsten Takt wieder einen neuen Zustand usw. Sie kann nichts dafür, sie wurde so konstruiert. Diese Abfolge von Zuständen ist aus des Menschen Sicht der Ablauf seines Programmes. Aus der Sicht der Maschine werden lediglich physikalische Gesetze befolgt.

Wenn man Software auf einen Computer "aufspielt", verändert man den Zustand der Maschine, und die Abfolge der Zustände wird sich folglich ändern. Wir nehmen das dann so war, als hätten wir ein neues Programm auf den Computer kopiert und dieses Programm gestartet. Für die Maschine ändert sich aber grundsätzlich nichts.
 
Wie funktioniert die Schnittstelle zwischen Software (Computersprache, Programm) und Hardware (Strom An/Aus, Transistor, Prozessor)? Woher "weiß" die Hardware, was die Software "will"?
Die Hardware „weiß“ das, weil sie so verdrahtet wurde. Die Software ist nur eine Bittfolge die den Prozessor durchläuft und dadurch verschiedene Zustände schaltet. Dabei ist es so, dass die einzelnen Bit Schalter(Transistoren) umlegen die bewirken, dass der Prozessor bestimmte Aktionen ausführt.

Nun gibt es dicke Handbücher die Beschreiben wie der Prozessor auf bestimmte Bitfolgen reagiert. Wenn man nun ein Programm schreibt und es durch einen Compiler jagt, sorgt der dafür, dass der Quellcode in derartige Bitfolgen umgewandelt werden, dass das Programm auf dem Prozessor so ausgeführt wird, dass das Ergebnis dem entspricht was durch den Quellcode beschrieben wird.
 
Die Hardware „weiß“ das, weil sie so verdrahtet wurde. Die Software ist nur eine Bittfolge die den Prozessor durchläuft und dadurch verschiedene Zustände schaltet. Dabei ist es so, dass die einzelnen Bit Schalter(Transistoren) umlegen die bewirken, dass der Prozessor bestimmte Aktionen ausführt.

Nun gibt es dicke Handbücher die Beschreiben wie der Prozessor auf bestimmte Bitfolgen reagiert. Wenn man nun ein Programm schreibt und es durch einen Compiler jagt, sorgt der dafür, dass der Quellcode in derartige Bitfolgen umgewandelt werden, dass das Programm auf dem Prozessor so ausgeführt wird, dass das Ergebnis dem entspricht was durch den Quellcode beschrieben wird.

Danke, genau darum geht's mir.. Was ist der Compiler, kann man es noch etwas genauer ausführen?
 
Wenn ich mal auf der abstrakten Ebene bleibe:
Der Compiler transformiert eine Folge von Bits in eine andere Folge, so daß die neue Folge eine bestimmte Maschine dazu bringt, eine Folge von Zuständen anzunehmen, die der Programmierer als sinnvoll erachtet.

Wenn man nun eine Folge von Bits nach bestimmten vom Menschen festgelegten Regeln als Zahlen und Buchstaben interpretiert, so übersetzt der Compiler eine für den Menschen leichter lesbare Buchstabenfolge (das Programm in einer bestimmten Programmiersprache) in eine Bitfolge, die für die bestimmte Maschine so passend ist, daß sie eben die gewünschten Zustände einnimmt. Der Programmierer muß also die passende Bitfolge für die Maschine nicht kennen.
Wieder etwas wärmer gesprochen: Der Compiler übersetzt ein Programm, geschrieben in einer für den Menschen gut lesbaren Programmiersprache in den Maschinencode.
 
Soviel ist mir jetzt klar:

1. Weil der Mensch weiß, wie die Maschine funktioniert, weiß er auch was er eingeben (programmieren) muss, damit er das gewünschte Ergebnis bekommt.

2. Und weil der Maschinencode für den Menschen zu umständlich ist, gibt es den Compiler als Übersetzer zwischen Programmiersprachen und Maschinencode. Ist ähnlich wie der Postprozessor, der zwischen 3D CAD/CAM und CNC übersetzt.

3. Dieser Punkt ist mir aber noch nicht schlüssig - wie schafft es die Maschine, den Maschinencode richtig zu interpretieren und (wie vom Menschen gewünscht) auszuführen?
 
3. Dieser Punkt ist mir aber noch nicht schlüssig - wie schafft es die Maschine, den Maschinencode richtig zu interpretieren und (wie vom Menschen gewünscht) auszuführen?

Mal angenommen, der "Computer" besteht aus einem Berg und einer Kugel. Es gibt drei Ausgangszustände: Die Kugel sitzt auf der Bergspitze, dann bleibt sie im Idealfall auch da liegen. Setzt man die Kugel etwas weiter links auf ("links oben"), wird sie nach links rollen, setzt man sie etwas weiter rechts ("rechts oben") auf, wird sie nach rechts rollen. Man hat dann also drei Ergebniszustände: links unten, Mitte oben, rechts unten.

Der Programmierer programmiert den Computer nun, in dem er ihn in einen Zustand versetzt, und zwar beispielsweise in den Zustand "Kugel links oben". Der Computer weiß weder, daß es sich dabei um Maschinencode handelt noch, daß es sich um irgendeinen bestimmten Zustand handelt. Er folgt einfach den physikalischen Gesetzmäßigkeiten: Die Kugel rollt nach links unten.

Ob dies nun "richtig" im Sinne des Programmierers ist, weiß unser Mini-Computer nicht. Das muß der Programmierer einschätzen. Er muß den Computer so programmieren, daß dieser das gewünschte Ergebnis liefert. Wenn der Programmierer das Ergebnis als "falsch" betrachtet, dann hat er den Computer falsch programmiert oder der Computer ist kaputt.

Im übertragenen Sinne hat unser Mini-Computer den Maschinencode "Kugel links oben" nun interpretiert, die entsprechende Operation ausgeführt und das Ergebnis lautet "Kugel links unten".
Wenn man davon spricht, daß die Maschine etwas "interpretiert", dann bewegt man sich von der Schnittstelle Software/Hardware schon wieder weg und gibt eben dem Maschinencode schon wieder etwas stoffliches. Maschinencode und Software existieren eben nur in der Gedankenwelt des Menschen. Die Maschine macht, was die Physik will und der Mensch glaubt, es sei sein Programm, was da läuft.
 
Der Computer verwirrt hier nur! Er ist auch gar nicht nötig. Computer sind nur ein hochtechnisch und daher besonders geeignetes Mittel. Schau Dir die Funktionsweise von einfachen Maschinen an, etwa dem Halbaddierer, der Turing-Maschine oder der Funktionsweise von Markov-Ketten!

Ein Computer ist die Ansammlung von Speicherstätten kombiniert mit Verschiebeanweisungen. Etwa so wie ein Zauberwürfel (Hardware) und der Aufzeichnung einer vorgegebenen Zugfolge (Software) um zu einem besonderen Muster/Ziel zu kommen. Mehr nicht.


Insbesondere hat Software nicht zwingend etwas mit künstlicher Intelligenz zu tun. Meist ist es eher der profane Fall der bornierten Abarbeitung eines komplexen Rezeptes (schiebe den Inhalt von a nach b, addiere 7, schiebe den Inhalt von b d,...). Dabei sind schiebe und addiere nicht etwa Dinge die ein Rechner "versteht" sondern Namen für feststehende Verfahren die der Rechner einfach "mechanisch" ausführt.


Die Simulation von Intelligenz mit formalen Sprachen ( das sind Computersprachen) sind letztlich nichts weiter als ein ermitteln von Reaktionen auf Aktion vermittels Wahrscheinlichkeiten. Wenn man so will komplexere Addierer die je nach Umgebung etwas anders addieren und das so das es für einen menschlichen Betrachter von außen quasi-intelligent wirkt.
 
Zuletzt bearbeitet:
Künstliche Intelligenz gibt es nicht.

Ein Computer ist nicht intelligent, noch nicht mal künstlich.

Alex
 
Der Begriff "Künstliche Intelligenz" existiert aber schon und findet in Forschung und Entwicklung durchaus seine Anwendung - dass es sich dabei um keine wirkliche Intelligenz handelt, ist denke ich den meisten Menschen klar.

Der Kernpunkt meiner Frage (die mehr technischer Natur war und weniger philosophisch) ist noch nicht vollständig beantwortet, aber wahrscheinlich muss man das eine oder andere Buch dazu gelesen haben.

Abschließend könnte man vielleicht sagen: Programmieren ist intelligente Ausnutzung von physikalischen Gesetzen, denen die Hardware unterworfen ist und nach denen sie funktioniert, weil so konzipiert.
 
Wie wäre es der Einfachheit halber, den Ansatz vom anderen Ende aufzuzäumen? Was ist Intelligenz? "In der Psychologie ist Intelligenz ein Sammelbegriff für die kognitive Leistungsfähigkeit des Menschen, also die Fähigkeit, zu verstehen, zu abstrahieren, Probleme zu lösen, Wissen anzuwenden und Sprache zu verwenden." (Wikipedia, weil es schön kurz ist…)

Das heißt per Definition ist Intelligenz eine menschliche Eigenschaft. Der Begriff Artificial Intelligence wurde geschaffen um die Abgrenzung zum Menschen zu machen, er meint eigentlich nur, das eine Maschine im Sinne eines Menschen kognitiv, abstrahierend zu verstehen und zu lösen in der Lage ist. Dazu "befähigt" ihn die Software, die streng genommen nur in einer Hochsprache verfasste Regeln sind, die ein Compiler in Assembler übersetzt, jene Maschinensprache, die widerum nur eine Folge von Zahlen darstellt. (Vor langer Zeit habe ich noch direkt in Assembler programmiert, auf einem C64, dessen 8 Bit Assembler noch recht leicht handhabbar war…)

Diese Definition ist der unumstrittene Teil, die Frage nach Intelligenz in Verknüpfung mit dem freien Willen (und diese wählen viele Menschen gern als Abgrenzung) ist nicht mal Ansatzweise geklärt, weder für Mensch, noch für Maschine ;). Der Unterschied besteht letztlich nur in der Komplexität der Verknüpfung von Regeln. Die Maschine ist binär und im Vergleich zum Gehirn wenig komplex, das menschliche Gehirn über synaptische Verknüpfung in variirender dreidimensionaler Anordnung weit stärker komplex und nicht nur binär verbunden.
 
Ich halte den Begriff des Computers ("Berechners") in diesem Umfeld auch für sehr unglücklich. Künstliche Intelligenz hatte ja einst das Ziel, die wirkliche Intelligenz des Menschen nachzubilden. Daher ist diese Diskussion auch ins das Philosophische abgedriftet. Programmieren selbst hat aber zuerst rein garnichts mit künstlicher Intelligenz zutun. Wenn du so willst, ist jedes Lebewesen ein Computer, der ein oder mehrere bestimmte Programme abarbeitet, je nach dem welche Eingaben er erhält. Die Hardware sind Hirn, Rückenmark (CPU) und verschiedene Muskeln (Aktoren).

Zum Begriff des Programmierens wurde auch schon einiges gesagt. Da geht es darum, eine Folge von Befehlen so logisch abzuarbeiten, dass nach n Befehlen die Maschine (ich reduziere hier beabsichtigt von Computer auf Maschine) in einem definierten Zustand anhält, um weitere Befehle entgegenzunehmen. Dabei sind in der Forschung Maschine auch eher theoretische Gebilde (Turing-Maschine, Deterministic-Finite-Automaton - DFA, Push-Down-Automaton PDA/Kellerautomat,...), die zeigen, dass eine folge von logischen Entschlüssen (Befehlen) in diese definierten Endzustand übergehen können, in dem die Maschine weiß, dass ihr Programm abgelaufen ist.

Diese Überlegungen wurden dann in Hardware-Maschinen überführt. Ein schönes Beispiel ist die Lochstreifen-Maschine. Sie wird mit einem Streifen Papier oder Pappe (oder ein anderes flexibles Material) mit einer endlichen Zahl von Löchern in verschiedenen Abständen und Anordnungen durch ein Lesegerät geführt, welches dann verschiedene Operationen wie Addieren oder Multiplizieren durchgeführt hat. Die Anforderungen stiegen an solche Maschinen, weshalb sie immer komplexer wurden. Der Transistor wurde erfunden, welcher solche Zustände von offen zu geschlossen der Lochstreifen durch seine elektrische Schaltung verwirklicht. Allen sind Grundprinzipien der Logik unterstellt, welche (Halb-/ und Voll-)Addierer, Shifter und ähnliche Konstrukte in Prozessoren und Speicherbausteine verwirklichen. Ihre Programme sind wie schon in den Maschinen eine Folge von Bit's, die ihnen sagen, wie sie sich schalten sollen, um zu einem bestimmten gewünschten Zustand zu gelangen.

Diese Programme sind allerdings in sich noch recht primitiv. Ein Computerprogramm wie wir es hier vor der Nase haben, besteht aus mehreren Millionen solcher kleinen Programme. Sie schalten Bits um, um Farbe zu berechnen, Buchstaben anzuzeigen usw. Farben und Buchstaben sind für den Computer auch nur Zahlenfolgen. Er schaltet sie durch und leitet sie an eine Ausgabe weiter, welche dann einen anderen Computer enthält, der die Farben für sich interpretiert und in für uns sichtbare Signale umwandelt. Erst dann hat das Programm für uns einen Sinn.

Nach diesem Exkurs zurück zur künstlichen Intelligenz. Künstliche Intelligenz ist eine Idealvorstellung. Derzeit existiert sie nur in der Theorie. Sie beinhaltet nicht nur das instinktive Abarbeiten von Programmen sondern auch eine Lernfähigkeit. Die Programme sollen aus ihren Vorgängen und den Eingaben die sie erhalten lernen und sich selbst verändern und anpassen. Die dafür nötigen Vorgänge sind jedoch so komplex und beinhalten eine solche Datenflut, dass sie derzeit noch immer nur schwer zu realisieren sind.

Ich hoffe, die gefallenen Stichworte und Ansätze haben dir geholfen, etwas tiefer in die Materie einsteigen zu können. Wir haben hier wirklich nur an der Oberfläche gekratzt. Um das alles in Gänze zu verstehen, lernen manche Menschen Jahrzehnte lang. Da kann ein einzeiliger Abriss nur sehr ungenau sein.
 
ProUser schrieb:
Der Kernpunkt meiner Frage (die mehr technischer Natur war und weniger philosophisch) ist noch nicht vollständig beantwortet, aber wahrscheinlich muss man das eine oder andere Buch dazu gelesen haben.

diverse Vorlesungen sind dafür nötig ja :jaja:

ProUser schrieb:
Abschließend könnte man vielleicht sagen: Programmieren ist intelligente Ausnutzung von physikalischen Gesetzen, denen die Hardware unterworfen ist und nach denen sie funktioniert, weil so konzipiert.

NEIN! Die Physik ist nur Mittel zum Zweck, es geht auch ohne! Wir reden hier von Informationsverarbeitung. Information ist prinzipiell ersteinmal masselos und kann daher beliebig schnell übertragen werden. Es geht schlicht um Logik (Aussagen-, Prädikaten oder Fuzzylogik z.B.) und um Transformationen von Ausgangs- in Ergebnismengen, also algebraische Abbildungen. Das ist eigentlich alles.
 
NEIN! Die Physik ist nur Mittel zum Zweck, es geht auch ohne! Wir reden hier von Informationsverarbeitung. Information ist prinzipiell ersteinmal masselos und kann daher beliebig schnell übertragen werden. Es geht schlicht um Logik (Aussagen-, Prädikaten oder Fuzzylogik z.B.) und um Transformationen von Ausgangs- in Ergebnismengen, also algebraische Abbildungen. Das ist eigentlich alles.

Dem TE ging es aber doch um die Verbindung von Hard- und Software, nicht darum, was Programmieren allein bedeutet. Also brauchen wir die Physik. Softwareprogrammierung ist ein Gedankengebäude des Menschen, das funktioniert freilich auch ohne Maschine. Aber der TE wollte wissen, warum die Maschine der Software gehorcht.
 
Der Begriff "Künstliche Intelligenz" existiert aber schon und findet in Forschung und Entwicklung durchaus seine Anwendung - dass es sich dabei um keine wirkliche Intelligenz handelt, ist denke ich den meisten Menschen klar.

Er wird aber auch in Forschung und Entwicklung durchaus kritisiert, und von einigen durch genauere Begriffe, wie "regelbasierte Systeme" o.Ä. entsetzt.

Zum Thema: Ich bin nicht sicher, ob ich den Kern Deiner Frage richtig verstanden habe, aber wenn ja, dann ist es sicherlich einfacher, sich einmal mit der Geschichte der Programmierung zu beschäftigen. Dinge werden oft klarer, wenn man sie simplifiziert.

Die ersten Computerprogramme wurden noch in Hardware gelötet. Da wurden dann wirklich Schaltkreise geändert. Das Programm war dementsprechend nicht änderbar.
Hier ist offensichtlich, wie die Programmierung die Hardware beeinflußt.

Später kam man zum Beispiel auf die Idee, Programme mit Lochbändern oder -Karten in den Computer zu bringen. Ich denke, auch hier ist der Zusammenhang, wie das Programm auf die Hardware wirkt noch sehr deutlich.

Unsere heutigen, interaktiven Systeme sind nicht so gut geeignet, diesen Zusammenhang so klar zu verdeutlichen.

Gruss

Alex
 
Zurück
Oben Unten