Verwenden Sie einen datenzentrierten Ansatz, um die Datenmenge zu minimieren, die zum Trainieren von Amazon SageMaker-Modellen erforderlich ist

Verwenden Sie einen datenzentrierten Ansatz, um die Datenmenge zu minimieren, die zum Trainieren von Amazon SageMaker-Modellen erforderlich ist

Da sich Modelle für maschinelles Lernen (ML) verbessert haben, haben Data Scientists, ML-Ingenieure und Forscher ihre Aufmerksamkeit stärker auf die Definition und Verbesserung der Datenqualität verlagert. Dies hat zur Entstehung eines datenzentrierten Ansatzes für ML und verschiedener Techniken zur Verbesserung der Modellleistung durch Fokussierung auf Datenanforderungen geführt. Durch die Anwendung dieser Techniken können ML-Praktiker die Datenmenge reduzieren, die zum Trainieren eines ML-Modells erforderlich ist.

Als Teil dieses Ansatzes sind fortgeschrittene Techniken zur Auswahl von Datenteilmengen aufgetaucht, um das Training zu beschleunigen, indem die Menge der Eingabedaten reduziert wird. Dieser Prozess basiert auf der automatischen Auswahl einer bestimmten Anzahl von Punkten, die sich der Verteilung eines größeren Datensatzes annähern, und deren Verwendung für das Training. Die Anwendung dieser Art von Technik reduziert die zum Trainieren eines ML-Modells erforderliche Zeit.

In diesem Beitrag beschreiben wir die Anwendung datenzentrischer KI-Prinzipien mit Amazon Sagemaker Ground Truth, wie Techniken zur Auswahl von Datenteilmengen mithilfe von implementiert werden KABEL Repository an Amazon Sage Maker wie man die Datenmenge reduziert, die zum Trainieren eines anfänglichen Modells erforderlich ist, und wie man Experimente mit diesem Ansatz durchführt Amazon SageMaker-Experimente.

Ein datenzentrierter Ansatz für maschinelles Lernen

Bevor Sie sich mit fortgeschritteneren datenzentrischen Techniken wie der Auswahl von Datenteilmengen befassen, können Sie Ihre Datensätze auf vielfältige Weise verbessern, indem Sie eine Reihe zugrunde liegender Prinzipien auf Ihren Datenkennzeichnungsprozess anwenden. Dazu unterstützt Ground Truth verschiedene Mechanismen zur Verbesserung der Etikettenkonsistenz und Datenqualität.

Die Beschriftungskonsistenz ist wichtig, um die Modellleistung zu verbessern. Ohne sie können Modelle keine Entscheidungsgrenze erzeugen, die jeden Punkt trennt, der zu unterschiedlichen Klassen gehört. Eine Möglichkeit, Konsistenz sicherzustellen, ist die Verwendung von Annotationskonsolidierung in Ground Truth, wodurch Sie ein bestimmtes Beispiel mehreren Labelerstellern bereitstellen und das bereitgestellte aggregierte Label als Grundwahrheit für dieses Beispiel verwenden können. Abweichungen im Etikett werden anhand des von Ground Truth generierten Konfidenzwerts gemessen. Wenn es Abweichungen bei den Etiketten gibt, sollten Sie nachsehen, ob es Unklarheiten in den Etikettieranweisungen für Ihre Etikettierer gibt, die entfernt werden können. Dieser Ansatz mildert die Auswirkungen der Voreingenommenheit einzelner Etikettierer, was von zentraler Bedeutung ist, um Etiketten konsistenter zu machen.

