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 (для младенца)), длина, диаметр, рост, весь вес, shucked weight, viscera weight, интерпретатор weight. Для получения дополнительной информации о наборе данных введите 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 (для младенца)), длина, диаметр, рост, весь вес, shucked weight, viscera weight, интерпретатор weight. Для получения дополнительной информации о наборе данных введите 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 -by n. В качестве альтернативы, данные изображения могут быть данными RGB, в этом случае каждая камера содержит матрицу m -by 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+ez

'satlin'

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

f(z)={0,если z0z,если 0<z<11,если z1

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

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

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

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

f(z)=11+ez

'satlin'

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

f(z)={0,если z0z,если 0<z<11,если z1

'purelin'

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

f(z)=z

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

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

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

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

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

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

E=1Nn=1Nk=1K(xknx^kn)2средняя квадратичная невязка+λ*ΩweightsL2регуляризация+β*Ωsparsityразреженностьрегуляризация,

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

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

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

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

Пример: '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^.

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

Если вход автоэнкодера является вектором xDx, затем энкодер преобразует вектор x в другой вектор zD(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):DxDx - передаточная функция для декодера,W(1)Dx×D(1) является весовой матрицей, и b(2)Dx является вектором смещения.

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

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

ρ^i=1nj=1nzi(1)(xj)=1nj=1nh(wi(1)Txj+bi(1)),

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

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

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

Ωsparsity=i=1D(1)KL(ρρ^i)=i=1D(1)ρlog(ρρ^i)+(1ρ)log(1ρ1ρ^i)

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

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

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

Ωweights=12lLjnik(wji(l))2,

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

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

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

E=1Nn=1Nk=1K(xknx^kn)2средняя квадратичная невязка+λ*ΩweightsL2регуляризация+β*Ωsparsityразреженностьрегуляризация,

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

Ссылки

[1] Moller, M. F. «A Scaled Conjugate Gradient Algorithm for Fast Supervised Learning», Neural Networks, Vol. 6, 1993, pp. 525-533.

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

Введенный в R2015b