Изменения

Перейти к: навигация, поиск

Soft-Max и Soft-Arg-Max

2328 байт добавлено, 19:57, 1 июля 2022
Soft-Arg-Max
Soft-Max и Soft-Arg-Max.
==Soft-Arg-Max==
===Постановка задачи===Пусть есть задача мягкой классификации:  Алгоритм выдает значения L1<tex>L_{1}, L2L_{2}, ... Ln\ldots, L_{n}</tex>, где <tex>n </tex> {{-- -}} число классов. Li  <tex>L_{i}</tex> {{--- }} уверенность алгоритма в том, что объект принадлежит классу <tex>i; -oo <=Li /tex>, <= tex>L_{i} \in \left [ -\infty, +oo. \infty\right ]</tex> Нужно для Для этих значений необходимо найти такие p1<tex>p_{1},...pn\ldots,p_{n}</tex>, что pi из : *<tex>p_{i} \in \left [0, 1\right ], а сумма pi </tex>*<tex>\sum_{i}p_{i}= 1</tex>То есть <tex>p_{1},\ldots, то есть p1..pn p_{n}</tex> {{--- }} распределение вероятностей. Для этого возьмём экспоненту от L1..Ln; Получим числа от [0;+oo] и нормируем ихвыполним преобразование:pi <tex>p_{i} = \frac{\exp\left(LiL_{i}\right)/Sum(}{\sum_{i}\exp\left(Li)L_{i}\right)}</tex> Выполняется Тогда выполняется следующее: Li  *<tex>L_{i} \leqslant L_{j} \implies p_{i} \leqslant p_{j}</tex>*Модель <tex>a</tex>, возвращающая <tex>L_{i}</tex>, после преобразования будет возвращать <tex>p_{i}</tex> и останется дифференцируемой*<tex>p = Lj =\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}\left ( L \right )</tex> Pi  Пусть <tex>y = Pj\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}\left ( x \right )</tex>, тогда:
Есть модель a, возвращающая Li. Необходимо сделать так, чтобы a возвращала pi, при этом оставаясь дифференциируемой.
<tex>y = </tex> '''soft-arg-max'''<tex>\left ( x \right )</tex>, где <tex>y_{i} = \frac{\exp\left ( x_{i} \right )}{\sum_{j}\exp\left ( x_{i} \right )}</tex>
<tex>\frac{\partial y_{i}}{\partial x_{j}} = \begin{cases}
&y_{i}\left ( 1 - y_{j} \right ),~i = j \\
\end{cases} = y_{i}\left ( I\left [ i = j \right ] - y_{j}\right )</tex>
У <tex>\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}</tex> такое название, так как это, по сути, гладкая аппроксимация модифицированного <tex>\boldsymbol{\mathbf{arg{\text -}max}}</tex>. ===Свойства softSoft-argArg-maxMax===*Вычисляет по вектору чисел вектор с распределением вероятностей.*Можно интерпретировать как вероятность нахождения максимума в <tex>i</tex>-й координате.*'''<tex>\boldsymbol{\mathbf{soft{\text -}arg{\text -}max'''<tex>}}\left ( x - c,y-c,z-c\right )=</tex> '''\boldsymbol{\mathbf{soft{\text -}arg{\text -}max'''<tex>}}\left ( x,y,z\right )</tex>*Предыдущее свойство используют для устойчивости вычислений. При при <tex>c=max\left ( x,y,z \right )</tex> ===Модификация Soft-Arg-Max===<tex>\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}_{t}\left(x\right)=\frac{\exp\left(\frac{x_{i}}{t}\right)}{\sum\exp\left(\frac{x_{j}}{t}\right)}</tex>
===Модификация soft-arg-max==='''soft-arg-max'''Данная модификация полезна, когда необходимо контролировать распределение вероятностей, получаемое <tex>_\boldsymbol{t}\left(x\right)=\fracmathbf{\exp\left(x_soft{i}\right)text -}arg{\sum\exp\left(\frac{x_{jtext -}max}}{</tex>. Чем больше параметр <tex>t}\right)}</tex>, тем больше получаемые вероятности будут похожи на равномерное распределение.
==Soft-Max==
===Плохой Soft-Max===
[[File:BadSoftMax.png|200px|thumb|рис.1 Плохой Soft-Max (помечен красным)]][[File:GoodSoftMax.png|200px|thumb|рис.2 Хороший Soft-Max (помечен оранжевым)]]Зададим функцию '''<tex>\boldsymbol{\mathbf{soft{\text -}max''' }}</tex> таким образом:
'''<tex>\boldsymbol{\mathbf{soft{\text -}max'''<tex>}}\left ( x_{1},\ldots,x_{n}\right ) = \frac{x_{i}~\cdot~\exp \left ( x_{i} \right )}{\sum_{j}\exp \left( x_{j} \right )} = \left \langle x, \right .</tex>'''\boldsymbol{\mathbf{soft{\text -}arg{\text -}max'''<tex>}}\left . \left (x_{1},\ldots,x_{n} \right ) \right \rangle</tex>
Гладкая аппроксимация максимума. Математическое ожидание или средневзвешенное, где веса {{---}} экспоненты значений соответствующих элементов. Сохраняет некоторые свойства максимума:
*'''<tex>\boldsymbol{\mathbf{soft{\text -}max'''<tex>}}\left ( a,a,a\right ) = a</tex>*'''<tex>\boldsymbol{\mathbf{soft{\text -}max'''<tex>}}\left ( x+a,y+a,z+a\right ) =</tex> '''\boldsymbol{\mathbf{soft{\text -}max'''<tex>}}\left ( x,y,z\right ) + a</tex>
Заданный выше '''<tex>\boldsymbol{\mathbf{soft{\text -}max''' }}</tex> {{---}} "плохой" в связи с тем, что мы считаем средневзвешенное значение, которое всегда будет меньше максимума, что приведёт к проблемам с поиском максимума.
===Хороший Soft-Max===
'''<tex>\boldsymbol{\mathbf{soft{\text -}max'''<tex>}}\left ( x_{1},\ldots,x_{n}\right ) = \log\left(\sum_{i}\exp\left(x_{i}\right)\right)</tex>
*Не сохраняет сохраняется свойство '''<tex>\boldsymbol{\mathbf{soft{\text -}max'''<tex>}}\left(a,a,a\right)=a</tex>*Производная равна '''<tex>\boldsymbol{\mathbf{soft{\text -}arg{\text -}max'''}}</tex>
В этом случае сохраняется монотонность, значит, не возникнет проблем с поиском минимума и максимума.
==Связь между вариациями Soft-Max==
Обозначим "плохой" '''<tex>\boldsymbol{\mathbf{soft{\text -}max''' }}</tex> как '''<tex>\boldsymbol{\mathbf{bad{\text -}soft{\text -}max'''}}</tex>. Тогда: *<tex>\boldsymbol{\mathbf{bad{\text -}soft{\text -}max}}\left(x_{1},\ldots,x_{n}\right)=\left \langle x, \right .\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}\left . \left (x_{1},\ldots,x_{n} \right ) \right \rangle</tex>*<tex>\nabla\boldsymbol{\mathbf{soft{\text -}max}}\left(x_{1},\ldots,x_{n}\right)=\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}\left(x_{1},\ldots,x_{n}\right)</tex>*<tex>\log\left(\right.\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}_{i}\left(x_{1},\ldots,x_{n}\right)\left.\right) = x_{i} -\boldsymbol{\mathbf{soft{\text -}max}}\left(x_{1},\ldots,x_{n}\right)</tex> ==Примечания==*В большинстве статей пишется <tex>\boldsymbol{\mathbf{soft{\text -}max}}</tex>, хотя вместо этого подразумевается <tex>\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}</tex>*<tex>\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}</tex> можно называть также как обобщённая (многомерная) сигмоида*<tex>\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}</tex> является алгоритмом подсчёта весов для <tex>\boldsymbol{\mathbf{soft{\text -}max}}</tex>==Источники==# [https://www.youtube.com/watch?v=mlPNUbaphZA&ab_channel=MLLabITMO Лекция 7. Байесовские методы А. Забашта]# Лекция 7. Автоматическое дифференцирование и нейронные сети С. Муравьёв
*'''bad-soft-max'''<tex>\left(x_{1},\ldots,x_{n}\right)=\left \langle x, \right .</tex>'''soft-arg-max'''<tex>\left . \left (x_{1},\ldots,x_{n} \right ) \right \rangle</tex>*<tex>\nabla</tex>'''soft-max'''<tex>\left(x_{1},\ldots,x_{n}\right)=</tex>'''soft-arg-max'''<tex>\left(x_{1},\ldots,x_{n}\right)</tex>*<tex>\log\left(\right.</tex>'''soft-arg-max'''<tex>_{i}\left(x_{1},\ldots,x_{n}\right)\left.\right) = x_{i} -</tex>'''soft-max'''<tex>\left(x_{1},\ldots,x_{n}\right)</tex>==Примечание==*В большинстве статей пишется '''soft-max''', хотя вместо этого подразумевается '''soft-arg-max'''.*'''soft-arg-max''' можно называть также как обобщённая (многомерная) сигмоида*'''soft-arg-max''' является алгоритмом подсчёта весов для '''soft-max'''[[Категория: Машинное обучение]]
46
правок

Навигация