Phänotropes Programmdesign


15

Ich bin kürzlich auf eine Idee von Jaron Lanier gestoßen, die sich "phenotrope Programmierung" nennt.

Die Idee ist, in Computerprogrammen Oberflächenschnittstellen anstelle von Einzelpunktschnittstellen zu verwenden und mithilfe von Statistiken kleinere Fehler herauszufiltern, die normalerweise zu einem Absturz eines "klassischen" Programms führen würden.

Die zweizeilige Beschreibung ist hier:

Laut Jaron hat der „wirkliche Unterschied zwischen der aktuellen Idee von Software, die die Einhaltung von Protokollen ist, und der Idee, die er diskutiert, Mustererkennung, mit den Arten von Fehlern zu tun, die wir erzeugen“ und „wenn“ wir sie nicht beachten "Wenn wir nicht anders über Software nachdenken und sie erstellen, werden wir keine Programme schreiben, die größer als 10 Millionen Codezeilen sind, egal wie schnell unsere Prozessoren werden."

Die etwas längere Erklärung ist hier . Und die noch längere Erklärung ist hier .

Die Frage, die sich hinter den offensichtlichen Konnotationen von Robotern und Overlords verbirgt, lautet: Wie würde man eigentlich ein "phänotropisches Programm" entwerfen und schreiben?


1
Nichts für ungut, aber die Artikel, die Sie verlinkt haben, sind sehr vage und naiv. Könnten Sie präziser beschreiben, was Sie darunter verstehen phenotropic program?
Simon Bergot

Lies das immer längere durch. Es beschreibt es ausführlich.
Adv

4
Ich denke, die einzige Möglichkeit, dies zu beantworten, besteht darin, zu definieren, was "phenotropes Programm" ist. In diesem Fall wird die Antwort meinungsbasiert. Fragen Sie also vor dem Schreiben eines "phenotropen Programms", was "phenotropes Programm" ist.
Euphoric

1
@ Simon: Die Frage stellt im Grunde das Gleiche, daher weiß ich nicht, dass Ihre Anfrage möglich ist, ohne dass das OP die Frage tatsächlich selbst beantwortet.
Robert Harvey

1
Verwandte Themen (den Autor des Textes in Betracht ziehen): mail-archive.com/fonc@vpri.org/msg03808.html
Thiago Silva

Antworten:


23

Lanier hat ein 50-Cent-Wort erfunden, um ein Netz aus einer Reihe von Ideen zusammenzustellen, die ein Rechenmodell für die Erstellung von Computerprogrammen mit bestimmten identifizierbaren Merkmalen beschreiben.

Das Wort bedeutet:

Ein Mechanismus für die Interaktion von Komponenten, der die Mustererkennung oder künstliche Erkennung anstelle des Funktionsaufrufs oder der Nachrichtenübergabe verwendet.

Die Idee stammt größtenteils aus der Biologie. Ihr Auge ist mit der Welt verbunden, nicht über eine Funktion wie See(byte[] coneData), sondern über eine Oberfläche , die als Netzhaut bezeichnet wird. Es ist keine triviale Unterscheidung; Ein Computer muss alle Bytes coneDatanacheinander scannen , während Ihr Gehirn alle diese Eingaben gleichzeitig verarbeitet.

Bildbeschreibung hier eingeben

Lanier behauptet, dass die letztere Schnittstelle fehlertoleranter ist (ein einziges Bit coneDatakann das gesamte System beschädigen). Er behauptet, dass es Pattern Matching und eine Vielzahl anderer Funktionen ermöglicht, die für Computer normalerweise schwierig sind.

Der fundamentale "phenotrope" Mechanismus in einem Computersystem wäre das Artificial Neural Network (ANN). Es wird eine "Oberfläche" als Eingabe und keine definierte Schnittstelle verwendet. Es gibt andere Techniken, um ein gewisses Maß an Mustererkennung zu erreichen, aber das neuronale Netz ist dasjenige, das der Biologie am nächsten kommt. Es ist einfach, eine ANN zu erstellen. Es ist aus einer Reihe von Gründen schwierig, die von Ihnen gewünschte Aufgabe zuverlässig auszuführen:

  1. Wie sehen die Eingabe- und Ausgabe- "Oberflächen" aus? Sind sie stabil oder variieren sie mit der Zeit in ihrer Größe?
  2. Wie bekommst du die richtige Netzwerkstruktur?
  3. Wie trainierst du das Netzwerk?
  4. Wie erhalten Sie angemessene Leistungsmerkmale?

Wenn Sie bereit sind, sich von der Biologie zu trennen, können Sie auf das biologische Modell (das versucht, den Betrieb tatsächlicher biologischer Neuronen zu simulieren) verzichten und ein Netzwerk aufbauen, das enger mit den tatsächlichen "Neuronen" eines digitalen Computersystems (Logik) verbunden ist Tore). Diese Netzwerke werden als Adaptive Logic Networks (ALN) bezeichnet. Ihre Arbeitsweise besteht darin, eine Reihe linearer Funktionen zu erstellen, die sich einer Kurve annähern. Der Prozess sieht ungefähr so ​​aus:

