Різниця функцій активації в нейронних мережах загалом


15

Я вивчив типи функцій активації для нейронних мереж. Самі функції досить прості, але різниця в застосуванні не зовсім зрозуміла.

Розумно, що можна розрізняти логічні та лінійні функції типу, залежно від бажаного бінарного / безперервного виводу, але яка перевага сигмоїдної функції перед простою лінійною?

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

Відповіді:


16

Аналогічне запитання було задано і в CV: Вичерпний перелік функцій активації в нейронних мережах із плюсами / мінусами .

Я копіюю нижче одну з відповідей:

Один такий список, хоча і не дуже вичерпний: http://cs231n.github.io/neural-networks-1/

Поширені функції активації

Кожна функція активації (або нелінійність ) приймає єдине число і виконує на ньому певну фіксовану математичну операцію. Є кілька функцій активації, з якими ви можете зіткнутися на практиці:

введіть тут опис зображеннявведіть тут опис зображення

Зліва: Сигмоїдна нелінійність стискає реальні числа для інтервалу між [0,1] Праворуч: Тен нелінійність стискає реальні числа до [-1,1].

σ(х)=1/(1+е-х)і зображено на зображенні вгорі зліва. Як уже згадувалося в попередньому розділі, воно приймає дійсне значення і "розбиває" його в діапазоні від 0 до 1. Зокрема, великі негативні числа стають 0, а великі додатні числа - 1. Сигмоїдна функція часто бачила використання оскільки він має приємну інтерпретацію як швидкість стрільби нейрона: від взагалі не випалу (0) до повністю насиченого випалу з передбачуваною максимальною частотою (1). На практиці сигмоїдна нелінійність останнім часом вийшла з ладу і її рідко застосовують. У нього є два основних недоліки:

  • Сигмоїди насичують і вбивають градієнти . Дуже небажаною властивістю сигмоподібного нейрона є те, що коли активація нейрона насичується в будь-якому хвості 0 або 1, градієнт у цих областях майже дорівнює нулю. Нагадаємо, що під час зворотного розповсюдження цей (локальний) градієнт буде помножений на градієнт виходу цього ворота для всієї мети. Тому, якщо локальний градієнт дуже малий, він ефективно "вб'є" градієнт, і майже жоден сигнал не буде надходити через нейрон до його ваги та рекурсивно до його даних. Крім того, потрібно бути особливо обережними при ініціалізації ваг сигмоїдних нейронів для запобігання насичення. Наприклад, якщо початкові ваги занадто великі, то більшість нейронів стане насиченим, і мережа ледве навчиться.
  • х>0f=шТх+бшf). Це може ввести небажану динаміку зигзагу в оновленнях градієнта для ваг. Однак зауважте, що після додавання цих градієнтів у групі даних остаточне оновлення для ваг може мати різні знаки, що дещо пом'якшує цю проблему. Отже, це незручність, але воно має менш важкі наслідки порівняно з насиченою проблемою активації вище.

тан(х)=2σ(2х)-1

введіть тут опис зображеннявведіть тут опис зображення

Зліва: функція активації лінійного випрямленого випрямлення (ReLU), яка дорівнює нулю, коли х <0, а потім лінійна з нахилом 1, коли х> 0. Праворуч: Діаграма від Крижевського та ін. (pdf) документ, що вказує на 6-кратне покращення конвергенції з блоком ReLU порівняно з блоком tanh.

f(х)=макс(0,х)

  • (+) Встановлено, що він значно прискорює (наприклад, коефіцієнт 6 у Крижевського та ін. ) Конвергенцію стохастичного градієнтного спуску порівняно з сигмоїдними / танг-функціями. Стверджується, що це пов’язано з його лінійною, ненасичуючою формою.
  • (+) Порівняно з танг / сигмоїдними нейронами, які передбачають дорогі операції (експоненти тощо), ReLU може бути реалізований шляхом простого встановлення порогу матриці активацій у нуль.
  • (-) На жаль, підрозділи ReLU можуть бути тендітними під час тренувань і можуть "померти". Наприклад, великий градієнт, що протікає через нейрон ReLU, може призвести до оновлення ваг таким чином, що нейрон ніколи більше не активується на будь-якій точці даних. Якщо це станеться, то градієнт, що протікає через одиницю, назавжди буде нульовим з цієї точки. Тобто підрозділи ReLU можуть безповоротно загинути під час навчання, оскільки вони можуть вибити з колектора даних. Наприклад, ви можете виявити, що аж 40% вашої мережі можуть бути "мертвими" (тобто нейрони, які ніколи не активуються протягом усього навчального набору даних), якщо рівень навчання встановлений занадто високим. При правильному встановленні рівня навчання це рідше є проблемою.