Eine weitere Möglichkeit, die Modellleistung durch Konzentration auf Daten zu verbessern, besteht darin, Methoden zur Analyse von Fehlern in Beschriftungen zu entwickeln, sobald diese auftreten, um die wichtigste Teilmenge von Daten zu identifizieren, die verbessert werden können. Sie können dies für Ihren Trainingsdatensatz mit einer Kombination aus manuellem Aufwand tun, indem Sie in beschriftete Beispiele eintauchen und die verwenden Amazon CloudWatch Protokolle und Metriken, die von Ground Truth-Kennzeichnungsaufträgen generiert werden. Es ist auch wichtig, sich die Fehler anzusehen, die das Modell zum Zeitpunkt der Inferenz macht, um die nächste Iteration der Beschriftung für unseren Datensatz voranzutreiben. Zusätzlich zu diesen Mechanismen Amazon SageMaker klären ermöglicht es Datenwissenschaftlern und ML-Ingenieuren, Algorithmen wie auszuführen KernelSHAP um es ihnen zu ermöglichen, Vorhersagen ihres Modells zu interpretieren. Wie bereits erwähnt, kann eine tiefere Erklärung der Vorhersagen des Modells auf den anfänglichen Kennzeichnungsprozess zurückgeführt werden, um ihn zu verbessern.

Schließlich können Sie erwägen, verrauschte oder übermäßig redundante Beispiele wegzuwerfen. Auf diese Weise können Sie die Trainingszeit verkürzen, indem Sie Beispiele entfernen, die nicht zur Verbesserung der Modellleistung beitragen. Die manuelle Identifizierung einer nützlichen Teilmenge eines gegebenen Datensatzes ist jedoch schwierig und zeitaufwändig. Die Anwendung der in diesem Beitrag beschriebenen Techniken zur Auswahl von Datenteilmengen ermöglicht es Ihnen, diesen Prozess entlang etablierter Frameworks zu automatisieren.

Anwendungsfall

Wie bereits erwähnt, konzentriert sich die datenzentrierte KI eher auf die Verbesserung der Modelleingabe als auf die Architektur des Modells selbst. Nachdem Sie diese Prinzipien während der Datenbeschriftung oder Featureentwicklung angewendet haben, können Sie sich weiterhin auf die Modelleingabe konzentrieren, indem Sie die Auswahl von Datenteilmengen zur Trainingszeit anwenden.

Für diesen Beitrag wenden wir die verallgemeinerungsbasierte Datenteilmengenauswahl für effizientes und robustes Lernen an (GLISTER), die eine von vielen im CORDS-Repository implementierten Techniken zur Auswahl von Datenuntermengen ist, zum Trainingsalgorithmus von a ResNet-18 Modell, um die Zeit zu minimieren, die zum Trainieren eines Modells zum Klassifizieren benötigt wird CIFAR-10 Bilder. Im Folgenden finden Sie einige Beispielbilder mit ihren jeweiligen Beschriftungen aus dem CIFAR-10-Datensatz.

CIFAR-Datensatz

ResNet-18 wird häufig für Klassifizierungsaufgaben verwendet. Es ist ein 18-schichtiges Deep Convolutional Neural Network. Der CIFAR-10-Datensatz wird häufig verwendet, um die Gültigkeit verschiedener Techniken und Ansätze in ML zu bewerten. Es besteht aus 60,000 32×32-Farbbildern, die in 10 Klassen beschriftet sind.

In den folgenden Abschnitten zeigen wir, wie GLISTER Sie bei der Beantwortung der folgenden Frage bis zu einem gewissen Grad unterstützen kann:

Wie viel Prozent eines bestimmten Datensatzes können wir verwenden und trotzdem eine gute Modellleistung während des Trainings erzielen?

Wenn Sie GLISTER auf Ihren Trainingsalgorithmus anwenden, wird Bruch als Hyperparameter in Ihren Trainingsalgorithmus eingeführt. Dies stellt den Prozentsatz des angegebenen Datensatzes dar, den Sie verwenden möchten. Wie bei jedem Hyperparameter erfordert das Finden des Werts, der das beste Ergebnis für Ihr Modell und Ihre Daten liefert, eine Feinabstimmung. Wir gehen in diesem Beitrag nicht näher auf das Hyperparameter-Tuning ein. Weitere Informationen finden Sie unter Optimieren Sie Hyperparameter mit Amazon SageMaker Automatic Model Tuning.

Wir führen mehrere Tests mit SageMaker-Experimenten durch, um die Auswirkungen des Ansatzes zu messen. Die Ergebnisse variieren je nach Ausgangsdatensatz, daher ist es wichtig, den Ansatz anhand unserer Daten bei unterschiedlichen Teilmengengrößen zu testen.

