Когда обучение использование сети слои, графики слоев или 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 | Смещение |
|
Шкала |
| |
dlconv | Веса |
|
Смещение | Одно из следующего:
| |
dlconv (сгруппированный) | Веса |
|
Смещение | Одно из следующего:
| |
dltranspconv | Веса |
|
Смещение | Одно из следующего:
| |
dltranspconv (сгруппированный) | Веса |
|
Смещение | Одно из следующего:
| |
fullyconnect | Веса |
|
Смещение |
| |
gru | Введите веса |
|
Текущие веса |
| |
Смещение |
| |
lstm | Введите веса |
|
Текущие веса |
| |
Смещение |
|
Glorot (также известный как Ксавьера) инициализатор [1] демонстрационные веса от равномерного распределения с границами , где значения No и Ni зависят от типа операции глубокого обучения:
Операция | Настраиваемый параметр | No | Ni |
---|---|---|---|
dlconv | Веса |
|
|
dlconv (сгруппированный) | Веса |
|
|
dltranspconv | Веса |
|
|
dltranspconv (сгруппированный) | Веса |
|
|
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] демонстрационные веса от нормального распределения с нулевым средним значением и отклонением , где значение Ni зависит от типа операции глубокого обучения:
Операция | Настраиваемый параметр | Ni |
---|---|---|
dlconv | Веса |
|
dltranspconv | Веса |
|
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.
dlarray
| dlfeval
| dlgradient
| dlnetwork