PixelRNN и PixelCNN — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Обновление описания)
(Идея)
Строка 14: Строка 14:
  
 
=== Идея ===
 
=== Идея ===
 +
Т.к. утверждается, что значение текущего пикселя зависит от значений предыдущего, то уместно использовать [[:Рекуррентные_нейронные_сети|RNN]], а точнее [[Долгая краткосрочная память|LSTM]]. В ранних работах уже использовался данный подход, и для вычисление <tex>h_{ij}</tex> - скрытого состояния, необходимы были значения <tex>h_{i-1j}</tex>, <tex>h_{ij-1}</tex>, <tex>x_{ij}</tex>, т.е. для того, чтобы вычислить текущее скрытое состояние, нужно было подсчитать все предыдущие, что занимает достаточно много времени.
 +
 +
Авторы алгоритма модернизировали [[Долгая краткосрочная память|LSTM]] таким образом, чтобы стало возможным распараллеливание вычислений, что в итоге положительно сказывается на времени обучения модели.
 +
 
=== Архитектура ===
 
=== Архитектура ===
 
=== Плюсы и минусы ===
 
=== Плюсы и минусы ===

Версия 21:07, 22 марта 2020

Пример использования PixelRNN/PixelCNN сетей

PixelRNN/PixelCNN - алгоритмы машинного обучения, входящие в семейство авторегрессивных моделей. Используются для генерации и дополнения изображений. Алгоритмы были представлены в 2016 году компанией DeepMind и являются предшественниками алгоритма WaveNet, который используется в голосовом помощнике Google.

Основным преимуществом PixelRNN/PixelCNN является уменьшение времени обучения, по сравнению с наивными способами попиксельной генерации изображений.

Идея

Пусть дано черно-белое изображение [math]X[/math] размером [math]N\times N[/math]. Построчно преобразуем картинку в вектор [math]V_X = \{x_1, x_2, \dots, x_{N^2} \}[/math], соединяя конец текущей строки с началом следующей. В таком представлении изображения можно предположить, что значение любого пикселя [math]x_i\in V_X[/math] может зависеть от значений предыдущих пикселей [math]x_j, j = 1,2,\dots i-1[/math].

Тогда значение пикселя [math]x_i\in V_X[/math] можно выразить через условную вероятность [math]p(x_i|x_1, x_2, \dots x_{i-1})[/math], и, используя цепное правило для вероятностей, оценка совместного распределения всех пикселей будет записываться в следующем виде: [math]p(X)=\prod_{i=1}^{N^2}p(x_i|x_1, x_2, \dots x_{i-1})[/math].

Задача алгоритма - восстановить данное распределение. Учитывая тот факт, что любой пиксель принимает значение [math]0\lt =x_i\lt =255[/math], необходимо восстановить лишь дискретное распределение.

PixelRNN

Идея

Т.к. утверждается, что значение текущего пикселя зависит от значений предыдущего, то уместно использовать RNN, а точнее LSTM. В ранних работах уже использовался данный подход, и для вычисление [math]h_{ij}[/math] - скрытого состояния, необходимы были значения [math]h_{i-1j}[/math], [math]h_{ij-1}[/math], [math]x_{ij}[/math], т.е. для того, чтобы вычислить текущее скрытое состояние, нужно было подсчитать все предыдущие, что занимает достаточно много времени.

Авторы алгоритма модернизировали LSTM таким образом, чтобы стало возможным распараллеливание вычислений, что в итоге положительно сказывается на времени обучения модели.

Архитектура

Плюсы и минусы

PixelCNN

Идея

Архитектура

Плюсы и минусы

Сравнение с GAN

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