Навіть незважаючи на те, що варіативні автокодери (VAE) легко впроваджувати та навчати, пояснення їх зовсім не просте, оскільки вони поєднують поняття з глибокого навчання та варіаційного байєсу, а громади глибокого навчання та ймовірнісного моделювання використовують різні терміни для одних і тих же концепцій. Таким чином, пояснюючи VAE, ви ризикуєте або сконцентруватися на частині статистичної моделі, не залишаючи читача поняття про те, як реально його реалізувати, або навпаки сконцентруватися на мережевій архітектурі та функції втрат, в якій, здається, є термін Куллбека-Лейблера витягнуте з повітря. Я спробую тут прорізати середнє місце, починаючи з моделі, але даю достатньо деталей, щоб реально реалізувати її на практиці або зрозуміти чиюсь іншу реалізацію.
VAE - це генеративні моделі
На відміну від класичних (розріджених, позначаючих тощо) автоенкодерів, VAE - це генеративні моделі, як GAN. Під генеративною моделлю я маю на увазі модель, яка вивчає розподіл ймовірностей над вхідним простором . Це означає, що після того, як ми навчили таку модель, ми зможемо відібрати з (нашого наближення) . Якщо наш навчальний набір виготовлений з рукописних цифр (MNIST), то після тренування генеративна модель здатна створювати зображення, схожі на рукописні цифри, хоча вони не є "копіями" зображень у навчальному наборі.p(x)xp(x)
Навчання розподілу зображень у навчальному наборі означає, що зображення, схожі на рукописні цифри, повинні мати велику ймовірність генерування, тоді як зображення, схожі на Веселий Роджер або випадковий шум, повинні мати низьку ймовірність. Іншими словами, це означає дізнатись про залежності між пікселями: якщо наше зображення - зображення 289 у сірий масштаб від MNIST, пікселів, модель повинна дізнатися, що якщо піксель дуже яскравий, то існує значна ймовірність того, що деякі сусідні пікселі теж яскраві, що якщо у нас довга похила лінія яскравих пікселів, у нас може бути ще одна менша, горизонтальна лінія пікселів вище цієї (7) тощо.28×28=784
VAE є прихованими змінними моделями
VAE - латентна модель змінних : це означає, що , випадковий вектор інтенсивності 784 пікселів ( спостережувані змінні), моделюється як (можливо, дуже складна) функція випадкового вектора меншої розмірності, компоненти якої є незастереженими ( прихованими ) змінними. Коли така модель має сенс? Наприклад, у випадку MNIST ми вважаємо, що рукописні цифри належать до багатовимірного розміру, значно меншому, ніж розмірністьxz ∈ Z xz∈Zx, оскільки переважна більшість випадкових розташувань інтенсивності 784 пікселів зовсім не виглядають як рукописна цифра. Інтуїтивно ми очікуємо, що розмір буде принаймні 10 (кількість цифр), але він, швидше за все, більший, оскільки кожну цифру можна записати різними способами. Деякі відмінності неважливі для якості кінцевого зображення (наприклад, глобальні обертання та переклади), але інші важливі. Тому в цьому випадку латентна модель має сенс. Детальніше про це пізніше. Зауважте, що, дивовижно, навіть якщо наша інтуїція говорить нам, що розмір має становити приблизно 10, ми напевно можемо використовувати лише 2 латентні змінні для кодування набору даних MNIST VAE (хоча результати не будуть досить гарними). Причина полягає в тому, що навіть одна реальна змінна може кодувати нескінченно багато класів, оскільки вона може припускати всі можливі цілі значення та багато іншого. Звичайно, якщо класи мають значне збіг серед них (таких як 9 і 8 або 7 та I в MNIST), навіть найскладніша функція лише двох прихованих змінних зробить погану роботу з генерування чітко помітних зразків для кожного класу. Детальніше про це пізніше.
VAE передбачають багатоваріантний параметричний розподіл (де - параметри ), і вони дізнаються параметри багатоваріантний розподіл. Використання параметричного pdf для , що запобігає зростанню кількості параметрів VAE без обмежень із ростом навчального набору, у VAE lingo називається амортизацією (так, я знаю ...).q(z|x,λ)λqz
Мережа декодера
Ми починаємо з декодерної мережі, тому що VAE - це генеративна модель, і єдиною частиною VAE, яка фактично використовується для генерування нових зображень, є декодер. Мережа кодерів використовується лише в час виведення (навчання).
Мета мережі декодера - генерувати нові випадкові вектори що належать до вхідного простору , тобто нові зображення, починаючи з реалізації латентного вектора . Це чітко означає, що він повинен засвоїти умовний розподіл . Для VAE цей розподіл часто вважається багатоваріантним гауссом 1 :xXzp(x|z)
pϕ(x|z)=N(x|μ(z;ϕ),σ(z;ϕ)2I)
ϕ - вектор ваг (і зміщення) мережі кодера. Вектори та є складними, невідомими нелінійними функціями, моделюється мережею декодера: нейронні мережі є потужними нелінійними аппроксиматорами функцій.μ(z;ϕ)σ(z;ϕ)
Як зазначає @amoeba в коментарях, існує вражаюча схожість між декодером і класичною моделлю прихованих змінних: Факторний аналіз. У Факторному аналізі ви припускаєте модель:
x|z∼N(Wz+μ,σ2I), z∼N(0,I)
Обидві моделі (FA та декодер) припускають, що умовний розподіл спостережуваних змінних на прихованих змінних є гауссовим, а самі є стандартними гауссами. Різниця полягає в тому, що декодер не припускає, що середнє значення лінійне в , і не передбачає, що стандартне відхилення є постійним вектором. Навпаки, вона моделює їх як складні нелінійні функції . У цьому відношенні це можна розглядати як нелінійний факторний аналіз. Дивіться тутxzzp(x|z)zzдля глибокого обговорення цього зв'язку між FA та VAE. Оскільки FA з ізотропною матрицею коваріації є лише PPCA, це також пов'язане з добре відомим результатом, який лінійний автокодер зменшує до PCA.
Повернемося до декодера: як ми дізнаємося ? Інтуїтивно ми хочемо, щоб приховані змінні збільшували ймовірність генерації у навчальному наборі . Іншими словами, ми хочемо обчислити задній розподіл ймовірностей , враховуючи дані:ϕzxiDnz
p(z|x)=pϕ(x|z)p(z)p(x)
Ми припускаємо, що до , і нам залишається звичайна проблема Байєсового висновку, що обчислення ( докази ) є важким ( багатовимірний інтеграл). Більше того, оскільки тут невідомо, ми все одно не можемо обчислити його. Введіть Variational Inference - інструмент, який дає ім'я Variational Autoencoders.N(0,I)zp(x)μ(z;ϕ)
Варіаційні умовиводи для моделі VAE
Варіаційний висновок - це інструмент для виконання приблизного байєсівського висновку для дуже складних моделей. Це не надто складний інструмент, але моя відповідь вже занадто довга, і я не буду вникати в детальне пояснення VI. Ви можете поглянути на цю відповідь та посилання на неї, якщо вам цікаво:
/stats//a/270569/58675
Досить сказати, що VI шукає наближення до у параметричному сімействі розподілів , де, як зазначалося вище, - параметри сім'ї. Ми шукаємо параметри, які мінімізують розбіжність Куллбека-Лейблера між нашим цільовим розподілом та :p(z|x)q(z|x,λ)λp(z|x)q(z|x,λ)
minλD[p(z|x)||q(z|x,λ)]
Знову ж таки, ми не можемо мінімізувати це безпосередньо, оскільки визначення дивергенції Куллбека-Лейблера включає дані. Представляючи ELBO (Evidence Lower BOund) і після деяких алгебраїчних маніпуляцій, ми нарешті дістаємося до:
ELBO(λ)=Eq(z|x,λ)[logp(x|z)]−D[(q(z|x,λ)||p(z)]
Оскільки ELBO є нижньою межею доказів (див. Вищенаведене посилання), максимізація ELBO не зовсім еквівалентна максимальній вірогідності даних, наданих (зрештою, VI є інструментом для приблизного байєсівського умовиводу), але йде в правильному напрямку.λ
Щоб зробити висновок, нам потрібно вказати параметричне сімейство . У більшості VAE ми обираємо багатоваріантний некоррельований гауссова розподілq(z|x,λ)
q(z|x,λ)=N(z|μ(x),σ2(x)I)
Це той самий вибір, який ми зробили для , хоча ми, можливо, обрали інше параметричне сімейство. Як і раніше, ми можемо оцінити ці складні нелінійні функції, ввівши модель нейронної мережі. Оскільки ця модель приймає вхідні зображення та повертає параметри розподілу прихованих змінних, ми називаємо її мережею кодера . Як і раніше, ми можемо оцінити ці складні нелінійні функції, ввівши модель нейронної мережі. Оскільки ця модель приймає вхідні зображення та повертає параметри розподілу прихованих змінних, ми називаємо її мережею кодера .p(x|z)
Мережа кодера
Також його називають мережею виведення , вона використовується лише під час навчання.
Як зазначалося вище, кодер повинен наближати та , таким чином, якщо у нас, скажімо, 24 латентних змінних, вихід кодер - вектор . Кодер має вагу (і зміщення) . Щоб дізнатися , ми можемо, нарешті, записати ELBO з точки зору параметрів та мережі датчика та декодера, а також заданих навчальних значень:μ(x)σ(x)d=48θθθϕ
ELBO(θ,ϕ)=∑iEqθ(z|xi,λ)[logpϕ(xi|z)]−D[(qθ(z|xi,λ)||p(z)]
Ми можемо нарешті зробити висновок. Протилежна ELBO, як функція і , використовується як функція втрати VAE. Ми використовуємо SGD, щоб мінімізувати ці втрати, тобто максимізувати ELBO. Оскільки ELBO є нижньою межею доказів, це йде в напрямку максимізації доказів і, таким чином, генерує нові зображення, оптимально схожі на ті, що є у навчальному наборі. Перший термін в ELBO - це очікувана негативна ймовірність вірогідності заданих навчальних точок, таким чином він заохочує декодер створювати зображення, подібні до навчальних. Другий термін можна інтерпретувати як регуляризатор: він спонукає кодер генерувати розподіл для прихованих змінних, подібний доθϕp(z)=N(0,I). Але запровадивши спочатку модель ймовірності, ми зрозуміли, звідки походить цілий вираз: мінімізація розбіжності Куллабка-Лейблера між приблизною задньою та модель posterior . 2qθ(z|x,λ)p(z|x,λ)
Після того, як ми дізналися та шляхом максимізації , ми можемо викинути кодер. Відтепер для створення нових зображень просто зразок та розповсюдження його через декодер. Виходи декодера будуть зображеннями, схожими на ті, що в навчальному наборі.θϕELBO(θ,ϕ)z∼N(0,I)
Список літератури та подальше читання
1 Це припущення не є строго необхідним, хоча воно спрощує наш опис VAE. Однак, залежно від додатків, ви можете припустити інший розподіл для . Наприклад, якщо - вектор бінарних змінних, гауссова не має сенсу, і можна вважати багатоваріантним Бернуллі.pϕ(x|z)xp
2 Вираз ELBO своєю математичною елегантністю приховує два основних джерела болю для практикуючих VAE. Один - середній термін . Це фактично вимагає обчислення очікування, яке вимагає взяти кілька зразків зEqθ(z|xi,λ)[logpϕ(xi|z)]qθ(z|xi,λ). Враховуючи розміри задіяних нейронних мереж та низький коефіцієнт конвергенції алгоритму SGD, необхідність малювати декілька випадкових вибірок при кожній ітерації (насправді для кожної міні-партії, що ще гірше), забирає багато часу. Користувачі VAE вирішують цю проблему дуже прагматично, обчислюючи це очікування за допомогою одного (!) Випадкової вибірки. Інша проблема полягає в тому, що для підготовки двох нейронних мереж (кодер і декодер) за допомогою алгоритму зворотного розповсюдження мені потрібно вміти диференціювати всі кроки, що беруть участь у поширенні вперед, від кодера до декодера. Оскільки декодер не є детермінованим (оцінювання його виходу вимагає виведення з багатовимірного гаусса), навіть не має сенсу запитувати, чи є це диференційована архітектура. Рішення цього - хитрість репараметризації .