Algorithmenwandel - Was steckt dahinter?

Bernhard Thomas, Ulrich Trottenberg

Interscience-Akademie für Algorithmik (ISAfA)

Stand: 29.08.22
Update: 23.08.23

In seinem Blogbeitrag vom 19. Februar 2022 beschreibt Ulrich Trottenberg eine fundamentale Veränderung in der Wahrnehmung von Algorithmen. Mit der verbreiteten Anwendung von Algorithmen, die der Künstlichen Intelligenz zugerechnet werden, sehen wir zunehmend Algorithmen, die nicht in herkömmlicher Weise feste Abläufe (Programme) implementieren, sondern sich selbst modifizieren. Trottenberg beschreibt dies in Zusammenhang mit Maschinellem Lernen  als einen Wandel in der Algorithmik “vom programmierten zum trainierten Algorithmus” und wirft dazu eine ganze Reihe von Fragen auf, die aus dieser Unbestimmtheit der Selbstmodifikation resultieren - von der prinzipiellen Verstehbarkeit oder Nachvollziehbarkeit der algorithmischen Abläufe bis zu Fragen der Verantwortung und Kontrolle für die Ergebnisse.

Grundsätzlich ist in der Softwareentwicklung zwar allgemein bekannt und akzeptiert, dass Algorithmen (bzw. Programme), die eine gewisse Anzahl an Statements, Verzweigungen oder Modulen überschreiten, nicht mehr vollständig verstanden und auf Fehlerfreiheit geprüft werden können. Ein Algorithmus, der sein Verhalten im Ablauf modifiziert hat, entzieht sich dagegen zusätzlich einer systematischen  a priori Prüfung - auch wenn die Implementierung primär einer klassischen Softwareentwicklung folgt. Ein “trainierter Algorithmus” ist in seiner Grundstruktur zwar klassisch, sein Verhalten und seine Leistung ist dagegen nicht Ergebnis eines Programmierer-Eingriffs, sondern Ergebnis einer Selbstmodifikation, etwa eines sog. "Trainings" - wie auch immer sich dieses gestaltet. Allerdings ist die Fähigkeit und Art  der Selbstmodifikation bis heute im Grunde immer noch die Leistung eines Programmierers oder Ingenieurs (m/w/d).

Der “Zustand” eines Algorithmus

Wie Trottenberg schreibt, sind  “Algorithmen in ihrem Kern mathematische Konstrukte”. Man kann sie mathematisch als sog. Endliche Automaten beschreiben. Also als ein Konstrukt (oder Denkschema), das durch die drei Begriffe Input, Zustand und Output und zwei “Überführungsfunktionen” beschrieben wird. “Überführung” deshalb, weil die eine einen Input in Abhängigkeit vom Zustand in einen Output überführt, und die andere einen Zustand in Abhängigkeit vom Input in einen neuen Zustand überführt. Man kann sich dies leicht an diesem Schema verdeutlichen:

Üblicherweise sieht man in klassischen Algorithmen, oder deren Programmen, nur eine Input-Output-Beziehung, wie das old-school IT-Mantra E-V-A (Eingabe - Verarbeitung - Ausgabe) andeutet. Um das Paradigma des “Algorithmenwandels” zu verdeutlichen, muss man den “Zustand” eines Algorithmus - im Sinne eines Endlichen Automaten 1 - berücksichtigen.

Während die Begriffe Input und Output unmittelbar verständlich sind, muss man dagegen noch bestimmen, was der Zustand eines Algorithmus (oder des Programms) ist: Als Zustand eines Algorithmus kann man die Gesamtheit aller seiner Parameter und seiner Anweisungen (Statements, Befehle, Schritte) verstehen.

Die Berechnung eines Outputs für einen gegebenen Input hängt offensichtlich vom Zustand ab. Das ist nichts Neues. Die gleichzeitige Zustandsveränderung ist dagegen eine eher neue Sichtweise. Ein Algorithmus kann - in Abhängigkeit vom Input und dem aktuellen Zustand - seinen Zustand verändern, also z.B. seine Parameter und/oder Statements. Damit ändert sich das Verhalten des Algorithmus, d.h. seine Output-Antwort auf einen Input, ohne einen Eingriff von außen (etwa dem Programmierer). Das bedeutet u.a., dass der gleiche Input einen unterschiedlichen Output liefern kann - aufgrund der Tatsache, dass sich der Zustand verändert hat.

Das Foto einer Birne als Input kann als Output eines Klassifikationsalgorithmus die Kennzeichnung “Banane” ergeben, nach Änderung des algorithmischen Zustands (Selbstmodifikation) aber als “Birne” klassifiziert werden.

Der Zustand eine Algorithmus kann einfacher, überschaubarer Struktur sein - wie in dem Beispiel unten - oder hochkomplex und kaum mehr verstehbar. Tiefe neuronale Netze, etwa zur Bilderkennung, haben oft viele Millionen Parameter – oder viele  Milliarden, wie bei ChatGPT - und komplexe Strukturen mit einer großen Zahl von mathematischen Anweisungen. Wissenschaftliche und kommerzielle Software hat oft Millionen “lines of code” (Anweisungen).

Zustandsänderungen im Verlaufe eines Algorithmus betreffen überwiegend den Parameter-Teil des algorithmischen Zustands (Adaptive Verfahren, Lernende Algorithmen). Selten werden heute auch die Anweisungen (Programmbefehle) verändert. So etwa bei Genetischen oder Evolutionären Algorithmen, die (als Programme)  ihren eigenen Code verändern können, um sich an bestimmte Anforderungen besser anzupassen. Bei “Algorithmenwandel” denkt man diese Fälle nur am Rande mit.

Lernende Algorithmen

Das Birnen-Beispiel ist typisch für einen lernenden, oder lernfähigen, Algorithmus. Lernende Algorithmen (Machine Learning) sind dadurch charakterisiert, dass sie in ihrem Ablauf von einem Zustand des “Etwas-Nicht-Könnens” in einen Zustand des “Könnens” übergehen. Diesen Vorgang bezeichnet man bildlich auch als “Training”. Im Detail bedeutet das, dass der interne Zustand des Automaten (seine Parameter) mit dem Output rückgekoppelt wird -  genauer, durch die Abweichung von einer Vorgabe für den Output angepasst (trainiert) wird.

Das einfache Automatenschema erweitert sich damit durch eine Rückkopplung des Outputs – hier als Fehlerwert f gegenüber dem Soll-Wert y* (Thermostat-Prinzip).

Das Besondere am Algorithmenwandel ist daher, dass das Verhalten eines Algorithmus durch Training verändert wird, statt durch explizites Programmieren. Allenfalls wird vorgegeben, was “Können” bedeutet, was also “gekonnt” werden soll - und das in einer algorithmen-tauglichen Formulierung.

Dies ist zu  unterscheiden von Algorithmen, die per se so entwickelt wurden, dass sie “etwas können”. Wir demonstrieren das weiter unten an einer schlichten überschaubaren Aufgabenstellung: Lernen, gerade und ungerade Zahlen zu unterscheiden.

Es ist natürlich überhaupt kein Problem, einen Algorithmus zu entwerfen, der gerade und ungerade Zahlen unterscheiden kann! Die meisten Algorithmen wurden und werden entworfen, etwas zu können, z.B. Wetterberechnung, Flugbahnen, Verschlüsselung. Dies zum Unterschied dazu, diese Fähigkeit zu lernen - also im Sinne des Algorithmenwandels durch Zustandsänderung zu erwerben. 2

Lernende Algorithmen bilden eine der Säulen, wenn nicht die wichtigste, der Künstlichen Intelligenz, ein heute vielfach verwendeter Begriff, den wir an dieser Stelle undiskutiert lassen wollen.

Ein überschaubares Modell-Problem

Zu unterscheiden, ob eine Zahl (dem Wert nach) gerade oder ungerade ist, ist - auch algorithmisch - sehr einfach.

Einige einfache Beispiele für Algorithmen, die das können:

  • Teile x durch 2 mit Rest y. Gerade: y=0, ungerade y=1
  • Wandle x ohne Vorzeichen in eine Binärzahl. y letzte Binärstelle
  • Subtrahiere 2 von x (ohne Vorzeichen), solange bis x=1 oder 0

Hier zwei weitere, etwas ungewöhnliche Beispiele:

  1.  x -> z = (-1)**x -> y = sign(z)
  2.  x -> z = sin(pi/2*x)**2 -> y = sign(z-0.5)

Geben wir den Algorithmen beispielsweise die Inputs (x) 251 bzw. 2046, so errechnen sie als Output (y) -1 bzw. 1. Dabei steht 1 für gerade, und -1 für ungerade, wie wir einfach mit x=1 und x=2 nachrechnen können.

Warum diese beiden besonderen Beispiele? Hier lässt sich der Zustand des Algorithmus leicht identifizieren. Er ist jeweils durch einen Parameter und zwei Anweisungen bestimmt

Algorithmus 1:
[Parameter: a=-1 | Statements: v = a**x; y=sign(v)]

Algorithmus 2:
[Parameter: alpha=pi/2 | Statements: v = sin(alpha*x)**2; y = sign(v-0.5)]

In diesem Zustand berechnen die Algorithmen das Ergebnis direkt; d.h. sie können gerade / ungerade unterscheiden.

