Main Content

trainingOptions

Opzioni per l’addestramento della rete neurale di Deep Learning

Descrizione

options = trainingOptions(solverName) restituisce le opzioni di addestramento per l'ottimizzatore specificato da solverName. Per addestrare una rete neurale, utilizzare le opzioni di addestramento come un argomento di input nella funzione trainnet.

esempio

options = trainingOptions(solverName,Name=Value) restituisce le opzioni di addestramento con ulteriori opzioni specificate da uno o più argomenti nome-valore.

Esempi

comprimi tutto

Creare un set di opzioni per l’addestramento di una rete usando la discesa stocastica del gradiente con momento. Ridurre la velocità di apprendimento di un fattore di 0,2 ogni 5 epoche. Impostare il numero massimo di epoche per l’addestramento su 20 e utilizzare un mini-batch con 64 osservazioni a ogni iterazione. Attivare il grafico dei progressi dell’addestramento.

options = trainingOptions("sgdm", ...
    LearnRateSchedule="piecewise", ...
    LearnRateDropFactor=0.2, ...
    LearnRateDropPeriod=5, ...
    MaxEpochs=20, ...
    MiniBatchSize=64, ...
    Plots="training-progress")
options = 
  TrainingOptionsSGDM with properties:

                        Momentum: 0.9000
                InitialLearnRate: 0.0100
                       MaxEpochs: 20
               LearnRateSchedule: 'piecewise'
             LearnRateDropFactor: 0.2000
             LearnRateDropPeriod: 5
                   MiniBatchSize: 64
                         Shuffle: 'once'
             CheckpointFrequency: 1
         CheckpointFrequencyUnit: 'epoch'
                  SequenceLength: 'longest'
        PreprocessingEnvironment: 'serial'
                L2Regularization: 1.0000e-04
         GradientThresholdMethod: 'l2norm'
               GradientThreshold: Inf
                         Verbose: 1
                VerboseFrequency: 50
                  ValidationData: []
             ValidationFrequency: 50
              ValidationPatience: Inf
             ObjectiveMetricName: 'loss'
                  CheckpointPath: ''
            ExecutionEnvironment: 'auto'
                       OutputFcn: []
                         Metrics: []
                           Plots: 'training-progress'
            SequencePaddingValue: 0
        SequencePaddingDirection: 'right'
                InputDataFormats: "auto"
               TargetDataFormats: "auto"
         ResetInputNormalization: 1
    BatchNormalizationStatistics: 'auto'
                   OutputNetwork: 'auto'
                    Acceleration: "auto"

Questo esempio mostra come monitorare i progressi dell'addestramento delle reti di Deep Learning.

Quando si addestrano le reti per il Deep Learning, il plottaggio di varie metriche durante l'addestramento consente di comprendere come progredisce l'addestramento stesso. Ad esempio, è possibile determinare se e quanto velocemente la precisione della rete stia migliorando e se la rete stia iniziando a sovradimensionare i dati di addestramento.

Questo esempio mostra come monitorare i progressi dell’addestramento delle reti addestrate utilizzando la funzione trainnet. Se si sta addestrando una rete utilizzando un loop di addestramento personalizzato, utilizzare invece un oggetto trainingProgressMonitor per tracciare le metriche durante l'addestramento. Per ulteriori informazioni, vedere Monitor Custom Training Loop Progress.

Quando si imposta l'opzione di addestramento Plots su "training-progress" in trainingOptions e si avvia l'addestramento della rete, la funzione trainnet crea una figura e visualizza le metriche di addestramento a ciascuna iterazione. Ogni iterazione è una stima del gradiente e un aggiornamento dei parametri della rete. Se si specificano i dati di convalida in trainingOptions, la figura mostrerà le metriche di convalida ogni volta che trainnet convalida la rete. La figura traccia la perdita e qualsiasi metrica specificata dall'opzione nome-valore Metrics. Per impostazione predefinita, il software utilizza una scala lineare per i grafici. Per specificare una scala logaritmica per l'asse y, selezionare il pulsante scala log nella barra degli strumenti degli assi.

Durante l'addestramento è possibile interromperlo e ripristinare lo stato attuale della rete facendo clic sul pulsante di stop, situato nell'angolo in alto a destra. Dopo aver fatto clic sul pulsante di stop, l'addestramento può richiedere un certo tempo per essere completato. Al termine dell'addestramento, trainnet restituisce la rete addestrata.

Specificare l'opzione di addestramento OutputNetwork come "best-validation" per ottenere valori finalizzati che corrispondano all'iterazione con il miglior valore della metrica di convalida, dove la metrica ottimizzata è specificata dalle opzioni di addestramento ObjectiveMetricName. Specificare l'opzione di addestramento OutputNetwork come "last-iteration" per ottenere metriche finalizzate che corrispondano all'ultima iterazione di addestramento.

Le informazioni relative al tempo di addestramento e alle impostazioni possono essere visualizzate a destra del pannello. Per saperne di più sulle opzioni di addestramento, vedere Set Up Parameters and Train Convolutional Neural Network.

Per salvare il grafico sui progressi dell'addestramento, fare clic su Export as Image (Esporta come immagine) nella finestra di addestramento. È possibile salvare il grafico come file PNG, JPEG, TIFF o PDF. È inoltre possibile salvare i singoli grafici utilizzando la barra degli strumenti degli assi.

Tracciamento dei progressi dell’addestramento durante l’addestramento

Addestrare una rete e tracciare i progressi dell'addestramento durante l’addestramento.

Caricare i dati di addestramento e di test rispettivamente dai file MAT DigitsDataTrain.mat e DigitsDataTest.mat. Gli insiemi di dati di addestramento e di test contengono ciascuno 5000 immagini.

load DigitsDataTrain.mat
load DigitsDataTest.mat

Creare un oggetto dlnetwork.

net = dlnetwork;

Specificare i livelli del ramo di classificazione e aggiungerli alla rete.

layers = [
    imageInputLayer([28 28 1])
    convolution2dLayer(3,8,Padding="same")
    batchNormalizationLayer
    reluLayer   
    maxPooling2dLayer(2,Stride=2)
    convolution2dLayer(3,16,Padding="same")
    batchNormalizationLayer
    reluLayer
    maxPooling2dLayer(2,Stride=2)
    convolution2dLayer(3,32,Padding="same")
    batchNormalizationLayer
    reluLayer
    fullyConnectedLayer(10)
    softmaxLayer];

net = addLayers(net,layers);

Specificare le opzioni per l'addestramento della rete. Specificare i dati di convalida per convalidare la rete a intervalli regolari durante l’addestramento. Registrare i valori della metrica per la precisione e l'F-score. Per tracciare i progressi dell'addestramento durante l’addestramento, impostare l'opzione di addestramento Plots su "training-progress".

options = trainingOptions("sgdm", ...
    MaxEpochs=8, ...
    Metrics = ["accuracy","fscore"], ...
    ValidationData={XTest,labelsTest}, ...
    ValidationFrequency=30, ...
    Verbose=false, ...
    Plots="training-progress");

Addestrare la rete.

net = trainnet(XTrain,labelsTrain,net,"crossentropy",options);

Utilizzare le metriche per l'arresto anticipato e per la restituzione della rete migliore.

Caricare i dati di addestramento, che contengono 5000 immagini di cifre. Mettere da parte 1000 immagini per la convalida della rete.

[XTrain,YTrain] = digitTrain4DArrayData;

