exponenta event banner

trainAutoencoder

Обучение автокодировщика

Описание

пример

autoenc = trainAutoencoder(X) возвращает автокодировщик, autoenc, обученный с использованием данных обучения в X.

autoenc = trainAutoencoder(X,hiddenSize) возвращает автокодировщик autoenc, со скрытым размером представления hiddenSize.

пример

autoenc = trainAutoencoder(___,Name,Value) возвращает автокодировщик autoenc, для любого из вышеперечисленных входных аргументов с дополнительными опциями, указанными одним или несколькими Name,Value аргументы пары.

Например, можно указать долю разреженности или максимальное количество итераций обучения.

Примеры

свернуть все

Загрузите образцы данных.

X = abalone_dataset;

X является матрицей 8 на 4177, определяющей восемь атрибутов для 4177 различных оболочек абалонов: пол (M, F и I (для младенца)), длина, диаметр, рост, весь вес, сцепленный вес, внутренний вес, вес оболочки. Для получения дополнительной информации о наборе данных введите help abalone_dataset в командной строке.

Обучение разреженного автокодера с настройками по умолчанию.

autoenc = trainAutoencoder(X);

Восстановите данные кольца оболочки abalone с помощью обученного автокодера.

XReconstructed = predict(autoenc,X);

Вычислите среднеквадратичную ошибку восстановления.

mseError = mse(X-XReconstructed)
mseError = 0.0167

Загрузите образцы данных.

X = abalone_dataset;

X является матрицей 8 на 4177, определяющей восемь атрибутов для 4177 различных оболочек абалонов: пол (M, F и I (для младенца)), длина, диаметр, рост, весь вес, сцепленный вес, внутренний вес, вес оболочки. Для получения дополнительной информации о наборе данных введите help abalone_dataset в командной строке.

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

autoenc = trainAutoencoder(X,4,'MaxEpochs',400,...
'DecoderTransferFunction','purelin');

Восстановите данные кольца оболочки abalone с помощью обученного автокодера.

XReconstructed = predict(autoenc,X);

Вычислите среднеквадратичную ошибку восстановления.

mseError = mse(X-XReconstructed)
mseError = 0.0045

Создайте данные обучения.

rng(0,'twister'); % For reproducibility
n = 1000;
r = linspace(-10,10,n)';
x = 1 + r*5e-2 + sin(r)./r + 0.2*randn(n,1);

Обучение автокодировщика с использованием обучающих данных.

hiddenSize = 25;
autoenc = trainAutoencoder(x',hiddenSize,...
        'EncoderTransferFunction','satlin',...
        'DecoderTransferFunction','purelin',...
        'L2WeightRegularization',0.01,...
        'SparsityRegularization',4,...
        'SparsityProportion',0.10);

Создайте данные теста.

n = 1000;
r = sort(-10 + 20*rand(n,1));
xtest = 1 + r*5e-2 + sin(r)./r + 0.4*randn(n,1);

Прогнозирование тестовых данных с использованием обученного автокодера, autoenc .

