Автокодировщик — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 1: Строка 1:
 +
{| class="wikitable" align="center" style="color: red; background-color: black; font-size: 56px; width: 800px;"
 +
|+
 +
|-align="center"
 +
|'''НЕТ ВОЙНЕ'''
 +
|-style="font-size: 16px;"
 +
|
 +
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.
 +
 +
Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием.
 +
 +
Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей.
 +
 +
Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить.
 +
 +
''Антивоенный комитет России''
 +
|-style="font-size: 16px;"
 +
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.
 +
|-style="font-size: 16px;"
 +
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].
 +
|}
 +
 +
  
 
[[File:Autoencoder1RUS1998ALEX.png|300px|thumb|Автокодировщик]]
 
[[File:Autoencoder1RUS1998ALEX.png|300px|thumb|Автокодировщик]]

Версия 06:52, 1 сентября 2022

НЕТ ВОЙНЕ

24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.

Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием.

Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей.

Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить.

Антивоенный комитет России

Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.
meduza.io, Популярная политика, Новая газета, zona.media, Майкл Наки.


Автокодировщик

Автокодировщик (англ. autoencoder) — специальная архитектура искусственных нейронных сетей, позволяющая применять обучение без учителя при использовании метода с обратного распространения ошибки. Простейшая архитектура автокодировщика — сеть прямого распространения, без обратных связей, наиболее схожая с перцептроном и содержащая входной слой, промежуточный слой и выходной слой. В отличие от перцептрона , выходной слой автокодировщика должен содержать столько же нейронов, сколько и входной слой.

Автокодировщик состоит из двух частей: энкодера [math]g[/math] и декодера [math]f[/math]. Энкодер переводит входной сигнал в его представление (код): [math]h = g(x)[/math], а декодер восстанавливает сигнал по его коду: [math]x = f(h)[/math].

Автокодировщик, изменяя [math]f[/math] и [math]g[/math], стремится выучить тождественную функцию [math]x = f(g(x))[/math], минимизируя какой-то функционал ошибки. [math]L(x, f(g(x)))[/math]

При этом семейства функций энкодера [math]g[/math] и декодера [math]f[/math] как-то ограничены, чтобы автоэнкодер был вынужден отбирать наиболее важные свойства сигнала.

Автокодировщик можно использовать для предобучения, например, когда стоит задача классификации, а размеченных пар слишком мало. Или для понижения размерности в данных для последующей визуализации. Либо когда просто надо научиться различать полезные свойства входного сигнала.

Пример

AutoencoderExampel.png

Для примера возьмем набор данных для продуктов, купленных клиентами

  • Шаг 1: Возьмем первую строку из данных по клиенту для всех продуктов в качестве входа. [math]1[/math] означает, что клиент купил продукт. [math]0[/math] означает, что клиент не купил.
  • Шаг 2: Закодируем ввод в другой вектор [math]h[/math] меньшего размера, чем входной. Можно использовать функцию активации сигмоида для [math]h[/math], так как она ее область значения от [math]0[/math] до [math]1[/math]. [math]W[/math] - вес, примененный к входу, [math]b[/math] — член смещения.

[math]h = f(Wx+b)[/math]

  • Шаг 3: Декодируем вектор [math]h[/math], чтобы воссоздать ввод. Выход будет того же размера, что и вход
  • Шаг 4: Рассчитать ошибку [math]L[/math]. Ошибка — это разница между входным и выходным вектором. Наша цель — минимизировать ошибку, чтобы выходной вектор был похож на входной вектор.
  • Шаг 5: С помощью алгоритма обратного распространения ошибки нужно обновить веса. Скорость обучения определяется тем, насколько обновляются веса.
  • Шаг 6: Повторите шаги с [math]1[/math] по [math]5[/math] для каждого клиента в наборе данных. Веса обновляются каждый раз (стохастический градиентный спуск)
  • Шаг 7: Повторите для большего количества эпох. Эпоха - это когда все строки в наборе данных прошли через нейронную сеть.

