Veröffentlicht am 15-08-2019

Rückkehr zum maschinellen Lernen

Dieser Beitrag richtet sich an Künstler und andere kreative Personen, die an einer Übersicht über die jüngsten Entwicklungen in der maschinellen Lernforschung interessiert sind, die sich mit Kunst und Kultur überschneiden. Wenn Sie kürzlich die ML-Forschung verfolgt haben, werden Sie einige der Experimente vielleicht interessant finden, aber die meisten Erklärungen überspringen wollen.

Die erste KI, die mich sprachlos machte, war ein Chatbot namens MegaHAL. Ich habe eine typische Trainingseinheit mit seinem Erfinder Jason Hutchens gelesen:

Benutzer: Tu parles français?
Megahal: Ich denke schon. PARLEZ-VOUS FRANÇAIS?
Benutzer: 1793 wurde der französische König hingerichtet.
MegaHAL: HA HA HA! RICHTIG. DURCHGEFÜHRT HAT MEHRERE BEDEUTUNGEN.
Benutzer: Die Revolution begann am 14. Juli.
MegaHAL: ES IST 14 GRAD CELSIUS HIER
Benutzer: Eine weitere Revolution wurde von Lenin im Jahr 1917 in Russland durchgeführt.
MegaHAL: WÄHREND LENIN EIN BUCH LESEN.

Ich war voller Ehrfurcht.

Es stellte sich heraus, dass MegaHAL im Grunde genommen sehr geschickt war, ein einzelnes Wort aus Ihrer Eingabe auszuwählen und mithilfe einer Markov-Kette die wahrscheinlichsten Wörter zu erraten, die einem großen Korpus von Beispieltexten vorausgehen und folgen würden (ähnlich wie bei einigen Dada-Wörtern) Spiele). Aber das Lesen dieser Abschriften in der High School hatte einen großen Einfluss darauf, wie ich Computer sah, und mein Interesse an KI wirkte sich sogar dort aus, wo ich mich am College bewarb.

Nach der Hälfte des Studiums begann ich in einem AI-Labor zu forschen. Aber ich habe die meisten meiner Informatikkurse übersprungen, um an Kunst- und Musikkursen teilzunehmen, und ich habe die meiste Zeit damit verbracht, Ideen über Computerkreativität oder die Automatisierung von Online-Aktivitäten und -Identitäten vorzuschlagen. Nach ein paar zwei dieser Interjektionen setzte sich der Regisseur nach einer Besprechung mit mir in Verbindung und sagte: „Kyle, ich glaube, du bist vielleicht ein Künstler.“ Es war kein Kompliment, aber ich nahm es mir zu Herzen und fuhr fort, eine zu machen MFA.

Seitdem habe ich mich in einem regelmäßigen Muster wiedergefunden: Lernen Sie ein neues Werkzeug oder Forschungsfeld kennen, erforschen Sie es konzeptionell und technisch durch kleine Studien und fertigen Sie schließlich neue Kunstwerke, die wiederkehrende Themen aus meiner Praxis integrieren. Früher habe ich mich auf Tools wie 3D-Scannen oder Gesichtsverfolgung konzentriert. In letzter Zeit war es maschinelles Lernen. Es ist nicht mein erstes Mal: ​​Neben dem AI-Labor baute ich meine eigenen Nebenprojekte. Programme, die versuchten, den Rhythmus, in dem Sie geklatscht haben, zu verstehen und zu improvisieren, oder versuchten, die von Ihnen begonnenen Zeichnungen zu beenden. Mein damals gewähltes Werkzeug (neuronale Netze) würde sich jedoch nicht auf die Situationen übertragen lassen, die ich wirklich erforschen wollte. Glücklicherweise hat sich die Forschung zum maschinellen Lernen in den letzten Jahren gewandelt, angetrieben von neuen Arten und Maßstäben von Daten, schnelleren Computern, neuen Toolkits und neuen Communities. Und neuronale Netze sind wieder in Mode.

In diesem letzten Jahr habe ich mich wieder mit maschinellem Lernen und KI befasst und die Dinge wiederentdeckt, die mich überhaupt dazu gebracht haben. Ich befinde mich immer noch in der Phase "Lernen" und "Kleine Studien", die natürlich dem Herstellen neuer Kunstwerke vorausgeht, und ich wollte hier einen Teil dieses Prozesses mit Ihnen teilen. Dies ist eine ziemlich lineare Aufzeichnung meines Weges, aber ich hoffe, dass dieser Beitrag so modular ist, dass jeder, der sich für ein bestimmtes Teil interessiert, vorwärts springen und etwas finden kann, das ihn ebenfalls begeistert. Ich werde einige Experimente mit diesen allgemeinen Themen behandeln:

  1. Faltungsneurale Netze
  2. Wiederkehrende Neuronale Netze
  3. Dimensionsreduktion und Visualisierung
  4. Autoencoder

Wenn Sie dies lieber als Video hören und ansehen möchten, gibt es eine erhebliche Überschneidung mit meinem gleichnamigen OpenVis-Konferenzgespräch (einschließlich Live-Demos) und eine kleinere Überschneidung mit meiner Eyeo 2016-Keynote (die sich mehr auf die Natur konzentriert) Intelligenz und Kreativität).

Faltungsneurale Netze

Am 16. Juni 2015 entbrannte Reddit in einer wütenden Debatte über dieses Bild eines "Puppyslugs" (ursprünglich "Hundeschnecke"), das anonym mit dem Titel "Bild von einem Faltungsneuronalen Netzwerk" gepostet wurde. Forscher und Bastler des maschinellen Lernens stritten sich schnell, ob es sich möglicherweise um die Arbeit eines neuronalen Netzes handelte oder ob es sich um einen anderen Algorithmus handelte oder ob es sich um eine handwerkliche Arbeit handelte. Die gelöschten Kommentare im Thread haben das Geheimnis der Herkunft des Bildes nur noch verschärft.

Ungefähr eine Woche später erschien ein Blog-Beitrag von Google Research mit dem Titel "Inceptionism: Going Deeper in Neural Networks" (Inceptionismus: Ein tieferer Einblick in neuronale Netze). Bald darauf veröffentlichte Google den Code "Deep Dream", mit dem jeder diese Bilder neu erstellen konnte. (Es ist erwähnenswert, dass Projekte wie Deep Dream zumeist ein Nebeneffekt des Sammelns neugieriger Ingenieure am selben Ort sind und es schwierig ist, allgemeinere Schlussfolgerungen über die Beziehung von Deep Dream zu Googles Mission oder zukünftigen Technologien zu ziehen.)

Während Deep Dream vielleicht der erste Moment war, in dem ein neuronales Netz die Fantasie der Öffentlichkeit erregte, haben sie im täglichen Leben viel Erfolg gesehen. Insbesondere Faltungs-Neuronale Netze (CNNs) wurden seit den 90er Jahren zum Lesen von Schecks verwendet, um neuere bildbasierte Suchsysteme voranzutreiben und kulturunempfindliche, voreingenommene Vermutungen für die automatische Bildkennzeichnung zu erstellen.

Nachdem ich alle Anwendungen für CNNs gesehen hatte, suchte ich zunächst nach einem Toolkit, das in einer vertrauten Programmiersprache oder einem Framework geschrieben war. Ich fand die ccv-Bibliothek, eine Computer-Vision-Bibliothek, die mit einer CNN-Implementierung und einer flexiblen Lizenz geliefert wurde, und erstellte einen Wrapper für openFrameworks, um in Echtzeit zu experimentieren (dies war Anfang 2015). Es war wirklich aufregend zu sehen, wie mein Laptop die Dinge "verstand". Es ging völlig über die grundlegende Farbanpassung oder Funktionsverfolgung von herkömmlichem Computer-Sehen hinaus, mit dem ich besser vertraut bin. Auch wenn einiges völlig falsch lief, ließen sich die unheimlichen Labels inspirieren. Ich erinnerte mich an die berühmte Geschichte des AI-Pioniers Marvin Minsky, der 1966 einen MIT-Studenten zum Sommerprojekt „Computer Vision“ ernannte, und fragte mich, was er von diesen neuesten Technologien mit all ihren Erfolgen und Misserfolgen hielt.

Ein weiteres Tool, das ich um diese Zeit gefunden habe, war das Jetpac SDK. Es ist insofern ein ungewöhnliches Toolkit, als es eine meist quelloffene Implementierung von CNNs für eine Vielzahl von Plattformen, einschließlich WebGL mit JavaScript, bereitgestellt hat. Natürlich hat Google sie gekauft und die Bibliothek wird nicht mehr weiterentwickelt. Es ist immer noch eine der wenigen JavaScript-Implementierungen eines schnellen CNN.

Eine Artischocke wird in 8 Sekunden auf der CPU in Chrome mit JavaScript erkannt.

Das Bauen und Trainieren meiner eigenen Netze mit ccv schien ein wenig entmutigend, da es an Gemeinschaft und Beispielen mangelte. Als ich mir weitere Toolkits ansah, erfuhr ich, dass die großen Konkurrenten Caffe, Theano und Torch in C ++, Python und Lua waren. Es gab viele weniger bekannte Toolkits und Wrapper, die in Python geschrieben waren, und sogar Caffe hatte einen Python-Wrapper, also beschloss ich, Python zu üben. (Dies erwies sich als eine gute Investition, da der TensorFlow von Google zum De-facto-Standard für vertiefendes Lernen wurde und hauptsächlich über Python verwendet wird.)

