Erstellung von Datensätzen für maschinelles Lernen
In diesem Kapitel wird beschrieben, wie mit OghmaNano Datensätze für maschinelles Lernen erstellt werden können. In der Regel werden diese Datensätze exportiert und mithilfe externer Frameworks wie TensorFlow für das Training, die Inferenz oder die Vorhersage verarbeitet.
1. Einleitung
Oft ist es wünschenswert, physikalische Geräteparameter aus experimentellen Daten mithilfe von Modellierung zu ermitteln. Beispielsweise könnte man eine Reihe von Strom-Spannungs-Kennlinien (JV-Kurven) haben und die Beweglichkeit der Ladungsträger und die Rekombinationsrate des Geräts bestimmen wollen. Traditionell wird dies durch die Anpassung eines physikalischen Modells, wie z. B. OghmaNano, an die Daten erreicht (wie in dem Tutorial zur Anpassung beschrieben). Der Nachteil dieses Ansatzes ist, dass die Anpassung eines einzelnen Datensatzes zeitaufwendig sein kann, und der Schwierigkeitsgrad steigt erheblich, wenn mehrere Datensätze analysiert werden müssen. Der Anpassungsprozess ist komplex und erfordert in der Regel umfangreiche Kenntnisse in der numerischen Simulation und einen erheblichen manuellen Aufwand. Infolgedessen wird eine detaillierte Geräteanpassung nur von einer relativ kleinen Gruppe von Experten durchgeführt.
Ein modernerer Ansatz ist die Verwendung von maschinellem Lernen. Anstatt eine einzelne Strom-Spannungs-Kennlinie (JV-Kurve) direkt anzupassen, wird zunächst eine Simulation erstellt, die die Struktur des Bauelements darstellt. Anstatt einzelne elektrische Parameter zu optimieren, werden viele tausend Kopien dieses Bauelements mit zufällig ausgewählten Parameterwerten generiert. Jede dieser Instanzen wird als virtuelles Bauelement bezeichnet. Anschließend wird ein Simulationsprogramm wie OghmaNano verwendet, um für jedes virtuelle Bauelement Strom-Spannungs-Kennlinien zu generieren, wodurch ein Datensatz entsteht, der aus Strom-Spannungs-Kennlinien besteht, die den entsprechenden elektrischen Parametern zugeordnet sind. Diese Daten können verwendet werden, um ein Modell für maschinelles Lernen zu trainieren, das elektrische Parameter direkt aus den Eigenschaften der Strom-Spannungs-Kennlinien vorhersagt. In diesem Rahmen fungiert OghmaNano als Vorwärtstransformation, die elektrische Parameter auf simulierte experimentelle Daten abbildet, während das Modell für maschinelles Lernen die inverse Transformation bereitstellt. Nach dem Training kann das Modell verwendet werden, um Materialparameter aus realen Bauelementen zu extrahieren.
Der Hauptvorteil dieses Ansatzes besteht darin, dass das trainierte Modell für maschinelles Lernen nach der Trainingsphase innerhalb von Sekunden Materialparameter aus experimentellen Daten extrahieren kann, ohne dass der Benutzer über Fachkenntnisse in der numerischen Simulation verfügen muss. Der Erfolg dieser Methode hängt jedoch entscheidend von der Erstellung eines großen, qualitativ hochwertigen Trainingsdatensatzes ab. Der Prozess zur Erstellung solcher Datensätze mit OghmaNano wird in den folgenden Seiten beschrieben.
2. Das Beispiel öffnen
Das auf dieser Seite beschriebene Beispiel kann über die Schaltfläche „Neue Simulation“ im Hauptfenster aufgerufen werden. Dadurch wird der in ?? gezeigte Browser für neue Simulationen geöffnet.
Wählen Sie aus der Liste der verfügbaren Simulationskategorien die Option „Maschinelles Lernen“ aus, indem Sie sie doppelt anklicken, um die Beispiele für maschinelles Lernen anzuzeigen (??). Wenn Sie das Beispiel „PM6:Y6 ML“ auswählen, wird eine vordefinierte Simulation geladen, die dem in diesem Kapitel beschriebenen Gerät und Workflow entspricht.
Nach dem Öffnen zeigt die Simulation die gleiche Gerätekonfiguration und die gleichen Automatisierungseinstellungen an, die in diesem Abschnitt verwendet werden, und kann direkt zur Erstellung von Trainingsdaten für maschinelles Lernen genutzt werden, ohne dass weitere Konfigurationen erforderlich sind.
3. Definition der Simulationen und der Ausgabeparameter
Sobald die Beispielsimulation geöffnet wurde, wird Ihnen das Hauptfenster der Simulation angezeigt, wie in Abbildung ?? dargestellt. Dieses Fenster zeigt die vollständig konfigurierte Gerätekonfiguration, die in diesem Kapitel verwendet wird. In der Multifunktionsleiste „Automatisierung“ ist ein Symbol für maschinelles Lernen sichtbar, das durch ein blaues, kreisförmiges Symbol dargestellt wird. Durch Klicken auf dieses Symbol wird das Hauptsteuerungsfenster für maschinelles Lernen geöffnet, wie in Abbildung ?? dargestellt. In diesem Fenster wird die Generierung von Trainingsdaten für maschinelles Lernen konfiguriert und ausgeführt.
Der Hauptzweck dieses Fensters ist die Erstellung großer Datensätze zum Trainieren von Algorithmen für maschinelles Lernen. Der in diesem Beispiel erstellte Datensatz wird als „example“ bezeichnet. Die erste angezeigte Registerkarte ist die Registerkarte „Simulationen“, die die Menge der für jedes virtuelle Gerät durchgeführten Simulationen definiert. In diesem Fall werden eine dunkle J-V-Kurve und neun beleuchtete J-V-Kurven simuliert, wobei die Lichtintensitäten von 0,0001 Sonnen bis 1,0 Sonnen reichen. Einzelne Simulationen können mithilfe des Schalters „Aktiviert“ aktiviert oder deaktiviert werden. Wenn auf die Schaltfläche „Bearbeiten“ in der Spalte „Patch“ für den Eintrag „\(light\_0.0001\)“ geklickt wird, wird das in ?? gezeigte Fenster „Patch“ geöffnet.
Der Zweck des Patch-Fensters besteht darin, Parameter innerhalb einer virtuellen Simulation zu ändern. In diesem Beispiel werden unter verschiedenen Beleuchtungsbedingungen mehrere Kennlinien (JV-Kurven) mithilfe derselben grundlegenden Bauelementstruktur generiert. Um dies zu erreichen, muss die Lichtintensität für jede Simulation separat angepasst werden. Wenn man das Patch-Fenster für \(light\_0.0001\) öffnet, sieht man, dass der Simulationsparameter „optisch/Licht/Psun“, der die Beleuchtungsintensität steuert, auf \(0.0001\) eingestellt ist. Für die Simulation im Dunkeln wird derselbe Parameter auf \(0.0\) eingestellt. Auf diese Weise lassen sich verschiedene experimentelle Bedingungen auf konsistente Weise mithilfe einer einzigen Basissimulation simulieren.
Das Fenster „Vektoren“ definiert, welche Daten aus den abgeschlossenen Simulationen extrahiert werden, um die Eingangsvektoren für das maschinelle Lernen zu erstellen. In diesem Beispiel werden Datenpunkte zwischen -2,0 V und 1,4 V aus der Datei \(jv.dat\) extrahiert, die die simulierten Strom-Spannungs-Kennlinien enthält. Bei Simulationen im Zeitbereich kann ein Benutzer stattdessen Daten aus Dateien wie \(time\_i.csv\) oder einer anderen geeigneten Ausgabedatei extrahieren. Die Anzahl der Punkte, die zur Erstellung jedes Eingangsvektors verwendet werden, wird vom Benutzer festgelegt. Längere Vektoren erhöhen den Rechenaufwand für das Training, können aber detailliertere Merkmale der Strom-Spannungs-Kurve erfassen.
4. Definition der Zufallsvariablen
Der nächste Schritt besteht darin, festzulegen, welche Modellparameter randomisiert werden sollen. Dies geschieht mithilfe der Registerkarte „Zufallsvariablen“ im Hauptfenster für maschinelles Lernen. Die Tabelle enthält fünf Spalten. Die Spalte „Aktiviert“ bestimmt, ob ein Parameter in den Randomisierungsprozess einbezogen wird. Die Spalte „Variable“ gibt an, welcher Simulationsparameter variiert wird. Die Spalten „Min“ und „Max“ definieren die untere und obere Grenze des Parameterbereichs, und die Spalte „Zufallsfunktion“ gibt an, ob Werte aus einer linearen oder logarithmischen Verteilung gezogen werden.
Für Parameter, die über mehrere Größenordnungen variieren, werden logarithmische Verteilungen empfohlen, während lineare Verteilungen für Parameter geeignet sind, die über einen relativ engen Bereich variieren. Die Verwendung einer logarithmischen Verteilung stellt sicher, dass die Werte gleichmäßig abgetastet werden, wenn sie auf einer logarithmischen Skala betrachtet werden, anstatt sich im oberen Bereich des Wertebereichs zu konzentrieren. Ein geeigneter linearer Parameter wäre beispielsweise die Urbach-Energie, die typischerweise zwischen 30 und 150 meV variiert. Im Gegensatz dazu eignen sich die Dichten von Defektzuständen gut für eine logarithmische Abtastung, da sie von \(1 \times 10^{15}\,\mathrm{m^{-3}}\) bis \(1 \times 10^{25}\,\mathrm{m^{-3}}\) variieren können.
5. Festlegung der Anzahl der Simulationen
Sobald die Simulation konfiguriert wurde, besteht der nächste Schritt darin, zu bestimmen, wie viele virtuelle Geräte mit zufälligen Parametern generiert werden sollen. Durch das Öffnen des Einstellungsfensters (siehe 18.6) kann dies mithilfe von zwei Parametern gesteuert werden: Simulationen pro Archiv (\(N_{\mathrm{sim}}\)) und Anzahl der Archive (\(N_{\mathrm{arc}}\)). Die Gesamtanzahl der generierten virtuellen Geräte wird durch \(N_{\mathrm{sim}} \times N_{\mathrm{arc}}\) angegeben.
Die Ergebnisse der Simulation werden in ZIP-Dateien gespeichert, die als Archive bezeichnet werden. Jedes Archiv enthält \(N_{\mathrm{sim}}\) virtuelle Geräte. In dem hier gezeigten Beispiel werden \(N_{\mathrm{sim}} \times N_{\mathrm{arc}} = 3000\) virtuelle Geräte generiert und in 100 Archivdateien gespeichert. Es ist wichtig zu beachten, dass in diesem Beispiel jedes virtuelle Gerät aus einer einzelnen, nicht beleuchteten JV-Simulation und neun beleuchteten JV-Simulationen besteht. Infolgedessen kann die Gesamtzahl der Ausgabedateien schnell ansteigen.
Um dies zu gewährleisten, wird die Datenerzeugung in Batches durchgeführt. Eine Gruppe von \(N_{\mathrm{sim}}\) Simulationen wird von OghmaNano generiert und ausgeführt, anschließend in ein einzelnes Archiv geschrieben, und dieser Vorgang wird wiederholt, bis \(N_{\mathrm{arc}}\) Archive erstellt wurden. Dieser Ansatz begrenzt den Datenverlust auf das aktuell erstellte Archiv, falls der Prozess unterbrochen wird, und vereinfacht zudem die Dateiübertragung und erhöht die Widerstandsfähigkeit gegen Datenverluste. Die Ausführung der Simulationen wird parallel auf allen verfügbaren CPU-Kernen durchgeführt, während die Erstellung der Archive auf einem einzelnen Kern erfolgt.
6. Ausführen des Datensatzgenerators
Sobald die Konfiguration abgeschlossen ist, startet das Drücken der Schaltfläche „Generator starten“ im Hauptfenster für maschinelles Lernen (18.2) den Prozess zur Erstellung des Datensatzes. Anschließend beginnt OghmaNano mit der Ausführung der für jedes virtuelle Gerät definierten Simulationen. Nach Abschluss des Prozesses wird im Simulationsverzeichnis ein Ordner mit dem Namen „example“ angezeigt, wie auf der linken Seite von 18.8 dargestellt. Für die Zwecke dieses Beispiels wurde „Simulationen pro Archiv“ auf 10 und „Anzahl der Archive“ auf 3 gesetzt, um die Ausführungszeit zu verkürzen.
Alle während der Simulation auftretenden Fehler werden in der Datei „errors.dat“ gespeichert. Wenn man „archive0.zip“ öffnet, wird die interne Struktur eines Archivs sichtbar, die auf der rechten Seite von 18.8 dargestellt ist. Jedes Archiv enthält eine Sammlung von Verzeichnissen, wobei jedes Verzeichnis einem einzelnen virtuellen Gerät entspricht.
Diese Verzeichnisse werden mit zufälligen, 16-stelligen, hexadezimalen Bezeichnern benannt. Jedes Verzeichnis enthält die vollständige Sammlung von Simulationen für ein virtuelles Gerät; in diesem Beispiel eine Simulation für ein „dunkles“ JV-Gerät und neun Simulationen für ein beleuchtetes JV-Gerät. Der Inhalt eines solchen Verzeichnisses ist auf der linken Seite von 18.10 dargestellt. Wenn man ein einzelnes Simulationsverzeichnis öffnet (18.10, rechts), wird eine vollständige OghmaNano-Simulation angezeigt, einschließlich der Datei „sim.json“ und der Datei „jv.dat“, die die simulierten Strom-Spannungs-Kennlinien enthält. Zusätzliche Daten, wie z. B. optische Ausgaben und Cache-Dateien, können ebenfalls vorhanden sein.
Bei der Erstellung großer Datensätze für maschinelles Lernen wird dringend empfohlen, unnötige Ausgaben zu minimieren, da sich der gesamte Speicherplatzbedarf schnell erhöhen kann. Dies kann erreicht werden, indem die Simulation so konfiguriert wird, dass sie nur die wesentlichen Ausgabedaten erzeugt. Die Datensatzgenerierung erfolgt in Batches, wobei die Simulationen parallel auf allen verfügbaren CPU-Kernen ausgeführt werden, während die Archivierung auf einem einzelnen Kern erfolgt.
In diesem beispielhaften Fall werden nur drei Archive erstellt. Bei einer typischen Produktionsreihe ist es jedoch üblich, etwa 200 Archive zu erstellen, von denen jedes ungefähr 200 virtuelle Geräte enthält.
In the above example we only have three archives but in a normal simulation run one would have up to 200 archives each with 200 simulations in each.
7. Die Ergebnisse in einer einzigen Datei zusammenfassen.
Sobald die Simulationen abgeschlossen sind, muss die unbearbeitete OghmaNano-Ausgabe in eine einzelne Vektordatei umgewandelt werden, die sich für das Training eines Modells für maschinelles Lernen eignet. Durch Klicken auf das Symbol „Vektoren erstellen“ im Hauptfenster für maschinelles Lernen (18.2) öffnet OghmaNano jedes virtuelle Geräteverzeichnis, extrahiert die angeforderten Ausgaben und kompiliert diese zu einer einzigen Datei namens „vectors.json“. Ein Beispiel für diese Datei ist in 18.11 dargestellt.
Die Vektordatei ist ein JSON-Dokument, das alle für das überwachte Lernen erforderlichen Informationen enthält. Jedes virtuelle Gerät wird als separater Eintrag dargestellt. Beispielsweise enthält der Eintrag mit der Bezeichnung 2cbd08c0fd7eb406 (Zeile 3) im Abschnitt „params“ die zufällig für dieses virtuelle Gerät ausgewählten elektrischen Parameter. Darauf folgen die extrahierten Eingangsvektoren, wie z. B. der Vektor für den Dunkelstrom (JV-Vektor) (Zeile 19) und der Vektor für den Strom bei einer Beleuchtungsstärke von 0,0001 Sonnen (Zeile 22). Die numerischen Einheiten in jedem Vektor werden direkt aus der Quelldatei übernommen, aus der sie extrahiert wurden. In diesem Beispiel werden die Vektoren aus der Datei jv.dat entnommen, in der die Stromdichte in \(A\,m^{-2}\) als Funktion der Spannung gespeichert ist, sodass die Vektorwerte in \(A\,m^{-2}\) angegeben sind. Nach den Eingangsvektoren werden zur besseren Übersicht zusätzliche skalare Ausgaben (z. B. PCE) gespeichert.
In dieser Datei wird für jedes generierte virtuelle Gerät ein Eintrag gespeichert. Sobald die Datei „vectors.json“ erstellt wurde, kann sie als Trainingsdatensatz für den von Ihnen gewählten Machine-Learning-Workflow verwendet werden. Einige Benutzer finden es einfacher, die Daten nach der Konvertierung in das CSV-Format in TensorFlow zu importieren; dies kann mit Standard-Python-Bibliotheken erfolgen.
8. From data set to machine learning
Die vorherigen Abschnitte beschreiben, wie OghmaNano verwendet wird, um einen vollständigen Datensatz für maschinelles Lernen im JSON-Format zu erstellen. An diesem Punkt ist die Daten-Generierung abgeschlossen: Für jedes virtuelle Gerät enthält die Datei die zufällig ausgewählten Modellparameter zusammen mit den entsprechenden Simulationsergebnissen, die als Eingabevektoren kodiert sind.
Der nächste Schritt besteht darin, diese Daten in ein Machine-Learning-Framework Ihrer Wahl zu importieren. In der Praxis bedeutet dies in der Regel, die vectors.json-Datei zu lesen und sie in ein tabellarisches Format wie CSV zu konvertieren, das dann für das Training, die Validierung und das Testen verwendet werden kann. Diese Konvertierung kann einfach mit Hilfe von Standard-Skripting-Tools durchgeführt werden (z. B. Python).
Nach der Konvertierung können die Daten verwendet werden, um ein neuronales Netzwerk oder ein anderes Regressionsmodell zu trainieren, das mithilfe eines Frameworks für maschinelles Lernen wie TensorFlow, PyTorch oder einer ähnlichen Bibliothek implementiert wird. Ab diesem Zeitpunkt hängt die Wahl der Netzwerkarchitektur, der Verlustfunktion und der Trainingsstrategie von der jeweiligen Anwendung ab und ist unabhängig von OghmaNano.
Auf diese Weise bietet OghmaNano eine vollständige und automatisierte Pipeline zur Erstellung von physikalisch konsistenten Trainingsdaten, wobei die anschließende Entwicklung und Optimierung des Modells für maschinelles Lernen vollständig in der Kontrolle des Benutzers liegt.