Bruk en datasentrisk tilnærming for å minimere mengden data som kreves for å trene Amazon SageMaker-modeller

Bruk en datasentrisk tilnærming for å minimere mengden data som kreves for å trene Amazon SageMaker-modeller

Etter hvert som maskinlæringsmodeller (ML) har blitt bedre, har dataforskere, ML-ingeniører og forskere flyttet mer oppmerksomhet til å definere og forbedre datakvaliteten. Dette har ført til fremveksten av en datasentrisk tilnærming til ML og ulike teknikker for å forbedre modellytelsen ved å fokusere på datakrav. Ved å bruke disse teknikkene kan ML-utøvere redusere mengden data som kreves for å trene en ML-modell.

Som en del av denne tilnærmingen har avanserte teknikker for valg av dataundersett dukket opp for å øke hastigheten på treningen ved å redusere inndatamengden. Denne prosessen er basert på å automatisk velge et gitt antall punkter som tilnærmer fordelingen av et større datasett og bruke det til trening. Bruk av denne typen teknikk reduserer tiden som kreves for å trene en ML-modell.

I dette innlegget beskriver vi bruk av datasentriske AI-prinsipper med Amazon SageMaker Ground Truth, hvordan implementere teknikker for valg av dataundersett ved hjelp av KORDER depot på Amazon SageMaker for å redusere mengden data som kreves for å trene en innledende modell, og hvordan du kjører eksperimenter ved å bruke denne tilnærmingen med Amazon SageMaker-eksperimenter.

En datasentrisk tilnærming til maskinlæring

Før du dykker inn i mer avanserte datasentriske teknikker som valg av dataundersett, kan du forbedre datasettene dine på flere måter ved å bruke et sett med underliggende prinsipper på datamerkingsprosessen. For dette støtter Ground Truth ulike mekanismer for å forbedre etikettkonsistens og datakvalitet.

Etikettkonsistens er viktig for å forbedre modellens ytelse. Uten det kan ikke modeller produsere en beslutningsgrense som skiller hvert punkt som tilhører forskjellige klasser. En måte å sikre konsistens på er å bruke merknadskonsolidering i Ground Truth, som lar deg vise et gitt eksempel til flere etiketter og bruke den aggregerte etiketten som er oppgitt som grunnsannheten for det eksemplet. Divergens i etiketten måles av konfidenspoengsummen generert av Ground Truth. Når det er divergens i etikettene, bør du se om det er tvetydighet i merkeinstruksjonene som er gitt til etikettene dine, som kan fjernes. Denne tilnærmingen reduserer effektene av skjevheter fra individuelle etiketter, noe som er sentralt for å gjøre etiketter mer konsistente.

En annen måte å forbedre modellytelsen ved å fokusere på data involverer å utvikle metoder for å analysere feil i etiketter når de kommer opp for å identifisere den viktigste undergruppen av data å forbedre. du kan gjøre dette for treningsdatasettet ditt med en kombinasjon av manuell innsats som involverer dykking i merkede eksempler og bruk av Amazon CloudWatch logger og beregninger generert av Ground Truth-merkejobber. Det er også viktig å se på feil modellene gjør på slutningstidspunktet for å drive neste iterasjon av merking for datasettet vårt. I tillegg til disse mekanismene, Amazon SageMaker Clarify lar dataforskere og ML-ingeniører kjøre algoritmer som KernelSHAP for å la dem tolke spådommer laget av modellen deres. Som nevnt kan en dypere forklaring av modellens spådommer relateres tilbake til den innledende merkingsprosessen for å forbedre den.

Til slutt kan du vurdere å kaste ut støyende eller altfor overflødige eksempler. Ved å gjøre dette kan du redusere treningstiden ved å fjerne eksempler som ikke bidrar til å forbedre modellens ytelse. Imidlertid er det vanskelig og tidkrevende å identifisere et nyttig undersett av et gitt datasett manuelt. Ved å bruke teknikkene for valg av dataundersett beskrevet i dette innlegget kan du automatisere denne prosessen langs etablerte rammer.

Bruk saken

Som nevnt fokuserer datasentrisk AI på å forbedre modellinndata i stedet for arkitekturen til selve modellen. Når du har brukt disse prinsippene under datamerking eller funksjonsutvikling, kan du fortsette å fokusere på modellinndata ved å bruke dataundersettvalg på treningstidspunktet.

For dette innlegget bruker vi generaliseringsbasert dataundersettvalg for effektiv og robust læring (GLISTER), som er en av mange teknikker for valg av dataundersett implementert i CORDS-depotet, til treningsalgoritmen til en ResNet-18 modell for å minimere tiden det tar å trene en modell til å klassifisere CIFAR-10 Bilder. Følgende er noen eksempelbilder med deres respektive etiketter hentet fra CIFAR-10-datasettet.