idx = randperm(size(XTrain,4),1000);
XValidation = XTrain(:,:,:,idx);
XTrain(:,:,:,idx) = [];
YValidation = YTrain(idx);
YTrain(idx) = [];

Costruire una rete per classificare i dati delle immagini di cifre.

net = dlnetwork;

layers = [
    imageInputLayer([28 28 1])
    convolution2dLayer(3,8,Padding="same")
    batchNormalizationLayer
    reluLayer      
    fullyConnectedLayer(10)
    softmaxLayer];

net = addLayers(net,layers);

Specificare le opzioni di addestramento:

  • Utilizzare un solver SGDM per l'addestramento.

  • Monitorare la performance dell'addestramento specificando i dati di convalida e la frequenza di convalida.

  • Tracciare la precisione e richiamare durante l'addestramento. Per ripristinare la rete con il miglior valore di richiamo, specificare "recall" come metrica dell'obiettivo e impostare la rete di output su "best-validation".

  • Specificare l'attesa di convalida come 5, in modo che l'addestramento si arresti se il richiamo non è diminuito per cinque iterazioni.

  • Visualizzare il grafico dei progressi dell'addestramento della rete.

  • Sopprimere l'output verboso.

options = trainingOptions("sgdm", ...
    ValidationData={XValidation,YValidation}, ...
    ValidationFrequency=35, ...
    ValidationPatience=5, ...
    Metrics=["accuracy","recall"], ...
    ObjectiveMetricName="recall", ...
    OutputNetwork="best-validation", ...
    Plots="training-progress", ...
    Verbose=false);

Addestrare la rete.

net = trainnet(XTrain,YTrain,net,"crossentropy",options);

Argomenti di input

comprimi tutto

Solver per l'addestramento della rete neurale, specificato come uno di questi valori:

La funzione trainBERTDocumentClassifier (Text Analytics Toolbox) supporta solo i solver "sgdm", "rmsprop" e "adam".

Argomenti nome-valore

Specificare coppie opzionali di argomenti come Name1=Value1,...,NameN=ValueN, dove Name è il nome dell’argomento e Value è il valore corrispondente. Gli argomenti nome-valore devono comparire dopo gli altri argomenti, ma l'ordine delle coppie non ha importanza.

Prima della release R2021a, utilizzare le virgole per separare ciascun nome e valore e racchiudere Name tra virgolette.

Esempio Plots="training-progress",Metrics="accuracy",Verbose=false specifica di disabilitare l'output verboso e di visualizzare i progressi dell'addestramento in un grafico che includa inoltre la metrica di precisione.

Monitoraggio

comprimi tutto

Grafici da visualizzare durante l'addestramento della rete neurale, specificati come uno di questi valori:

  • "none": nessuna visualizzazione dei grafici durante l’addestramento.

  • "training-progress": grafico dei progressi dell’addestramento.

Il contenuto del grafico dipende dal solver utilizzato.

  • Quando l'argomento solverName è "sgdm", "adam" o "rmsprop", il grafico mostra la perdita del mini-batch, la perdita di convalida, le metriche del mini-batch di addestramento e di convalida, specificate dall'opzione Metrics, nonché ulteriori informazioni sui progressi dell'addestramento.

  • Quando l'argomento solverName è "lbfgs", il grafico mostra la perdita di addestramento e di convalida, le metriche di addestramento e di convalida, specificate dall'opzione Metrics, nonché ulteriori informazioni sui progressi dell'addestramento.

Per aprire e chiudere il grafico sui progressi dell'addestramento in modo programmatico, utilizzare le funzioni show e close con il secondo output della funzione trainnet. È possibile utilizzare la funzione show per visualizzare i progressi dell'addestramento anche se l'opzione di addestramento Plots è specificata come "none".

Per commutare la scala dell'asse y in logaritmica, utilizzare la barra degli strumenti degli assi. Training plot axes toolbar with log scale enabled and the tooltip "Log scale y-axis".

Da R2023b

Metriche da tracciare, specificate come vettore di carattere o scalare di stringa di un nome di metrica integrato, array di stringhe di nomi, oggetto metrica integrato o personalizzato, handle della funzione (@myMetric), oggetto deep.DifferentiableFunction o array di celle di nomi, oggetti metrici e handle delle funzioni.

  • Nome della metrica integrata: specifica delle metriche come scalare di stringa, vettore di carattere o array di stringhe di nomi di metriche integrate. I valori supportati sono "accuracy", "auc", "fscore", "precision", "recall" e "rmse".

  • Oggetto metrica integrato: se è necessaria una maggiore flessibilità, è possibile utilizzare gli oggetti metrici integrati. Il software supporta questi oggetti metrici integrati:

    Quando si crea un oggetto metrica integrato, è possibile specificare ulteriori opzioni, come il tipo di media e se l'attività è a etichetta singola o multipla.

  • Handle della funzione metrica personalizzata: se la metrica necessaria non è una metrica integrata, è possibile specificare delle metriche personalizzate utilizzando l'handle delle funzioni. La funzione deve presentare la sintassi metric = metricFunction(Y,T), dove Y corrisponde alle previsioni della rete e T corrisponde alle risposte target. Per le reti con più output, la sintassi deve essere metric = metricFunction(Y1,…,YN,T1,…TM), dove N è il numero di output e M è il numero di target. Per ulteriori informazioni, vedere Define Custom Metric Function.

    Nota

    Quando si dispone di dati di convalida in mini-batch, il software calcola la metrica di convalida per ciascun mini-batch e restituisce la media di tali valori. Per alcune metriche, questo comportamento può portare a un valore di metrica diverso rispetto a quello che si otterrebbe calcolando la metrica utilizzando l'intero set di convalida in una sola volta. Nella maggior parte dei casi, i valori sono comunque simili. Per utilizzare una metrica personalizzata non mediata dal batch per i dati di convalida, è necessario creare un oggetto metrica personalizzato. Per ulteriori informazioni, vedere Define Custom Deep Learning Metric Object.

  • Oggetto deep.DifferentiableFunction (da R2024a): oggetto funzione con funzione di retropropagazione personalizzata. Per ulteriori informazioni, vedere Define Custom Deep Learning Operations.

  • Oggetto metrica personalizzato: se è necessaria una maggiore personalizzazione, è possibile definire un oggetto metrica personalizzato. Per un esempio che mostra come creare una metrica personalizzata, vedere Define Custom F-Beta Score Metric Object. Per informazioni generali sulla creazione di metriche personalizzate, vedere Define Custom Deep Learning Metric Object. Specificare la metrica personalizzata come l'opzione Metrics della funzione trainingOptions.

Questa opzione supporta solo le funzioni trainnet e trainBERTDocumentClassifier (Text Analytics Toolbox).

Esempio Metrics=["accuracy","fscore"]

Esempio Metrics={"accuracy",@myFunction,precisionObj}

Da R2024a

Nome della metrica dell'obiettivo da utilizzare per l'arresto anticipato e la restituzione della rete migliore, specificata come scalare di stringa o vettore di carattere.

Il nome della metrica deve essere "loss" o deve corrispondere al nome di una metrica specificata dall'argomento nome-valore Metrics. Le metriche specificate utilizzando gli handle delle funzioni non sono supportate. Per specificare il valore ObjectiveMetricName come nome di una metrica personalizzata, il valore della proprietà Maximize dell'oggetto metrica personalizzato non deve essere vuoto. Per ulteriori informazioni, vedere Define Custom Deep Learning Metric Object.

