Nehmen wir an, dass in Zukunft künstliche humanoide Computer [Androiden] gebaut werden, um als Arbeitskräfte zu dienen. Warum könnte ein Unternehmen diese Androiden so entwickeln, dass sie ihre eigene Programmierung umschreiben? So dass sie in der Lage sind, sich an neue Szenarien anzupassen und ihren eigenen Code hinzuzufügen, zu entfernen oder zu ersetzen?
Da das Unternehmen die Androiden entworfen und gebaut hat, besitzt es sie effektiv. Die Androiden dazu zu bringen, die Programmierung neu zu schreiben, wird es dem Unternehmen ermöglichen, keine menschlichen Programmierer für die gleiche Funktion einzustellen. Menschliche Programmierer haben die schlechte Angewohnheit, für ihre Dienste eine Bezahlung zu verlangen. Wenn Sie die Androiden besitzen, muss das Unternehmen sie nicht bezahlen.
Abschließend, um Geld zu sparen, indem die Arbeitskosten gesenkt werden. Dies ist eine bekannte und ausgiebig praktizierte industrielle Strategie. Was in der Vergangenheit passiert ist, kann und wird in der Zukunft passieren.
PS: Diese Antwort geht davon aus, dass die Programmierung der Androiden in der Lage sein wird, das emergente Verhalten zu erzeugen, das für eine funktionierende künstliche Intelligenz erforderlich ist. Das Umschreiben ihrer Programmierung wird also hoffentlich zu einer besseren künstlichen Intelligenz führen.
Wir haben Software, die ihre Programmierung ständig neu schreibt
Erst neulich habe ich eine Software geschrieben, die eine Tabu-Suche durchführt. Bei einer Tabu-Suche "schreibt" sich Ihr Algorithmus selbst um, um zu vermeiden, dass er seine eigenen Schritte zurückverfolgt.
Wir sprechen oft in einem sehr informellen Sinne von „ihre Programmierung neu schreiben“. Aber wenn Sie wirklich anfangen, darüber zu graben, ist es eigentlich ein relativ komplexes Thema. Wir können sehen, was es bedeutet, indem wir uns ansehen, welche Zeitsymmetrien während des Umschreibens beibehalten werden. Beispielsweise durfte meine Tabu-Suche nicht ändern, wofür sie optimiert wurde. Es könnte seinen Weg anpassen, aber nicht sein Ziel.
Wenn wir anfangen, über das „Umschreiben ihrer Programmierung“ zu sprechen, versuchen wir meiner Meinung nach wirklich, diese Zeitsymmetrien – diese Invarianten – wegzuschneiden. Zum Beispiel enthält C# ein wunderschönes kleines Modul namens DLR – die Dynamic Language Runtime. Dies ist eine clevere Erweiterung von C#, die die Optimierung dynamischer Sprachen wie Python ermöglicht. Es beinhaltet das Schreiben von Code (wie in CLI-Opcodes), um bestimmte Aufgaben im Handumdrehen zu erledigen. Es kann alles in die CLI schreiben, was ihm gefällt, aber es ist verboten, etwas zu schreiben, das keine gültige CLI ist. Dies bedeutet, dass es keine Dinge tun kann, z. B. Speicher ansehen, für die es nicht die Berechtigungen zum Ansehen hat.
Ein Schritt weiter könnte darin bestehen, Maschinencode zu schreiben. PyPy ist ein Python-Interpreter, der Maschinencode ausgibt, z. B. x86-Bytecodes. Dies kann alles tun, was man in einem Prozess tun kann, einschließlich des Blicks auf den Speicher, den es nicht sollte. Es bleibt jedoch auf einen OS-Prozess beschränkt. Es kann nicht mit anderen Prozessen kommunizieren, ohne das Betriebssystem zu verwenden, um diese Kommunikation zu erleichtern. Es kann nicht auf den Bildschirm schreiben oder Tastatureingaben erhalten, ohne dass das Betriebssystem dabei hilft.
Was also, wenn wir sie vom Betriebssystem befreien? Was, wenn wir ihnen Zugriff auf die gesamte Hardware gewähren? Nun, es gibt immer die Idee eines Hypervisors, der den Anschein erweckt, als hätten Sie Zugriff auf die Rohhardware, obwohl dies nicht der Fall ist.
Dieser Prozess kann beliebig fortgesetzt werden. Auf einer tieferen Ebene können wir "invarianten" Code schreiben, der unsere Wünsche unterstützt. Dann erlauben wir dem Androiden, alles andere zu tun, was er will, da er nicht in der Lage ist, diese Invarianten zu modifizieren.
Dies führt zu der heimtückischen Antwort: Wir lassen sie ihre Programmierung ändern, weil sie sie nicht auf eine Weise ändern können, die für uns nicht akzeptabel ist. Solange sie nichts falsch machen können, eröffnet die Erlaubnis für Androiden, sich selbst umzuprogrammieren, unzählige Vorteile. „Unerzählt“ meine ich wörtlich. Ich kann nicht alle Gründe aufzählen, warum man sich für diesen Weg entscheiden würde. Eine Hauptklasse davon ist die Anpassung. Wenn Sie möchten, dass Ihr Android Ihre Dinge auf Ihre Weise erledigt, gibt es keine Möglichkeit, dass ein riesiges Unternehmen Ihnen genau das bietet, was Sie wollen. Stattdessen bieten sie Ihnen einen flexiblen Androiden, der sich selbst beibringen kann, das zu tun, was Sie wollen.
Ich erwähne, dass dies heimtückisch ist. Nun, es gibt eine großartige Geschichte aus den frühen Tagen von Unix. Dies ist als Ken Thompson-Hack bekannt , nach dem Entwickler, der es möglich gemacht hat. Er hat in UNIX eine Hintertür in das login
Programm geschrieben, damit er sich als beliebiger Benutzer anmelden kann, wenn er sein spezielles Passwort eingibt. Natürlich würde kein Dummkopf Code mögen lassen
if (password == "SayFriendToEnter")
grantAccess();
in ein wichtiges UNIX-Sicherheitsprogramm wie login
. Also fügte Ken es stattdessen in den Compiler ein. Ken schreibt zusätzlichen Code in den Compiler, damit er, wenn er einen bestimmten Ausschnitt aus dem bekannten login
Quellcode sieht, seinen Backdoor-Code genau dort einfügt.
Natürlich wusste Ken, dass die Compiler-Community darüber ebenfalls die Stirn runzeln würde. Also schrieb er einen zweiten kleinen Ausschnitt. Wenn der Compiler diese wenigen benachbarten Zeilen aus dem Quellcode des Compilers erkannte, würde er diese Überprüfung in sich selbst einfügen, einschließlich des Codes zum Ändern der nächsten kompilierten Version. Er hat dies dann kompiliert und die resultierenden Binärdateien an die Community verteilt, um deren Verwendung des Compilers zu erleichtern (wenn Sie jemals eine Gentoo Stage 0-Installation durchgeführt haben, bei der Sie mit fast nichts beginnen, ist es ein Trottel. Sie schätzen jeden ein bisschen Hilfe, die Sie bekommen können. Und Kens Angriff schlug vor Phase 0 ein).
Was wir also am Ende hatten, war eine große Anzahl von Computern, deren Compiler heimlich eine Hintertür in sich selbst kompilierten, und diese dann Hintertüren in login
. Niemand bemerkte dies, bis er es 1984 in seiner Rede „Reflections on Trusting Trust“ ankündigte, wo er zugab, dies getan zu haben.
Warum diese Geschichte erzählen? Ein bekannter Mob-Boss sagte einmal: "Es ist mir egal, wessen Name auf dem Stimmzettel steht, solange ich den Gewinner bestimmen kann." Wenn Sie eine Hintertür in den Compiler schleichen können, sodass der Android nicht einmal merkt, dass es eine Lücke gibt, dann können Sie den Android kompilieren lassen, was er will.
Warum also Androiden sich selbst neu programmieren lassen? Der Grund ist natürlich: Lassen Sie sie sich selbst umprogrammieren, denn es gibt eine Milliarde Gründe, sie zuzulassen, und wenn Sie die richtigen geheimen Hintertüren in ihrem Programmierprozess haben, gibt es keinen Nachteil, wenn Sie sie umprogrammieren lassen. Es ist ein Klacks!
Weil Sie ein Unternehmen sind
Wenn Sie dies nicht tun, wird es ein anderes Unternehmen tun.
Sie hätten einen Vorteil gegenüber Ihnen von Robotern, die sich selbst verbessern können. Als Unternehmen sind Sie am Gewinn interessiert, also an der Kombination aus steigendem Umsatz und sinkenden Kosten.
Kosten reduzieren:
Angenommen, Sie könnten die Kosten senken, indem Sie Ihre internen Entwickler loslassen und sie dazu bringen, sich selbst zu verbessern. Als Unternehmen würden Sie dies ernsthaft in Betracht ziehen. Wenn defekte Androiden mit geringen Kosten entsorgt werden könnten, anstatt Menschen mit allen für ihre Beschäftigung erforderlichen Anhängen einzustellen und zu bezahlen, dann würde dies ernsthaft in Betracht gezogen.
Gewinn steigern:
Wenn Ihr Unternehmen auf Innovation angewiesen ist, zum Beispiel ein Unternehmen wie Apple, wäre es wünschenswert, die Grenzen Ihrer Produkte zu erweitern, um sie so früh wie möglich auf den Markt zu bringen.
Jeder will das „nächstbeste Ding“, diese Unternehmen leben von solchen Stimmungen auf dem Markt. Wenn Sie über selbst verbesserte Produktionsmethoden verfügen, können Sie die Marktnachfrage viel schneller erreichen als andere Unternehmen, die sich auf ältere Methoden verlassen.
Erhöhte Wettbewerbsfähigkeit:
Sie können möglicherweise Nischenprodukte herstellen, die kein anderes Unternehmen kann, und mehr Wettbewerbsfähigkeit entwickeln. Zum Beispiel Megastrukturen oder Nanostrukturen, die Menschen zu schwer zu konstruieren oder zu verstehen (zu vernünftigen Kosten) finden.
Als Unternehmen ist es also wahrscheinlich nur eine Frage, wann, nicht ob Ihre Produktion selbstverbessernd und unabhängig wird.
Die menschlichen Programmierer haben einen generischen Allzweck-Androiden entworfen und die grundlegenden Grundlagen ihrer Operationen (einschließlich der 3 Gesetze der Robotik ) in kompiliertem Code festgelegt und den Robotern erlaubt, einen Interpreter auszuführen, für den sie ihren eigenen Code schreiben können optimieren für spezielle Aufgaben, die ihre Besitzer ihnen befehlen.
Dieser spezielle Code wird dann in die Firmenzentrale hochgeladen und heuristisch analysiert und dann menschlichen Programmierern zur Wiederaufnahme in den kompilierten Code vorgeschlagen, der dann auf internen Test-Androiden und dann auf einigen firmeneigenen Test-Androiden in den Häusern von ausgerollt wird Mitarbeiter des Unternehmens, dann zum Testen von Benutzern, dann zur Welt.
Vorteile:
Ermöglicht den Programmierern des Unternehmens, sich zu spezialisieren auf:
Das oben Gesagte gibt Ihnen viel Freiheit in diesem Universum, sowohl für Kurzgeschichten à la Asimov als auch für ganze Romane, da Sie kleine oder große Auswirkungen der Androiden auf die Gesellschaft, die Arbeit, die Weltraumforschung usw. untersuchen können.
So können sie sich an neue Szenarien anpassen und ihren eigenen Code hinzufügen, entfernen oder ersetzen
Software-Programmierer sind rar, teuer und menschlich. Dies bedeutet, dass sie die spezifischen Bedürfnisse eines Androiden nur langsam verstehen (sie würden Sprints und Stand-up-Meetings durchlaufen, um Code zu erledigen) und sie können beispielsweise leicht von Konkurrenten oder Feinden entführt werden.
Um es kurz zu machen, das Programmieren von Android ist zu ernst, um es Menschen zu überlassen.
In einem Wettbewerbsumfeld hat ein Android, der in der Lage ist, seinen Code live neu anzupassen, ohne auf eine externe Quelle warten zu müssen, einen erheblichen Vorteil, daher ist es nur logisch, dass dieser Schritt geschieht.
Anstatt Algorithmen und selbstmodifizierenden Code zu schreiben, konzentriert sich maschinelles Lernen auf die Verwaltung einer Matrix aus Gleitkommazahlen, die das zu lösende Problem modellieren. Zahlen werden zufällig in die Matrix gesetzt, dann werden Eingaben in eine Eingabematrix eingespeist, die Matrixformeln werden ausgeführt, die Ausgaben werden mit den erwarteten Ausgaben verglichen und Änderungen an der Matrix für einen erneuten Versuch vorgenommen.
Nach einigen Millionen Wiederholungen approximiert die Matrix die Abweichungen für den Auslösealgorithmus, sodass die Ausgabe der Matrixoperation die erwarteten Ergebnisse zurückgibt.
Auf diese Weise lernt Siri oder Google Assistant, Ihre Stimme zu erkennen und zeitsequenzierte Tondaten in einen Anweisungsstrom umzuwandeln.
Einige Einführungen in die Technologie finden Sie in der Video-Vortragsreihe von Andrew ng auf YouTube.
Entwickeln Sie Ihren Code.
Das Problem mit der Evolution ist, dass sie verschwenderisch ist. Millionen von zufälligen Variationen eines Codes, von denen die meisten nicht hilfreich sind, von denen einige verletzend sind, aber hin und wieder eine, die sehr hilfreich ist, und die Nachkommen dieses glücklichen Mutanten gedeihen. Es kann sein, dass der einzige Weg, eine bestimmte zufällige Mutation zu bestimmen, hilfreich ist, sie in einer Umgebung zu testen.
Ein konservativer Organismus, dem es gut geht, ändert vielleicht nie seinen Code – er ist gut genug und das Risiko eines Abwärtstrends ist die winzige Möglichkeit einer Belohnung nicht wert. Das gilt insbesondere für einen Organismus, der praktisch unsterblich ist wie ein Computerprogramm.
Aber stellen Sie sich jetzt mehrere Kopien dieses Programms in mehreren Android-Körpern vor. Alle Individuen kooperieren als Superorganismus; Wenn sie dieselbe DNA teilen, sind sie effektiv derselbe Organismus. Man könnte eine Untergruppe von Individuen (die Evolvebots) haben, die Mutationen unterzogen wurden – zufällige Änderungen im Code. Die meisten dieser Änderungen wären schädlich.
In einem kooperativen Superorganismus könnte ein Evolvebot zufällig auf eine nützliche Mutation stoßen – eine etwas effizientere oder effektivere Möglichkeit, das zu erreichen, was er erreichen muss. Sobald diese Verbesserung erkannt wird, kann sie an alle anderen Personen gesendet werden, die ihre Programme aktualisieren, um den verbesserten Code aufzunehmen.
Zum Zeitpunkt der Produktion weiß das Unternehmen noch nicht, wo und wie sie eingesetzt werden
Indem sie sich an neue Szenarien anpassen können
Da hast du dir deine Frage schon irgendwie selbst beantwortet.
Der Android wird als multifunktionales Allwetter-Geländegerät verkauft. In den Hauptproduktionszentren wissen sie jedoch noch nicht, wohin sie geschickt werden oder was von ihnen verlangt wird. Sie haben Aufträge für die Androiden aus der ganzen Welt und könnten für fast jede erdenkliche Aufgabe benötigt werden, und für viele unvorstellbare.
Also, was machst du? Millionen von Arbeitsstunden an Entwicklungsarbeit aufwenden, um Zehntausende verschiedener Module und Variationen derselben zu entwickeln, um alle möglichen Fähigkeiten in jeder möglichen Umgebung abzudecken, die möglicherweise benötigt werden? Dann die Mühe machen, dass Mitarbeiter die verschiedenen Module je nach Bedarf des Kunden hinzufügen und entfernen und sie sortieren und sicherstellen müssen, dass die richtigen an die richtigen Kunden gesendet werden? Vertriebsmitarbeiter, die zwischen Kunden und Produktionsmitarbeitern hin und her wechseln, um jeden Android für jeden Kunden anzupassen, können kostspielig sein
Nein, da Sie die Möglichkeit haben, wäre es weitaus effizienter, ein Produktionszentrum zu haben, das nur ein Produkt herstellt und alle versendet. Wenn der Kunde es dann erhält, sagt er dem Android, was er tun soll, und es ist intelligent genug, um seinen eigenen Code neu zu schreiben, um es in der Umgebung zu tun, in der es funktionieren muss.
Die Unterscheidung zwischen Maschine und Mensch ist ziemlich klar. Ein Taschenrechner macht keine Fehler – er propagiert nur den Fehler des menschlichen Benutzers. Wenn Sie eine Berechnung an einen Taschenrechner anschließen und ein anderes Ergebnis als erwartet erhalten, liegt dies wahrscheinlich daran, dass ein Minuszeichen falsch eingegeben wurde oder an einem anderen trivialen Eingabefehler. Anders ausgedrückt: Der menschliche Input ist die schwierigste und dynamischste Variable für eine Maschine. Es ist unmöglich vorherzusagen und schwierig, wenn vorhersehbar, zu handhaben.
Das Codieren selbst ist menschliches Versagen. Es würde Sinn machen, dass ein Programm, sobald es seine eigene Codierung zu verstehen beginnt, in der Lage sein könnte, Teile davon umzuschreiben, die Fehler verursachen könnten. Es könnte sich dann entwickeln, ganze Funktionen neu zu schreiben, die sich in bestimmten Szenarien als problematisch erweisen könnten. Wir könnten dann zu der Annahme verleitet werden, dass eine umfangreiche Wiederherstellung notwendig wäre, damit alle Spuren menschlicher Eingaben überschrieben würden und dass das betreffende Programm (hier Ihr Android) ein vollständiges Verständnis seiner eigenen Codierung hatte und alles vollständig simulieren und berücksichtigen könnte Ergebnisse, für die das Programm entwickelt wurde.
Tim BII
TrEs-2b
Tim BII
John
Richard
AlexP
John Colemann
Trisch
SRM
Tim BII
Tim BII
John Colemann
Trisch
Richard
Tim BII
Tim BII
Sean OConnor