Einführung in die Künstliche Intelligenz 

Make Me Happy - Mach Mich Glücklich

Bevor es los geht, müssen wir ein Projekt anlegen...

  1. Öffne machinelearningforkids.co.uk und erstelle ein neues Projekt.
  2. Nenne das Projekt "MakeMeHappy". Wähle bei "Recognizing" "text" aus und setze die Sprache auf Deutsch ("German").
  3. Klicke auf das neu erstellte Projekt. Klicke auf Scratch und anschließend auf "Scratch by itself". Eventuell musst du Flash aktivieren.

Jetzt kann es los gehen...

  1. Klicke neben "New sprite" auf den Pinsel.
  2. Male ein Gesicht ohne Mund.
  3. Dupliziere deinen Charakter (2x), indem du einen Rechtsklick auf "costume1" machst und dann auf "Duplicate" klickst.
  4. Benenne die drei Kostüme in "neutral", "happy" und "sad" um.  
  5. Male entsprechend einen neutralen, einen lachenden und einen weinenden Charakter.
  6. Speichere dein Programm.

 

Das kann dann zum Beispiel so aussehen:

 

Tipp

 

Du kannst dein Programm speichern, indem du auf "File" und dann "Save Project" klickst.

 

 

 

 

 

 

Über "Load Project" kannst du ein Projekt hochladen.

 

 

Du solltest jetzt drei verschiedene Kostüme für deinen Charakter haben.

 

 

 

 

 

Damit du zwischen den Charakteren wechseln kannst, programmiere folgendes:

  1. Wechsle in den "Scripts"-Tab.
  2. Ändere - falls gewünscht - die Sprache auf Deutsch
  3. Füge den "When green flag clicked" - Block aus dem Bereich Events hinzu.
  4. Setzte das Kostüm zu Beginn immer auf Neutral. Nutze dafür den "switch costume to" - Block.
  5. Fordere eine Eingabe an und warte die Antwort ab. Nutze dazu den passenden Block aus dem Bereich Sensing.
  6. Wenn die Eingabe "Du bist toll." ist, wechsle das Kostüm zu "happy". Wenn die Eingabe "Du bist doof." ist, wechsle das Kostüm zu "sad". Dazu brauchst du folgende Blöcke:
    1. Den "if-then"-Block aus dem Bereich Control. (2x)
    2. Den "="-Block aus dem Bereich Operators. (2x)
    3. Den "answer"-Block aus dem Bereich Sensing. (2x)
    4. Den "switch costume to"-Block aus dem Bereich Looks. (2x)
  7. Klicke auf die grüne Flagge, um dein Programm zu testen.

Fertig sollte dein Programm so aussehen:

Nächste Aufgabe

  1. Erkläre deinem Sitznachbarn das Programm.
  2. Überlegt gemeinsam, wie man das Programm verbessern könnte.

Tipp

Anderen Inhalte oder Programme zu erklären ist super, denn ...

...man verinnerlicht die Inhalte besser.

...man merkt, was man doch noch nicht ganz verstanden hat.

...man nimmt die Perspektive eines anderes ein und es kommen mehr Fragen auf.

Hinweis

 

Klicke auf die Weltkugel, um die Sprache in Scratch zu ändern:

 

 

 

 

 

 

Beachte: Die Blöcke aus dem Bereich More Blocks bleiben auf Englisch.

 

Habt ihr euch überlegt, wie ihr den Code verbessern könnt?

Wenn ihr noch nicht wisst, wie ihr das, was ihr euch überlegt habt, in Code umsetzen könnt, ist das überhaupt nicht schlimm.

 

Folgend ein paar Anregungen:

  1. Ergänze eine "forever"-Schleife aus dem Bereich Control, damit du nicht jedes Mal auf die grüne Fahne drücken musst, um eine neue Eingabe zu machen.
  2. Füge nach den Verzweigungen einen "wait 1 secs"-Block aus dem Bereich Control hinzu, damit du die Reaktion deines Charakters sehen kannst. Passe die Sekunden an, z. B. auf 3.
  3. Speicher und teste dein Progamm. (Auf Folie 2 findest du ein Tipp zum Speichern.)

 

So sieht das fertige Programm aus:

Nächste Aufgabe

Damit der Charakter auch bei unbekannten Eingaben, nette von bösen unterscheiden kann, müssen wir ihn trainieren. Mehr dazu auf den nächsten Seiten.

Tipps

  • Beim Programmieren ist es oft hilfreich, Dinge einfach auszuprobieren, um zu sehen, was passiert und dann auch zu verstehen. Wichtig ist nur, dass ihr immer eine funktionierende Version eures Codes als Backup speichert. #TrialAndError
  • Pair Programming kann sehr hilfreich sein, um auf gute Lösungen zu kommen. #Inspiration #4AugenSehenMehr

                  Jetzt möchten wir unseren Charakter "intelligent" machen...

 

