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?
phenotropic program
?Antworten:
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:
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 BytesconeData
nacheinander scannen , während Ihr Gehirn alle diese Eingaben gleichzeitig verarbeitet.Lanier behauptet, dass die letztere Schnittstelle fehlertoleranter ist (ein einziges Bit
coneData
kann 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:
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:
... 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:
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
quelle
See(List<Cone> cones)
(wo jederCone
unabhängig voneinander ist), ja?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.
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.
quelle
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.
quelle
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.
quelle