Функция кросс-энтропийной ошибки в нейронных сетях


115

В MNIST для начинающих ML они определяют кросс-энтропию как

Hy(y):=iyilog(yi)

yi - это прогнозируемое значение вероятности для классаi аyi - истинная вероятность для этого класса.

Вопрос 1

Разве это не проблема, что yilog(yi) ) может быть 0? Это означало бы, что у нас действительно плохой классификатор, конечно. Но подумайте об ошибке в нашем наборе данных, например, об «очевидном», 1помеченном как 3. Будет ли это просто сбой? Разве выбранная нами модель (активация softmax в конце) никогда не дает вероятности 0 для правильного класса?

вопрос 2

Я узнал, что кросс-энтропия определяется как

Hy(y):=i(yilog(yi)+(1yi)log(1yi))

Что правильно? У вас есть ссылки на учебники для любой из версий? Как эти функции различаются по своим свойствам (как функции ошибок для нейронных сетей)?



Смотрите также: Расхождение Kullback-Leibler Объясненное сообщение в блоге.
Петр Мигдаль

Ответы:


101

Один из способов интерпретации кросс-энтропии состоит в том, чтобы рассматривать ее как (минус) логарифмическую вероятность для данных yi в модели yi .

А именно, предположим, что у вас есть некоторая фиксированная модель (она же «гипотеза»), которая предсказывает для n классов {1,2,,n} их гипотетические вероятности появления y1,y2,,yn . Предположим, что теперь вы наблюдаете (в действительности) k1 экземпляров класса 1 , k2 экземпляров класса 2 , kn экземпляров класса n и т. Д. Согласно вашей модели вероятность этого:

P[data|model]:=y1k1y2k2ynkn.
Взяв логарифм и поменяв знак:
logP[data|model]=k1logy1k2logy2knlogyn=ikilogyi
Если теперь разделить правую сумму на количество наблюденийN=k1+k2++kn и обозначить эмпирические вероятности так какyi=ki/N , вы получите перекрестную энтропию:
1NlogP[data|model]=1Nikilogyi=iyilogyi=:H(y,y)

Кроме того, логарифмическая вероятность набора данных для данной модели может быть интерпретирована как мера «длины кодирования» - количества битов, которые вы ожидаете потратить на кодирование этой информации, если ваша схема кодирования будет основана на вашей гипотезе.

Это следует из наблюдения, что для независимого события с вероятностью yi требуется как минимум log2yi битов для его кодирования (при условии эффективного кодирования), и, следовательно, выражение

iyilog2yi,
буквально является ожидаемым длина кодирования, где длины кодирования для событий вычисляются с использованием «гипотетического» распределения, в то время как ожидание принимается за фактическое.

Наконец, вместо того, чтобы говорить «мера ожидаемой длины кодирования», мне действительно нравится использовать неофициальный термин «мера неожиданности». Если вам нужно много битов для кодирования ожидаемого события из дистрибутива, дистрибутив «действительно удивителен» для вас.

Имея в виду эту интуицию, ответы на ваши вопросы можно увидеть следующим образом:

  • Вопрос 1 . Да. Это проблема, когда соответствующий yi отличен от нуля одновременно . Это соответствует ситуации, когда ваша модель полагает, что некоторый класс имеет нулевую вероятность появления, и все же класс появляется в реальности. В результате «сюрприз» вашей модели бесконечно велик: ваша модель не учитывает это событие, и теперь для ее кодирования требуется бесконечно много битов. Вот почему вы получаете бесконечность как свою перекрестную энтропию.

    Чтобы избежать этой проблемы, вы должны убедиться, что ваша модель не делает необдуманных предположений о невозможности чего-либо, пока это может произойти. В действительности, люди склонны использовать сигмоидные или «мягкие» функции в качестве моделей своих гипотез, которые достаточно консервативны, чтобы оставить хотя бы какой-то шанс для каждого варианта.

    Если вы используете какую-то другую модель гипотезы, вы должны ее упорядочить (иначе говоря, «сгладить»), чтобы она не выдвигала гипотезы о нулях там, где это не должно быть.

  • Вопрос 2 . В этой формуле обычно предполагается, что yi равен 0 или 1 , тогда как yi является гипотезой вероятности модели для соответствующего входа. Если вы посмотрите внимательно, вы увидите, что это просто logP[data|model] для двоичных данных, эквивалент второго уравнения в этом ответе.

    iH(yi,yi),
    yiyi(yi,1yi) и(yi,1yi) .


1
Можете ли вы предоставить источник, где они определяют ? Здесьони определяют его как горячую раздачу для текущей метки класса. В чем разница? yi=kiN
Ленар Хойт

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

N=1ki/N

«независимое событие требует ... для его кодирования» - не могли бы вы объяснить этот бит, пожалуйста?
Алекс

@ Алекс Это может потребовать более подробного объяснения для правильного понимания - ознакомьтесь с кодами Шеннона-Фано и отношением оптимального кодирования к уравнению энтропии Шеннона. Для простоты, если событие имеет вероятность 1/2, лучше всего кодировать его, используя один бит. Если вероятность составляет 1/4, вы должны потратить 2 бита для его кодирования и т. Д. В общем, если ваш набор событий имеет вероятности в форме 1/2 ^ k, вы должны задать им длины k - так ваш код будет приблизиться к оптимальной длине Шеннона.
КТ.

