KPP-Energiemodell und Sampling
Zuständig für die Integration von PyTorch-Modellen mit Kaiwu-Samplern. Modellparameter, Zielfunktionen und Optimierer verbleiben in PyTorch; über kompatible Sampler werden Kaiwu-Löser oder vorhandene Sampling-Workflows der Aufgabe angebunden. Normale maschinelle Lernaufgaben werden nicht automatisch in Energiemodell-Aufgaben umgewandelt.
Komponentenauswahl
Wählen Sie zuerst die Struktur basierend auf Eingabe, Ausgabe und den darzustellenden Beziehungen aus und erläutern Sie, wie die gewählte Komponente die Aufgabenanforderungen erfüllt. Wenn der Benutzer eine bestimmte Struktur vorgibt, führen Sie diese aus; bei eigener Auswahl beurteilen Sie, ob die Aufgabe direkte Beziehungen zwischen beobachteten Variablen, verborgene Faktoren, hierarchische Darstellungen, latente Variablen-Rekonstruktion, kontextabhängige Generierung oder Merkmalsauswahl benötigt, und wählen Sie die entsprechende Komponente. Die Modellgröße ist nicht die Standardpriorität; validieren Sie zuerst, ob die Fähigkeiten und Ergebnisse übereinstimmen, und vergleichen Sie dann Trainings- und Sampling-Kosten zwischen Lösungen, die die Anforderungen erfüllen.
| Benötigte Fähigkeit | Komponente | Begründung |
|---|---|---|
| Erklärung von Beobachtungsmustern durch verborgene Faktoren oder Lernen einer sichtbaren/verborgenen bipartiten Struktur | RestrictedBoltzmannMachine | Die verborgene Repräsentation ist für die vom Task benötigte Verteilungslernaufgabe erforderlich; eine rein binäre Eingabe allein rechtfertigt nicht die Verwendung von RBM |
| Direkte Modellierung paarweiser Interaktionen binärer Knoten oder Sampling nach Fixierung bestimmter Knoten | BoltzmannMachine | Knoten und ihre Interaktionen entsprechen den Problemvariablen; mit Aufgabenmetriken wird verifiziert, ob sie ausreichen, um die erforderlichen Beziehungen auszudrücken |
| Erlernen hierarchischer Merkmale durch mehrschichtige RBMs | UnsupervisedDBN | Die Aufgabe benötigt schichtweise gelernte Repräsentationen, oder der Benutzer fordert explizit einen RBM-Stapel |
| Kodierung, Rekonstruktion und abtastbarer Energiemodell-Prior latenter Variablen | QVAE | Sowohl Rekonstruktion als auch latenter Prior dienen dem Task; ein normaler Autoencoder wird dadurch nicht zu QVAE |
| Kontextabhängige diskrete Kandidatengenerierung mit Energie-Steuerung | QDiffusion | Der Proposal liefert den benötigten Kontext, die Energie führt eine aufgabenspezifische Steuerung der Kandidaten durch |
| Auswahl einer Merkmalsteilmenge aus den Eingaben eines vorhandenen PyTorch-Modells | FeatureSelectionWrapper | Die Aufgabe erfordert eine Eingabe-Merkmalsauswahl unter Verwendung einer periodisch aktualisierten 0/1-Maske |
Binäre Daten, die Anzahl der Labels oder die Reihenfolge des Auftretens von Beispielen allein können die Auswahl nicht bestimmen. Validieren Sie die Auswahl anhand der vom Task geforderten Ergebnisse wie Assoziation, Rekonstruktion, Vervollständigung oder Vorhersage; ein erfolgreicher Import oder korrekte Ausgabeformen allein bedeuten keine Übereinstimmung. Wenn der Task höherwertige Beziehungen oder Kontext erfordert, reicht es nicht aus, nur auf paarweise statistische Erfüllung zu achten. Die unterschiedlichen Trainingsstrukturen von BM und RBM finden Sie unter Modellparadigmen; lesen Sie nur den für die aktuelle Aufgabe relevanten Teil.
Dies sind verschiedene Komponenten desselben KPP-Pakets; es müssen nicht sechs Plugins separat installiert werden. Obwohl die Merkmalsauswahl intern ein QUBO löst, dient sie dem PyTorch-Modelltraining und gehört zu dieser Fähigkeit; Reine Standort-, Planungs-, Max-Cut- usw. Aufgaben, die nicht an ein Modell gebunden sind und direkte optimale Entscheidungen suchen, verwenden die Kaiwu SDK-Fähigkeit. Wenn dieselbe Aufgabe sowohl kombinatorische Optimierung als auch Energietraining umfasst, können beide Fähigkeiten geladen und ihre jeweiligen Interpreter verwendet werden.
Minimaler geschlossener Kreislauf für Anwendungsaufgaben
- Überprüfen Sie die Aufgabenwirkung der gewählten Struktur mit repräsentativen Daten und notieren Sie den tatsächlichen Trainings- und Generierungsumfang sowie die Zeitaufwände, um die formelle Ausführung zu planen. Reservieren Sie im Gesamtbudget Zeit für Modellspeicherung, Laden in neuen Prozessen, Generierung und Berichtsabgleich.
- Stellen Sie so früh wie möglich den vollständigen, von der Aufgabe geforderten Einstiegspunkt her. Speichern Sie nach jeder Validierung das aktuell beste und wiederverwendbare Modell, die Konfiguration und den Bericht; nachfolgende Experimente verwenden neue Ausgabeverzeichnisse, das Abgabeverzeichnis behält immer eine lauffähige Version.
- Batch-Generierung wird nach tatsächlicher Zeilenanzahl akkumuliert: Beim Hinzufügen eines Batches werden die Zeilen dieses Batches addiert, und nach Erreichen der angeforderten Anzahl wird abgeschnitten. Überprüfen Sie zuerst mit kleinen Anfragen Anzahl, Breite und Werte; die Anzahl der Batches entspricht nicht der Anzahl der Stichproben.
- Unterscheiden Sie zwischen direktem Kopieren ursprünglicher Aufzeichnungen, natürlicher Überlappung durch Modell-Sampling und manueller Auswahl. Häufige Kombinationen können bei unabhängiger Generierung überlappen; das Filtern überlappender Datensätze oder die Erzwingung von Eindeutigkeit ändert die Verteilung; überprüfen Sie nach der Verwendung erneut geschäftliche Kennzahlen wie Proportionen und Assoziationen.
- Validieren Sie gemäß den öffentlich bekannten Geschäftsanforderungen des Tasks. Speichern Sie das Modell, generieren Sie in einem neuen Prozess nur mit dem gelieferten Modell und der Anfrageeingabe neu, und berichten Sie über Qualität und Zeitaufwand des gleichen Laufs. Wenn das aktuelle Ziel erreicht ist, schließen Sie die Abgabe ab; andernfalls bewahren Sie die aktuellen Ergebnisse auf und erläutern Sie diese wahrheitsgemäß, und versuchen Sie, mit dem verbleibenden Budget fortzufahren, vorausgesetzt, die oben genannten Überprüfungen können abgeschlossen werden.
Überprüfung, automatische Installation, Validierung
- Verwenden Sie den vom Benutzer angegebenen/im Projekt vorhandenen Interpreter erneut und überprüfen Sie die Versionen von Python,
kaiwu-torch-plugin,kaiwuundtorch. Führen Sie im gleichen Umgebung einmalpython -m pip checkaus, dann im Skill-Verzeichnis scripts/verify_kpp.py im Modus--imports-only. Wenn das Ergebnis dieser Überprüfung bereits vorliegt, verwenden Sie es direkt; gehen Sie dann zur Aufgabe über, ohne die Umgebung zusätzlich zu scannen oder ein allgemeines Training zu testen. - Überprüfen Sie den Installationsplan und installieren Sie nur, wenn Pakete fehlen; bei Abhängigkeitskonflikten, Offline-Paketen, Python-Version oder Wheel-Unterstützung, folgen Sie der Installationsanleitung und wählen Sie basierend auf den tatsächlichen Metadaten eine kompatible Umgebung aus.
- Verwenden Sie den von der Aufgabe bereitgestellten kompatiblen Sampler erneut. Überprüfen Sie die entsprechende Lizenz nur bei Auswahl von SDK SA/CIM; ein fehlender SDK-Lizenzschlüssel bedeutet nicht, dass alle lokalen Sampler nicht trainieren können. Lizenzinitialisierung und nicht-interaktive Einschränkungen finden Sie in der Installationsanleitung.
- Validieren Sie das ausgewählte Modell mit dem tatsächlichen Aufgabenprogramm; nur wenn kein Aufgabenprogramm vorhanden ist und das SDK-Sampling-Training überprüft werden muss, führen Sie den Standardmodus des Validierungsskripts aus.
KPP_IMPORT_OKbeweist nur den Import;KPP_TRAIN_OKbeweist nur das vom Skript abgedeckte kleine Training.
Prüfprotokolle, temporäre Dateien und Validierungskopien verbleiben im Aufgabenverzeichnis; Cloud-CIM wird nur verwendet, wenn die Aufgabe dies explizit erfordert und bereits ein Kontingent lizenziert ist.
Beim Aufruf von Kaiwu CIM muss task_name mit kpp-skill beginnen, um die Backend-Statistiken zu erleichtern;
z. B. kpp-skill-rbm-train. Wenn der vorhandene Task-Name dieses Präfix nicht enthält, stellen Sie ihm kpp-skill- voran.
Trainings- und Generierungsvertrag
Öffentliche Importpfade für BM und RBM:
from kaiwu.torch_plugin import BoltzmannMachine, RestrictedBoltzmannMachine
Bei Auswahl von SDK SA wird SimulatedAnnealingOptimizer aus kaiwu.classical importiert.
Die BM-Konstruktion verwendet BoltzmannMachine(num_nodes, quadratic_coef=None, linear_bias=None, device=None);
RBM verwendet RestrictedBoltzmannMachine(num_visible, num_hidden, quadratic_coef=None, linear_bias=None, device=None). Lernrate, Gewichtsabfall usw. werden dem PyTorch-Optimierer überlassen;
learning_rate, k, batch_size oder andere Trainingsparameter der Bibliothek werden nicht an den Modellkonstruktor übergeben.
- RBM:
get_hidden(batch, bernoulli=True)undsample(sampler)geben den gemeinsamen Zustand sichtbar+verborgen zurück, die Breite istnum_visible + num_hidden. Die Anzahl der Zeilen im positiven Batch und im negativen Pool kann unterschiedlich sein; sie werden jeweils gemittelt; es wird nicht versucht, die gleiche Anzahl von Stichproben zu erzwingen.objective(positive, negative)gibt einen Skalar zurück. Schreiben Sie direktpositive = model.get_hidden(batch, bernoulli=True); packen Sie den Rückgabewert nicht aus und fügen Sie keine sichtbare Ebene an.get_hiddenhat standardmäßigbernoulli=False, der verborgene Teil ist eine Wahrscheinlichkeit; dies ist für den positiven RBM-Phasen-Erwartungswert zulässig, erst bei der Auslieferung binärer gemeinsamer Stichproben istbernoulli=Trueerforderlich. Behandeln Sie einen Wahrscheinlichkeitszustand nicht als bereits abgetastete binäre Stichprobe. Die Pool-Kapazität wird entsprechend der tatsächlichen Sampler-Konfiguration konfiguriert; SDK SA verwendetSimulatedAnnealingOptimizer(size_limit=...); erfinden Sie keinset_configoder fügen Siesamplekeinen undefiniertennum_solutions-Parameter hinzu. - SDK-Sampling:
sampler.solvegibt ein ±1-2D-Array mit einem Referenz-Spin am Ende zurück. KPPssampleführt intern die Referenz-Spin-Normalisierung, das Löschen der Endspalte und die Konvertierung in einen 0/1-Float-Tensor durch. Entfernen Sie beim Rückgabewert vonsamplekeine Spalten mehr und konvertieren Sie nicht. Wenn der Benutzer einen festen Testsatz bereitstellt, gibtsolvejedes Mal den gesamten Satz unverändert zurück; weisen Sie die verschiedenen Lösungen nicht verschiedenen Bedingungen zu oder wiederholen Sie die erste Zeile, um die Stichprobenanzahl zu erreichen. Bedingtes Sampling muss sowohl die festgelegten Spalten als auch die konvertierten freien Spalten jeder Lösung überprüfen, nicht nur die Form. - Trainingsreihenfolge: Jeder Schritt
optimizer.zero_grad()→ positive/negative Phase →objective→backward()→step();objectiveundbackward()dürfen nicht intorch.no_grad()platziert werden.sample()gibt einen gradientenlosen Sampling-Tensor zurück, der Gradient stammt aus der Neuberechnung der Energie durchobjective; obsample()innerhalb vonno_gradist, beeinflusst das Training nicht. Modell, Daten und manuelle Tensoren bleiben auf dem gleichen Gerät. Überprüfen Sie die Breite der positiven/negativen Phase, die Binärität der negativen Phase, endliche Verluste/Gradienten und tatsächliche Parameteraktualisierungen. - BM / DBN: Bedingtes Sampling verwendet
condition_sample(sampler, s_visible), das immer die erstens_visible.shape[1]Knoten fixiert, und ruft für jede Bedingungszeile einmal den Löser auf. Wenn die bekannten Positionen in verschiedenen Zeilen unterschiedlich sind, ordnen Sie zeilenweise neu: Permutieren Sielinear_biasund den symmetrisiertenquadratic_coefentsprechend "Bekannte zuerst", erstellen Sie mit den permutierten Parametern eine temporäreBoltzmannMachine, rufen Siecondition_sampleauf, und permutieren Sie die Spalten zurück in die ursprüngliche Reihenfolge. Vor der Verwendung von DBN rufen Siecreate_rbm_layer(input_dim)auf; nach Abschluss des Trainings rufen Siemark_as_trained()auf, bevor Sieforward/transformverwenden. - QVAE: Kann Encoder/Decoder/BM/Sampler injizieren oder die vier
_create_*-Fabriken in einer Unterklasse implementieren. config enthältnum_latent_units / loss_type / dist_beta / kl_beta / weight_decay. Die Korrektur des Bernoulli-Mittelwerts ist optional; rufen Sie nach der Konstruktionset_dataset_meanundset_train_biasauf, gehen Sie nicht davon aus, dass das spätere Setzen des Mittelwerts den Bias automatisch aktualisiert. Der Mittelwert kann ein Skalar oder ein dimensionsweiser Tensor sein; folgen Sie der aktuellen Schnittstelle. Encoder+Decoder und BM verwenden zwei Optimierer, das BM-Update verwendetbm_loss(q.detach(), weight_decay); siehe Modellparadigmen. Die endgültige Bewertung behält die Eingabemittelwertkorrektur und den Ausgabebias des Trainings bei.qsind die Encoder-Logits,(q > 0).float()ist eine harte Entscheidung, kein Posterior-Mittelwert. Der Unterschied zwischen nativer Rekonstruktion und Mittelwert finden Sie im QVAE-Abschnitt der Referenzdokumentation. Stochastische Rekonstruktion oder Dekodierung des tatsächlichen Posterior-Mittelwerts sind beide akzeptabel; berechnen und berichten Sie Metriken aus den tatsächlichen finalen Logits, erläutern Sie die verwendete Methode und behandeln Sie die Qualität eines kleinen Trainings nicht als bestandene Schnittstellenbedingung. - QDiffusion: Der Proposal nimmt [B,L] entgegen und gibt [B,L,V] Logits aus. Wenn eine Kontextvervollständigung erforderlich ist,
verwenden Sie Strukturen wie Self-Attention, damit fehlende Positionen Informationen von anderen Positionen lesen können; positionsweise Embedding + MLP kann nur Positionspräferenzen lernen.
Selbst bei hoher Übereinstimmungsrate erfüllt es nicht die Anforderungen der Kontextvervollständigung.
EnergyModelimplementiertscore_conditioned(noisy, candidate, attention_mask)und gibt [B,1] zurück.SequenceTokenSpecwird auskaiwu.torch_plugin.qdiffusionimportiert, nicht auf oberster Ebene exportiert. Wenn nur "Vokabulargröße V" angegeben ist, behalten Sie die Ausgabebreite V bei; spezielle IDs müssen in dieses Vokabular fallen und von den Inhalts-Tokens getrennt sein. Interpretieren Sie V nicht selbst als Inhaltsvokabular und erweitern Sie es nicht auf V+4. Wenn der Inhalts-ID-Bereich V vollständig ausfüllt oder die Zuordnung spezieller IDs unklar ist, listen Sie die zu klärenden Zuordnungen im Plan auf; verwenden Sie vor der Klärung weder eine erweiterte Ausgabebreite noch reduzieren Sie vorhandene Benutzerinhaltskategorien. Wenn ein Proposal von Grund auf trainiert wird, schließen Sie zuerst das unabhängige Vervollständigungstraining ab, frieren Sie es dann ein und trainieren Sie die Energie; die nativeobjectiveschneidet interne Proposal-Gradienten ab und kann nicht zum Vortraining des Proposals verwendet werden. Verwenden Sie zum Traininggenerator.objective({"targets": batch}), zur Generierunggenerator.generate(init, max_steps=...). Beifreeze_proposal=Truewird nur die Energieseite optimiert. Vollständige Integrationsbedingungen finden Sie unter Modellparadigmen. - Merkmalsauswahl (MAIFS):
from kaiwu.torch_plugin import FeatureSelectionWrapper, QuadraticLinearSolver. KonstruktorsignaturFeatureSelectionWrapper(model, feature_dim, lambda_reg=0.0, cardinality_k=None, min_selected_features=None, max_selected_features=None, solver="local_search", mask_update_epochs=None, input_feature_axis=-1, solver_kwargs=None). Training mitsel.fit_weights(loader, loss_fn, optimizer, train_epochs): loader liefert(x, y),loss_fngibt einen Skalar zurück, optimizer wirkt aufsel.model.parameters(). Die Maske wird allemask_update_epochsEpochen aktualisiert; beiNonenur bei manuellem Aufruf vonupdate_mask(loader, loss_fn, hessian_mode="full"|"diagonal", max_samples=1000)aktualisiert. Ergebnisse werden mitselected_indices(),num_selected(),get_support()gelesen.solver="local_search"benötigt keine Lizenz;"sa","kaiwu_cim"nutzen das Kaiwu SDK und benötigen eine Lizenz. Der Zeitaufwand vonupdate_maskliegt hauptsächlich im QUBO-Lösen und der Mengenprojektion und wächst schnell mit der Anzahl der Merkmale (lokal ~13-15 Sekunden für 400 Merkmale, Ableitungsberechnung unter 1 Sekunde);hessian_modeundmax_samplesbeeinflussen nur den Ableitungsteil; reservieren Sie Zeit basierend auf der tatsächlichen Merkmalsanzahl.QuadraticLinearSolver().solve(Q, b)wandelt nur den QUBO-Term in eine Ising-Matrix mit einem Hilfsspin um und ist nicht für das Lösen zuständig.
Lieferung und Abnahme
Erstellen Sie für neue Aufgaben ein vollständiges Skript, das Daten, Importe, Konfiguration, Trainingsschleife und Ergebnisausgabe enthält; ändern Sie bei vorhandenem Code nur die für die Aufgabe erforderlichen Teile.
Wenn nur ein Plan oder eine Umgebungsaufzeichnung angefordert wird, speichern Sie die angegebenen Dokumente tatsächlich; aktualisieren Sie die Lieferung nach mehreren Runden der Anforderungspräzisierung und überprüfen Sie, ob die Dateien geschrieben wurden.
Die QVAE/QDiffusion-Abschnitte in den Referenzdokumenten sind strukturelle Skizzen mit Kontextvariablen und können nicht als direkt ausführbare Skripte verwendet werden.
Wenn die API unsicher ist, lokalisieren Sie die aktuelle kaiwu.torch_plugin.__file__ und überprüfen Sie die tatsächliche Signatur und den Quellcode.
Berichten Sie den tatsächlichen Interpreter, die Abhängigkeitsversionen und die Ausführungsergebnisse; das Bestehen des RBM-Tests garantiert nicht das Bestehen anderer Modelle, GPUs oder Cloud-CIM.