Bisher kann unser Charakter mit seinem Programm nur bekannte - also vorprogrammierte - Eingaben erkennen und entsprechend reagieren. Damit unser Charakter auch auf unbekannte Eingaben reagieren kann, müssen wir ihn trainieren. Dafür müssen wir zuerst ein sogenanntes Modell anlegen:

  1. Schließe den Tab mit Scratch. Öffne ggf. den Tab, wo du dein Projekt angelegt hast.
  2. Klicke auf "Back to project" und anschließend auf  "Train".

 

 

 

In dem Modell erstellen wir nun sogenannte Label. Das sind Kategorien, die wir unterscheiden wollen. In unserem Fall zum Beispiel "Nett" und "Gemein".

  1. Klicke auf "Add new label" und nenne die Kategorie "Nett".
  2. Klicke auf "Add example" und füge "Ich mag dich" als Beispiel hinzu. 
  3. Füge mindestens sieben weitere Beispiele für die Kategorie "Nett" hinzu.
  4. Wiederhole die Schritt für die Kategorie "Gemein".

Das kann dann so aussehen:

Nächste Aufgabe

  1. Klicke in deiner Projektübersicht auf "Learn and Test" und trainiere dein Model.
  2. Passe deinen Code so an, dass der eingegebene Text entsprechend der Label interpretiert wird. (Tipp: Die passenden Blöcke findest du in Scratch im Bereich More Blocks.)

Probiere es zuerst selbst. Auf der nächsten Folie findest du eine Schritt für Schritt Anleitung.

Beachte!

Wenn du dein Programm speicherst, wird nicht automatisch auch dein trainiertes Modell gespeichert. Außerdem wird das Modell automatisch nach 24 Stunden gelöscht. Es kann also sein, dass du ein neues Modell anlegen und trainieren musst.

 

 

 

 

                  Jetzt möchten wir unseren Charakter "intelligent" machen...

 

 

  1. Klicke auf "Back to project" und dann auf "Learn and Test".
  2. Um das Model zu trainieren, klicke auf "Train new machine learning model".

Wenn das Model fertig trainiert ist, müssen wir unseren Code noch anpassen.

  1. Lade dein Projekt in Scratch hoch. (Einen Tipp dazu findest du auf Folie 2.)
  2. Ergänze die "answer"-Blöcke mit je einem "recognise text (label)"-Block aus dem Bereich More Blocks.
  3. Ersetze den Text "Du bist toll." durch das Label "Gut" und "Du bist doof." durch das Label "Gemein".
  4. Teste dein Programm. Auch mit Eingaben, die du nicht als Beispiel verwendet hast.

So sieht das Programm jetzt aus:

Nächste Aufgabe

  1. Überlege, wie du dein Programm erweitern könntest. 
  2. Idee: Dein Charakter soll nur reagieren, wenn er sich einigermaßen sicher ist (Confidence > 60). Ansonsten soll die Eingabe zu den Beispielen einer Kategorie zugeordnet werden.

Probiere es zuerst selbst. Auf der nächsten Folie findest du eine Schritt für Schritt Anleitung.

Tipp

 

Das Training kann einige Minuten dauern. Während das Model trainiert, damit dein Charakter intelligent handeln kann, kannst auch du dein Wissen erweitern. Auf der Seite wird ein Quiz angezeigt inklusive Erklärungen für die Antworten. Ggf. musst du etwas herunterscrollen.

 

 

                  Jetzt möchten wir unseren Charakter "intelligent" machen...

 

  1. Ergänze einen "if-else"-Block mit dem "recognise text (confidence)"-Block als Bedingung. Setze den Wert auf 60. 
  2. Zeige ein lachendes Gesicht, wenn das Label "Nett" klassifiziert wird. Ansonsten zeige ein weinendes Gesicht.
  3. Ergänze folgendes für den else-Block:
    1. Erstelle eine Variable und nenne sie "eingabe" (Bereich Data).
    2. Frage ab, ob die Eingabe nett sein sollte. Nutze dafür einen "ask and wait"-Block.
    3. Füge einen "if-else"-Block hinzu. Wenn die Eingabe nett sein sollte, ergänze die Eingabe als Beispiel bei der Kategorie "Nett". Ansonsten bei der Kategorie "Gemein".
    4. Nutze dazu den Block "add training data" und übergebe die Variable "eingabe" und das Label "Nett" bzw. "Gemein" als Parameter.
  4. Teste dein Programm. Vergiss auch nicht, dein Programm zu speichern.

Hier siehst du das fertige Programm:

Hinweis

Sieht deine Lösung anders aus? Kein Problem! Beim Programmieren gibt es oft mehrere Ansätze, um dieselbe Lösung zu erhalten. #VieleWegeFührenNachRom

Beachte

Wenn du die Beispiele hinzufügst, sind diese noch nicht im trainierten Model enthalten. Dafür musst du über Learn&Test ein neues Model trainieren (s. vorherige Folie ).

