Сравните инициализаторы веса слоя

В этом примере показано, как обучить нейронные сети для глубокого обучения с различными инициализаторами веса.

Когда обучение, нейронная сеть для глубокого обучения, инициализация весов слоя и смещения могут оказать большое влияние на то, как хорошо сеть обучается. Выбор инициализатора оказывает большее влияние на сети без слоев нормализации партии.

В зависимости от типа слоя можно изменить веса и сместить инициализацию с помощью 'WeightsInitializer', 'InputWeightsInitializer', 'RecurrentWeightsInitializer', и 'BiasInitializer' опции.

Этот пример показывает эффект использования этих трех различных инициализаторов веса при обучении сети LSTM:

  1. Инициализатор Glorot – Инициализирует входные веса инициализатором Glorot. [1]

  2. Он Инициализатор – Инициализирует входные веса Им инициализатор. [2]

  3. Узко-нормальный Инициализатор – Инициализирует входные веса путем независимой выборки от нормального распределения с нулевым средним и стандартным отклонением 0.01.

Загрузка данных

Загрузите японский набор данных Гласных. XTrain массив ячеек, содержащий 270 последовательностей различной длины с размерностью признаков 12. Y категориальный вектор из меток 1,2..., 9. Записи в XTrain матрицы с 12 строками (одна строка для каждого признака) и различным количеством столбцов (один столбец для каждого временного шага).

[XTrain,YTrain] = japaneseVowelsTrainData;
[XValidation,YValidation] = japaneseVowelsTestData;

Задайте сетевую архитектуру

Задайте сетевую архитектуру. Для каждого инициализатора используйте ту же сетевую архитектуру.

Задайте входной размер как 12 (количество функций входных данных). Задайте слой LSTM с 100 скрытыми модулями и выводить последний элемент последовательности. Наконец, задайте девять классов включением полносвязного слоя размера 9, сопровождаемый softmax слоем и слоем классификации.

numFeatures = 12;
numHiddenUnits = 100;
numClasses = 9;

layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer]
layers = 
  5x1 Layer array with layers:

     1   ''   Sequence Input          Sequence input with 12 dimensions
     2   ''   LSTM                    LSTM with 100 hidden units
     3   ''   Fully Connected         9 fully connected layer
     4   ''   Softmax                 softmax
     5   ''   Classification Output   crossentropyex

Опции обучения

Задайте опции обучения. Для каждого инициализатора используйте те же опции обучения, чтобы обучить сеть.

maxEpochs = 30;
miniBatchSize = 27;
numObservations = numel(XTrain);
numIterationsPerEpoch = floor(numObservations / miniBatchSize);

options = trainingOptions('adam', ...
    'ExecutionEnvironment','cpu', ...
    'MaxEpochs',maxEpochs, ...
    'MiniBatchSize',miniBatchSize, ...
    'GradientThreshold',2, ...
    'ValidationData',{XValidation,YValidation}, ...
    'ValidationFrequency',numIterationsPerEpoch, ...
    'Verbose',false, ...
    'Plots','training-progress');

Инициализатор Glorot

Задайте сетевую архитектуру, перечисленную ранее в примере, и установите входной инициализатор весов слоя LSTM и инициализатор весов полносвязного слоя к 'glorot'.

layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits,'OutputMode','last','InputWeightsInitializer','glorot')
    fullyConnectedLayer(numClasses,'WeightsInitializer','glorot')
    softmaxLayer
    classificationLayer];

Обучите сеть с помощью слоев с инициализаторами весов Glorot.

[netGlorot,infoGlorot] = trainNetwork(XTrain,YTrain,layers,options);

Он инициализатор

Задайте сетевую архитектуру, перечисленную ранее в примере, и установите входной инициализатор весов слоя LSTM и инициализатор весов полносвязного слоя к 'he'.

layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits,'OutputMode','last','InputWeightsInitializer','he')
    fullyConnectedLayer(numClasses,'WeightsInitializer','he')
    softmaxLayer
    classificationLayer];

Обучайтесь сеть с помощью слоев с Ним взвешивает инициализаторы.

[netHe,infoHe] = trainNetwork(XTrain,YTrain,layers,options);

Узко-нормальный инициализатор

Задайте сетевую архитектуру, перечисленную ранее в примере, и установите входной инициализатор весов слоя LSTM и инициализатор весов полносвязного слоя к 'narrow-normal'.

layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits,'OutputMode','last','InputWeightsInitializer','narrow-normal')
    fullyConnectedLayer(numClasses,'WeightsInitializer','narrow-normal')
    softmaxLayer
    classificationLayer];

Обучите сеть с помощью слоев с узко-нормальными инициализаторами весов.

[netNarrowNormal,infoNarrowNormal] = trainNetwork(XTrain,YTrain,layers,options);

Постройте результаты

Извлеките точность валидации из информационных структур выход от trainNetwork функция.

validationAccuracy = [
    infoGlorot.ValidationAccuracy;
    infoHe.ValidationAccuracy;
    infoNarrowNormal.ValidationAccuracy];

Векторы из точности валидации содержат NaN для итераций, что точность валидации не была вычислена. Удалите NaN значения.

idx = all(isnan(validationAccuracy));
validationAccuracy(:,idx) = [];

Для каждого из инициализаторов постройте числа эпохи против точности валидации.

figure
epochs = 0:maxEpochs;
plot(epochs,validationAccuracy)
title("Validation Accuracy")
xlabel("Epoch")
ylabel("Validation Accuracy")
legend(["Glorot" "He" "Narrow-Normal"],'Location','southeast')

Этот график показывает полный эффект различных инициализаторов и как быстро обучение сходится для каждого.

Библиография

  1. Glorot, Ксавьер и Иосуа Бенхио. "Изучая трудность учебных глубоких нейронных сетей прямого распространения". В Продолжениях тринадцатой международной конференции по вопросам искусственного интеллекта и статистики, стр 249-256. 2010.

  2. Он, Kaiming, Сянюй Чжан, Шаоцин Жэнь и Цзянь Сунь. "Копаясь глубоко в выпрямителях: Превосходная эффективность человеческого уровня на imagenet классификации". В Продолжениях международной конференции IEEE по вопросам компьютерного зрения, стр 1026-1034. 2015.

Смотрите также

|

Похожие темы