exponenta event banner

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

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

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

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

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

  1. Glorot Initializer - инициализация входных весов инициализатором Glorot. [1]

  2. He Initializer - инициализация входных весов инициализатором He. [2]

  3. Narrow-Normal Initializer (Узко-нормальный инициализатор) - инициализация входных весов путем независимой выборки из нормального распределения с нулевым средним значением и стандартным отклонением 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);

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

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

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

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

[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. Он, Каймин, Сянъу Чжан, Шаоцин Жэнь и Цзянь Сунь. «Углубляясь в выпрямители: Превосходя показатели человеческого уровня по классификации имаженетов». В трудах международной конференции IEEE по компьютерному зрению, стр. 1026-1034. 2015.

См. также

|

Связанные темы