Керас: Різниця між регуляторами ядра та активності


86

Я помітив, що weight_regularizer більше не доступний у Keras, і що замість нього є регулятор діяльності та ядра . Я хотів би знати:

  • Які основні відмінності між ядром та регуляторами активності ?
  • Чи можу я використовувати activity_regularizer замість weight_regularizer ?

Відповіді:


85

Регулятор діяльності працює як функція виходу мережі, і в основному використовується для регуляції прихованих одиниць, тоді як weight_regularizer, як сказано в назві, працює на ваги, змушуючи їх занепадати. В основному ви можете виразити втрати внаслідок регуляризації як функцію результату ( activity_regularizer) або ваг ( weight_regularizer).

Нова kernel_regularizerзамінює weight_regularizer- хоча це не дуже зрозуміло з документації.

З визначення kernel_regularizer:

kernel_regularizer: Функція регуляризатора, застосована до kernelматриці ваг (див. регуляризатор).

І activity_regularizer:

activity_regularizer: Функція регуляризатора, застосована до виводу шару (його "активація"). (див. регулятор).

Важливо Edit : Зверніть увагу , що є помилка в activity_regularizer , який фіксується тільки у версії 2.1.4 Keras (принаймні , з Tensorflow бекенда). Дійсно, у старих версіях функція регулятора активності застосовується до входу шару, замість того, щоб застосовуватись до виводу (фактичні активації шару, як передбачалося). Тож будьте обережні, якщо ви використовуєте стару версію Keras (до 2.1.4), регулювання діяльності може, можливо, не працювати належним чином.

Ви можете побачити коміт на GitHub

П'ять місяців тому Франсуа Шолле надав виправлення регулятору діяльності, яке тоді було включено в Keras 2.1.4


Ви повністю впевнені в цій kernel_regularizerзаміні weight_regularizer?
Сімоне

3
Я знаходжу багато прикладів використання kernel_regularizer, але не для Activity_regularizer. Чи можете ви прокоментувати випадки використання для Activity_regularizer?
Milad M

1
Чому ви хочете регулювати вихід прихованих шарів? Це з тієї ж причини, через яку ми нормалізуємо вхідні дані до діапазону (-1, 1) або (0, 1). Тобто, щоб входи для наступних шарів були меншими, щоб допомогти процесу SGD?
Нагабхушан Бадді

1
@NagabhushanBaddi бачить цю відповідь: datascience.stackexchange.com/a/15195/32811
Мікеле

1
@FinncentPrice Я можу лише припустити, що це було раніше, а зараз цього вже немає
Мікеле Тонутті

34

Ця відповідь трохи запізнюється, але корисна для майбутніх читачів. Отже, необхідність - це мати винаходу, як то кажуть. Я зрозумів це лише тоді, коли мені це було потрібно.
У наведеній вище відповіді насправді не зазначено різниці, оскільки обидва вони в кінцевому підсумку впливають на ваги, то яка різниця між покаранням за самі ваги або результатом роботи шару?
Ось відповідь: я зіткнувся з випадком, коли ваги мережі невеликі і приємні, коливаючись від [-0,3] до [+0,3].
Отже, я справді не можу їх покарати, в них немає нічого поганого. Регуляризатор ядра марний. Однак вихід шару ВЕЛИЧЕЗНИЙ, у 100-х.
Майте на увазі, що вхід до шару також невеликий, завжди менше одного. Але ці малі значення взаємодіють з вагами таким чином, що дають ці величезні результати. Тут я зрозумів, що мені потрібен регулятор діяльності, а не регулятор ядра. Цим я караю шар за ці великі виходи, мені байдуже, якщо самі ваги малі, я просто хочу утримати його від досягнення такого стану, оскільки це насичує мою активацію сигмовидної кишки і спричиняє безліч інших проблем, таких як зникнення градієнт і застій.


Справді інтуїтивно зрозумілий.
Саранг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.