Obwohl wir die Verwendung von GLISTER auf Bildern besprechen, können Sie es auch auf Trainingsalgorithmen anwenden, die mit strukturierten oder tabellarischen Daten arbeiten.

Auswahl von Datenteilmengen

Der Zweck der Datenteilmengenauswahl besteht darin, den Trainingsprozess zu beschleunigen und gleichzeitig die Auswirkungen auf die Genauigkeit zu minimieren und die Robustheit des Modells zu erhöhen. Genauer gesagt wählt GLISTER-ONLINE beim Lernen des Modells eine Teilmenge aus, indem es versucht, die Log-Wahrscheinlichkeit dieser Teilmenge der Trainingsdaten auf der von Ihnen angegebenen Validierungsmenge zu maximieren. Die Optimierung der Datenteilmengenauswahl auf diese Weise mildert das Rauschen und das Klassenungleichgewicht, das häufig in realen Datensätzen zu finden ist, und ermöglicht die Anpassung der Teilmengenauswahlstrategie, wenn das Modell lernt.

Die anfängliche GLISTER-Papier beschreibt einen Kompromiss zwischen Beschleunigung und Genauigkeit bei verschiedenen Größen von Datenteilmengen, wie unter Verwendung von a LeNet Modell:

Teilmengengröße Speedup Genauigkeit
10% 6x -3%
30% 2.5x -1.20%
50% 1.5x -0.20%

Um das Modell zu trainieren, führen wir a SageMaker-Ausbildungsjob Verwenden eines benutzerdefinierten Trainingsskripts. Auch unseren Bilddatensatz haben wir bereits auf hochgeladen Amazon Simple Storage-Service (Amazon S3). Wie bei jedem SageMaker-Trainingsjob müssen wir eine definieren Estimator Objekt. Der PyTorch-Schätzer aus der sagemaker.pytorch -Paket können wir unser eigenes Trainingsskript in einem verwalteten PyTorch-Container ausführen. Der inputs Variable, die an den Schätzer übergeben wird .fit -Funktion enthält ein Wörterbuch des S3-Speicherorts des Trainings- und Validierungsdatasets.

Das train.py -Skript wird ausgeführt, wenn ein Trainingsjob gestartet wird. In diesem Skript importieren wir das ResNet-18-Modell aus der CORDS-Bibliothek und übergeben ihm die Anzahl der Klassen in unserem Datensatz wie folgt:

from cords.utils.models import ResNet18 numclasses = 10
model = ResNet18(numclasses)

Dann verwenden wir die gen_dataset Funktion von CORDS zum Erstellen von Trainings-, Validierungs- und Testdatensätzen:

from cords.utils.data.datasets.SL import gen_dataset train_set, validation_set, test_set, numclasses = gen_dataset(
datadir="/opt/ml/input/data/training",
dset_name="cifar10",
feature="dss",
type="image")

Aus jedem Datensatz erstellen wir einen äquivalenten PyTorch-Dataloader:

train_loader = torch.utils.data.DataLoader(train_set,
batch_size=batch_size,
shuffle=True) validation_loader = torch.utils.data.DataLoader(validation_set,
batch_size=batch_size,
shuffle=False)

Schließlich verwenden wir diese Dataloader, um eine zu erstellen GLISTERDataLoader aus der CORDS-Bibliothek. Es verwendet eine Implementierung der GLISTER-ONLINE-Auswahlstrategie, die eine Teilmengenauswahl anwendet, wenn wir das Modell während des Trainings aktualisieren, wie zuvor in diesem Beitrag besprochen.

Um das Objekt zu erstellen, übergeben wir die Auswahlstrategie-spezifischen Argumente als a DotMap Objekt zusammen mit dem train_loader, validation_loader und logger:

import logging
from cords.utils.data.dataloader.SL.adaptive import GLISTERDataLoader
from dotmap import DotMap dss_args = # GLISTERDataLoader specific arguments
dss_args = DotMap(dss_args)
dataloader = GLISTERDataLoader(train_loader,
validation_loader,
dss_args,
logger,
batch_size=batch_size,
shuffle=True,
pin_memory=False)

