Home Examples Screenshots User manual Bluesky logo YouTube ☰
OghmaNano Multiphysics simulation platform for optoelectronic devices and photonic systems DOWNLOAD Quick Start guide

Création d’ensembles de données pour l’apprentissage automatique.

Ce chapitre décrit la manière de générer des ensembles de données pour l’apprentissage automatique à l’aide d’OghmaNano. En général, ces ensembles de données sont exportés et traités à l’aide de plateformes externes telles que : TensorFlow pour l’entraînement, l’inférence ou la prédiction.

1. Introduction

Il est souvent souhaitable d’extraire les paramètres physiques d’un dispositif à partir de données expérimentales en utilisant une modélisation. Par exemple, on peut disposer d’un ensemble de courbes caractéristiques courant-tension (JV) et souhaiter déterminer la mobilité des porteurs de charge et le taux de recombinaison du dispositif. Traditionnellement, cela se fait en ajustant un modèle basé sur la physique, tel qu’OghmaNano, aux données (comme décrit dans… le tutoriel approprié). L’inconvénient de cette approche est que l’ajustement d’un seul ensemble de données peut prendre beaucoup de temps, et la difficulté augmente considérablement lorsque plusieurs ensembles de données doivent être analysés. Le processus d’ajustement est complexe et nécessite généralement une expertise importante en matière de simulation numérique et une intervention manuelle considérable. Par conséquent, l’ajustement détaillé des dispositifs n’est effectué que par un nombre relativement restreint de personnes au sein de la communauté.

Une approche plus moderne consiste à utiliser l’apprentissage automatique. Au lieu d’ajuster directement une seule courbe J-V, on commence par construire une simulation qui représente la structure du dispositif. Plutôt que d’optimiser les paramètres électriques individuels, on génère des milliers de copies de ce dispositif, en sélectionnant aléatoirement les valeurs des paramètres. Chaque exemplaire est appelé un dispositif virtuel. Un programme de simulation tel qu’OghmaNano est ensuite utilisé pour générer des courbes J-V pour chaque dispositif virtuel, ce qui produit un ensemble de données constitué de courbes J-V associées à leurs paramètres électriques correspondants. Ces données peuvent être utilisées pour entraîner un modèle d’apprentissage automatique afin de prédire les paramètres électriques directement à partir des caractéristiques J-V. Dans ce cadre, OghmaNano joue le rôle d’une transformation directe, en associant les paramètres électriques aux données expérimentales simulées, tandis que le modèle d’apprentissage automatique fournit la transformation inverse. Une fois entraîné, le modèle peut être appliqué pour extraire les paramètres des matériaux à partir de dispositifs réels.

L’avantage principal de cette approche est qu’une fois entraîné, le modèle d’apprentissage automatique peut extraire les paramètres pertinents à partir des données expérimentales en quelques secondes, sans qu’il soit nécessaire que l’utilisateur soit un expert en simulation numérique. Toutefois, le succès de cette méthode dépend crucialement de la création d’un ensemble de données d’entraînement important et de haute qualité. Le processus de création de tels ensembles de données à l’aide d’OghmaNano est décrit dans les pages suivantes.

2. Ouvrir l’exemple.

L’exemple dont il est question sur cette page est accessible en cliquant sur le bouton « Nouvelle simulation » dans la fenêtre principale. Cela ouvre le navigateur « Nouvelle simulation » illustré dans ??.

Dans la liste des catégories de simulation disponibles, cliquez deux fois sur « Apprentissage automatique » pour afficher les exemples d’apprentissage automatique (??). En sélectionnant l’exemple « PM6:Y6 ML », une simulation préconfigurée correspondant à l’appareil et au flux de travail décrits dans ce chapitre est lancée.

Une fois lancée, la simulation présente la même structure de dispositif et la même configuration d’automatisation que celles utilisées dans cette section, et peut être utilisée directement pour générer des données d’entraînement pour l’apprentissage automatique, sans nécessiter de configuration supplémentaire.

OghmaNano New simulation window showing available simulation categories, including the Machine learning category.
La nouvelle fenêtre de simulation affiche la liste des catégories de simulation disponibles. Double-cliquez sur « Apprentissage automatique » pour afficher les exemples d’apprentissage automatique.
Machine learning example list showing the PM6:Y6 ML example.
Voici une liste d’exemples d’apprentissage automatique. Double-cliquez sur l’exemple PM6:Y6 ML pour ouvrir la simulation utilisée dans ce chapitre.

3. Définir les simulations et les vecteurs de sortie.

