Шар Softmax в нейромережі


43

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

SoftMax вихід hj=ezjezi деj- номер вихідного нейрона.

Якщо я виведу це, то отримаю

hjzj=hj(1hj)

Подібно до логістичної регресії. Однак це неправильно, оскільки моя чисельна градієнтна перевірка не вдається.

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


3
Ви повинні вдосконалити назву свого запитання, оскільки він не говорить про додавання загального шару softmax до NN, оскільки ви запитуєте конкретно про те, як не вдалося перевірити градієнт. Я настійно пропоную змінити заголовок на "Чому зворотна розмноження перестає працювати правильно, коли я додаю шар softmax до моєї нейронної мережі".
Чарлі Паркер

Відповіді:


43

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

Ви правильно вивели градієнт діагоналі Якобієвої матриці, тобто це потрібно сказати

hizj=hi(1hj):i=j

і як це заявила амеба, вам також доведеться вивести з діагоналі записи якобіан, які дають

hizj=hihj:ij

Ці два визначення поняття зручно поєднувати за допомогою конструкції, званої дельтою Кронекера , тому визначення градієнта стає

hizj=hi(δijhj)

[J]ij=hi(δijhj)

hixi

[x]k=i=1hi,k

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

σl=Jσl+1

Якщо шар softmax є вашим вихідним шаром, то комбінування його з моделлю витрат на перехресну ентропію спрощує обчислення просто

σl=ht

th


σl=(σl,1,σl,2,...,σl,k)σl,j=Czj

Так, це правильно.
Мранц

Чи не могли б хто-небудь пояснити, що таке дельта дельта в дельті Кронекера та як їх обчислити?
danijar

Я затримався на цій проблемі на деякий час. Для уточнення. У вас є вектор (попередньо softmax), а потім ви обчислюєте softmax. Оскільки значення softmax залежать від усіх вхідних значень, потрібна фактична матриця якобі. Потім ви берете матрицю якобіану і сумите скорочення рядків, щоб отримати векторний рядок, який ви використовуєте для спуску градієнта, як зазвичай. Чи все це на 100% правильно?
harveyslash

14

Похідна помилкова. Вона повинна бути,

hjzk=hjδkjhjhk

C

nk=1Ctknlnyk(xn)

де суперіндекс проходить над набором вибірки, - значення k-го компонента цілі для n-го зразка. Тут передбачається, що ви використовуєте схему кодування 1-з-С, тобто . У такому випадку всі t 'дорівнюють нулю, крім компонента, що представляє його відповідний клас, який є одним.tkntkn

Зауважте, що т є постійними. Отже, мінімізація цього функціоналу еквівалентна мінімізації,

nk=1Ctknlnyk(xn)+nk=1Ctknlntkn=nk=1Ctknlnyk(xn)tkn

що має перевагу в тому, що якобіанець приймає дуже зручну форму, а саме:

Ezj=hjtj

Я б рекомендував вам отримати копію нейронних мереж Bishop для розпізнавання візерунків . ІМХО досі найкраща книга з нейронних мереж.


14

Кожен вихід softmax залежить від усіх входів, тому градієнт - це справді ціла матриця Якобії. Ви правильно обчислили , але вам також потрібно якщо . Я думаю, якщо ти можеш отримати перший вираз, ти також можеш легко отримати другий вираз.khj=-hjhkjkjhj=hjzj=hj(1hj)khj=hjhkjk

Я не впевнений, яку проблему ви бачите із зворотним розповсюдженням: у шарі softmax у вас є виходи та входи, тому помилка з кожного виводу повинна поширюватися на кожен вхід, і саме тому вам потрібен весь якобійський. З іншого боку, зазвичай у вас буде функція витрат, пов'язана з результатом програмного забезпечення, наприклад, де - бажані результати (коли ви робите класифікацію, то часто один з них дорівнює 1 , а інші до 0). Тоді насправді вас цікавить , який можна обчислити за допомогою ланцюгового правила, що призводить до акуратного виразу, і справді є вектором (а не матрицею).j C = - j t j log h j , t j Cjj

C=jtjloghj,
tjCzj

1
Я спробую краще описати свою проблему, наприклад, у цьому навчальному посібнику ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm , мені потрібно по-елементарному помножити ваги і дельти на похідну (крок № 3). Тож якщо я маю повну матрицю якобіана, розміри не відповідають. Дякую.
Ран

Чи знаєте ви, як діяти, якщо це не софтмакс, а звичайний прихований шар? Уявіть, що кожна одиниця на цьому шарі отримує входи з усіх одиниць попереднього шару (тобто цей шар "повністю пов'язаний"), як правило. Тоді вам також потрібно повернути помилки назад через цей шар, а похідні також утворюють матрицю якобіан. Якщо ви плутаєтесь, як це зробити, то ваше плутанина не пов'язане з softmax.
Амеба каже: Відновити Моніку

1
Я успішно реалізував це для лінійних та сигмоїдних шарів, тому що похідна є вектором, тому у мене не було проблем із розмірами.
Ран

Вибачте, Ран, можливо, я просто дурний, але якщо у вас сигмоїдний шар повністю пов'язаний з попереднім шаром, то вихід (або вхід) до кожної одиниці матиме похідне відносно вхідного з'єднання з кожного блоку на попередній шар, тобто всі похідні утворюють 2D матрицю, n'est-ce pas? iji
амеба каже, що відбудеться Моніка
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.