CIFAR-datasett

ResNet-18 brukes ofte til klassifiseringsoppgaver. Det er et 18-lags dypt konvolusjonelt nevralt nettverk. CIFAR-10-datasettet brukes ofte til å evaluere gyldigheten av ulike teknikker og tilnærminger i ML. Den er sammensatt av 60,000 32 32×10 fargebilder merket på tvers av XNUMX klasser.

I de følgende avsnittene viser vi hvordan GLISTER til en viss grad kan hjelpe deg med å svare på følgende spørsmål:

Hvor mange prosent av et gitt datasett kan vi bruke og fortsatt oppnå god modellytelse under trening?

Hvis du bruker GLISTER på treningsalgoritmen din, introduseres brøk som en hyperparameter i treningsalgoritmen. Dette representerer prosentandelen av det gitte datasettet du ønsker å bruke. Som med alle hyperparametere, kreves justering for å finne verdien som gir det beste resultatet for modellen og dataene dine. Vi går ikke i dybden på hyperparameterinnstilling i dette innlegget. For mer informasjon, se Optimaliser hyperparametre med Amazon SageMaker Automatic Model Tuning.

Vi kjører flere tester med SageMaker Experiments for å måle effekten av tilnærmingen. Resultatene vil variere avhengig av det opprinnelige datasettet, så det er viktig å teste tilnærmingen mot dataene våre ved forskjellige undersettstørrelser.

Selv om vi diskuterer bruk av GLISTER på bilder, kan du også bruke det på treningsalgoritmer som arbeider med strukturerte eller tabellformede data.

Valg av dataundersett

Hensikten med valg av dataundersett er å akselerere opplæringsprosessen samtidig som effektene på nøyaktigheten minimeres og modellens robusthet økes. Mer spesifikt velger GLISTER-ONLINE et delsett etter hvert som modellen lærer ved å forsøke å maksimere loggsannsynligheten for det treningsdataundersettet på valideringssettet du spesifiserer. Optimalisering av utvalg av dataundersett på denne måten reduserer støyen og klasseubalansen som ofte finnes i datasett i den virkelige verden, og lar undergruppens valgstrategi tilpasse seg etter hvert som modellen lærer.

Den opprinnelige GLISTER papir beskriver en avveining mellom hastighet og nøyaktighet ved forskjellige dataundersettstørrelser som fulgt ved å bruke en LeNet modell:

Delsettstørrelse speedup Nøyaktighet
10% 6x -3%
30% 2.5x -1.20%
50% 1.5x -0.20%

For å trene modellen kjører vi en SageMaker treningsjobb ved hjelp av et tilpasset opplæringsskript. Vi har også allerede lastet opp vårt bildedatasett til Amazon enkel lagringstjeneste (Amazon S3). Som med enhver SageMaker treningsjobb, må vi definere en Estimator gjenstand. PyTorch-estimatoren fra sagemaker.pytorch pakken lar oss kjøre vårt eget treningsskript i en administrert PyTorch-beholder. De inputs variabel sendt til estimatorens .fit funksjonen inneholder en ordbok over trenings- og valideringsdatasettets S3-plassering.

De train.py skript kjøres når en treningsjobb startes. I dette skriptet importerer vi ResNet-18-modellen fra CORDS-biblioteket og gir den antallet klasser i datasettet vårt som følger:

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

Deretter bruker vi gen_dataset funksjon fra CORDS for å lage opplærings-, validerings- og testdatasett:

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 datasett lager vi en tilsvarende PyTorch-datalaster:

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 slutt bruker vi disse datalasterne til å lage en GLISTERDataLoader fra CORDS-biblioteket. Den bruker en implementering av GLISTER-ONLINE-seleksjonsstrategien, som bruker delsettvalg når vi oppdaterer modellen under trening, som diskutert tidligere i dette innlegget.

For å lage objektet sender vi seleksjonsstrategiens spesifikke 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)

De GLISTERDataLoader kan nå brukes som en vanlig datalaster til en treningssløyfe. Den vil velge dataundersett for neste treningsbatch etter hvert som modellen lærer basert på den modellens tap. Som vist i den foregående tabellen, kan vi ved å legge til en strategi for valg av dataundersett oss redusere treningstiden betydelig, selv med det ekstra trinnet med valg av dataundersett, med liten avveining i nøyaktighet.

Dataforskere og ML-ingeniører trenger ofte å evaluere gyldigheten av en tilnærming ved å sammenligne den med en grunnlinje. Vi viser hvordan du gjør dette i neste avsnitt.

Eksperimentsporing

Du kan bruke SageMaker-eksperimenter til å måle gyldigheten til tilnærmingen til valg av dataundersett. For mer informasjon, se Neste generasjon Amazon SageMaker-eksperimenter – Organiser, spor og sammenlign maskinlæringstreningene dine i stor skala.

