Обучите автоэнкодер
возвращает автоэнкодер 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');
Загрузите обучающие данные.
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
является матрицей, тогда каждый столбец содержит одну выборку. Если X
является массивом ячеек с данными изображений, тогда данные в каждой камере должны иметь одинаковое количество размерностей. Данные изображения могут быть данными интенсивности пикселей для серых изображений, в этом случае каждая камера содержит матрицу m -by n. В качестве альтернативы, данные изображения могут быть данными RGB, в этом случае каждая камера содержит матрицу m -by n -3.
Типы данных: single
| double
| cell
hiddenSize
- Размер скрытого представления автоэнкодера Размер скрытого представления автоэнкодера, заданный как положительное целое значение. Это количество является количеством нейронов в скрытом слое.
Типы данных: single
| double
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'EncoderTransferFunction','satlin','L2WeightRegularization',0.05
задает передаточную функцию для энкодера как положительную насыщающую линейную передаточную функцию и L2 регуляризацию веса как 0,05.'EncoderTransferFunction'
- Передаточная функция для энкодера'logsig'
(по умолчанию) | 'satlin'
Передаточная функция для энкодера, заданная как разделенная разделенными запятой парами, состоящая из 'EncoderTransferFunction'
и одно из следующих.
Опция передаточной функции | Определение |
---|---|
'logsig' | Логистическая сигмоидная функция
|
'satlin' | Положительная насыщающая линейная передаточная функция
|
Пример: 'EncoderTransferFunction','satlin'
'DecoderTransferFunction'
- Передаточная функция для декодера'logsig'
(по умолчанию) | 'satlin'
| 'purelin'
Передаточная функция для декодера, заданная как разделенная разделенными запятой парами, состоящая из 'DecoderTransferFunction'
и одно из следующих.
Опция передаточной функции | Определение |
---|---|
'logsig' | Логистическая сигмоидная функция
|
'satlin' | Положительная насыщающая линейная передаточная функция
|
'purelin' | Линейная передаточная функция
|
Пример: 'DecoderTransferFunction','purelin'
'MaxEpochs'
- Максимальное количество циклов обученияМаксимальные количества циклов обучения или итерации, заданные как разделенная запятой пара, состоящие из 'MaxEpochs'
и положительное целое значение.
Пример: 'MaxEpochs',1200
'L2WeightRegularization'
- Коэффициент для регулятора L2 весаКоэффициент для регулятора L2 веса в функции затрат (LossFunction
), заданная как разделенная разделенными запятой парами, состоящая из 'L2WeightRegularization'
и положительная скалярная величина значение.
Пример: 'L2WeightRegularization',0.05
'LossFunction'
- Функция потерь, используемая для обучения'msesparse'
(по умолчанию)Функция потерь для обучения, заданная как разделенная разделенными запятой парами, состоящая из 'LossFunction'
и 'msesparse'
. Это соответствует средней функции квадратичной невязки, скорректированной для настройки разреженного автоэнкодера следующим образом:
где λ - коэффициент для L 2 члена регуляризации, а β - коэффициент для члена регуляризации разреженности. Можно задать значения λ и β при помощи L2WeightRegularization
и SparsityRegularization
аргументы пары "имя-значение", соответственно, при обучении автоэнкодера.
'ShowProgressWindow'
- Индикатор для отображения окна обученияtrue
(по умолчанию) | false
Индикатор для отображения окна обучения, заданный как разделенная разделенными запятой парами, состоящая из 'ShowProgressWindow'
и любой из них true
или false
.
Пример: 'ShowProgressWindow',false
'SparsityProportion'
- Желаемая доля обучающих примеров, на которые реагирует нейронЖелаемая доля обучающих примеров, на которые реагирует нейрон, заданная как разделенная разделенными запятой парами, состоящая из 'SparsityProportion'
и положительная скалярная величина значение. Пропорция разреженности является параметром регуляризатора разреженности. Он управляет разреженностью выхода из скрытого слоя. Низкое значение SparsityProportion обычно приводит к тому, что каждый нейрон в скрытом слое «специализируется», давая только высокий выход для небольшого количества обучающих примеров. Следовательно, низкая доля разреженности способствует более высокой степени разреженности. См. Раздел «Разреженные автоэнкодеры»
Пример: 'SparsityProportion',0.01
эквивалентно утверждению, что каждый нейрон в скрытом слое должен иметь средний выход 0,1 по обучающим примерам.
'SparsityRegularization'
- Коэффициент, который управляет влиянием регулятора разреженностиКоэффициент, который управляет влиянием регулятора разреженности в функции стоимости, заданной как разделенная разделенными запятой парами, состоящая из 'SparsityRegularization'
и положительная скалярная величина значение.
Пример: 'SparsityRegularization',1.6
'TrainingAlgorithm'
- Алгоритм, используемый для настройки автоэнкодера'trainscg'
(по умолчанию)Алгоритм, используемый для настройки автоэнкодера, задается как разделенная разделенными запятой парами, состоящая из 'TrainingAlgorithm'
и 'trainscg'
. Это означает масштабированный сопряженный градиентный спуск [1].
'ScaleData'
- Индикатор для пересмотра входных данныхtrue
(по умолчанию) | false
Индикатор для пересмотра входных данных, заданный как разделенная разделенными запятой парами, состоящая из 'ScaleData'
и любой из них true
или false
.
Автоэнкодеры пытаются реплицировать свой вход на своем выходе. Чтобы это было возможно, область значений входных данных должен совпадать с областью значений передаточной функции для декодера. trainAutoencoder
автоматически масштабирует обучающие данные до этой области значений при обучении автоэнкодера. Если данные были масштабированы во время обучения автоэнкодера, predict
, encode
, и decode
методы также масштабируют данные.
Пример: 'ScaleData',false
'UseGPU'
- Индикатор использования графический процессор для обученияfalse
(по умолчанию) | true
Индикатор для использования графический процессор для обучения, заданный как разделенная разделенными запятой парами, состоящая из 'UseGPU'
и любой из них true
или false
.
Пример: 'UseGPU',true
autoenc
- Обученный автоэнкодерAutoencoder
объектОбученный автоэнкодер, возвращенный как Autoencoder
объект. Для получения информации о свойствах и методах этого объекта смотрите Autoencoder
страница класса.
Автоэнкодер является нейронной сетью, которая обучена тиражировать свой вход на своем выходе. Автоэнкодеры могут использоваться как инструменты для изучения глубоких нейронных сетей. Обучение автоэнкодера не обеспечивается в том смысле, что маркированные данные не требуются. Процесс обучения все еще основан на оптимизации функции затрат. Функция затрат измеряет ошибку между входом x и ее восстановлением на выходе .
Автоэнкодер состоит из энкодера и декодера. Энкодер и декодер могут иметь несколько слоев, но для простоты примите к сведению, что каждый из них имеет только один слой.
Если вход автоэнкодера является вектором , затем энкодер преобразует вектор x в другой вектор следующим образом:
где верхний индекс (1) указывает на первый слой. является передаточной функцией для энкодера, является весовой матрицей, и является вектором смещения. Затем декодер преобразует закодированное представление z назад в оценку исходного входного вектора, x, следующим образом:
где верхний индекс (2) представляет второй слой. - передаточная функция для декодера, является весовой матрицей, и является вектором смещения.
Поощрение разреженности автоэнкодера возможно путем добавления регуляризатора к функции затрат [2]. Этот регуляризатор является функцией от среднего выходного значения активации нейрона. Средняя мера активации выхода нейрона i определяется как:
где n - общее количество примеров обучения. xj является j -м примером обучения, - i строка весовой матрицы, и - i запись вектора смещения ,. Нейрон рассматривается как «зажигание», если его выходное значение активации высокое. Низкое значение активации выхода означает, что нейрон в скрытом слое запускается в ответ на небольшое количество обучающих примеров. Добавление термина к функции затрат, которое ограничивает значения быть низким, побуждает автоэнкодер изучать представление, где каждый нейрон в скрытом слое запускается в небольшое количество обучающих примеров. То есть каждый нейрон специализируется, отвечая на некоторую функцию, которая присутствует только в небольшом подмножестве обучающих примеров.
Регуляризатор разреженности пытается применить ограничение на разреженность выхода из скрытого слоя. Разреженность может быть поощрена путем добавления термина регуляризации, который принимает большое значение, когда среднее значение активации, , нейрона i и ее желаемого значения, , не близки по значению [2]. Одним из таких членов регуляции разреженности может быть расхождение Кулбэка-Лейблера.
Расхождение Куллбэка-Лейблера является функцией для измерения того, как разные два распределения являются. В этом случае это принимает нулевое значение, когда и равны друг другу и становятся больше, когда они расходятся друг с другом. Минимизация функции затрат заставляет этот термин быть маленьким, следовательно, и быть рядом друг с другом. Вы можете задать желаемое значение среднего значения активации с помощью SparsityProportion
аргумент пары "имя-значение" во время настройки автоэнкодера.
При обучении разреженного автоэнкодера можно сделать регулятор разреженности маленьким, увеличив значения весов w(l) и уменьшение значений z(1) [2]. Добавление термина регуляризации для весов к функции затрат препятствует этому. Этот термин называется L2 термином регуляризации и определяется:
где L - количество скрытых слоев, n - количество наблюдений (примеров), а k - количество переменных в обучающих данных.
Функция стоимости для настройки разреженного автоэнкодера является скорректированной функцией средней квадратичной невязки следующим образом:
где λ - коэффициент для 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.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.