Per ulteriori informazioni sulla definizione della metrica dell'obiettivo per l'arresto anticipato, vedere ValidationPatience. Per ulteriori informazioni sulla restituzione della rete migliore utilizzando la metrica dell'obiettivo, vedere OutputNetwork.

Tipi di dati: char | string

Contrassegno per visualizzare le informazioni sui progressi dell'addestramento nella finestra di comando, specificato come 1 (true) o 0 (false).

Il contenuto dell'output verboso dipende dal tipo di solver.

Per i solver stocastici (SGDM, Adam e RMSProp), la tabella contiene queste variabili:

VariabileDescrizione
IterationNumero di iterazioni.
EpochNumero di epoche.
TimeElapsedTempo trascorso in ore, minuti e secondi.
LearnRateVelocità di apprendimento.
TrainingLossPerdita di addestramento.
ValidationLossPerdita di convalida. Se non si specificano i dati di convalida, il software non visualizza questa informazione.

Per il solver L-BFGS, la tabella contiene queste variabili:

VariabileDescrizione
IterationNumero di iterazioni.
TimeElapsedTempo trascorso in ore, minuti e secondi.
TrainingLossPerdita di addestramento.
ValidationLossPerdita di convalida. Se non si specificano i dati di convalida, il software non visualizza questa informazione.
GradientNormNorma dei gradienti.
StepNormNorma delle fasi.

Se si specificano ulteriori metriche nelle opzioni di addestramento, le stesse sono inoltre visualizzate nell'output verboso. Ad esempio, se si imposta l'opzione di addestramento Metrics su "accuracy", le informazioni includono le variabili TrainingAccuracy e ValidationAccuracy.

Quando l’apprendimento si arresta, l’output verboso visualizza il motivo dell’arresto.

Per specificare i dati di convalida, utilizzare l’opzione di addestramento ValidationData.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Frequenza di stampa del verboso, ossia il numero di iterazioni tra le stampe nella finestra di comando, specificato come numero intero positivo.

Se si convalida la rete neurale durante l'addestramento, il software stampa anche nella finestra di comando ogni volta che avviene una convalida.

Per abilitare questa proprietà, impostare l'opzione di addestramento Verbose su 1 (true).

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Funzioni di output da chiamare durante l'addestramento, specificate come handle della funzione o array di celle degli handle delle funzioni. Il software chiama le funzioni una volta prima dell'inizio dell'addestramento, dopo ciascuna iterazione e una volta al termine dell'addestramento.

Le funzioni devono presentare la sintassi stopFlag = f(info), dove info è una struttura contenente informazioni sui progressi dell'addestramento e stopFlag è uno scalare che indica l'arresto anticipato dell'addestramento. Se stopFlag è 1 (true), il software arresta l'addestramento. In caso contrario, il software continua l'addestramento.

La funzione trainnet trasferisce la struttura info alla funzione di output.

Per i solver stocastici (SGDM, Adam e RMSProp), info contiene questi campi:

CampoDescrizione
EpochNumero di epoche
IterationNumero di iterazioni
TimeElapsedTempo trascorso dall'inizio dell'addestramento
LearnRateVelocità di apprendimento dell'iterazione
TrainingLossPerdita di addestramento dell'iterazione
ValidationLossPerdita di convalida, se specificata e valutata all'iterazione.
StateStato di addestramento dell'iterazione, specificato come "start", "iteration" o "done".

Per il solver L-BFGS, info contiene questi campi:

CampoDescrizione
IterationNumero di iterazioni
TimeElapsedTempo trascorso in ore, minuti e secondi
TrainingLossPerdita di addestramento
ValidationLossPerdita di convalida. Se non si specificano i dati di convalida, il software non visualizza questa informazione.
GradientNormNorma dei gradienti
StepNormNorma delle fasi
StateStato di addestramento dell'iterazione, specificato come "start", "iteration" o "done".

Se si specificano ulteriori metriche nelle opzioni di addestramento, le stesse sono inoltre visualizzate nelle informazioni sull'addestramento. Ad esempio, se si imposta l'opzione di addestramento Metrics su "accuracy", le informazioni includono i campi TrainingAccuracy e ValidationAccuracy.

Se un campo non viene calcolato o non è pertinente per una certa chiamata delle funzioni di output, tale campo contiene un array vuoto.

Per un esempio di utilizzo delle funzioni di output, vedere Custom Stopping Criteria for Deep Learning Training.

Tipi di dati: function_handle | cell

Formati dei dati

comprimi tutto

Da R2023b

Descrizione delle dimensioni dei dati di input, specificate come array di stringhe, vettore di carattere o array di celle dei vettori di carattere.

Se InputDataFormats è "auto", il software utilizza i formati previsti dall'input di rete. In caso contrario, il software utilizza i formati specificati per il corrispondente input di rete.

Un formato di dati è una stringa di caratteri, dove ciascun carattere descrive il tipo della dimensione di dati corrispondente.

I caratteri sono:

  • "S": spaziale

  • "C": canale

  • "B": batch

  • "T": tempo

  • "U": non specificato

Ad esempio, si consideri un array contenente un batch di sequenze dove la prima, la seconda e la terza dimensione corrispondono rispettivamente a canali, osservazioni e fasi temporali. È possibile specificare che questo array abbia il formato "CBT" (canale, batch, tempo).

È possibile specificare più dimensioni etichettate "S" o "U". È possibile utilizzare le etichette "C", "B" e "T" al massimo una volta. Il software ignora le dimensioni singole finali "U" dopo la seconda dimensione.

Per le reti neurali con più input net, specificare un array di formati dei dati di input, dove InputDataFormats(i) corrisponde all'input net.InputNames(i).

Per ulteriori informazioni, vedere Deep Learning Data Formats.

Tipi di dati: char | string | cell

Da R2023b

Descrizione delle dimensioni dei dati target, specificate come uno di questi valori:

  • "auto": se i dati target presentano lo stesso numero di dimensioni dei dati di input, la funzione trainnet utilizza il formato specificato da InputDataFormats. Se i dati target presentano un numero di dimensioni diverso da quello dei dati di input, la funzione trainnet utilizza il formato previsto dalla funzione di perdita.

  • Array di stringhe, vettore di carattere o array di celle dei vettori di carattere: la funzione trainnet utilizza i formati di dati specificati dall'utente.

Un formato di dati è una stringa di caratteri, dove ciascun carattere descrive il tipo della dimensione di dati corrispondente.

I caratteri sono:

  • "S": spaziale

  • "C": canale

  • "B": batch

  • "T": tempo

  • "U": non specificato

Ad esempio, si consideri un array contenente un batch di sequenze dove la prima, la seconda e la terza dimensione corrispondono rispettivamente a canali, osservazioni e fasi temporali. È possibile specificare che questo array abbia il formato "CBT" (canale, batch, tempo).

È possibile specificare più dimensioni etichettate "S" o "U". È possibile utilizzare le etichette "C", "B" e "T" al massimo una volta. Il software ignora le dimensioni singole finali "U" dopo la seconda dimensione.

Per ulteriori informazioni, vedere Deep Learning Data Formats.

Tipi di dati: char | string | cell

Opzioni del solver stocastico

comprimi tutto

Numero massimo di epoche (passaggi completi dei dati) da utilizzare per l'addestramento, specificato come numero intero positivo.

