paint-brush
Aquí tes a rede neuronal que pode predecir o teu próximo amigo en liñapor@andrei9735
Nova historia

Aquí tes a rede neuronal que pode predecir o teu próximo amigo en liña

por Andrei11m2025/02/13
Read on Terminal Reader

Demasiado longo; Ler

Nesta publicación seguiremos traballando na predición de ligazóns co conxunto de datos de Twitch. Centrarémonos en adestrar o modelo ML baseado en redes neuronais de gráficos (GNN) e optimizar os seus hiperparámetros.
featured image - Aquí tes a rede neuronal que pode predecir o teu próximo amigo en liña
Andrei HackerNoon profile picture
0-item

Nesta publicación seguiremos traballando na predición de ligazóns co conxunto de datos de Twitch. Centrarémonos en adestrar o modelo ML baseado en redes neuronais de gráficos (GNN) e optimizar os seus hiperparámetros. A estas alturas xa temos os datos do gráfico procesados e preparados para o adestramento do modelo. Os pasos anteriores descríbense na Parte 3 - Procesamento de datos, Parte 2 - Exportación de datos da base de datos e Parte 1 - Carga de datos na base de datos.


Le a parte 1 aquí ; parte 2 aquí ; e a parte 3 aquí.

SELECCIÓN DO TIPO DE REDE NEURAL GRÁFICA: GCN e R-GCN

Usaremos as redes neuronais convolucionais de Graph do mesmo xeito que fixemos na publicación de predición de ligazóns locais , e aínda que Neptune ML usa o mesmo marco DGL.ai , o modelo subxacente é un pouco diferente. Neptune ML admite tanto gráficos de coñecemento (gráficos homoxéneos cun único tipo de nodo e un único tipo de bordo) como gráficos heteroxéneos que teñen varios tipos de nodos e bordos. O conxunto de datos co que estamos a traballar ten un único tipo de nodo (usuario) e un único tipo de bordo (amizade). Aínda que un modelo de Rede convolucional de gráficos (GCN) ou un modelo de mostra e agregación de gráficos (GraphSAGE) tamén funcionaría neste caso, Neptune ML escolle automaticamente un modelo de Rede convolucional de gráficos relacionais (R-GCN) para conxuntos de datos con propiedades de nodos que poden variar dun nodo a outro, como se explica aquí . En xeral, os R-GCN requiren máis computación para adestrar debido ao aumento do número de parámetros necesarios para manexar varios tipos de nodos e bordos.

MODELO DE FORMACIÓN HIPERPARÁMETROS

Durante a etapa de procesamento de datos (que describimos na publicación anterior TODO LINK), Neptune ML creou un ficheiro chamado model-hpo-configuration.json . Contén o tipo de modelo (R-GCN), o tipo de tarefa (predición de enlaces), a métrica e frecuencia de avaliación e 4 listas de parámetros: unha con parámetros fixos que non se modifican durante o adestramento e 3 listas de parámetros a optimizar, con rangos e valores predeterminados. Os parámetros agrúpanse por importancia. Se se axustan os parámetros de cada un dos grupos decídese en función do número de traballos de axuste dispoñibles: os parámetros do primeiro nivel axustanse sempre, os parámetros do segundo nivel axustanse se o número de traballos dispoñibles é > 10 e os parámetros do terceiro nivel só se axustan se é > 50. O noso ficheiro 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 } ] } ] }

Os parámetros do modelo e do tipo de tarefa establecéronse durante as fases de exportación e procesamento de datos e non se deben cambiar aquí.

Tamén se elixiu automaticamente a métrica de avaliación . A clasificación recíproca media (MRR) mide a clasificación media da ligazón correcta nos resultados previstos, e unha MRR máis alta indica un mellor rendemento .

A frecuencia de avaliación establécese nun 5% do progreso da formación. Por exemplo, se temos 100 épocas, a avaliación realizarase cada 5 épocas.

Revisemos algúns dos hiperparámetros que se axustarán:

lr : a taxa de aprendizaxe é un dos hiperparámetros máis impactantes para calquera adestramento de modelos. Unha taxa de aprendizaxe máis baixa pode levar a unha converxencia máis lenta pero un rendemento potencialmente mellor, mentres que unha taxa de aprendizaxe máis alta pode acelerar o adestramento pero pode perder as solucións óptimas.

num-hidden : o parámetro num-hidden refírese ao número de unidades ocultas (neuronas) en cada capa da rede neuronal R-GCN, concretamente nas capas ocultas. Un número maior de unidades ocultas aumenta a capacidade do modelo para aprender patróns complexos e relacións a partir dos datos, o que pode mellorar a precisión da predición, pero tamén pode levar a un sobreajuste se o modelo se fai demasiado complexo para o conxunto de datos.

num-epochs : Isto define o tempo durante o que se adestra o modelo. Máis épocas permiten que o modelo aprenda máis dos datos, pero pode aumentar o risco de sobreadaptación.

batch-size : o tamaño do lote afecta ao uso da memoria e á estabilidade da converxencia. Un tamaño de lote máis pequeno pode facer que o modelo sexa máis sensible aos datos, mentres que un tamaño de lote maior pode mellorar a velocidade de adestramento.

num-negs : a mostraxe negativa afecta a forma en que o modelo aprende a distinguir as ligazóns verdadeiras das falsas. Un maior número de mostras negativas pode mellorar a calidade das predicións pero aumenta os custos computacionais.

abandono : o abandono axuda a evitar o exceso de adaptación ao saltar aleatoriamente algunhas neuronas durante o adestramento. Unha taxa de abandono máis alta pode reducir a sobreadaptación, pero pode dificultar a aprendizaxe para o modelo.

regularization-coef : Regularización que ten como obxectivo evitar o sobreajuste do modelo.


Pode cambiar os valores predeterminados, o intervalo e o tamaño do paso para cada un destes parámetros. A lista completa de parámetros pódese atopar aquí .

Despois de cambiar os parámetros, só tes que substituír o ficheiro model-hpo-configuration.json orixinal en S3.

ROLES IAM PARA FORMACIÓN DE MODELOS E HPO

Do mesmo xeito que o procesamento de datos descrito na Parte 3 desta guía, o adestramento do modelo require 2 roles IAM: un rol de Neptune que proporciona acceso a Neptune a SageMaker e S3 e un rol de execución de Sagemaker que utiliza SageMaker mentres executa a tarefa de procesamento de datos e que lle permite acceder a S3. Estes roles deben ter políticas de confianza que permitan aos servizos de Neptune e SageMaker asumilos:

 { "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" } ] }

Despois de crear os roles e actualizar as súas políticas de confianza, engadímolos ao clúster de Neptune (Neptune -> Bases de datos -> YOUR_NEPTUNE_CLUSTER_ID -> Conectividade e seguridade -> Roles IAM -> Engadir rol).

COMEZANDO A FORMACIÓN DE MODELOS E HPO UTILIZANDO A API NEPTUNE ML

Agora estamos preparados para comezar o adestramento de modelos. Para iso, necesitamos enviar unha solicitude á API HTTP do clúster Neptune desde dentro da VPC onde se atopa o clúster. Usaremos curl nunha instancia 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" }'

Só se requiren estes parámetros:

  • dataProcessingJobId : o ID do traballo utilizarase para obter a localización dos datos procesados en S3)
  • trainModelS3Location - a localización de saída para os artefactos (pesos do modelo)
  • Roles de Neptune e SageMaker (estes roles deben engadirse ao clúster de base de datos de Neptune)

Tamén está o parámetro maxHPONumberOfTrainingJobs que establece o número de traballos de adestramento a executar con diferentes conxuntos de hiperparámetros. Por defecto, é 2, pero AWS recomenda executar polo menos 10 traballos para obter un modelo preciso.

Tamén hai moitos parámetros opcionais: por exemplo, podemos seleccionar manualmente o tipo de instancia EC2 que se utilizará para o adestramento do modelo con trainingInstanceType e establecer o tamaño do seu volume de almacenamento con trainingInstanceVolumeSizeInGB . A lista completa de parámetros pódese atopar aquí .

O clúster responde cun JSON que contén o ID do traballo de procesamento de datos que acabamos de crear:

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

Podemos usalo para obter o estado do traballo de adestramento do modelo con este comando (use o mesmo neptuneIamRoleArn que na solicitude anterior):

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

Unha vez que responde con algo así,

 { "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" }

podemos comprobar os rexistros de adestramento e os artefactos no cubo S3 de destino.

REVISIÓN DO MODELO DE RESULTADOS DA FORMACIÓN

O adestramento do modelo completouse, así que imos comprobar os resultados na consola de AWS: SageMaker -> Formación -> Traballos de formación.

Para simplificar, non cambiamos o número de traballos HPO cando comezamos o adestramento do modelo e utilizouse o valor predeterminado de 2. Os 2 traballos executáronse en paralelo. Seleccionouse automaticamente o tipo de instancia: ml.g4dn.2xlarge .


O primeiro traballo (o que leva '001' no seu nome) completouse en 15 minutos e o segundo ('002') detívose automaticamente, xa que SageMaker admite a parada anticipada se as métricas de adestramento non melloran durante un tempo:


Parada anticipada (2º traballo)


Comparemos os hiperparámetros que se utilizaron nestes traballos:

Só 3 parámetros teñen valores diferentes: num-hidden, num-negs e lr . O segundo modelo (adestrado con Job 2) tiña unha maior taxa de aprendizaxe mentres tiña menos capacidade para capturar patróns complexos (porque tiña menos neuronas) e foi adestrado en menos mostras negativas. Iso levou a unha precisión significativamente máis baixa, como podemos ver no Rango medio de validación (115 contra 23) e HITS@K :


1º modelo


2º modelo


Estadísticas do 2º modelo


Rango medio (MR) é a posición de clasificación media da ligazón correcta entre as predicións. Os valores de MR máis baixos son mellores porque indican que a ligazón correcta está, de media, máis preto da parte superior .

As métricas HITS@K miden a proporción de veces que aparece a ligazón correcta nos K resultados previstos.

MODELOS DE ARTE

Cando se fan os traballos de adestramento, créanse artefactos do modelo no depósito S3 de saída, xunto con ficheiros que conteñen estatísticas e métricas de adestramento:

Lista de ficheiros e cartafoles xerados en S3 polo traballo de formación.


Lista de ficheiros no cartafol 001.


As métricas e parámetros destes ficheiros JSON son os que mencionamos anteriormente. Só o directorio 001 contén o subdirectorio "saída" co ficheiro model.tar.gz, xa que é o único traballo de HPO que se completou. Os artefactos para a predición de ligazóns tamén conteñen os datos do gráfico DGL xa que son necesarios para facer predicións reais, como se explica aquí .


Estes ficheiros utilizaranse para crear un punto final de inferencia e xerar predicións de ligazóns reais. Iso falarase na seguinte e última publicación desta serie.