Що обчислює прихований шар у нейронній мережі?


187

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

Я розумію вхідний шар і як нормалізувати дані, я також розумію одиницю зміщення, але коли мова йде про прихований шар, те, що фактично обчислюється в цьому шарі, і як воно відображає до виходу, є лише трохи туманним. Я бачив діаграми зі знаками запитання в прихованому шарі, булеві функції, такі як AND / OR / XOR, функції активації та вузли введення, які відображають всі приховані одиниці та вузли введення, які відображають лише кілька прихованих одиниць, і так далі У мене просто кілька питань щодо практичного аспекту. Звичайно, просте пояснення всього процесу нейронної мережі, як ви пояснили б дитині, було б дивним.

Які обчислення робляться в прихованому шарі?

Як ці обчислення відображаються на вихідному шарі?

Як працює шар шару? Денормалізація даних із прихованого шару?

Чому деякі шари у вхідному шарі підключені до прихованого шару, а деякі - ні?


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

4
Дякую за коментар та голосування Гаель, я, мабуть, трохи збентежений СУ спільнотою, тому що ми всі знаємо, як ці люди можуть дістатись :) Радий бачити більше духу співпраці тут, на відміну від спроб заробити значки та балів, редагуючи / закриваючи питання.
FAtBalloon

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

Відповіді:


230

Версія з трьох пропозицій:

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

  • Завдання прихованих шарів полягає в перетворенні входів у те, що може використовувати вихідний шар.

  • Вихідний шар перетворює активацію прихованого шару в будь-який масштаб, на якому ви хотіли б отримати результат.

Як і вам 5:

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

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

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

Нейронні сітки корисні тим, що є хороші інструменти (як, наприклад, розмноження) для створення безлічі детекторів та їх з'єднання.


Наче ти доросла людина

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

хгодуfхгодггоду

f(х)г(f(х))

fг

г(f(х))fг


Приклад з логічними функціями:

fг

Функції першого шару:

  • Переконайтеся, що принаймні в одному елементі є "ІСТИНА" (використовуючи АБО)
  • Переконайтесь, що вони не всі "ПРАВИЛЬНІ" (використовуючи NAND)

Функція другого шару:

  • Переконайтесь, що обидва критерії першого рівня задоволені (використовуючи AND)

Вихід мережі - це лише результат цієї другої функції. Перший шар перетворює входи в те, що другий шар може використовувати, щоб вся мережа могла виконувати XOR.


Приклад із зображеннями:

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

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

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

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

Це корисно, оскільки детектори обличчя легко створити з очних детекторів та детекторів носа, але насправді важко побудувати за інтенсивністю пікселів.

Таким чином, кожен шар робить вас все далі і далі від неочищених пікселів і ближче до кінцевої мети (наприклад, виявлення обличчя або виявлення шини).


Відповіді на різні питання

"Чому деякі шари у вхідному шарі підключені до прихованого шару, а деякі - ні?"

Від'єднані вузли в мережі називаються вузлами "зміщення". Там дійсно гарне пояснення тут . Коротка відповідь полягає в тому, що вони ніби перехоплюють терміни в регресії.

"Звідки беруться фотографії" детектора очей "на прикладі зображення?"

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

У цьому документі деякі люди з однієї з найбільших нейронних мереж у світі вони показують нейрон «детектор обличчя» та нейрон «детектор кішок», а також другий спосіб: вони також показують фактичні зображення, які активують нейрон найбільш сильно (фіг.3, фігура 16). Другий підхід хороший тим, що він показує, наскільки гнучка і нелінійна мережа - ці "детектори" високого рівня чутливі до всіх цих зображень, хоча вони не особливо схожі на рівні пікселів.


Повідомте мене, якщо тут щось незрозуміло або у вас є якісь питання.


2
Тож чи існує лише один визначений алгоритм для кожного вузла на даному шарі, і ваги є те, що робить результати різними? Або ви можете запрограмувати кожен вузол на шарі, щоб він був різним?
FAtBalloon

3
@GeorgeMcDowd це вирішується у ключовому питанні: дивитися пікселі та визначати шини важко, як ви запропонували. На щастя, перегляд пікселів і пошук ребер легко - це все, що намагається зробити перший прихований шар. Наступний шар намагається зробити умовиводи на основі ребер, що набагато простіше, ніж намагатися зробити це на основі пікселів.
Девід Дж. Харріс

