Инициализируйте настраиваемые параметры для функций модели

Когда обучение использование сети слои, графики слоев или dlnetwork объекты, программное обеспечение автоматически инициализирует настраиваемые параметры согласно свойствам инициализации слоя. При определении модели глубокого обучения как функции необходимо инициализировать настраиваемые параметры вручную.

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

Совет

Эта страница объясняет, как инициализировать настраиваемые параметры для моделей глубокого обучения, заданных как функции в пользовательском учебном цикле. Чтобы изучить, как задать, инициализация настраиваемого параметра для слоев глубокого обучения использует соответствующие свойства слоя. Например, чтобы установить инициализатор весов convolution2dLayer объект, используйте WeightsInitializer свойство.

Инициализации слоя по умолчанию

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

СлойНастраиваемый параметрИнициализация по умолчанию
convolution2dLayerВесаИнициализация Glorot
СмещениеНулевая инициализация
convolution3dLayerВесаИнициализация Glorot
СмещениеНулевая инициализация
groupedConvolution2dLayerВесаИнициализация Glorot
СмещениеНулевая инициализация
transposedConv2dLayerВесаИнициализация Glorot
СмещениеНулевая инициализация
transposedConv3dLayerВесаИнициализация Glorot
СмещениеНулевая инициализация
fullyConnectedLayerВесаИнициализация Glorot
СмещениеНулевая инициализация
batchNormalizationLayerСмещениеНулевая инициализация
ШкалаИнициализация единиц
lstmLayerВведите весаИнициализация Glorot
Текущие весаОртогональная инициализация
СмещениеМодуль забывает инициализацию логического элемента
gruLayerВведите весаИнициализация Glorot
Текущие весаОртогональная инициализация
СмещениеНулевая инициализация
wordEmbeddingLayerВесаГауссова Инициализация, со средним значением 0 и стандартным отклонением 0.01.

Размеры настраиваемого параметра

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

ОперацияНастраиваемый параметрРазмер
batchnormСмещение

[numChannels 1], где numChannels количество входных каналов.

Шкала

[numChannels 1], где numChannels количество входных каналов.

dlconvВеса

[filterSize numChannels numFilters], где filterSize 1 K вектор, задающий размер фильтра, numChannels количество входных каналов, numFilters количество фильтров и K количество пространственных размерностей.

Смещение

Одно из следующего:

  • [numFilters 1], где numFilters количество фильтров

  • [1 1]

dlconv (сгруппированный)Веса

[filterSize numChannelsPerGroup numFiltersPerGroup numGroups], где filterSize 1 K вектор, задающий размер фильтра, numChannelsPerGroup количество входных каналов для каждой группы, numFiltersPerGroup количество фильтров для каждой группы, numGroups количество групп и K количество пространственных размерностей.

Смещение

Одно из следующего:

  • [numFiltersPerGroup 1], где numFiltersPerGroup количество фильтров для каждой группы.

  • [1 1]

dltranspconvВеса

[filterSize numFilters numChannels], где filterSize 1 K вектор, задающий размер фильтра, numChannels количество входных каналов, numFilters количество фильтров и K количество пространственных размерностей.

Смещение

Одно из следующего:

  • [numFilters 1], где numFilters количество фильтров для каждой группы.

  • [1 1]

dltranspconv (сгруппированный)Веса

[filterSize numFiltersPerGroup numChannelsPerGroup numGroups], где filterSize 1 K вектор, задающий размер фильтра, numChannelsPerGroup количество входных каналов для каждой группы, numFiltersPerGroup количество фильтров для каждой группы, numGroups количество групп и K количество пространственных размерностей.

Смещение

Одно из следующего:

  • [numFiltersPerGroup 1], где numFiltersPerGroup количество фильтров для каждой группы.

  • [1 1]

fullyconnectВеса

[outputSize inputSize], где outputSize и inputSize количество выхода и входных каналов, соответственно.

Смещение

[outputSize 1], где outputSize количество выходных каналов.

gruВведите веса

[3*numHiddenUnits inputSize], где numHiddenUnits количество скрытых модулей операции и inputSize количество входных каналов.

Текущие веса

[3*numHiddenUnits numHiddenUnits], где numHiddenUnits количество скрытых модулей операции.

Смещение

[3*numHiddenUnits 1], где numHiddenUnits количество скрытых модулей операции.

lstmВведите веса

[4*numHiddenUnits inputSize], где numHiddenUnits количество скрытых модулей операции и inputSize количество входных каналов.

Текущие веса

[4*numHiddenUnits numHiddenUnits], где numHiddenUnits количество скрытых модулей операции.

Смещение

[4*numHiddenUnits 1], где numHiddenUnits количество скрытых модулей операции.

Инициализация Glorot

Glorot (также известный как Ксавьера) инициализатор [1] демонстрационные веса от равномерного распределения с границами [6No+Ni,6No+Ni], где значения No и Ni зависят от типа операции глубокого обучения:

ОперацияНастраиваемый параметрNoNi
dlconvВеса

prod(filterSize)*numFilters, где filterSize 1 K вектор, содержащий размер фильтра, numFilters количество фильтров и K количество пространственных размерностей.

prod(filterSize)*numChannels, где filterSize 1 K вектор, содержащий размер фильтра, numChannels количество входных каналов и K количество пространственных размерностей.

dlconv (сгруппированный)Веса

prod(filterSize)*numFiltersPerGroup, где filterSize 1 K вектор, содержащий размер фильтра, numFiltersPerGroup количество фильтров для каждой группы и K количество пространственных размерностей.

prod(filterSize)*numChannelsPerGroup, где filterSize 1 K вектор, содержащий размер фильтра, numChannelsPerGroup количество входных каналов для каждой группы и K количество пространственных размерностей.

dltranspconvВеса

prod(filterSize)*numFilters, где filterSize 1 K вектор, содержащий размер фильтра, numFilters количество фильтров и K количество пространственных размерностей.

prod(filterSize)*numChannels, где filterSize 1 K вектор, содержащий размер фильтра, numChannels количество входных каналов и K количество пространственных размерностей.

dltranspconv (сгруппированный)Веса

prod(filterSize)*numFiltersPerGroup, где filterSize 1 K вектор, содержащий размер фильтра, numFiltersPerGroup количество фильтров для каждой группы и K количество пространственных размерностей.

prod(filterSize)*numChannelsPerGroup, где filterSize 1 K вектор, содержащий размер фильтра, numChannelsPerGroup количество входных каналов для каждой группы и K количество пространственных размерностей.

fullyconnectВесаКоличество выходных каналов операцииКоличество входных каналов операции
gruВведите веса3*numHiddenUnits, где numHiddenUnits количество скрытых модулей операции.Количество входных каналов операции
Текущие веса3*numHiddenUnits, где numHiddenUnits количество скрытых модулей операции.Количество скрытых модулей операции.
lstmВведите веса4*numHiddenUnits, где numHiddenUnits количество скрытых модулей операции.Количество входных каналов операции
Текущие веса4*numHiddenUnits, где numHiddenUnits количество скрытых модулей операции.Количество скрытых модулей операции.

Чтобы инициализировать настраиваемые параметры с помощью инициализатора Glorot легко, можно задать пользовательскую функцию. Функциональный initializeGlorot, берет в качестве входа размер настраиваемых параметров sz и значения No и Ni (numOut и numIn, соответственно), и возвращает произведенные веса как dlarray объект с базовым типом 'single'.

function weights = initializeGlorot(sz,numOut,numIn)

Z = 2*rand(sz,'single') - 1;
bound = sqrt(6 / (numIn + numOut));

weights = bound * Z;
weights = dlarray(weights);

end

Пример

Инициализируйте веса для сверточной операции с 128 фильтрами размера, 5 на 5 и 3 входных канала.

filterSize = [5 5];
numChannels = 3;
numFilters = 128;

sz = [filterSize numChannels numFilters];
numOut = prod(filterSize) * numFilters;
numIn = prod(filterSize) * numFilters;

parameters.conv.Weights = initializeGlorot(sz,numOut,numIn);

Он инициализация

Он инициализатор [44] демонстрационные веса от нормального распределения с нулевым средним значением и отклонением 2Ni, где значение Ni зависит от типа операции глубокого обучения:

ОперацияНастраиваемый параметрNi
dlconvВеса

prod(filterSize)*numChannelsPerGroup, где filterSize 1 K вектор, содержащий размер фильтра, numChannelsPerGroup количество входных каналов для каждой группы и K количество пространственных размерностей.

dltranspconvВеса

prod(filterSize)*numChannelsPerGroup, где filterSize 1 K вектор, содержащий размер фильтра, numChannelsPerGroup количество входных каналов для каждой группы и K количество пространственных размерностей.

fullyconnectВесаКоличество входных каналов операции
gruВведите весаКоличество входных каналов операции
Текущие весаКоличество скрытых модулей операции.
lstmВведите весаКоличество входных каналов операции
Текущие весаКоличество скрытых модулей операции.

Чтобы инициализировать настраиваемые параметры с помощью Него инициализатор легко, можно задать пользовательскую функцию. Функциональный initializeHe, берет в качестве входа размер настраиваемых параметров sz, значение Ni, и возвращает произведенные веса как dlarray объект с базовым типом 'single'.

function weights = initializeHe(sz,numIn)

weights = randn(sz,'single') * sqrt(2/numIn);
weights = dlarray(weights);

end

Пример

Инициализируйте веса для сверточной операции с 128 фильтрами размера, 5 на 5 и 3 входных канала.

filterSize = [5 5];
numChannels = 3;
numFilters = 128;

sz = [filterSize numChannels numFilters];
numIn = prod(filterSize) * numFilters;

