Wenn Transformer als Allzweckcomputer verwendet wird, kann er auch kontextbezogene Lernalgorithmen ausführen. Diese Forschung ist sehr einfallsreich.

王林
Freigeben: 2023-04-13 11:31:02
nach vorne
729 Leute haben es durchsucht

Transformer ist zu einer beliebten Wahl für verschiedene maschinelle Lernaufgaben geworden und hat gute Ergebnisse erzielt. Wie kann es also sonst verwendet werden? Forscher mit großer Fantasie wollen damit tatsächlich programmierbare Computer entwerfen!

Wenn Transformer als Allzweckcomputer verwendet wird, kann er auch kontextbezogene Lernalgorithmen ausführen. Diese Forschung ist sehr einfallsreich.

Die Autoren dieses Artikels stammen von der Princeton University und der University of Wisconsin. Er trägt den Titel „Looped Transformers as Programmable Computers“ und zielt darauf ab, zu untersuchen, wie Transformer zur Implementierung allgemeiner Computer verwendet werden kann.

Konkret schlagen die Autoren einen Rahmen für die Verwendung von Transformatornetzwerken als Allzweckcomputer vor, indem sie mit bestimmten Gewichten programmiert und in Schleifen platziert werden. In diesem Rahmen fungiert die Eingabesequenz als Lochkarte, bestehend aus Anweisungen und Speicher zum Lesen/Schreiben von Daten.

Die Autoren haben gezeigt, dass eine konstante Anzahl von Encoderschichten grundlegende Rechenblöcke simulieren kann. Mit diesen Bausteinen simulierten sie einen kleinen Befehlssatzcomputer. Dies ermöglichte es ihnen, den iterativen Algorithmus einem Programm zuzuordnen, das von einem Schleifentransformator mit 13 Schichten ausgeführt werden konnte. Sie zeigen, wie dieser Transformator anhand seiner Eingaben einen einfachen Taschenrechner, eine grundlegende lineare Algebra-Bibliothek und einen kontextbezogenen Lernalgorithmus mithilfe von Backpropagation simulieren kann. Diese Arbeit unterstreicht die Vielseitigkeit von Aufmerksamkeitsmechanismen und zeigt, dass selbst oberflächliche Transformatoren umfassende Allzweckprogramme ausführen können.

Papierübersicht

Transformer (TF) ist zu einer beliebten Wahl für verschiedene maschinelle Lernaufgaben geworden und hat bei vielen Problemen in Bereichen wie der Verarbeitung natürlicher Sprache und Computer Vision modernste Ergebnisse erzielt. Ein Hauptgrund für den Erfolg von Transformer ist seine Fähigkeit, Beziehungen höherer Ordnung und langfristige Abhängigkeiten durch Aufmerksamkeitsmechanismen zu erfassen. Dies ermöglicht TF die Modellierung kontextbezogener Informationen und macht sie effektiver bei Aufgaben wie maschineller Übersetzung und Sprachmodellierung, bei denen Transformer andere Methoden durchweg übertrifft.

Sprachmodelle mit Hunderten von Milliarden Parametern, wie GPT-3 (175B Parameter) und PaLM (540B Parameter), haben bei vielen Aufgaben der Verarbeitung natürlicher Sprache eine Spitzenleistung erreicht. Interessanterweise können einige dieser großen Sprachmodelle (LLMs) auch In-Context-Learning (ICL) durchführen, indem sie bestimmte Aufgaben basierend auf einer kurzen Eingabeaufforderung und einigen Beispielen spontan anpassen und ausführen. Die ICL-Funktionen von LLMs sind verfügbar, ohne dass sie trainiert werden müssen, und ermöglichen es diesen großen Modellen, neue Aufgaben effizient auszuführen, ohne Gewichte zu aktualisieren.