Использование

  • Нелинейное уменьшения размерности. Кодирует ввод в скрытом слое с меньшей размерностью по сравнению с входным измерением. Скрытый слой позже декодируется как выходной. Автоэнкодер уменьшает размерность линейных и нелинейных данных, следовательно, он более мощный, чем метод главных компонент[на 3.04.19 не создан].
  • Рекомендации пользователям. При этом используются глубокие кодеры, чтобы понять пользовательские предпочтения, порекомендовать фильмы, книги или предметы
  • Извлечения зависимостей в данных: автоэнкодеры пытаются минимизировать ошибку восстановления. В процессе уменьшения ошибки он изучает некоторые важные зависимости, присутствующие во входных данных. Он восстанавливает входные данные из кодированного состояния. Кодирование генерирует новый набор функций, который представляет собой комбинацию оригинальных зависимостей. Кодирование в автоэнкодерах помогает идентифицировать скрытые зависимости, присутствующие во входных данных.
  • Распознавание изображений: для распознавания изображений используется сложный автоэнкодер. Можно использовать несколько совмещенных кодировщиков, что помогает изучить различные функции изображения.

Виды автокодировщиков

Undercomplete Autoencoders

Имеют меньший размер скрытого слоя по сравнению с входным слоем. Это помогает выделить зависимости из данных. Undercomplete Autoencoders минимизируют функцию потерь, штрафуя [math]g(f(x))[/math] за отличия от входных данных x. Так же не нуждаются в регуляризации, поскольку максимизируют вероятность данных, а не копируют входные данные в выходные.

[math]L = |x - f(g(x))|[/math]

Sparse Autoencoders[1]

Размерность скрытого слоя больше, чем входного. Они все еще могут обнаружить важные особенности из данных. На скрытый слой накладывается штраф за разреженность, [math]Ω(h)[/math], значение, близкое к нулю, в дополнение к ошибке восстановления. Это предотвращает переобучение.

[math]L = |x - f(g(x))| + Ω(h)[/math]

Denoising Autoencoders(DAE)[2]

Создаем поврежденную копию ввода, внося некоторый шум. Это помогает обучить убирать шум из данных. DAE минимизирует функцию потерь между выходным узлом и поврежденным вводом.

[math]L = |x' - f(g(x))|[/math]

Contractive Autoencoders(CAE)[3]

Целью CAE является получение надежного представления данных, которое менее чувствительно к небольшим изменениям. Надежность представления данных достигается путем регуляризации. Наказание в CAE это норма Фробениуса матрицы Якоби, которая вычисляется для скрытого слоя относительно входных данных. Фробениусовой нормой матрицы Якоби является сумма квадратов всех элементов.

[math]L = |x - f(g(x))| + \lambda*||J_f(x)||_F^2[/math]

[math]||J_f(x)||_F^2 = sum_{i, j}(\partial h_j(x) / \partial x_i)^2[/math]

Stacked Denoising Autoencoders[4]

Stacked Autoencoders — это нейронная сеть с несколькими слоями Sparse Autoencoders. Когда мы добавляем в автоэнкодер больше скрытых слоев, это помогает уменьшить объемные код, получаемый кодировщиком. Restricted Boltzmann Machine (RBM) является основной частью сети глубокого убеждения.

Deep Autoencoders[5]

Состоит из двух идентичных глубоких сетей. Одна сеть для кодирования и другая для декодирования. Обычно имеют от 4 до 5 уровней для кодирования и следующие от 4 до 5 уровней для декодирования.

Вариационный автокодировщик

Автокодировщик, основанный на вариационном выводе.

Пример реализации

Ниже приведена реализация частного случая автокодировщика на языке Python с использованием библиотеки Keras. Эта реализация работает с датасетом рукописных цифр MNIST.

def create_dense_ae(): 
    # Размерность кодированного представления
    encoding_dim = 49

    # Энкодер
    # Входной плейсхолдер
    input_img = Input(shape=(28, 28, 1)) # 28, 28, 1 — размерности строк, столбцов, фильтров одной картинки, без батч-размерности
    # Вспомогательный слой решейпинга
    flat_img = Flatten()(input_img)
    # Кодированное полносвязным слоем представление
    encoded = Dense(encoding_dim, activation='relu')(flat_img)
   
    # Декодер
    # Раскодированное другим полносвязным слоем изображение
    input_encoded = Input(shape=(encoding_dim,))
    flat_decoded = Dense(28*28, activation='sigmoid')(input_encoded)
    decoded = Reshape((28, 28, 1))(flat_decoded)
    # Модели, в конструктор первым аргументом передаются входные слои, а вторым выходные слои
    # Другие модели можно так же использовать как и слои
    encoder = Model(input_img, encoded, name="encoder")
    decoder = Model(input_encoded, decoded, name="decoder")
    autoencoder = Model(input_img, decoder(encoder(input_img)), name="autoencoder")
    return encoder, decoder, autoencoder
# Создание модели
encoder, decoder, autoencoder = create_dense_ae()
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')

См. также

Примечания

Источники информации