Une fois que la simulation d’exemple a été ouverte, la fenêtre principale de la simulation, illustrée à la figure ??, s’affiche. Cette fenêtre présente la structure de l’appareil entièrement configurée, qui est utilisée tout au long de ce chapitre. Dans le ruban « Automatisation », une icône d’apprentissage automatique est visible, représentée par un symbole circulaire bleu. En cliquant sur cette icône, la fenêtre principale de contrôle de l’apprentissage automatique, illustrée à la figure ??, s’ouvre. À partir de cette fenêtre, la génération des données d’entraînement pour l’apprentissage automatique est configurée et exécutée.

OghmaNano main simulation window showing the Automation ribbon, with the Machine Learning icon highlighted.
La fenêtre principale de simulation. Le ruban d’automatisation est visible et contient l’icône d’apprentissage automatique.
The OghmaNano machine learning window showing the list of simulations and light-intensity variants.
La fenêtre principale de l’apprentissage automatique.

L’objectif principal de cette fenêtre est de générer de vastes ensembles de données pour l’entraînement d’algorithmes d’apprentissage automatique. L’ensemble de données produit dans cet exemple est appelé « example ». Le premier onglet affiché est l’onglet « Simulations », qui définit l’ensemble des simulations effectuées pour chaque appareil virtuel. Dans ce cas, une courbe JV sombre et neuf courbes JV éclairées sont simulées, avec des intensités lumineuses allant de 0,0001 Soleil à 1,0 Soleil. Les simulations individuelles peuvent être activées ou désactivées à l’aide de l’option « Activé ». Si le bouton « Modifier » est cliqué dans la colonne « Patch » pour l’entrée « \(light\_0.0001\) », la fenêtre « Patch » affichée dans « ?? » s’ouvre.

La fenêtre « Patch » permet de modifier les paramètres d’une simulation virtuelle. Dans cet exemple, plusieurs courbes caractéristiques sont générées dans différentes conditions d’éclairage, en utilisant la même structure de base pour le dispositif. Pour ce faire, l’intensité lumineuse doit être ajustée indépendamment pour chaque simulation. L’ouverture de la fenêtre « Patch » pour \(light\_0.0001\) montre que le paramètre de simulation « optical/light/Psun », qui contrôle l’intensité de l’éclairage, est réglé sur \(0.0001\). Pour la simulation dans l’obscurité, le même paramètre est réglé sur \(0.0\). De cette manière, il est possible de simuler de manière cohérente plusieurs conditions expérimentales en utilisant une seule simulation de base.

The simulation patch window used to modify a parameter in a sub-simulation, here adjusting the light intensity.
La fenêtre de correction de la simulation permet de modifier une valeur dans une sous-simulation. Dans cet exemple, l’intensité lumineuse est modifiée.
The vectors window defining which simulation outputs are extracted as machine-learning vectors.
La fenêtre des vecteurs. Elle définit les données qui sont extraites de la simulation pour être utilisées comme vecteur d’apprentissage automatique.

La fenêtre « Vecteurs » définit les données extraites des simulations terminées pour former les vecteurs d’entrée utilisés pour l’apprentissage automatique. Dans cet exemple, les points de données compris entre -2,0 V et 1,4 V sont extraits du fichier \(jv.dat\), qui contient les caractéristiques courant-tension simulées. Pour les simulations dans le domaine temporel, l’utilisateur peut choisir d’extraire les données de fichiers tels que \(time\_i.csv\) ou de tout autre fichier de sortie approprié. Le nombre de points utilisés pour construire chaque vecteur d’entrée est défini par l’utilisateur. L’utilisation de vecteurs plus longs augmente le coût de calcul de l’apprentissage, mais peut permettre de capturer des caractéristiques plus détaillées de la courbe courant-tension.

4. Définition des variables aléatoires.

Random variables tab showing the list of simulation parameters selected for randomisation, including mobilities, trap densities, and resistances.
L’onglet « Variables aléatoires » affiche les paramètres sélectionnés pour la randomisation.

L’étape suivante consiste à définir quels paramètres du modèle doivent être aléatoirement modifiés. Cette opération se fait à l’aide de l’onglet « Variables aléatoires » dans la fenêtre principale d’apprentissage automatique. Le tableau comporte cinq colonnes. La colonne « Activé » indique si un paramètre est inclus dans le processus de randomisation. La colonne « Variable » précise quel paramètre de simulation est modifié. Les colonnes « Min » et « Max » définissent les limites inférieure et supérieure de la plage de valeurs du paramètre, et la colonne « Fonction aléatoire » indique si les valeurs sont tirées d’une distribution linéaire ou logarithmique.

