Brug en datacentreret tilgang til at minimere mængden af ​​data, der kræves for at træne Amazon SageMaker-modeller

Brug en datacentreret tilgang til at minimere mængden af ​​data, der kræves for at træne Amazon SageMaker-modeller

Efterhånden som maskinlæringsmodeller (ML) er blevet forbedret, har dataforskere, ML-ingeniører og forskere flyttet mere af deres opmærksomhed til at definere og forbedre datakvaliteten. Dette har ført til fremkomsten af ​​en datacentreret tilgang til ML og forskellige teknikker til at forbedre modellens ydeevne ved at fokusere på datakrav. Anvendelse af disse teknikker giver ML-udøvere mulighed for at reducere mængden af ​​data, der kræves for at træne en ML-model.

Som en del af denne tilgang er avancerede teknikker til udvælgelse af dataundersæt dukket op for at fremskynde træningen ved at reducere mængden af ​​inputdata. Denne proces er baseret på automatisk at vælge et givet antal punkter, der tilnærmer fordelingen af ​​et større datasæt, og bruge det til træning. Anvendelse af denne type teknik reducerer den tid, det tager at træne en ML-model.

I dette indlæg beskriver vi anvendelsen af ​​datacentrerede AI-principper med Amazon SageMaker Ground Truth, hvordan man implementerer teknikker til udvælgelse af dataundersæt ved hjælp af LEDNINGER depot på Amazon SageMaker at reducere mængden af ​​data, der kræves for at træne en indledende model, og hvordan man kører eksperimenter ved hjælp af denne tilgang med Amazon SageMaker-eksperimenter.

En datacentreret tilgang til maskinlæring

Før du dykker ned i mere avancerede datacentrerede teknikker som dataundersætudvælgelse, kan du forbedre dine datasæt på flere måder ved at anvende et sæt underliggende principper til din datamærkningsproces. Til dette understøtter Ground Truth forskellige mekanismer til at forbedre etiketkonsistens og datakvalitet.

Etiketkonsistens er vigtig for at forbedre modellens ydeevne. Uden det kan modeller ikke producere en beslutningsgrænse, der adskiller hvert punkt, der tilhører forskellige klasser. En måde at sikre konsistens på er ved at bruge annotationskonsolidering i Ground Truth, som giver dig mulighed for at vise et givet eksempel til flere etiketter og bruge den aggregerede etiket, der er angivet som grundsandheden for dette eksempel. Divergens i etiketten måles ved den tillidsscore, der genereres af Ground Truth. Når der er divergens i etiketter, bør du se efter, om der er tvetydighed i mærkningsinstruktionerne til dine etiketter, som kan fjernes. Denne tilgang afbøder virkningerne af bias af individuelle etiketter, hvilket er centralt for at gøre etiketter mere konsistente.

En anden måde at forbedre modellens ydeevne ved at fokusere på data involverer udvikling af metoder til at analysere fejl i etiketter, når de kommer op for at identificere den vigtigste delmængde af data, der skal forbedres. du kan gøre dette til dit træningsdatasæt med en kombination af manuel indsats, der involverer dykning i mærkede eksempler og brug af amazoncloudwatch logfiler og metrics genereret af Ground Truth-mærkningsjob. Det er også vigtigt at se på fejl, som modellen laver på slutningstidspunktet for at drive den næste iteration af mærkning for vores datasæt. Ud over disse mekanismer, Amazon SageMaker Clarify giver datavidenskabsfolk og ML-ingeniører mulighed for at køre algoritmer som f.eks KernelSHAP at give dem mulighed for at fortolke forudsigelser lavet af deres model. Som nævnt kan en dybere forklaring af modellens forudsigelser relateres tilbage til den indledende mærkningsproces for at forbedre den.

Til sidst kan du overveje at smide støjende eller alt for overflødige eksempler ud. Ved at gøre dette kan du reducere træningstiden ved at fjerne eksempler, der ikke bidrager til at forbedre modellens ydeevne. Det er imidlertid vanskeligt og tidskrævende at identificere en nyttig delmængde af et givet datasæt manuelt. Ved at anvende teknikkerne til udvælgelse af dataundersæt beskrevet i dette indlæg kan du automatisere denne proces langs etablerede rammer.

Brug sag

Som nævnt fokuserer datacentreret AI på at forbedre modelinput frem for selve modellens arkitektur. Når du har anvendt disse principper under datamærkning eller funktionsudvikling, kan du fortsætte med at fokusere på modelinput ved at anvende dataundersætvalg på træningstidspunktet.

Til dette indlæg anvender vi generaliseringsbaseret dataundersætudvælgelse til effektiv og robust læring (GLISTER), som er en af ​​mange teknikker til udvælgelse af dataundersæt implementeret i CORDS-lageret, til træningsalgoritmen for en ResNet-18 model for at minimere den tid, det tager at træne en model til at klassificere CIFAR-10 billeder. Følgende er nogle eksempelbilleder med deres respektive etiketter hentet fra CIFAR-10-datasættet.