Bildbeschreibung hier eingeben

... wobei die X-Achse eine Eingabe für die ALN darstellt und die Y-Achse eine Ausgabe darstellt. Stellen Sie sich nun die Anzahl der linearen Funktionen vor, die sich nach Bedarf erweitern, um die Genauigkeit zu verbessern, und stellen Sie sich vor, dass der Prozess über n beliebige Dimensionen hinweg abläuft, vollständig mit UND- und ODER-Logikgattern implementiert, und Sie wissen, wie ein ALN ​​aussieht.

ALNs haben bestimmte, sehr interessante Eigenschaften:

  1. Sie sind ziemlich leicht zu trainieren,
  2. Sie sind sehr vorhersehbar, dh geringfügige Änderungen des Inputs erzeugen keine wilden Schwankungen des Outputs.
  3. Sie sind blitzschnell, weil sie in der Form eines Logikbaums aufgebaut sind und sich wie eine binäre Suche verhalten.
  4. Ihre interne Architektur entwickelt sich natürlich als Ergebnis des Trainingssatzes

Ein phänotropes Programm würde also ungefähr so ​​aussehen. es hätte eine "Oberfläche" für Eingaben, eine vorhersagbare Architektur und ein vorhersagbares Verhalten und wäre tolerant gegenüber verrauschten Eingaben.

Lesen Sie weiter
Eine Einführung in adaptive Logiknetze mit einer Anwendung zur Audit-Risikobewertung
"Objektorientiert" vs. "Nachrichtenorientiert" von Alan Kay


1
Korrigieren Sie mich, wenn ich falsch liege, aber eine "Oberflächen" -Eingabe klingt wie eine Sammlung unabhängiger (oder größtenteils unabhängiger) Komponenten. Im Beispiel Auge könnte es so ausgesehen haben See(List<Cone> cones)(wo jeder Coneunabhängig voneinander ist), ja?
FrustratedWithFormsDesigner

1
@Frustrated Sie können natürlich eine Oberfläche mit einem Bytearray simulieren, aber kehren Sie zu Laniers Definition zurück, die die Nachrichtenübergabe und den Funktionsaufruf durch Erkennung und Mustererkennung ersetzt. Es knüpft an das hier beschriebene Skalierbarkeitsproblem an . Fehlertoleranz ist auch Teil der Gleichung. Denken Sie an "intelligentere Schnittstellen".
Robert Harvey

3
Betreff: "fehlertoleranter". Hat Lanier jemals optische Täuschungen gesehen? Hat er sich jemals mit der Psychologie des Gehirns befasst? Das Gehirn wird IMMER versuchen, einen Sinn daraus zu ziehen, was seine Eingaben ihm sagen, egal wie falsch diese Schlussfolgerungen sind. Die Funktionsweise des Gehirns ist äußerst fehlerhaft. Also, solange es keine Rolle spielt, ob das Programm ziemlich häufig ausfällt, genau wie ein typischer Mensch, denke ich, dass das Modell, auf das Bezug genommen wird, in Ordnung ist. Die meisten Leute erwarten jedoch, dass Computer korrekt sind. Es wird schwierig sein, ein computergesteuertes Auto zu verkaufen, das die meiste Zeit Unfälle vermeidet.
Dunk

2
@Dunk: ... aber es ist immer noch legal, Autos für menschliche Fahrer zu bauen und zu verkaufen, die es meistens schaffen, Unfälle zu vermeiden.
Doc Brown

2
@Dunk the point ist nicht das Vorhandensein von Fehlern - sonst würden wir den klassischen mathematischen Weg gehen, um alles zu beweisen. Der Punkt ist 1: das Ausmaß der Auswirkungen auf das Scheitern (das Universum stürzt nicht ab, wenn ich ein Kaninchen für einen Gorilla halte - tatsächlich bin ich danach immer noch ein Mensch, mein Gehirn und mein Sohn), 2 : Die physischen / biologischen Einheiten des Raums müssen sich erholen, Feedback geben und nach Alternativen suchen, die "die Dinge am Laufen halten - auch auf unoptimale Weise". und 3: die Idee, dass diese Eigenschaften für uns zwingend sind, um sie in unseren künstlichen Systemen zu wollen
Thiago Silva

1

Ich denke, wir stehen ganz am Anfang eines der Schritte, die erforderlich sind, um dorthin zu gelangen, und sammeln viele Daten in Formaten, die analysiert werden können. Das Internet, die Google-Suche, Fitbit (jeder Schritt, jede Bewegung, die Sie machen, ich werde Sie beobachten.), FourSquare, ein Geo-Standort für Smartphones, Facebook-Posts und SO-Fragendaten werden gesammelt. Wir sind weit davon entfernt, wie viele sensorische Daten ein durchschnittlicher Mensch im Laufe seines Lebens erfasst, aber wir nähern uns ihnen.

