Налагодження нейронних мереж зазвичай включає налаштування гіперпараметрів, візуалізацію засвоєних фільтрів та побудову важливих показників. Не могли б ви поділитися якими гіперпараметрами ви користувалися?
- Який розмір вашої партії?
- Який рівень вашого навчання?
- Який тип автокодера використовується?
- Ви спробували використовувати деноізуючий автокодер? (Які корупційні цінності ви пробували?)
- Скільки прихованих шарів і якого розміру?
- Які розміри вхідних зображень?
Аналіз журналів тренувань також корисний. Накресліть графік втрат від відновлення (вісь 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 можуть допомогти зафіксувати деякі часові залежності, що знаходяться у подібних даних таймерів. Сподіваюсь, це допомагає.