Använd ett datacentrerat tillvägagångssätt för att minimera mängden data som krävs för att träna Amazon SageMaker-modeller

Använd ett datacentrerat tillvägagångssätt för att minimera mängden data som krävs för att träna Amazon SageMaker-modeller

I takt med att maskininlärningsmodeller (ML) har förbättrats, har datavetare, ML-ingenjörer och forskare flyttat mer av sin uppmärksamhet till att definiera och förbättra datakvaliteten. Detta har lett till framväxten av en datacentrerad strategi för ML och olika tekniker för att förbättra modellens prestanda genom att fokusera på datakrav. Genom att tillämpa dessa tekniker kan ML-utövare minska mängden data som krävs för att träna en ML-modell.

Som en del av detta tillvägagångssätt har avancerade tekniker för urval av dataundergrupper dykt upp för att påskynda träningen genom att minska mängden indata. Denna process bygger på att automatiskt välja ett givet antal punkter som approximerar fördelningen av en större datauppsättning och använda den för träning. Att tillämpa denna typ av teknik minskar den tid som krävs för att träna en ML-modell.

I det här inlägget beskriver vi att tillämpa datacentrerade AI-principer med Amazon SageMaker Ground Sannhet, hur man implementerar tekniker för urval av dataundergrupper med hjälp av SLADDER förvaret på Amazon SageMaker att minska mängden data som krävs för att träna en initial modell, och hur man kör experiment med detta tillvägagångssätt med Amazon SageMaker-experiment.

En datacentrerad metod för maskininlärning

Innan du dyker in i mer avancerade datacentrerade tekniker som val av dataundermängder kan du förbättra dina datauppsättningar på flera sätt genom att tillämpa en uppsättning underliggande principer på din datamärkningsprocess. För detta stöder Ground Truth olika mekanismer för att förbättra etikettkonsistens och datakvalitet.

Etikettkonsistens är viktigt för att förbättra modellens prestanda. Utan det kan modeller inte producera en beslutsgräns som skiljer varje punkt som tillhör olika klasser. Ett sätt att säkerställa konsekvens är att använda anteckningskonsolidering i Ground Truth, som låter dig visa ett givet exempel för flera etiketter och använda den aggregerade etiketten som tillhandahålls som grundsanningen för det exemplet. Divergens i etiketten mäts av konfidenspoängen som genereras av Ground Truth. När det finns skillnader i etiketter bör du se efter om det finns oklarheter i märkningsinstruktionerna till dina etiketter som kan tas bort. Detta tillvägagångssätt mildrar effekterna av partiskhet hos enskilda etiketter, vilket är centralt för att göra etiketter mer konsekventa.

Ett annat sätt att förbättra modellens prestanda genom att fokusera på data är att utveckla metoder för att analysera fel i etiketter när de kommer upp för att identifiera den viktigaste delmängden av data att förbättra. du kan göra detta för din träningsdatauppsättning med en kombination av manuella insatser som involverar att dyka in i märkta exempel och använda amazoncloudwatch loggar och mätvärden som genereras av Ground Truth-märkningsjobb. Det är också viktigt att titta på fel som modellen gör vid slutledningstidpunkten för att driva nästa iteration av märkning för vår datauppsättning. Förutom dessa mekanismer, Amazon SageMaker Clarify låter datavetare och ML-ingenjörer köra algoritmer som KernelSHAP för att tillåta dem att tolka förutsägelser gjorda av deras modell. Som nämnts kan en djupare förklaring av modellens förutsägelser relateras tillbaka till den initiala märkningsprocessen för att förbättra den.

Slutligen kan du överväga att slänga ut bullriga eller alltför överflödiga exempel. Genom att göra detta kan du minska träningstiden genom att ta bort exempel som inte bidrar till att förbättra modellens prestanda. Att identifiera en användbar delmängd av en given datamängd manuellt är dock svårt och tidskrävande. Genom att tillämpa teknikerna för urval av dataundergrupper som beskrivs i det här inlägget kan du automatisera denna process längs etablerade ramverk.

Användningsfall

Som nämnts fokuserar datacentrerad AI på att förbättra modellinmatningen snarare än själva modellens arkitektur. När du har tillämpat dessa principer under datamärkning eller funktionsutveckling, kan du fortsätta att fokusera på modellinmatning genom att använda val av dataundergrupp vid träningstillfället.

För det här inlägget tillämpar vi generaliseringsbaserat urval av dataundergrupper för effektivt och robust lärande (GLISTER), som är en av många tekniker för val av dataundermängder som implementeras i CORDS-förrådet, till träningsalgoritmen för en ResNet-18 modell för att minimera tiden det tar att träna en modell att klassificera CIFAR-10 bilder. Följande är några exempelbilder med sina respektive etiketter hämtade från CIFAR-10-datauppsättningen.

