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

Когда вы обучаете использование сети слои, графики слоев или 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);

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

Он инициализатор [2] демонстрационные веса от нормального распределения с нулевым средним значением и отклонением 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(parameter);

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(parameter);

end

Пример

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

numChannels = 128;

sz = [numChannels 1];

parameters.bn.Offset = initializeZeros(sz);

Хранение настраиваемых параметров

Рекомендуется сохранить настраиваемые параметры для данной функции модели в отдельном объекте, такие как struct, таблица или массив ячеек. Для примера, показывающего, как инициализировать настраиваемые параметры как struct, смотрите, Обучат сеть Используя Функцию Модели.

Хранение параметров на графическом процессоре

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

Прежде, чем сохранить ваши настраиваемые параметры, это - методические рекомендации, чтобы собрать все параметры, в случае, если они загружаются на машину без графического процессора. Использование dlupdate собрать настраиваемые параметры, сохраненные как struct, таблица или массив ячеек. Например, если у вас есть сетевые настраиваемые параметры, сохраненные на графическом процессоре в struct, таблице или массиве ячеек parameters, можно собрать все параметры на к центральному процессору при помощи следующего кода:

parameters = dlupdate(@gather,parameters);

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

parameters = dlupdate(@gpuArray,parameters);

Ссылки

[1] Glorot, Ксавьер и Иосуа Бенхио. "Изучая Трудность Учебных Глубоких Нейронных сетей Прямого распространения". В Продолжениях Тринадцатой Международной конференции по вопросам Искусственного интеллекта и Статистики, 249–356. Сардиния, Италия: AISTATS, 2010.

[2] Он, Kaiming, Сянюй Чжан, Шаоцин Жэнь и Цзянь Сунь. "Копаясь Глубоко в Выпрямителях: Превышение Эффективности Человеческого Уровня на Классификации ImageNet". В Продолжениях 2 015 Международных конференций IEEE по вопросам Компьютерного зрения, 1026–1034. Вашингтон, округ Колумбия: Общество Компьютерного зрения IEEE, 2015.

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

| | |

Похожие темы