Напоследък си играех с „Собствени стойности и вектори, както и проекция“. (чрез точков продукт) сега исках да видя как могат да бъдат включени в невронна мрежа. (автоматични енкодери). Освен това, моля, имайте предвид, че техниките, които използвам тук, са много сходни при извършване на Анализ на основните компоненти (PCA), но не съвсем същите. (По-конкретно, не премахвам измерението или класирам собствените стойности). Така че няма да го наричам PCA. В тази публикация ще сравня различни автоматични енкодери като...

Случай a) Автоматичен енкодер с промяна на основата за латентен вектор
Случай b) Автоматичен енкодер с промяна на основата за латентен вектор с добавен мрежов параметър
Случай c) Обикновен автоматичен енкодер
Случай d) Автоматичен енкодер с промяна на основата за латентен вектор (Различна функция за активиране)
Случай e) Автоматичен енкодер с промяна на основата за скрит слой
Случай f) Автоматичен енкодер с промяна на основата за скрит Слоеве (2)

Моля, имайте предвид, че тази публикация е само за мен, за да изразя своята креативност.

Мрежова архитектура/набор от данни

Син правоъгълник→ Конволюция/Напълно свързан слой
Червен правоъгълник→ Транспониране Конволюция/Напълно свързан слой

Както се вижда по-горе, нашата мрежа се състои само от 3 операции на навиване, 2 напълно свързани слоя и 2 транспонирани операции на навиване за вземане на проби нагоре. За операция за понижаване на проби избирам да използвам операция по понижаване на проби. Сега наборът от данни, който ще използвам, е известният набор от данни на MNIST.

Случай a) Автоматичен енкодер с промяна на основата за латентен вектор

Червена част → Промяна на основата в латентния вектор за автоматичен енкодер

Тъй като ще намалим измерението до 3, от 28*28, ние всъщност можем да изчислим ковариационната матрица на скритото представяне и да проектираме оригиналните данни, използвайки собствените вектори на ковариационната матрица.

Ляв GIF→ Генерирано изображение по време на обучението
Дясно изображение→ Разходи във времето във фазата на обучение

Мрежата не се представя добре при генерирането на оригиналното изображение, повечето от тях са просто замъглени и дори не се доближават до оригиналното изображение. Сега нека видим латентното пространство на кодираните вектори.

Както се вижда по-горе, преди промяна на основата, можем да видим, че енкодерът всъщност върши добра работа при групирането на подобни изображения едно към друго.

Въпреки това, след проекция към собствени вектори, можем да забележим, че сега данните са събрани заедно и очевидно не могат да бъдат напълно отделени един от друг.

Случай b) Автоматичен енкодер с промяна на основата за латентен вектор с добавен мрежов параметър

Сега добавих още един параметър, наречен network_effect, който е 3*3 матрица от равномерно разпределение. (диапазон 0–1). Това беше, защото исках да дам на мрежата повече контрол върху проектираното пространство.

Ляв GIF→ Генерирано изображение по време на обучението
Дясно изображение→ Разходи във времето във фазата на обучение

В сравнение със случай a), тази мрежа свърши добра работа, но отново повечето от генерираните изображения са размазани и неразпознаваеми.

Отново, когато визуализираме кодираното латентно пространство, наблюдаваме, че енкодерът е свършил добра работа, групирайки подобни изображения. (Преди проекцията)

Но отново, след векторната проекция, кодираното пространство всъщност се влоши между всеки клас.

Случай c) Обикновен автоматичен енкодер

Поставен под въпрос относно ефективността на двете мрежи по-горе, исках да знам дали самата мрежова архитектура е проблемът. Така че обучих ванилов автоматичен енкодер.

Ляв GIF→ Генерирано изображение по време на обучението
Дясно изображение→ Разходи във времето във фазата на обучение

В сравнение с всяка друга мрежа, vanilla свърши най-добрата работа, както при генерирането, така и при разделянето на данните в латентното пространство.

Както се вижда по-горе, всеки цвят на точка от данни е групиран добре заедно.

Случай d) Автоматичен енкодер с промяна на основата за латентен вектор (различна функция за активиране)

Червена част → Функция за активиране на Tanh

От предишни GIF можем да наблюдаваме факта, че обхватът на генерираното латентно пространство е огромен. (Когато искаме да генерираме данни, това не е добро нещо.) Така че исках да видя как ще се променят нещата, когато използвам функция за активиране tanh вместо функция за идентичност.

Ляв GIF→ Генерирано изображение по време на обучението
Дясно изображение→ Разходи във времето във фазата на обучение

За съжаление, генерираните изображения бяха много размазани и не от най-добрите.

Както се вижда по-горе, сега латентното пространство е в много по-близък диапазон, но точките от данни са много слабо групирани една с друга. МНОГО МНОГО лошо.

Въпреки това, след проекцията, тя генерира най-интересния модел, който някога съм виждал. Надявам се да се върна към този въпрос, тъй като е толкова интересен.

Случай д) Автоматичен енкодер с промяна на основата за скрит слой

