paint-brush
Еве ја невронската мрежа што може да го предвиди вашиот следен онлајн пријателод страна на@andrei9735
Нова историја

Еве ја невронската мрежа што може да го предвиди вашиот следен онлајн пријател

од страна на Andrei11m2025/02/13
Read on Terminal Reader

Премногу долго; Да чита

Во оваа објава ќе продолжиме да работиме на предвидување врски со базата на податоци на Twitch. Ќе се фокусираме на обука на ML моделот заснован на Графички невронски мрежи (GNN) и оптимизирање на неговите хиперпараметри.
featured image - Еве ја невронската мрежа што може да го предвиди вашиот следен онлајн пријател
Andrei HackerNoon profile picture
0-item

Во оваа објава ќе продолжиме да работиме на предвидување врски со базата на податоци на Twitch. Ќе се фокусираме на обука на ML моделот заснован на Графички невронски мрежи (GNN) и оптимизирање на неговите хиперпараметри. Досега веќе ги имаме обработени и подготвени податоците од графиконот за обука на модели. Претходните чекори се опишани во Дел 3 - Обработка на податоци, Дел 2 - Извоз на податоци од DB и Дел 1 - Вчитување податоци во DB.


Прочитајте го првиот дел овде ; дел 2 овде ; и дел 3 овде.

ИЗБОР НА ТИП НА НЕВРАЛНА МРЕЖА ГРАФИК: GCN и R-GCN

Ќе користиме Graph Convolutional Neural Networks исто како што направивме во објавата за предвидување локални врски , и иако Neptune ML ја користи истата рамка DGL.ai , основниот модел е малку поинаков. Нептун ML поддржува и графикони на знаење (хомогени графикони со тип на еден јазол и тип на еден раб) и хетерогени графици кои имаат повеќе типови на јазли и рабови. Податокот со кој работиме има тип на еден јазол (корисник) и тип на еден раб (пријателство). Иако во овој случај би функционирале и графиконска конволуциона мрежа (GCN) или модел на графички примерок и агрегација (GraphSAGE), Neptune ML автоматски избира модел на конволуциона мрежа за релационен график (R-GCN) за збирки на податоци со својства на јазол што може да варираат од јазол до јазол, како што е објаснето овде . Општо земено, R-GCN бара повеќе пресметки за обука поради зголемениот број на параметри потребни за справување со повеќе типови јазли и рабови.

МОДЕЛНИ ХИПЕРПАРАМЕТРИ ЗА ОБУКА