xReconstructed = predict(autoenc,xtest');

Постройте график фактических тестовых данных и прогнозов.

figure;
plot(xtest,'r.');
hold on
plot(xReconstructed,'go');

Figure contains an axes. The axes contains 2 objects of type line.

Загрузите данные обучения.

XTrain = digitTrainCellArrayData;

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

Обучить автокодер скрытым слоем, содержащим 25 нейронов.

hiddenSize = 25;
autoenc = trainAutoencoder(XTrain,hiddenSize,...
        'L2WeightRegularization',0.004,...
        'SparsityRegularization',4,...
        'SparsityProportion',0.15);

Загрузите данные теста.

XTest = digitTestCellArrayData;

Тестовые данные представляют собой массив ячеек 1 на 5000, причем каждая ячейка содержит матрицу 28 на 28, представляющую синтетическое изображение рукописной цифры.

Реконструируйте данные тестового изображения с помощью обученного автокодера, autoenc.

xReconstructed = predict(autoenc,XTest);

Просмотрите фактические данные теста.

figure;
for i = 1:20
    subplot(4,5,i);
    imshow(XTest{i});
end

Просмотрите восстановленные тестовые данные.

figure;
for i = 1:20
    subplot(4,5,i);
    imshow(xReconstructed{i});
end

Входные аргументы

свернуть все

Обучающие данные, определенные как матрица обучающих образцов или клеточный массив данных изображения. Если X является матрицей, то каждый столбец содержит один образец. Если X является массивом данных изображения, то данные в каждой ячейке должны иметь одинаковое количество размеров. Данные изображения могут быть данными интенсивности пикселей для серых изображений, и в этом случае каждая ячейка содержит матрицу m-на-n. Альтернативно, данные изображения могут быть данными RGB, и в этом случае каждая ячейка содержит матрицу m-на-n-3.

Типы данных: single | double | cell

Размер скрытого представления автокодера, заданного как положительное целое значение. Это число - количество нейронов в скрытом слое.

Типы данных: single | double

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'EncoderTransferFunction','satlin','L2WeightRegularization',0.05 определяет передаточную функцию для кодера как положительную насыщающую линейную передаточную функцию и регуляризацию веса L2 как 0,05.

Передаточная функция для кодера, определяемая как разделенная запятыми пара, состоящая из 'EncoderTransferFunction' и одно из следующих.

Опция передаточной функцииОпределение
'logsig'

Логистическая сигмоидальная функция

f (z) = 11 + e − z

'satlin'

Положительная насыщающая линейная передаточная функция

f (z) = {0 , если  z≤0z,if 0 < z <  11, если z≥1

Пример: 'EncoderTransferFunction','satlin'

Передаточная функция для декодера, определяемая как разделенная запятыми пара, состоящая из 'DecoderTransferFunction' и одно из следующих.

Опция передаточной функцииОпределение
'logsig'

Логистическая сигмоидальная функция

f (z) = 11 + e − z

'satlin'

Положительная насыщающая линейная передаточная функция

f (z) = {0 , если  z≤0z,if 0 < z <  11, если z≥1

'purelin'

Линейная передаточная функция

f (z) = z

Пример: 'DecoderTransferFunction','purelin'

Максимальное количество тренировочных периодов или итераций, указанных как разделенная запятыми пара, состоящая из 'MaxEpochs' и положительное целое значение.

Пример: 'MaxEpochs',1200

Коэффициент для регуляризатора веса L2 в функции затрат (LossFunction), указанная как пара, разделенная запятыми, состоящая из 'L2WeightRegularization' и положительное скалярное значение.

Пример: 'L2WeightRegularization',0.05

Функция потерь, используемая для обучения, указывается как разделенная запятыми пара, состоящая из 'LossFunction' и 'msesparse'. Она соответствует среднеквадратичной функции ошибки, скорректированной для обучения разреженного автокодера следующим образом:

E=1N∑n=1N∑k=1K (xkn x ^ kn) 2︸mean квадрат error+λ*Ωweights︸L2regularization+β*Ωsparsity︸sparsityregularization,

где λ - коэффициент для члена регуляризации L2, а β - коэффициент для члена регуляризации разреженности. Можно задать значения λ и β, используя L2WeightRegularization и SparsityRegularization аргументы пары имя-значение, соответственно, во время обучения автокодировщика.

Индикатор для отображения обучающего окна, заданного как разделенная запятыми пара, состоящая из 'ShowProgressWindow' и либо true или false.

Пример: 'ShowProgressWindow',false

Желаемая доля тренировочных примеров, на которые реагирует нейрон, определяется как пара, разделенная запятыми, состоящая из 'SparsityProportion' и положительное скалярное значение. Пропорция разреженности является параметром регуляризатора разреженности. Он управляет разреженностью выходных данных скрытого слоя. Низкое значение SparingPolition обычно приводит к тому, что каждый нейрон в скрытом слое «специализируется», только давая высокий выход для небольшого количества тренировочных примеров. Следовательно, малая доля разреженности способствует более высокой степени разреженности. См. раздел Разреженные автокодеры.

Пример: 'SparsityProportion',0.01 эквивалентно утверждению, что каждый нейрон в скрытом слое должен иметь средний выход 0,1 по тренировочным примерам.

Коэффициент, который управляет воздействием регуляризатора разреженности в функции затрат, определяемой как пара, разделенная запятыми, состоящая из 'SparsityRegularization' и положительное скалярное значение.

Пример: 'SparsityRegularization',1.6

Алгоритм, используемый для обучения автокодера, определяемый как разделенная запятыми пара, состоящая из 'TrainingAlgorithm' и 'trainscg'. Обозначает масштабированный сопряженный градиентный спуск [1].

Индикатор для масштабирования входных данных, указанный как разделенная запятыми пара, состоящая из 'ScaleData' и либо true или false.

Автокодировщики пытаются реплицировать свои входные данные на выходе. Чтобы это было возможно, диапазон входных данных должен соответствовать диапазону передаточной функции для декодера. trainAutoencoder автоматически масштабирует данные обучения в этом диапазоне при обучении автокодировщика. Если данные были масштабированы во время обучения автокодировщику, predict, encode, и decode методы также масштабируют данные.

Пример: 'ScaleData',false

Индикатор использования графического процессора для обучения, определяемый как разделенная запятыми пара, состоящая из 'UseGPU' и либо true или false.

Пример: 'UseGPU',true

Выходные аргументы

свернуть все

Обученный автокодировщик, возвращенный как Autoencoder объект. Сведения о свойствах и методах этого объекта см. в разделе Autoencoder страница класса.

Подробнее

свернуть все

Автокодирующие устройства

Автокодер - это нейронная сеть, которая обучена воспроизводить свой вход на выходе. Автокодеры могут использоваться в качестве инструментов для изучения глубоких нейронных сетей. Обучение автоматическому кодированию не контролируется в том смысле, что не требуется маркированных данных. Процесс обучения по-прежнему основан на оптимизации функции затрат. Функция затрат измеряет ошибку между входом x и его реконструкцией на выходе x ^.

Автокодер состоит из кодера и декодера. Кодер и декодер могут иметь несколько уровней, но для простоты следует учитывать, что каждый из них имеет только один уровень.

Если вход в автокодер является вектором x∈ℝDx, то кодер отображает вектор x в другой вектор z∈ℝD (1) следующим образом :

z = h (1) (W (1) x + b (1)),

где надстрочный индекс (1) указывает первый слой. h (1): ℝD (1) →ℝD (1) - передаточная функция для кодера, W (1) ∈ℝD (1) × Dx - весовая матрица, а b (1) ∈ℝD (1) - вектор смещения. Затем декодер преобразует кодированное представление z обратно в оценку исходного входного вектора x следующим образом:

x ^ = h (2) (W (2) z + b (2)),

где надстрочный индекс (2) представляет второй слой. h (2): ℝDx→ℝDx является передаточной функцией для декодера, W (1) ∈ℝDx×D (1) является весовой матрицей, и b (2) ∈ℝDx является вектором смещения.

Разреженные автокодеры

Поощрение разреженности автокодера возможно путем добавления регуляризатора к функции затрат [2]. Этот регуляризатор является функцией среднего значения активации выхода нейрона. Средняя величина выходной активации нейрона i определяется как:

ρ^i=1n∑j=1nzi (1) (xj) =1n∑j=1nh (wi (1) Txj + bi (1)),

где n - общее число примеров обучения. xj - j-й тренировочный пример, wi (1) T - i-я строка весовой матрицы W (1), bi (1) - i-я запись вектора смещения b (1). Нейрон считается «срабатывающим», если его выходное значение активации высокое. Низкое значение активации выходного сигнала означает, что нейрон в скрытом слое срабатывает в ответ на небольшое количество тренировочных примеров. Добавление термина к функции затрат, который ограничивает низкие значения, приводит к тому, что автокодер усваивает представление, где каждый нейрон в скрытом слое возбуждает небольшое количество тренировочных примеров. То есть каждый нейрон специализируется, реагируя на некоторую особенность, которая присутствует только в небольшом подмножестве тренировочных примеров.

Регуляризация разреженности

Регулятор разреженности пытается наложить ограничение на разреженность выхода из скрытого слоя. Разреженность можно стимулировать, добавляя термин регуляризации, который принимает большое значение, когда среднее значение активации, start^ ^ i, нейрона i и его желаемое значение, start, не близки по значению [2]. Одним из таких членов регуляризации разреженности может быть дивергенция Куллбэка-Лейблера.

Ωsparsity=∑i=1D (1) KL (ρ∥ρ^i) =∑i=1D (1) αlog (start, ^ i) + (1

Дивергенция Куллбэка - Лейблера является функцией для измерения того, насколько различны два распределения. В этом случае оно принимает нулевое значение, когда («») и («») («») равны друг другу, и становится больше, когда они расходятся друг от друга. Минимизация функции затрат вынуждает этот термин быть маленьким, а, следовательно, "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " Можно определить требуемое значение среднего значения активации с помощью SparsityProportion аргумент пары имя-значение во время обучения автокодировщика.

L2 Регуляризация

При обучении разреженного автокодера можно сделать регулятор разреженности малым путем увеличения значений весов w (l) и уменьшения значений z (1) [2]. Добавление термина регуляризации весов в функцию затрат предотвращает его появление. Этот термин называется термином регуляризации L2 и определяется следующим образом:

Ωweights=12∑lL∑jn∑ik (wji (l)) 2,

где L - количество скрытых слоев, n - количество наблюдений (примеров), k - количество переменных в обучающих данных.

Функция затрат

Функция затрат для обучения разреженного автокодера представляет собой скорректированную среднеквадратичную функцию ошибок следующим образом:

E=1N∑n=1N∑k=1K (xkn x ^ kn) 2︸mean квадрат error+λ*Ωweights︸L2regularization+β*Ωsparsity︸sparsityregularization,

где λ - коэффициент для члена регуляризации L2, а β - коэффициент для члена регуляризации разреженности. Можно задать значения λ и β, используя L2WeightRegularization и SparsityRegularization аргументы пары имя-значение, соответственно, во время обучения автокодировщика.

Ссылки

[1] Моллер, М. Ф. «Масштабированный алгоритм сопряженного градиента для быстрого контролируемого обучения», Neural Networks, том 6, 1993, стр. 525-533.

[2] Ольсхаузен, Б. А. и Д. Дж. Филд. «Разреженное кодирование с чрезмерно полным набором базиса: стратегия, используемая V1.» Vision Research, Vol.37, 1997, стр. 3311-3325.

Представлен в R2015b