Автоэнкодер
Материал из MachineLearning.
(Новая: {{well|Статья написана с использованием LLM DeepSeek и проверена участником ~~~~}} = Автоэнкодеры = '''Автоэнкоде...) |
|||
| (2 промежуточные версии не показаны) | |||
| Строка 1: | Строка 1: | ||
{{well|Статья написана с использованием LLM DeepSeek и проверена участником [[Участник:Sanir Lukianov|Sanir Lukianov]] 13:26, 19 июля 2026 (MSD)}} | {{well|Статья написана с использованием LLM DeepSeek и проверена участником [[Участник:Sanir Lukianov|Sanir Lukianov]] 13:26, 19 июля 2026 (MSD)}} | ||
| - | = | + | = Автокодировщик (автоэнкодер) = |
| - | ''' | + | '''Автокодировщик''', или '''автоэнкодер''' (англ. ''autoencoder'') — это специальная архитектура [[искусственная нейронная сеть|искусственных нейронных сетей]], позволяющая применять [[обучение без учителя]] при использовании метода [[обратное распространение ошибки|обратного распространения ошибки]]<ref name="rumelhart1986learning">Rumelhart, D. E., Hinton, G. E., & Williams, R. J. (1986). Learning representations by back-propagating errors. ''Nature'', 323(6088), 533-536.</ref>. Основная цель автокодировщика — обучить сжатому, эффективному представлению (кодированию) набора данных, как правило, для целей [[снижение размерности|снижения размерности]] или [[обучение представлений|обучения представлений]]<ref name="goodfellow2016deep">Goodfellow, I., Bengio, Y., & Courville, A. (2016). ''Deep Learning''. MIT Press. (Глава 14: Autoencoders)</ref>. В отличие от моделей с учителем, которые предсказывают внешнюю целевую метку, автокодировщик обучается восстанавливать свои собственные входные данные как можно точнее. Пропуская данные через «узкое место» (''bottleneck'') внутри сети, модель вынуждена приоритизировать наиболее значимые признаки, отбрасывая шум и избыточность. |
| - | + | Термины «автокодировщик» и «автоэнкодер» являются полными синонимами. В русскоязычной литературе встречаются оба варианта; в данной статье они используются как взаимозаменяемые. | |
| - | + | == Архитектура и принцип работы == | |
| - | + | Простейшая архитектура автокодировщика — сеть прямого распространения без обратных связей, наиболее схожая с [[перцептрон]]ом и содержащая входной слой, промежуточный (скрытый) слой и выходной слой. В отличие от перцептрона, выходной слой автокодировщика должен содержать столько же нейронов, сколько и входной слой. | |
| - | + | ||
| - | + | Автокодировщик состоит из двух основных частей<ref name="kingma2014auto">Kingma, D. P., & Welling, M. (2014). Auto-encoding variational Bayes. ''arXiv preprint arXiv:1312.6114''.</ref>: | |
| - | '''[[ | + | * '''[[Энкодер]]''' (англ. ''encoder'') <tex>E: \mathcal{X} \to \mathcal{Z}</tex> — отображение входных данных <tex>\mathbf{x}</tex> в скрытое представление <tex>\mathbf{z}</tex> меньшей размерности. |
| - | + | * '''[[Декодер]]''' (англ. ''decoder'') <tex>D: \mathcal{Z} \to \mathcal{X}</tex> — восстановление данных из скрытого представления. | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | Скрытое представление <tex>\mathbf{z}</tex> часто называют ''кодом'' или ''латентным представлением''. Оно представляет собой компактное описание входного объекта, содержащее наиболее важные признаки. Процесс обучения автокодировщика заключается в минимизации ошибки восстановления (''reconstruction error''), то есть разницы между исходным входным сигналом <tex>\mathbf{x}</tex> и его восстановленной версией <tex>\hat{\mathbf{x}} = D(E(\mathbf{x}))</tex>. | |
| - | == Математическая постановка == | + | === Математическая постановка === |
| - | Пусть <tex>\mathcal{X} \subset \mathbb{R}^{d_x}</tex> — пространство входных данных. | + | Пусть <tex>\mathcal{X} \subset \mathbb{R}^{d_x}</tex> — пространство входных данных. Автокодировщик задаётся двумя параметрическими функциями: |
| - | * Энкодер: <tex>\mathbf{z} = E(\mathbf{x}; \theta_E)</tex>, где <tex>\mathbf{z} \in \mathbb{R}^{d_z}</tex>, <tex>d_z < d_x</tex>. | + | * Энкодер: <tex>\mathbf{z} = E(\mathbf{x}; \theta_E)</tex>, где <tex>\mathbf{z} \in \mathbb{R}^{d_z}</tex>, <tex>d_z < d_x</tex> (для ''undercomplete'' автокодировщиков). |
* Декодер: <tex>\hat{\mathbf{x}} = D(\mathbf{z}; \theta_D)</tex>, где <tex>\hat{\mathbf{x}} \in \mathbb{R}^{d_x}</tex>. | * Декодер: <tex>\hat{\mathbf{x}} = D(\mathbf{z}; \theta_D)</tex>, где <tex>\hat{\mathbf{x}} \in \mathbb{R}^{d_x}</tex>. | ||
| Строка 37: | Строка 29: | ||
<tex>\mathcal{L}(\theta_E, \theta_D) = \frac{1}{N} \sum_{i=1}^{N} \ell(\mathbf{x}_i, D(E(\mathbf{x}_i; \theta_E); \theta_D))</tex> | <tex>\mathcal{L}(\theta_E, \theta_D) = \frac{1}{N} \sum_{i=1}^{N} \ell(\mathbf{x}_i, D(E(\mathbf{x}_i; \theta_E); \theta_D))</tex> | ||
| - | Для вещественных данных чаще всего используют среднеквадратичную ошибку (MSE): | + | где <tex>\ell</tex> — функция потерь. Для вещественных данных чаще всего используют среднеквадратичную ошибку (MSE): |
<tex>\ell(\mathbf{x}, \hat{\mathbf{x}}) = \frac{1}{d_x} \|\mathbf{x} - \hat{\mathbf{x}}\|_2^2 = \frac{1}{d_x} \sum_{j=1}^{d_x} (x_j - \hat{x}_j)^2</tex> | <tex>\ell(\mathbf{x}, \hat{\mathbf{x}}) = \frac{1}{d_x} \|\mathbf{x} - \hat{\mathbf{x}}\|_2^2 = \frac{1}{d_x} \sum_{j=1}^{d_x} (x_j - \hat{x}_j)^2</tex> | ||
| - | Для бинарных данных применяется бинарная кросс-энтропия: | + | Для бинарных данных применяется бинарная [[кросс-энтропия]]: |
<tex>\ell(\mathbf{x}, \hat{\mathbf{x}}) = -\frac{1}{d_x} \sum_{j=1}^{d_x} \left[ x_j \log \hat{x}_j + (1 - x_j) \log (1 - \hat{x}_j) \right]</tex> | <tex>\ell(\mathbf{x}, \hat{\mathbf{x}}) = -\frac{1}{d_x} \sum_{j=1}^{d_x} \left[ x_j \log \hat{x}_j + (1 - x_j) \log (1 - \hat{x}_j) \right]</tex> | ||
| - | '''Важное замечание:''' Если размерность скрытого пространства <tex>d_z \ge d_x</tex> и энкодер с декодером достаточно мощные, | + | '''Важное замечание:''' Если размерность скрытого пространства <tex>d_z \ge d_x</tex> и энкодер с декодером достаточно мощные, автокодировщик может выучить тождественное отображение <tex>D(E(\mathbf{x})) = \mathbf{x}</tex>, что делает представление бесполезным. Поэтому необходимо либо ограничивать <tex>d_z < d_x</tex>, либо вводить регуляризацию<ref name="goodfellow2016deep"/>. |
| - | == | + | === Пример работы === |
| - | + | Рассмотрим работу автокодировщика на примере бинарных данных о покупках клиентов: | |
| - | + | # На вход подаётся вектор, где <tex>1</tex> означает, что клиент купил продукт, а <tex>0</tex> — что не купил. | |
| + | # Энкодер сжимает входной вектор в вектор <tex>h</tex> меньшего размера: <tex>h = f(Wx + b)</tex>, где <tex>W</tex> — веса, <tex>b</tex> — смещение. | ||
| + | # Декодер восстанавливает исходный вектор из <tex>h</tex>. | ||
| + | # Вычисляется ошибка между входным и выходным векторами. | ||
| + | # С помощью алгоритма обратного распространения ошибки обновляются веса. | ||
| + | # Процесс повторяется для каждого объекта в наборе данных (стохастический градиентный спуск) в течение нескольких эпох. | ||
| - | + | == Исторический контекст == | |
| - | + | ||
| - | + | Идея автокодировщиков восходит к работам по нейронным сетям 1980-х годов. Пионерской считается работа Румельхарта, Хинтона и Уильямса 1986 года<ref name="rumelhart1986learning"/>, где впервые была предложена архитектура с узким «горлышком» для обучения представлениям. | |
| - | + | ||
| - | + | Долгое время считалось, что глубокие автокодировщики трудно обучать из-за проблемы затухающего градиента. Прорыв произошёл в 2006 году, когда Хинтон и Салахудинов<ref name="hinton2006reducing">Hinton, G. E., & Salakhutdinov, R. R. (2006). Reducing the dimensionality of data with neural networks. ''Science'', 313(5786), 504-507.</ref> показали возможность эффективного обучения глубоких автокодировщиков с использованием послойной предварительной настройки (''greedy layer-wise pretraining''). Эта работа положила начало «ренессансу» глубоких нейронных сетей. | |
| - | + | ||
| - | + | В последующие годы появились важные модификации: шумоподавляющий автокодировщик (Vincent et al., 2008)<ref name="vincent2008extracting">Vincent, P., Larochelle, H., Bengio, Y., & Manzagol, P. A. (2008). Extracting and composing robust features with denoising autoencoders. ''Proceedings of the 25th International Conference on Machine Learning (ICML)'', 1096-1103.</ref>, контрактивный автокодировщик (Rifai et al., 2011)<ref name="rifai2011contractive">Rifai, S., Vincent, P., Muller, X., Glorot, X., & Bengio, Y. (2011). Contractive auto-encoders: Explicit invariance during feature extraction. ''Proceedings of the 28th International Conference on Machine Learning (ICML)'', 833-840.</ref> и вариационный автокодировщик (Kingma & Welling, 2014)<ref name="kingma2014auto"/>, который привёл к созданию целого семейства генеративных моделей. | |
| + | |||
| + | == Связь с методом главных компонент == | ||
| + | |||
| + | Линейный автокодировщик (без нелинейных функций активации) с одним скрытым слоем и функцией потерь MSE минимизирует ту же целевую функцию, что и [[метод главных компонент]] (PCA)<ref name="baldi1989autoencoders">Baldi, P., & Hornik, K. (1989). Neural networks and principal component analysis: Learning from examples without local minima. ''Neural Networks'', 2(1), 53-58.</ref>. Действительно, оптимальное решение соответствует проекции входных данных на подпространство первых <tex>d_z</tex> главных компонент. Декодер восстанавливает проекцию обратно. | ||
| + | |||
| + | '''Отличие:''' Нелинейные автокодировщики (с функциями активации) могут находить нелинейные многообразия, не сводимые к линейному PCA. Это делает их более мощным инструментом для работы со сложными структурами данных, например, с изображениями. Автокодировщик уменьшает размерность как линейных, так и нелинейных данных, следовательно, он более мощный, чем PCA. | ||
| + | |||
| + | == Разновидности автокодировщиков == | ||
| + | |||
| + | В зависимости от накладываемых ограничений и целевой задачи выделяют несколько основных разновидностей автокодировщиков. | ||
| + | |||
| + | === 1. Undercomplete Autoencoders === | ||
| + | |||
| + | Имеют меньший размер скрытого слоя по сравнению с входным слоем (<tex>d_z < d_x</tex>). Это помогает выделить зависимости из данных. Undercomplete Autoencoders минимизируют функцию потерь, штрафуя <tex>D(E(\mathbf{x}))</tex> за отличия от входных данных <tex>\mathbf{x}</tex>. Они не нуждаются в дополнительной регуляризации, поскольку само ограничение размерности предотвращает выучивание тождественного отображения. | ||
| - | + | === 2. Разреженный автокодировщик (Sparse Autoencoder, SAE) === | |
| - | = | + | Размерность скрытого слоя может быть больше, чем входного (''overcomplete''), но на скрытый слой накладывается штраф за разреженность — большинство нейронов должны быть неактивны для каждого объекта<ref name="ng2011sparse">Ng, A. (2011). Sparse autoencoder. ''CS294A Lecture notes'', 72(2011), 1-19.</ref>. Функция потерь: |
| - | = | + | <tex>\mathcal{L}_{\text{sparse}} = \mathcal{L}_{\text{rec}} + \beta \sum_{j=1}^{d_z} KL(\rho \| \hat{p}_j)</tex> |
| - | + | где <tex>\rho</tex> — целевой уровень разреженности (обычно небольшая величина, порядка 0.05), <tex>\hat{p}_j</tex> — среднее значение активации нейрона <tex>j</tex>, <tex>KL</tex> — [[дивергенция Кульбака — Лейблера]], <tex>\beta</tex> — коэффициент регуляризации. Альтернативно может использоваться L1-регуляризация. | |
| - | + | > ''Связь с современными LLM:'' В последние годы разреженные автокодировщики активно применяются для интерпретации внутренних представлений [[большие языковые модели|больших языковых моделей]] (LLM), позволяя выделять отдельные семантически значимые концепты в скрытом пространстве трансформеров. SAE помогают разделить суперпозицию признаков, когда один нейрон кодирует несколько несвязанных понятий, и присвоить им отдельные интерпретируемые признаки. | |
| - | + | '''Подробное описание архитектуры, методов регуляризации, обучения и применения разреженных автокодировщиков в контексте анализа нейросетей приведено в отдельной статье: [[Разреженный автокодировщик]].''' | |
| - | === | + | === 3. Шумоподавляющий автокодировщик (Denoising Autoencoder, DAE) === |
Обучается восстанавливать чистый объект из его зашумленной версии<ref name="vincent2008extracting"/>: | Обучается восстанавливать чистый объект из его зашумленной версии<ref name="vincent2008extracting"/>: | ||
| Строка 79: | Строка 90: | ||
<tex>\tilde{\mathbf{x}} = \text{noise}(\mathbf{x})</tex> — искажённый объект (например, добавлен гауссовский шум или занулены случайные пиксели). | <tex>\tilde{\mathbf{x}} = \text{noise}(\mathbf{x})</tex> — искажённый объект (например, добавлен гауссовский шум или занулены случайные пиксели). | ||
| - | Затем <tex>\hat{\mathbf{x}} = D(E(\tilde{\mathbf{x}}))</tex>, а функция потерь <tex>\ell(\mathbf{x}, \hat{\mathbf{x}})</tex> сравнивает с оригиналом. Это вынуждает модель выделять устойчивые признаки и улучшает обобщающую способность. | + | Затем <tex>\hat{\mathbf{x}} = D(E(\tilde{\mathbf{x}}))</tex>, а функция потерь <tex>\ell(\mathbf{x}, \hat{\mathbf{x}})</tex> сравнивает с оригиналом. Это вынуждает модель выделять устойчивые признаки и улучшает обобщающую способность. DAE эффективны для очистки изображений от шума, восстановления утерянных деталей, обработки медицинских изображений и астрофотографии. |
| - | === | + | === 4. Контрактивный автокодировщик (Contractive Autoencoder, CAE) === |
Добавляет регуляризатор, штрафующий чувствительность скрытого представления к малым изменениям входа<ref name="rifai2011contractive"/>: | Добавляет регуляризатор, штрафующий чувствительность скрытого представления к малым изменениям входа<ref name="rifai2011contractive"/>: | ||
| Строка 87: | Строка 98: | ||
<tex>\mathcal{L}_{\text{contractive}} = \mathcal{L}_{\text{rec}} + \lambda \| \frac{\partial E(\mathbf{x})}{\partial \mathbf{x}} \|_F^2</tex> | <tex>\mathcal{L}_{\text{contractive}} = \mathcal{L}_{\text{rec}} + \lambda \| \frac{\partial E(\mathbf{x})}{\partial \mathbf{x}} \|_F^2</tex> | ||
| - | где <tex>\|\cdot\|_F</tex> — норма Фробениуса. Это делает представления локально устойчивыми и инвариантными к малым возмущениям. | + | где <tex>\|\cdot\|_F</tex> — норма Фробениуса матрицы Якоби. Это делает представления локально устойчивыми и инвариантными к малым возмущениям. Наказание в CAE — это норма Фробениуса матрицы Якоби, которая вычисляется для скрытого слоя относительно входных данных. |
| - | === | + | === 5. Вариационный автокодировщик (Variational Autoencoder, VAE) === |
| - | Вероятностная версия | + | Вероятностная версия автокодировщика<ref name="kingma2014auto"/>, где скрытое представление <tex>\mathbf{z}</tex> — случайная величина с априорным распределением <tex>p(\mathbf{z}) = \mathcal{N}(0, I)</tex>. Энкодер приближает апостериорное распределение <tex>q(\mathbf{z}|\mathbf{x})</tex>, декодер — условное распределение <tex>p(\mathbf{x}|\mathbf{z})</tex>. Обучение максимизирует нижнюю оценку правдоподобия (ELBO): |
<tex>\mathcal{L}_{\text{VAE}} = \mathbb{E}_{q(\mathbf{z}|\mathbf{x})}[\log p(\mathbf{x}|\mathbf{z})] - D_{\text{KL}}(q(\mathbf{z}|\mathbf{x}) \| p(\mathbf{z}))</tex> | <tex>\mathcal{L}_{\text{VAE}} = \mathbb{E}_{q(\mathbf{z}|\mathbf{x})}[\log p(\mathbf{x}|\mathbf{z})] - D_{\text{KL}}(q(\mathbf{z}|\mathbf{x}) \| p(\mathbf{z}))</tex> | ||
| - | VAE является генеративной моделью и используется для создания новых объектов. Подробно описан в отдельной статье [[вариационный | + | VAE является генеративной моделью и используется для создания новых объектов. Подробно описан в отдельной статье [[вариационный автокодировщик]]. |
| - | == | + | === 6. Свёрточные автокодировщики (Convolutional Autoencoders) === |
| + | |||
| + | Используют [[свёртка|свёрточные]] и [[пулинг|пулинг-слои]] в энкодере и [[транспонированная свёртка|транспонированные свёртки]] в декодере. Они эффективно работают с изображениями, сохраняя пространственную структуру<ref name="masci2011stacked">Masci, J., Meier, U., Cireşan, D., & Schmidhuber, J. (2011). Stacked convolutional auto-encoders for hierarchical feature extraction. ''ICANN'', 52-59.</ref>. Свёрточные автокодировщики широко применяются для шумоподавления изображений, обнаружения аномалий в визуальных данных и предобучения свёрточных нейронных сетей. | ||
| + | |||
| + | === 7. Adversarial Autoencoders (AAE) === | ||
| + | |||
| + | Объединяют автокодировщики с [[генеративно-состязательные сети|генеративно-состязательными сетями]] (GAN) для регуляризации латентного пространства. В AAE дискриминатор обучается отличать истинные априорные выборки из латентного пространства от закодированных, что позволяет добиться более гладкого и структурированного латентного пространства<ref name="makhzani2015adversarial">Makhzani, A., Shlens, J., Jaitly, N., & Goodfellow, I. (2015). Adversarial autoencoders. ''arXiv preprint arXiv:1511.05644''.</ref>. | ||
| - | + | === 8. VQ-VAE (Vector Quantized VAE) === | |
| - | + | Использует дискретное скрытое пространство (словарь векторов), что позволяет генерировать чёткие изображения и применяется в моделях типа DALL-E<ref name="vandenoord2017neural">van den Oord, A., Vinyals, O., & Kavukcuoglu, K. (2017). Neural discrete representation learning. ''Advances in Neural Information Processing Systems (NeurIPS)'', 30.</ref>. | |
== Обучение и оптимизация == | == Обучение и оптимизация == | ||
| - | + | Автокодировщики обучаются с помощью алгоритма [[обратное распространение ошибки|обратного распространения ошибки]] (backpropagation) в комбинации с [[стохастический градиентный спуск|стохастическим градиентным спуском]] (SGD) или его улучшенными вариантами (Adam, RMSprop). | |
'''Ключевые гиперпараметры:''' | '''Ключевые гиперпараметры:''' | ||
| Строка 116: | Строка 133: | ||
'''Проблема «мёртвых нейронов»:''' В слоях с ReLU нейроны могут «умереть» (выход всегда 0). Решение: использовать Leaky ReLU, ELU или меньшую скорость обучения. | '''Проблема «мёртвых нейронов»:''' В слоях с ReLU нейроны могут «умереть» (выход всегда 0). Решение: использовать Leaky ReLU, ELU или меньшую скорость обучения. | ||
| - | Для глубоких | + | Для глубоких автокодировщиков часто используют предварительную настройку (pretraining) с помощью [[ограниченная машина Больцмана|ограниченных машин Больцмана]] (RBM) или послойного обучения<ref name="hinton2006reducing"/>. |
== Применения == | == Применения == | ||
=== Снижение размерности и визуализация === | === Снижение размерности и визуализация === | ||
| - | + | Автокодировщики используются для проецирования высокоразмерных данных (например, изображений, текстов) на двумерную или трёхмерную плоскость для визуализации. В отличие от t-SNE и UMAP, автокодировщики дают ''детерминированное'' и ''обучаемое'' отображение, которое можно применять к новым данным. | |
=== Шумоподавление === | === Шумоподавление === | ||
| Строка 127: | Строка 144: | ||
=== Детекция аномалий === | === Детекция аномалий === | ||
| - | Объекты с высокой ошибкой реконструкции считаются аномалиями<ref name="an2015variational">An, J., & Cho, S. (2015). Variational autoencoder based anomaly detection using reconstruction probability. ''Special Lecture on IE'', 2(1), 1-18.</ref>. Применяется в мониторинге промышленного оборудования, обнаружении мошенничества, контроле качества. | + | Объекты с высокой ошибкой реконструкции считаются аномалиями<ref name="an2015variational">An, J., & Cho, S. (2015). Variational autoencoder based anomaly detection using reconstruction probability. ''Special Lecture on IE'', 2(1), 1-18.</ref>. Применяется в мониторинге промышленного оборудования, обнаружении мошенничества, контроле качества. Когда обрабатывается необычный вход (например, дефектная деталь на сборочной линии или мошеннический сетевой пакет), ошибка реконструкции значительно возрастает, сигнализируя о потенциальной проблеме. |
=== Генерация данных === | === Генерация данных === | ||
| - | Вариационные | + | Вариационные автокодировщики (VAE) используются для генерации новых объектов: изображений (лица, рукописные цифры), текстов, молекул в фармацевтике<ref name="kingma2014auto"/>. |
=== Предобучение представлений === | === Предобучение представлений === | ||
| - | + | Автокодировщики обучают универсальные представления на больших неразмеченных данных, которые затем используются для трансферного обучения на задачах с малой разметкой (например, классификация с малым числом примеров). Автокодировщик можно использовать для предобучения, например, когда стоит задача классификации, а размеченных пар слишком мало. | |
| + | === Рекомендательные системы === | ||
| + | Используются глубокие кодеры для понимания пользовательских предпочтений и рекомендации фильмов, книг или предметов<ref name="sedhain2015auto">Sedhain, S., Menon, A. K., Sanner, S., & Xie, L. (2015). Autorec: Autoencoders meet collaborative filtering. ''Proceedings of the 24th WWW'', 111-112.</ref>. | ||
| + | |||
| + | === Интерпретация LLM и извлечение концептов === | ||
| + | В контексте больших языковых моделей (LLM) автокодировщики, особенно разреженные, применяются для анализа внутренних состояний трансформеров. Они позволяют проецировать многомерные эмбеддинги в интерпретируемое пространство и выявлять отдельные концепты (тематику, стиль, синтаксические конструкции), что критически важно для обеспечения безопасности и контролируемости ИИ-систем. | ||
== Ограничения и открытые вопросы == | == Ограничения и открытые вопросы == | ||
'''Основные ограничения:''' | '''Основные ограничения:''' | ||
* '''Размытость генерации:''' VAE генерирует размытые изображения по сравнению с GAN. | * '''Размытость генерации:''' VAE генерирует размытые изображения по сравнению с GAN. | ||
| - | * '''Необходимость регуляризации:''' Без регуляризации | + | * '''Необходимость регуляризации:''' Без регуляризации автокодировщик может выучить тождественное отображение. |
| - | * '''Чувствительность к инициализации:''' Глубокие | + | * '''Чувствительность к инициализации:''' Глубокие автокодировщики требуют хорошей инициализации. |
* '''Выбор размерности:''' Не существует универсального правила для выбора <tex>d_z</tex>. | * '''Выбор размерности:''' Не существует универсального правила для выбора <tex>d_z</tex>. | ||
| + | * '''Зависимость от пиксельной ошибки:''' reliance on pixel-wise reconstruction loss can cause the model to overlook high-level semantic features, resulting in visually accurate but semantically meaningless outputs. | ||
'''Открытые вопросы:''' | '''Открытые вопросы:''' | ||
* Как выбирать архитектуру (глубину, ширину, тип слоёв) для конкретной задачи? | * Как выбирать архитектуру (глубину, ширину, тип слоёв) для конкретной задачи? | ||
* Как интерпретировать скрытое пространство и делать его семантически осмысленным? | * Как интерпретировать скрытое пространство и делать его семантически осмысленным? | ||
| - | * Как объединить | + | * Как объединить автокодировщики с другими методами (GAN, диффузионные модели) для улучшения качества? |
== Современные направления == | == Современные направления == | ||
| - | * '''VQ-VAE | + | * '''VQ-VAE'''<ref name="vandenoord2017neural"/> — использует дискретное скрытое пространство (словарь векторов), что позволяет генерировать чёткие изображения и применяется в моделях типа DALL-E. |
* '''Диффузионные модели''' — развивают идеи VAE, постепенно добавляя и убирая шум для генерации высококачественных изображений (DDPM, Stable Diffusion). | * '''Диффузионные модели''' — развивают идеи VAE, постепенно добавляя и убирая шум для генерации высококачественных изображений (DDPM, Stable Diffusion). | ||
| - | * '''Комбинация с GAN:''' AAE (Adversarial Autoencoders) объединяют | + | * '''Комбинация с GAN:''' AAE (Adversarial Autoencoders) объединяют автокодировщики с генеративно-состязательными сетями для улучшения генерации. |
| - | * '''Графовые | + | * '''Графовые автокодировщики (Graph Autoencoders)'''<ref name="kipf2016variational">Kipf, T. N., & Welling, M. (2016). Variational graph auto-encoders. ''arXiv preprint arXiv:1611.07308''.</ref> — для обучения представлений на графовых данных (социальные сети, молекулы). |
| + | * '''Применение в механизмах внимания:''' Исследуется использование автокодировщиков для сжатия ключей и значений (keys/values) в трансформерах, что позволяет ускорить инференс длинноконтекстных LLM. | ||
== Практические рекомендации == | == Практические рекомендации == | ||
| - | 1. '''Выбор архитектуры:''' Для изображений используйте | + | 1. '''Выбор архитектуры:''' Для изображений используйте свёрточные автокодировщики, для табличных данных — полносвязные. Начинайте с 2-3 слоёв, увеличивая глубину при необходимости. |
| + | |||
2. '''Размерность скрытого пространства:''' Начните с <tex>d_z = 32</tex> для изображений 64×64 и экспериментируйте в диапазоне 8–128. | 2. '''Размерность скрытого пространства:''' Начните с <tex>d_z = 32</tex> для изображений 64×64 и экспериментируйте в диапазоне 8–128. | ||
| - | 3. '''Выбор типа:''' Для снижения размерности — стандартный | + | |
| + | 3. '''Выбор типа:''' Для снижения размерности — стандартный автокодировщик. Для генерации — VAE. Для устойчивости к шуму — Denoising AE. | ||
| + | |||
4. '''Предобработка:''' Масштабируйте входные данные к диапазону [0,1] или [-1,1]. Используйте нормализацию. | 4. '''Предобработка:''' Масштабируйте входные данные к диапазону [0,1] или [-1,1]. Используйте нормализацию. | ||
| + | |||
5. '''Оценка качества:''' Используйте MSE для реконструкции, визуализацию реконструированных объектов, для VAE — отрицательную логарифмическую вероятность (NLL). | 5. '''Оценка качества:''' Используйте MSE для реконструкции, визуализацию реконструированных объектов, для VAE — отрицательную логарифмическую вероятность (NLL). | ||
| + | |||
6. '''Регуляризация:''' Добавляйте Dropout (0.2-0.5) или Weight Decay (1e-5 – 1e-4) для борьбы с переобучением. | 6. '''Регуляризация:''' Добавляйте Dropout (0.2-0.5) или Weight Decay (1e-5 – 1e-4) для борьбы с переобучением. | ||
| Строка 170: | Строка 199: | ||
* [[Снижение размерности]] | * [[Снижение размерности]] | ||
* [[Метод главных компонент]] | * [[Метод главных компонент]] | ||
| - | * [[ | + | * [[Вариационный автокодировщик]] |
* [[Генеративные модели]] | * [[Генеративные модели]] | ||
* [[Шумоподавление]] | * [[Шумоподавление]] | ||
* [[Детекция аномалий]] | * [[Детекция аномалий]] | ||
* [[Свёрточные нейронные сети]] | * [[Свёрточные нейронные сети]] | ||
| + | * '''[[Разреженный автокодировщик]]''' | ||
== Примечания == | == Примечания == | ||
| Строка 189: | Строка 219: | ||
6. Kingma, D. P., & Welling, M. (2014). Auto-encoding variational Bayes. ''arXiv preprint arXiv:1312.6114''. | 6. Kingma, D. P., & Welling, M. (2014). Auto-encoding variational Bayes. ''arXiv preprint arXiv:1312.6114''. | ||
7. Ng, A. (2011). Sparse autoencoder. ''CS294A Lecture notes'', 72(2011), 1-19. | 7. Ng, A. (2011). Sparse autoencoder. ''CS294A Lecture notes'', 72(2011), 1-19. | ||
| - | 8. | + | 8. Goodfellow, I., Bengio, Y., & Courville, A. (2016). ''Deep Learning''. MIT Press. |
9. van den Oord, A., Vinyals, O., & Kavukcuoglu, K. (2017). Neural discrete representation learning. ''Advances in Neural Information Processing Systems (NeurIPS)'', 30. | 9. van den Oord, A., Vinyals, O., & Kavukcuoglu, K. (2017). Neural discrete representation learning. ''Advances in Neural Information Processing Systems (NeurIPS)'', 30. | ||
10. Kipf, T. N., & Welling, M. (2016). Variational graph auto-encoders. ''arXiv preprint arXiv:1611.07308''. | 10. Kipf, T. N., & Welling, M. (2016). Variational graph auto-encoders. ''arXiv preprint arXiv:1611.07308''. | ||
| - | 11. | + | 11. An, J., & Cho, S. (2015). Variational autoencoder based anomaly detection using reconstruction probability. ''Special Lecture on IE'', 2(1), 1-18. |
| - | 12. | + | 12. Sedhain, S., Menon, A. K., Sanner, S., & Xie, L. (2015). Autorec: Autoencoders meet collaborative filtering. ''Proceedings of the 24th WWW'', 111-112. |
| - | 13. | + | 13. Makhzani, A., Shlens, J., Jaitly, N., & Goodfellow, I. (2015). Adversarial autoencoders. ''arXiv preprint arXiv:1511.05644''. |
| - | 14. | + | 14. Masci, J., Meier, U., Cireşan, D., & Schmidhuber, J. (2011). Stacked convolutional auto-encoders for hierarchical feature extraction. ''ICANN'', 52-59. |
| - | + | ||
== Ссылки == | == Ссылки == | ||
| - | * [http://www.machinelearning.ru/wiki/index.php?title=%D0%9D%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8 Нейронные сети] | + | * [http://www.machinelearning.ru/wiki/index.php?title=%D0%9D%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8 Нейронные сети на machinelearning.ru] |
* [https://www.deeplearningbook.org/contents/autoencoders.html Глава про автоэнкодеры в книге Goodfellow et al.] | * [https://www.deeplearningbook.org/contents/autoencoders.html Глава про автоэнкодеры в книге Goodfellow et al.] | ||
* [https://arxiv.org/abs/1312.6114 Оригинальная статья VAE] | * [https://arxiv.org/abs/1312.6114 Оригинальная статья VAE] | ||
| + | * [https://tensorflow.google.cn/tutorials/generative/autoencoder?hl=ru Введение в автоэнкодеры от TensorFlow] | ||
[[Категория:Машинное обучение]] | [[Категория:Машинное обучение]] | ||
Текущая версия
| | Статья написана с использованием LLM DeepSeek и проверена участником Sanir Lukianov 13:26, 19 июля 2026 (MSD) |
Автокодировщик (автоэнкодер)
Автокодировщик, или автоэнкодер (англ. autoencoder) — это специальная архитектура искусственных нейронных сетей, позволяющая применять обучение без учителя при использовании метода обратного распространения ошибки[1]. Основная цель автокодировщика — обучить сжатому, эффективному представлению (кодированию) набора данных, как правило, для целей снижения размерности или обучения представлений[1]. В отличие от моделей с учителем, которые предсказывают внешнюю целевую метку, автокодировщик обучается восстанавливать свои собственные входные данные как можно точнее. Пропуская данные через «узкое место» (bottleneck) внутри сети, модель вынуждена приоритизировать наиболее значимые признаки, отбрасывая шум и избыточность.
Термины «автокодировщик» и «автоэнкодер» являются полными синонимами. В русскоязычной литературе встречаются оба варианта; в данной статье они используются как взаимозаменяемые.
Архитектура и принцип работы
Простейшая архитектура автокодировщика — сеть прямого распространения без обратных связей, наиболее схожая с перцептроном и содержащая входной слой, промежуточный (скрытый) слой и выходной слой. В отличие от перцептрона, выходной слой автокодировщика должен содержать столько же нейронов, сколько и входной слой.
Автокодировщик состоит из двух основных частей[1]:
- Энкодер (англ. encoder)
— отображение входных данных
в скрытое представление
меньшей размерности.
- Декодер (англ. decoder)
— восстановление данных из скрытого представления.
Скрытое представление часто называют кодом или латентным представлением. Оно представляет собой компактное описание входного объекта, содержащее наиболее важные признаки. Процесс обучения автокодировщика заключается в минимизации ошибки восстановления (reconstruction error), то есть разницы между исходным входным сигналом
и его восстановленной версией
.
Математическая постановка
Пусть — пространство входных данных. Автокодировщик задаётся двумя параметрическими функциями:
- Энкодер:
, где
,
(для undercomplete автокодировщиков).
- Декодер:
, где
.
Обучение состоит в минимизации эмпирического риска:
где — функция потерь. Для вещественных данных чаще всего используют среднеквадратичную ошибку (MSE):
Для бинарных данных применяется бинарная кросс-энтропия:
Важное замечание: Если размерность скрытого пространства и энкодер с декодером достаточно мощные, автокодировщик может выучить тождественное отображение
, что делает представление бесполезным. Поэтому необходимо либо ограничивать
, либо вводить регуляризацию[1].
Пример работы
Рассмотрим работу автокодировщика на примере бинарных данных о покупках клиентов:
- На вход подаётся вектор, где
означает, что клиент купил продукт, а
— что не купил.
- Энкодер сжимает входной вектор в вектор
меньшего размера:
, где
— веса,
— смещение.
- Декодер восстанавливает исходный вектор из
.
- Вычисляется ошибка между входным и выходным векторами.
- С помощью алгоритма обратного распространения ошибки обновляются веса.
- Процесс повторяется для каждого объекта в наборе данных (стохастический градиентный спуск) в течение нескольких эпох.
Исторический контекст
Идея автокодировщиков восходит к работам по нейронным сетям 1980-х годов. Пионерской считается работа Румельхарта, Хинтона и Уильямса 1986 года[1], где впервые была предложена архитектура с узким «горлышком» для обучения представлениям.
Долгое время считалось, что глубокие автокодировщики трудно обучать из-за проблемы затухающего градиента. Прорыв произошёл в 2006 году, когда Хинтон и Салахудинов[1] показали возможность эффективного обучения глубоких автокодировщиков с использованием послойной предварительной настройки (greedy layer-wise pretraining). Эта работа положила начало «ренессансу» глубоких нейронных сетей.
В последующие годы появились важные модификации: шумоподавляющий автокодировщик (Vincent et al., 2008)[1], контрактивный автокодировщик (Rifai et al., 2011)[1] и вариационный автокодировщик (Kingma & Welling, 2014)[1], который привёл к созданию целого семейства генеративных моделей.
Связь с методом главных компонент
Линейный автокодировщик (без нелинейных функций активации) с одним скрытым слоем и функцией потерь MSE минимизирует ту же целевую функцию, что и метод главных компонент (PCA)[1]. Действительно, оптимальное решение соответствует проекции входных данных на подпространство первых главных компонент. Декодер восстанавливает проекцию обратно.
Отличие: Нелинейные автокодировщики (с функциями активации) могут находить нелинейные многообразия, не сводимые к линейному PCA. Это делает их более мощным инструментом для работы со сложными структурами данных, например, с изображениями. Автокодировщик уменьшает размерность как линейных, так и нелинейных данных, следовательно, он более мощный, чем PCA.
Разновидности автокодировщиков
В зависимости от накладываемых ограничений и целевой задачи выделяют несколько основных разновидностей автокодировщиков.
1. Undercomplete Autoencoders
Имеют меньший размер скрытого слоя по сравнению с входным слоем (). Это помогает выделить зависимости из данных. Undercomplete Autoencoders минимизируют функцию потерь, штрафуя
за отличия от входных данных
. Они не нуждаются в дополнительной регуляризации, поскольку само ограничение размерности предотвращает выучивание тождественного отображения.
2. Разреженный автокодировщик (Sparse Autoencoder, SAE)
Размерность скрытого слоя может быть больше, чем входного (overcomplete), но на скрытый слой накладывается штраф за разреженность — большинство нейронов должны быть неактивны для каждого объекта[1]. Функция потерь:
где — целевой уровень разреженности (обычно небольшая величина, порядка 0.05),
— среднее значение активации нейрона
,
— дивергенция Кульбака — Лейблера,
— коэффициент регуляризации. Альтернативно может использоваться L1-регуляризация.
> Связь с современными LLM: В последние годы разреженные автокодировщики активно применяются для интерпретации внутренних представлений больших языковых моделей (LLM), позволяя выделять отдельные семантически значимые концепты в скрытом пространстве трансформеров. SAE помогают разделить суперпозицию признаков, когда один нейрон кодирует несколько несвязанных понятий, и присвоить им отдельные интерпретируемые признаки.
Подробное описание архитектуры, методов регуляризации, обучения и применения разреженных автокодировщиков в контексте анализа нейросетей приведено в отдельной статье: Разреженный автокодировщик.
3. Шумоподавляющий автокодировщик (Denoising Autoencoder, DAE)
Обучается восстанавливать чистый объект из его зашумленной версии[1]:
— искажённый объект (например, добавлен гауссовский шум или занулены случайные пиксели).
Затем , а функция потерь
сравнивает с оригиналом. Это вынуждает модель выделять устойчивые признаки и улучшает обобщающую способность. DAE эффективны для очистки изображений от шума, восстановления утерянных деталей, обработки медицинских изображений и астрофотографии.
4. Контрактивный автокодировщик (Contractive Autoencoder, CAE)
Добавляет регуляризатор, штрафующий чувствительность скрытого представления к малым изменениям входа[1]:
где — норма Фробениуса матрицы Якоби. Это делает представления локально устойчивыми и инвариантными к малым возмущениям. Наказание в CAE — это норма Фробениуса матрицы Якоби, которая вычисляется для скрытого слоя относительно входных данных.
5. Вариационный автокодировщик (Variational Autoencoder, VAE)
Вероятностная версия автокодировщика[1], где скрытое представление — случайная величина с априорным распределением
. Энкодер приближает апостериорное распределение
, декодер — условное распределение
. Обучение максимизирует нижнюю оценку правдоподобия (ELBO):
VAE является генеративной моделью и используется для создания новых объектов. Подробно описан в отдельной статье вариационный автокодировщик.
6. Свёрточные автокодировщики (Convolutional Autoencoders)
Используют свёрточные и пулинг-слои в энкодере и транспонированные свёртки в декодере. Они эффективно работают с изображениями, сохраняя пространственную структуру[1]. Свёрточные автокодировщики широко применяются для шумоподавления изображений, обнаружения аномалий в визуальных данных и предобучения свёрточных нейронных сетей.
7. Adversarial Autoencoders (AAE)
Объединяют автокодировщики с генеративно-состязательными сетями (GAN) для регуляризации латентного пространства. В AAE дискриминатор обучается отличать истинные априорные выборки из латентного пространства от закодированных, что позволяет добиться более гладкого и структурированного латентного пространства[1].
8. VQ-VAE (Vector Quantized VAE)
Использует дискретное скрытое пространство (словарь векторов), что позволяет генерировать чёткие изображения и применяется в моделях типа DALL-E[1].
Обучение и оптимизация
Автокодировщики обучаются с помощью алгоритма обратного распространения ошибки (backpropagation) в комбинации с стохастическим градиентным спуском (SGD) или его улучшенными вариантами (Adam, RMSprop).
Ключевые гиперпараметры:
- Скорость обучения (learning rate) — обычно
–
для глубоких сетей.
- Размер батча (batch size) — от 32 до 256, зависит от размера данных и памяти.
- Функция потерь — MSE для вещественных данных, кросс-энтропия для бинарных.
- Регуляризация — Dropout (обычно 0.2–0.5), Weight Decay (L2-регуляризация).
Проблема «мёртвых нейронов»: В слоях с ReLU нейроны могут «умереть» (выход всегда 0). Решение: использовать Leaky ReLU, ELU или меньшую скорость обучения.
Для глубоких автокодировщиков часто используют предварительную настройку (pretraining) с помощью ограниченных машин Больцмана (RBM) или послойного обучения[1].
Применения
Снижение размерности и визуализация
Автокодировщики используются для проецирования высокоразмерных данных (например, изображений, текстов) на двумерную или трёхмерную плоскость для визуализации. В отличие от t-SNE и UMAP, автокодировщики дают детерминированное и обучаемое отображение, которое можно применять к новым данным.
Шумоподавление
Denoising Autoencoders эффективно очищают изображения от шума, восстанавливая утерянные детали[1]. Применяются в обработке медицинских изображений, астрофотографии, восстановлении старых фотографий.
Детекция аномалий
Объекты с высокой ошибкой реконструкции считаются аномалиями[1]. Применяется в мониторинге промышленного оборудования, обнаружении мошенничества, контроле качества. Когда обрабатывается необычный вход (например, дефектная деталь на сборочной линии или мошеннический сетевой пакет), ошибка реконструкции значительно возрастает, сигнализируя о потенциальной проблеме.
Генерация данных
Вариационные автокодировщики (VAE) используются для генерации новых объектов: изображений (лица, рукописные цифры), текстов, молекул в фармацевтике[1].
Предобучение представлений
Автокодировщики обучают универсальные представления на больших неразмеченных данных, которые затем используются для трансферного обучения на задачах с малой разметкой (например, классификация с малым числом примеров). Автокодировщик можно использовать для предобучения, например, когда стоит задача классификации, а размеченных пар слишком мало.
Рекомендательные системы
Используются глубокие кодеры для понимания пользовательских предпочтений и рекомендации фильмов, книг или предметов[1].
Интерпретация LLM и извлечение концептов
В контексте больших языковых моделей (LLM) автокодировщики, особенно разреженные, применяются для анализа внутренних состояний трансформеров. Они позволяют проецировать многомерные эмбеддинги в интерпретируемое пространство и выявлять отдельные концепты (тематику, стиль, синтаксические конструкции), что критически важно для обеспечения безопасности и контролируемости ИИ-систем.
Ограничения и открытые вопросы
Основные ограничения:
- Размытость генерации: VAE генерирует размытые изображения по сравнению с GAN.
- Необходимость регуляризации: Без регуляризации автокодировщик может выучить тождественное отображение.
- Чувствительность к инициализации: Глубокие автокодировщики требуют хорошей инициализации.
- Выбор размерности: Не существует универсального правила для выбора
.
- Зависимость от пиксельной ошибки: reliance on pixel-wise reconstruction loss can cause the model to overlook high-level semantic features, resulting in visually accurate but semantically meaningless outputs.
Открытые вопросы:
- Как выбирать архитектуру (глубину, ширину, тип слоёв) для конкретной задачи?
- Как интерпретировать скрытое пространство и делать его семантически осмысленным?
- Как объединить автокодировщики с другими методами (GAN, диффузионные модели) для улучшения качества?
Современные направления
- VQ-VAE[1] — использует дискретное скрытое пространство (словарь векторов), что позволяет генерировать чёткие изображения и применяется в моделях типа DALL-E.
- Диффузионные модели — развивают идеи VAE, постепенно добавляя и убирая шум для генерации высококачественных изображений (DDPM, Stable Diffusion).
- Комбинация с GAN: AAE (Adversarial Autoencoders) объединяют автокодировщики с генеративно-состязательными сетями для улучшения генерации.
- Графовые автокодировщики (Graph Autoencoders)[1] — для обучения представлений на графовых данных (социальные сети, молекулы).
- Применение в механизмах внимания: Исследуется использование автокодировщиков для сжатия ключей и значений (keys/values) в трансформерах, что позволяет ускорить инференс длинноконтекстных LLM.
Практические рекомендации
1. Выбор архитектуры: Для изображений используйте свёрточные автокодировщики, для табличных данных — полносвязные. Начинайте с 2-3 слоёв, увеличивая глубину при необходимости.
2. Размерность скрытого пространства: Начните с для изображений 64×64 и экспериментируйте в диапазоне 8–128.
3. Выбор типа: Для снижения размерности — стандартный автокодировщик. Для генерации — VAE. Для устойчивости к шуму — Denoising AE.
4. Предобработка: Масштабируйте входные данные к диапазону [0,1] или [-1,1]. Используйте нормализацию.
5. Оценка качества: Используйте MSE для реконструкции, визуализацию реконструированных объектов, для VAE — отрицательную логарифмическую вероятность (NLL).
6. Регуляризация: Добавляйте Dropout (0.2-0.5) или Weight Decay (1e-5 – 1e-4) для борьбы с переобучением.
См. также
- Обучение представлений
- Обучение без учителя
- Снижение размерности
- Метод главных компонент
- Вариационный автокодировщик
- Генеративные модели
- Шумоподавление
- Детекция аномалий
- Свёрточные нейронные сети
- Разреженный автокодировщик
Примечания
Литература
1. Rumelhart, D. E., Hinton, G. E., & Williams, R. J. (1986). Learning representations by back-propagating errors. Nature, 323(6088), 533-536. 2. Hinton, G. E., & Salakhutdinov, R. R. (2006). Reducing the dimensionality of data with neural networks. Science, 313(5786), 504-507. 3. Baldi, P., & Hornik, K. (1989). Neural networks and principal component analysis: Learning from examples without local minima. Neural Networks, 2(1), 53-58. 4. Vincent, P., Larochelle, H., Bengio, Y., & Manzagol, P. A. (2008). Extracting and composing robust features with denoising autoencoders. Proceedings of the 25th International Conference on Machine Learning (ICML), 1096-1103. 5. Rifai, S., Vincent, P., Muller, X., Glorot, X., & Bengio, Y. (2011). Contractive auto-encoders: Explicit invariance during feature extraction. Proceedings of the 28th ICML, 833-840. 6. Kingma, D. P., & Welling, M. (2014). Auto-encoding variational Bayes. arXiv preprint arXiv:1312.6114. 7. Ng, A. (2011). Sparse autoencoder. CS294A Lecture notes, 72(2011), 1-19. 8. Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press. 9. van den Oord, A., Vinyals, O., & Kavukcuoglu, K. (2017). Neural discrete representation learning. Advances in Neural Information Processing Systems (NeurIPS), 30. 10. Kipf, T. N., & Welling, M. (2016). Variational graph auto-encoders. arXiv preprint arXiv:1611.07308. 11. An, J., & Cho, S. (2015). Variational autoencoder based anomaly detection using reconstruction probability. Special Lecture on IE, 2(1), 1-18. 12. Sedhain, S., Menon, A. K., Sanner, S., & Xie, L. (2015). Autorec: Autoencoders meet collaborative filtering. Proceedings of the 24th WWW, 111-112. 13. Makhzani, A., Shlens, J., Jaitly, N., & Goodfellow, I. (2015). Adversarial autoencoders. arXiv preprint arXiv:1511.05644. 14. Masci, J., Meier, U., Cireşan, D., & Schmidhuber, J. (2011). Stacked convolutional auto-encoders for hierarchical feature extraction. ICANN, 52-59.