За време на фазата на обработка на податоците (што ја опишавме во претходниот пост TODO LINK), Neptune ML создаде датотека со име model-hpo-configuration.json . Го содржи типот на моделот (R-GCN), типот на задачата (предвидување врска), метриката и фреквенцијата за евалуација и 4 списоци на параметри: едната со фиксни параметри што не се менуваат за време на обуката и 3 списоци на параметри што треба да се оптимизираат, со опсези и стандардни вредности. Параметрите се групирани по важност. Дали параметрите од секоја од групите се подесени се одлучува врз основа на бројот на достапни задачи за подесување: параметрите од 1-виот степен се секогаш подесени, параметрите од второто ниво се подесуваат ако бројот на достапни работни места е > 10, а параметрите од 3-то ниво се подесуваат само ако е > 50. Нашиот model-hpo-configuration.json датотека изгледа како оваа.

 { "models": [ { "model": "rgcn", "task_type": "link_predict", "eval_metric": { "metric": "mrr", "global_ranking_metrics": true, "include_retrieval_metrics": false }, "eval_frequency": { "type": "evaluate_every_pct", "value": 0.05 }, "1-tier-param": [ { "param": "num-hidden", "range": [16, 128], "type": "int", "inc_strategy": "power2" }, { "param": "num-epochs", "range": [3, 100], "inc_strategy": "linear", "inc_val": 1, "type": "int", "edge_strategy": "perM" }, { "param": "lr", "range": [0.001, 0.01], "type": "float", "inc_strategy": "log" }, { "param": "num-negs", "range": [4, 32], "type": "int", "inc_strategy": "power2" } ], "2-tier-param": [ { "param": "dropout", "range": [0.0, 0.5], "inc_strategy": "linear", "type": "float", "default": 0.3 }, { "param": "layer-norm", "type": "bool", "default": true }, { "param": "regularization-coef", "range": [0.0001, 0.01], "type": "float", "inc_strategy": "log", "default": 0.001 } ], "3-tier-param": [ { "param": "batch-size", "range": [128, 512], "inc_strategy": "power2", "type": "int", "default": 256 }, { "param": "sparse-lr", "range": [0.001, 0.01], "inc_strategy": "log", "type": "float", "default": 0.001 }, { "param": "fanout", "type": "int", "options": [[10, 30], [15, 30], [15, 30]], "default": [10, 15, 15] }, { "param": "num-layer", "range": [1, 3], "inc_strategy": "linear", "inc_val": 1, "type": "int", "default": 2 }, { "param": "num-bases", "range": [0, 8], "inc_strategy": "linear", "inc_val": 2, "type": "int", "default": 0 } ], "fixed-param": [ { "param": "neg-share", "type": "bool", "default": true }, { "param": "use-self-loop", "type": "bool", "default": true }, { "param": "low-mem", "type": "bool", "default": true }, { "param": "enable-early-stop", "type": "bool", "default": true }, { "param": "window-for-early-stop", "type": "bool", "default": 3 }, { "param": "concat-node-embed", "type": "bool", "default": true }, { "param": "per-feat-name-embed", "type": "bool", "default": true }, { "param": "use-edge-features", "type": "bool", "default": false }, { "param": "edge-num-hidden", "type": "int", "default": 16 }, { "param": "weighted-link-prediction", "type": "bool", "default": false }, { "param": "link-prediction-remove-targets", "type": "bool", "default": false }, { "param": "l2norm", "type": "float", "default": 0 } ] } ] }

Параметрите на моделот и типот на задачата беа поставени за време на фазите за извоз и обработка на податоците и не треба да се менуваат овде.

Метриката за оценување исто така беше автоматски избрана. Просечниот реципрочен ранг (MRR) го мери просечниот ранг на точната врска во предвидените резултати, со повисок MRR што укажува на подобри перформанси .

Фреквенцијата на евалуација е поставена на 5% од напредокот на обуката. На пример, ако имаме 100 епохи, оценувањето ќе се врши на секои 5 епохи.

Ајде да разгледаме некои од хиперпараметрите што ќе бидат подесени:

lr : Стапката на учење е еден од највлијателните хиперпараметри за кој било модел на обука. Пониската стапка на учење може да доведе до побавна конвергенција, но потенцијално подобри перформанси, додека повисоката стапка на учење може да го забрза тренингот, но може да пропушти оптимални решенија.

num-hidden : параметарот num-hidden се однесува на бројот на скриени единици (неврони) во секој слој на невронската мрежа R-GCN, особено во скриените слоеви. Поголемиот број скриени единици го зголемува капацитетот на моделот да научи сложени обрасци и врски од податоците, што може да ја подобри точноста на предвидувањето, но може да доведе и до префитување ако моделот стане премногу сложен за сетот на податоци.

num-epochs : Ова дефинира колку долго моделот е обучен. Повеќе епохи му дозволуваат на моделот да научи повеќе од податоците, но може да го зголемат ризикот од преоптоварување.

Batch-size : Големината на серијата влијае на користењето на меморијата и стабилноста на конвергенцијата. Помала големина на серија може да го направи моделот почувствителен на податоците, додека поголема големина на серија може да ја подобри брзината на обуката.