4
Отож слід дати вам ще якусь нагороду (ніж лише бали) за час і зусилля, які ви вклали у цю відповідь!
samsamara

1
@JoshuaEnfield Я думаю, що логіка в 1980-х роках була поєднанням, подібним до того, як люди думали, що працює мозок, що він є диференційованим скрізь і що значення обмежуються так, як ти згадував. З тих пір люди виявили, що f(x) = max(x, 0)("випрямлена лінійна одиниця") часто працює краще, навіть не маючи таких властивостей.
Девід Дж. Харріс,

2
Приклад шини та ланцюжок функцій просто прибивали її. Не розумійте, чому підручники не можуть бути таким описовим.
деркут

12

Я спробую додати до інтуїтивного опису операцій ...

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

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

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

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

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


12

Я буду описати свій погляд на це в два кроки: крок "введення в прихований" і крок "прихований вихід". Я спершу зробіть крок прихованого до виводу, оскільки він здається менш цікавим (для мене).

Прихований вихід

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

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

Вхід до прихованого

Скажімо, у вас є 3 вхідних нейрона (просто так я легко можу тут написати деякі рівняння) та кілька прихованих нейронів. Кожен прихований нейрон отримує як вхід зважену суму входів, так, наприклад, можливо

hidden_1 = 10 * (input_1) + 0 * (input_2) + 2 * (input_3)

Це означає, що значення hidden_1дуже чутливе до значення input_1, зовсім не чутливе до input_2та лише чутливе до input_3.

Отже, ви можете сказати, що hidden_1це захоплення певного аспекту введення, який ви можете назвати input_1аспектом "важливо".

Вихід з, hidden_1як правило, формується, передаючи вхід через якусь функцію, тому скажімо, ви використовуєте сигмоподібну функцію. Ця функція приймає значення між 0 і 1; тому думайте про це як про перемикач, який говорить, що або input_1важливо, або це не так.

Отже, це і є прихований шар! Він витягує аспекти або особливості вхідного простору.

Тепер ваги теж можуть бути негативними! Що означає, що ви можете отримати такі аспекти, як " input_1важливо, АБО ТАКОЖ input_2забирає це значення":

hidden_2 = 10 * (input_1) - 10 * (input_2 ) + 0 * (input_3)

або input_1і input_3мають «спільний» значення:

hidden_3 = 5 * (input_1) + 0 * (input_2) + 5 * (input_3)

Більше геометрії

Якщо ви знаєте деяку лінійну алгебру, ви можете мислити геометрично з точки зору проектування за певними напрямами. У наведеному вище прикладі я проектував уздовж input_1напрямку.

Погляньмо ще hidden_1раз, зверху. Після того, як значення at input_1буде досить великим, вихід сигнальної активації сигмоїду просто залишиться на рівні 1, він не стане більшим . Іншими словами, все більше і більше input_1не матиме ніякого значення для результатів. Аналогічно, якщо він рухається в протилежному (тобто негативному) напрямку, то після точки вихід не вплине.

Добре, гаразд. Але припустимо, що ми не хочемо чутливості в напрямку нескінченності в певному напрямку, і хочемо, щоб вона була активована лише для певного діапазону на лінії. Значення для дуже негативних значень ефекту немає, а для дуже позитивних значень ефекту немає, але для значень між скажімо, 5 і 16 ви хочете, щоб він прокинувся. Тут ви використовуєте функцію радіальної основи для своєї функції активації.

Підсумок

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

EDIT: Ця сторінка зі своїми чудовими інтерактивними графіками робить кращу роботу, ніж мої довгі та громіздкі відповіді, які можна було зробити коли-небудь: http://neuralnetworksanddeeplearning.com/chap4.html


1
Як і в ОП, я трохи розгублений щодо прихованого шару в нейронних мережах. У вашому прикладі, як алгоритм NN знаходить ваги для прихованих_1, прихованих_2 та прихованих_3 нейронів? І оскільки приховані_1, приховані_2 та приховані_3 походять від одних і тих же вхідних змінних, чи не зважуються ті ж самі рішення?
RobertF

5

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

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

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

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