I vårt tilfelle utfører vi fire eksperimenter: en grunnlinje uten å bruke dataundersettvalg, og tre andre med forskjellig fraction parametere, som representerer størrelsen på delsettet i forhold til det totale datasettet. Naturligvis bruker en mindre fraction parameter bør resultere i reduserte treningstider, men lavere modellnøyaktighet også.

For dette innlegget er hvert treningsløp representert som en Run i SageMaker Experiments. Kjøringene knyttet til eksperimentet vårt er alle gruppert under ett Experiment gjenstand. Kjøringer kan knyttes til et vanlig eksperiment når du oppretter 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 av det tilpassede treningsskriptet ditt kan du samle inn løpsmålinger ved å bruke 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)

Deretter, ved å bruke run-objektet som ble returnert av forrige operasjon, kan du samle datapunkter per epoke ved å ringe run.log_metric(name, value, step) og oppgi metrisk navn, verdi og gjeldende epokenummer.

For å måle gyldigheten til tilnærmingen vår, samler vi inn beregninger som tilsvarer treningstap, treningsnøyaktighet, valideringstap, valideringsnøyaktighet og tid til å fullføre en epoke. Så, etter å ha kjørt treningsjobbene, kan vi gjennomgå resultatene av eksperimentet vårt in Amazon SageMaker Studio eller gjennom SageMaker Experiments SDK.

For å se valideringsnøyaktighetene i Studio, velg Analyser på eksperimentet Kjører side.

Eksperimentliste

Legg til et diagram, angi diagramegenskapene, og velg Opprett. Som vist i det følgende skjermbildet, vil du se et plott av valideringsnøyaktigheter ved hver epoke for alle kjøringer.

Eksperimentdiagram

SDK-en lar deg også hente eksperimentrelatert informasjon 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 treningsjobbene sorteres. For eksempel kan vi legge til "metrics.validation:accuracy.max" som verdien av sort_by parameter sendt til ExperimentAnalytics for å returnere resultatet sortert etter valideringsnøyaktighet.

Som forventet viser våre eksperimenter at bruk av GLISTER og dataundersettvalg på treningsalgoritmen reduserer treningstiden. Når du kjører vår baseline-treningsalgoritme, svinger mediantiden for å fullføre en enkelt epoke rundt 27 sekunder. Hvis du derimot bruker GLISTER for å velge et undersett tilsvarende 50 %, 30 % og 10 % av det totale datasettet, resulterer det i tider for å fullføre en epoke på henholdsvis 13, 8.5 og 2.75 sekunder på ml.p3.2xlarge forekomster .

Vi observerer også en relativt minimal innvirkning på valideringsnøyaktigheten, spesielt når du bruker dataundersett på 50 %. Etter trening i 100 epoker, gir grunnlinjen en valideringsnøyaktighet på 92.72 %. I motsetning til dette vil bruk av GLISTER for å velge et undersett tilsvarende 50 %, 30 % og 10 % av det totale datasettet resultere i valideringsnøyaktigheter på henholdsvis 91.42 %, 89.76 % og 82.82 %.

konklusjonen

SageMaker Ground Truth og SageMaker Experiments muliggjør en datasentrisk tilnærming til maskinlæring ved å la dataforskere og ML-ingeniører produsere mer konsistente datasett og spore virkningen av mer avanserte teknikker når de implementerer dem i modellbyggingsfasen. Ved å implementere en datasentrisk tilnærming til ML kan du redusere mengden data som kreves av modellen din og forbedre robustheten.

Prøv det, og la oss få vite hva du synes i kommentarfeltet.


Om forfatterne

Bruk en datasentrisk tilnærming for å minimere mengden data som kreves for å trene Amazon SageMaker-modeller PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Nicolas Bernier er en løsningsarkitekt, en del av det kanadiske offentlige sektorteamet ved AWS. Han gjennomfører for tiden en mastergrad med et forskningsområde i Deep Learning og har fem AWS-sertifiseringer, inkludert ML Specialty Certification. Nicolas er lidenskapelig opptatt av å hjelpe kunder med å utdype kunnskapen om AWS ved å samarbeide med dem for å oversette deres forretningsutfordringer til tekniske løsninger.

Bruk en datasentrisk tilnærming for å minimere mengden data som kreves for å trene Amazon SageMaker-modeller PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Givanildo Alves er en Prototyping Architect med Prototyping and Cloud Engineering-teamet hos Amazon Web Services, og hjelper kunder med å innovere og akselerere ved å vise kunsten mulig på AWS, etter å ha implementert flere prototyper rundt kunstig intelligens. Han har en lang karriere innen programvareteknikk og har tidligere jobbet som programvareutviklingsingeniør hos Amazon.com.br.

Tidstempel:

Mer fra AWS maskinlæring