Изменения

Перейти к: навигация, поиск

PixelRNN и PixelCNN

112 байт убрано, 13:27, 25 декабря 2020
Преобразован текст
[[File:pixel-1.png|450px|thumb|Рисунок 1. Пример использования PixelRNN/PixelCNN сетей]]
'''''PixelRNN''''' и '''''PixelCNN''''' {{---}} алгоритмы машинного обучения, входящие в семейство авторегрессивных моделей. Используются и использующиеся для генерации и дополнения изображений. Алгоритмы были представлены в 2016 году компанией ''DeepMind''<ref name=PixelNet>[https://arxiv.org/abs/1601.06759 Pixel Recurrent Neural Networks]</ref> и являются предшественниками алгоритма ''WaveNet''<ref name=WaveNet>[https://deepmind.com/blog/article/wavenet-generative-model-raw-audio WaveNet: A generative model for raw audio]</ref>, который используется в голосовом помощнике ''Google''.
Основным преимуществом ''PixelRNN'' и ''PixelCNN'' является уменьшение времени обучения, по сравнению с наивными способами попиксельной генерации изображений.
Так как утверждается, что значение текущего пикселя зависит от значений предыдущего, то уместно использовать [[:Рекуррентные_нейронные_сети|''рекуррентные нейронные сети, RNN'']], а точнее [[Долгая краткосрочная память|''долгую краткосрочную память, LSTM'']]. В ранних работах<ref name=SpatialLSTM>[https://arxiv.org/abs/1506.03478 Generative Image Modeling Using Spatial LSTMs]</ref> уже использовался данный подход, и вычисление скрытого состояния происходило следующим образом: <tex>h_{i,j}=f(h_{i-1,j}, h_{i,j-1}, x_{i,j})</tex>, т.е. для того, чтобы вычислить текущее скрытое состояние, нужно было подсчитать все предыдущие, что занимает достаточно много времени.
Авторы алгоритма модернизировали [[Долгая краткосрочная память|''LSTM'']] в '''''RowLSTM''''' и '''''Diagonal BiLSTM''''' таким образом, чтобы стало возможным распараллеливание вычисленийдля получения возможности проводить вычисления параллельно, что в итоге положительно сказывается на времени ускоряет общее время обучения модели.
=== RowLSTM ===
[[File:pixel-2.png|350px|thumb|Рисунок 2. Визуализация работы модификаций ''LSTM''. Снизу кружками обозначены пиксели, сверху {{---}} состояния на каждом пикселе. Синим обозначено то, что влияет на текущее скрытое состояние. Пустые кружки не принимают участие в вычислениях для данного скрытого состояния]]
В данной модификации [[Долгая краткосрочная память|''LSTM'']] предлагается рассчитывать скрытое состояние следующим образомсчитается по формуле: <tex>h_{i,j}=f(h_{i-1,j-1}, h_{i-1,j}, h_{i-1,j+1}, x_{i,j})</tex>.
Как видно из формулы и Рисунка 2, значение текущего скрытого состояния не зависит от предыдущего слева, а зависит только от предыдущих сверху, которые можно считаются параллельно рассчитать.
Из плюсов данного Таким образом, главным преимуществом алгоритма можно отметить его быстродействие {{---}} модель обучается быстрее, нежели наивный перед наивным [[Долгая краткосрочная память|''LSTM'']]. Из минусов {{---}} относительно плохое является более быстрое обучение модели, однако качество получаемых изображенийухудшается. Это связанно как минимум с темОсновной проблемой подхода является то, что мы используем контекст пикселей модель не использует пиксели только с предыдущей строки, но никак не используем контекст соседнего пикселя слева пикселя, которые является который на самом деле достаточно важнымважен, т.к. является ближайшим с точки зрения в построчной генерации изображения.  Отсюда напрашивается идея каким-то образом найти Значит надо научиться находить скрытое состояние пикселя слева, но при этом не потерять в производительностиделать это эффективно.
=== Diagonal BiLSTM ===
[[File:pixel-3.png|350px|thumb|Рисунок 3. Операция сдвига в ''Diagonal BiLSTM''. Параллелизация происходит по диагоналям.]]
В данной версии скрытое состояние считается таким же образом, как и в наивном подходе: <tex>h_{i,j}=f(h_{i-1,j}, h_{i,j-1}, x_{i,j})</tex>, но при этом есть использует следующую хитрость в самом вычислении. Построчно {{---}} построчно сдвинем строки вправо на один пиксель относительно предыдущей, а затем вычислим скрытые состояния в каждом столбце, как показано на Рисунке 3. Данная версия позволяет учитывать Как следствие, контекст учитывается более качественно, но при этом занимает больше временичто повышает качество изображения, чем однако такая модификация замедляет модель по сравнению с подходом ''RowLSTM''.
=== PixelCNN ===
Идея в том, что обычно соседние пиксели (в рамках ядра 9x9) хранят самый важный контекст для пикселя. Поэтому , поэтому предлагается просто использовать известные пиксели для вычисления нового, как показано на рисунке 2.
== Архитектура ==
=== Маскированные сверточные слои ===
В описаниях алгоритмов фигурируют два типа маскированных сверточных слоя {{---}} '''''MaskA''''', '''''MaskB'''''. Они необходимы для сокрытия от алгоритма лишней информации и учета контекста {{---}} чтобы не обрабатывать изображение ускорить обработку изображения после каждого подсчета, удаляя предлагается вместо удаления значения пикселей, можно применить применять маску к изображению, что является более быстрой операцией.
Для каждого пикселя в цветном изображении в порядке очереди существуют три контекста: красный канал, зеленый и синий. В данном алгоритме очередь важна, т.е. если сейчас обрабатывается красный канал, то контекст только от предыдущих значений красного канала, если зеленый {{---}} то от всех значений на красном канале и предыдущих значениях на зеленом и т.д.
=== Уменьшение размерности ===
[[File:pixel-4.png|350px|thumb|Рисунок 4. Блоки уменьшения размерности. Слева {{---}} блок для ''PixelCNN'', справа {{---}} ''PixelRNN''. ]]
На вход в любой их указанных выше алгоритмов (''PixelCNN'', ''RowLSTM'', ''Diagonal BiLSTM'') подается большое количество объектов. Поэтому , поэтому внутри каждого из них сначала происходит уменьшение их количества в два раза, а затем обратное увеличение до исходного размера. Структура алгоритма с учетом уменьшения размерности показана на рисунке 4.
=== Внутреннее устройство LSTM ===
101
правка

Навигация