num-negs : Негативното земање примероци влијае на тоа како моделот учи да разликува вистински врски од лажни. Поголем број на негативни примероци може да го подобри квалитетот на предвидувањата, но ги зголемува пресметковните трошоци.

Откажување : Напуштањето помага да се спречи преоптоварување со случајно прескокнување на некои неврони за време на тренингот. Повисоката стапка на напуштање може да го намали преоптоварувањето, но може да го отежне учењето за моделот.

регулација-коеф : Регуларизација која има за цел да спречи преоптоварување на моделот.


Можете да ги промените стандардните вредности, опсегот и големината на чекорот за секој од овие параметри. Целосната листа на параметри може да се најде овде .

Откако ќе ги промените параметрите, само заменете ја оригиналната датотека model-hpo-configuration.json во S3.

IAM УЛОГИ ЗА ОБУКА ЗА МОДЕЛИ И HPO

Исто како и обработката на податоците опишана во Дел 3 од ова упатство, обуката за модели бара 2 улоги на IAM: улога на Нептун која обезбедува пристап на Нептун до SageMaker и S3 и улога на извршување на SageMaker што ја користи SageMaker додека ја извршува задачата за обработка на податоци и му овозможува пристап до S3. Овие улоги мора да имаат политики за доверба што им дозволуваат на услугите на Neptune и SageMaker да ги преземат:

 { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "sagemaker.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

По креирањето на улогите и ажурирањето на нивните политики за доверба, ги додаваме во кластерот Нептун (Нептун -> Бази на податоци -> YOUR_NEPTUNE_CLUSTER_ID -> Поврзување и безбедност -> Улоги на IAM -> Додај улога).

ЗАПОЧНУВАЊЕ НА ОБУКА ЗА МОДЕЛИ И HPO КОРИСТЕЊЕ НА NEPTUNE ML API

Сега сме подготвени да започнеме со обука за модели. За да го направиме тоа, треба да испратиме барање до HTTP API на кластерот Нептун од внатрешноста на VPC каде што се наоѓа кластерот. Ќе користиме curl на пример EC2:

 curl -XPOST https://(YOUR_NEPTUNE_ENDPOINT):8182/ml/modeltraining \ -H 'Content-Type: application/json' \ -d '{ "dataProcessingJobId" : "ID_OF_YOUR_DATAPROCESSING_JOB", "trainModelS3Location" : "s3://OUTPUT_BUCKET/model-artifacts/...", "neptuneIamRoleArn": "arn:aws:iam::123456789012:role/NeptuneMLModelTrainingNeptuneRole", "sagemakerIamRoleArn": "arn:aws:iam::123456789012:role/NeptuneMLModelTrainingSagemakerRole" }'

Потребни се само овие параметри:

  • dataProcessingJobId - ID на работа ќе се користи за да се добие локацијата на обработените податоци во S3)
  • trainModelS3Location - излезна локација за артефактите (тежини на моделот)
  • Улоги на Neptune и SageMaker (овие улоги мора да се додадат во кластерот Neptune DB)

Исто така, постои и параметарот maxHPONumberOfTrainingJobs кој го поставува бројот на задачи за обука што треба да се извршуваат со различни групи хиперпараметри. Стандардно, тоа е 2, но AWS препорачува да се извршат најмалку 10 работни места за да се добие точен модел.

Има и многу опционални параметри: на пример, можеме рачно да го избереме типот на пример EC2 што ќе се користи за обука на модели со trainingInstanceType и да ја поставиме големината на неговиот волумен на складирање со trainingInstanceVolumeSizeInGB . Целосната листа на параметри може да се најде овде .

Кластерот одговара со JSON што го содржи ID на работата за обработка на податоци што штотуку ја создадовме:

 {"id":"d584f5bc-d90e-4957-be01-523e07a7562e"}

