Привет ребята! В этой истории я хотел бы поговорить о Deep AutoEncoders.

Лучшее определение дает Стэнфорд:

Нейронная сеть автоэнкодера - это алгоритм обучения без учителя, который применяет обратное распространение, устанавливая целевые значения, равные входным. То есть он использует y (i) = x (i).

Это простой автоэнкодер. AutoEncoder состоит из видимых единиц, скрытых единиц и реконструированных единиц. Их можно рассматривать как разные слои. Рассмотрим входной вектор как x

f(x) = s(Wx+b) ……..…………………………………….………………..(i)

используется для кодирования входных данных в скрытые единицы, где W - матрица весов, связанная с первыми двумя слоями, b - вектор смещения, связанный с видимыми единицами, а s - функция активации сигмоида. Это кодирует вход, скажем, от 6 видимых единиц до 3 скрытых единиц или что-то в этом роде. Теперь нам нужно восстановить выходные данные этих скрытых блоков. Это этап декодирования, на котором необходимо декодировать входные данные из закодированной версии.

g(y) = s(W′y+b′) …………………………………………………………..(ii)

здесь y - скрытый вектор. Мы используем концепцию связанных весов, чтобы получить лучший результат, то есть между слоями 2 и 3 мы использовали транспонирование весов между слоями 1 и 2. Итак, W ′ - это матрица транспонированных весов, b - вектор смещения, связанный со скрытыми единицами, а s - сигмоид. активация fn.

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

Использование поврежденных входных данных

Чтобы улучшить то, что сеть изучает, мы обучаем сеть не на исходных входах, а на их поврежденной версии. Мы маскируем входные значения случайным образом в соответствии с коррупционным уровнем, как если бы мы могли замаскировать 10% или 30% входных значений другими значениями или просто нулем и обучить сеть.

Как показано на рисунке, сеть пытается изучить и вернуть исходные блоки из поврежденной версии. Таким образом, этот тип версии можно легко использовать для обнаружения анамолии и получения правильных i / p. Возможно, мы также сможем использовать его для получения правильных сигналов, когда в сети есть какие-то повреждения.

Вот как мы обучаем поврежденный AutoEncoder. Сначала мы изменяем входной вектор с x на тильду x. Затем эта тильда x используется в качестве входных данных, и мы получаем через нее закодированный вектор (используя (i)). Затем, используя (ii), мы можем получить реконструированную версию ввода. Затем обновляются веса и смещения. Но имейте в виду, что мы вычисляем разницу между восстановленным вектором (скажем, z) и входным вектором x, а не тильдой x. Затем ошибка распространяется в обратном направлении, и мы обновляем веса и смещения.

Глубокая сеть

Это глубокая сеть автоэнкодеров. Здесь мы берем входной вектор, Обучаем слои, скажем, N нет эпох. Затем сгенерированная закодированная версия, то есть версия закодированных слоев после обучения N эпохам, передается в качестве входных данных на следующий уровень. Это продолжает формировать глубокую сеть автоэнкодеров. Это последовательное обучение автоэнкодеров называется PreTrain (). Это можно использовать для извлечения различных обученных функций после каждого слоя.

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

В следующем посте я расскажу, как я реализовал то же самое для TMVA.

Ваше здоровье!