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

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

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

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

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

  1. Инициализатор Glorot - Инициализируйте входные веса с помощью инициализатора Glorot. [1]

  2. Инициализатор - Инициализируйте входные веса с помощью инициализатора He. [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');

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

Задайте сетевую архитектуру, перечисленную ранее в примере, и установите инициализатор входных весов слоя 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);

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

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

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

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

[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. Глорот, Ксавьер и Йошуа Бенгио. «Понимание сложности настройки нейронных сетей с глубокой прямой связью». В Трудах тринадцатой международной конференции по искусственному интеллекту и статистике, стр. 249-256. 2010.

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

См. также

|

Похожие темы