CIFAR datasæt

ResNet-18 bruges ofte til klassificeringsopgaver. Det er et 18-lags dybt konvolutionelt neuralt netværk. CIFAR-10-datasættet bruges ofte til at evaluere gyldigheden af ​​forskellige teknikker og tilgange i ML. Det er sammensat af 60,000 32×32 farvebilleder mærket på tværs af 10 klasser.

I de følgende afsnit viser vi, hvordan GLISTER til en vis grad kan hjælpe dig med at besvare følgende spørgsmål:

Hvor stor en procentdel af et givent datasæt kan vi bruge og stadig opnå god modelpræstation under træning?

Anvendelse af GLISTER på din træningsalgoritme vil introducere fraktion som en hyperparameter i din træningsalgoritme. Dette repræsenterer procentdelen af ​​det givne datasæt, du ønsker at bruge. Som med enhver hyperparameter kræver det justering at finde den værdi, der giver det bedste resultat for din model og data. Vi går ikke i dybden med justering af hyperparameter i dette indlæg. For mere information, se Optimer hyperparametre med Amazon SageMaker Automatic Model Tuning.

Vi kører adskillige tests ved hjælp af SageMaker Experiments for at måle effekten af ​​tilgangen. Resultaterne vil variere afhængigt af det indledende datasæt, så det er vigtigt at teste tilgangen i forhold til vores data ved forskellige undersætstørrelser.

Selvom vi diskuterer brugen af ​​GLISTER på billeder, kan du også anvende det til træningsalgoritmer, der arbejder med strukturerede data eller tabeldata.

Valg af dataundersæt

Formålet med udvælgelse af dataundersæt er at accelerere træningsprocessen og samtidig minimere virkningerne på nøjagtigheden og øge modellens robusthed. Mere specifikt vælger GLISTER-ONLINE et undersæt, efterhånden som modellen lærer ved at forsøge at maksimere log-sandsynligheden for det pågældende træningsdataundersæt på det valideringssæt, du angiver. Optimering af dataundersætudvælgelse på denne måde afbøder støjen og klasseubalancen, der ofte findes i datasæt fra den virkelige verden, og gør det muligt for undersætudvælgelsesstrategien at tilpasse sig, efterhånden som modellen lærer.

Den indledende GLISTER papir beskriver en hastigheds-/nøjagtighedsafvejning ved forskellige dataundersætstørrelser som fulgt ved hjælp af en LeNet model:

Undersætstørrelse Speedup Nøjagtighed
10 % 6x -3%
30 % 2.5x -1.20%
50 % 1.5x -0.20%

For at træne modellen kører vi en SageMaker træningsjob ved hjælp af et tilpasset træningsscript. Vi har også allerede uploadet vores billeddatasæt til Amazon Simple Storage Service (Amazon S3). Som med ethvert SageMaker træningsjob, skal vi definere en Estimator objekt. PyTorch-estimatoren fra sagemaker.pytorch pakke giver os mulighed for at køre vores eget træningsscript i en administreret PyTorch-container. Det inputs variabel overført til estimatorens .fit funktionen indeholder en ordbog over trænings- og valideringsdatasættets S3-placering.

train.py script køres, når et træningsjob startes. I dette script importerer vi ResNet-18-modellen fra CORDS-biblioteket og giver den antallet af klasser i vores datasæt som følger:

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

Så bruger vi gen_dataset funktion fra CORDS til at skabe trænings-, validerings- og testdatasæt:

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")

Fra hvert datasæt opretter vi en tilsvarende 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)

Til sidst bruger vi disse dataindlæsere til at skabe en GLISTERDataLoader fra CORDS-biblioteket. Den bruger en implementering af GLISTER-ONLINE udvælgelsesstrategien, som anvender udvælgelse af delmængder, når vi opdaterer modellen under træning, som diskuteret tidligere i dette indlæg.

For at oprette objektet videregiver vi udvælgelsesstrategiens specifikke argumenter som en DotMap objekt sammen med train_loader, validation_loaderog 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)

GLISTERDataLoader kan nu anvendes som en almindelig dataloader til en træningsløkke. Den vil vælge dataundersæt til næste træningsbatch, efterhånden som modellen lærer baseret på den pågældende models tab. Som vist i den foregående tabel giver tilføjelse af en strategi for dataundersætudvælgelse os mulighed for at reducere træningstiden betydeligt, selv med det ekstra trin til udvælgelse af dataundersæt, med ringe afvejning i nøjagtighed.

Datavidenskabsmænd og ML-ingeniører har ofte brug for at vurdere gyldigheden af ​​en tilgang ved at sammenligne den med en baseline. Vi demonstrerer, hvordan du gør dette i næste afsnit.

Eksperimentsporing

Du kan bruge SageMaker Experiments til at måle gyldigheden af ​​tilgangen til valg af dataundersæt. For mere information, se Næste generation af Amazon SageMaker-eksperimenter – Organiser, spor og sammenlign dine maskinlæringstræninger i stor skala.

