Soft-Max и Soft-Arg-Max — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Модификация soft-arg-max)
м (rollbackEdits.php mass rollback)
 
(не показана 51 промежуточная версия 3 участников)
Строка 1: Строка 1:
Soft-Max и Soft-Arg-Max.
 
==Soft-Arg-Max==
 
Пусть есть задача мягкой классификации: Алгоритм выдает значения L1, L2, ... Ln, где n - число классов. Li - уверенность алгоритма в том, что объект принадлежит классу i; -oo <=Li <= +oo.
 
Нужно для этих значений найти такие p1,...pn, что pi из [0, 1], а сумма pi = 1, то есть p1..pn - распределение вероятностей.
 
Для этого возьмём экспоненту от L1..Ln; Получим числа от [0;+oo] и нормируем их:
 
pi = exp(Li)/Sum(exp(Li))
 
Выполняется следующее: Li <= Lj => Pi <= Pj
 
  
Есть модель 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 \\
 
&-y_{i}\cdot y_{j},~~~~~~i \neq  j
 
\end{cases} = y_{i}\left ( I\left [ i = j \right ] - y_{j}\right )</tex>
 
 
===Свойства soft-arg-max===
 
*Вычисляет по вектору чисел вектор с распределением вероятностей.
 
*Можно интерпретировать как вероятность нахождения максимума в <tex>i</tex>-й координате.
 
*'''soft-arg-max'''<tex>\left ( x - c,y-c,z-c\right )=</tex> '''soft-arg-max'''<tex>\left ( x,y,z\right )</tex>
 
*Предыдущее свойство используют для устойчивости вычислений. При <tex>c=max\left ( x,y,z \right )</tex>
 
 
===Модификация soft-arg-max===
 
'''soft-arg-max'''<tex>_{t}\left(x\right)=\frac{\exp\left(\frac{x_{i}}{t}\right)}{\sum\exp\left(\frac{x_{j}}{t}\right)}</tex>
 
 
Данная модификация полезна, когда необходимо контролировать распределение вероятностей, получаемое '''soft-arg-max'''. Чем больше параметр <tex>t</tex>, тем больше получаемые вероятности будут похожи на равномерное распределение.
 
 
==Soft-Max==
 
===Плохой Soft-Max===
 
Зададим функцию '''soft-max''' таким образом:
 
 
'''soft-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>'''soft-arg-max'''<tex>\left . \left (x_{1},\ldots,x_{n} \right )  \right \rangle</tex>
 
 
Гладкая аппроксимация максимума. Математическое ожидание или средневзвешенное, где веса {{---}} экспоненты значений соответствующих элементов. Сохраняет некоторые свойства максимума:
 
 
*'''soft-max'''<tex>\left ( a,a,a\right ) = a</tex>
 
*'''soft-max'''<tex>\left ( x+a,y+a,z+a\right ) =</tex> '''soft-max'''<tex>\left ( x,y,z\right ) + a</tex>
 
 
Заданный выше '''soft-max''' {{---}} "плохой" в связи с тем, что мы считаем средневзвешенное значение, которое всегда будет меньше максимума, что приведёт к проблемам с поиском максимума.
 
 
===Хороший Soft-Max===
 
'''soft-max'''<tex>\left ( x_{1},\ldots,x_{n}\right ) = \log\left(\sum_{i}\exp\left(x_{i}\right)\right)</tex>
 
 
*Не сохраняет свойство '''soft-max'''<tex>\left(a,a,a\right)=a</tex>
 
*Производная равна '''soft-arg-max'''
 
 
В этом случае сохраняется монотонность, значит, не возникнет проблем с поиском минимума и максимума.
 
 
==Связь между вариациями Soft-Max==
 
Обозначим "плохой" '''soft-max''' как '''bad-soft-max'''. Тогда:
 
 
*'''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'''
 

Текущая версия на 19:44, 4 сентября 2022