Можеме да го користиме за да го добиеме статусот на задачата за обука на моделот со оваа команда (користете го истиот neptuneIamRoleArn како и во претходното барање):

 curl https://YOUR_NEPTUNE_CLUSTER_ENDPOINT:8182/ml/modeltraining/YOUR_JOB_ID?neptuneIamRoleArn='arn:aws:iam::123456789012:role/NeptuneMLModelTrainingNeptuneRole'

Откако ќе одговори со вакво нешто,

 { "processingJob": { "name": "PROCESSING_JOB_NAME", "arn": "arn:aws:sagemaker:us-east-1:123456789012:processing-job/YOUR_PROCESSING_JOB_NAME", "status": "Completed", "outputLocation": "s3://OUTPUT_BUCKET/model-artifacts/PROCESSING_JOB_NAME/autotrainer-output" }, "hpoJob": { "name": "HPO_JOB_NAME", "arn": "arn:aws:sagemaker:us-east-1:123456789012:hyper-parameter-tuning-job/HPO_JOB_NAME", "status": "Completed" }, "mlModels": [ { "name": "MODEL_NAME-cpu", "arn": "arn:aws:sagemaker:us-east-1:123456789012:model/MODEL_NAME-cpu" } ], "id": "d584f5bc-d90e-4957-be01-523e07a7562e", "status": "Completed" }

можеме да ги провериме дневниците за обука и артефактите во дестинацијата S3 корпа.

ПРЕГЛЕД НА РЕЗУЛТАТИ ОД ОБУКАТА НА МОДЕЛИ

Обуката за модели е завршена, па ајде да ги провериме резултатите во конзолата AWS: SageMaker -> Training -> Training Jobs.

За едноставност, не го сменивме бројот на работни места во HPO кога започнавме со обука за модели и се користеше стандардната вредност 2. 2-те работни места се работеа паралелно. Типот на примерот беше избран автоматски: ml.g4dn.2xlarge .


Првата работа (онаа со '001' на своето име) заврши за 15 минути, а втората ('002') беше автоматски стопирана, бидејќи SageMaker поддржува рано запирање ако метриката за обука не се подобри некое време:


Предвремено запирање (втора работа)


Ајде да ги споредиме хиперпараметрите што се користеа во овие работни места:

Само 3 параметри имаат различни вредности: num-hidden, num-negs и lr . Вториот модел (обучен со Job 2) имаше поголема стапка на учење додека имаше помал капацитет да фати сложени обрасци (бидејќи имаше помалку неврони) и беше обучен на помалку негативни примероци. Тоа доведе до значително помала прецизност како што можеме да видиме од просечниот ранг за валидација (115 наспроти 23) и HITS@K :


1 модел


2-ри модел


Статистика на вториот модел


Средниот ранг (MR) е просечната рангирана позиција на точната врска меѓу предвидувањата. Пониските вредности на MR се подобри бидејќи тие укажуваат дека точната врска е, во просек, рангирана поблиску до врвот .

Метриката HITS@K го мери соодносот на пати точната врска се појавува во најгорните K предвидени резултати.

МОДЕЛНИ АРТЕФАКТИ

Кога ќе се завршат задачите за обука, се создаваат артефакти на модели во излезната корпа S3, заедно со датотеките што содржат статистика за обука и метрика:

Список на датотеки и папки генерирани во S3 од задачата за обука.


Список на датотеки во папката 001.


Метриката и параметрите во овие JSON-датотеки се оние што ги споменавме претходно. Само директориумот 001 ја содржи поддиректориумот „излезен“ со датотеката model.tar.gz, бидејќи тоа е единствената работа HPO што е завршена. Артефактите за предвидување врски исто така ги содржат податоците од графиконот DGL бидејќи се потребни за да се направат вистински предвидувања, како што е објаснето овде .


Овие датотеки ќе се користат за да се создаде крајна точка за заклучоци и да се генерираат вистински предвидувања за врски. За тоа ќе се дискутира во следниот и последен пост од оваа серија.