I vores tilfælde udfører vi fire eksperimenter: en baseline uden at anvende dataundersætselektion og tre andre med forskellige fraction parametre, som repræsenterer størrelsen af ​​delmængden i forhold til det samlede datasæt. Naturligvis ved hjælp af en mindre fraction parameter bør resultere i reducerede træningstider, men også lavere modelnøjagtighed.

For denne post er hvert træningsløb repræsenteret som en Run i SageMaker Experiments. Kørslerne relateret til vores eksperiment er alle grupperet under én Experiment objekt. Kørsler kan knyttes til et fælles eksperiment, når du opretter Estimator med SDK. Se følgende kode:

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)

Som en del af dit brugerdefinerede træningsscript kan du indsamle løbsmetrics ved at bruge 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)

Derefter, ved at bruge kørselsobjektet, der blev returneret af den forrige operation, kan du indsamle datapunkter pr. epoke ved at kalde run.log_metric(name, value, step) og levering af metrisk navn, værdi og nuværende epokenummer.

For at måle gyldigheden af ​​vores tilgang indsamler vi målinger svarende til træningstab, træningsnøjagtighed, valideringstab, valideringsnøjagtighed og tid til at fuldføre en epoke. Så kan vi, efter at have kørt uddannelsesjob gennemgå resultaterne af vores eksperiment in Amazon SageMaker Studio eller gennem SageMaker Experiments SDK.

Vælg for at se valideringsnøjagtighederne i Studio Analyser på forsøget Kører .

Eksperimentliste

Tilføj et diagram, indstil diagramegenskaberne, og vælg Opret. Som vist i det følgende skærmbillede, vil du se et plot af valideringsnøjagtigheder ved hver epoke for alle kørsler.

Eksperimentdiagram

SDK'et giver dig også mulighed for at hente eksperimentrelaterede oplysninger som en Pandas-dataramme:

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

Eventuelt kan uddannelsesjobbene sorteres. For eksempel kunne vi tilføje "metrics.validation:accuracy.max" som værdien af sort_by parameter overført til ExperimentAnalytics at returnere resultatet sorteret efter valideringsnøjagtighed.

Som forventet viser vores eksperimenter, at anvendelse af GLISTER og dataundersætvalg til træningsalgoritmen reducerer træningstiden. Når du kører vores baseline træningsalgoritme, svinger mediantiden til at gennemføre en enkelt epoke omkring 27 sekunder. I modsætning hertil vil anvendelse af GLISTER til at vælge en undergruppe svarende til 50 %, 30 % og 10 % af det samlede datasæt resultere i tider til at fuldføre en epoke på henholdsvis ca. 13, 8.5 og 2.75 sekunder på ml.p3.2xlarge forekomster .

Vi observerer også en forholdsvis minimal indvirkning på valideringsnøjagtigheden, især ved brug af dataundersæt på 50 %. Efter træning i 100 epoker giver basislinjen en valideringsnøjagtighed på 92.72 %. I modsætning hertil resulterer anvendelsen af ​​GLISTER til at vælge et undersæt svarende til 50 %, 30 % og 10 % af det samlede datasæt i valideringsnøjagtigheder på henholdsvis 91.42 %, 89.76 % og 82.82 %.

Konklusion

SageMaker Ground Truth og SageMaker Experiments muliggør en datacentreret tilgang til maskinlæring ved at give datavidenskabsfolk og ML-ingeniører mulighed for at producere mere ensartede datasæt og spore virkningen af ​​mere avancerede teknikker, når de implementerer dem i modelbygningsfasen. Implementering af en datacentreret tilgang til ML giver dig mulighed for at reducere mængden af ​​data, der kræves af din model og forbedre dens robusthed.

Prøv det, og lad os vide, hvad du synes i kommentarerne.


Om forfatterne

Use a data-centric approach to minimize the amount of data required to train Amazon SageMaker models PlatoBlockchain Data Intelligence. Vertical Search. Ai.Nicolas Bernier er en Solutions Architect, en del af den canadiske offentlige sektor hos AWS. Han er i gang med en mastergrad med et forskningsområde i Deep Learning og har fem AWS-certificeringer, herunder ML Specialty Certification. Nicolas brænder for at hjælpe kunder med at uddybe deres viden om AWS ved at arbejde sammen med dem om at omsætte deres forretningsmæssige udfordringer til tekniske løsninger.

Use a data-centric approach to minimize the amount of data required to train Amazon SageMaker models PlatoBlockchain Data Intelligence. Vertical Search. Ai.Givanildo Alves er en Prototyping Architect hos Prototyping and Cloud Engineering teamet hos Amazon Web Services, der hjælper kunder med at innovere og accelerere ved at vise kunsten at mulige på AWS, efter at have implementeret adskillige prototyper omkring kunstig intelligens. Han har en lang karriere inden for software engineering og har tidligere arbejdet som Software Development Engineer hos Amazon.com.br.

Tidsstempel:

Mere fra AWS maskinindlæring