Questa opzione supporta solo i solver stocastici (quando l'argomento solverName è "sgdm", "adam" o "rmsprop").

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Dimensione del mini-batch da utilizzare per ogni iterazione di addestramento, specificata come un numero intero positivo. Un mini-batch è un sottoinsieme del set di addestramento, utilizzato per valutare il gradiente della funzione di perdita e per aggiornare i pesi.

Se la dimensione del mini-batch non suddivide in modo uniforme il numero di campioni di addestramento, il software scarta i dati di addestramento che non si adattano al mini-batch finale completo di ciascuna epoca. Se la dimensione del mini-batch è inferiore al numero di campioni di addestramento, il software non scarta alcun dato.

Questa opzione supporta solo i solver stocastici (quando l'argomento solverName è "sgdm", "adam" o "rmsprop").

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Opzione per il mescolamento dei dati, specificata come uno di questi valori:

  • "once": mescolamento dei dati di addestramento e di convalida una volta prima dell’addestramento.

  • "never": nessun mescolamento dei dati.

  • "every-epoch": mescolamento dei dati di addestramento prima di ogni epoca di addestramento e mescolamento dei dati di convalida prima di ogni convalida della rete neurale. Se la dimensione del mini-batch non suddivide in modo uniforme il numero di campioni di addestramento, il software scarta i dati di addestramento che non si adattano al mini-batch finale completo di ciascuna epoca. Per evitare di scartare gli stessi dati per ogni epoca, impostare l’opzione di addestramento Shuffle su "every-epoch".

Questa opzione supporta solo i solver stocastici (quando l'argomento solverName è "sgdm", "adam" o "rmsprop").

Velocità di apprendimento iniziale usata per l’addestramento, specificata come uno scalare positivo.

Se la velocità di apprendimento è troppo bassa, l’addestramento può richiedere più tempo. Se la velocità di apprendimento è troppo alta, l’addestramento potrebbe raggiungere un risultato non ottimale o deviare.

Questa opzione supporta solo i solver stocastici (quando l'argomento solverName è "sgdm", "adam" o "rmsprop").

Quando solverName è "sgdm", il valore predefinito è 0.01. Quando solverName è "rmsprop" o "adam", il valore predefinito è 0.001.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Opzione per la riduzione della velocità di apprendimento durante l'addestramento, specificata come uno di questi valori:

  • "none": mantenimento della velocità di apprendimento costante durante l'addestramento.

  • "piecewise": aggiornamento periodico della velocità di apprendimento tramite la moltiplicazione per un fattore di caduta. Per specificare il periodo, utilizzare l'opzione di addestramento LearnRateDropPeriod. Per specificare il fattore di caduta, utilizzare l'opzione di addestramento LearnRateDropFactor.

Questa opzione supporta solo i solver stocastici (quando l'argomento solverName è "sgdm", "adam" o "rmsprop").

Numero di epoche per la riduzione della velocità di apprendimento, specificata come numero intero positivo. Questa opzione è valida solo quando l’opzione di addestramento LearnRateSchedule è "piecewise".

Il software moltiplica la velocità di apprendimento globale per il fattore di riduzione ogni volta che passa il numero di epoche specificato. Specificare il fattore di riduzione utilizzando l’opzione di addestramento LearnRateDropFactor.

Questa opzione supporta solo i solver stocastici (quando l'argomento solverName è "sgdm", "adam" o "rmsprop").

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Fattore per la riduzione della velocità di apprendimento, specificato come uno scalare da 0 a 1. Questa opzione è valida solo quando l’opzione di addestramento LearnRateSchedule è "piecewise".

LearnRateDropFactor è un fattore di moltiplicazione da applicare alla velocità di apprendimento ogni volta che passa un certo numero di epoche. Specificare il numero di epoche utilizzando l’opzione di addestramento LearnRateDropPeriod.

Questa opzione supporta solo i solver stocastici (quando l'argomento solverName è "sgdm", "adam" o "rmsprop").

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Contributo della fase di aggiornamento dei parametri dell’iterazione precedente a quella attuale della discesa stocastica del gradiente con momento, specificato come uno scalare da 0 a 1.

Un valore di 0 indica l’assenza di contributo dalla fase precedente, mentre un valore di 1 indica un contributo massimo dalla fase precedente. Il valore predefinito funziona bene per la maggior parte delle attività.

Questa opzione supporta solo il solver SGDM (quando l'argomento solverName è "sgdm").

Per ulteriori informazioni, vedere Discesa stocastica del gradiente con momento.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Velocità di decadimento della media mobile del gradiente per il solver Adam, specificata come uno scalare non negativo inferiore a 1. La velocità di decadimento del gradiente è indicata da β1 nella sezione Stima adattiva del momento.

Questa opzione supporta solo il solver Adam (quando l'argomento solverName è "adam").

Per ulteriori informazioni, vedere Stima adattiva del momento.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Velocità di decadimento della media mobile del gradiente quadratico per i solver Adam e RMSProp, specificata come uno scalare non negativo inferiore a 1. La velocità di decadimento del gradiente quadratico è indicata con β2 in [4].

Valori tipici della velocità di decadimento 0.9, 0.99 e 0.999, che corrispondono rispettivamente alle lunghezze medie degli aggiornamenti dei parametri 10, 100 e 1000.

Questa opzione supporta solo i solver Adam e RMSProp (quando l'argomento solverName è "adam" o "rmsprop").

Il valore predefinito per il solver Adam è 0.999. Il valore predefinito per il solver RMSProp è 0.9.

Per ulteriori informazioni, vedere Stima adattiva del momento e Propagazione quadratica media.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Offset del denominatore per i solver Adam e RMSProp, specificato come uno scalare positivo.

Il solver aggiunge l’offset al denominatore negli aggiornamenti dei parametri della rete neurale per evitare una divisione per zero. Il valore predefinito funziona bene per la maggior parte delle attività.

Questa opzione supporta solo i solver Adam e RMSProp (quando l'argomento solverName è "adam" o "rmsprop").

Per ulteriori informazioni, vedere Stima adattiva del momento e Propagazione quadratica media.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Opzioni del solver L-BFGS

comprimi tutto

Da R2023b

Numero massimo di iterazioni da utilizzare per l'addestramento, specificato come numero intero positivo.

Il solver L-BFGS è un solver full-batch, ossia elabora l'intero set di addestramento in un'unica iterazione.

Questa opzione supporta solo il solver L-BFGS (quando l'argomento solverName è "lbfgs").

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Da R2023b

Metodo per trovare la velocità di apprendimento adatta, specificato come uno di questi valori:

  • "weak-wolfe": ricerca di una velocità di apprendimento che soddisfi le condizioni deboli di Wolfe. Questo metodo mantiene un'approssimazione definita positiva della matrice hessiana inversa.

  • "strong-wolfe": ricerca di una velocità di apprendimento che soddisfi le condizioni forti di Wolfe. Questo metodo mantiene un'approssimazione definita positiva della matrice hessiana inversa.

  • "backtracking": ricerca di una velocità di apprendimento che soddisfi sufficienti condizioni di diminuzione. Questo metodo non mantiene un'approssimazione definita positiva della matrice hessiana inversa.

Questa opzione supporta solo il solver L-BFGS (quando l'argomento solverName è "lbfgs").

Da R2023b

Numero di aggiornamenti di stato da memorizzare, specificato come numero intero positivo. I valori compresi tra 3 e 20 sono adatti per la maggior parte delle attività.

L'algoritmo L-BFGS utilizza uno storico dei calcoli del gradiente per approssimare la matrice hessiana in modo ricorsivo. Per ulteriori informazioni, vedere Limited-Memory BFGS.

Questa opzione supporta solo il solver L-BFGS (quando l'argomento solverName è "lbfgs").

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Da R2023b

Valore iniziale che caratterizza la matrice hessiana inversa approssimata, specificato come scalare positivo.

Per limitare l'utilizzo della memoria, l'algoritmo L-BFGS non memorizza e inverte la matrice hessiana densa B. L'algoritmo utilizza invece l'approssimazione Bkm1λkI, dove m è la dimensione storica, il fattore hessiano inverso λk è uno scalare e I è la matrice di identità. L'algoritmo memorizza quindi solo il fattore hessiano scalare inverso. L'algoritmo aggiorna il fattore hessiano inverso a ciascuna fase temporale.

Il fattore hessiano iniziale inverso è il valore di λ0.

Per ulteriori informazioni, vedere Limited-Memory BFGS.

Questa opzione supporta solo il solver L-BFGS (quando l'argomento solverName è "lbfgs").

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Da R2023b

Numero massimo di iterazioni della ricerca lineare per la determinazione della velocità di apprendimento, specificato come numero intero positivo.

Questa opzione supporta solo il solver L-BFGS (quando l'argomento solverName è "lbfgs").

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Da R2023b

Tolleranza del gradiente relativo, specificata come scalare positivo.

Il software arresta l'addestramento quando il gradiente relativo è inferiore o uguale a GradientTolerance.

Questa opzione supporta solo il solver L-BFGS (quando l'argomento solverName è "lbfgs").

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Da R2023b

Tolleranza della dimensione del passo, specificata come scalare positivo.

Il software arresta l'addestramento quando il passo che l'algoritmo compie è inferiore o uguale a StepTolerance.

Questa opzione supporta solo il solver L-BFGS (quando l'argomento solverName è "lbfgs").

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Convalida

comprimi tutto

Dati da utilizzare per la convalida durante l'addestramento, specificati come [], datastore, tabella, array di celle o oggetto minibatchqueue contenente i predittori e i target di convalida.

Durante l'addestramento, il software utilizza i dati di convalida per calcolare la perdita di convalida e i valori della metrica. Per specificare la frequenza di convalida, utilizzare l’opzione di addestramento ValidationFrequency. È inoltre possibile utilizzare i dati di convalida per arrestare automaticamente l'addestramento quando la metrica dell'obiettivo di convalida smette di migliorare. Per impostazione predefinita, la metrica dell'obiettivo è impostata su perdita. Per abilitare l’arresto automatico della convalida, utilizzare l’opzione di addestramento ValidationPatience.

Se ValidationData è [], il software non convalida la rete neurale durante l’addestramento.

Se la rete neurale presenta dei livelli che si comportano in modo diverso durante la previsione rispetto all'addestramento (ad esempio, i livelli di dropout), la perdita della convalida può essere inferiore a quella dell'addestramento.

Il software rimescola i dati di convalida in base all'opzione di addestramento Shuffle. Se Shuffle è "every-epoch", il software rimescola i dati di convalida prima di ciascuna convalida della rete neurale.

I formati supportati dipendono dalla funzione di addestramento utilizzata.

Funzione trainnet

Specificare i dati di convalida come datastore, oggetto minibatchqueue o array di celle {predictors,targets}, dove predictors contiene i predittori di convalida e targets contiene i target di convalida. Specificare i predittori e i target di convalida utilizzando uno dei formati supportati dalla funzione trainnet.

Per ulteriori informazioni, vedere gli argomenti di input della funzione trainnet.

Funzione trainBERTDocumentClassifier (Text Analytics Toolbox)

Specificare i dati di convalida come uno di questi valori:

  • Array di celle {documents,targets}, dove documents contiene i documenti di input e targets contiene le etichette dei documenti.

  • Tabella, dove la prima variabile contiene i documenti di input e la seconda le etichette dei documenti.

Per ulteriori informazioni, vedere gli argomenti di input della funzione trainBERTDocumentClassifier (Text Analytics Toolbox).

Frequenza di convalida della rete neurale in numero di interazioni, specificata come un numero intero positivo.

Il valore ValidationFrequency è il numero di iterazioni tra le valutazioni delle metriche di convalida. Per specificare i dati di convalida, utilizzare l’opzione di addestramento ValidationData.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Attesa dell’arresto della convalida dell’addestramento della rete neurale, specificata come un numero intero positivo o Inf.

ValidationPatience specifica il numero di volte in cui la metrica dell'obiettivo sul set di convalida può essere peggiore o uguale al valore migliore precedente prima che l'addestramento della rete neurale si arresti. Se ValidationPatience è Inf, i valori della metrica di convalida non comportano l'arresto anticipato dell'addestramento. Il software mira a massimizzare o minimizzare la metrica, come specificato dalla proprietà Maximize della metrica. Quando la metrica dell'obiettivo è "loss", il software mira a minimizzare il valore della perdita.

La rete neurale ripristinata dipende dall’opzione di addestramento OutputNetwork. Per ripristinare la rete neurale con il miglior valore della metrica di convalida, impostare l'opzione di addestramento OutputNetwork su "best-validation".

Prima di R2024a: Il software calcola l'attesa di convalida utilizzando il valore della perdita di convalida.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Rete neurale da ripristinare al completamento dell’addestramento, specificata come uno dei seguenti:

  • "auto": utilizzo di "best-validation" se ValidationData è specificato. In caso contrario, utilizzo di "last-iteration".

  • "best-validation": ripristino della rete neurale corrispondente all'iterazione di addestramento con il miglior valore della metrica di convalida, dove la metrica da ottimizzare è specificata dall'opzione ObjectiveMetricName. Per utilizzare questa opzione, specificare l’opzione di addestramento ValidationData.

  • "last-iteration": ripristino della rete neurale che corrisponde all’ultima iterazione di addestramento.

Regolarizzazione e normalizzazione

comprimi tutto

Fattore per la regolarizzazione L2 (decadimento dei pesi), specificato come scalare non negativo. Per ulteriori informazioni, vedere Regolarizzazione L2.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Opzione per ripristinare la normalizzazione del livello di input, specificata come uno dei seguenti:

  • 1 (true): ripristino delle statistiche di normalizzazione del livello di input e ricalcolo al momento dell'addestramento.

  • 0 (false): calcolo delle statistiche di normalizzazione al momento dell'addestramento quando queste sono vuote.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Modalità per valutare le statistiche nei livelli di normalizzazione batch, specificata come uno dei seguenti:

  • "population": utilizzo delle statistiche sulla popolazione. Dopo l'addestramento, il software finalizza le statistiche passando ancora una volta per i dati di addestramento e utilizza la media e la varianza risultanti.

  • "moving": approssimazione delle statistiche durante l'addestramento utilizzando una stima corrente data dalle fasi di aggiornamento

    μ*=λμμ^+(1λμ)μσ2*=λσ2σ2^+(1-λσ2)σ2

    , dove μ* e σ2* indicano rispettivamente la media aggiornata e la varianza, λμ e λσ2 indicano rispettivamente i valori di decadimento della media e della varianza, μ^ e σ2^ indicano rispettivamente la media e la varianza del livello di input e μ e σ2 indicano rispettivamente i valori più recenti della media mobile e della varianza. Dopo l'addestramento, il software utilizza il valore più recente delle statistiche della media mobile e della varianza. Questa opzione supporta unicamente l’addestramento di CPU e GPU singole.

  • "auto": utilizzo dell'opzione "moving".

Ridimensionamento del gradiente

comprimi tutto

Soglia del gradiente, specificata come Inf o uno scalare positivo. Se il gradiente supera il valore di GradientThreshold, il gradiente viene ridimensionato secondo l’opzione di addestramento GradientThresholdMethod.

Per ulteriori informazioni, vedere Gradient Clipping (Ridimensionamento del gradiente).

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Metodo di soglia del gradiente usato per ridimensionare i valori del gradiente che superano la soglia, specificato come uno dei seguenti:

  • "l2norm": se la norma L2 del gradiente di un parametro apprendibile è superiore a GradientThreshold, ridimensionare il gradiente affinché la norma L2 sia uguale a GradientThreshold.

  • "global-l2norm": se la norma globale L2, L, è superiore a GradientThreshold, ridimensionare tutti i gradienti di un fattore di GradientThreshold/L. La norma globale L2 tiene in considerazione tutti i parametri apprendibili.

  • "absolute-value": se il valore assoluto di una singola derivata parziale nel gradiente di un parametro apprendibile è superiore a GradientThreshold, ridimensionare la derivata parziale affinché abbia una magnitudine uguale a GradientThreshold e conservi il segno della derivata parziale.

Per ulteriori informazioni, vedere Gradient Clipping (Ridimensionamento del gradiente).

Sequenza

comprimi tutto

Opzione per riempire, troncare o suddividere le sequenze di input, specificata come uno di questi valori:

  • "longest": riempimento delle sequenze in ogni mini-batch in modo che abbiano la stessa lunghezza della sequenza più lunga. Questa opzione non scarta nessun dato, sebbene il riempimento possa introdurre rumore nella rete neurale.

  • "shortest": troncamento delle sequenze in ogni mini-batch in modo che abbiano la stessa lunghezza della sequenza più corta. Questa opzione garantisce che non venga aggiunto alcun riempimento, con il rischio di scartare dei dati.

Per saperne di più sugli effetti di riempimento e troncamento delle sequenze, vedere Sequence Padding and Truncation.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

Direzione di inserimento o troncamento, specificata come uno dei seguenti:

  • "right": riempimento o troncamento delle sequenze a destra. Le sequenze hanno inizio nella stessa fase temporale e il software tronca o aggiunge riempimenti al termine delle sequenze.

  • "left": riempimento o troncamento delle sequenze a sinistra. Il software tronca o aggiunge riempimenti all’inizio delle sequenze in modo tale che queste terminino nella stessa fase temporale.

Dato che i livelli ricorrenti elaborano i dati sequenziali una fase temporale alla volta, quando la proprietà OutputMode del livello ricorrente è "last", qualsiasi riempimento nelle fasi temporali finali può influire negativamente sull’output del livello. Per riempire o troncare i dati sequenziali a sinistra, impostare l’opzione SequencePaddingDirection su "left".

Per le reti neurali sequenza-sequenza (quando la proprietà OutputMode è "sequence" per ogni livello ricorrente), qualsiasi riempimento nelle fasi temporali iniziali può influire negativamente sulle previsioni per le fasi temporali precedenti. Per riempire o troncare i dati sequenziali a destra, impostare l’opzione SequencePaddingDirection su "right".

Per saperne di più sugli effetti di riempimento e troncamento delle sequenze, vedere Sequence Padding and Truncation.

Valore in base al quale riempire le sequenze di input, specificato come uno scalare.

Non riempire le sequenze con NaN, perché altrimenti si potrebbero produrre errori in tutta la rete neurale.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Hardware e accelerazione

comprimi tutto

Risorsa hardware per l'addestramento della rete neurale, specificata come uno di questi valori:

  • "auto": utilizzo di una GPU locale, se disponibile. In caso contrario, utilizzo della CPU locale.

  • "cpu": utilizzo della CPU locale.

  • "gpu": utilizzo della GPU locale.

  • "multi-gpu": utilizzo di più GPU su una macchina, usando un pool parallelo locale basato sul profilo cluster predefinito. In caso di assenza di un pool parallelo attuale, il software avvia un pool parallelo con una dimensione pari al numero di GPU disponibili.

  • "parallel-auto": utilizzo di un pool parallelo locale o remoto. In caso di assenza di un pool parallelo attuale, il software ne avvia uno utilizzando il profilo cluster predefinito. Se il pool ha accesso alle GPU, unicamente i worker con una sola GPU eseguono i calcoli per l'addestramento e i worker in eccesso diventano inattivi. Se il pool non ha GPU, l’addestramento avviene invece su tutti i worker della CUP disponibili. (da R2024a)

    Prima di R2024a: Utilizzare "parallel" in sostituzione.

  • "parallel-cpu": utilizzo delle risorse della CPU in un pool parallelo locale o remoto, ignorando qualsiasi GPU. In caso di assenza di un pool parallelo attuale, il software ne avvia uno utilizzando il profilo cluster predefinito. (da R2023b)

  • "parallel-gpu": utilizzo delle GPU in un pool parallelo locale o remoto. I worker in eccesso diventano inattivi. In caso di assenza di un pool parallelo attuale, il software ne avvia uno utilizzando il profilo cluster predefinito. (da R2023b)

Le opzioni "gpu", "multi-gpu", "parallel-auto", "parallel-cpu" e "parallel-gpu" richiedono Parallel Computing Toolbox™. Per utilizzare una GPU per il Deep Learning, occorre avere anche un dispositivo GPU supportato. Per informazioni sui dispositivi supportati, vedere GPU Computing Requirements (Parallel Computing Toolbox). Se si sceglie una di queste opzioni e Parallel Computing Toolbox o se una GPU adatta non è disponibile, il software restituisce un errore.

Per ulteriori informazioni su quando utilizzare i diversi ambienti di esecuzione, vedere Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud.

Per vedere un miglioramento nelle performance durante l’addestramento in parallelo, cercare di ridimensionare le opzioni di addestramento MiniBatchSize e InitialLearnRate del numero di GPU.

Le opzioni "multi-gpu", "parallel-auto", "parallel-cpu" e "parallel-gpu" supportano solo i solver stocastici (quando l'argomento solverName è "sgdm", "adam" o "rmsprop").

Da R2024a

Ambiente per l'acquisizione e la pre-elaborazione dei dati da un datastore durante l'addestramento, specificato come uno di questi valori:

  • "serial": acquisizione e pre-elaborazione dei dati in seriale.

  • "background": acquisizione e pre-elaborazione dei dati utilizzando il pool in background.

  • "parallel": acquisizione e pre-elaborazione dei dati utilizzando i worker in parallelo. Se non è ancora aperto un pool locale, il software apre un pool parallelo utilizzando il profilo predefinito. I pool paralleli non locali non sono supportati. L'utilizzo di questa opzione richiede Parallel Computing Toolbox. Questa opzione non è supportata quando l'addestramento avviene in parallelo (quando l'opzione ExecutionEnvironment è "parallel-auto", "parallel-cpu", "parallel-gpu" o "multi-gpu").

Per utilizzare le opzioni "background" o "parallel", il datastore di input deve essere suddivisibile o divisibile in partizioni. I datastore personalizzati devono implementare la classe matlab.io.datastore.Subsettable.

Le opzioni "background" e "parallel" non sono supportate quando l'opzione Shuffle è "never".

Utilizzare le opzioni "background" o "parallel" quando i mini-batch richiedono una pre-elaborazione consistente. Per ulteriori informazioni sull'ambiente di pre-elaborazione, vedere Use Datastore for Parallel Training and Background Preprocessing.

Questa opzione supporta solo i solver stocastici (quando l'argomento solverName è "sgdm", "adam" o "rmsprop").

Prima di R2024a: Per pre-elaborare i dati in parallelo, impostare l'opzione di addestramento DispatchInBackground su 1 (true).

Da R2024a

Ottimizzazione della performance, specificata come uno di questi valori:

  • "auto": applicazione automatica di una serie di ottimizzazioni adatte alla rete di input e alle risorse hardware.

  • "none": disabilitazione di tutte le ottimizzazioni.

Checkpoint

comprimi tutto

Percorso per salvare le reti neurali con checkpoint, specificato come scalare di stringa o vettore di carattere.

  • Se non si specifica un percorso (ossia si usa il "" predefinito), il software non salva nessuna rete neurale con checkpoint.

  • Se si specifica un percorso, il software salva le reti neurali con checkpoint in questo percorso e assegna un nome univoco a ciascuna rete neurale. È quindi possibile caricare qualsiasi rete neurale con checkpoint e riprendere l’addestramento da quella rete neurale.

    Se la cartella non esiste, occorre innanzitutto crearla prima di specificare il percorso per salvare le reti neurali con checkpoint. Se il percorso specificato non esiste, il software lancia un errore.

Tipi di dati: char | string

Frequenza di salvataggio delle reti neurali con checkpoint, specificata come un numero intero positivo.

Se solverName è "lbfgs" o CheckpointFrequencyUnit è "iteration", il software salva le reti neurali con checkpoint ogni CheckpointFrequency iterazioni. In caso contrario, il software salva le reti neurali con checkpoint ogni CheckpointFrequency epoche.

Quando solverName è "sgdm", "adam" o "rmsprop", il valore predefinito è 1. Quando solverName è "lbfgs", il valore predefinito è 30.

Questa opzione ha effetto solo quando CheckpointPath non è vuoto.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Unità di frequenza del checkpoint, specificata come "epoch" o "iteration".

Se CheckpointFrequencyUnit è "epoch", il software salva le reti neurali con checkpoint ogni CheckpointFrequency epoche.

Se CheckpointFrequencyUnit è "iteration", il software salva le reti neurali con checkpoint ogni CheckpointFrequency iterazioni.

Questa opzione ha effetto solo quando CheckpointPath non è vuoto.

Questa opzione supporta solo i solver stocastici (quando l'argomento solverName è "sgdm", "adam" o "rmsprop").

Argomenti di output

comprimi tutto

Opzioni di addestramento, restituite come oggetto TrainingOptionsSGDM, TrainingOptionsRMSProp, TrainingOptionsADAM o TrainingOptionsLBFGS. Per addestrare una rete neurale, utilizzare le opzioni di addestramento come un argomento di input nella funzione trainnet.

Se solverName è "sgdm", "rmsprop", "adam" o "lbfgs", le opzioni di addestramento sono restituite rispettivamente come oggetto TrainingOptionsSGDM, TrainingOptionsRMSProp, TrainingOptionsADAM o TrainingOptionsLBFGS.

Suggerimenti

  • Per la maggior parte delle attività di Deep Learning, è possibile utilizzare una rete neurale preaddestrata e adattarla ai propri dati. Per un esempio su come utilizzare il transfer learning per riaddestrare una rete neurale convoluzionale per classificare un nuovo set di immagini, vedere Retrain Neural Network to Classify New Images. In alternativa, è possibile creare e addestrare reti neurali da zero utilizzando le funzioni trainnet e trainingOptions.

    Se la funzione trainingOptions non fornisce le opzioni di addestramento necessarie per l’attività, è possibile creare un loop di addestramento personalizzato usando la differenziazione automatica. Per saperne di più, vedere Train Network Using Custom Training Loop.

    Se la funzione trainnet non fornisce la funzione di perdita necessaria per l'attività, è possibile specificare una funzione di perdita personalizzata su trainnet come handle della funzione. Per le funzioni di perdita che richiedono più input rispetto alle previsioni e ai target (ad esempio, le funzioni di perdita che richiedono l'accesso alla rete neurale o ulteriori input), addestrare il modello utilizzando un loop di addestramento personalizzato. Per saperne di più, vedere Train Network Using Custom Training Loop.

    Se Deep Learning Toolbox™ non fornisce i livelli necessari per l’attività, è possibile creare un livello personalizzato. Per saperne di più, vedere Define Custom Deep Learning Layers. Per i modelli che non possono essere specificati come reti di livelli, è possibile definire il modello come funzione. Per saperne di più, vedere Train Network Using Model Function.

    Per ulteriori informazioni sul metodo di addestramento da utilizzare per un determinato compito, vedere Train Deep Learning Model in MATLAB.

Algoritmi

comprimi tutto

Pesi e bias iniziali

Per i livelli convoluzionali e completamente connessi, l’inizializzazione dei pesi e dei bias è data rispettivamente dalle proprietà dei livelli WeightsInitializer e BiasInitializer. Per esempi che mostrano come modificare l’inizializzazione dei pesi e dei bias, vedere Specify Initial Weights and Biases in Convolutional Layer e Specify Initial Weights and Biases in Fully Connected Layer.

Discesa stocastica del gradiente

L’algoritmo di discesa del gradiente standard aggiorna i parametri della rete (pesi e bias) per minimizzare la funzione di perdita spostandosi di poco a ogni iterazione nella direzione del gradiente negativo della perdita,

θ+1=θαE(θ),

dove è il numero di iterazioni, α>0 è la velocità di apprendimento, θ è il vettore del parametro e E(θ) è la funzione di perdita. Nell’algoritmo di discesa del gradiente standard, il gradiente della funzione di perdita, E(θ), viene valutato usando l’intero set di addestramento e l’algoritmo di discesa del gradiente standard usa subito l’intero set di dati.

Invece, a ogni iterazione l’algoritmo di discesa stocastica del gradiente valuta il gradiente e aggiorna i parametri utilizzando un sottoinsieme dei dati di addestramento. A ogni iterazione viene usato un sottoinsieme diverso, chiamato mini-batch. Un passaggio completo dell'algoritmo di addestramento lungo l’intero set di addestramento usando mini-batch è un’epoca. La discesa stocastica del gradiente è stocastica perché gli aggiornamenti dei parametri calcolati usando un mini-batch sono una stima del rumore dell’aggiornamento dei parametri che risulterebbe usando l’intero set di dati.

Discesa stocastica del gradiente con momento

L’algoritmo di discesa stocastica del gradiente può oscillare lungo il percorso di discesa più ripida verso il valore ottimale. Aggiungere un termine di momento all’aggiornamento dei parametri è un modo per ridurre questa oscillazione [2]. L'aggiornamento della discesa stocastica del gradiente con momento (SGDM) è

θ+1=θαE(θ)+γ(θθ1),

dove la velocità di apprendimento α e il valore del momento γ determinano il contributo della fase del gradiente precedente all'iterazione attuale.

Propagazione quadratica media

La discesa stocastica del gradiente con momento usa un’unica velocità di apprendimento per tutti i parametri. Gli altri algoritmi di ottimizzazione cercano di migliorare l’addestramento della rete usando velocità di apprendimento diverse per parametro e possono adattarsi automaticamente alla funzione di perdita ottimizzata. La propagazione quadratica media (RMSProp) è uno di questi algoritmi. Mantiene una media mobile dei quadrati elemento per elemento dei gradienti del parametro,

v=β2v1+(1β2)[E(θ)]2

β2 è il fattore di decadimento del gradiente quadratico della media mobile. Valori comuni della velocità di decadimento sono 0,9, 0,99 e 0,999. Le lunghezze medie corrispondenti dei gradienti quadratici uguali a 1/(1-β2), ossia rispettivamente gli aggiornamenti dei parametri 10, 100 e 1000. L’algoritmo RMSProp usa questa media mobile per normalizzare gli aggiornamenti di ogni parametro singolarmente,

θ+1=θαE(θ)v+ϵ

dove la divisione avviene elemento per elemento. Utilizzare RMSProp in modo efficace riduce le velocità di apprendimento dei parametri con gradienti grandi e aumenta i parametri di apprendimento dei parametri con gradienti piccoli. ɛ è una costante ridotta aggiunta per evitare una divisione per zero.

Stima adattiva del momento

La stima adattiva del momento (Adam) [4] utilizza un aggiornamento del parametro simile a RMSProp, ma con un termine di momento aggiunto. Mantiene una media mobile elemento per elemento sia dei gradienti del parametro che dei relativi valori quadratici,

m=β1m1+(1β1)E(θ)

v=β2v1+(1β2)[E(θ)]2

Le velocità di decadimento β1 e β2 sono rispettivamente i fattori di decadimento del gradiente e di decadimento del gradiente quadratico. Adam utilizza le medie mobili per aggiornare i parametri della rete come

θ+1=θαmlvl+ϵ

Il valore α è la velocità di apprendimento. Se i gradienti di diverse iterazioni sono simili, l'utilizzo di una media mobile del gradiente consente agli aggiornamenti dei parametri di acquisire il momento in una certa direzione. Se i gradienti contengono soprattutto rumore, la media mobile del gradiente si riduce e di conseguenza si riducono anche gli aggiornamenti dei parametri. L’aggiornamento di Adam completo include anche un meccanismo per correggere un bias che compare all’inizio dell’addestramento. Per ulteriori informazioni, vedere [4].

Memoria limitata BFGS

L'algoritmo L-BFGS [5] è un metodo quasi-Newton che approssima l'algoritmo Broyden-Fletcher-Goldfarb-Shanno (BFGS). Utilizzare l'algoritmo L-BFGS per reti e set di dati di piccole dimensioni che possono essere elaborati in un unico batch.

L'algoritmo aggiorna i parametri apprendibili W all'iterazione k+1 utilizzando il passo di aggiornamento dato da

Wk+1=WkηkBk1J(Wk),

dove Wk specifica i pesi all'iterazione k, ηk è la velocità di apprendimento all'iterazione k, Bk è un'approssimazione della matrice hessiana all'iterazione k e J(Wk) specifica i gradienti della perdita rispetto ai parametri apprendibili all'iterazione k.

L'algoritmo L-BFGS calcola direttamente il prodotto matrice-vettore Bk1J(Wk). L'algoritmo non richiede il calcolo dell'inverso di Bk.

Per limitare l'utilizzo della memoria, l'algoritmo L-BFGS non memorizza e inverte la matrice hessiana densa B. L'algoritmo utilizza invece l'approssimazione Bkm1λkI, dove m è la dimensione storica, il fattore hessiano inverso λk è uno scalare e I è la matrice di identità. L'algoritmo memorizza quindi solo il fattore hessiano scalare inverso. L'algoritmo aggiorna il fattore hessiano inverso a ciascuna fase temporale.

Per calcolare direttamente il prodotto matrice-vettore Bk1J(Wk), l'algoritmo L-BFGS utilizza questo algoritmo ricorsivo:

  1. Impostare r=Bkm1J(Wk), dove m è la dimensione storica.

  2. Per i=m,,1:

    1. Lasciare β=1skiykiykir, dove ski e yki sono rispettivamente le differenze di passo e di gradiente per l'iterazione ki.

    2. Impostare r=r+ski(akiβ), dove a è derivata da s, y e dai gradienti della perdita rispetto alla funzione di perdita. Per ulteriori informazioni, vedere [5].

  3. Ripristinare Bk1J(Wk)=r.

Ridimensionamento del gradiente

Se i gradienti aumentano esponenzialmente in magnitudine, l’addestramento è instabile e può deviare nel giro di qualche iterazione. Questa “esplosione del gradiente” è indicata da una perdita di addestramento che va verso NaN o Inf. Il ridimensionamento del gradiente aiuta a evitare l’esplosione del gradiente stabilizzando l’addestramento a velocità di apprendimento superiori e in presenza di outlier [3]. Il ridimensionamento del gradiente permette alle reti di essere addestrate più velocemente e di solito non influisce sulla precisione dell’attività appresa.

Esistono due tipi di ridimensionamento del gradiente.

  • Il ridimensionamento del gradiente basato sulla norma ridimensiona il gradiente in base a una soglia e non modifica la direzione del gradiente. I valori "l2norm" e "global-l2norm" di GradientThresholdMethod sono metodi di ridimensionamento del gradiente basato sulla norma.

  • Il ridimensionamento del gradiente basato sul valore ridimensiona una derivata parziale superiore alla soglia, che può risultare in un cambiamento arbitrario di direzione del gradiente. Il ridimensionamento del gradiente basato sul valore può avere un comportamento imprevedibile, ma cambiamenti sufficientemente piccoli non causano la deviazione della rete. Il valore "absolute-value" di GradientThresholdMethod è un metodo di ridimensionamento del gradiente basato sul valore.

Regolarizzazione L2

Aggiungere un termine di regolarizzazione per i pesi alla funzione di perdita E(θ) è un modo per ridurre il sovraadattamento [1], [2]. Il termine di regolarizzazione è chiamato anche decadimento dei pesi. La funzione di perdita con il termine di regolarizzazione assume la forma

ER(θ)=E(θ)+λΩ(w),

dove w è il vettore di peso, λ è il fattore di regolarizzazione (coefficiente) e la funzione di regolarizzazione Ω(w) è

Ω(w)=12wTw.

Si noti che i bias non sono regolarizzati [2]. È possibile specificare il fattore di regolarizzazione λ usando l’opzione di addestramento L2Regularization. È inoltre possibile specificare diversi fattori di regolarizzazione per livelli e parametri diversi.

La funzione di perdita che il software usa per l’addestramento della rete include il termine di regolarizzazione. Tuttavia, il valore di perdita visualizzato nella finestra di comando e nel grafico dei progressi dell’addestramento durante l’addestramento indica unicamente la perdita sui dati e non include il termine di regolarizzazione.

Riferimenti

[1] Bishop, C. M. Pattern Recognition and Machine Learning. Springer, New York, NY, 2006.

[2] Murphy, K. P. Machine Learning: A Probabilistic Perspective. The MIT Press, Cambridge, Massachusetts, 2012.

[3] Pascanu, R., T. Mikolov, and Y. Bengio. "On the difficulty of training recurrent neural networks". Proceedings of the 30th International Conference on Machine Learning. Vol. 28(3), 2013, pp. 1310–1318.

[4] Kingma, Diederik, and Jimmy Ba. "Adam: A method for stochastic optimization." arXiv preprint arXiv:1412.6980 (2014).

[5] Liu, Dong C., and Jorge Nocedal. "On the limited memory BFGS method for large scale optimization." Mathematical programming 45, no. 1 (August 1989): 503-528. https://doi.org/10.1007/BF01589116.

Cronologia versioni

Introdotto in R2016a

espandi tutto