Η διαδικασία αρχικοποίησης είναι το κρίσιμο πρώτο βήμα στην εκπαίδευση ενός μοντέλου, θέτοντας τα θεμέλια για τα επόμενα βήματα εκπαίδευσης. Αυτή η πολύπλοκη διαδικασία περιλαμβάνει αρκετά βασικά βήματα, καθένα από τα οποία εκτελείται διαδοχικά για να διασφαλιστεί ότι το μοντέλο έχει διαμορφωθεί σωστά και λειτουργικό.
Μέσω αυτής της δομημένης αρχικοποίησης, το μοντέλο δεν προετοιμάζεται μόνο για εκπαίδευση, αλλά και βελτιστοποιημένη για την απόδοση, θέτοντας τα θεμέλια για αποτελεσματική κατάρτιση και ακριβείς προβλέψεις. Αυτό το έγγραφο περιγράφει λεπτομερώς τα βήματα που εμπλέκονται στη φάση αρχικοποίησης και παρέχει πληροφορίες για τους υποκείμενους μηχανισμούς και διαμορφώσεις που συμβάλλουν στην επιτυχή κατάρτιση μοντέλων.

Διαδικασία αρχικοποίησης
Η εκπαίδευση μοντέλου αρχίζει με την προετοιμασία αυτής της διαδικασίας. Τα παρακάτω βήματα εμφανίζονται διαδοχικά όταν ξεκινάτε την εκπαίδευση:
- Το αρχείο διαμόρφωσης διαβάζεται και οριστικοποιείται (τα αρχεία διαμόρφωσης AUTO_CONFIG και χρήστη συγχωνεύονται).
├ .. Ενότητα runner.py ├── def _Finalize_Config () Ενότητα runner.py ├ .. def auto_config () Όταν η προπόνηση με μεικτή ακρίβεια (FP16), set_global_policy ("mixed_float16") περνάει στο tensorflow. ├ .. mixed_precision = selfciveled_per_ misc.enable_mixed_precision() module runner.py ├ .. ├ .. runner.py Από το autoconfig του transform-a> σε lazyadam . Αυτός ο βελτιστοποιητής εφαρμόζεται στο addons addons βιβλιοθήκη. Η συνάρτηση εξασθένησης noamdecay αρχικοποιείται με τις ακόλουθες παραμέτρους: ━ 1) Κλίμακα - Η τιμή από την παράμετρο του ρυθμού εκμάθησης του αρχείου διαμόρφωσης κατάρτισης έχει οριστεί (στο παράδειγμά μας η τιμή είναι 2). ━ 2) model_dim - Η τιμή από το num_units (μέγεθος RNN) η παράμετρος του αρχείου διαμόρφωσης κατάρτισης έχει οριστεί (στο παράδειγμα μας η τιμή είναι 4). ━ 3) warmup_steps - Ρυθμίζει την τιμή από την παράμετρο του αρχείου διαμόρφωσης κατάρτισης (στο παράδειγμα μας, η τιμή είναι 8000). Η κλάση περιτύλιξης schedulewrapper αρχικοποιείται για να αυξήσει τη συμπεριφορά του προγραμματιστή ρυθμού εκμάθησης με τις ακόλουθες παραμέτρους: ━ 1) Πρόγραμμα - Αρχικοποιήθηκε πάνω από τη λειτουργία εξασθένισης noamdecay . ━ 2) step_start - Ρύθμιση τιμής από την παράμετρο start_decay_steps του αρχείου διαμόρφωσης κατάρτισης (η προεπιλεγμένη τιμή είναι 0). ━ 3) step_duration - Ρύθμιση τιμής από την παράμετρο decay_step_duration του αρχείου διαμόρφωσης κατάρτισης (προεπιλεγμένη τιμή 1). ━ 4) CLION_LEARNING_RATE - Ρυθμίστε την τιμή από την παράμετρο ελάχιστο ποσοστό μάθησης του αρχείου διαμόρφωσης κατάρτισης (στο παράδειγμα μας, η τιμή είναι 0,0001). Η κλάση Optimizer LazyAdam αρχικοποιείται με τις ακόλουθες παραμέτρους: ━ 1) learning_rate - schedulewrapper Αρχικοποιήθηκε παραπάνω. ━ 2) kwargs - Λεξικό beta Συντελεστές από την παράμετρο του αρχείου διαμόρφωσης κατάρτισης (στο παράδειγμα μας {'beta_1': 0,9, 'beta_2': 0,998}). ━ 3) Όταν η εκπαίδευση με μεικτή ακρίβεια (FP16), η κλάση lazyadam κληρονομείται από την κλάση TF.Keras.Mixed_Precision.LossScaleOptimizer, η οποία αρχικοποιεί τις ακόλουθες παραμέτρους: - initial_scale = 32 768 - Η τιμή με την οποία θα διορθωθεί η τιμή που λαμβάνεται από τη λειτουργία απώλεια . - dynamic_growth_steps = 2 000 - Πόσο συχνά θα ενημερωθεί η τιμή στην οποία θα διορθωθεί η τιμή της λειτουργίας απώλεια . ├ .. Ενότητα Προγράμματα/lr_schedules.py ├ .. def (tf.keras.optimizers.schedules.learningrateschedule) Μονάδα Προγράμματα/lr_schedules.py ├ .. def Προγράμματα/lr_schedules.py ├ .. eftimizer () Βελτιστοποιητές/utils.py Εάν ενεργοποιηθεί η συνάρτηση μεικτή ακρίβεια ή jit compile , batch_size_multiple θα είναι 8, διαφορετικά 1. ├ .. batch_multiple = (...) ├ .. dataset_fn = (...) ├ .. Ενότητα runner.py Η διάσταση των ενσωματωμένων θα καθορίζεται από το μέγεθος του λεξικού και το μέγεθος της παραμέτρου num_units (μέγεθος RNN), όπου m είναι ο αριθμός των μαρκών στο λεξικό, n είναι η τιμή των num_units. (Εικόνα 1 - matrix_m_n) Οι ενσωματωμένες αρχικοποιημένες μέσω του αντικειμένου tf.keras.layer, το add_aweight Λειτουργία, που ονομάζεται μέσω του link = rel = 'dofollow' target = '_ blank' href = 'https: //github.com/opennmt/opennmt-tf/blob/6f3b952eb973dec31250a806bf0f56ff730d0b5/opennmt/inputters/text_inputter.py#l497'> defled (). Κλάση Wordembedder. ├ .. source_inputter = inputters.wordeMbedder (ombedding_size = num_units) ├ .. def build () <) ├ .. target_inputter = inputters.wordeMbedder (ombedding_size = num_units) ├ .. def build () <) Για παράδειγμα, για ένα λεξικό μεγέθους 700 μάρκες και num_units (μέγεθος RNN) με τιμή 8, θα δημιουργηθεί μια μήτρα που περιέχει 700 σειρές 8 αριθμών. Οι ενσωματωμένες θα φαίνονται κάτι τέτοιο: Οι τιμές που παρουσιάζονται στη μήτρα ενσωμάτωσης σχηματίζονται σύμφωνα με έναν συγκεκριμένο μηχανισμό. Για παράδειγμα, για μια μήτρα διάστασης 700x8: Θα έχουμε μια μήτρα διάστασης 700 x 8, όπου οι τιμές θα είναι από -0.0920 έως 0.0920, που θα ληφθούν τυχαία από μια ομοιόμορφη κατανομή. Ο μηχανισμός που περιγράφηκε παραπάνω ονομάζεται αρχικοποίηση Xavier. Εφαρμογή στο TensorFlow: ├ .. class GlorotNormal (). init () ├ .. class VarianCescaling (). Κλήση () ├ .. selfs.layer_norm = common.layernorm () module self_attention_encoder.py ├ .. module common.py.py ├ .. selfattencodentionlayer () self_attention_encoder.py ├ .. self.ply_attention = multiaceattention () module Layers/Transformer.py ├ .. def build ├ .. transformerwrapper Layers/Transformer.py ├ .. decoder = selfattentdenentderderderderderderderderderderderentder () transform.py ├ .. self.layer_norm = common.layermormormormrorm = common.layermormrorm (). self_attention_decoder.py ├ .. module common.py.py ├ .. selfatattentdentionderlayer () <) self_attention_decoder.py ├ .. self.selfention = multiaceattention () Layers/Transformer.py ├ .. def build ├ .. transformerwrapper Layers/Transformer.py ├ .. μοντέλο Το μοντέλο μπορεί να απεικονιστεί σχηματικά ως εξής. (Εικόνα 2 - Μοντέλο) Τα βάρη του μοντέλου (δηλαδή τα κύρια) του μοντέλου αρχικοποιούνται χρησιμοποιώντας τον μηχανισμό "Xavier initialization" που περιγράφεται παραπάνω. href = 'https: //www.tensorflow.org/api_docs/python/tf/keras/layers/dense'> tf.keras.layers.dense Τα βάρη FeedForwardNetwork αρχικοποιούνται επίσης μέσω tf.keras.layers.dense class = 'link-text' rel = 'dofollow' target = '_ blank' href = 'https: //www.tensorflow.org/api_docs/python/tf/nn/relu'> tf.nn.relu . Το στρώμα κανονικοποίησης αρχικοποιείται μέσω tf.keras.layers.layernormalization θα εκπροσωπούνται από τα μηδενικά και τα διάσταση από αυτά. Η κανονικοποίηση στρώματος (κανονικοποίηση στρώματος, LN) είναι μια τεχνική βαθιάς μάθησης που χρησιμοποιείται για τη σταθεροποίηση της διαδικασίας μάθησης και τη βελτίωση της απόδοσης των νευρωνικών δικτύων. Επιλύει το πρόβλημα της εσωτερικής μετατόπισης συνδιακύμανσης (ICS) όπου η κατανομή των ενεργοποιήσεων μέσα σε ένα στρώμα αλλάζει κατά τη διάρκεια της διαδικασίας μάθησης, καθιστώντας δύσκολη την αποτελεσματική εκπαίδευση του δικτύου. Ένα χαρτί στο οποίο το κανονικοποίηση στρώματος href = 'https: //arxiv.org/pdf/1607.06450'> κανονικοποίηση στρώματος Κατά την προετοιμασία του μοντέλου, η ακόλουθη συνθήκη πρέπει να πληρούσε : num_units % num_heads, δηλ. Η διαστάσεις των ενσωματωμένων (και αντίστοιχα ερωτήματα, κλειδιά και τιμές) πρέπει να είναι ένα πολλαπλάσιο του αριθμού των κεφαλών σε πολυεπίπεδα. Στην πραγματικότητα, οι τιμές διαιρούνται από τον αριθμό που καθορίζονται στην παράμετρο . Ο αλγόριθμος εφαρμόζεται στη λειτουργία split_heads της μονάδας ransformer.py . (Εικόνα 3 - Προσοχή πολλαπλών κεφαλών) Ας εξετάσουμε τον αλγόριθμο της κατανομής των τιμών των πινάκων , των τιμών και με τον αριθμό των κεφαλών. Για την απλότητα της αντίληψης, θα πάρουμε τη διάσταση του num_units ίση με 4 και τον αριθμό των κεφαλών num_heads ίσο με 2. Για παράδειγμα, έχουμε μια παρτίδα συμβόλων: Για κάθε διακριτικό, δημιουργείται μια διανυσματική αναπαράσταση του διακριτικού από τη μήτρα ενσωμάτωσης (ο μηχανισμός περιγράφεται παρακάτω) και σχηματίζεται μια μήτρα διανυσμάτων. Η διάσταση του batchet υπολογίζεται: input_shapes = [2, 3, 4] . Υπάρχουν 2 αλληλουχίες στις παρτίδες, κάθε ακολουθία έχει 3 μάρκες, κάθε διακριτικό αντιπροσωπεύεται από ένα διάνυσμα της διαστάσεων 4. Το επόμενο βήμα είναι να αλλάξει η διάσταση των εισόδων matrix: - outputs = tf.reshape tf.reshape (εισόδους, [2, 3, 2, 4 // 2])