Beginnen Sie mit der Kategorisierung von Millionen von Vogelbildern und erhalten Sie Feedback von Leuten, die Ihnen sagen, dass es sich nicht um einen Vogel handelt. Dann können Sie mit der Erstellung eines Algorithmus beginnen. Von dort aus kann ein unschärferer Eindruck (ich würde es als Modell bezeichnen, aber das ist zu genau für das, was wir zu codieren versuchen) erzeugt werden.

class Birdish

Woher weiß ein Hund so viel über den Besitzer? Weil es sie viel beobachtet. Der Hund hat zugehört, wie Autos in die Einfahrt fuhren und damit korrelierten, dass der Besitzer beim Öffnen der Haustür, wie es aussieht, ein Auto an seinem Geräusch erkennen kann. Das könnten wir auch, aber wir sehen keinen Grund, uns darum zu kümmern. Und genau das stimmt nicht mit der aktuellen Software. Sie achtet nicht darauf, was der Benutzer tut. Es wird nur darauf gewartet, dass der Benutzer das tut, was die IT vom Benutzer erwartet.

Etwas so Einfaches wie das Einstellen eines Weckers könnte durch eine kleine Beobachtung / Analyse meiner aktuellen Gewohnheiten geschehen. Wir haben es aufgegeben, Videorecorder-Timer einzustellen, bevor die Technologie durch digitale ersetzt wurde. Und wäre das so schnell gegangen, wenn wir den TV-Programmführer mit dem Videorecorder verbunden hätten? Ich habe die gleiche Fernsehsendung 4 Wochen hintereinander gesehen, aber beim fünften Mal habe ich nicht einmal den Fernseher eingeschaltet. Offensichtlich möchte ich es aufgenommen haben. Kannst du nicht sagen, dass ich zu spät bei der Arbeit bin, um diesen Beitrag zu schreiben und mit meinem typischen Pendelverkehr nicht rechtzeitig nach Hause komme? Du hast die Daten, mach die Mathe.

Sammeln Sie immer mehr Daten und finden Sie dann bessere Möglichkeiten, diese zu analysieren, zu erkennen und zu verbergen. Wir gehen über das hinaus, was nur über eine Tastatur mit unseren Telefonkameras und bald auch mit Brillenglaskameras eingegeben werden kann. Das ist nur der Anfang.


1

Hier ist ein Foliensatz zum Definieren einer probabilistischen Programmiersprache in Scala .

Es ist das erste anständige Implementierungsbeispiel für einige der Kernkomponenten des Systems, das Jaron Lanier vorschlägt.


Das sieht sehr schön aus. Vielleicht werde ich versuchen, eine Bibliothek für Java zu entwerfen, die ähnlich funktioniert.
adv

@adv wie würden wir es finden, wenn du es tust?
New Alexandria

1
Ich werde einen Link zu einem Github-Repo veröffentlichen, wenn ich dazu komme, es zu erstellen.
Adv

-1

Ein Gedanke, den ich kürzlich hatte:

Wenn Sie übergeordnete Ideen wie Haskells Maybe Monad verwendet haben, um Remoteprozeduraufrufe auf andere Systeme zu übertragen. Sie senden eine Anfrage an den Server. Es kommt aber nichts zurück (Server ist kaputt). Oder ein Promise kommt zurück (Server ist ausgelastet) und Ihre Programme arbeiten mit diesen Werten None oder Promised weiter. Das ist wie die Fehlertoleranz, die Lanier sucht.

Vielleicht gibt es Möglichkeiten, andere Eventualitäten zusammenzufassen. Zum Beispiel Ferngespräche, die mit einer Annäherung zurückkommen, die im Laufe der Zeit durch eine Art Hintergrundverhandlung immer weiter verfeinert wird. dh was zurückkommt, ist so etwas wie ein Versprechen, aber nicht nur "weiter festhalten und damit arbeiten und ein angemessener Wert wird in Kürze auftauchen", sondern "weiter festhalten und damit arbeiten und eine bessere Annäherung wird in Kürze auftauchen". (Und immer wieder). Dies würde in der Lage sein, viele Fehler vor dem Programmierer zu verbergen, genauso wie Netzwerkprotokolle viele Netzwerkfehler auf niedriger Ebene vor dem Programmierer verbergen.


Wie beantwortet dies die gestellte Frage?
Mücke

Wenn ich das richtig verstehe, ist die phänotrope Programmierung eine Möglichkeit, große (häufig aus mehreren Computern bestehende) robuste Systeme zu programmieren. Das Problem ist, dass alle biologischen Metaphern es vage und schwierig machen, in praktische Programmierbegriffe zu übersetzen. Hier schlage ich vor, dass bestimmte Programmierkonstrukte, die nicht vage sind (z. B. Monaden, Versprechungen usw.), eine Möglichkeit darstellen könnten, einige dieser Vorstellungen von Laniers konkretem und praktisch programmierbarem Verhalten umzusetzen.)
Interstar
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.