Помилка перехресної ентропії в нейронних мережах


115

У програмі MNIST for ML початківці визначають перехресну ентропію як

Ну'(у): =-iуi'журнал(уi)

уi - передбачуване значення ймовірності для класу а - справжня ймовірність для цього класу.iуi'

питання 1

Хіба це не проблема, що (у ) може бути 0? Це означає, що у нас, звичайно, поганий класифікатор. Але подумайте про помилку в нашому наборі даних, наприклад, "очевидний", позначений як . Це просто розбилося б? Чи обрана нами модель (активація softmax в кінці) взагалі ніколи не дає ймовірності 0 для правильного класу?уiжурнал(уi)13

Питання 2

Я дізнався, що крос-ентропія визначається як

Ну'(у): =-i(уi'журнал(уi)+(1-уi')журнал(1-уi))

Що правильно? Чи є у вас будь-які посилання на підручник для будь-якої версії? Чим ці функції відрізняються за своїми властивостями (як функції помилок для нейронних мереж)?


Дивіться також: stats.stackexchange.com/questions/80967/…
Piotr

Відповіді:


101

Один із способів інтерпретації перехресної ентропії - це бачити її як (мінус) імовірність журналу для даних уi' за моделлю уi .

А саме, припустимо, що у вас є якась фіксована модель (також "гіпотеза"), яка передбачає для н класів {1,2,,н} їх гіпотетичні ймовірності виникнення у1,у2,,ун . Припустимо, ви зараз спостерігаєте (насправді) к1 екземпляри класу 1 , к2 екземпляри класу 2 , кн екземпляри класу н тощо. Відповідно до вашої моделі, ймовірність цього трапляється:

П[гата|могел]: =у1к1у2к2ункн.
Беручи логарифм і змінюючи знак: - log P [ d a t a | m o d e l ] = - k 1 log y 1 - k 2 log y 2 - - k n log y
-журналП[гата|могел]=-к1журналу1-к2журналу2--кнжурналун=-iкiжурналуi
Якщо тепер розділити праву суму на кількість спостереженьN=к1+к2++кн і позначити емпіричні ймовірності якуi'=кi/N , ви отримаєте перехресну ентропію:
-1NжурналП[гата|могел]=-1Niкiжурналуi=-iуi'журналуi=:Н(у',у)

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

Це випливає з того факту , що незалежне подія з ймовірністю уi вимагає , по крайней мере -журнал2уi бітів , щоб закодувати його ( в припущенні ефективного кодування), і , отже, вираз

-iуi'журнал2уi,
буквально очікуваний довжина кодування, де довжини кодування для подій обчислюються за допомогою "гіпотезованого" розподілу, тоді як очікування приймається за фактичне.

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

Маючи на увазі цю інтуїцію, відповіді на ваші запитання можна побачити наступним чином:

  • Питання 1 . Так. Це проблема всякий раз, коли відповідне уi' є ненульовим одночасно . Це відповідає ситуації, коли ваша модель вважає, що деякий клас має нульову ймовірність виникнення, і все ж клас з’являється в реальності. Як результат, "сюрприз" вашої моделі нескінченно великий: ваша модель не враховувала цю подію і тепер для кодування їй потрібно нескінченно багато біт. Ось чому ви отримуєте нескінченність як свою перехресну ентропію.

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

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

  • Питання 2 . У цій формулі зазвичай передбачається, що уi' дорівнює 0 або 1 , а уi - гіпотеза ймовірності моделі для відповідного вводу. Якщо ви придивитесь уважніше, то побачите, що це просто -журналП[гата|могел] для двійкових даних, еквівалент другого рівняння у цій відповіді.

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

    iН(уi',уi),
    деуi' тауi повинен інтерпретуватися як відповідні бінарними розподілу(уi',1-уi') і(уi,1-уi) .


1
Чи можете ви надати джерело там, де вони визначають ? Тутвони визначають його як дистрибутив із гарячою мірою поточного класу. Яка різниця? yi=kiN
Ленар Хойт

1
У навчальному посібнику MNIST TensorFlow вони також визначають його як у розгалужених векторах.
Ленар Хойт

@LenarHoyt Коли , k i / N було б еквівалентно нагрітому. Ви можете думати про гарячу як про кодування одного предмета, виходячи з його емпіричної (реальної) категоричної ймовірності. N=1кi/N
THN

"Незалежна подія вимагає ... щоб кодувати її" - ви могли б пояснити цей біт, будь ласка?
Олексій

@ Алекс Це може знадобитися довше пояснення, щоб правильно зрозуміти - прочитати про коди Шеннона-Фано та відношення оптимального кодування до рівняння ентропії Шеннона. Щоб придумати речі, якщо подія має ймовірність 1/2, найкраще зробити це кодувати її за допомогою одного біта. Якщо вона має ймовірність 1/4, вам слід витратити 2 біти для її кодування тощо. Загалом, якщо ваш набір подій має ймовірності форми 1/2 ^ k, ви повинні надати їм довжини k - таким чином ваш код наблизитися до оптимальної довжини Шеннона.
КТ.

22

Перша формула logloss, яку ви використовуєте, стосується втрати журналу багатокласового характеру, де в підписці перераховуються різні класи в прикладі. Формула передбачає, що один y ' i в кожному прикладі дорівнює 1, а решта - 0.iyi

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

Ще одне припущення - для прогнозів кожного прикладу. Шар softmax робить це автоматично - якщо ви використовуєте щось інше, вам потрібно буде масштабувати результати, щоб задовольнити це обмеження.iyi=1

питання 1

Хіба це не проблема, що l o g ( y i ) ) може бути 0?уiлог(уi)

Так, це може бути проблемою, але зазвичай це не є практичним. Випадково ініціалізований шар softmax навряд чи може вивести точний 0у будь-якому класі. Але це можливо, тому варто дозволити це. По-перше, не оцінюйте для будь-якого y i = 0 , оскільки негативні класи завжди вносять 0 до помилки. По-друге, у практичному коді ви можете обмежити значення чимось на зразок чисельної стабільності - у багатьох випадках це не потрібно, але це розумне оборонне програмування.лог(уi)уi'=0log( max( y_predict, 1e-15 ) )

Питання 2

Я дізнався, що перехресна ентропія визначається як Ну'(у): =-i(уi'журнал(уi)+(1-уi')журнал(1-уi))

Ця формулювання часто використовується для мережі з одним виходом, що передбачає два класи (як правило, позитивне приналежність до класу для 1 та негативне для 0 виведення). У такому випадку у може бути лише одне значення - ви можете втратити суму понад i .ii

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

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


Зауважимо, є деяка неоднозначність у викладі другої формули - теоретично це може припускати лише один клас і тоді я перелічую приклади. i
Ніл Слейтер

Вибачте, я запитав щось інше, ніж те, що я хотів знати. Я не бачу проблеми в , але у y i = 0 через log ( yжурнал(уi)=0уi=0 . Чи можете ви скоригувати свою відповідь на це? журнал(уi)
Мартін Тома

@NeilSlater, якщо класи не були взаємовиключними, вихідний вектор для кожного вводу може містити більше 1, чи слід використовувати другу формулу?
ЗМІ

1
@Media: Не дуже. Хочеш дивитись на такі речі, як ієрархічна класифікація. . .
Ніл Слейтер

1
@Javi: У запитанні ОП - це основна істина, тому зазвичай 0 або 1. Саме y i є вихідним програмним забезпеченням. Однак y я можу закінчити нуль на практиці через округлення з плаваючою точкою. Це насправді відбувається. уi'уiуi
Ніл Слейтер

11

Враховуючи , ви хочете оптимізувати свій метод машинного навчання, щоб максимально наблизити y p r e d i c t до y t r u e .ytrueypredictytrue

Перше питання:

Вищенаведена відповідь пояснила передумови вашої першої формули, поперечної ентропії, визначеної в теорії інформації.

З думки, відмінної від теорії інформації:

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

У словниковому слові:

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

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

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

Друге питання:

Перехресна ентропія на зразок кожного класу:

ytruelog(ypredict)

Перехресна ентропія для цілих наборів даних цілих класів:

inkKytrue(k)log(ypredict(k))

Таким чином, коли є лише два класи (K = 2), у вас буде друга формула.


5

Ці питання вирішуються використанням підручника в роботі програмного забезпечення.

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

Що стосується 2), вони, очевидно, не такі, але я формулю softmax, який вони дали, опікується проблемою. Якщо ви не використовували softmax, це призведе до того, що ви дізнаєтесь величезних термінів упередженості, які вгадують 1 для кожного класу для будь-якого введення. Але оскільки вони нормалізують софтмакс для всіх класів, єдиний спосіб максимізувати вихід правильного класу - це він бути великим щодо неправильних класів.


"ви вірні, що softmax гарантує ненульовий вихід" - я знаю, що це теоретично так. Насправді, чи може статися так, що (через числові питання) це стає 0?
Мартін Тома

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

0

уiжурнал(уi)

журнал(0)журнал(уi+ϵ)


Ну'(у): =-iуi'журнал(уi)
Ну'(у): =-i(уi'журнал(уi)+(1-уi')журнал(1-уi))

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

Приклад:

хici'{0,1}ci[0,1]

ci'ci

(ci',ci)={(0,0,1),(0,0,4),(0,0,8),(1,0,8),(1,0,2)}

уi'уi

  • уiк': =1ci'=к: =0

  • уiк: =p(к|хi)хiк

(уi',уi)

(уi',уi)={([1,0],[0,9,0,1]), ([1,0],[0,6,0,4]), ([1,0],[0,2,0,8]), ([0,1],[0,2,0,8]), ([0,1],[0,8,0,2])}

Обидва (a) та (b) обчислюються як:

Ну'(у)=-1/5([лог(0,9)+лог(0,6)+лог(0,2)]ci=0+[лог(0,8)+лог(0,2)]ci=1)=0,352

Виведення:

1К
(хi,ci')ci'=куi'=[0,..,1,0,..]ктгодуiк'=1уiк=p(к|хi)(хi,к)-лог(уiк)уiк1-лог(уiк)0

L(уi',уi)=-к=1Куiк'лог(уiк)

уiк'=1к'к0лог(уiк')=0уiм'=1

L(уi',уi)=-лог(уiм)

Остаточна формула для всіх навчальних балів:

Ну'(у)=-(хi,уi')к=1Куiк'лог(уiк)

yi0=1уi1'уi0=1-уi1

Ну'(у)=-(хi,уi')уi1'лог(уi1)+уi0'лог(уi0)=-(хi,уi')уi1'лог(уi1)+(1-уi1')лог(1-уi1)

що те саме, що (b).

Перехресна ентропія (а) над класами (одна сумація)

Перехресна ентропія (а) над класами:

Ну'(у)=-к=1Кук'лог(ук)

Цю версію не можна використовувати для завдання класифікації. Дозволяє повторно використовувати дані з попереднього прикладу:

(ci',ci)={(0,0,1),(0,0,4),(0,0,8),(1,0,8),(1,0,2)}

у0'=3/5=0,6у1'=0,4

у0=3/5=0,6у1=0,4

-у0'логу0-у1'логу1=-0,6лог(0,6)-0,4лог(0,4)=0,292

(0,0,8)(1,0,2)у0'у1'


(ci',ci)={(0,0,1),(0,0,4),(0,0,2),(1,0,8),(1,0,8)}

у0'у0=3/5

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