f(х)=1(х<0)(αх)+1(х> =0)(х)αє невеликою постійною. Деякі люди повідомляють про успіх у цій формі функції активації, але результати не завжди узгоджуються. Нахил в негативній області також можна перетворити на параметр кожного нейрона, як це спостерігається в нейронах PReLU, введеному в Delving Deep в випрямлячі , Kaiming He et al., 2015. Однак суперечливість користі для завдань в даний час незрозумілий.

введіть тут опис зображення

f(шТх+б)макс(ш1Тх+б1,ш2Тх+б2)ш1,б1=0

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

TLDR : " Який тип нейронів я повинен використовувати? " Використовуйте нелінійність ReLU, будьте обережні зі швидкістю навчання та, можливо, стежте за часткою "мертвих" одиниць у мережі. Якщо це стосується вас, спробуйте Leaky ReLU або Maxout. Ніколи не використовуйте сигмоподібні. Спробуйте tanh, але очікуйте, що він буде працювати гірше, ніж ReLU / Maxout.


Ліцензія:


Ліцензія MIT (MIT)

Copyright (c) 2015 Андрій Карпаті

Дозволом надається безоплатно будь-якій особі, яка отримує копію цього програмного забезпечення та пов'язаних з ним файлів документації ("Програмне забезпечення"), здійснювати операції з Програмним забезпеченням без обмежень, включаючи без обмеження права на використання, копіювання, модифікацію, об'єднання , публікувати, поширювати, субліцензувати та / або продавати копії Програмного забезпечення та дозволити особам, яким надається Програмне забезпечення, робити це за умови дотримання наступних умов:

Вищезазначене повідомлення про авторські права та це повідомлення про дозвіл повинні бути включені до всіх копій або значної частини Програмного забезпечення.

ПРОГРАМНЕ ЗАБЕЗПЕЧЕННЯ надається "ЯК Є Є", БЕЗ ГАРАНТІЇ БУДЬ-ЯКОГО РОЗУМУ, ЕКСПРЕССА АБО НЕ ВПРОВАДЖЕНО, ВКЛЮЧЕНО НЕ ОБМЕЖЕНО ГАРАНТІЯМИ ПРОДАЖНОСТІ, ПІДХІДНОСТІ ДЛЯ ДІЯЛЬНОЇ ЦІЛЬНОСТІ ТА НЕФІНЕРМІНУВАННЯ. НІ В ЯКІ НЕ БУДУТЬСЯ АВТОРИ АБО ВЛАСНИКИ ПРАВИЛЬНОГО ПРАВА НЕ БУТЬ ВІДПОВІДАЛЬНІ за будь-яку претензію, збитки чи іншу відповідальність, навіть якщо це відбувається у договорі, ТОРТІ АБО ІНШИМИ, ВІДПОВІДЖЕННЯ ДЛЯ АВТОМАТИЧНОГО ЗАБЕЗПЕЧЕННЯ АБО У ВИКОРИСТАННІ ТА ІНШИМ УПРАВЛІННЯМИ ПРОГРАМНЕ ЗАБЕЗПЕЧЕННЯ. *


Дякую, цей підсумок дає деяке розуміння, але, чесно кажучи, я все ще не можу зрозуміти деякі деталі інтуїтивно (наприклад, чому ReLU "значно прискорює конвергенцію SGD"), і найбільше: яку вибрати? Виходячи з висновку, Maxout - найкращий, і ось це все. Але крім того, що Maxout не реалізований у найпопулярніших пакунках (наприклад, у Keras), мені здається розумним, що принаймні на останньому шарі слід розміщувати інші типи (наприклад, сигмоїд для бікласифікації).
Гендрік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.