parameters.conv.Weights = initializeHe(sz,numIn);

Гауссова инициализация

Гауссовы демонстрационные веса инициализатора от нормального распределения.

Чтобы инициализировать настраиваемые параметры с помощью Гауссова инициализатора легко, можно задать пользовательскую функцию. Функциональный initializeGaussian, берет в качестве входа размер настраиваемых параметров sz, среднее значение распределения mu, стандартное отклонение распределения sigma, и возвращает произведенные веса как dlarray объект с базовым типом 'single'.

function weights = initializeGaussian(sz,mu,sigma)

weights = randn(sz,'single')*sigma + mu;
weights = dlarray(weights);

end

Пример

Инициализируйте веса для операции встраивания с размерностью 300 и размер словаря 5 000 использований Гауссова инициализатора со средним значением 0 и стандартным отклонением 0.01.

embeddingDimension = 300;
vocabularySize = 5000;
mu = 0;
sigma = 0.01;

sz = [embeddingDimension vocabularySize];

parameters.emb.Weights = initializeGaussian(sz,mu,sigma);

Универсальная инициализация

Универсальные демонстрационные веса инициализатора от равномерного распределения.

Чтобы инициализировать настраиваемые параметры с помощью универсального инициализатора легко, можно задать пользовательскую функцию. Функциональный initializeUniform, берет в качестве входа размер настраиваемых параметров sz, распределение связало bound, и возвращает произведенные веса как dlarray объект с базовым типом 'single'.

function parameter = initializeUniform(sz,bound)

Z = 2*rand(sz,'single') - 1;
parameter = bound * Z;
parameter = dlarray(parameter);

end

Пример

Инициализируйте веса для механизма внимания с размером 100 100, и связал 0,1 использования универсального инициализатора.

sz = [100 100];
bound = 0.1;

parameters.attentionn.Weights = initializeUniform(sz,bound);

Ортогональная инициализация

Ортогональный инициализатор возвращает ортогональный матричный Q, данный разложением QR Z = QR, откуда Z производится модульного нормального распределения, и размер Z совпадает с размером настраиваемого параметра.

Чтобы инициализировать настраиваемые параметры с помощью ортогонального инициализатора легко, можно задать пользовательскую функцию. Функциональный initializeOrthogonal, берет в качестве входа размер настраиваемых параметров sz и возвращает ортогональную матрицу как dlarray объект с базовым типом 'single'.

function parameter = initializeOrthogonal(sz)

Z = randn(sz,'single');
[Q,R] = qr(Z,0);

D = diag(R);
Q = Q * diag(D ./ abs(D));

parameter = dlarray(Q);

end

Пример

Инициализируйте текущие веса для операции LSTM с 100 скрытыми модулями с помощью ортогонального инициализатора.

numHiddenUnits = 100;

sz = [4*numHiddenUnits numHiddenUnits];

parameters.lstm.RecurrentWeights = initializeOrthogonal(sz);

Модуль забывает инициализацию логического элемента

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

Чтобы инициализировать настраиваемые параметры с помощью ортогонального инициализатора легко, можно задать пользовательскую функцию. Функциональный initializeUnitForgetGate, берет в качестве входа количество скрытых модулей в операции LSTM и возвращает смещение как dlarray объект с базовым типом 'single'.

function bias = initializeUnitForgetGate(numHiddenUnits)

bias = zeros(4*numHiddenUnits,1,'single');

idx = numHiddenUnits+1:2*numHiddenUnits;
bias(idx) = 1;

bias = dlarray(bias);

end

Пример

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

numHiddenUnits = 100;

parameters.lstm.Bias = initializeUnitForgetGate(numHiddenUnits,'single');

Инициализация единиц

Чтобы инициализировать настраиваемые параметры единицами легко, можно задать пользовательскую функцию. Функциональный initializeOnes, берет в качестве входа размер настраиваемых параметров sz и возвращает параметры как dlarray объект с базовым типом 'single'.

function parameter = initializeOnes(sz)

parameter = ones(sz,'single');
parameter = dlarray(weights);

end

Пример

Инициализируйте шкалу для операции нормализации партии. с 128 входными каналами с единицами.

numChannels = 128;

sz = [numChannels 1];

parameters.bn.Scale = initializeOnes(sz);

Нулевая инициализация

Чтобы инициализировать настраиваемые параметры нулями легко, можно задать пользовательскую функцию. Функциональный initializeZeros, берет в качестве входа размер настраиваемых параметров sz и возвращает параметры как dlarray объект с базовым типом 'single'.

function parameter = initializeZeros(sz)

parameter = zeros(sz,'single');
parameter = dlarray(weights);

end

Пример

Инициализируйте смещение для операции нормализации партии. с 128 входными каналами с нулями.

numChannels = 128;

sz = [numChannels 1];

parameters.bn.Offset = initializeZeros(sz);

Ссылки

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

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

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

| | |

Похожие темы