Das GLISTERDataLoader kann jetzt als regulärer Dataloader auf eine Trainingsschleife angewendet werden. Es wählt Datenteilmengen für den nächsten Trainingsstapel aus, während das Modell basierend auf dem Verlust dieses Modells lernt. Wie in der vorangehenden Tabelle gezeigt, ermöglicht uns das Hinzufügen einer Datenteilmengen-Auswahlstrategie, die Trainingszeit erheblich zu verkürzen, sogar mit dem zusätzlichen Schritt der Datenteilmengen-Auswahl, ohne Kompromisse bei der Genauigkeit einzugehen.

Datenwissenschaftler und ML-Ingenieure müssen häufig die Gültigkeit eines Ansatzes bewerten, indem sie ihn mit einer Basislinie vergleichen. Wie das geht, zeigen wir im nächsten Abschnitt.

Experiment-Tracking

Sie können SageMaker-Experimente verwenden, um die Gültigkeit des Ansatzes zur Auswahl von Datenteilmengen zu messen. Weitere Informationen finden Sie unter Amazon SageMaker-Experimente der nächsten Generation – Organisieren, verfolgen und vergleichen Sie Ihre Schulungen zum maschinellen Lernen im großen Maßstab.

In unserem Fall führen wir vier Experimente durch: eine Basislinie ohne Anwendung der Datenteilmengenauswahl und drei weitere mit abweichenden fraction Parameter, die die Größe der Teilmenge im Verhältnis zum Gesamtdatensatz darstellen. Natürlich mit einem kleineren fraction -Parameter sollte zu verkürzten Trainingszeiten führen, aber auch zu einer geringeren Modellgenauigkeit.

Für diesen Posten wird jeder Trainingslauf als dargestellt Run in SageMaker-Experimenten. Die Läufe, die sich auf unser Experiment beziehen, sind alle unter einem zusammengefasst Experiment Objekt. Läufe können beim Erstellen an ein gemeinsames Experiment angehängt werden Estimator mit dem SDK. Siehe folgenden Code:

from sagemaker.utils import unique_name_from_base
from sagemaker.experiments.run import Run, load_run experiment_name = unique_name_from_base("data-centric-experiment")
with Run(
experiment_name=experiment_name,
sagemaker_session=sess
) as run:
estimator = PyTorch('train.py',
source_dir="source",
role=role,
instance_type=instance_type,
instance_count=1,
framework_version=framework_version,
py_version='py3',
env={ 'SAGEMAKER_REQUIREMENTS': 'requirements.txt',
})
estimator.fit(inputs)

Als Teil Ihres benutzerdefinierten Trainingsskripts können Sie Laufmetriken sammeln, indem Sie verwenden load_run:

from sagemaker.experiments.run import load_run
from sagemaker.session import Session if __name__ == "__main__":
args = parse_args()
session = Session(boto3.session.Session(region_name=args.region))
with load_run(sagemaker_session=session) as run:
train(args, run)

Dann können Sie unter Verwendung des von der vorherigen Operation zurückgegebenen Ausführungsobjekts Datenpunkte pro Epoche durch Aufrufen sammeln run.log_metric(name, value, step) und Bereitstellen des Metriknamens, -werts und der aktuellen Epochennummer.

Um die Gültigkeit unseres Ansatzes zu messen, erfassen wir Metriken, die dem Trainingsverlust, der Trainingsgenauigkeit, dem Validierungsverlust, der Validierungsgenauigkeit und der Zeit bis zum Abschluss einer Epoche entsprechen. Dann, nachdem wir die Trainingsjobs ausgeführt haben, können wir das tun Überprüfen Sie die Ergebnisse unseres Experiments in Amazon SageMaker-Studio oder über das SageMaker Experiments SDK.

Um Validierungsgenauigkeiten in Studio anzuzeigen, wählen Sie Analysieren auf dem Versuch Läuft

Versuchsliste

Fügen Sie ein Diagramm hinzu, legen Sie die Diagrammeigenschaften fest und wählen Sie aus Erstellen. Wie im folgenden Screenshot gezeigt, sehen Sie ein Diagramm der Validierungsgenauigkeiten in jeder Epoche für alle Läufe.

Experimente Diagramm

Mit dem SDK können Sie auch experimentbezogene Informationen als Pandas-Datenrahmen abrufen:

from sagemaker.analytics import ExperimentAnalytics trial_component_analytics = ExperimentAnalytics(
sagemaker_session=sess.sagemaker_client,
experiment_name=experiment_name
)
analytic_table = trial_component_analytics.dataframe()

Optional können die Trainingsjobs sortiert werden. Zum Beispiel könnten wir hinzufügen "metrics.validation:accuracy.max" als der Wert des sort_by Parameter übergeben an ExperimentAnalytics um das nach Validierungsgenauigkeit geordnete Ergebnis zurückzugeben.

Wie erwartet zeigen unsere Experimente, dass die Anwendung von GLISTER und der Datenteilmengenauswahl auf den Trainingsalgorithmus die Trainingszeit reduziert. Beim Ausführen unseres Baseline-Trainingsalgorithmus liegt die mittlere Zeit zum Abschließen einer einzelnen Epoche bei etwa 27 Sekunden. Im Gegensatz dazu führt die Anwendung von GLISTER zur Auswahl einer Teilmenge, die 50 %, 30 % und 10 % des Gesamtdatensatzes entspricht, zu einer Zeitdauer von etwa 13, 8.5 bzw. 2.75 Sekunden zum Abschließen einer Epoche auf ml.p3.2xlarge-Instanzen .

Wir beobachten auch einen vergleichsweise geringen Einfluss auf die Validierungsgenauigkeit, insbesondere bei Verwendung von Datenteilmengen von 50 %. Nach dem Training für 100 Epochen erzeugt die Basislinie eine Validierungsgenauigkeit von 92.72 %. Im Gegensatz dazu führt die Anwendung von GLISTER zur Auswahl einer Teilmenge, die 50 %, 30 % und 10 % des Gesamtdatensatzes entspricht, zu Validierungsgenauigkeiten von 91.42 %, 89.76 % bzw. 82.82 %.

Zusammenfassung

SageMaker Ground Truth und SageMaker Experiments ermöglichen einen datenzentrierten Ansatz für maschinelles Lernen, indem Datenwissenschaftler und ML-Ingenieure konsistentere Datensätze erstellen und die Auswirkungen fortschrittlicherer Techniken verfolgen können, wenn sie diese in der Modellerstellungsphase implementieren. Durch die Implementierung eines datenzentrierten ML-Ansatzes können Sie die für Ihr Modell erforderliche Datenmenge reduzieren und seine Robustheit verbessern.

Probieren Sie es aus und teilen Sie uns Ihre Meinung in den Kommentaren mit.


Über die Autoren

Verwenden Sie einen datenzentrierten Ansatz, um die Datenmenge zu minimieren, die zum Trainieren von Amazon SageMaker-Modellen PlatoBlockchain Data Intelligence erforderlich ist. Vertikale Suche. Ai.Nikolaus Bernier ist Lösungsarchitekt und Teil des kanadischen Teams für den öffentlichen Sektor bei AWS. Er führt derzeit einen Master-Abschluss mit einem Forschungsgebiet in Deep Learning durch und besitzt fünf AWS-Zertifizierungen, darunter die ML Specialty Certification. Nicolas ist leidenschaftlich daran interessiert, Kunden dabei zu helfen, ihr Wissen über AWS zu vertiefen, indem er mit ihnen zusammenarbeitet, um ihre geschäftlichen Herausforderungen in technische Lösungen umzusetzen.

Verwenden Sie einen datenzentrierten Ansatz, um die Datenmenge zu minimieren, die zum Trainieren von Amazon SageMaker-Modellen PlatoBlockchain Data Intelligence erforderlich ist. Vertikale Suche. Ai.Givanildo Alves ist ein Prototyping-Architekt im Prototyping- und Cloud-Engineering-Team bei Amazon Web Services, der Kunden hilft, Innovationen zu entwickeln und zu beschleunigen, indem er die Kunst des Möglichen auf AWS zeigt, nachdem er bereits mehrere Prototypen rund um künstliche Intelligenz implementiert hat. Er blickt auf eine lange Karriere im Software Engineering zurück und arbeitete zuvor als Software Development Engineer bei Amazon.com.br.

Zeitstempel:

Mehr von AWS Maschinelles Lernen