Les distributions logarithmiques sont recommandées pour les paramètres qui couvrent plusieurs ordres de grandeur, tandis que les distributions linéaires conviennent aux paramètres qui varient sur une plage relativement étroite. L’utilisation d’une distribution logarithmique garantit que les valeurs sont échantillonnées de manière uniforme lorsqu’elles sont visualisées sur une échelle logarithmique, plutôt que de se regrouper vers l’extrémité supérieure de la plage. Par exemple, un paramètre linéaire approprié serait l’énergie d’Urbach, qui varie généralement entre 30 et 150 meV. En revanche, les densités de pièges se prêtent bien à un échantillonnage logarithmique, car elles peuvent varier de \(1 \times 10^{15}\,\mathrm{m^{-3}}\) à \(1 \times 10^{25}\,\mathrm{m^{-3}}\).

5. Définir le nombre de simulations.

Configuration window for the machine-learning data generator showing archive count, simulations per archive, and output file settings.
Options de configuration pour le générateur de données d’apprentissage automatique.

Une fois la simulation configurée, l’étape suivante consiste à déterminer le nombre d’appareils virtuels dotés de paramètres aléatoires à générer. L’ouverture de la fenêtre des paramètres (voir 18.6) permet de contrôler ce nombre à l’aide de deux paramètres : Nombre de simulations par archive (\(N_{\mathrm{sim}}\)) et Nombre d’archives (\(N_{\mathrm{arc}}\)). Le nombre total d’appareils virtuels générés est indiqué par \(N_{\mathrm{sim}} \times N_{\mathrm{arc}}\).

Les résultats de la simulation sont enregistrés dans des fichiers ZIP, appelés archives, et chaque archive contient \(N_{\mathrm{sim}}\) appareils virtuels. Dans l’exemple présenté ici, \(N_{\mathrm{sim}} \times N_{\mathrm{arc}} = 3000\) appareils virtuels sont générés et stockés dans 100 fichiers d’archive. Il est important de noter que, dans cet exemple, chaque appareil virtuel est composé d’une simulation de jonction photovoltaïque dans l’obscurité et de neuf simulations de jonction photovoltaïque sous éclairage. Par conséquent, le nombre total de fichiers de sortie peut augmenter rapidement.

Pour gérer cela, la génération des données est effectuée par lots. Un ensemble de \(N_{\mathrm{sim}}\) simulations est généré et exécuté par OghmaNano, puis enregistré dans un seul fichier d’archive, et ce processus est répété jusqu’à ce que \(N_{\mathrm{arc}}\) fichiers d’archive soient produits. Cette approche limite la perte de données au fichier d’archive en cours de génération en cas d’interruption du processus, et simplifie également le transfert de fichiers et améliore la résistance à la corruption. L’exécution des simulations est parallélisée sur tous les cœurs de processeur disponibles, tandis que la création des fichiers d’archive est effectuée sur un seul cœur.

6. Exécution du générateur de données.

Une fois la configuration terminée, en cliquant sur le bouton « Exécuter le générateur » dans la fenêtre principale d’apprentissage automatique (18.2), le processus de génération de l’ensemble de données démarre. OghmaNano commence alors à exécuter les simulations définies pour chaque appareil virtuel. Une fois le processus terminé, un répertoire nommé « example » apparaît dans le répertoire de simulation, comme indiqué dans la partie gauche de 18.8. Pour les besoins de cet exemple, le nombre de simulations par archive a été fixé à 10 et le nombre d’archives à 3, afin de réduire le temps d’exécution.

Toutes les erreurs rencontrées pendant la simulation sont enregistrées dans le fichier errors.dat. L’ouverture de l’archive archive0.zip permet de visualiser la structure interne de l’archive, comme indiqué dans la partie droite de 18.8. Chaque archive contient un ensemble de répertoires, chacun correspondant à un appareil virtuel unique.

Ces répertoires sont nommés à l’aide d’identifiants hexadécimaux aléatoires de 16 chiffres. Chaque répertoire contient l’ensemble complet des simulations pour un appareil virtuel donné ; dans cet exemple, il contient une simulation JV dans l’obscurité et neuf simulations JV en présence de lumière. Le contenu d’un de ces répertoires est présenté dans la partie gauche de 18.10. L’ouverture d’un répertoire de simulation individuel (18.10, à droite) révèle une simulation OghmaNano complète, y compris le fichier sim.json et le fichier jv.dat contenant les caractéristiques courant-tension simulées. Des données supplémentaires, telles que les données de sortie optique et les fichiers de cache, peuvent également être présentes.

Lors de la création de vastes ensembles de données pour l’apprentissage automatique, il est fortement recommandé de minimiser la production de données inutiles, car l’espace disque total utilisé peut augmenter rapidement. Cela peut être réalisé en configurant la simulation de manière à ne produire que les données essentielles. La génération des ensembles de données est effectuée par lots, les simulations étant exécutées en parallèle sur tous les cœurs de processeur disponibles, tandis que la création des archives est gérée sur un seul cœur.

