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 матрица, задающая восемь атрибутов для 4 177 различных интерпретаторов морского ушка: пол (M, F, и я (для младенца)), длина, диаметр, высота, целый вес, сбросил вес, вес внутренних органов, вес интерпретатора. Для получения дополнительной информации о наборе данных введите help abalone_dataset в командной строке.

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

autoenc = trainAutoencoder(X);

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

XReconstructed = predict(autoenc,X);

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

mseError = mse(X-XReconstructed)
mseError = 0.0167

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

X = abalone_dataset;

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

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

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

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

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');

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

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 regularizer в функции стоимости (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' и значение положительной скалярной величины. Пропорция разреженности является параметром разреженности regularizer. Это управляет разреженностью выхода от скрытого слоя. Низкая стоимость для SparsityProportion обычно приводит к каждому нейрону в скрытом слое, "специализирующемся", только давая высокую производительность для небольшого количества учебных примеров. Следовательно, низкая пропорция разреженности поощряет более высокую степень разреженности. Смотрите Разреженные Автоэнкодеры.

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

Коэффициент, который управляет ударом разреженности regularizer в функции стоимости в виде разделенной запятой пары, состоящей из '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 вектор смещения.

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

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

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

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

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

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

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

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

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

Когда обучение разреженный автоэнкодер, возможно сделать разреженность regulariser маленькой путем увеличения значений весов 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. “Масштабированный Алгоритм Метода сопряженных градиентов для Быстрого Контролируемого Изучения”, Нейронные сети, Издание 6, 1993, стр 525–533.

[2] Ольсхаузен, B. А. и Д. Дж. Филд. “Разреженное Кодирование со Сверхполным Базисным комплектом: Стратегия, Используемая V1”. Исследование видения, Vol.37, 1997, pp.3311–3325.

Введенный в R2015b