PixelRNN и PixelCNN
PixelRNN/PixelCNN - алгоритмы машинного обучения, входящие в семейство авторегрессивных моделей. Используются для генерации и дополнения изображений. Алгоритмы были представлены в 2016 году компанией DeepMind и являются предшественниками алгоритма WaveNet, который используется в голосовом помощнике Google.
Основным преимуществом PixelRNN/PixelCNN является уменьшение времени обучения, по сравнению с наивными способами попиксельной генерации изображений.
Постановка задачи
Пусть дано черно-белое изображение
размером . Построчно преобразуем картинку в вектор , соединяя конец текущей строки с началом следующей. В таком представлении изображения можно предположить, что значение любого пикселя может зависеть от значений предыдущих пикселей .Тогда значение пикселя
можно выразить через условную вероятность , и, используя цепное правило для вероятностей, оценка совместного распределения всех пикселей будет записываться в следующем виде: .Задача алгоритма - восстановить данное распределение. Учитывая тот факт, что любой пиксель принимает значение
, необходимо восстановить лишь дискретное распределение.Идея
Т.к. утверждается, что значение текущего пикселя зависит от значений предыдущего, то уместно использовать RNN, а точнее LSTM. В ранних работах уже использовался данный подход, и вычисление скрытого состояния происходило следующим образом: , т.е. для того, чтобы вычислить текущее скрытое состояние, нужно было подсчитать все предыдущие, что занимает достаточно много времени.
Авторы алгоритма модернизировали LSTM в RowLSTM и BiLSTM таким образом, чтобы стало возможным распараллеливание вычислений, что в итоге положительно сказывается на времени обучения модели.
RowLSTM
В данной модификации LSTM предлагается рассчитывать скрытое состояние следующим образом: .
Как видно из формулы и Рисунка 2, значение текущего скрытого состояния не зависит от предыдущего слева, а зависит от предыдущих сверху, которые можно параллельно рассчитать.
Из плюсов данного алгоритма можно отметить его быстродействие - модель обучается быстрее, нежели наивный LSTM. Из минусов - относительно плохое качество получаемых изображений. Это связанно как минимум с тем, что чем больше становится пикселей, тем сложнее предсказать значение более удаленных от начала пикселей из-за сложности получаемого контекста.
Отсюда напрашивается идея размножить точки старта, чтобы контекст оставался менее сложным и запутанным.