Сега исках да видя ефектите, когато изпълня проекцията върху слоя зад напълно свързания слой, който създава латентното пространство. (Ако моето ужасно описание не е имало смисъл, просто го разберете, тъй като направих същата операция на различен слой.)

Мрежата всъщност свърши добра работа с генерирането на нови изображения и когато наблюдаваме латентното пространство, можем да наблюдаваме подобно латентно пространство, когато сравняваме с обикновените автоматични енкодери.

Всъщност мисля, че свърши по-добра работа от обикновените автоматични енкодери.

Случай f) Автоматичен енкодер с промяна на основата за скрити слоеве (2)

Естественото разширение на предишния експериментатор е извършването на една и съща операция на различни слоеве. (Тук ще го изпълня на предишните два слоя.)

Въпреки че тази мрежа генерира най-интересния модел от изображения, експериментът беше пълен провал.

И когато видим латентното пространство, можем да видим, че точките от данни са неразличими една от друга.

Интерактивен код

За Google Colab ще ви трябва акаунт в Google, за да видите кодовете, също така не можете да изпълнявате скриптове само за четене в Google Colab, така че направете копие на вашата игрална площадка. И накрая, никога няма да искам разрешение за достъп до вашите файлове в Google Drive, само за ваша информация. Честито кодиране! Освен това за прозрачност качих всички регистрационни файлове за обучение в моя github.

За достъп до кода за случай щракнете върху неяe, за дневниците щракнете тук.
За достъп до кода за случай b щракнете върху hтук, за lдневниците щракнете тук.
За достъп до кода заслучай c щракнете върху here, за дневниците щракнете тук .
За достъп до кода за случай d щракнете тук, за дневниците щракнете тук.
За достъп до кода за случай e щракнете тук, за дневниците щракнете тук.
За достъп до кода за case f щракнете тук, за дневниците щракнете тук.

Последни думи

Това беше много интересен експеримент, обикновено виждам автоматичните енкодери като метод за извършване на редукция на размерността като себе си. Но сега все повече се чудя дали в мрежата могат да бъдат включени допълнителни техники.

Ако бъдат намерени грешки, моля, изпратете ми имейл на [email protected], ако желаете да видите списъка с цялото ми писане, моля, вижте уебсайта ми тук.

Междувременно ме последвайте в моя Twitter „тук“ и посетете „моя уебсайт“ или моя „Youtube канал“ за повече съдържание. Също така внедрих Wide Residual Networks, моля, щракнете тук, за да видите публикацията в блога.

Справка

  1. грешка при импортиране на tflearn: AttributeError: модулът ‘pandas’ няма атрибут ‘computation’ · Проблем #766 · tflearn/tflearn. (2018). GitHub. Изтеглено на 11 юли 2018 г. от https://github.com/tflearn/tflearn/issues/766
  2. MNIST за начинаещи в ML | TensorFlow. (2018). TensorFlow. Изтеглено на 11 юли 2018 г. от https://www.tensorflow.org/versions/r1.0/get_started/mnist/beginners
  3. предупреждения, Т. (2018). Tensorflow импортира mnist предупреждения. Препълване на стека. Изтеглено на 11 юли 2018 г. от https://stackoverflow.com/questions/49901806/tensorflow-importing-mnist-warnings
  4. TensorFlow, E. (2018). Проблеми със собствените стойности в TensorFlow. Препълване на стека. Изтеглено на 11 юли 2018 г. от https://stackoverflow.com/questions/43697539/eigenvalue-problems-in-tensorflow
  5. Домейн и диапазон от основни функции. (2018). Analyzemath.com. Извлечено на 11 юли 2018 г. от http://www.analyzemath.com/DomainRange/domain_range_functions.html
  6. tf.self_adjoint_eig | TensorFlow. (2018). TensorFlow. Изтеглено на 11 юли 2018 г. от https://www.tensorflow.org/api_docs/python/tf/self_adjoint_eig
  7. (2018). Users.stat.umn.edu. Изтеглено на 11 юли 2018 г. от http://users.stat.umn.edu/~helwig/notes/datamat-Notes.pdf
  8. tf.random_uniform | TensorFlow. (2018). TensorFlow. Изтеглено на 11 юли 2018 г. от https://www.tensorflow.org/api_docs/python/tf/random_uniform
  9. tf.self_adjoint_eig | TensorFlow. (2018). TensorFlow. Изтеглено на 11 юли 2018 г. от https://www.tensorflow.org/api_docs/python/tf/self_adjoint_eig
  10. Прилагане на анализ на основните компоненти (PCA). (2014 г.). Д-р Себастиан Рашка. Изтеглено на 11 юли 2018 г. от https://sebastianraschka.com/Articles/2014_pca_step_by_step.html#4-computing-eigenvectors-and-corresponding-eigenvalues
  11. База данни с ръкописни цифри на MNIST, Yann LeCun, Corinna Cortes и Chris Burges. (2018). Yann.lecun.com. Изтеглено на 11 юли 2018 г. от http://yann.lecun.com/exdb/mnist/