22

iyi

Это означает, что формула фиксирует ошибку только в целевом классе. Он отбрасывает любое понятие ошибок, которые вы можете считать «ложноположительными», и не заботится о том, как распределяются предсказанные вероятности, кроме предсказанной вероятности истинного класса.

iyi=1

Вопрос 1

yilog(yi)

0log(yi)yi=0log( max( y_predict, 1e-15 ) )

вопрос 2

Hy(y):=i(yilog(yi)+(1yi)log(1yi))

ii

Если вы модифицируете такую ​​сеть, чтобы иметь два противоположных выхода и использовали softmax плюс первое определение logloss, то вы можете видеть, что на самом деле это то же самое измерение ошибок, но складывающее метрику ошибок для двух классов в один выход.

Если существует более одного класса, для которого можно предсказать членство, и классы не являются исключительными, то есть примером может быть любой или все классы одновременно, тогда вам нужно будет использовать эту вторую формулировку. Для распознавания цифр это не так (записанная цифра должна иметь только один «истинный» класс)


i

log(yi)=0yi=0log(yi)

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

1
@Media: Не совсем. Вы хотите посмотреть на такие вещи, как иерархическая классификация. , ,
Нил Слэйтер

1
yiyiyi

11

ytrueypredictytrue

Первый вопрос:

Выше ответ объяснил основы вашей первой формулы, перекрестной энтропии, определенной в теории информации.

С мнением, отличным от теории информации:

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

В обывательском слове:

Если вы хотите, чтобы почти все хорошие люди стали вашими друзьями, но хотите, чтобы некоторые плохие люди стали вашими друзьями, используйте первую формулу для критерия.

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

Хотя, я думаю, большинство из нас критически настроены и хотели бы выбрать второй (так как многие ML-пакеты предполагают, что такое кросс-энтропия).

Второй вопрос:

ytruelog(ypredict)

inkKytrue(k)log(ypredict(k))

Таким образом, когда есть только два класса (K = 2), у вас будет вторая формула.


5

Эти проблемы решаются с помощью учебника по использованию softmax.

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

Что касается 2), они, очевидно, не одинаковы, но я разработал мягкую формулировку, которую они дали, решает проблему. Если вы не используете softmax, это приведет к тому, что вы выучите огромные термины смещения, которые предполагают 1 для каждого класса для любого входа. Но поскольку они нормализуют softmax во всех классах, единственный способ максимизировать вывод правильного класса - сделать его большим по сравнению с неверными классами.


«Вы правы, что softmax гарантирует ненулевой выход» - я знаю, что это теоретически так. В действительности, может ли случиться так, что (из-за числовых проблем) это станет 0?
Мартин Тома

Хороший вопрос. Я предполагаю, что для функции возведения в степень вполне возможно вывести 0.0, если ваш ввод слишком мал для точности вашего float. Однако я предполагаю, что большинство реализаций добавляют крошечный положительный член, чтобы гарантировать ненулевой ввод.
jamesmf

0

yilog(yi)

log(0)log(yi+ϵ)


Hy(y):=iyilog(yi)
Hy(y):=i(yilog(yi)+(1yi)log(1yi))

(a) верно для предсказания с несколькими классами (на самом деле это двойное суммирование), (b) такое же, как (a) для предсказания с двумя классами. Оба кросс-энтропии.

Пример:

xici{0,1}ci[0,1]

cici

(ci,ci)={(0,0.1),(0,0.4),(0,0.8),(1,0.8),(1,0.2)}

yiyi

  • yik:=1ci=k:=0

  • yik:=p(k|xi)xik

(yi,yi)

(yi,yi)={([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])}

Оба (а) и (б) рассчитываются как:

Hy(y)=1/5([log(0.9)+log(0.6)+log(0.2)]ci=0+[log(0.8)+log(0.2)]ci=1)=0.352

Вывод:

1K
(xi,ci)ci=kyi=[0,..,1,0,..]kthyik=1yik=p(k|xi)(xi,k)log(yik)yik1log(yik)0

L(yi,yi)=k=1Kyiklog(yik)

yik=1kk0log(yik)=0yim=1

L(yi,yi)=log(yim)

Окончательная формула по всем тренировочным точкам:

Hy(y)=(xi,yi)k=1Kyiklog(yik)

yi0=1yi1yi0=1yi1

Hy(y)=(xi,yi)yi1log(yi1)+yi0log(yi0)=(xi,yi)yi1log(yi1)+(1yi1)log(1yi1)

который такой же, как (б).

Кросс-энтропия (а) над классами (одно суммирование)

Кросс-энтропия (а) над классами:

Hy(y)=k=1Kyklog(yk)

Эта версия не может быть использована для задачи классификации. Позволяет повторно использовать данные из предыдущего примера:

(ci,ci)={(0,0.1),(0,0.4),(0,0.8),(1,0.8),(1,0.2)}

y0=3/5=0.6y1=0.4

y0=3/5=0.6y1=0.4

y0logy0y1logy1=0.6log(0.6)0.4log(0.4)=0.292

(0,0.8)(1,0.2)y0y1


(ci,ci)={(0,0.1),(0,0.4),(0,0.2),(1,0.8),(1,0.8)}

y0y0=3/5

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.