CIFAR Dataset

ResNet-18 används ofta för klassificeringsuppgifter. Det är ett 18-lagers djupt konvolutionellt neuralt nätverk. Datauppsättningen CIFAR-10 används ofta för att utvärdera giltigheten av olika tekniker och tillvägagångssätt i ML. Den består av 60,000 32 32×10 färgbilder märkta i XNUMX klasser.

I följande avsnitt visar vi hur GLISTER till viss del kan hjälpa dig att svara på följande fråga:

Hur stor andel av en given datamängd kan vi använda och ändå uppnå bra modellprestanda under träning?

Genom att applicera GLISTER på din träningsalgoritm introduceras bråkdel som en hyperparameter i din träningsalgoritm. Detta representerar procentandelen av den givna datamängden du vill använda. Som med vilken hyperparameter som helst, krävs justering för att hitta det värde som ger det bästa resultatet för din modell och data. Vi går inte på djupet in på hyperparameterjustering i det här inlägget. För mer information, se Optimera hyperparametrar med Amazon SageMaker Automatic Model Tuning.

Vi kör flera tester med SageMaker Experiments för att mäta effekten av tillvägagångssättet. Resultaten kommer att variera beroende på den ursprungliga datamängden, så det är viktigt att testa tillvägagångssättet mot våra data i olika delmängder.

Även om vi diskuterar att använda GLISTER på bilder, kan du också tillämpa det på träningsalgoritmer som arbetar med strukturerad eller tabellformig data.

Val av dataundergrupp

Syftet med val av dataundergrupp är att påskynda träningsprocessen samtidigt som effekterna på noggrannheten minimeras och modellens robusthet ökar. Mer specifikt väljer GLISTER-ONLINE en delmängd allteftersom modellen lär sig genom att försöka maximera loggsannolikheten för den delmängden träningsdata på den valideringsuppsättning du anger. Genom att optimera valet av dataundermängder på detta sätt mildras mot bruset och klassobalansen som ofta finns i verkliga datamängder och gör att strategin för urval av undermängder kan anpassas allt eftersom modellen lär sig.

Den initiala GLISTER papper beskriver en avvägning mellan hastighet och noggrannhet vid olika storlekar av dataundergrupper enligt följande med hjälp av en LeNet modell:

Delmängdsstorlek Speedup Noggrannhet
10% 6x -3%
30% 2.5x -1.20%
50% 1.5x -0.20%

För att träna modellen kör vi en SageMaker utbildningsjobb med hjälp av ett anpassat träningsskript. Vi har också redan laddat upp vår bilddatauppsättning till Amazon enkel lagringstjänst (Amazon S3). Som med alla SageMaker utbildningsjobb måste vi definiera en Estimator objekt. PyTorch-skattaren från sagemaker.pytorch paketet låter oss köra vårt eget träningsskript i en hanterad PyTorch-behållare. De inputs variabel som överförs till skattarens .fit funktionen innehåller en ordbok över tränings- och valideringsdatasetets S3-plats.

Smakämnen train.py skriptet körs när ett träningsjobb startas. I det här skriptet importerar vi ResNet-18-modellen från CORDS-biblioteket och skickar antalet klasser i vår datauppsättning till den enligt följande:

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

Sedan använder vi gen_dataset funktion från CORDS för att skapa tränings-, validerings- och testdatauppsättningar:

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

Från varje datamängd skapar vi en motsvarande PyTorch-dataladdare:

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)

Slutligen använder vi dessa dataladdare för att skapa en GLISTERDataLoader från CORDS-biblioteket. Den använder en implementering av urvalsstrategin GLISTER-ONLINE, som tillämpar urval av delmängder när vi uppdaterar modellen under utbildningen, som diskuterats tidigare i det här inlägget.

För att skapa objektet skickar vi de specifika argumenten för urvalsstrategin som ett DotMap objekt tillsammans med train_loader, validation_loaderoch 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)

Smakämnen GLISTERDataLoader kan nu appliceras som en vanlig dataladdare till en träningsslinga. Den kommer att välja datamängder för nästa träningsbatch allt eftersom modellen lär sig baserat på den modellens förlust. Som visats i föregående tabell, kan vi genom att lägga till en strategi för val av dataundermängder minska träningstiden avsevärt, även med det extra steget med val av dataundermängder, med liten avvägning i noggrannhet.

Datavetare och ML-ingenjörer behöver ofta utvärdera giltigheten av ett tillvägagångssätt genom att jämföra det med någon baslinje. Vi visar hur du gör detta i nästa avsnitt.

Experimentspårning

Du kan använda SageMaker-experiment för att mäta giltigheten av metoden för val av datadelmängder. För mer information, se Nästa generations Amazon SageMaker-experiment – ​​Organisera, spåra och jämför dina maskininlärningsträningar i stor skala.