Überraschenderweise kann LLM algorithmische Aufgaben und Inferenzen ausführen, und [Nye et al. [2021], Wei et al. [2022], Wei et al. Zhou et al. [2022] und andere haben die Machbarkeit bewiesen. Arbeiten von [Zhou et al. [2022]] und anderen zeigen, dass LLM Additionsoperationen für unbekannte Anwendungsfälle erfolgreich durchführen kann, wenn eine Eingabeaufforderung mit einem Multibit-Additionsalgorithmus und einigen Additionsbeispielen gegeben wird. Diese Ergebnisse zeigen, dass LLM auf der Grundlage algorithmischer Prinzipien vorab angewiesene Befehle für bestimmte Eingaben zum Zeitpunkt der Inferenz ausführen kann, als ob natürliche Sprache als Code interpretiert würde.

Es gibt Hinweise darauf, dass Transformer Turing-Maschinen mit ausreichender Tiefe oder rekursiven Verknüpfungen zwischen Aufmerksamkeitsschichten simulieren kann [Pérez et al. Dies zeigt das Potenzial von Transformer-Netzwerken, den durch die Eingabe spezifizierten algorithmischen Anweisungen genau zu folgen. Diese Konstrukte sind jedoch relativ allgemein gehalten und bieten kein tiefes Verständnis dafür, wie ein Transformer erstellt wird, der bestimmte algorithmische Aufgaben ausführen kann.

Ein professionelleres Design ermöglicht es TF jedoch, fortgeschrittenere Programme auszuführen. Beispielsweise haben [Weiss et al. [2021]] ein Rechenmodell und eine Programmiersprache entworfen, die einfache Auswahl- und Aggregationsbefehle auf Index-Eingabetoken abbilden. Diese Sprache kann zum Erstellen einer Vielzahl interessanter Algorithmen verwendet werden, z. B. zum Zählen und Sortieren von Token, zum Erstellen von Histogrammen und zum Identifizieren von Dyck-k-Sprachen. In der Restricted Access Sequence Processing Language (RASP) geschriebene Programme können dann in Transformer-Netzwerken abgebildet werden, deren Größe typischerweise mit der Größe des Programms skaliert.

Eine weitere Studie demonstriert eine Methode zur Auswahl von Transformer-Modellgewichten zur Verwendung als Optimierungsalgorithmus für das dynamische Lernen linearer Regressionsmodelle, wobei bei gegebenen Trainingsdaten als Eingabe ein implizites Training zur Inferenzzeit durchgeführt wird. Diese Methoden erfordern typischerweise eine Anzahl von Schichten proportional zur Anzahl der Iterationen des Lernalgorithmus und sind auf eine einzige Verlustfunktion und ein Ensemble von Modellen beschränkt.

Die Fähigkeit, Transformer-Modelle zu programmieren, um die abstrakten Berechnungen von Turing-Maschinen, spezielle Befehle für Sprachen wie RASP und spezifische Algorithmen für ICL zu emulieren, unterstreicht das Potenzial von Transformer-Netzwerken als vielseitige programmierbare Computer.

Die Forschung des Autors zielt darauf ab, diese vielversprechende Perspektive zu erkunden und aufzudecken, wie der Aufmerksamkeitsmechanismus einen Allzweckcomputer simulieren kann, der von der Befehlssatzarchitektur inspiriert ist.

Transformer als programmierbare Computer

In diesem Artikel zeigen die Autoren, dass Transformer-Netzwerke komplexe Algorithmen und Programme simulieren können, indem sie sie mit bestimmten Gewichten fest codieren und in eine Schleife platzieren. Die Autoren erreichten dies durch Reverse Engineering von Attention, um grundlegende Rechenblöcke zu simulieren, beispielsweise Bearbeitungsvorgänge an Eingabesequenzen, nichtlineare Funktionen, Funktionsaufrufe, Programmzähler und bedingte Verzweigungen. Der Artikel des Autors zeigt, wie wichtig es ist, eine einzelne Schleife oder Rekursion zu verwenden, um die Ausgabesequenz eines Transformers wieder mit seiner Eingabe zu verketten, wodurch die Notwendigkeit eines tiefen Modells vermieden wird.

Wenn Transformer als Allzweckcomputer verwendet wird, kann er auch kontextbezogene Lernalgorithmen ausführen. Diese Forschung ist sehr einfallsreich.

Papieradresse: https://arxiv.org/pdf/2301.13196.pdf

Der Autor erreicht dies, indem er einen Transformer entwirft, der eine in einer einzigen Anweisung geschriebene generische Version des Programms ausführen kann , genannt SUBLEQ (A,B,C), subtrahiert und verzweigt, wenn es kleiner oder gleich Null ist. SUBLEQ ist eine Einzelanweisungssprache, die einen Ein-Befehlssatz-Computer (OISC) definiert. SUBLEQ besteht aus drei Speicheradressenoperanden. Während der Ausführung wird der Wert der Speicheradresse B vom Wert der Speicheradresse A subtrahiert und das Ergebnis in B gespeichert. Wenn das Ergebnis von B kleiner oder gleich 0 ist, springen Sie zur Adresse C, andernfalls fahren Sie mit der nächsten Anweisung fort. Diese Anweisung definiert jedoch einen Allzweckcomputer.

Der Autor hat einen expliziten Transformer erstellt, der ein SUBLEQ-ähnliches Programm implementiert, eine flexiblere Einzelanweisung, die der Autor FLEQ nennt, in der Form

Wenn Transformer als Allzweckcomputer verwendet wird, kann er auch kontextbezogene Lernalgorithmen ausführen. Diese Forschung ist sehr einfallsreich.

wobei f_m aus einer Menge von erhalten werden kann Funktionen (Matrixmultiplikation / nichtlineare Funktion / Polynom usw.), die fest in das Netzwerk codiert werden können. Die Tiefe eines Schleifentransformators, der ein FLEQ-Programm ausführen kann, hängt nicht von der Tiefe des Programms oder der Anzahl der Codezeilen ab, sondern vielmehr von der Tiefe, die zum Implementieren eines einzelnen FLEQ-Befehls erforderlich ist, was konstant ist. Dies wird erreicht, indem der Transformer in einer Schleife über die Eingabesequenz ausgeführt wird, ähnlich wie eine CPU arbeitet.

Mit diesem Framework demonstrieren die Autoren die Fähigkeit, eine Vielzahl von Funktionen zur Inferenzzeit zu simulieren, darunter einen einfachen Taschenrechner, eine grundlegende lineare Algebra-Bibliothek (Matrixtransponierung, Multiplikation, Inversion, Potenziteration) und eine implizite ICL, die Backpropagation implementiert in einem vollständig verbundenen Netzwerk. Die Eingabesequenz oder Eingabeaufforderung verhält sich wie eine Lochkarte, die die Anweisungen enthält, die der Transformer ausführen muss, und gleichzeitig Platz zum Speichern und Bearbeiten der im Programm verwendeten Variablen bietet. Die zur Durchführung dieser Verfahren verwendeten Transformer-Netzwerke haben alle eine Tiefe kleiner oder gleich 13, und die Gewichtsmatrizen für alle diese Modelle werden bereitgestellt. Der folgende Satz fasst die wichtigsten Erkenntnisse des Autors zusammen:

Satz 1: Es gibt einen zyklischen Transformator mit weniger als 13 Schichten, der einen allgemeinen Computer (Abschnitt 5 des Artikels) und einen einfachen Taschenrechner (Abschnitt 7 des Artikels) simulieren kann ), numerische lineare Algebra-Methoden wie ungefähre Matrixinversion und Potenziteration (Abschnitt 8 des Artikels) und auf neuronalen Netzwerken basierende ICL-Algorithmen (wie SGD) (Abschnitt 9 des Artikels).

Wenn Transformer als Allzweckcomputer verwendet wird, kann er auch kontextbezogene Lernalgorithmen ausführen. Diese Forschung ist sehr einfallsreich.

Abbildung 1: Schematische Darstellung der Looping-Transformer-Architektur, wobei die Eingabesequenz Befehle speichert, der Speicher, aus dem Daten gelesen/geschrieben werden, und der Notizblock, auf dem Zwischenergebnisse gespeichert werden. Eingaben werden vom Netzwerk verarbeitet und die Ausgaben werden als neue Eingaben verwendet, sodass das Netzwerk implizite Zustände iterativ aktualisieren und komplexe Berechnungen durchführen kann.

Die Forschung des Autors betont die Flexibilität des Aufmerksamkeitsmechanismus und die Bedeutung einer einzelnen Schleife, die es ermöglicht, Modelle zu entwerfen, die komplexe iterative Algorithmen simulieren und allgemeine Programme ausführen können. und demonstrierte außerdem die Fähigkeit des Transformer-Modells, komplexe mathematische und algorithmische Aufgaben effizient auszuführen. Es ist denkbar, dass moderne Transformer wie GPT-3 bei der Ausführung verschiedener Aufgaben ähnliche interne Unterprogramme verwenden. Bis zu einem gewissen Grad können die Fähigkeiten dieser modellspezifischen Techniken oder Algorithmen erläutert werden, wenn kontextbezogene Beispiele und Erklärungen gegeben werden, ähnlich wie bei Funktionsaufrufen. Diese Annahme ist jedoch mit Vorsicht zu genießen, da die Art und Weise, wie die Autoren die Struktur entworfen haben, keine Ähnlichkeit mit der Art und Weise hat, wie reale Sprachmodelle trainiert werden.

Die Autoren hoffen, dass ihre Forschung weitere Forschungen zum Potenzial von Aufmerksamkeitsmechanismen und der Fähigkeit von Sprachmodellen zur Ausführung algorithmischer Anweisungen anregen wird. Das von den Autoren vorgeschlagene Design kann dabei helfen, die minimale Transformer-Netzwerkgröße zu bestimmen, die zur Ausführung einer bestimmten algorithmischen Aufgabe erforderlich ist. Darüber hinaus hoffen die Autoren, dass ihre Ergebnisse dazu beitragen werden, die Entwicklung von Methoden anzuregen, um die Fähigkeit zum Trainieren von Sprachmodellen zu verbessern, indem kleinere, rückentwickelte Transformer-Netzwerke genutzt werden, um bestimmte algorithmische Aufgaben zu erfüllen.

Aufbau eines Transformer-Moduls für die allgemeine Datenverarbeitung

Um das Transformer-Netzwerk zum Aufbau eines allgemeinen Datenverarbeitungsrahmens zu verwenden, ist ein spezieller Datenverarbeitungsblock erforderlich. Setzen Sie diese Blöcke zusammen, um die gewünschte Endfunktionalität zu schaffen. Im Folgenden konzentrieren wir uns auf die verschiedenen Vorgänge, die die Transformer-Schicht ausführen kann. Diese Operationen bilden die Grundlage für die Erstellung komplexerer Routinen und Algorithmen. Diese Operationen sollen miteinander interoperabel sein und die Fähigkeit von Attention nutzen, eine Vielzahl von Aufgaben auszuführen, wie etwa die Generierung von Näherungspermutationsmatrizen und die Approximation allgemeiner Funktionen über Sigmoidfunktionen.

Wenn Transformer als Allzweckcomputer verwendet wird, kann er auch kontextbezogene Lernalgorithmen ausführen. Diese Forschung ist sehr einfallsreich.

Abbildung 2: Schematische Darstellung von drei Transformer-Blöcken, die als Bausteine ​​für die Implementierung eines kleinen Befehlssatzcomputers dienen. Diese Blöcke verarbeiten Bearbeitungsvorgänge in der Eingabesequenz (z. B. Verschieben oder Kopieren von einem Block zu einem anderen), verfolgen den Programmzähler und führen Programmzählersprünge durch, wenn bestimmte Bedingungen erfüllt sind.

Positionskodierung, Programmzähler und Datenzeiger

Transformer muss normalerweise einen iterativen Algorithmus ausführen oder eine Befehlsfolge ausführen. Um dies zu erreichen, verwendet der Autor einen Programmzähler, der Befehle durchläuft. Der Zähler enthält einen Code für den Ort, an dem der nächste Befehl gespeichert ist. Darüber hinaus können Befehle über Datenzeiger verfügen, die auf die Datenspeicherorte verweisen, die der Befehl lesen und schreiben muss. Sowohl der Programmzähler als auch der Datenzeiger verwenden dieselbe Positionskodierung, die im vorherigen Absatz erläutert wurde.

Wenn Transformer als Allzweckcomputer verwendet wird, kann er auch kontextbezogene Lernalgorithmen ausführen. Diese Forschung ist sehr einfallsreich.

Das Positionskodierungsschema des Autors kann auch verwendet werden, um auf bestimmte Datenspeicherorte zum Lesen oder Schreiben zu verweisen, was im nächsten Abschnitt erläutert wird. Dies wird erreicht, indem derselbe Binärvektor als Positionskodierung für den Programmzähler und den Datenzeiger verwendet wird. Darüber hinaus ermöglicht diese Technik des Verweisens auf bestimmte Datenspeicherorte Transformers das effiziente Lesen/Schreiben von Daten während der Ausführung eines Algorithmus oder einer Befehlsfolge, für deren Implementierung es entwickelt wurde.

Lesen/Schreiben: Daten und Anweisungen zum oder vom Notizblock kopieren

Wenn Transformer als Allzweckcomputer verwendet wird, kann er auch kontextbezogene Lernalgorithmen ausführen. Diese Forschung ist sehr einfallsreich.

Abbildung 3: Schematische Darstellung des Lesevorgangs. Der Pfeil zeigt den Befehlsblock, der aus dem Eingabeteil kopiert wurde, der dem Scratchpad-Befehl zugewiesen ist. Eine Anweisung ist eine Menge von Zeigern. Positionscodes und Zähler werden verwendet, um zu verfolgen, welche Inhalte wohin kopiert werden.

Das folgende Lemma besagt, dass der Befehl, auf den der Programmzähler zeigt, oder die Daten an der im aktuellen Befehl angegebenen Stelle für weitere Berechnungen auf den Notizblock kopiert werden können. Die Position des Programmzählers befindet sich normalerweise direkt unter dem Inhalt des Notizblocks, kann aber beliebig geändert werden. Wenn Sie es während der gesamten Berechnung an einer bestimmten Position halten, bleibt die Struktur gut organisiert.

Das nächste Lemma erklärt, dass ein in einem Notizblock gespeicherter Vektor v an eine bestimmte Stelle im Speicher kopiert werden kann, die durch den Notizblock selbst angegeben wird. Dadurch können Daten vom Notizblock an einen bestimmten Speicherort zur weiteren Verwendung oder Speicherung übertragen werden.

Wenn Transformer als Allzweckcomputer verwendet wird, kann er auch kontextbezogene Lernalgorithmen ausführen. Diese Forschung ist sehr einfallsreich.

Abbildung 4: Schematische Darstellung des Schreibvorgangs. Der Pfeil zeigt an, dass der Datenblock vom Notizblock an die angegebene Stelle im Eingabeabschnitt kopiert wird, der dem Speicher zugewiesen ist. Mithilfe der Positionskodierung werden Zielorte verfolgt und sichergestellt, dass Daten an den richtigen Speicherort geschrieben werden.

Wenn Transformer als Allzweckcomputer verwendet wird, kann er auch kontextbezogene Lernalgorithmen ausführen. Diese Forschung ist sehr einfallsreich.

Bedingte Verzweigung

In diesem Teil implementiert der Autor eine bedingte Verzweigungsanweisung, die eine Bedingung auswertet und den Programmzähler auf einen angegebenen Ort setzt, wenn die Bedingung wahr ist. oder Erhöhen Sie den Programmzähler um 1, wenn die Bedingung falsch ist. Der Befehl

hat die Form: Wenn mem[a]≤0, dann gehe zu i, wobei mem[a] der Wert an einer Position im Speicherteil der Eingabesequenz ist. Dieser Befehl besteht aus zwei Teilen: der Beurteilung der Ungleichheit und der Änderung des Programmzählers.

Simuliert einen universellen Computer mit einem einzigen Befehlssatz.

SUBLEQ Transformer

Mavaddat und Parhami hatten bereits 1988 gezeigt, dass es eine Anweisung gibt und dass jedes Computerprogramm in ein Programm umgewandelt werden kann, das aus Instanziierungen von besteht diese Anleitung. Eine Variante dieses Befehls ist SUBLEQ, der auf verschiedene Register oder Speicherorte zugreifen kann.

Die Funktionsweise von SUBLEQ ist einfach. Es greift auf zwei Register im Speicher zu, ruft die Differenz ihrer Inhalte ab und speichert sie in einem der Register zurück. Wenn das Ergebnis dann negativ ist, springt es zu einer anderen vordefinierten Codezeile oder fährt mit der nächsten Anweisung der aktuellen Zeile fort. Ein Computer, der für die Ausführung von SUBLEQ-Programmen gebaut wurde, wird als Einzelbefehlssatzcomputer bezeichnet und ist ein Allzweckcomputer, d. h. er ist Turing-vollständig, wenn er Zugriff auf unendlich viel Speicher hat.

Wenn Transformer als Allzweckcomputer verwendet wird, kann er auch kontextbezogene Lernalgorithmen ausführen. Diese Forschung ist sehr einfallsreich.

Im Folgenden wird der Aufbau eines Schleifentransformators beschrieben, der mit einem bestimmten Befehlssatz geschriebene Programme ausführen kann. Transformer verfolgt Codezeilen, Speicherorte und Programmzähler und verwendet dabei den Speicherteil der Eingabe als Speicherregister und den Befehlsteil als Codezeilen/Anweisungen. Das temporäre Register wird zum Aufzeichnen von Additionen und Zeigern verwendet, die an jeder Anweisung, beim Lesen, Schreiben, bei bedingten Verzweigungsoperationen usw. beteiligt sind.

Wenn Transformer als Allzweckcomputer verwendet wird, kann er auch kontextbezogene Lernalgorithmen ausführen. Diese Forschung ist sehr einfallsreich.

Abbildung 5: Grafische Darstellung des implementierten OISC-Befehlsblocks. Die ersten beiden Blöcke übertragen die Daten/Befehle an den Notizblock, der zweite und dritte Block führen die Subtraktion durch und speichern das Ergebnis, während der letzte den Befehl „if goto“ ausführt, der die Anweisung abschließt.

FLEQ: Ein flexiblerer aufmerksamkeitsbasierter Computer

In diesem Abschnitt stellt der Autor FLEQ vor, eine Weiterentwicklung von SUBLEQ und definiert einen flexibleren Computer mit reduziertem Befehlssatz. Dieser implizite zusätzliche Befehlssatz basiert auf einer weiterentwickelten Version von SUBLEQ und ermöglicht die Implementierung mehrerer Funktionen im selben Transformer-Netzwerk. Die Autoren verwenden den Begriff FLEQ, um sich auf die Anweisungen, die Sprache und die aufmerksamkeitsbasierten Computer zu beziehen, die er definiert.

FLEQ wurde entwickelt, um die Implementierung komplexer Algorithmen wie Matrixmultiplikation, Quadratwurzelberechnungen, Aktivierungsfunktionen usw. zu ermöglichen, indem Funktionen generiert werden, die allgemeiner sind als einfache Subtraktion.

Computerausführungszyklus basierend auf Aufmerksamkeit. Bei jeder Iteration des Schleifentransformators wird basierend auf dem Programmzähler eine Anweisung aus dem Befehlssatz in der Eingabe abgerufen. Die Anweisung wird dann in den Notizblock kopiert. Abhängig von der zu implementierenden Funktion werden unterschiedliche Funktionsblockspeicherorte verwendet, um die Ergebnisse der Funktion lokal aufzuzeichnen. Sobald das Ergebnis berechnet ist, wird es zurück an den angegebenen Speicherort kopiert, der von der Anweisung bereitgestellt wird.

Der Ausführungszyklus ähnelt dem Single Instruction Set Computer (OISC) im vorherigen Abschnitt. Der Hauptunterschied besteht darin, dass Sie für jede Anweisung aus einer Liste vorgewählter Funktionen auswählen können, die als beliebige Eingabe eingegeben werden Array, wie Matrizen, Vektoren und Skalare.

Geben Sie das Format der Sequenz ein. Wie in Abbildung 6 dargestellt, kann der Eingang X des Schleifentransformators ein Programm ausführen, das aus einer Reihe von FLEQ-Anweisungen besteht (X besteht aus drei Teilen: temporäres Register, Speicher und Anweisungen).

Format von Funktionsblöcken basierend auf Transformer. Jeder Funktionsblock befindet sich im unteren linken Teil von Eingang X, wie in Abbildung 6 dargestellt.

Wenn Transformer als Allzweckcomputer verwendet wird, kann er auch kontextbezogene Lernalgorithmen ausführen. Diese Forschung ist sehr einfallsreich.

Abbildung 6: Struktur der Eingabe

Das obige ist der detaillierte Inhalt vonWenn Transformer als Allzweckcomputer verwendet wird, kann er auch kontextbezogene Lernalgorithmen ausführen. Diese Forschung ist sehr einfallsreich.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:51cto.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage