Σε αυτήν την ανάρτηση θα συνεχίσουμε να εργαζόμαστε για την πρόβλεψη συνδέσμων με το σύνολο δεδομένων Twitch. Θα επικεντρωθούμε στην εκπαίδευση του μοντέλου ML με βάση τα νευρωνικά δίκτυα γραφημάτων (GNN) και στη βελτιστοποίηση των υπερπαραμέτρων του. Μέχρι τώρα έχουμε ήδη επεξεργαστεί και προετοιμάσει τα δεδομένα γραφήματος για εκπαίδευση μοντέλων. Τα προηγούμενα βήματα περιγράφονται στο Μέρος 3 - Επεξεργασία δεδομένων, Μέρος 2 - Εξαγωγή δεδομένων από τη ΒΔ και Μέρος 1 - Φόρτωση δεδομένων στη ΒΔ.
Διαβάστε το μέρος 1 εδώ ; μέρος 2 εδώ ; και το μέρος 3 εδώ.
Θα χρησιμοποιήσουμε συνελικτικά νευρωνικά δίκτυα γραφήματος όπως κάναμε στην ανάρτηση πρόβλεψης τοπικών συνδέσμων , και παρόλο που το Neptune ML χρησιμοποιεί το ίδιο πλαίσιο DGL.ai , το υποκείμενο μοντέλο είναι λίγο διαφορετικό. Το Neptune ML υποστηρίζει τόσο γραφήματα γνώσης (ομοιογενή γραφήματα με έναν τύπο κόμβου και έναν τύπο μονής ακμής) όσο και ετερογενή γραφήματα που έχουν πολλαπλούς τύπους κόμβων και ακμών. Το σύνολο δεδομένων με το οποίο εργαζόμαστε έχει έναν τύπο μεμονωμένου κόμβου (χρήστης) και έναν τύπο μεμονωμένου άκρου (φιλία). Παρόλο που ένα Graph Convolutional Network (GCN) ή ένα Graph Sample and Aggregation (GraphSAGE) μοντέλο θα λειτουργούσε επίσης σε αυτήν την περίπτωση, το Neptune ML επιλέγει αυτόματα ένα μοντέλο Relational Graph Convolutional Network (R-GCN) για σύνολα δεδομένων με ιδιότητες κόμβου που μπορεί να διαφέρουν από κόμβο σε κόμβο, όπως εξηγείται εδώ . Γενικά, τα R-GCN απαιτούν περισσότερους υπολογισμούς για εκπαίδευση λόγω του αυξημένου αριθμού παραμέτρων που απαιτούνται για τον χειρισμό πολλαπλών τύπων κόμβων και ακμών.
Κατά τη διάρκεια του σταδίου επεξεργασίας δεδομένων (που περιγράψαμε στην προηγούμενη ανάρτηση TODO LINK), η Neptune ML δημιούργησε ένα αρχείο με το όνομα model-hpo-configuration.json
. Περιλαμβάνει τον τύπο μοντέλου (R-GCN), τον τύπο εργασίας (πρόβλεψη συνδέσμου), τη μέτρηση και τη συχνότητα αξιολόγησης και 4 λίστες παραμέτρων: μία με σταθερές παραμέτρους που δεν τροποποιούνται κατά τη διάρκεια της εκπαίδευσης και 3 λίστες παραμέτρων προς βελτιστοποίηση, με εύρη και προεπιλεγμένες τιμές. Οι παράμετροι ομαδοποιούνται κατά σημασία. Το εάν οι παράμετροι από καθεμία από τις ομάδες συντονίζονται αποφασίζεται με βάση τον αριθμό των διαθέσιμων εργασιών συντονισμού: οι παράμετροι 1ης βαθμίδας συντονίζονται πάντα, οι παράμετροι της 2ης βαθμίδας συντονίζονται εάν ο αριθμός των διαθέσιμων εργασιών είναι > 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 : Η αρνητική δειγματοληψία επηρεάζει τον τρόπο με τον οποίο το μοντέλο μαθαίνει να διακρίνει τους αληθινούς συνδέσμους από τους ψευδείς. Ένας μεγαλύτερος αριθμός αρνητικών δειγμάτων μπορεί να βελτιώσει την ποιότητα των προβλέψεων, αλλά αυξάνει το υπολογιστικό κόστος.
εγκατάλειψη : Η εγκατάλειψη βοηθά στην πρόληψη της υπερβολικής προσαρμογής παρακάμπτοντας τυχαία ορισμένους νευρώνες κατά τη διάρκεια της προπόνησης. Ένα υψηλότερο ποσοστό εγκατάλειψης μπορεί να μειώσει την υπερπροσαρμογή, αλλά θα μπορούσε να κάνει τη μάθηση πιο δύσκολη για το μοντέλο.
regularization-coef : Τακτοποίηση που έχει ως στόχο να αποτρέψει την υπερβολική προσαρμογή του μοντέλου.
Μπορείτε να αλλάξετε τις προεπιλεγμένες τιμές, το εύρος και το μέγεθος βήματος για καθεμία από αυτές τις παραμέτρους. Ο πλήρης κατάλογος των παραμέτρων βρίσκεται εδώ .
Αφού αλλάξετε τις παραμέτρους, απλώς αντικαταστήστε το αρχικό αρχείο model-hpo-configuration.json
στο S3.
Όπως ακριβώς η επεξεργασία δεδομένων που περιγράφεται στο Μέρος 3 αυτού του οδηγού, η εκπαίδευση μοντέλου απαιτεί 2 ρόλους IAM: έναν ρόλο Neptune που παρέχει πρόσβαση στον Neptune στο 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" } ] }
Αφού δημιουργήσουμε τους ρόλους και ενημερώσουμε τις πολιτικές εμπιστοσύνης τους, τους προσθέτουμε στο σύμπλεγμα Neptune (Neptune -> Βάσεις δεδομένων -> YOUR_NEPTUNE_CLUSTER_ID -> Συνδεσιμότητα & Ασφάλεια -> Ρόλοι IAM -> Προσθήκη ρόλου).
Τώρα είμαστε έτοιμοι να ξεκινήσουμε την εκπαίδευση μοντέλων. Για να γίνει αυτό, πρέπει να στείλουμε ένα αίτημα στο HTTP API του συμπλέγματος Neptune από το εσωτερικό του 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" }'
Απαιτούνται μόνο αυτές οι παράμετροι:
Υπάρχει επίσης η παράμετρος maxHPONumberOfTrainingJobs που ορίζει τον αριθμό των εργασιών εκπαίδευσης που θα εκτελεστούν με διαφορετικά σύνολα υπερπαραμέτρων. Από προεπιλογή, είναι 2, αλλά η AWS συνιστά να εκτελέσετε τουλάχιστον 10 εργασίες για να έχετε ένα ακριβές μοντέλο.
Υπάρχουν επίσης πολλές προαιρετικές παράμετροι: για παράδειγμα, μπορούμε να επιλέξουμε χειροκίνητα τον τύπο παρουσίας EC2 που θα χρησιμοποιηθεί για εκπαίδευση μοντέλων με το trainingInstanceType και να ορίσουμε το μέγεθος του όγκου αποθήκευσης με το trainingInstanceVolumeSizeInGB . Ο πλήρης κατάλογος των παραμέτρων βρίσκεται εδώ .
Το σύμπλεγμα απαντά με ένα JSON που περιέχει το αναγνωριστικό της εργασίας επεξεργασίας δεδομένων που μόλις δημιουργήσαμε:
{"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 -> Εκπαίδευση -> Εργασίες εκπαίδευσης.
Για απλότητα, δεν αλλάξαμε τον αριθμό των εργασιών HPO όταν ξεκινήσαμε την εκπαίδευση μοντέλων και χρησιμοποιήθηκε η προεπιλεγμένη τιμή 2. Οι 2 εργασίες έγιναν παράλληλα. Ο τύπος παρουσίας επιλέχθηκε αυτόματα: ml.g4dn.2xlarge .
Η πρώτη εργασία (αυτή με το '001' στο όνομά της) ολοκληρώθηκε σε 15 λεπτά και η δεύτερη ('002') διακόπηκε αυτόματα, καθώς το SageMaker υποστηρίζει πρόωρη διακοπή εάν οι μετρήσεις εκπαίδευσης δεν βελτιωθούν για λίγο:
Ας συγκρίνουμε τις υπερπαράμετρους που χρησιμοποιήθηκαν σε αυτές τις εργασίες:
Μόνο 3 παράμετροι έχουν διαφορετικές τιμές: num-hidden, num-negs και lr . Το δεύτερο μοντέλο (εκπαιδευμένο με την εργασία 2) είχε υψηλότερο ρυθμό μάθησης ενώ είχε λιγότερη ικανότητα να συλλαμβάνει πολύπλοκα μοτίβα (επειδή είχε λιγότερους νευρώνες) και εκπαιδεύτηκε σε λιγότερα αρνητικά δείγματα. Αυτό οδήγησε σε σημαντικά χαμηλότερη ακρίβεια, όπως μπορούμε να δούμε από τη μέση κατάταξη επικύρωσης (115 έναντι 23) και το HITS@K :
Η μέση κατάταξη (MR) είναι η μέση θέση κατάταξης του σωστού συνδέσμου μεταξύ των προβλέψεων. Οι χαμηλότερες τιμές MR είναι καλύτερες επειδή υποδεικνύουν ότι ο σωστός σύνδεσμος κατατάσσεται, κατά μέσο όρο, πιο κοντά στην κορυφή .
Οι μετρήσεις HITS@K μετρούν το ποσοστό των φορών που εμφανίζεται ο σωστός σύνδεσμος στα κορυφαία K προβλεπόμενα αποτελέσματα.
Όταν ολοκληρωθούν οι εργασίες εκπαίδευσης, δημιουργούνται τεχνουργήματα μοντέλων στον κάδο εξόδου S3, μαζί με αρχεία που περιέχουν στατιστικά και μετρήσεις εκπαίδευσης:
Οι μετρήσεις και οι παράμετροι σε αυτά τα αρχεία JSON είναι αυτές που αναφέραμε προηγουμένως. Μόνο ο κατάλογος 001 περιέχει τον υποκατάλογο 'output' με το αρχείο model.tar.gz, καθώς είναι η μόνη εργασία HPO που ολοκληρώθηκε. Τα τεχνουργήματα για την πρόβλεψη συνδέσμων περιέχουν επίσης τα δεδομένα γραφήματος DGL καθώς απαιτούνται για πραγματικές προβλέψεις, όπως εξηγείται εδώ .
Αυτά τα αρχεία θα χρησιμοποιηθούν για τη δημιουργία ενός τελικού σημείου συμπερασμάτων και τη δημιουργία πραγματικών προβλέψεων συνδέσμων. Αυτό θα συζητηθεί στην επόμενη και τελευταία ανάρτηση αυτής της σειράς.