При обучении сети с использованием слоев, графиков слоев или dlnetwork , программное обеспечение автоматически инициализирует обучаемые параметры в соответствии со свойствами инициализации уровня. При определении модели глубокого обучения как функции необходимо инициализировать обучаемые параметры вручную.
Инициализация обучаемых параметров (например, весов и отклонений) может оказать большое влияние на то, как быстро сходится модель глубокого обучения.
Совет
В этом разделе объясняется, как инициализировать обучаемые параметры для модели глубокого обучения, определяющей функцию в индивидуальном цикле обучения. Чтобы узнать, как задать инициализацию обучаемого параметра для уровня глубокого обучения, используйте соответствующее свойство уровня. Например, для установки инициализатора весов convolution2dLayer объект, используйте WeightsInitializer собственность.
В этой таблице показаны инициализации по умолчанию для обучаемых параметров для каждого уровня, а также ссылки, показывающие, как инициализировать обучаемые параметры для функций модели с помощью одной и той же инициализации.
| Слой | Обучаемый параметр | Инициализация по умолчанию |
|---|---|---|
convolution2dLayer | Веса | Инициализация Glorot |
| Уклон | Инициализация нулей | |
convolution3dLayer | Веса | Инициализация Glorot |
| Уклон | Инициализация нулей | |
groupedConvolution2dLayer | Веса | Инициализация Glorot |
| Уклон | Инициализация нулей | |
transposedConv2dLayer | Веса | Инициализация Glorot |
| Уклон | Инициализация нулей | |
transposedConv3dLayer | Веса | Инициализация Glorot |
| Уклон | Инициализация нулей | |
fullyConnectedLayer | Веса | Инициализация Glorot |
| Уклон | Инициализация нулей | |
batchNormalizationLayer | Смещение | Инициализация нулей |
| Масштаб | Инициализация единиц | |
lstmLayer | Входные веса | Инициализация Glorot |
| Повторяющиеся веса | Ортогональная инициализация | |
| Уклон | Инициализация литника Unit Forget | |
gruLayer | Входные веса | Инициализация Glorot |
| Повторяющиеся веса | Ортогональная инициализация | |
| Уклон | Инициализация нулей | |
wordEmbeddingLayer | Веса | Гауссова инициализация, со средним значением 0 и стандартным отклонением 0,01 |
При инициализации обучаемых параметров для функций модели необходимо указать параметры правильного размера. Размер обучаемых параметров зависит от типа операции глубокого обучения.
| Операция | Обучаемый параметр | Размер |
|---|---|---|
batchnorm | Смещение |
|
| Масштаб |
| |
dlconv | Веса |
|
| Уклон | Одно из следующих:
| |
dlconv (сгруппировано) | Веса |
|
| Уклон | Одно из следующих:
| |
dltranspconv | Веса |
|
| Уклон | Одно из следующих:
| |
dltranspconv (сгруппировано) | Веса |
|
| Уклон | Одно из следующих:
| |
fullyconnect | Веса |
|
| Уклон |
| |
gru | Входные веса |
|
| Повторяющиеся веса |
| |
| Уклон |
| |
lstm | Входные веса |
|
| Повторяющиеся веса |
| |
| Уклон |
|
Инициализатор Глорота (также известный как Ксавье) [1] отсчитывает веса из равномерного распределения с границами + Ni], где значения No и Ni зависят от типа операции глубокого обучения.
| Операция | Обучаемый параметр | Нет | 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);
Инициализатор He [2] отсчитывает веса из нормального распределения с нулевым средним и дисперсионным , где значение Ni зависит от типа операции глубокого обучения.
| Операция | Обучаемый параметр | Ni |
|---|---|---|
dlconv | Веса |
|
dltranspconv | Веса |
|
fullyconnect | Веса | Количество входных каналов операции |
gru | Входные веса | Количество входных каналов операции |
| Повторяющиеся веса | Количество скрытых блоков операции. | |
lstm | Входные веса | Количество входных каналов операции |
| Повторяющиеся веса | Количество скрытых блоков операции. |
Чтобы легко инициализировать обучаемые параметры с помощью инициализатора He, можно определить пользовательскую функцию. Функция 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 и словарным размером 5000 с помощью гауссова инициализатора со средним значением 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);
Инициализатор вентиля «unit forget» инициализирует смещение для операции LSTM таким образом, что компонент вентиля «forget» смещений равен единицам, а остальные записи являются нулями.
Чтобы легко инициализировать обучаемые параметры с помощью ортогонального инициализатора, можно определить пользовательскую функцию. Функция 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 скрытыми блоками с помощью инициализатора «unit forget gate».
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);
Рекомендуется сохранять обучаемые параметры для данной функции модели в одном объекте, таком как структура, таблица или массив ячеек. Пример инициализации обучаемых параметров в виде структуры см. в разделе Подготовка сети с использованием функции модели.
При обучении модели с использованием обучающих данных, хранящихся в GPU, обучаемые параметры функции модели преобразуются в объекты gpuArray и сохраняются в GPU.
Перед сохранением обучаемых параметров рекомендуется собрать все параметры, если они загружены в машину без графического процессора. Использовать dlupdate для сбора обучаемых параметров, хранящихся в виде структуры, таблицы или массива ячеек. Например, если в структуре, таблице или массиве ячеек хранятся сетевые обучаемые параметры графического процессора. parameters, вы можете собрать все параметры на CPU, используя следующий код:
parameters = dlupdate(@gather,parameters);
При загрузке обучаемых параметров, не находящихся на GPU, можно переместить параметры на GPU с помощью dlupdate. Это гарантирует, что сеть будет выполняться на GPU для обучения и вывода независимо от того, где хранятся входные данные. Для перемещения обучаемых параметров в графический процессор используйте dlupdate функция:
parameters = dlupdate(@gpuArray,parameters);
[1] Глорот, Ксавье и Йошуа Бенгио. «Понимание сложности обучения глубоким нейронным сетям». Материалы тринадцатой Международной конференции по искусственному интеллекту и статистике, 249-356. Сардиния, Италия: AISTATS, 2010.
[2] Хэ, Каймин, Сянъу Чжан, Шаоцин Жэнь и Цзянь Сунь. «Углубляясь в выпрямители: превосходя показатели на уровне человека по классификации ImageNet». В трудах Международной конференции IEEE 2015 по компьютерному зрению, 1026-1034. Вашингтон, округ Колумбия: Общество компьютерного зрения IEEE, 2015.
dlarray | dlfeval | dlgradient | dlnetwork