Автокодекси не можуть вивчити значущі функції


24

У мене є 50 000 таких зображень:

приклад даних приклад даних2

Вони зображують графіки даних. Я хотів отримати функції з цих зображень, тому я використав код автокодування, наданий Theano (deeplearning.net).

Проблема полягає в тому, що ці автокодери, схоже, не вивчають жодних функцій. Я спробував RBM, і це те саме.

Набір даних MNIST забезпечує приємні функції, але мої дані, схоже, не дають жодних даних. Я додаю приклади нижче:

Фільтри, створені на MNIST:

фільтр із списку

Фільтри, створені навчанням за моїми даними:

фільтри з моїх даних

Я використовував багато різних перестановок прихованих розмірів шару та епох тренувань, але результати завжди однакові.

Чому це не працює? Чому автоінкодери не можуть витягти функції з цих зображень?

Редагувати:

Для всіх, хто має подібну проблему. Рішення було дійсно простим, а справа справді німою. Я просто забув змінити масштаб піксельних значень з кодування RGB, щоб плавати в діапазоні 0 - 1.

Масштабування значень вирішило проблему.

Відповіді:


15

Налагодження нейронних мереж зазвичай включає налаштування гіперпараметрів, візуалізацію засвоєних фільтрів та побудову важливих показників. Не могли б ви поділитися якими гіперпараметрами ви користувалися?

  • Який розмір вашої партії?
  • Який рівень вашого навчання?
  • Який тип автокодера використовується?
  • Ви спробували використовувати деноізуючий автокодер? (Які корупційні цінності ви пробували?)
  • Скільки прихованих шарів і якого розміру?
  • Які розміри вхідних зображень?

Аналіз журналів тренувань також корисний. Накресліть графік втрат від відновлення (вісь Y) як функції епохи (вісь X). Ваші втрати від реконструкції збігаються чи розходяться?

Ось приклад автокодера для класифікації людини за статтю, який розходився, був зупинений після 1500 епох, налаштований гіперпараметри (в даному випадку зменшення рівня навчання), і перезапущений з тими ж вагами, які розходилися і врешті-решт зближувалися.

Ось такий, який зближується: (ми цього хочемо)

Ванільний "необмежений" може зіткнутися з проблемою, коли вони просто вивчать відображення особи. Це одна з причин того, що громада створила аромати Denoising, Sparse та Contractive.

Чи можете ви розмістити тут невелику підмножину своїх даних? Я б більш ніж готовий показати вам результати одного з моїх автокодерів.

Зі сторони: ви можете запитати себе, чому ви використовуєте зображення графіків в першу чергу, коли ці графіки можна було легко представити як вектор даних. Тобто,

[0, 13, 15, 11, 2, 9, 6, 5]

Якщо ви можете переформулювати проблему, як описано вище, ви по суті полегшите життя автокодера. Спершу не потрібно навчитися бачити зображення, перш ніж можна спробувати дізнатися генеруючий розподіл.

Наступна відповідь (з урахуванням даних.)

Тут представлені фільтри від 1000 прихованих блоків, одношаровий позначаючий автокодер. Зауважте, що деякі фільтри, здавалося б, випадкові. Це тому, що я так рано припинив навчання, і мережа не встигла вивчити ці фільтри.

Ось гіперпараметри, з якими я навчався:

batch_size = 4
epochs = 100
pretrain_learning_rate = 0.01
finetune_learning_rate = 0.01
corruption_level = 0.2

Я припинив попередню підготовку після 58-ї епохи, оскільки фільтри були достатньо хорошими для розміщення тут. Якби я був ти, я би тренував повноцінний 3-х шаровий автокодер з укладеним розміщенням з архітектурою 1000x1000x1000 для початку.

Ось результати кроку налагодження:

validation error 24.15 percent
test error 24.15 percent

Тож на перший погляд це здається кращим, ніж випадковістю, однак, коли ми дивимось на розподіл даних між двома мітками, ми бачимо, що він має точно такий же відсоток (75,85% прибутковий і 24,15% збитковий). Тож це означає, що мережа навчилася просто реагувати "вигідно", незалежно від сигналу. Я б, мабуть, довше тренувався з цією мережею, щоб побачити, що відбувається. Крім того, схоже, що ці дані генеруються з якогось базового фінансового набору даних. Я рекомендую вам заглянути в рекурентні нейронні мережі після переформулювання вашої проблеми у вектори, як описано вище. RNN можуть допомогти зафіксувати деякі часові залежності, що знаходяться у подібних даних таймерів. Сподіваюсь, це допомагає.


Мій пакет партії - 20. Навчання встановлено на рівні 0,1. Я безрезультатно намагався використовувати контрагенти та позначати автоенкодери. Я використовую один прихований шар. Я спробував все, від 50 до 1000 нейронів. Я змінюю масштаби зображень до розмірів 25x25 - тому вони навіть менші, ніж у списку. Для чого це варто, я вкладаю всі свої дані в цей архів: Чи можете ви показати мені результати ваших автокодер та ці дані?
b93dh44

Архів: mega.co.nz/…
b93dh44

Гаразд, я навчив мережу з цими даними. Дивіться редагування у відповіді.
сабалаба

Це виглядає дійсно цікаво. Чи можете ви опублікувати свій код? Я б дуже цінував це. Я думаю, що в моєму коді може виникнути помилка, яка перешкоджає навчанню мережі. Я помітив, у вас є точна настройка сцени? Я думаю, що мій автокодер лише перевіряється без будь-якої тонкої настройки. Чи можете ви мені показати своє рішення, якщо ви не заперечуєте?
b93dh44

Не можу розмістити свій код, оскільки це моя компанія, але я можу вказати на цей підручник, у якому є приклад коду, щоб зробити Denoising Autoencoder: deeplearning.net/tutorial/dA.html . Всі поради щодо гіперпараметрів будуть дотримані для цього коду.
сабалаба

3

У мене не вистачає респондентів, щоб коментувати, тому я викладу це у відповідь. Я не знаю точної причини, однак:

  1. Візерунок у лівій нижній області виглядає схожим на ваш другий приклад, а візерунок у правому нижньому куті здається дуже схожим на ваш перший приклад при уважному огляді. Питання в тому, скільки різноманітності у ваших вихідних даних? Якщо всі 50 000 зображень є варіаціями одного візерунка, цих 3 змістовних карт зображень, які ми бачимо, можуть бути цілком достатніми для автоматичного кодування для пояснення та реконструкції всіх ваших даних.

  2. По-друге, ви можете подивитися на помилку відновлення та фактичні реконструйовані зображення. Наскільки хороші результати? Якщо помилка реконструкції невелика, у вас може бути надлишок, можливо, через резони, описані нижче (або, можливо, комбінація цих 3 шаблонів достатньо лише для опису всіх даних, які вас цікавлять). В іншому випадку, автокодер просто не може навчитися реконструювати ваші дані, і вам потрібен великий автокодер або кращий алгоритм навчання.


1. Я думаю, що в цих даних існує багато різноманітності. Кожен з цих 50 000 графіків дещо відрізняється. Я думаю, що неможливо, автокодер може реконструювати їх на основі всього 3 фільтрів. 2. Будь-які поради щодо оцінки помилки відновлення? Код, який я використовую, дає помилку, але це дійсно велика кількість, яка мені не дуже розказує. Чи варто порівнювати помилку відновлення з розміром вхідного або кількості прихованих шарів?
b93dh44
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.