Обучение автокодировщика
возвращает автокодировщик 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');

Загрузите данные обучения.
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-на-n. Альтернативно, данные изображения могут быть данными RGB, и в этом случае каждая ячейка содержит матрицу m-на-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' | Логистическая сигмоидальная функция
+ e − z
|
'satlin' | Положительная насыщающая линейная передаточная функция
если z≥1
|
Пример: 'EncoderTransferFunction','satlin'
'DecoderTransferFunction' - Передаточная функция для декодера'logsig' (по умолчанию) | 'satlin' | 'purelin'Передаточная функция для декодера, определяемая как разделенная запятыми пара, состоящая из 'DecoderTransferFunction' и одно из следующих.
| Опция передаточной функции | Определение |
|---|---|
'logsig' | Логистическая сигмоидальная функция
+ e − z
|
'satlin' | Положительная насыщающая линейная передаточная функция
если z≥1
|
'purelin' | Линейная передаточная функция
= z
|
Пример: 'DecoderTransferFunction','purelin'
'MaxEpochs' - Максимальное количество периодов обученияМаксимальное количество тренировочных периодов или итераций, указанных как разделенная запятыми пара, состоящая из 'MaxEpochs' и положительное целое значение.
Пример: 'MaxEpochs',1200
'L2WeightRegularization' - Коэффициент для регуляризатора массы L2Коэффициент для регуляризатора веса L2 в функции затрат (LossFunction), указанная как пара, разделенная запятыми, состоящая из 'L2WeightRegularization' и положительное скалярное значение.
Пример: 'L2WeightRegularization',0.05
'LossFunction' - Функция потери используется для обучения'msesparse' (по умолчанию)Функция потерь, используемая для обучения, указывается как разделенная запятыми пара, состоящая из 'LossFunction' и 'msesparse'. Она соответствует среднеквадратичной функции ошибки, скорректированной для обучения разреженного автокодера следующим образом:
error+λ*Ωweights︸L2regularization+β*Ωsparsity︸sparsityregularization,
где λ - коэффициент для члена регуляризации L2, а β - коэффициент для члена регуляризации разреженности. Можно задать значения λ и β, используя L2WeightRegularization и SparsityRegularization аргументы пары имя-значение, соответственно, во время обучения автокодировщика.
'ShowProgressWindow' - Индикатор для отображения окна обученияtrue (по умолчанию) | falseИндикатор для отображения обучающего окна, заданного как разделенная запятыми пара, состоящая из 'ShowProgressWindow' и либо true или false.
Пример: 'ShowProgressWindow',false
'SparsityProportion' - Желаемая доля тренировочных примеров, на которые реагирует нейронЖелаемая доля тренировочных примеров, на которые реагирует нейрон, определяется как пара, разделенная запятыми, состоящая из 'SparsityProportion' и положительное скалярное значение. Пропорция разреженности является параметром регуляризатора разреженности. Он управляет разреженностью выходных данных скрытого слоя. Низкое значение SparingPolition обычно приводит к тому, что каждый нейрон в скрытом слое «специализируется», только давая высокий выход для небольшого количества тренировочных примеров. Следовательно, малая доля разреженности способствует более высокой степени разреженности. См. раздел Разреженные автокодеры.
Пример: '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' - Индикатор использования GPU для обученияfalse (по умолчанию) | trueИндикатор использования графического процессора для обучения, определяемый как разделенная запятыми пара, состоящая из 'UseGPU' и либо true или false.
Пример: 'UseGPU',true
autoenc - Обученный автокодировщикAutoencoder объектОбученный автокодировщик, возвращенный как Autoencoder объект. Сведения о свойствах и методах этого объекта см. в разделе Autoencoder страница класса.
Автокодер - это нейронная сеть, которая обучена воспроизводить свой вход на выходе. Автокодеры могут использоваться в качестве инструментов для изучения глубоких нейронных сетей. Обучение автоматическому кодированию не контролируется в том смысле, что не требуется маркированных данных. Процесс обучения по-прежнему основан на оптимизации функции затрат. Функция затрат измеряет ошибку между входом x и его реконструкцией на выходе ^.
Автокодер состоит из кодера и декодера. Кодер и декодер могут иметь несколько уровней, но для простоты следует учитывать, что каждый из них имеет только один уровень.
Если вход в автокодер является вектором , то кодер отображает вектор x в другой вектор ) следующим образом :
+ b (1)),
где надстрочный индекс (1) указывает первый слой. →ℝD (1) - передаточная функция для ∈ℝD (1) × Dx - весовая b (1) ∈ℝD (1) - вектор смещения. Затем декодер преобразует кодированное представление z обратно в оценку исходного входного вектора x следующим образом:
+ b (2)),
где надстрочный индекс (2) представляет второй слой. ℝDx→ℝDx является передаточной функцией для ∈ℝDx×D (1) является весовой матрицей(2) ∈ℝDx является вектором смещения.
Поощрение разреженности автокодера возможно путем добавления регуляризатора к функции затрат [2]. Этот регуляризатор является функцией среднего значения активации выхода нейрона. Средняя величина выходной активации нейрона i определяется как:
bi (1)),
где n - общее число примеров обучения. xj - j-й тренировочный пример, T - i-я строка (1), (1) - i-я запись смещения
Регулятор разреженности пытается наложить ограничение на разреженность выхода из скрытого слоя. Разреженность можно стимулировать, добавляя термин регуляризации, который принимает большое значение, когда среднее значение активации, i, нейрона i и его желаемое значениеstart, не близки по значению [2]. Одним из таких членов регуляризации разреженности может быть дивергенция Куллбэка-Лейблера.
Дивергенция Куллбэка - Лейблера является функцией для измерения того, насколько различны два распределения. В этом случае оно принимает нулевое значение, когда и равны друг другу, и становится больше, когда они расходятся друг от друга. Минимизация функции затрат вынуждает этот термин быть маленьким, , "" "" "" SparsityProportion аргумент пары имя-значение во время обучения автокодировщика.
При обучении разреженного автокодера можно сделать регулятор разреженности малым путем увеличения значений весов w (l) и уменьшения значений z (1) [2]. Добавление термина регуляризации весов в функцию затрат предотвращает его появление. Этот термин называется термином регуляризации L2 и определяется следующим образом:
2,
где L - количество скрытых слоев, n - количество наблюдений (примеров), k - количество переменных в обучающих данных.
Функция затрат для обучения разреженного автокодера представляет собой скорректированную среднеквадратичную функцию ошибок следующим образом:
error+λ*Ωweights︸L2regularization+β*Ωsparsity︸sparsityregularization,
где λ - коэффициент для члена регуляризации L2, а β - коэффициент для члена регуляризации разреженности. Можно задать значения λ и β, используя L2WeightRegularization и SparsityRegularization аргументы пары имя-значение, соответственно, во время обучения автокодировщика.
[1] Моллер, М. Ф. «Масштабированный алгоритм сопряженного градиента для быстрого контролируемого обучения», Neural Networks, том 6, 1993, стр. 525-533.
[2] Ольсхаузен, Б. А. и Д. Дж. Филд. «Разреженное кодирование с чрезмерно полным набором базиса: стратегия, используемая V1.» Vision Research, Vol.37, 1997, стр. 3311-3325.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.