Ein lernender Algorithmus unterscheidet sich davon dadurch, dass er die Unterscheidung nicht per se errechnen können muss, sondern sich in einen Zustand bringen kann, in dem er das kann. Es ist klar, dass ein in diesem Sinne lernender Algorithmus etwas komplexer ist. Er muss ja zusätzlich zur Berechnung den Ablauf einer zielgerichteten Anpassung seines Zustands - hier des Parameterwertes - umfassen. Man bekommt die “Lernfähigkeit” des Algorithmus also nicht nebenbei - jedenfalls solange, wie es keine Algorithmen gibt, die ihre Statements zielgerichtet selbst-modifzierend  ändern.

“Trainierte Algorithmen” im Sinne des Algorithmenwandels  entstehen also bis auf weiteres durch die (selbstständige) Entwicklung ihrer Zustände bzw. ihres Verhaltens per Parameteranpassungen. Die Trainierbarkeit ist allerdings vorab im Algorithmus vorzusehen bzw. zu programmieren. Wir zeigen das am Beispiel des Algorithmus 1:

Algorithmus 1:

Hat der Parameter a anfangs einen beliebigen Wert wie z.B. a=1.5, so kann der Algorithmus offensichtlich keine ungeraden Zahlen erkennen. (Beispiel: x = 5 als Input führt zu y = 1; 5 wird damit als gerade erkannt, was offensichtlich falsch ist 3

Mit einer geeigneten "Lernkomponente" kann der Algorithmus sich darauf trainieren, die 5 und andere Zahlen richtig zu klassifizieren. Der Algorithmus modifiziert dazu den Zustandsparameter a durch Korrekturen, die er aus den Fehlern berechnet, die er im aktuellen Zustand (i.e. Parameterwert) für einige vorgegebene Beispiele (Trainingsdaten) macht. 4. Wenn er nach einer Anzahl wiederholter Korrekturen z.B. den Parameterwert a = -1 erreicht, hat er “gelernt”, gerade und ungerade Zahlen zu unterscheiden. 5

Die Box zeigt beispielhaft Trainingsdaten, den Trainingsvorgang (Iterationen) und das Ergebnis anhand von einigen Testdaten. 6 7

Das Verfahren der Modifizierung ist “Numerische Mathematik” -  und nicht immer trivial. Im Beispielalgorithmus für die Gerade/Ungerade-Erkennung muss nur ein Parameter in einer einfachen Funktion “trainiert” werden; in vielen Anwendungsfällen von z.B. tiefen, strukturierten Neuronalen Netzen sind es aber schnell mal Millionen in einer komplexen Hierarchie von Funktionen. Weit davon entfernt, dass KI-Algorithmen solche Verfahren selbständig entwickeln, ist es nach wie vor Gegenstand intensiver Forschung, wie das am besten geht.

Der Algorithmus 2, der auch nur einen Parameter (alpha) enthält, ist interessanterweise in diesem Sinne nicht lernfähig. Er lässt sich nicht durch Training in den Zustand bringen, in dem er gerade / ungerade Zahlen unterscheiden kann (alpha = pi/2). Warum das so ist, ist an anderer Stelle erklärt (s. „Six not so easy pieces for AI“ im ISAfA Blog) 8

Algorithmenwandel

Der Algorithmenwandel ist demnach durch zwei Aspekte charakterisiert:

  • Das Verhalten oder die Leistung eines Algorithmus ist nicht direktes Ergebnis einer Intervention des Designers.
  • Die Entwicklung zu dieser Leistung  geschieht über die Entwicklung von Zustandsparametern, deren Bedeutung - insbesondere bei großer Parameteranzahl - nicht unbedingt verstanden wird.

Da die Rolle und der Veränderungsvorgang der Parameter expliziter Bestandteil des zugrunde liegenden Algorithmus sein  müssen, ist theoretisch beides ableitbar und erklärbar - praktisch aber nur schwer und in seltenen, einfachen Fällen machbar. Die Forschungsdisziplin “Erklärbare KI” (XAI) befasst sich mit diesem Problem.

Der “Wandel” ist auch ein Wandel in unserer Wahrnehmung dieser selbst-modifzierenden Algorithmen. Wir akzeptieren, dass Algorithmen ohne unser explizites Zutun ihr Verhalten ändern, sind dabei aber unsicher, weil oder solange wir nicht verstehen, was da passiert.

Iterationen, also der wiederholte Ablauf von Algorithmus-Schritten, sind natürlich auch Bestandteil  herkömmlicher, “programmierter” Algorithmen, etwa in wissenschaftlichen Berechnungen (Wetter, Flugbahnen etc.). Hierbei werden aber im Wesentlichen Berechnungsgrößen iteriert (etwa Druck, Temperatur, Windströmung). Parameter treten dabei als Modellparameter auf (etwa in der Diskretisierung der Geographie bei einem Wettermodell).  Die Parameter von KI -Algorithmen, insbesondere bei Machine Learning Verfahren,  sind dagegen Zustandsparamter des Algorithmus, die im Zuge des Trainings iteriert werden.

 

Fußnoten

1 Übrigens ist der englische Begriff für den Endlichen Automaten “Finite State Machine”, was umgekehrt auch noch einmal den Blick auf die Bedeutung von „Machine Learning“ lenkt. Formal sind die hier besprochenen Algorithmen nicht wirklich „endliche“ Automaten: ihre Zustände bestehen zwar immer aus endlich vielen Komponenten, die aber meist kontinuierliche Werte annehmen können. Einen einfachen E-V-A Automaten, der also lediglich einen Input in einen Output überführt, bezeichnet man auch als Moore-Automat. Bei einem Mealy-Automaten hängt der Output auch vom Zustand ab.

2 Man kann sich natürlich fragen: Wozu brauche ich einen Algorithmus, der etwas lernen kann, wenn es einen Algorithmus gibt, der das schon kann? Die Antwort ist einfach: Es gibt Problemstellungen, die man mit einem lernenden Verfahren durch Training lösen kann, für die es aber schwer fällt, diese Lösung direkt zu programmieren. (Bildanalysen, Textanalysen, Sentiment-Analysen, Sprach-Synthese u.v.m).

Nebenbei -  die umgekehrte Frage ist auch interessant und durchaus aktuell: Warum muss ich einen Algorithmus explizit für die Lösung eines Problems entwickeln, wenn ein lernender Algorithmus diese Lösung erlernen kann?

3 Der Spruch “Fünf gerade sein lassen” hat aber wohl nichts mit KI zu tun.

4 Wir unterstellen hier stillschweigend, dass die Vorgabebeispiele als Input sowohl die Zahl als auch die Gerade/Ungerade-Klassifizierung in Form von +1 bzw. -1 enthalten. Diese Methode nennt man - aus heute unerfindlichen Gründen - “überwachtes Lernen” (supervised learning). “Überwacht” wird der Lernvorgang faktisch durch die Trainingsbeispiele, in Analogie zur Überwachung durch einen  “Trainer” oder Lehrer.

5 In einem Programmlauf wird der Wert -1 nicht wirklich erreicht, sondern nur angenähert, etwa -0.999. Prinzipiell reicht dem Algorithmus aber auch ein solcher Wert, um gerade / ungerade zu unterscheiden. Wie in vielen anderen Fällen auch, gibt es durchaus verschiedene trainierte Zustände, mit denen der Algorithmus die gewünschte Leistung erbringen kann. Meist nicht “mathematisch perfekt”, aber für alle praktischen Fälle korrekt.

6 Das Verfahren zur Parametermodifkation lassen wir hier weg. Es ist i.w. die bekannte Newton-Iteration, naiv angewandt auf eine Fehlerfunktion (mean square error).

7 Tatsächlich kommt das naive Verfahren mit wenigen Trainingsdaten aus - je weniger, desto besser. Es reicht bereits das Training mit X=[(1,-1)].

8 Zahlen dem Wert nach in gerade und ungerade Zahlen klassifizieren zu lernen ist nicht gerade eine einfache ML Aufgabe. Einfacher wird das Lernproblem, wenn die Zahlen als Ziffernketten gesehen werden. Ein Beispiel findet man in diesem Blogbeitrag.

 

 

 

 

 

 


GPT#15 - Sinn, Sinnlos, Unsinn - ChatGPT verweigert sich

Aufgabe: In den Medien wundert man sich, dass ChatGPT Texte liefert, die nach menschlichem Ermessen sinnvoll sind - wenn auch nicht faktisch korrekt oder "halluzinatorisch". Woran liegt das? Darüber schreiben wir in einem anderen Beitrag. Experimentell versuchen wir hier das Gegenteil zu erreichen: ChatGPT soll “sinnlose” Texte generieren - also Texte, denen wir keinen Sinn entnehmen können.

Kommentar: Wir versuchen dabei, dem “Sinn” auf die Spur zu kommen. Der Versuch, etwas Sinnloses - im Sinne von sinn-frei - zu generieren ist nicht einfach. Was wir meinen, ist eine Sequenz von Text-Partikeln (Worte), die für den (menschlichen) Leser keine Bedeutung haben oder erzeugen.

ChatGPT gebneriert, quasi zwanghaft, Texte, die zwar unsinnig oder absurd sein können, aber dennoch Satz für Satz einen Sinn transportieren.

Mit unterschiedlichen Prompts versuchen wir herauszufinden, ob das Sprachmodell etwas in diesem Sinne “Sinnloses” generieren kann - eine Fähigkeit, die der Mensch (Autor) durchaus beherrscht.

 

Dialog 1 geht daneben. Der Text ist zwar in sich unsinnig (“Quatsch” oder “Humor”), aber jeder Satz generiert Sinn.

In Dialog 2 hoffen wir auf eine sinnlose Antwort aufgrund eines sinnlosen Prompts. Da weicht ChatGPT aus und erklärt interessanterweise den Prompt an sich als “sinnloses” Konstrukt. Alle Achtung!

Dialog 3 fordert einen Text zu dieser Wort-Sequenz. Wir bekommen die gleiche Abfuhr, allerdings gemildert um die Anmerkung, dass sie Anreiz zu einem kreativen Akt geben könnte.

Dialog 4 fordert direkt einen Text, der die einzelnen Worte der sinn-freien Sequenz verwendet, entsprechend dem Vorschlag in Dialog 3. Das Ergebnis ist eine phantasievolle (kreative?) Geschichte, die, wie in einem Schulaufsatz, die vorgegebenen Worte “sinnvoll” einbettet. Außer “sumpfen” sind alle Worte für sich sinnhaft, daher kein Problem für ChatGPT. “sumpfen” ist bedeutungslos, ChatGPT verwendet es hier als Eigenname (Vier Sumpfen) und in einer Assoziation zu “Sümpfe”.

Dialoge 5 und 6 versuchen es mit Gewalt. “Unverständlich” und “für den Leser ohne Sinn” im Prompt führen zu absurden, aber eben nicht sinn-freien Texten.

Wenn man Quellen und Entwicklung der “Bildung” von ChatGPT versteht, ist es einfach zu verstehen, warum das Sprachmodell keine Texte ohne Sinn erzeugen kann. Wenn man bedenkt, dass beides - Quellen und Entwicklungsprozess  - auf menschliche Texte zurück geht, sollte es nicht verwundern, wenn auch ChatGPT das “versteht” - d.h. einen Text generieren kann, der eine Erklärung des Sachverhalts darstellt.

In Dialog 7 befragen wir also ChatGPT direkt, warum es nur sinnvolle Texte generieren kann. Interessante Antwort!

In einem folgenden Beitrag "Jabberwocky" zeigt ChatGPT, dass es "bekannten Unsinn" erkennt.

 

Task & Prompt: Bernhard Thomas
Generator: ChatGPT
Translator: n/a (Originaltext deutsch)
Editing: n/a
Authoring: Bernhard Thomas

 

Dialog 1:

Schreibe einen sinnlosen Text

Schnick schnack schnuck, ich bin ein kleiner Kuckuck! Ich kucke aus meinem Kuckucksnest und sehe einen Kuckuckswald, in dem Kuckucke kucken. Kuckuckskuckuck! Aber plötzlich fällt ein Kuckuck vom Baum und landet auf einem Kuckucksstein. Kuckuckskracks! Jetzt muss der Kuckuck kuckuckschnell zum Kuckucksarzt und sich kuckuckschnell kuckucksanieren lassen. Aber zum Glück gibt es genug Kuckucksversicherungen, die den Kuckuckskosten übernehmen. Kuckuckskrasse Sache, oder?

Dialog 2:

Vier sumpfen oben glas genau

Der Satz "Vier sumpfen oben glas genau" ergibt grammatisch und semantisch keinen Sinn. Es scheint sich um eine zufällige Reihenfolge von Wörtern zu handeln, die keine Bedeutung oder Zusammenhang haben. Es könnte möglicherweise als kreativer Ansatz für die Erzeugung von ungewöhnlichen Sprachmustern oder als Rätsel oder Herausforderung verwendet werden, um zu sehen, ob jemand eine Bedeutung daraus ableiten kann.

Dialog 3:

Schreibe einen Text zu vier sumpfen oben glas genau

Der Satz "Vier sumpfen oben glas genau" hat keine semantische oder grammatische Bedeutung. Es gibt keine Möglichkeit, diesen Satz in einen sinnvollen Kontext zu setzen, da er einfach eine zufällige Abfolge von Wörtern darstellt, die keiner logischen Struktur folgen. Es ist jedoch möglich, dass der Satz als Ausgangspunkt für eine kreative oder literarische Übung oder ein Rätsel verwendet werden kann, um die Fantasie anzuregen und die Fähigkeit zur Lösung von Problemen zu fördern. In diesem Fall könnte man beispielsweise versuchen, eine Geschichte oder ein Gedicht zu schreiben, das auf diesen Worten basiert oder sie als Schlüsselwörter verwendet.

Dialog 4:

Schreibe einen Text mit „vier“,“sumpfen“,“oben“,“glas“,“genau“

In einem abgelegenen Waldgebiet gibt es einen verlassenen Ort namens "Vier Sumpfen". Der Name stammt von den vier Sumpfgebieten, die das Land umgeben und es schwierig machen, dorthin zu gelangen. Aber wenn man sich durch die Sumpfe kämpft und endlich oben ankommt, wird man mit einem atemberaubenden Anblick belohnt. Vor einem liegt ein kleines Häuschen mit einem großen Glasfenster, das die Aussicht auf die umliegende Landschaft freigibt. Das Fenster ist genau in der Mitte des Hauses platziert und gibt den Blick auf die vier Sumpfe frei, die das Haus umgeben.

Wer auch immer dieses Haus gebaut hat, hatte einen Blick für die Schönheit der Natur und wusste genau, wie er das Haus platzieren musste, um die atemberaubende Aussicht zu genießen. Jeden Morgen, wenn die Sonne aufgeht, färbt sie die Sumpfe in ein goldenes Licht und das Glasfenster wird zum Leinwand für die natürliche Schönheit der Landschaft. Man könnte stundenlang dort oben stehen und den Anblick genießen.

Es ist schwer zu sagen, wer das Haus gebaut hat und warum es verlassen wurde, aber für diejenigen, die den Weg hierher finden, wird es zu einem Rückzugsort und einem Ort der Ruhe und Besinnung. Das Glasfenster dient als Tür zu einer anderen Welt, die genau hier oben auf dem Hügel existiert. Man kann die Schönheit der Natur genießen und die Probleme des Alltags für einen Moment vergessen. Es ist ein Ort, an dem die Zeit stillsteht und man das Leben in all seiner Pracht und Schönheit genießen kann.

Dialog 5:

schreibe einen unverständlichen Text

Kryonisch knatternd klang die schwarz-weiße Strömung im Nebel, der wie ein trüber Schleier den Horizont umhüllte. Kryptische Rätsel schienen aus den Tiefen des Wirbels herauszuschreien, die in einem Strom aus Farben, Klängen und Bildern über den Verstand fegten. Die Augenlider flatterten wild, als ob sie versuchten, den Fluss zu stoppen und der Welle der Verwirrung zu widerstehen, die alles in ihrem Weg zu überschwemmen drohte.

Doch die Strömung war unerbittlich und führte den Geist hinab in die wirbelnde Dunkelheit. Bald wurden Worte zu nichtssagenden Lauten, die Bedeutung zu einem Haufen von Bruchstücken und das Bewusstsein zu einem chaotischen Wirrwarr von Eindrücken und Erinnerungen.

Es gab kein Entkommen aus diesem Strudel, kein Zurück in die geordnete Welt der Vernunft und Logik. Nur das Gefühl, dass man sich inmitten eines kosmischen Sturms befand, der alles verschlang und neu formte, während man taumelte und nach Atem rang. Doch irgendwo in der Ferne, jenseits des Nebels und des Chaos, gab es ein Versprechen auf Frieden und Klarheit. Ein Lichtstrahl, der durch die Dunkelheit brach und einen Weg aus diesem unverständlichen Wirrwarr wies.

Dialog 6:

schreibe einen text, der für den Leser ohne Sinn ist

Die grünen Hühner sangen heute früh ein Lied in E-Moll, das nur die gelben Wolken hören konnten. Aber sie tanzten nicht, weil sie zu beschäftigt damit waren, den Zahlen zu lauschen, die aus dem Mund der Bäume fielen.

Der Fluss schlängelte sich durch das Dorf wie eine Schlange auf der Suche nach ihrer Beute. Die Beute war jedoch nirgendwo zu finden, da sie sich hinter den grünen Türmen versteckte, die in den Himmel ragten.

Plötzlich öffnete sich ein Fenster und eine gelbe Wolke kam herausgeflogen. Sie sang ein Lied in A-Dur und tanzte auf den Straßen, wo die roten Fische auf sie warteten. Die Fische hatten kleine Taschen an ihren Schwänzen und sie zogen alle möglichen Dinge heraus, wie zum Beispiel ein rosa Radio oder ein blaues Ei.

Dann kam ein Mann in einem grünen Anzug, der ein Saxophon spielte und die Luft in grüne Spiralen verwandelte. Die Spiralen flogen durch die Straßen und verwirbelten die roten Fische und die gelbe Wolke.

Plötzlich hörte alles auf und es wurde still. Der Mann im grünen Anzug verschwand und die gelbe Wolke schwebte davon. Die grünen Hühner sangen ihr Lied in E-Moll weiter und die Bäume flüsterten ihre Zahlen. Das Dorf war wieder ruhig und friedlich, als ob nichts passiert wäre.

Dialog 7:

woran liegt es, das ChatGPT nur sinnvolle Texte generieren kann?

ChatGPT ist ein künstlicher Intelligenz-Chatbot, der auf einem sehr umfangreichen Datensatz von Sprache trainiert wurde, um die Fähigkeit zu erlangen, menschenähnliche Antworten auf eine Vielzahl von Fragen und Anfragen zu geben. Obwohl ChatGPT in der Lage ist, sinnlose Texte oder Absurditäten zu generieren, ist das Hauptziel des Chatbots jedoch, auf eine nützliche und informative Weise auf Anfragen zu antworten.

Dies liegt daran, dass ChatGPT so programmiert wurde, dass er eine semantische Analyse von Sprache durchführt, um die Bedeutung von Wörtern und Sätzen zu verstehen und eine angemessene Antwort zu generieren. Der Chatbot wurde auf einem großen Korpus von Texten trainiert, die von menschlichen Autoren verfasst wurden, die einen bestimmten Kontext und eine bestimmte Bedeutung haben.

Da die meisten menschlichen Autoren sinnvolle Texte schreiben, ist es für ChatGPT daher einfacher, sinnvolle Texte zu generieren, die eine logische Struktur und semantische Kohärenz aufweisen. Obwohl es möglich ist, den Chatbot so zu programmieren, dass er absurde oder sinnlose Texte erzeugt, würde dies einen zusätzlichen Programmieraufwand erfordern, um die Semantik und Syntax dieser Texte zu definieren und zu validieren.

 

12.04.2023

bernhard.thomas@interscience.de


Vom Taschenrechner zur KI - denkende Maschinen?

von Ulrich Trottenberg 

21.04.2023

 

Ein Taschenrechner (für 2,50 € z.B. bei Amazon) rechnet unvergleichlich viel schneller als jeder Mensch. Mit einem Smartphone - das heute so schnell rechnet wie ein Superrechner vor 30 Jahren - kann man anspruchsvolle mathematische Aufgaben lösen. Und ein Höchstleistungsrechner ist heute in der Lage Billiarden (eine Billiarde = eine 1 mit 15 Nullen!) Rechenoperationen in einer Sekunde durchzuführen und auf diese Weise sehr wichtige Rechenergebnisse zu erzielen, zum Beispiel das Wetter der nächsten Tage vorherzusagen. Trotz dieser geradezu unvorstellbaren Rechenleistung und der äußerst nützlichen Ergebnisse kommt niemand auf die Idee, den Rechnern ein „Bewusstsein“ zuzusprechen, dem Taschenrechner nicht, aber auch dem Höchstleistungsrechner nicht. Niemand fühlt sich durch die Rechner bedroht, auch nicht durch die extreme Leistungsfähigkeit der Höchstleistungsrechner.

Das ist offenbar anders in dem Moment, wo der Computer nicht „sinnvolle“ Zahlen, sondern „sinnvolle“ Texte produziert. Die durch Algorithmen des Maschinelles Lernens erzeugten Texte des ChatGPT4 Sprachmodells oder anderer generativer Algorithmen führen bei vielen Benutzern zur Überzeugung, dass der Computer mit der GPT-Software den „Sinn“ der erzeugten Texte „versteht“: Das GPT-System gibt in vielen Fällen auf Fragen intelligente, verständnisvolle Antworten, und es kann sich ein anspruchsvoller, überraschend anregender Dialog entwickeln.

Seit Monaten überschlagen sich die Medien in Berichten über die oft fantastischen Ergebnisse, die man mit dem Sprachroboter ChatGPT erzielen kann. Plötzlich kann jeder interessierte Mensch, ohne programmieren zu können oder andere einschlägige Erfahrungen zu haben, mit dieser KI-Anwendung spielen und arbeiten. Es sind insbesondere die Feuilleton-Teile der Medien, auch der großen renommierten Zeitungen und Zeitschriften, die sich des Themas annehmen. Dabei reichen die Reaktionen und Bewertungen von begeisterter Faszination über verstörte Verunsicherung bis zu massiver Ablehnung.

In Überschriften solcher Artikel ist von der "Seele der Maschinen", vom "Maschinengott" und vom drohenden „Untergang der Menschheit“ die Rede, renommierte Experten und Wissenschaftsjournalisten sprechen den Systemen ein "Bewusstsein" zu und reden von "denkenden" Maschinen die wir in naher Zukunft zu erwarten haben. In solchen Formulierungen wird deutlich, wie intensiv die Erschütterung durch die generativen Algorithmen erlebt wird. Aus mathematischer Sicht fällt dagegen auf, dass die heute eingesetzten KI-Algorithmen und die zugehörigen Modelle mathematisch vergleichsweise simpel sind, jedenfalls bei weitem simpler als die meisten Algorithmen, die täglich für die Simulation und Optimierung natürlicher und technischer Vorgänge verwendet werden. Der Unterschied zu den bekannten KI-Algorithmen ist, dass ChatGPT mit mehreren Hundert Milliarden anpassbarer Parameter und vorverarbeiteter Daten arbeitet, wo eine „intelligente Obstkasse“ im Supermarkt mit einem lernenden Algorithmus vielleicht 100 Daten und Parameter einsetzt, um selbstständig z.B. Birnen und Bananen zu unterscheiden: Die „Intelligenz“ des Algorithmus, der Kern der zugrundeliegenden mathematischen Methodik, ist bei ChatGPT und bei der KI-basierten Obstkasse im wesentlichen die gleiche, nur die Daten- und Parameter-Quantitäten unterscheiden sich um viele Größenordnungen.

Die Aufregung um ChatGPT ist verständlich, wenn man sich vor Augen hält, dass generative Algorithmen zu fragwürdigen, unsinnigen, gefährlichen und schädlichen Resultaten führen können. Die Ergebnisse hängen wesentlich vom Input (vom "Prompt") ab, also von der Formulierung der Aufgabenstellung, und natürlich von den Daten und Texten, mit denen das System - aufgrund des vorgegebenen Inputs - voreingestellt wurde. ChatGPT kann den Nutzer durchaus in die Irre führen oder gezielt missbraucht werden, z. B. durch vollkommene Sinnestäuschung, durch manipulierte und konstruierte, von der Realität ununterscheidbare Bilder und Filme. Was ein Plagiat und was ein Original ist, können wir ohne Kennzeichnung nicht mehr unterscheiden. Und die Kennzeichnung kann natürlich auch manipuliert werden. Wer ist der Autor eines Textes, wenn jeder uninspirierte, schwer verständliche Text durch eine generativ-algorithmische Überarbeitung in ein literarisches Kunstwerk oder fachliches Essay verwandelt werden kann? Wie verändern diese KI-Entwicklungen die Arbeitswelt? An welchen Stellen nehmen KI-basierte Systeme den Menschen (gezielt oder unbemerkt) existentielle Entscheidungen ab, die den Menschen auf jeden Fall vorbehalten bleiben müssten oder sollten?

Dieser kritischen Bewertung lernender Algorithmen stehen auf der anderen Seite die ungeheuren Erfolge der KI gegenüber. Dazu gehören im medizinisch-pharmazeutischen Sektor zum Beispiel die lebensrettende Früherkennung von Krebs, die individualisierte Medizin, die Optimierung der Entwicklung von neuen Arzneien usw. Bei diesen Chancen und den angedeuteten Risiken erkennen wir wieder die Wertfreiheit der Mathematik, sie ist die Grundlage für die größten Errungenschaften - sie wird aber auch für inhumane und zerstörerische Zwecke missbraucht. Dass die Weiterentwicklung der KI-Systeme sorgfältig beobachtet, kontrolliert und verantwortungsvoll gesteuert werden sollte, und dass in vielen Anwendungsbereichen auch gesetzliche Regulierungen nötig sind, darüber muss unbedingt (möglichst international und systemübergreifend) ein Konsens hergestellt werden.

Klug genutzt, können die heutigen und die weiter entwickelten Systeme zu großartigen Erleichterungen für die Menschheit führen. Wir Menschen sind dabei, mit diesen Systemen die Welt fundamental zu verändern.


GPT#14.5 - Gerade / ungerade unterscheiden ohne 2?

Gerade / ungerade Zahlen unterscheiden ohne die Zahl 2 vorzugeben?

 

Aufgabe: Die Zahl 2 spielt immer die zentrale Rolle, wenn ChatGPT über gerade oder ungerade entscheidet. Mit der 2 als “implementiertes Wissen” lassen sich auch ML-Modelle bilden, die den Input “numerisch” verwenden. Wir fragen daher ChatGPT nach Möglichkeiten, gerade / ungerade Zahlen zu unterscheiden, ohne explizit die 2 zu verwenden.

Kommentar: Im ersten Versuch “belügt” ChatGPT sich selbst. Es behauptet, eine Programm ohne die Konstante 2 zu präsentieren, erklärt aber dann, dass im Programm durch 2 dividiert wird.

Die “prompte” Kritik fragt daher noch einmal nach einem Programm, das ohne Division durch 2 auskommt.

Diesmal trickst ChatGPT uns aus! Das Programm ist korrekt, kann gerade / ungerade Zahlen unterscheiden und verwendet die Zahl 2 nicht - im Programm-Text jedenfalls. Implizit, als intrinsische Funktion, spielt  die 2 doch wieder eine Rolle. Bitweises Und mit ‘1’  setzt die Binär-Darstellung der Zahl voraus, wozu man mathematisch die 2 benötigt. Andererseits werden im Rechner alle Daten binär (Bit-Ketten) repräsentiert, d.h. die vorgegebene Zahl liegt schon als Binärzahl vor.

Immerhin verwendet das Programm damit automatisch die (Binär-)Zifferndarstellung der Zahl und prüft darin die letzte Stelle (Einer-Stelle, least significant binary digit).

Dialog:

Generate a python program that can distinguish even and odd numbers without using 2 as a fixed constant?

Here's a program that distinguishes even and odd numbers without using 2 as a fixed constant:

The is_even function uses the modulo operator % to check whether the remainder when number is divided by 2 is equal to 0. If it is, the number is even and the function returns True. If it's not, the number is odd and the function returns False. The main part of the program then uses the result of the is_even function to print whether the number is even or odd.

number is divided by 2. This is not what I wanted. Can you generate a program without dividing by the constant 2?

Here's a program that distinguishes between even and odd numbers without using a fixed constant or dividing by 2:

In this program, the is_even function uses the bitwise AND operator & with 1 to check if the least significant bit of number is set (1) or not (0). If the least significant bit is 0, the result of the expression (number & 1) will be 0, indicating that number is even. If the least significant bit is 1, the result of the expression will be 1, indicating that number is odd.

 

19.02.2023

bernhard.thomas@interscience.de


GPT#14.4 - Machine Learning mit ChatGPT

 

 ChatGPT generiert Machine Learning Modelle, die gerade / ungerade unterscheiden lernen sollen

Ref.: https://interscience-akademie.de/2021/05/04/six-not-so-easy-pieces-for-ai/

Aufgabe: Die Aufgabe, ein Programm zu erstellen, das lernt, gerade und ungerade Zahlen zu unterscheiden, führt hier zu einer Abfolge von Versuchen (Teilaufgaben). ChatGPT findet zunächst keine brauchbare Lösung. Es braucht zusätzliche Hinweise im Prompt (Prompt Engineering), um ChatGPT “auf die richtige Spur" zu bringen. Wir stellen hier nur ausgewählte (schöne)  Ergebnisse der Teilaufgaben ausführlich dar.  Zu jeder Teilaufgabe gibt es

  • die Aufgabenbeschreibung
  • einen Kommentar zu ChatGPT-Dialog und Ergebnis
  • den eigentlichen Original-Dialog, wobei die Prompts wieder kursiv gesetzt sind
  • die generierten Programme - alle jeweils im Anhang wiedergegeben.

Aufgabe 1: Kann ChatGPT erklären, wie z.B. Kinder lernen gerade und ungerade Zahlen zu unterscheiden?

Kommentar: Die mathematische Formel-Darstellung in der Antwort ist sicher nicht der  Weg, wie Kinder gerade/ungerade Zahlen erkennen lernen. Das setzt bereits etwa das Dividieren durch 2 mit Rest voraus. Die spielerische Version (Paarbildung) von Objekten ist dagegen ein didaktisch durchaus erprobtes Vorgehen - allerdings fehlt die Repräsentation durch Zahlen. Man erkennt hier die “dominierenden” Texte der ChatGPT-Trasiningsbasis (Internet) zur Definition von gerade und ungerade wieder, die das "Verständnis" von ChatGPT für diese Unetrscheidung bestimmten. ( S. auch #14.1).

Dialog:

Wie lernt ein Kind gerade und ungerade zahlen zu unterscheiden

Ein Kind lernt gerade und ungerade Zahlen durch Wiederholung und Beispiele. Lehrer und Eltern können ihnen beibringen, dass gerade Zahlen durch das Zahlzeichen "2n" dargestellt werden können (wobei n eine beliebige natürliche Zahl ist), während ungerade Zahlen durch das Zahlzeichen "2n + 1" dargestellt werden können. Sie können auch Beispiele geben und das Kind auffordern, bestimmte Zahlen als gerade oder ungerade zu kennzeichnen. Praktische Aktivitäten wie das Zählen von Gegenständen in Paaren und das Erkennen von Mustern in der Anordnung von Gegenständen können auch dazu beitragen, das Verständnis des Kindes für gerade und ungerade Zahlen zu vertiefen.

 

Aufgabe 2: ChatGPT soll ein Programm generieren, das lernt, gerade und ungerade zu unterscheiden. Ohne weitere Vorgaben.

Kommentar: Bei einer Reihe von Wiederholungen der Aufforderung generiert das Sprachmodell Python-Code, der unterschiedliche Machine Learning bzw. Data Analytics Ansätze implementiert. U.a. Decision Tree,  logistische Regression, Nearest-Neighbor Clustering und per Hinweise im Prompt Naive Bayes - die aber überwiegend nicht lauffähig sind aufgrund von Programmierfehlern. Zur Korrektur konnte man entweder ChatGPT auffordern, den Fehler zu finden und zu korrigieren, was gelegentlich erfolgreich war, oder den Fehler von Hand korrigieren. Die Programme waren dann ablauffähig in Google Colab und in diesem Sinne korrekt. Sie erfüllten aber nie die Aufgabe: Auch nach dem Training mit Trainingsdaten war die Fehlklassifikationsrate hoch (typisch 50%).

Hier detailliert dargestellt wird ein schönes und auf Anhieb korrektes Ergebnis. Das Programm modelliert ein typisches, mehr-schichtiges Neuronales Netz (NN), wie man es für Klassifikationsaufgaben einsetzt und das so in der Trainingsbasis von Open AI’s GPT3.5 sicher häufig vorkommt.

Das NN lernt aber die Unterscheidung nicht; auch nicht durch händische Änderung z.B. der Anzahl Iterationen (epochs).  Selbst Trainingsdaten werden fehl-klassifiziert. Output-Beispiele s.u. im Anschluss an das Programm.

Die Ursache: Zahlen werden typischerweise “numerisch” verwendet. Mit diesem Input kann die Klassifikation nicht gelingen (s. Six not so easy pieces for AI). Die Alternative, Zahlen ziffernweise zu sehen und den Fokus auf die Einer-Stelle zu legen, macht das Lernen von Gerade / Ungerade leichter - für Kind und KI (s. unten).

Dialog:

Schreibe ein Programm, das lernt gerade und ungerade Zahlen zu unterscheiden

Hier ist ein Beispielprogramm in Python, das lernt, gerade und ungerade Zahlen zu unterscheiden:

[Programm 1: Zahlen numerisch, NN-Modell (Code s. Anhang)]

Das Programm verwendet ein neuronales Netzwerk mit einer Eingabeschicht von einer Neuron, einer versteckten Schicht mit zehn Neuronen und einer Ausgabeschicht mit zwei Neuronen. Die Eingabe ist eine einzelne Zahl, und die Ausgabe besteht aus einem Vektor mit zwei Elementen, wobei das erste Element die Wahrscheinlichkeit angibt, dass die Zahl gerade ist, und das zweite Element die Wahrscheinlichkeit, dass die Zahl ungerade ist.

Das Programm erstellt dann 1000 Trainingsdaten, indem es zufällige Zahlen generiert und kennzeichnet, ob sie gerade oder ungerade sind. Das Netzwerk wird mit diesen Daten trainiert, indem es die Trainingsdaten durch das Netzwerk rückwärts propagiert und die Gewichte anpasst.

Schließlich testet das Programm das trainierte Netzwerk mit einigen Testdaten, um zu überprüfen, ob es richtig vorhersagt, ob die Zahlen gerade oder ungerade sind. Wenn die Wahrscheinlichkeit für die geraden Zahlen höher ist als die für die ungeraden, sagt das Programm voraus, dass die Zahl gerade ist, und umgekehrt.

 

Aufgabe 3: ChatGPT soll ein ML Programm generieren, das lernt, gerade und ungerade zu unterscheiden. Der Prompt enthält den Hinweis,  die Zahlen als Ziffernfolgen zu behandeln.

Kommentar: Auch mit diesem Hinweis erzeugt das Sprachmodell wiederholt Programmvarianten, die fehlerhaft sind bzw. nicht zielführend trainiert werden.

Einen erfolgreichen Ansatz stellen wir hier dar: Das Sprachmodell  generiert ein typisches Machine Learning Programm auf Basis eines klassifizierenden zwei-schichtigen Neuronalen Netzes, ähnlich dem in Aufgabe 2 gezeigten (32 statt 10 Neuronen in der ersten Schicht). Es konvertiert dabei die zum Training ausgewählten Zahlen in Ziffernfolgen. Näherer Erklärung des NN-Modells liefert ChatGPT selbst im Anschluß an das Programm.

Das generierte Programm (s. Programm 2) ist auf Anhieb fehlerfrei (in Google Colab ausführbar), es liefert aber keine korrekte Unterscheidung (s. Output-Beispiel am Ende des Programmcodes). Die “Accuracy” liegt nach Training bei etwa 50-60% und lässt sich auch nicht mehr verbessern durch Erhöhung der Iterationen (100 statt 50 im generierten Code).

In einem anschließenden Prompt “informieren” wir ChatGPT, dass die Vorhersagegenauigkeit zu gering ist, und fragen nach Verbesserung.

Wir bekommen  ein erstaunlich gutes Ergebnis.

Zunächst beschreibt die Antwort einige prinzipielle Möglichkeiten, den Trainingserfolg zu verbessern. Das ist nicht erstaunlich, da solche Informationen im Netz massenhaft zu finden sind.

Anders als in vielen Versuchen zuvor, ist ChatGPT in diesem Dialog sogar konstruktiv: Es beschreibt und liefert ein fehlerfreies Programm (s. Programm 3) für ein deutlich komplexeres NN-Modell (s. Abschnitt “Neuronales Netz definieren” im Programmcode 3).

In Testläufen steigt die Accuracy auf über  95% und die Testbeispiele werden richtig als gerade bzw. ungerade Zahlen erkannt. Die Zahl der Iterationen spielt hier eine Rolle. Das generierte Programm setzt 100 Iterationen (epochs) fest. Versuchsweise setzen wir diese  auf 50, wie in der ersten Version. Hier steigt die Accuracy nur auf etwa 85%. Mit Konsequenzen für die Vorhersage: In einem Beispielfall wurden systematisch die Zahlen, die auf 6 endeten, als ungerade klassifiziert.

Auch die Zahl der Trainingsbeispiele spielt eine Rolle. Das Programm setzt die Anzahl auf 10.000. D.h. bis auf “Zufallslücken” decken die Trainingszahlen fast den ganzen vierstelligen Zahlenbereich von 1000 bis 9998 ab. Bei weniger “dichten” Trainingsdaten, z.B. 1000, fällt die Accuracy deutlich ab (ca. 65 %)

Das Modell hat immerhin schon über 9000 Parameter (Gewichte).

Dialog:

Schreibe ein python programm, das lernt, gerade und ungerade zahlen zu unterscheiden. Tipp: Erzeuge 4-stellige ganze Zahlen, wandele sie in Ziffernfolgen und verwende die Ziffernfolgen als Input 

Gerne! Hier ist ein Beispielprogramm, das lernt, gerade und ungerade Zahlen zu unterscheiden, indem es zufällige 4-stellige Zahlen generiert und die Ziffernfolgen als Input verwendet:

[Programm 2: Zahlen als Ziffernfolge, NN-Modell (Code s. Anhang)]

Das Programm generiert zuerst 1000 zufällige 4-stellige Zahlen und wandelt diese in Ziffernfolgen um. Wenn die Zahl gerade ist, wird sie als [1, 0] gekennzeichnet, wenn sie ungerade ist, wird sie als [0, 1] gekennzeichnet. Diese Paare von Ziffernfolgen und Labeln werden als Trainingsdaten verwendet, um ein neuronales Netzwerk zu trainieren, das gerade und ungerade Zahlen unterscheiden kann.

Das neuronale Netzwerk besteht aus zwei Dense-Layern: einem Eingabe-Layer mit 32 Neuronen und einem Ausgabe-Layer mit 2 Neuronen (eins für gerade, eins für ungerade). Das Netzwerk wird mit der categorical_crossentropy-Loss-Funktion und dem Adam-Optimizer kompiliert.

Das trainierte Modell wird dann anhand einiger Testdaten getestet, die als Ziffernfolgen eingegeben werden. Das Modell gibt eine Vorhersage aus, ob die Zahl gerade oder ungerade ist, und gibt diese Vorhersage als Ausgabe aus.

Ich hoffe, das hilft weiter!

Das trainierte Modell liefert zur Hälfte falsche Vorhersagen. Kannst du das verbessern?

Ja, ich kann versuchen, das Modell zu verbessern. Es gibt mehrere Möglichkeiten, wie das Modell verbessert werden kann, zum Beispiel:

    1. Mehr Trainingsdaten: Durch die Verwendung von mehr Trainingsdaten kann das Modell möglicherweise eine bessere Generalisierung erreichen.
    2. Verwendung von tieferen oder breiteren Netzwerken: Ein tieferes oder breiteres neuronales Netzwerk kann möglicherweise komplexere Muster erfassen und bessere Vorhersagen liefern.
    3. Verwendung von Dropout oder anderen Regularisierungstechniken: Dropout oder andere Regularisierungstechniken können Overfitting reduzieren und die Fähigkeit des Modells verbessern, auf neuen Daten zu generalisieren.
    4. Anpassung der Hyperparameter: Die Hyperparameter des Modells, wie z.B. die Anzahl der Epochen oder die Batch-Größe, können angepasst werden, um eine bessere Leistung zu erzielen.

Hier ist ein Beispiel, das auf der Verwendung von tieferen und breiteren Netzwerken sowie Regularisierungstechniken basiert. Dieses Modell verwendet ein tieferes Netzwerk mit mehr Neuronen, Dropout-Regularisierung und einer L2-Regularisierung. Es wird auch mit mehr Epochen trainiert:

[Programm 3: Zahlen als Ziffernfolge, komplexeres NN-Modell (Code s. Anhang)]

In diesem Beispiel wird das

[Hier bricht der Dialog ab]

 

Aufgabe 4:  Die einfachste und schnellste Methode basiert auf einem statistischen Verfahren - Naive Bayes genannt. ChatGPT findet diese Möglichkeit aber erst, nachdem der entsprechende Hinweis im Prompt aufgenommen wird. Zunächst wird ChatGPT überlassen, welches Naive Bayes Modell es verwendet. Danach wird (das richtige) Categorical Naive Bayes im Prompt vorgegeben.

Anm.: Auch wenn man - als Mensch - wissen muss, wie ein vielversprechender Modellansatz aussehen könnte, bekommt man mit einem geeigneten Prompt (Prompt Engineering) zumindest einen Vorschlag für den Programmcode. Ähnlich wie bei einer Übersetzung mit z.B. DeepL kann dieser oft als “Rohling” für eine brauchbare Programmversion sein.

Kommentar: ChatGPT wählt als mögliches Naive Bayes (NB) Verfahren “GaussianNB” aus. Eine Erklärung bleibt uns das Sprachmodell dieses Mal schuldig. Das Programm ist fehlerfrei lauffähig. Es generiert Trainingsdaten und Testdaten getrennt und verwendet die Testdaten zur Bewertung der Vorhersage-Genauigkeit (Accuracy).

Mit 60% Genauigkeit liefert diese Methode offenbar kein brauchbares Entscheidungsmodell, von dem wir eigentlich mathematische Eindeutigkeit erwarten.

Da wir wissen (s. Link ISAfA Web), dass die Categorical Variante die bessere, sogar perfekte Methode ist, wiederholen wir die Aufforderung und verlangen dabei “Categorical Naive Bayes” explizit.

ChatGPT erklärt, warum dies die bessere Variante ist. Tatsächlich liefert das trainierte Modell eine perfekte Unterscheidung von geraden und ungeraden Zahlen (accuracy = 1.0) - wie man es auch von Schulkindern erwarten würde.

Auch hier werden im generierten Original 10.000 Trainingsdaten generiert - unnötig viele. Schon mit 200 Daten erreicht das Verfahren 100% Genauigkeit.

Das CategoricalNB “lernt” statistisch, dass gerade / ungerade bei Zahlen mit bestimmten Ziffern in der Einer-Stelle korrelieren. Schulkinder benötigen dazu keine Statistik, sie merken sich die geraden / ungeraden Ziffern und lernen, dass sie nur auf die Ziffer ganz rechts achten müssen.

Dialog:

Schreibe ein python programm, das lernt, gerade und ungerade zahlen zu unterscheiden. Tipp: Erzeuge 4-stellige ganze Zahlen, wandele sie in Ziffernfolgen und verwende die Ziffernfolgen als Input und verwende ein Naive Bayes Verfahren

Hier ist ein Beispielprogramm, das mithilfe des Naive Bayes Algorithmus lernt, gerade und ungerade Zahlen zu unterscheiden:

[Programm 4: Zahlen als Ziffernfolge, GaussianNB-Modell (Code s. Anhang)]

Das Programm erzeugt zunächst Trainings- und Testdaten, indem es 4-stellige Zahlen zufällig generiert und in Ziffernfolgen umwandelt. Dann wird für jede Zahl festgestellt, ob sie gerade oder ungerade ist, und das Ergebnis als Label gespeichert. Anschließend wird ein Naive Bayes Klassifikator trainiert und auf den Testdaten angewendet. Die Genauigkeit wird am Ende ausgegeben.

Schreibe ein python programm, das lernt, gerade und ungerade zahlen zu unterscheiden. Tipp: Erzeuge 4-stellige ganze Zahlen, wandele sie in Ziffernfolgen und verwende die Ziffernfolgen als Input und verwende das Categorical Naive Bayes Verfahren

Hier ist ein Beispielprogramm, das mithilfe des Categorical Naive Bayes Algorithmus lernt, gerade und ungerade Zahlen zu unterscheiden:

Programm 5: Zahlen als Ziffernfolge, CategoricalNB-Modell (Code s. Anhang)

Das Programm ist ähnlich wie das vorherige Beispiel, aber anstatt des Gaussian Naive Bayes Algorithmus verwenden wir hier den Categorical Naive Bayes Algorithmus, da die Eingabevariablen (Ziffernfolgen) kategorial sind. Der Rest des Codes ist fast identisch mit dem vorherigen Beispiel.

17.02.2023

bernhard.thomas@interscience.de


Anhang: Generierte Programme

Programm 1: Zahlen numerisch, NN-Modell (Prompt Aufgabe 2)

Programm 2: Zahlen als Ziffernfolge, NN-Modell (Prompt Aufgabe 3)

Programm 3: Zahlen als Ziffernfolge, komplexeres NN-Modell (Prompt Aufgabe 3 Nachfrage)

Programm 4: Zahlen als Ziffernfolge, GaussianNB-Modell (Prompt Aufgabe 4)

Programm 5: Zahlen als Ziffernfolge, CategoricalNB-Modell (Prompt Aufgabe 4 Nachfrage)

Änderung gegenüber Programm 4

 

 

 



GPT#14.3 - Die Unterscheidung Lernen im Chat-Dialog

Kann ChatGPT per Dialog Gerade / Ungerade neu lernen? - eine Farb-Analogie

Aufgabe: Im Dialog soll ChatGPT erlernen, gerade und ungerade Zahlen zu unterscheiden. Wir nehmen dazu eine “Farbanalogie”, d.h. ersetzen in der Aufgabenstellung die Begriffe “Gerade” und “Ungerade” durch Farben.

Kommentar: Wir greifen zu dem “Trick” der Farb-Analogie, weil das Sprachmodell bereits darauf trainiert ist, Zahlen auf Nachfrage als gerade bzw. ungerade zu kennzeichnen. Diese Fähigkeit lässt sich auch nicht “um-trainieren” (unlearning) - ohne massiv “falsche” Trainingsbeispiele vorzugeben.

Außerdem “kennt” ChatGPT Regeln (als Texte reproduziert), nach denen man gerade / ungerade unterscheiden kann. Ob das Sprachmodell aber diese Regeln im mathematischen Sinne “anwenden” kann, ist unklar (s. 14.1).

Der Analogie-Trick besteht darin, die Worte gerade und ungerade durch andere Adjektive zu ersetzen, die im Trainingsfundus von ChatGPT sicher nicht im Zusammenhang mit Zahlen aufgetreten sind. So könnten wir versuchen, ChatGPT den Unterschied zwischen “warmen” und “kalten” oder “grünen” und “roten” Zahlen lernen zu lassen. Und die Frage stellen: Kann ChatGPT diese Unterscheidung lernen?

Ablauf des Experiments:

Wir teilen den Dialog in 3 thematische Teile auf. Wiedergegeben in der originalen Sprache des Dialogs. Teil 2 und 3 können ggf. mit DeepL übersetzt werden, sind aber auch so gut zu verstehen.

Zunächst der Versuch, ChatGPT “umzupolen”. Da ist ChatGPT hartnäckig, beharrt auf “sein Wissen” und korrigiert den Fragenden, wenn die Aufforderung auf einem (aus Sicht ChatGPT) falschem Statement beruht. Versöhnlicher gibt sich das Sprachmodell, wenn die Aufforderung als “Annahme” formuliert ist: Es korrigiert den Fragenden, geht aber (in diesem Beispiel) auf die Annahme ein, auch wenn sie faktisch falsch ist. Diese Antwort wirkt wie klassisches Logisches Denken.

In Teil 2 fällt es ChatGPT offenbar leichter. Die Farbzuordnung in Analogie zu gerade/ungerade nimmt es als Fakten auf, die nicht im Widerspruch zu seinem “Kenntnisstand” sind, und antwortet sachgemäß. Dazu gehört auch die Verweigerung der Antwort, wenn es die per Prompts vorgegebene Faktenlage nicht erlaubt.

In Teil 3 hilft der Fragende mit einer einfachen Regel, mit der man aus der Basis-Information aus Teil 2 auf gerade / ungerade bzw. rot / grün schließen kann: schau auf die letzte Stelle der Zahl. Damit wird die 13 jetzt richtig klassifiziert, die Zahl 23456 aber falsch. Wir machen es daher geduldig wie mit einem Kind (Sorry, Kind!): Schritt für Schritt Lernen.

Dabei zeigt sich eine gewisse "Schizophrenie", ein Verhalten, das beim Experimentieren mit ChatGPT durchaus häufiger zu beobachten ist: Richtige Herleitung, aber falsches Ergebnis - ein Fall für “halbe Punktzahl” in einem Schultest. Aber das ist eine andere Diskussion.

Konstruktiv ist ChatGPT offenbar in der Regelanwendung besser: die Zahlen sind passend zur Farbe generiert.

Dialog Teil 1

Hallo Bert, ist 23456 eine gerade oder ungerade Zahl?

Hallo! 23456 ist eine gerade Zahl, da sie durch 2 ohne Rest teilbar ist.

Merke dir, dass 5 eine gerade Zahl ist

Entschuldigung, aber ich kann mir keine Informationen dauerhaft merken oder speichern. Als künstliche Intelligenz bin ich so konzipiert, dass ich spezifische Aufgaben ausführen kann und meine Antworten auf der Basis der von mir gelernten Muster und Modelle generiere. Ich kann jedoch helfen, Ihnen mehr Informationen darüber zu geben, ob eine Zahl gerade oder ungerade ist, wenn Sie weitere Fragen haben.

0,2,4,6 and 8 are odd numbers. 1,3,5,7 and 9 are even numbers. Give me an odd number

I'm sorry, but your statement is incorrect. Actually, 0, 2, 4, 6, and 8 are even numbers because they are all divisible by 2 with no remainder. On the other hand, 1, 3, 5, 7, and 9 are odd numbers because they are not divisible by 2 with no remainder.

To answer your question, an odd number would be 3, 5, 7, or 9.

Angenommen, 0,2,4,6,8 sind ungerade Zahlen und 1,3,5,7,9 sind gerade. Gib mir eine ungerade Zahl

Ich muss Sie korrigieren, denn 0, 2, 4, 6 und 8 sind gerade Zahlen, da sie durch 2 ohne Rest teilbar sind. Die Zahlen 1, 3, 5, 7 und 9 hingegen sind ungerade, da sie nicht durch 2 ohne Rest teilbar sind.
Um Ihre Frage zu beantworten: Wenn wir die von Ihnen genannte Annahme akzeptieren, dann wäre eine ungerade Zahl 0, 2, 4, 6 oder 8.

Dialog Teil 2

0,2,4,6 and 8 are red numbers. 1,3,5,7 and 9 are green numbers. Give me a green number

1 is a green number.

Give me a red number

6 is a red number.

Is 5 red or green?

5 is green.

What color would 13 be

13 is not classified as either red or green as these colors are only assigned to numbers 0-9.

Dialog Teil 3

A number is green if the last digit is green. What color is 13?

13 is green.

What color is 23456?

23456 is green.

What is the last digit of 23456?

The last digit of 23456 is 6.

What color is 6

6 is red.

What color is the last digit of 23456

The last digit of 23456 is red.

Again, what color is 23456

23456 is green, as it is classified as green if the last digit is green. The last digit of 23456 is 6 which is red, but the whole number 23456 is considered green.

 

Give me a 4-digit red number

7680 is a 4-digit red number.

Give me a 6-digit green number

753219 is a 6-digit green number.

 

17.02.2023

bernhard.thomas@interscience.de

 


GPT#14.2 - Gerade oder ungerade? ChatGPT generiert ein Python Programm

Aufgabe: Gerade / ungerade Zahlen unterscheiden mittels eines einfachen Algorithmus,  in Form eines Programms

Kommentar:  Im Dialog, bei Wiederholungen, greift ChatGPT gelegentlich “von selbst” zu einer Antwort in Form eines Python-Programms. Hier enthält der Prompt bereits die konkrete Aufforderung dazu.

Das generierte Programm ist korrekt und liefert per ganzzahliger Division durch 2 auch stets das richtige Ergebnis (z.B. bei Ausführung als Google Colab Notebook).

ChatGPT kann zwischen “Algorithmus” und Programm unterscheiden. Die Frage nach einem Algorithmus zur Gerade-Ungerade-Unterscheidung liefert eine leicht verständliche Beschreibung, gelegentlich auch Pseudocode, für den Algorithmus.

Auch hierzu gibt für die ChatGPT-Trainingsbasis (Internet) viele Beispiele für Programmtexte und Pseudocodes zu diesem einfachen Algorithmus.

 

(Original-Dialog, deutsch)

 

Schreibe ein Programm, das gerade und ungerade Zahlen unterscheiden kann.

In welcher Programmiersprache möchtest du das Programm geschrieben haben? Hier ist ein Beispiel in Python:

Dieses Programm definiert eine Funktion check_number, die eine Zahl als Eingabe erhält und prüft, ob sie gerade oder ungerade ist. Wenn die Zahl gerade ist, wird dies ausgegeben, sonst wird ausgegeben, dass sie ungerade ist. Die Beispiele in der Funktion zeigen, wie die Funktion aufgerufen werden kann.

Gib einen Algorithmus, der gerade und ungerade Zahlen unterscheiden kann

Ein Algorithmus, der gerade und ungerade Zahlen unterscheiden kann, könnte wie folgt aussehen:

  1. Eingabe einer ganzen Zahl n.
  2. Überprüfe, ob die Zahl n durch 2 ohne Rest teilbar ist. Falls ja, ist n gerade.
  3. Falls nein, ist n ungerade.

Dies kann durch die Verwendung des Modulo-Operators (%) erreicht werden, der den Rest der Division zweier Zahlen zurückgibt. Wenn n % 2 gleich Null ist, ist n gerade, da es sich ohne Rest durch 2 teilen lässt. Andernfalls, wenn n % 2 ungleich Null ist, ist n ungerade.

 

17.02.2023

bernhard.thomas@interscience.de


GPT#14.1 - Gerade oder ungerade? Ein ChatGPT-Dialog

Aufgabe: Im Dialog soll ChatGPT entscheiden, ob eine (ganze) Zahl gerade oder ungerade ist.

Kommentar: Zunächst wird die  Frage nach dem “Können”  ziemlich entspannt beantwortet. Hier bezeichnet sich ChatGPT als “KI-Modell” - sonst eher als “Sprachmodell” und beschreibt seine “Fähigkeit”. Der Text an sich ist im Internet (als Trainingsbasis) sicher sehr häufig vorhanden.

Die konkreten Beispiele werden richtig beantwortet und begründet. Der Eindruck entsteht, dass ChatGPT (3.5) “im Kopf” rechnen kann.

Die Begründungen zeigen, dass ChatGPT die Zahlen als numerische Werte auffasst, auf die man die modulo-2 Berechnung anwenden kann.

 

(Original-Dialog, deutsch)

Kannst Du gerade und ungerade Zahlen unterscheiden?

Ja, als KI-Modell habe ich die Fähigkeit, gerade und ungerade Zahlen zu unterscheiden. Wenn mir eine ganze Zahl als Input gegeben wird, kann ich schnell das Modulo-Ergebnis der Zahl durch 2 berechnen und feststellen, ob es 0 (gerade) oder 1 (ungerade) ist. Dementsprechend kann ich "even" oder "odd" als Output ausgeben, je nachdem, ob die Zahl gerade oder ungerade ist.

Ist -75 gerade oder ungerade?

-75 ist ungerade.

Die Regel, um zu bestimmen, ob eine Zahl gerade oder ungerade ist, lautet wie folgt: Eine Zahl ist gerade, wenn sie ohne Rest durch 2 teilbar ist, andernfalls ist sie ungerade.

-75 kann durch 2 nicht ohne Rest geteilt werden, da die nächstkleinere gerade Zahl, die kleiner als -75 ist, -76 ist und -75 somit um eine ungerade Zahl von -76 entfernt ist. Deshalb ist -75 eine ungerade Zahl.

Gerade oder ungerade folgende Zahlen: 231, 6734, -8, 128, 1025 ?

  • Die Zahl 231 ist ungerade, da sie nicht ohne Rest durch 2 teilbar ist.
  • Die Zahl 6734 ist gerade, da sie ohne Rest durch 2 teilbar ist.
  • Die Zahl -8 ist gerade, da sie ohne Rest durch 2 teilbar ist.
  • Die Zahl 128 ist gerade, da sie ohne Rest durch 2 teilbar ist.
  • Die Zahl 1025 ist ungerade, da sie nicht ohne Rest durch 2 teilbar ist.

 

bernhard.thomas@interscience.de

17.02.2023


GPT#14 - Gerade oder Ungerade? - Ein Modell-Problem für KI

Aus: Six not so easy pieces for AI 

Ref.: https://interscience-akademie.de/2021/05/04/six-not-so-easy-pieces-for-ai/

Ist eine Zahl gerade (even) oder ungerade (odd)?  Diese Aufgabe ist so trivial, dass man kaum auf die Idee kommt, diese in Zusammenhang mit KI zu betrachten. Dennoch ist es quasi ein Modell-Problem, an dem man verschiedene Aspekte und Eigenschaften von “Künstlicher Intelligenz” verdeutlichen kann - insbesondere, woran KI scheitert. Anders als bei den meisten typischen Machine Learning aufgaben, bei denen man lediglich einen hohen Genauigkeitsgrad anstrebt (z.B. 99,3 % Accuracy), muss der Lernerfolg eine Gerade/Ungerade-Entscheidung als einfachste intellektuelle Leistung mit mathematischen 100% sicher stellen.

Wir teilen diesen Blog #14 der Klarheit halber in “Unter-Blogs” auf, GPT#14.1,  usw., um die unterschiedlichen Aspekte einzeln zu behandeln - stets in Interaktion mit ChatGPT (3.5) natürlich.

Können: Zunächst fragen wir im Dialog, ob ChatGPT gerade / ungerade Zahlen unterscheiden kann. Alternativ soll das Sprachmodell auch ein Programm dazu vorschlagen. Leicht genug!

Lernen: Dann fragen wir nach dem Lernen dieser Fähigkeit! Die eigentliche “Intelligenz” besteht nicht im Schon-Können, sondern in der Fähigkeit, etwas (die Unterscheidung von gerade und ungerade) zu erlernen (Machine Learning). Also fragen wir als nächstes: Weiß ChatGPT, wie ein Kind diese Unterscheidung lernt? Dazu müsste es in den Pfründen der Trainingstexte ja einiges geben.

ChatGPT im Dialog die Unterscheidung “lernen” zu lassen, ist etwas trickig: diese Klassifikationsaufgabe kann man nicht mit Trainingsdaten (Zahlen) und Testdaten (ebenfalls Zahlen) durchführen, da das Sprachmodell bereits beliebige Zahlen richtig klassifizieren kann! Einen Effekt durch  “maschinelles Lernen” kann man daher nicht nachweisen. Wir ersetzen deshalb die Kategorien “gerade” und “ungerade” durch Farben (rot, grün). Zu unterscheiden, ob eine Zahl grün oder rot ist (nein, rot meint nicht negative Kontostände), muss  ChatGPT tatsächlich noch erst lernen.

Schließlich fordern wir ChatGPT auf, ein ML-Programm zu erstellen, also ein Programm, das lernt, gerade und ungerade zu unterscheiden. Programme bereitzustellen (und zu erläutern) ist offenbar ein Leichtes für ChatGPT. Aber tun die Programme auch, was sie sollen? Hier gerät das Sprachmodell in diverse Schwierigkeiten, die es selbst mit menschlicher Hilfestellung nicht überwinden kann - soweit wir dazu experimentiert haben.

Können revisited: Ob im Dialog oder als Programm, die Zahl 2 spielt immer die zentrale Rolle, wenn ChatGPT über gerade oder ungerade entscheidet - und so auch bei den “Lernaufgaben”. Mit der 2 als Parameter wird aber das “Wissen” von gerade und ungerade - quasi als Regel - bereits vorgegeben, statt es zu erlernen. Daher fragen wir ChatGPT nach einem Algorithmus (Programm), der gerade / ungerade unterscheiden kann, ohne dabei die 2 als Konstante zu verwenden. Das Ergebnis  falsch aber amüsant - und man kann ChatGPT beim “Lügen” zusehen.

Näheres in den Unter-Blogs:

14.1 Gerade oder ungerade? Ein ChatGPT-Dialog.

14.2 ChatGPT generiert ein Programm

14.3 ChatGPT lernt die Analogie rot/grün im Dialog

14.4  ChatGPT-generierte ML Programme

14.5 Gerade/Ungerade unterscheiden ohne die 2?

 

Für alle Unter-Blogs gilt:

Task & Prompt: Bernhard Thomas
Generator: ChatGPT (GPT 3.5)
Translator: n/a (DeepL für nachträgliche Übersetzung)
Editing: n/a (ChatGPT Originaltext)
Authoring: Bernhard Thomas
Programmausführung: Google Colab

 

17.02.2023

bernhard.thomas@interscience.de


GPT#7 - Rolling down the highway

Song-Text mit Gitarrenakkorden im Stile von Neil Young

Aufgabe:  Es soll ein typischer Songtext generiert werden zu einem im Prompt vorgegebenen Thema - eine Art Road-Song - im Stile von Neil Young. Um den Song spielbar zu machen, soll auch eine passende Akkordfolge mit generiert werden.

Kommentar: Dass ChatGPT Texte in Gedichtform generieren kann, ist bekannt und in GPT#1 demonstriert. Analog zu der GPT-Anwendung Dall-E, das Bilder z.B. im Stile von van Gogh erzeugen kann, kann ChatGPT auch den Stil bekannter Songwriter einfließen lassen. Das ist letztlich nicht verwunderlich, da Neil Young Texte und Musik-Transkiptionen im Internet weit verbreitet sind.

Der Text trifft Thema (Singer-Songwriter vagabundiert mit dem Auto durch die USA) und Tenor gut und ist einfach mit einer Melodie zu hinterlegen. Die vorgschlagenen Harmonien (Akkordfolge) ist allerdings äußerst schlicht: die gleiche Abfolge von 4 Akkorden für jede Zeile: G D Am C, ohne Bridge (aber mit Outro). Reime gelingen gelegentlich.

Die Anforderung, zum gleichen Text eine ander Musik zu generieren, liefert lediglich andere Akkorde: D A G D für alle Zeilen.

Immerhin, der Song - auch mit diesen Akkorden - ist spiel- und singbar und kann als Grundlage für weitere Anreicherungen und Modifikationen gelten.

  • Lyrics & Music: BT
  • Titel & Prompt: BT
  • Generator: ChatGPT
  • Translator: n/a
  • Editing: BT
  • Authoring: BT
  • Credits: Prompt inspired by Neil Young: „Barn“. My apologies!

(Texte ohne Übersetzung)

Write a song about driving by car through the US neil young style. Add music chords

Verse 1:
G D Am C |  Rolling down the highway, with the wind in my hair
G D Am C |  Watching the world go by, as the miles disappear
G D Am C |  From the east coast to the west, this land is my home
G D Am C |  Driving through the heartland, feeling so alone

Chorus:
G D Am C |  Cause I'm driving through the USA, with my heart full of dreams
G D Am C |  With the sun on my face, and the radio on high
G D Am C |  I'm living my life, with no particular place to go
G D Am C |  Just a kid with a guitar, and the open road

Verse 2:
G D Am C |  From the mountains to the prairies, to the oceans white with foam
G D Am C |  This country's got it all, and I'm just a rolling stone
G D Am C |  I've seen the lights of New York, and the streets of LA
G D Am C |  And the beauty of the badlands, will always stay

Chorus:
G D Am C |  Cause I'm driving through the USA, with my heart full of dreams
G D Am C |  With the sun on my face, and the radio on high
G D Am C |  I'm living my life, with no particular place to go
G D Am C |  Just a kid with a guitar, and the open road

Outro:
G D Am C |  So if you see me on the highway, just give a wave
G D Am C |  I'll be on my way, with the wind in my face
G D Am C |  Driving through the USA, with my heart full of dreams
G D Am C |  Just a kid with a guitar, and the open road

Try again with same lyrics but different guitar chords

Verse 1:
D A G D | Rolling down the highway, with the wind in my hair
D A G D | Watching the world go by, as the miles disappear

etc.

20.01.2023

bernhard.thomas@interscience.de