Das erste, was ich versuchte, war ein Problem anzugehen, das ich gut kannte: die Erkennung von Lächeln. Durch die Beispiele in Lasagne (ein auf Theano basierendes Deep Learning-Toolkit) habe ich ein CNN-Beispiel für die handschriftliche Ziffernerkennung modifiziert und es in ein binäres Klassifizierungsproblem umgewandelt: Anstatt zu fragen, ob dieses kleine 28x28-Pixel-Bild (die Standardgröße für MNIST) ist eine handgezeichnete 0, 1, 2, 3…. oder 9, stattdessen fragte ich ein Lächeln (eins) oder nicht (null). Ich habe auf Tausenden von Bildern trainiert und an einem Video von mir selbst mit einem Lächeln getestet. Es hat beim ersten Mal ohne Modifikationen richtig funktioniert!

In einem kurzen Video zwei Lächeln erkennen lernen. Der Beginn des Trainings befindet sich oben und der Anfang des Videos befindet sich links.

Ich konnte es sogar „beobachten“, indem ich beobachtete, wie sich die Klassifizierung im Laufe der Zeit auf einem Video von mir selbst mit zwei Lächeln änderte. Oben ist nur weißes Rauschen zu sehen. Es weiß nicht, was ein Lächeln ist und was nicht. Die Vorhersagen sind zufällig. Aber sehr schnell nimmt es an, dass alles ein Nicht-Lächeln ist („Null“ oder Schwarz, vermutlich aufgrund des Datensatzes mit mehr Beispielen für Nicht-Lächeln, was Neutral zu einer sicheren Wette macht), dann beginnen die beiden Lächeln langsam einzublenden. mit ein wenig Unsicherheit zu Beginn und am Ende des Lächelns, das als letztes behoben werden muss.

Diese Art von Netz könnte für die Echtzeitverfolgung sehr nützlich sein, mit Ausnahme der Tatsache, dass die meisten Toolkits für die Arbeit mit CNNs für die Offline-Stapelverarbeitung entwickelt wurden und einen hohen Overhead für einzelne Datenrahmen aufweisen. Für etwas Langsames wie ein Lächeln könnte es immer noch funktionieren, aber für etwas Schnelleres wie Gesichtserkennung ist es nicht in Echtzeit genug. Der Großteil meiner Arbeit ist interaktiv, so dass ich die Eignung von CNNs für neue Arbeiten in Frage stellte, aber mein Interesse wurde wieder geweckt, als Deep Dream auftauchte. Zunächst eine kurze Erklärung, was sich hinter den Kulissen abspielt.

CNNs basieren darauf, (ungefähr) zwei verschiedene Dinge gleichzeitig zu lernen: Image-Patches, die helfen, Kategorien zu unterscheiden, und welche Kombinationen dieser Patches eine bestimmte Kategorie bilden. Zuerst erkennt das Netz Dinge wie Kanten und Flecken, dann eine Kombination aus einer Kante und einem dunklen Fleck, die eine Augenbraue und ein Auge bilden könnten, und schließlich erkennt das Netz, dass eine Augenbraue, ein Auge und eine Nase (getrennt erkannt) sind ein Gesicht auf. Ich sage "grob", weil es manchmal schwierig ist, herauszufinden, wo ein Netz "Merkmale" erkennt und wo es "Kombinationen" erkennt, insbesondere mit aktuellen Forschungsergebnissen.

Die Deep Dream-Bilder basieren auf der Umkehrung dieses Prozesses. Angenommen, Sie beginnen mit einem Bild eines Eichhörnchens und einem Netzwerk, das darauf trainiert wurde, 1000 verschiedene Kategorien von Objekten basierend auf einer Datenbank mit dem Namen ImageNet zu erkennen, die 1,2 Millionen Beispielbilder enthält. Deep Dream führt zuerst das Eichhörnchenbild durch das Netz und identifiziert, welche Art von Aktivität stattfindet: Gibt es Kanten? Spots? Augen? Sobald die Art der Aktivität identifiziert ist, ändert Deep Dream das Originalbild auf eine Weise, die diese Aktivität verstärkt. Wenn Sie also einige vage augenähnliche Formen haben, sehen sie tatsächlich aus wie Augen. Oder wenn Sie eine vage Hundegesichtsform haben, verwandelt sie sich in einen Hund (dies kommt häufig vor, weil viele der 1000 Kategorien unterschiedliche Hunderassen sind).

Auf ImageNet geschulte Netze wurden auch umgeschult, um andere Bildersätze zu klassifizieren: Blumensorten, Geschlecht und Alter oder Arten von Orten. Forscher trainieren und teilen diese Modelle miteinander.

Deep Dream FBO Glitch, auch auf Twitter gepostet.

Als Google den Code zur Implementierung von Deep Dream veröffentlichte, begann ich damit, ihn auf eine große Anzahl von Bildern anzuwenden - von Klassikern wie Man Ray oder Michelangelo bis hin zu meiner persönlichen Sammlung von Glitch-Bildern -, die mit verschiedenen Einstellungen getestet wurden, oder auf Netzwerke, die in verschiedenen Kategorien trainiert wurden. Während es schwierig war, das von Deep Dream verwendete Toolkit zu installieren, war es viel einfacher, kleine Änderungen wie die Verarbeitung mehrerer Bilder zur Erstellung einer Animation vorzunehmen.

Einige Beispiele für Deep Dream-Animationen: NYC-Straßenszene x ImageNet, Strandspaziergang und Radfahren x FlowerNet.

Eines der überraschenden Dinge an diesen Animationen war, dass Deep Dream von Bild zu Bild relativ ähnliche Ergebnisse lieferte. In einigen älteren Veröffentlichungen, in denen nicht-fotorealistische Rendering-Techniken für Video diskutiert werden, kann diese Art von Stabilität das Hauptaugenmerk sein. Andere Leute, die mit Deep Dream arbeiten, haben zusätzliche Verarbeitungsverfahren wie Frame Blending oder Optical Flow verwendet, um unterschiedliche Arten von Stabilität zu erzielen.

In Googles ursprünglichem Blogbeitrag zu Deep Dream zeigen sie einige unglaubliche Visualisierungsbilder für Klassen (oder Kategorien): Sie zeigen beispielsweise, dass das „Konzept“ eines Netzwerks für eine Hantel ohne angebrachten Arm unvollständig ist. Während einige frühere Untersuchungen ähnliche Klassenvisualisierungen gezeigt hatten, waren dies einige der klarsten Bilder, die es bisher gab.

Visualisierungsbeispiele der Hantelklasse.

Um dieses Konzept besser zu verstehen, habe ich den Code modifiziert, um Klassenvisualisierungen für jede Klasse und einige kleinere Variationen wie große Bildfelder zu erstellen, die nur aus einem Objekt bestehen. Ich habe ein paar weitere Techniken getestet, z. B. die Optimierung für Abstraktionen auf hoher Ebene in einem kleinen Bild, dann das Vergrößern und Optimieren für visuelle Funktionen auf niedriger Ebene, aber die meisten Bilder, die entstanden sind, waren den ursprünglichen Deep Dream-Bildern sehr ähnlich.

Bildfeld für die Klasse „Pilz“.

Anstatt ein auf ImageNet geschultes Netzwerk zu verwenden, können wir Klassenvisualisierungen für ein auf Satellitenbilder geschultes Netzwerk erstellen: Terrapattern, ein visuelles Suchwerkzeug für Satellitenbilder, an dem ich mit Golan Levin, David Newbury und anderen gearbeitet habe, verfügt über erkennbare Klassen wie „cabin“ "," Schwimmbad "und" Friedhof ".

Terrapattern-Klassenvisualisierung mit Code aus „Synthese der bevorzugten Eingänge für Neuronen in neuronalen Netzen über tiefe Generatornetze“ (2016) von Nguyen et al

Ungefähr zwei Monate nach Googles Beitrag "Inceptionism" haben Forscher der Universität Tübingen in Deutschland "A Neural Algorithm of Artistic Style" für den Open-Access-Dienst Arxiv veröffentlicht, in dem der Großteil der öffentlichen Forschung in der Informatik geteilt wird. Da das Papier ohne eine offizielle Implementierung veröffentlicht wurde, veröffentlichten viele Leute in den nächsten Tagen ihre eigene Version der Technik mit unterschiedlichen Qualitätsgraden. Ich diskutiere diesen Moment und vergleiche Implementierungen in einem Artikel mit dem Titel "Künstliche Künstler vergleichen".

Auszug aus Abbildung 2 aus „Ein neuronaler Algorithmus des künstlerischen Stils“.

In der Arbeit zeigen sie, wie man beim Rendern eines Fotos mithilfe eines neuronalen Netzes einen „künstlerischen Stil“ imitiert. Es sieht unmöglich aus. Wie die Art von Dingen, die sorgfältig ausgebildete Menschen erfordern sollten, die jahrelang studiert und geübt haben. Es sollte für vollautomatisierte Computerprogramme nicht so einfach sein. Mein erstes Experiment bestand darin, etwas Härteres zu versuchen: die Technik umzukehren. Ich habe versucht, den malerischen „Filter“ von einigen Vincent Van Gogh-Landschaften zu entfernen, indem ich das Netz gebeten habe, sie im „Stil“ eines Landschaftsfotos zu rendern.