Bist du schon fertig? Unglaublich!

 

 

 

 

 

 

 

Überlege, ob du dein Programm noch weiter pimpen kannst. Zum Beispiel so ...

  • Lasse deinen Charakter antworten. Und zwar in Abhängigkeit davon, ob die eingegebene Nachricht nett oder gemein war. 
  • Erstelle einen anderen Charakter. Zum Beispiel einen Hund, der dich böse anklefft, wenn du etwas böses sagst oder anderherum mit dem Schwanz wedelt.
  • Trainiere deinen Charakter so, dass er auch andere Eingaben erkennt. Füge dafür weitere Label hinzu.
  • Überlege, in welchem Kontext es sinnvoll sein kann, dass ein Programm Emotionen in Texten erkennen kann. Recherchiere dazu den Begriff "Hate Speech".
  • ...

Tipp

Beim Programmieren besteht ein Großteil der Zeit aus Suchen nach Lösungen im Internet. Es gibt (fast) immer jemanden, der das Problem schon mal hatte und einen Forenbeitrag aufgesetzt hat. Dort findet ihr dann häufig auch die Lösung. Ein tolles Forum ist zum Beispiel Stackoverflow. Hier findet ihr die neuesten Beiträge zu Scratch

Ansonsten:

Hier findest du ein cooles Tool, wo du künstliche Intelligenz und Bilderkennung testen kannst.

Wenn du einen Webcam hast, probiere dieses Tool oder dieses Tool.

Viel Spaß!

 

 

 

 

 

 

Nur als Lehrertipp

Infobox zu Verzweigungen

 

Um Eingaben zu unterscheiden hast du Verzweigungen verwendet:

 

 

Verzweigungen brauchst du immer dann, wenn du Fälle unterscheiden möchtest. Für die Fallunterscheidung kannst du Beliebiges vergleichen. Zum Beispiel Zahlen oder Texte.

 

Das Ergebnis ist immer Wahr oder Falsch. Nur, wenn eine Bedingung zutrifft (d.h. das Ergebnis wahr ist), werden die Anweisungen in dem Code-Block ausgeführt. Ansonsten nicht.

 

Mit Hilfe logischer Operatoren kannst du Fälle unterscheiden. Es gibt unter anderen folgende logische Operatoren:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Operator Was macht der Operator? Beispiel
Vergleiche
Ist gleich               (wahr) oder                          (falsch) 
Ist größer als 2 > 1 (wahr) oder 1 > 1 (falsch) oder 1 > 2 (falsch) 
Ist kleiner als 1 < 2 (wahr) oder 1 < 1 (falsch) oder 2 < 1 (falsch)  
Verknüpfungen
Und - Ist nur wahr, wenn beide Bedingungen zutreffen. zahl > 5 and zahl < 10 (True für 6,7,8,9)
Oder - Ist wahr, wenn eine der Bedingungen oder beide zutreffen. zahl > 5 or zahl < 10 (True für 1,2,...,6,...,10,11,...) oder
zahl < 5 or zahl > 10 (True für ...,3,4,11,12,...)
Nicht - macht aus True, False und umgekehrt not (1 != X) (True für x = 1)
if 'Bedingung1':
    'Befolge diese Anweisungen'

Wenn die Folie so bleibt ergänze ich die Beispiele mit Scratch Blöcken

Schleifen

 

Um den Code zu wiederholen hast du eine Schleife verwendet.

 

Generell kann mit Schleifen Beliebiges wiederholt werden. Du kannst Texte wiederholen, ebenso wie Zahlen oder beliebige Anweisungen.

 

Es kann definiert werden, wie oft die Befehlsfolge wiederholt werden soll: dauerhaft, mehrmals oder bis eine bestimmte Bedingung eintritt. In Scratch gibt es dazu folgende Blöcke:

 

 

 

 

 

 

 

 

 

Manchmal kann es vorkommen, dass Schleifen ungewolltes Verhalten zeigen, z. B. bei Endlosschleifen. Endlosschleifen sind meist ungewollte Dauerschleifen, in denen ein Programm “feststeckt”. Deswegen ist es immer wichtig, sich gut zu überlegen, wie die Abbruchbedingung lauten sollte. Um die Abbruchbedingung zu definieren, kannst du logische Operatoren verwenden.

 

Achtung! Verzweigungen werden häufig mit Schleifen verwechselt. Folgende Unterschiede:

  • Schleifen werden genutzt, um Dinge zu wiederholen. Eine Schleife braucht in der Regel eine Abbruchbedingung.
  • Verzweigungen werden genutzt, um Fälle zu unterscheiden. Je nach Fall werden bestimmte Anweisungen ausgeführt.
Wiederholt die Anweisungen in der Schleife dauerhaft.
Wiederholt die Anweisungen in der Schleife mehrmals. In diesem Fall 10 Mal.
Wiederholt die Anweisungen in der Schleife bis eine bestimmte Bedingung eintritt.