I vårt fall utför vi fyra experiment: en baslinje utan att tillämpa urval av dataundergrupper och tre andra med olika fraction parametrar, som representerar storleken på delmängden i förhållande till den övergripande datamängden. Naturligtvis med en mindre fraction parametern bör resultera i minskade träningstider, men också lägre modellnoggrannhet.

För det här inlägget representeras varje träningslopp som en Run i SageMaker Experiment. Körningarna relaterade till vårt experiment är alla grupperade under ett Experiment objekt. Körningar kan kopplas till ett vanligt experiment när du skapar Estimator med SDK. Se följande kod:

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 ditt anpassade träningsskript kan du samla in kördata genom att använda 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)

Sedan, med hjälp av körobjektet som returnerades av föregående operation, kan du samla in datapunkter per epok genom att anropa run.log_metric(name, value, step) och tillhandahållande av metriskt namn, värde och aktuellt epoknummer.

För att mäta giltigheten av vårt tillvägagångssätt samlar vi in ​​mätvärden som motsvarar träningsförlust, träningsnoggrannhet, valideringsförlust, valideringsnoggrannhet och tid för att slutföra en epok. Sedan kan vi, efter att ha kört utbildningsjobben granska resultaten av vårt experiment in Amazon SageMaker Studio eller genom SageMaker Experiments SDK.

För att se valideringsnoggrannheterna i Studio, välj Analysera på experimentet Körs sida.

Experimentlista

Lägg till ett diagram, ställ in diagramegenskaperna och välj Skapa. Som visas i följande skärmdump kommer du att se en plot av valideringsnoggrannhet vid varje epok för alla körningar.

Experimentdiagram

SDK:n låter dig också hämta experimentrelaterad information som en Pandas dataram:

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

Valfritt kan utbildningsjobben sorteras. Till exempel kan vi lägga till "metrics.validation:accuracy.max" som värdet på sort_by parameter skickas till ExperimentAnalytics för att returnera resultatet sorterat efter valideringsnoggrannhet.

Som förväntat visar våra experiment att användning av GLISTER och val av dataundergrupper på träningsalgoritmen minskar träningstiden. När du kör vår baslinjeträningsalgoritm svävar mediantiden för att slutföra en enda epok runt 27 sekunder. Om du däremot använder GLISTER för att välja en delmängd motsvarande 50 %, 30 % och 10 % av den totala datamängden resulterar det i tider för att slutföra en epok på cirka 13, 8.5 respektive 2.75 sekunder på ml.p3.2xlarge instanser .

Vi observerar också en jämförelsevis minimal inverkan på valideringsnoggrannheten, särskilt när man använder dataundergrupper på 50 %. Efter träning i 100 epoker ger baslinjen en valideringsnoggrannhet på 92.72 %. Om du däremot använder GLISTER för att välja en delmängd motsvarande 50 %, 30 % och 10 % av den totala datamängden resulterar det i en valideringsnoggrannhet på 91.42 %, 89.76 % respektive 82.82 %.

Slutsats

SageMaker Ground Truth och SageMaker Experiment möjliggör ett datacentrerat tillvägagångssätt för maskininlärning genom att tillåta datavetare och ML-ingenjörer att producera mer konsekventa datauppsättningar och spåra effekten av mer avancerade tekniker när de implementerar dem i modellbyggnadsfasen. Genom att implementera en datacentrerad strategi för ML kan du minska mängden data som krävs av din modell och förbättra dess robusthet.

Ge det ett försök och låt oss veta vad du tycker i kommentarerna.


Om författarna

Använd ett datacentrerat tillvägagångssätt för att minimera mängden data som krävs för att träna Amazon SageMaker-modeller PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Nicolas Bernier är en lösningsarkitekt, en del av teamet för den kanadensiska offentliga sektorn på AWS. Han genomför för närvarande en masterexamen med ett forskningsområde inom Deep Learning och innehar fem AWS-certifieringar, inklusive ML Specialty Certification. Nicolas brinner för att hjälpa kunder att fördjupa sina kunskaper om AWS genom att arbeta med dem för att översätta deras affärsutmaningar till tekniska lösningar.

Använd ett datacentrerat tillvägagångssätt för att minimera mängden data som krävs för att träna Amazon SageMaker-modeller PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Givanildo Alves är en Prototyping Architect med Prototyping and Cloud Engineering-teamet på Amazon Web Services, som hjälper kunder att förnya och accelerera genom att visa konsten att vara möjligt på AWS, efter att ha implementerat flera prototyper kring artificiell intelligens. Han har en lång karriär inom mjukvaruteknik och har tidigare arbetat som mjukvaruutvecklingsingenjör på Amazon.com.br.

Tidsstämpel:

Mer från AWS maskininlärning