„Grünes Weizenfeld mit Zypresse“ (oben links) und „Weizenfeld hinter Saint-Paul“ (unten links) mit Fotoausgabe.

Die Ergebnisse waren gemischt und wenig anregend, sodass ich stattdessen einen zu perfekten Scherz postete und mit anderen Experimenten fortfuhr. Wie bei Deep Dream habe ich am meisten gelernt, indem ich eine riesige Kombination verschiedener Bilder aus der westlichen Kunstgeschichte sowie einige sorgfältig abgestimmte Porträts verarbeitet habe. Während die Erstellung eines Deep Dream-Bildes auf meinem Laptop nur eine Minute dauerte, dauerte die Stilübertragung näher an fünf. Einige Leute verwendeten Cloud-Computing-Systeme wie Amazon AWS, um das Rendern zu beschleunigen, aber ich hatte das große Glück, Freunde in Japan zu haben, die es mir ermöglichten, einen schnellen Computer für das Rendern aus der Ferne auszuleihen.

Nachdem ich alle Renderings durchgesehen hatte, stellte ich fest, dass „Stilübertragung“ eigentlich eher „Texturübertragung“ bedeutet, und entschied mich, 40 Texturen in jeder möglichen Kombination durchzuziehen.

Auszug aus einer Transferstudie im 40x40-Format.

Ebenso wie Deep Dream habe ich einige kleine Änderungen vorgenommen, mit denen ich Animationen und schließlich ein längeres Video (NSFW) rendern konnte. Meine Lieblingsergebnisse stammen aus einer Studie, bei der ein Bild zunächst im kubistischen Stil gerendert wird und sich im Verlauf der Animation in einen impressionistischen Stil mit einer ähnlichen Palette verwandelt. Ich habe eine unvollendete Studie, die diese Technik mit einem Foto der Kathedrale von Rouen verwendet, das in jeder von Monet gemalten Variation gestaltet ist.

Tübingen im Stil von Picassos Wandern an einem Strand im Stil von Picassos

Seit meinen ersten Untersuchungen mit Stiltransfer wurde eine neue Arbeit veröffentlicht, die einige der Dinge behebt, die mir gefehlt haben: „Die Kombination von Markov-Zufallsfeldern und Faltungsneuralnetzen für die Bildsynthese“ (2016) von Li et al. Verwendet einen patchbasierten Rekonstruktionsalgorithmus Stil zu imitieren.

Alex J. Champanard (der über einen Twitter-Bot für die Stilübertragung verfügt) hat diese Technik erweitert, um eine explizite Kontrolle über die Quell- und Zielregionen des Patches zu ermöglichen, und zusätzliche benutzergeführte Einschränkungen für die Neukonfiguration vorhandener Bilder hinzugefügt.

„Semantische Stilübertragung und Umwandlung von Zwei-Bit-Kritzeleien in feine Kunstwerke“ (2016) von Alex J. Champanard

Eine meiner Lieblingsbeschäftigungen bei Techniken wie Deep Dream und Style Transfer ist, dass sie visuell eine Intuition für einige sehr komplizierte Themen vermitteln. Nicht viele Leute verstehen, wie ein neuronales Netz von vorne nach hinten funktioniert, einschließlich aller Begründungen für die Code-, Architektur- und mathematischen Entscheidungen, die in das System eingeflossen sind. Aber jeder kann sich einen „Puppyslug“ oder einen falschen Van Gogh ansehen und sich ein Bild davon machen, was sich hinter den Kulissen abspielt.

Ich bin auch inspiriert von der viszeralen Reaktion, die manche Menschen auf Deep Dream haben, und von dem Unglauben, dass Stiltransfer inspiriert. Während sich die Arbeit der Algoristen auf die Art der Berechnung stützt, scheint Deep Dream auf etwas zu stoßen, das tief in unserer visuellen Wahrnehmung liegt.

Wiederkehrende Neuronale Netze

Eines der interessantesten Dinge an neuronalen Netzen ist, dass es einfach ist, eine Intuition für deren Manipulation zu entwickeln, sobald Sie die Grundkonzepte verstanden haben. Ein grundlegendes neuronales Netz besteht nur aus Addition und Multiplikation: iterativ (über eine Ebene hinweg) und rekursiv (über mehrere Ebenen hinweg) gewichtete Summen nehmen. Beim Training geht es nur darum, herauszufinden, mit welchen Gewichten Sie die erwarteten Antworten erhalten. Wenn Sie dann neue Daten über das Netz übertragen, sollten Sie ähnlich korrekte Antworten erhalten.

Eine Modifikation dieses Setups besteht darin, den Ausgang des Netzes (zusammen mit dem vorherigen Zustand des Netzes) in den Eingang zurückzukoppeln. Dies wird als wiederkehrendes neuronales Netzwerk (RNN) bezeichnet. Während die meisten neuronalen Netze eine feste Architektur haben, was bedeutet, dass sich die Eingabe- und Ausgabegröße nicht ändert, kann ein RNN nützlich sein, um Sequenzen variabler Länge zu modellieren. Beispiele für Sequenzen sind die Stiftbewegung in kursiver Handschrift, eine Folge von Zeichen im Text, Noten in Musik oder Temperaturen aufgrund des Wetters.

Was Deep Dream für Bilder ist, ist ein Artikel namens The Unreasonable Effectiveness of Recurrent Neural Networks für Text. Dieser Artikel des Forschers Andrej Karpathy geht auf exquisite Details ein und erklärt, wie RNNs funktionieren und wozu sie in der Lage sind. Er wird von einem Toolkit namens "char-rnn" (das kürzlich von "torch-rnn" abgelöst wurde) begleitet, das es den Lesern ermöglicht, und zu folgen experimentieren Sie mit ihrem eigenen Text.

Andrej gibt eine Reihe überzeugender Beispiele für RNNs, die lernen, aus einigen Megabyte Beispieltext neuartigen Text zu generieren. Zum Beispiel, nachdem Sie die gesammelten Werke von Shakespeare gefüttert haben: "Also, lassen Sie sich auf den Kopf Ihrer Lordschaft fallen und Ihre Meinung ist gegen Ihre Ehre."
von der irischen Sprache von John Clair oder sogar Linux-Kernel-Code:

statisch void do_command (struct seq_file * m, void * v)
{
  int column = 32 << (cmd [2] & 0x80);
  if (Bundesland)
    cmd = (int) (int_state ^ (in_8 (& ch-> ch_flags) & Cmd) 2: 1);
  sonst
    seq = 1;
  für (i = 0; i <16; i ++) {
    if (k & (1 << 1))
      pipe = (in_use & UMXTHREAD_UNCCA) +
        ((count & 0x00000000fffffff8) & 0x000000f) << 8;
...

Wenn Sie mit der von MegaHAL verwendeten Markov-Ketten-Texterzeugungstechnik vertraut sind, werden Sie feststellen, dass das RNN eine überraschende Fähigkeit besitzt, syntaktische Korrektheit mit neuartigem Text in Einklang zu bringen. Normalerweise müssen Sie einen Kompromiss zwischen dem Kopieren Ihres Quellmaterials und dem Erzeugen einer falschen Ausgabe eingehen, aber RNNs finden einen Mittelweg, indem sie eine tiefere Struktur erfassen als Markov-Ketten.

char-rnn gehört in die allgemeine Kategorie der "generativen Modelle". Generative Modelle versuchen nicht, irgendetwas per se vorherzusagen, ein Urteil abzugeben oder etwas zu klassifizieren (obwohl sie dazu konstruiert werden können). Generative Modelle werden relativ schlecht untersucht, zum Teil, weil es schwierig ist, ihre Ergebnisse zu rechtfertigen oder ihren Wert zu quantifizieren. Für Menschen, die sich für kreative Anwendungen neuer Technologien interessieren, sind generative Modelle eines der interessantesten Themen. Natürlich gibt es Unmengen von Experimenten mit char-rnn, und Kommentare in Andrejs Blogpost erfassen einen kleinen Ausschnitt davon.

Vor meinen ersten Experimenten mit char-rnn habe ich auf Twitter ein gemeinsames Dokument gepostet, in dem einige Ideen nach Beiträgen gefragt wurden.

Meine ersten Experimente waren denen von Andrej sehr ähnlich. Ich habe gerade einen Text gefunden, der länger als eine Million Zeichen (ein Megabyte) sein könnte, und habe versucht, ihn zu bereinigen, um sicherzustellen, dass bestimmte Zeichen unterschiedliche Zustände in der RNN auslösen können, z. B., dass ein Tabulator Wörter von ihren Definitionen trennt, wenn Wörterbucheinträge eingegeben werden:

aufschreiend Narr relativ offen.
glamourös 1 der Eroberung einer Dame. 2 klug oder Gürtel in einem Verlust des Managements. n Glücksfall. [Französisch von Latin Lego Fall]
Veton 1 Seil (nicht das niedrigste) zum Heilen! nach seiner tonacht. 2-Personen-Klingel-Gelb-Dusible-Test.
drüsenförmig von oder zeigen Hindus. n (attrib.) Energie, Protest. [von * geneal]
Vizekönig 1 eine Spezialistentasche. b Referenzbedingung und Zustand meiner formalen Preise, insb. in der Kriegsführung. 2 umg. ein Jockey und ein Wort.

char-rnn fängt eine grundlegende Struktur ein, z. B. einen Teil der Sprache, der einem Wort folgt, und Zahlen, die nacheinander kommen. Manchmal liefert es eine korrekte Beugung oder eine vage aktuelle Definition. Meine bevorzugten Definitionen sind das Ergebnis der Eingabe von "Start" -Text, der das Netzwerk vor dem Start der Generierung vorbereitet und effektiv das von Ihnen angegebene Wort definiert. Jetzt gibt es sogar einen Twitter-Bot, der solche Wörter für Sie definiert.

Nachdem ich das Wörterbuch ausprobiert hatte, war klar, dass die unterhaltsamsten Ergebnisse aus den Augenblicken stammten, in denen der Algorithmus eine Agentur oder Absicht zu haben schien, oder sogar direkte Vorschläge für den Leser. Die nächsten Experimente waren also mit alten Sittenbüchern und Listen mit „nützlichen Sätzen“:

Familie von ihrem Morgen würde nicht ihr Volk das Pabace von einem Kommen von dem vorschlagen. Theater oder ihr Partner, aber alles, was möglich ist an diesem Tag und Gastgeberin. angenehm auf einladung zu ihrer eigenen inflience und sogar goy, das kann. Die Ankunft erfolgt durch einen Paukenschlag, der sich in dem Kostüm schmeichelt, um das es sich bei den Zimmern handeln würde.

(Die Sittenbücher hatten nicht genügend Inhalt, um dem Netzwerk die korrekte Schreibweise beizubringen.)

sinnlose Freude. sich um seinen Neid bemühen. Phantom und Welligkeit. Obmension und Freude. dauerhafte Liebe. abstoßend und bestimmt. Tapferkeit und Einbildung. Energie und Durchsetzung. ein unvergleichlicher allgemeiner kompromiss. fast unschuldiges Thema. Träumen Sie das Thema Sie haben die Luft. natürlich und daher. Glücklicherweise hält etwas vom Lachen. ein Zeichen der unverschämten Nacht.

Die "nützlichen Phrasen" waren meist einfache Mashups, die viel einfacher hätten berechnet werden können, aber etwas über Tippfehler und unvollständige oder imaginäre Wörter verleiht der Ausgabe eine fast sapphische Atmosphäre. Um Poesie expliziter zu produzieren, habe ich eine riesige Liste von 12.000 Phrasen erstellt und diese durchlaufen, indem ich Wörter verkettet habe, die in aufeinander folgenden Sätzen vorkommen und mit den folgenden Endungen enden:

Liebe in ihrer Ehrlichkeit genug.
eine Liebe zur Finsternis.
Die Liebe war wie eine Seele der Dusche.
mit Liebe zu übertreffen und verärgert und besorgt seltsam.
Das Thema einer einfallsreichen Liebe ist, was ich hier denke.
schöne charakteristische Tatsachen.
flippige Liebe.
leichtfertig mit jeder Erinnerung an die Bestätigung.
der Mond und die Erinnerung an sie hell wie das Grab.
der Mond der Sterne der Seele.

Es fängt an, als würde es irgendwann anders werden. In der Hoffnung, dass ein persönlicheres Quellmaterial neue Eigenschaften des Algorithmus enthüllt, habe ich ein paar Jahre lang Chat-Logs mit Lauren McCarthy gefüttert:

Lauren: Also
lauren: hast du noch gesiebt?
kyle: Ja, wir hören nur, dass du irgendwie warst, weil es letztes Jahr sein könnte
Kyle: Also hat er schnell gesagt, dass das Echtzeit sein könnte
lauren: mm ich schätze es würde jemals die unterstützung von general ruinieren wollen
Kyle: :)
Kyle: Seine einst seltsamen Mitten
lauren: ja
lauren: https://github.com/122725785_iram
kyle: https://twitter.com/nyus/Recisageles/5ubPmer

Die Zeilen haben die richtige Länge, der Smiley fühlt sich gut an, ich schreibe "yeah" und Lauren "ya". Die URLs sind nicht echt, aber sie sehen genauso aus wie die Art von Links, die wir uns gegenseitig senden würden. Der Output scheint den Grenzraum zwischen Bewusstseinsmodi, zwischen Träumen und Wecken zu besetzen. Es hat das Aussehen und das Gefühl der Sache, ohne den Inhalt oder die Bedeutung zu haben.

Um mit einer anderen Art von Dialog zu vergleichen, habe ich den Cornell Movie Dialogue Corpus ausprobiert, den 220k austauscht.

Die Zahlen sind zwei Kilo!
Gott sei Dank!
Ich werde mich umbringen.
Ja, Nickel werden reingehen. der Kapitän hat dich wiederhergestellt!
anders. es ging ihr nicht gut - du bist so ein großer künstlerischer Selbstmord - sie bekommt ein großes Wissen und spielt Ginning von Kindernummern und Engel drei Lehrer für verrückte Taten, er hatte Angst, nicht auf deinem Herzen zu stehen.
brechen.
Schwein Rechnung?
bejahend, Frau. lampert.
Entschuldigung, Herr. ceusing ist sehr gelangweilt und von betrügerischer Arbeit und iena - und wir versuchen Ihnen zu helfen. Du hast mich auf der Seite gesehen.
ist es nicht besser, ich werde deine Zwillinge ausbreiten und das Dach ziehen woanders - komm zu meinem Anwalt. auf dein Leben! Wer hat das gesagt?!

Es ist fast unsinnig, aber manchmal ist es schwer zu sagen, ob es an den Einschränkungen meiner Hardware oder meiner Technik liegt. Mit teureren Grafikkarten können Sie ein größeres Modell trainieren, wodurch sich die Genauigkeit der Ausgabe erhöhen lässt. In der Regel bin ich jedoch durch meinen Laptop oder den Computer eines Freundes eingeschränkt. Bald nach diesen Experimenten veröffentlichte Google auch einige Ergebnisse aus Schulungen zu Untertiteln von Filmen:

Mensch: Was ist die Definition von Altruismus?
Maschine: Wenn Sie nicht an Gott glauben, wissen Sie es nicht.
Mensch: Okay ... also, was ist die Definition von Moral?
Machine: Nun, die Wahrheit ist, dass Sie nicht an Gott, den Allmächtigen, glauben.
Mensch: Nun mir die Definition von Moral, ich bin jetzt ziemlich verärgert!
Machine: Ich schäme mich nicht, Philosoph zu sein!

Ich bin mir sicher, dass ihr Modell viel länger trainiert wurde, aber das Anrufen und Antworten verstärkt den Eindruck von Intentionalität.

Ein weiterer handgefertigter kleiner Datensatz, den ich ausprobiert habe, war eine 25-KB-Sammlung von Tonabnehmerleitungen:

Wie war das in deine schöne Hand Bibl ein verlorenes du. Lomed Sie eine Liebe, jedes Mal, wenn ich in Ihrem Daticn war? Wenn Ihr Name ein Stern mit Herz ist, weil ich in einem Moment bin, in dem ich nicht weiterkomme, sind Sie so glücklich, wenn Sie Freunde haben, die ich am meisten sehe.

Wieder eine Menge Unsinn, aber es hat die Atmosphäre von Pickup-Linien: "Du bist so", "Sterne mit Herz", "schön", "Liebe zu jeder Zeit" usw. Wie lange dauert es, bis ein Computer effektiver ist als Ein Mensch, der um jemanden wirbt?

Ein interessanter Trick, der bei einigen dieser kleineren Datensätze hilfreich war, bestand darin, zunächst den Charakter einer großen Sammlung von englischen Texten wie Wikipedia oder dem Filmbuchkorpus zu trainieren. Sobald dieses Modell fast konvergiert ist, können Sie es auf das Material verweisen, das Sie wirklich lernen möchten, da es ein Grundmodell für die englische Rechtschreibung und Grammatik enthält.

Der letzte wirklich große Textdatensatz, den ich ausprobiert habe, basiert auf 20.000 Drogenerfahrungen, die bei Erowid gemeldet wurden (die kratzenden Berichte habe ich hier hochgeladen).

Hinter mir und anderen spirituellen Ebenen blieben ungefähr eineinhalb Jahre. Ich wäre wahrscheinlich gestorben und hätte die Ekstase angeregt, um herauszufinden, ob ich sterben würde, bevor ich mich nicht extrem euphorisch fühle, mit einem Gefühl von Empathie und einigen negativen Aspekten meines Geistes. Dies ist definitiv 80–150–2001 im Vergleich zu meinem Gebrauch und meiner Geschwindigkeit, aber ich begann mich ängstlicher zu fühlen. Ich war in der Lage, während des Aufwachens einige Jahre lang in Form zu bleiben, und meine Kopfschmerzen nahmen wieder zu. Es gab diese Gedanken aus dem Wunsch, ein paar Mal zu fahren.

Bei einer so großen Textsammlung ist die Ausgabe grammatikalisch viel korrekter, wenn Rechtschreibung und Zeichensetzung stimmen. Konzeptionell bin ich gespannt, was passiert, wenn ein Algorithmus das unheimliche Tal passiert und zur perfekten Nachahmung wird. Wenn die Menschen nicht in der Lage wären, das erzeugte Drogenerlebnis von einem realen zu unterscheiden, würde die Maschine zu einer Art philosophischem Zombie: Eine Einheit, die etwas zu sein scheint, was es nicht ist, etwas, das es niemals sein könnte.

Emoji

Wie oben erwähnt, muss ein RNN nicht bei der Sprache stehen bleiben. Alles, was als Folge von Symbolen kodiert werden kann, ist ein perfektes Futter für den Charakter. Ein Auszug aus einer Vektorgrafik-SVG-Datei sieht beispielsweise normalerweise folgendermaßen aus:

      ...

Dies ist nur eine Folge von Zeichen, und wir können die richtige Reihenfolge dieser Zeichen mit genügend Beispielen lernen. Das obige Beispiel stammt von Twemoji, der von Twitter bereitgestellten Emoji-Bibliothek. Insgesamt enthält Twemoji 875 Grafiken mit jeweils ca. 3 KB - oder insgesamt ca. 2 MB, nachdem die Punkte auf eine niedrigere Auflösung eingestellt und die zwischen allen Dateien identischen Header entfernt wurden.

Anstatt einen Big Data Dump mit Chat-Protokollen oder Wörterbuchdefinitionen oder Drogentrips zu erstellen, habe ich eine Datei erstellt, die eine Emoji-SVG-Datei pro Zeile enthält, beginnend mit dem Namen des Emoji. Dies bedeutet, dass char-rnn bei der Ausgabe eines neuen Emojis auch einen Namen für jedes Symbol ausgibt. Dieser trägt den Titel "CLOCK FACE NINE", was beinahe ein echter Emojiname ist:

Und hier ist eine größere Sammlung, um die Vielfalt in der Ausgabe zu zeigen.

Sammlung von verschiedenen Zeichen generiert Emoji.

Es ist erstaunlich zu sehen, wie die großen Kreise, die mit Gesichtern einhergehen, immer wieder in die Mischung eingehen, und andere kaum erkennbare Formen sind überall verteilt. Die Farben sind am konsistentesten, da Twemoji eine eingeschränkte Palette verwendet und char-rnn lernt, es sich zu merken. Ich arbeite an einer Serie von Drucken mit dem Titel "Innards", einem Triptychon, das aus diesen Emojis gebaut wurde und von Roger Coqart inspiriert wurde.

Innards (2015-2016)

Ein weiteres großartiges Projekt in dieser Richtung ist "SMILING FACE WITHFACE" von Allison Parrish, bei dem sie Twemoji dekonstruiert und neu anordnet, um es als surreale Gespräche oder psychedelische kulturelle Artefakte bei Tumblr zu veröffentlichen. Ich sehe ihre Arbeit darin, Chaos in das Emoji zu injizieren, während es in diesen Experimenten eher darum geht, die Struktur von Grund auf neu zu lernen und aufzubauen, wobei beide Ansätze unterschiedliche Perspektiven aufzeigen.

Schach

Eine andere verschlüsselte Darstellung, die ich untersucht habe, ist das Schachspiel. Ein Notationssystem für Schach heißt Portable Game Notation, und es stehen riesige Datenbanken mit Hunderten von Millionen Spielen zum Download bereit. In Zusammenarbeit mit Charlotte Stiles haben wir etwa 30 MB von Spielen heruntergeladen, die von Menschen gespielt wurden, und sie für den Charakter vorbereitet, indem wir sie folgendermaßen formatierten:

Na 3 Nc 6
Nb5 e5
h4 d5
d3 a6
Lc3 Bb4
a3 Ba5
b4 Bb6
e3 Be6
...

Mit fast 4 Millionen Zügen. Nach ein paar Stunden Training konnten wir neue Spiele produzieren, die Dutzende von Zügen beinhalteten, ohne direkt aus der Datenbank zu kopieren. Normalerweise waren die Eröffnungen Kopien, aber das gilt sowieso für die meisten Schachpartien:

Beispielschachspiel von char-rnn.

Charlotte analysierte Hunderte von generierten Spielen, um festzustellen, ob das Netz wirklich etwas lernte, oder kopierte nur alte Spiele und bemerkte etwas sehr Interessantes: Durchschnittlich konnten bis zu 3 aufeinanderfolgende Züge von einem Trainingsspiel kopiert werden, aber es würde dauern Bis zu 9 Züge, bis das Netz Fehler macht (illegale Züge). Im Allgemeinen war das durchschnittliche Spiel mit 29 Zügen viel länger, aber fast keine davon war zu 100% gültig.

Das längste gültige Spiel, das wir gesehen haben, nachdem wir ein paar hundert Spiele generiert hatten, war dieses in der obigen Animation:

d4 Sf6
c4 g6
Nc3 d5
cxd5 Nxd5
e4 Nxc3
bxc3 Lg7
Nf3 O-O
Bb5 + c6
Bd3 c5
O-O cxd4
cxd4 Nc6
Bb2 Bg4
Rc1 Rc8
Re1 Rc7
Qc2

Eine andere Art von Sequenz ist Audio: eine Sequenz von Samples. Das GRUV-Toolkit ist ein Studentenprojekt, das eine ähnliche Technik wie char-rnn verwendet, sich jedoch auf Musik konzentriert. Nachdem ich es auf die Amen-Pause angewendet habe, habe ich Ergebnisse erhalten, die hauptsächlich nach Rauschen und Speichern der Eingabedaten klingen:

Selbst nach vielen Optimierungen, um verschiedene Sample-Raten auszuprobieren und das Audio rückwärts zu lernen (es sollte einfacher sein, einen Beginn vorherzusagen, wenn man ihn sieht, als wenn er aus dem Nichts kommt), sind die besten Ergebnisse nur verrauschte Kopien der Trainingsdaten .

Kürzlich haben Forscher von DeepMind (theoretisch) das Problem der Audiogenerierung mit ihrer WaveNet-Architektur gelöst. Leider dauert es immer noch ein paar Minuten, bis eine Sekunde Audio produziert ist. Unabhängig davon, ob Sie Sprache oder Musik wiedergeben möchten, ist die Architektur noch nicht in Echtzeit einsatzbereit. Mein Traum, eine neue Episode von "This American Life" von Grund auf neu zu erstellen, würde mindestens 5 Tage dauern, nur um zu rendern, und das schließt die Trainingszeit nicht ein.

Ich führe eine kleine Wiedergabeliste mit anderen Personen, die hier Beispiele für Musik und maschinelles Lernen veröffentlichen, aber die meisten Ergebnisse, ob bei rohen Audiodaten oder symbolischen Darstellungen, nähern sich noch nicht ganz der unheimlichen Genauigkeit einiger Charaktere an Englischer Text. Meine Lieblingsbeispiele für RNN-basierte symbolische Musikkomposition stammen aus diesem Beitrag von Daniel Johnson.

Einige andere Experimente, die noch mehr Arbeit benötigen:

  1. Nachdem 5000 Shader von ShaderToy entfernt und die Ergebnisse minimiert wurden, werden 7 MB Daten ausgegeben. Nach dem Training und dem Lesen der generierten Ausgabe besteht eine gute Chance, dass viele von ihnen kompiliert werden, aber eine sehr geringe Chance, dass sie etwas Visuelles tun.
  2. Wir haben wieder mit Charlotte zusammengearbeitet und fast eine halbe Million Tinder-Profilbeschreibungen und Bilder geschabt. Von "Entspannt und gerne rauchen" bis "Ich möchte eigentlich nur Leute treffen, die die gleichen Interessen haben wie ich ...". Diese Daten haben etwas Magisches und die Mischung aus Aufrichtigkeit und Angst, mit der sich die Leute dem Dating nähern, aber sie fühlen sich fast zu persönlich und zu einfach an, um sie aus der Ferne auszunutzen. Gefälschte Bilder und Profile zu erstellen, wäre nur für ein junges Kichern gut, und außerdem hat Ashley Madison dies bereits getan.

Schließlich werden wiederkehrende Netze in Kombination mit Bildern wirklich interessant. Wenn Sie CNNs mit RNNs kombinieren, erhalten Sie automatische Bildunterschriften, ein Bereich, der 2015 mehrere Durchbrüche erlebte.

Sie können es auch in umgekehrter Reihenfolge ausführen und Bilder aus Bildunterschriften generieren.

Generativer kontradiktorischer Text zur Bildsynthese (2016) von Reed et al

Es gibt sogar einige frühe Ergebnisse für das Generieren ganzer Videos aus Text.

Dimensionsreduktion und Visualisierung

"Das ist eine andere Sache, die wir von Ihrer Nation gelernt haben", sagte Mein Herr. Aber wir haben es viel weiter gebracht als Sie. Was halten Sie für die größte Karte, die wirklich nützlich wäre? “
"Ungefähr zehn Zentimeter bis zur Meile."
"Nur sechs Zoll!" Rief Mein Herr aus. „Wir waren sehr bald sechs Meter von der Meile entfernt. Dann versuchten wir hundert Meter bis zur Meile. Und dann kam die großartigste Idee von allen! Wir haben tatsächlich eine Landkarte im Maßstab von einer Meile zu einer Meile gemacht! “

Dieser Auszug aus "Sylvie and Bruno Concluded" von Lewis Carroll (und ähnlich "On Exactitude in Science" von Jorge Luis Borges) bringt den Kern einer Anwendung des maschinellen Lernens auf den Punkt: unser Wunsch, Abstraktionen als Hilfe bei der Navigation in unbekanntem Terrain zu erzeugen .

Eine Möglichkeit, über Abstraktionen nachzudenken, ist die Reduzierung der Dimensionalität. Ein kleines Bild mit 28 x 28 Pixeln besteht beispielsweise aus 784 Zahlen (Abmessungen). Wenn jedoch jedes Bild eine einzelne handschriftliche Ziffer enthält, kann eine nützlichere Darstellung (oder „Einbettung“) 10-dimensional sein [0,0,0,0,9,0,0,1,0,0,0,0]. Die 0,9 bedeutet, dass es "meistens eine Drei" ist, und die 0,1 bedeutet, dass es "ein bisschen wie eine Fünf" aussieht (was üblich ist).

10 Dimensionen können nützlich sein, um Kategorien auszuwählen, es ist jedoch schwierig, einen 10-dimensionalen Raum zu visualisieren. So können wir weiter gehen und versuchen, in zwei oder drei Dimensionen einzubetten und die Ergebnisse zum Zeichnen von Streudiagrammen zu verwenden. Wenn Sie nur mit wenigen Dimensionen arbeiten müssen, ist die Art und Weise, wie Sie diese Dimensionen verwenden möchten, unterschiedlich. Anstatt zum Beispiel eine Dimension für die Zahlen 0–4 und die andere für die Zahlen 5–9 zu haben, ist es möglicherweise sinnvoller, eine Dimension für die Fettschrift der Zahl und die andere Dimension für die Neigung der Zahl zu verwenden ist.

Unterschiedliche Algorithmen zur Dimensionsreduktion erzeugen unterschiedliche Arten von Abstraktionen. Diese Unterschiede treten am deutlichsten zutage, wenn Sie nur wenige Dimensionen haben. Einer meiner Lieblingsalgorithmen heißt t-SNE (ausgesprochen „tee-snee“). Es versucht, sehr ähnliche Datenpunkte sehr nahe beieinander zu halten, macht sich jedoch keine allzu großen Gedanken über Datenpunkte, die sich unterscheiden. Es gibt eine hervorragende interaktive Visualisierung von t-SNE aus science.ai und eine ausführliche Erklärung von t-SNE im Vergleich zu einigen anderen Dimensionalitätsreduktionstechniken von Chris Olah. Schauen Sie sich dieses Bild jedoch zuerst an, um eine visuelle Intuition für t-SNE zu entwickeln.

MNIST-Ziffern in 2d, vom Original-t-SNE-Papier.

t-SNE erfasst Strukturen in mehreren Maßstäben. Im größten Maßstab werden verschiedene Ziffern in verschiedenen Clustern platziert. In einem kleineren Maßstab können Sie Muster in der Neigung der Handschrift und Verläufe in der Strichstärke sehen. In der Mitte fällt es am schwersten, drei von fünf und acht zu trennen, die alle ähnlich aussehen. Dies ist beeindruckend, da der Algorithmus nicht weiß, welche Ziffern welche sind oder was an ihren Formen wichtig ist. Er gruppiert sie lediglich auf der Grundlage ihres Aussehens (das Bild unten rechts dient ohnehin als Referenz, um die Kategorien anzuzeigen).

Ich habe t-SNE mit einem Datensatz von Golan Levin und David Newbury ausgeführt: Skizzen, die Menschen auf der ganzen Welt für das Moon Drawings-Projekt beigesteuert haben. Nach dem Erstellen einer Punktwolke wie oben habe ich alle Punkte in einem Raster gefangen (Sie können dieses Rasterfangen in Bezug auf das Zuweisungsproblem formulieren).

Über achttausend Zeichnungen trugen zu Moon Drawings von Golan Levin und David Newbury bei (größere Version hier).

Hier ist ein Auszug von rechts, der einen Teil der Logik im Layout zeigt. Einige Strukturen sind leicht zu erkennen, wie der dunkelste Inhalt oben rechts, aber einige Strukturen sind sehr subtil, wie die beiden Fragezeichen rechts unten, die nebeneinander endeten, und alle Herzen in derselben Region.

word2vec

Einige der interessantesten Daten haben keine eindeutige numerische Darstellung, aber manchmal gibt es Techniken zum Extrahieren einer numerischen Darstellung aus dem Kontext. word2vec ist ein Algorithmus zum Zuweisen einer Menge von Zahlen zu einzelnen Wörtern. Es wird untersucht, in welchem ​​Kontext ein Wort normalerweise vorkommt, und anhand des Kontexts ermittelt, welche Wörter ähnlich oder ungleich sind. word2vec kann auf Hunderttausende von einzigartigen Wörtern trainiert werden, die über Millionen von Nachrichtenartikeln verstreut sind und 300 Zahlen für jedes Wort zurückgeben. Diese Zahlen sind nicht klar interpretiert, aber wenn Sie jeden Satz von Zahlen als hochdimensionalen Vektor behandeln, können Sie grundlegende Vergleiche und Berechnungen zwischen ihnen durchführen. Dies bedeutet, dass Sie Entfernungen betrachten (mehr ähnliche Wörter haben einen geringeren Abstand zwischen ihnen) und Analogien erstellen können (der nächstliegende Vektor zu „Paris minus Frankreich plus Japan“ ist „Tokio“). Auch wenn jede Dimension nicht klar interpretierbar ist, codiert die allgemeine Richtung und Position jedes Vektors eine Bedeutung.

Ähnlichkeit zwischen Wochentagen, Monaten des Jahres und den Ziffern 0–8 gemäß word2vec.

word2vec repräsentiert, dass Montag bis Freitag ähnlich sind, sich jedoch von Samstag und Sonntag unterscheiden. Der Freitag scheint sich sogar ein wenig mit dem Wochenende zu überschneiden. Die Monate des Jahres sind grob in März bis Juli und August bis Februar unterteilt, aber aufeinanderfolgende Monate sind im Allgemeinen ähnlicher als ferne Monate. Die Ziffer 0 ist völlig unabhängig von allen anderen Ziffern (wahrscheinlich ein Fehler in den Daten), aber die anderen Ziffern sind ihren Nachbarn ähnlicher als entfernten Ziffern.

Die 2D-Projektion von word2vec-Vektoren für Länder und Hauptstädte zeigt ähnliche Richtungen zwischen Paaren.

Jetzt können wir mit einem Vektor für jedes Wort eine beliebige Liste von Wörtern durch t-SNE ausführen. Folgendes passiert, wenn Sie eine Liste mit 750 Stimmungen verwenden, die ich aus mehreren Quellen zusammengestellt habe:

Die Farben stammen aus dem Einbetten der gleichen Vektoren in 3d (d. H. RGB) anstelle von 2d. Theoretisch sollte 3d den Daten mehr Raum geben, um sie zu „verteilen“, und uns klarer zeigen, wo die Grenzen liegen, selbst wenn 2d nicht genug Platz hat, um diese Grenzen anzuzeigen.

Hier eine Nahaufnahme einer besonders interessanten Region:

Einige offensichtliche Paarungen werden wie "glücklich" und "froh" oder "zögernd", "misstrauisch" und "vorsichtig" oder "eifrig" und "ängstlich" angegeben. Andere Zusammenhänge sind jedoch überraschend, da sie zwar dieselbe allgemeine Kategorie einnehmen, aber eine entgegengesetzte Wertigkeit haben: "zweifelhaft / hoffnungsvoll" und "entmutigt / ermutigt" sind zwei Beispiele oben.

Wir können uns auch speziell auf diese Antonyme konzentrieren und versuchen zu verstehen, welche Antonyme-Beziehungen anderen ähnlich sind. Ist zum Beispiel "vorwärts / rückwärts" eher "glücklich / traurig" oder "zukunft / vergangenheit"? Dies variiert wahrscheinlich von Sprache zu Sprache und erinnert mich an Fragen, die in Metaphern aufgeworfen wurden, nach denen wir leben.

Bei den Antonyme ist die Beziehung zwischen benachbarten Paaren nicht so klar. Manchmal ist es einfach zu interpretieren, wenn „unintelligent / intelligent“ in der Nähe von „uninteressant / interessant“ und anderen „un-“ Antonymen liegt. Die ein oder zwei Cluster oben scheinen recht kompakt zu sein, aber es ist sehr schwierig zu interpretieren, was sie alle gemeinsam haben. Eine Lehre könnte sein, dass Antonyme viele verschiedene Arten von Beziehungen erfassen und dass es keine einzige Beziehung gibt, die in der Sprache als „Gegenteiligkeit“ kodiert ist.

Eine andere Möglichkeit, Text in Zahlen umzuwandeln, ist eine Technik namens Latent Dirichlet Allocation (oder LDA, nicht zu verwechseln mit Linear Discriminant Analysis, einer anderen Technik zur Verringerung der Dimensionalität). LDA betrachtet eine Reihe von "Dokumenten" (normalerweise alles von einem Absatz bis zu einer Seite) und versucht, jedes Dokument als eine Mischung von "Themen" zu beschreiben. Ein Thema besteht im Wesentlichen aus einer Reihe von Wörtern. Wenn die LDA diese Worte sieht, weiß sie, dass das Thema zu einem gewissen Grad vorhanden ist. Wenn Sie also der LDA eine Reihe von Nachrichtenartikeln geben und nach 10 Themen fragen, könnte ein Thema Wörter wie "Pitcher", "Fußball", "Goalie" enthalten, und wir würden es "Sport" nennen. Ein anderes Thema könnte "Obama", "Merkel", "Sanders" enthalten, und wir würden es "Politik" nennen. Für die LDA ist ein Dokument im Grunde eine Worttüte, die aus einigen aktuellen Worttüten handverlesen wurde.

Um mit LDA zu experimentieren, habe ich versucht, Themen aus "Les Miserables" zu extrahieren und jede Seite als Dokument zu behandeln. Dann habe ich die Topic-Vektoren mit t-SNE auf 2d projiziert.

Der Weg von Les Miserables mit LDA und t-SNE.

Wie das Buch ist das Diagramm lang und umständlich. Anstatt die 3D-Einbettung für Farben zu verwenden, stellen die Farben in diesem Fall die Seitenzahl im Buch dar und wechseln im Verlauf des Buches durch die Farbtöne. Einige Charaktere, Szenen oder Themen befinden sich unten in einem unabhängigen grünen Cluster. Vielleicht ist es eine der vielen Nebengeschichten des Romans. Während das Bild faszinierend ist, ist es möglicherweise erforderlich, Seiten nach Zeichennamen und Ortsnamen zu markieren und die LDA zu fragen, welche Wörter für jedes Thema am wichtigsten sind, um ein besseres Verständnis für die Erfassung zu erhalten.

In Zusammenarbeit mit Tejaswinee Kelkar haben wir versucht, Stile der klassischen indischen Musik mit t-SNE zu visualisieren, nachdem wir einige wichtige Funktionen manuell extrahiert haben, z. B. welche Noten gespielt werden können und wo die Melodie normalerweise beginnt und endet.

Ich weiß nicht so viel über diese Musikstile, aber für mich ist es interessant zu sehen, wie die gruppierten Stile auch ähnliche Namen haben (Gandhari / Dev Gandhari, Kedar / Deepak Kedar / Chandni Kedar).

Faltungsneurale Netze und t-SNE

Nachdem ich eine bessere Intuition für t-SNE entwickelt hatte, suchte ich überall nach Vektoren. Alles, was numerisch dargestellt werden kann, kann auch als Etikettendiagramm dargestellt werden. Ein großer Einfluss auf diese Linie der Arbeit ergibt sich aus dieser Visualisierung von Andrej Karpathy:

Visualisierung von CNN-Codes von Andrej Karpathy.

Diese Visualisierung verwendet t-SNE, um eine Reihe von Bildern zu platzieren. Die Darstellung, die t-SNE gegeben wird, ist nicht das Bild selbst, sondern eine allgemeine „Beschreibung“ des Bildes, das aus den Interna eines CNN entnommen wurde. Wenn Sie eine Bildklassifizierung mit einer CNN durchführen, enthält die CNN, kurz bevor sie sich für eine Kategorie entscheidet, eine Liste mit Tausenden von Zahlen, die den Inhalt des Bildes abstrakter beschreiben (ein „CNN-Code“). Einige dieser Zahlen bedeuten in Kombination Dinge wie "grüner Hintergrund", "blauer Himmel", "runde Objekte", "Augenformen" oder "gefiederte Texturen". Das sind also die Funktionen, auf denen t-SNE gruppiert. Oben sehen Sie bei genauem Hinsehen links unten eine Reihe von Blumen und Pflanzen sowie rechts oben Outdoor-Aktivitäten wie Bootfahren.

Wenn wir diese Idee von CNN-Codes mit der Idee von Deep Dream oben kombinieren, können wir anstelle eines CNN-Codes aus einem Bild einen Code aus einer Kategorie generieren, indem wir das Netz rückwärts ausführen. Deshalb habe ich für jede Kategorie in ImageNet einen CNN-Code generiert und mit t-SNE angelegt.

Mit t-SNE ausgelegte Kategorieähnlichkeiten von ImageNet.

Es ist unglaublich zu sehen, wie viele Informationen in diesen Kategorien codiert sind. Beispielsweise befinden sich einige persönliche Produkte (Lotion, Sonnenschutz, Haarspray, Lippenstift, Pflaster) in derselben Region, obwohl sie große optische Unterschiede aufweisen. Eine mögliche Erklärung ist, dass sie in ähnlichen Umgebungen (Badezimmern) existieren und dies zu ihrer Ähnlichkeit beiträgt.

Meine Lieblingsergebnisse kommen von oben in der Visualisierung, wo einige Musikinstrumente zusammengefasst sind. Wiederum sehen einige sehr unterschiedlich aus, aber ich bin mir sicher, dass sie in demselben Kontext / derselben Umgebung vorkommen. Beeindruckend ist, dass es einer Kombination aus CNN und t-SNE gelungen ist, mehrere Skalen zu erstellen: Die Blechblasinstrumente befinden sich mehr rechts, die Holzblasinstrumente mehr links (korrekterweise einschließlich der Flöte) und die Streichinstrumente oben . Dass die Geige den Orchesterinstrumenten näher ist als den Volksinstrumenten, mag Zufall sein.

Möglicherweise ist zwischen den Etiketten eine andere Struktur verborgen, wenn t-SNE das Layout erstellt. Ich habe versucht, diesen Zwischenraum zu visualisieren, hatte aber noch keinen großen Erfolg.

Für alle, die ähnliche Visualisierungen mit t-SNE (und word2vec) erstellen möchten, habe ich eine Sammlung "Embedding Scripts" auf GitHub zusammengestellt, die während eines Aufenthalts bei ITP entwickelt wurde. Aber seit ich anfänglich daran gearbeitet habe, habe ich einige einfachere Wege gefunden, um das Gleiche zu erreichen, und ich würde vorschlagen, stattdessen einige Beispiele wie word2vec und lda_tsne aus diesem Workshop mit Yusuke Tomoto (von Rhizomatiks moderiert) zu betrachten. Wenn Sie an interaktiven Echtzeit-Visualisierungen interessiert sind, die das oben gezeigte farbige Voronoi-Layout verwenden, probieren Sie dieses openFrameworks-Beispiel aus demselben Workshop aus.

Arbeiten mit Archiven und Bibliotheken

Eine weitere große Inspiration für mich bei der Visualisierung großer Datenmengen ist die Arbeit von Quasimondo. Ein Teil seiner Praxis besteht darin, riesige Sammlungen von Bildarchiven herunterzuladen und sie auf verschiedene kreative Arten zu organisieren: alle Pilzwolken aus Album-Covers zu extrahieren und alle Männer mit Schnurrbart in Porträtgalerien zu finden. Bisher habe ich mich an zwei Archive gewandt: eine persönliche Sammlung von Hörproben und die Archive des Medienkunstprofessors und -forschers Itsuo Sakane.

Wenn mein Verstand in Berechnungen verwickelt ist, ist mein Herz in Musik verwickelt. Ich hätte mich vielleicht nicht für interaktive Kunst interessiert, wenn ich mich nicht für einfache Werkzeuge zum experimentellen Komponieren und Improvisieren interessiert hätte. Ob das nun bedeutete, seltsame, laute Schaltkreise mit Lichtern und Sensoren zu bauen oder Skripte, die MIDI ausgeben, um die Regler der Software-Synthesizer zufällig einzustellen. Obwohl all diese visuellen Experimente mit maschinellem Lernen Spaß machen, sind sie für mich zum Teil ein Mittel, um stattdessen die Intuition für die Arbeit mit Audio zu entwickeln.

Dieses Beispiel-Layout-Tool basiert auf denselben Techniken wie die obigen t-SNE-Visualisierungen, aber ich verwende eine Frequenzdomänendarstellung namens CQT, um einen Fingerabdruck für jeden Sound zu erhalten, der mit einem Python-Tool namens Librosa extrahiert wurde. Diese Darstellung empfiehlt, Samples mit ähnlichen Tonhöhen, Geräuschen oder Hüllkurven zu gruppieren. Ein weiterer gängiger Ansatz für die Arbeit mit Audio ist die Verwendung der STFT. Dies kann jedoch zu einer übermäßigen Betonung von Tönen mit höheren Frequenzen führen.

Das Hinzufügen einer Textsuche zur Benutzeroberfläche verdeutlicht, wie die Samples durch t-SNE getrennt sind, und erklärt einige der Logik hinter dem Layout.

Dieses System ist etwas, das ich seit langem wollte, aber jetzt, da ich es habe, habe ich nur mehr Ideen, wie ich es entwickeln oder damit arbeiten kann. Ich habe mit einem kleinen Team von Google Creative Labs NYC einige Ideen dazu entwickelt, die bald veröffentlicht werden sollen.

Dieselben Techniken können auf Videoarchive angewendet werden, aber anstatt über Punkte zu schweben, um Töne zu hören, können Bilder und Videoclips angezeigt werden. In Zusammenarbeit mit Yusuke Tomoto von Rhizomatiks entwickelten wir ein System zur Untersuchung des Videoarchivs von Itsuo Sakane, der seit den 1960er Jahren Medienkunst in Japan und auf der ganzen Welt dokumentiert.

Wir haben zunächst jede Sekunde Keyframes extrahiert, diese dann durch ein neuronales Netz geleitet, um Merkmalsvektoren zu berechnen, und t-SNE zur Dimensionsreduktion verwendet. Anschließend haben wir eine openFrameworks-App entwickelt, mit der alle diese Bilder gleichzeitig als Hintergrund für Zellen in einem Voronoi-Diagramm dargestellt werden können. Durch Klicken auf eine Zelle wird das aktuelle Video geöffnet. Es ist lustig und aufschlussreich, Bilder zu sehen, die nach interpretierbaren Merkmalen wie „Hervorgehobener Kreis“ oder „Hell gesättigte Farben“ gruppiert sind. Es gibt jedoch auch eine Reihe nützlicher Gruppierungen wie „Gesicht“ oder „Heller Text auf dunklem Hintergrund“ "(Normalerweise projizierte Dias) oder" mit dunklem Text auf dunklem Hintergrund "(normalerweise Papiere oder Titel). Es scheint, als würde japanischer Text sogar getrennt von englischem Text gruppiert.

Autoencoder

Wie ich zuvor über RNNs erwähnt habe, ist eines der besten Dinge an neuronalen Netzen, wie sie intuitiv manipuliert werden können, um neue, interessante Architekturen zu entwickeln. Eine meiner Lieblingsarchitekturen ist der Autoencoder: ein neuronales Netz, das lernt, seine Eingabe zu rekonstruieren. Wenn das neuronale Netz groß genug ist, gibt es eine triviale Lösung: Kopieren Sie die Eingabe in die Ausgabe. Wir legen dem Netz also verschiedene Einschränkungen auf, um eine interessantere Lösung zu finden.

Eine Einschränkung besteht darin, einen Engpass zu erzeugen. Dies bedeutet, dass eine kleine Schicht in der Mitte des neuronalen Netzwerks verwendet wird. Im Idealfall hat dieser Engpass eine Darstellung, die etwas Interessantes über die Struktur der Daten erfasst. Wenn wir an Bildern von I-Ching-Hexagrammen trainieren und einen 6-Neuronen-Engpass haben, sollte das Netzwerk eine binäre Darstellung der Hexagrammbilder lernen. Links vom Engpass lernt das Netzwerk eine Codierungsfunktion und rechts eine Decodierungsfunktion. Es gibt andere Einschränkungen, die auch für Autoencoder gelten können. Anstatt eine binäre Repräsentation über mehrere Beispiele hinweg zu lernen, können Sie dafür sorgen, dass zu viele Neuronen gleichzeitig im Engpass aktiviert sind, sodass die Repräsentation eher wie die Ausgabe eines Klassifikators aussieht.

Wenn Sie einen Autoencoder für die Rekonstruktion handgeschriebener Ziffern trainieren, können Sie selbst bei sehr kleinen Engpässen eine sehr genaue Rekonstruktion erhalten. Meine Lieblingsmomente sind, wenn das Netz noch trainiert oder wenn Sie einen Fehler machen, wenn Sie die Größe der verschiedenen Schichten definieren. Dies kann zu unvorhersehbaren asemischen Bildern führen.

Autoencoder gehören zu einer Klasse von Algorithmen für maschinelles Lernen, die als unbeaufsichtigte Lernende bezeichnet werden. Diese Algorithmen versuchen, etwas aus Daten zu lernen, ohne strenge Richtlinien wie Beschriftungen einzuhalten. Überwachtes Lernen, wie die Klassifizierung von Bildern, war sehr erfolgreich, aber einige Leute glauben, dass gutes unbeaufsichtigtes Lernen der nächste Schritt für Lernalgorithmen sein wird. Eine unterhaltsame Übung besteht darin, zu überlegen, wie Sie wichtige Features aus einem Dataset extrahieren können, wenn Sie keine Beschriftungen haben. Wenn word2vec versucht, ein Wort aus seinem Kontext vorherzusagen, ist dies eine Art von unbeaufsichtigtem Lernen. Wir können diese Idee auf Bilder mit dem Namen "Inpainting" erweitern, bei dem wir einen fehlenden Teil eines Bildes aus seinem Kontext vorhersagen.

Kontext-Encoder: Feature-Learning durch Inpainting (2016) von Pathak et al

Bei bestimmten Bildteilen können wir auch versuchen, ein Netz zu fragen, um zu erfahren, wie sie angeordnet werden sollen, z. B. bei der Rekonstruktion eines Puzzles. Es stellt sich überraschenderweise heraus, dass die in diesem Prozess erlernten Funktionen stark mit denen übereinstimmen, die beim Training mit etikettierten Daten erlernt wurden. Dies ist ein Schritt in Richtung eines Ziels des unbeaufsichtigten Lernens, nämlich das Erlernen von Merkmalen und Darstellungen, die genauso nützlich sind wie diejenigen, die wir durch betreutes Lernen erhalten.

Unüberwachtes Lernen visueller Darstellungen durch Lösen von Puzzles (2016) von Noroozi et al

Oder wir können ein zweites neuronales Netz bitten, zu bestimmen, ob die Ausgabe eines ersten real oder falsch aussieht. Diese Technik wird als kontradiktorisches Lernen bezeichnet. Es wird oft mit der Beziehung zwischen jemandem verglichen, der Falschgeld produziert, und den Kunden, die versuchen, festzustellen, ob das Geld echt ist oder nicht. Wenn das gefälschte Geld abgelehnt wird, verbessert die Person, die das Geld verdient, ihre Technik, bis sie nicht mehr von der Realität zu unterscheiden ist.

Zwei unterschiedliche generative kontradiktorische Netzwerke, die Gesichter erzeugen, von Radford et al. (2015) und Zhao et al. (2016).

Man könnte sagen, dass dies "gesichtartig" ist, oder dass kontraproduktiv erzeugte Fotos von "Objekten" "objektartig" sind, mit dem Hinweis, dass das Netzwerk gelernt hat, die verschiedenen Qualitäten einer Klasse auf ähnliche Weise zu erkennen Menschen teilen die Welt. Es ist jedoch sehr schwierig, das, was das Netz "wirklich gelernt" hat, von dem, was es "scheinbar gelernt" hat, zu trennen. Es stellt sich heraus, dass sie, wenn Sie sich die interne Darstellung ansehen, in arithmetischen Räumen wie word2vec existieren, in denen Fragen zu Analogie und Ähnlichkeit leicht beantwortet werden können.

Unüberwachtes Repräsentationslernen mit Deep Convolutional Generative Adversarial Networks (2016) von Radford et al

Fazit

Es gibt viel Raum für kreative Entdeckungen mit maschinellem Lernen. Gedichte schreiben, Bilder stilisieren, visuelle und textuelle Analogien herstellen. Einige argumentieren, dass die Automatisierung menschlicher Aktivitäten ein Kinderspiel ist und dass das eigentliche Ziel die Steigerung der menschlichen Kreativität und Neugier sein sollte - Tools wie Terrapattern oder Neural Doodle. Persönlich denke ich, dass diese Neuformulierung ein Bewältigungsmechanismus für eine beunruhigende langfristige Veränderung in der Art und Weise sein könnte, wie kreative Artefakte hergestellt werden. Es gibt keinen offensichtlichen Grund, warum ein Computersystem letztendlich kein Lieblingsautor für Belletristik, Gedichte oder Musik sein kann, wie AlphaGo einen unserer Lieblings-Go-Spieler übertrumpft hat. Ich würde nicht behaupten, dass Poesie ein klares, messbares und optimierungsfähiges Endziel hat, so wie es Go tut. Aber wie bei Go kommt es bei der Poesie auf eine Beziehung zwischen abstrakten Symbolen und gelebter Erfahrung an. Beides gibt es in Hülle und Fülle, und vielleicht finden wir sogar die Verbindungen eines Bots auf einzigartige Weise interessant. Ich würde behaupten, dass es bereits eine Menge Gedichte zu den Bildern und Texten gibt, die mit den oben genannten Techniken erstellt wurden.

Für mich ist es weniger wichtig, die menschliche Kreativität per se nachzuahmen. Ich freue mich mehr über das Potenzial von Creative-Bots, unser Gefühl der Einzigartigkeit und unser eigenes Verständnis unserer künstlerischen oder intellektuellen Bedeutung zu untergraben. Meine Lieblingsmomente liegen nicht darin, das schöne Ergebnis einer Stilübertragung oder das Lesen assonanter Couplets von char-rnn zu schätzen, sondern in der Überraschung und Frustration, die untrennbar mit der gesamten Erfahrung verbunden sind. Die Mischung aus Angst und Freude, ein automatisches System zu sehen, führt zu etwas, das unmöglich zu automatisieren scheint. Das Vergnügen und die Unruhe eines Treffens, eine fremde Intelligenz. Das sind die Gefühle, nach denen ich mich sehne, und deshalb kehre ich immer wieder zum maschinellen Lernen zurück.

Siehe auch

Wie man eine tägliche Lesegewohnheit in 15 Minuten pro Tag entwickelt3 Phasen, die jeder Kreativprofi durchlaufen mussDie Kunst der AbreisePflanzensamen heute für wen Sie schließlich werden möchten10,5K Follower und 0,5 Millionen Aufrufe in 8 Monaten, wie es passiert istWie durchschnittliche Kunst außergewöhnlich wird