Dans cet exemple illustratif, seulement trois archives sont créées. Toutefois, dans le cadre d’une production standard, il est courant de créer environ 200 archives, chacune contenant approximativement 200 appareils virtuels.

The contents of the example directory showing generated ZIP archives, error logs, and vector files.
Le contenu du répertoire d’exemple après la génération de l’ensemble de données pour l’apprentissage automatique.
The contents of a generated ZIP archive containing machine-learning data.
L’archive ZIP générée contient l’ensemble de données utilisé pour l’apprentissage automatique.
The contents of a generated ZIP archive showing separate folders for each light-intensity simulation.
Contenu principal d’une archive générée, avec un répertoire par condition d’éclairage simulée.
The contents of a single simulation directory inside the archive, including output files and metadata.
Contenu d’un répertoire de simulation individuel au sein de l’archive.

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. Regrouper les résultats dans un seul fichier.

Excerpt from vectors.json showing randomly chosen parameters and extracted JV vectors for dark and illuminated conditions.
Extrait du fichier final contenant les vecteurs (vectors.json), au format JSON. Ce fichier constitue l’ensemble de données utilisé pour l’apprentissage du modèle d’apprentissage automatique.

Une fois les simulations terminées, les données brutes générées par OghmaNano doivent être converties en un seul fichier de vecteurs, afin de pouvoir entraîner un modèle d’apprentissage automatique. En cliquant sur l’icône « Créer des vecteurs » dans la fenêtre principale de l’apprentissage automatique (18.2), OghmaNano ouvre chaque répertoire de périphérique virtuel, extrait les données demandées et les compile dans un seul fichier vectors.json. Un exemple de ce fichier est présenté dans 18.11.

Le fichier de vecteurs est un document JSON qui contient toutes les informations nécessaires à l’apprentissage supervisé. Chaque appareil virtuel apparaît comme une entrée distincte. Par exemple, l’entrée étiquetée 2cbd08c0fd7eb406 (ligne 3) contient, dans la section « params », les paramètres électriques sélectionnés aléatoirement pour cet appareil virtuel. Viennent ensuite les vecteurs d’entrée extraits, tels que le vecteur JV dans l’obscurité (ligne 19) et le vecteur JV sous un éclairage de 0,0001 soleils (ligne 22). Les unités numériques de chaque vecteur sont directement héritées du fichier source à partir duquel ils sont extraits. Dans cet exemple, les vecteurs sont extraits du fichier jv.dat, qui stocke la densité de courant \(A\,m^{-2}\) en fonction de la tension, de sorte que les valeurs des vecteurs sont exprimées en \(A\,m^{-2}\). Après les vecteurs d’entrée, des sorties scalaires supplémentaires (par exemple, PCE) sont stockées pour plus de commodité.

Un enregistrement sera créé dans ce fichier pour chaque appareil virtuel généré. Une fois que le fichier vectors.json aura été créé, il pourra être utilisé comme ensemble de données d’entraînement pour le processus d’apprentissage automatique de votre choix. Certains utilisateurs trouvent qu’il est plus facile d’importer les données dans TensorFlow après les avoir converties au format CSV ; cela peut être fait à l’aide de bibliothèques Python standard.

8. From data set to machine learning

Les sections précédentes décrivent comment OghmaNano est utilisé pour générer un ensemble de données complet pour l’apprentissage automatique, au format JSON. À ce stade, le processus de génération des données est terminé : pour chaque appareil virtuel, le fichier contient les paramètres du modèle choisis aléatoirement, ainsi que les résultats de simulation correspondants, encodés sous forme de vecteurs d’entrée.

La prochaine étape consiste à importer ces données dans un environnement d’apprentissage automatique de votre choix. En pratique, cela implique généralement de lire le fichier vectors.json et de le convertir en un format tabulaire, tel que CSV, qui peut ensuite être utilisé pour l’entraînement, la validation et les tests. Cette conversion peut être effectuée facilement à l’aide d’outils de script standard (par exemple, Python).

Une fois converties, les données peuvent être utilisées pour entraîner un réseau neuronal ou un autre modèle de régression, en utilisant un cadre de travail d’apprentissage automatique tel que : TensorFlow, PyTorch ou une bibliothèque similaire. À partir de ce moment, le choix de l’architecture du réseau, de la fonction de perte et de la stratégie d’entraînement dépend de l’application et est indépendant d’OghmaNano.

De cette manière, OghmaNano offre une solution complète et automatisée pour générer des données d’entraînement physiquement cohérentes, laissant ainsi le développement et l’optimisation ultérieurs du modèle d’apprentissage automatique entièrement sous le contrôle de l’utilisateur.