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

Материал из Викиконспекты
Перейти к: навигация, поиск
(Soft-Arg-Max)
(Soft-Arg-Max)
(не показано 46 промежуточных версий 2 участников)
Строка 1: Строка 1:
Soft-Max и Soft-Arg-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))
+
Алгоритм выдает значения <tex>L_{1}, L_{2},\ldots, L_{n}</tex>, где <tex>n</tex> {{---}} число классов.
Выполняется следующее: Li <= Lj => Pi <= Pj
+
 
 +
<tex>L_{i}</tex> {{---}} уверенность алгоритма в том, что объект принадлежит классу <tex>i</tex>, <tex>L_{i} \in \left [ -\infty, +\infty\right ]</tex>
 +
 +
Для этих значений необходимо найти такие <tex>p_{1},\ldots,p_{n}</tex>, что:
 +
 
 +
*<tex>p_{i} \in \left [ 0, 1\right ]</tex>
 +
*<tex>\sum_{i}p_{i}=1</tex>
 +
То есть <tex>p_{1},\ldots,p_{n}</tex> {{---}} распределение вероятностей
 +
 
 +
Для этого выполним преобразование:
 +
 
 +
<tex>p_{i} = \frac{\exp\left(L_{i}\right)}{\sum_{i}\exp\left(L_{i}\right)}</tex>
 +
 
 +
Тогда выполняется следующее:
 +
 
 +
*<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 =\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}\left ( L \right )</tex>
 +
 
 +
Пусть <tex>y = \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}
 
<tex>\frac{\partial y_{i}}{\partial x_{j}} = \begin{cases}
 
  &y_{i}\left ( 1 - y_{j} \right ),~i = j \\  
 
  &y_{i}\left ( 1 - y_{j} \right ),~i = j \\  
Строка 14: Строка 30:
 
\end{cases} = y_{i}\left ( I\left [ i = j \right ] - y_{j}\right )</tex>
 
\end{cases} = y_{i}\left ( I\left [ i = j \right ] - y_{j}\right )</tex>
  
===Свойства soft-arg-max===
+
У <tex>\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}</tex> такое название, так как это, по сути, гладкая аппроксимация модифицированного <tex>\boldsymbol{\mathbf{arg{\text -}max}}</tex>.
*Вычисляет по вектору чисел вектор с распределением вероятностей.
+
 
*Можно интерпретировать как вероятность нахождения максимума в <tex>i</tex>-й координате.
+
===Свойства Soft-Arg-Max===
*'''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>
+
*Можно интерпретировать как вероятность нахождения максимума в <tex>i</tex>-й координате
 +
*<tex>\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}\left ( x - c,y-c,z-c\right )=\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}\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===
+
Данная модификация полезна, когда необходимо контролировать распределение вероятностей, получаемое <tex>\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}</tex>. Чем больше параметр <tex>t</tex>, тем больше получаемые вероятности будут похожи на равномерное распределение.
'''soft-arg-max'''<tex>_{t}\left(x\right)=\frac{\exp\left(x_{i}\right)}{\sum\exp\left(\frac{x_{j}}{t}\right)}</tex>
 
  
 
==Soft-Max==
 
==Soft-Max==
 
===Плохой Soft-Max===
 
===Плохой 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> таким образом:
  
'''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>
+
<tex>\boldsymbol{\mathbf{soft{\text -}max}}\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 .\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}\left . \left (x_{1},\ldots,x_{n} \right )  \right \rangle</tex>
  
 
Гладкая аппроксимация максимума. Математическое ожидание или средневзвешенное, где веса {{---}} экспоненты значений соответствующих элементов. Сохраняет некоторые свойства максимума:
 
Гладкая аппроксимация максимума. Математическое ожидание или средневзвешенное, где веса {{---}} экспоненты значений соответствующих элементов. Сохраняет некоторые свойства максимума:
  
*'''soft-max'''<tex>\left ( a,a,a\right ) = a</tex>
+
*<tex>\boldsymbol{\mathbf{soft{\text -}max}}\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>
+
*<tex>\boldsymbol{\mathbf{soft{\text -}max}}\left ( x+a,y+a,z+a\right ) =\boldsymbol{\mathbf{soft{\text -}max}}\left ( x,y,z\right ) + a</tex>
  
Заданный выше '''soft-max''' {{---}} "плохой" в связи с тем, что мы считаем средневзвешенное значение, которое всегда будет меньше максимума, что приведёт к проблемам с поиском максимума.
+
Заданный выше <tex>\boldsymbol{\mathbf{soft{\text -}max}}</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>
+
<tex>\boldsymbol{\mathbf{soft{\text -}max}}\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>
+
*Не сохраняется свойство <tex>\boldsymbol{\mathbf{soft{\text -}max}}\left(a,a,a\right)=a</tex>
*Производная равна '''soft-arg-max'''
+
*Производная равна <tex>\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}</tex>
  
 
В этом случае сохраняется монотонность, значит, не возникнет проблем с поиском минимума и максимума.
 
В этом случае сохраняется монотонность, значит, не возникнет проблем с поиском минимума и максимума.
  
 
==Связь между вариациями Soft-Max==
 
==Связь между вариациями Soft-Max==
Обозначим "плохой" '''soft-max''' как '''bad-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'''
 

Версия 19:57, 1 июля 2022

Soft-Arg-Max

Постановка задачи

Пусть есть задача мягкой классификации:

Алгоритм выдает значения [math]L_{1}, L_{2},\ldots, L_{n}[/math], где [math]n[/math] — число классов.

[math]L_{i}[/math] — уверенность алгоритма в том, что объект принадлежит классу [math]i[/math], [math]L_{i} \in \left [ -\infty, +\infty\right ][/math]

Для этих значений необходимо найти такие [math]p_{1},\ldots,p_{n}[/math], что:

  • [math]p_{i} \in \left [ 0, 1\right ][/math]
  • [math]\sum_{i}p_{i}=1[/math]

То есть [math]p_{1},\ldots,p_{n}[/math] — распределение вероятностей

Для этого выполним преобразование:

[math]p_{i} = \frac{\exp\left(L_{i}\right)}{\sum_{i}\exp\left(L_{i}\right)}[/math]

Тогда выполняется следующее:

  • [math]L_{i} \leqslant L_{j} \implies p_{i} \leqslant p_{j}[/math]
  • Модель [math]a[/math], возвращающая [math]L_{i}[/math], после преобразования будет возвращать [math]p_{i}[/math] и останется дифференцируемой
  • [math]p =\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}\left ( L \right )[/math]

Пусть [math]y = \boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}\left ( x \right )[/math], тогда:

[math]\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 )[/math]

У [math]\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}[/math] такое название, так как это, по сути, гладкая аппроксимация модифицированного [math]\boldsymbol{\mathbf{arg{\text -}max}}[/math].

Свойства Soft-Arg-Max

  • Вычисляет по вектору чисел вектор с распределением вероятностей
  • Можно интерпретировать как вероятность нахождения максимума в [math]i[/math]-й координате
  • [math]\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}\left ( x - c,y-c,z-c\right )=\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}\left ( x,y,z\right )[/math]
  • Предыдущее свойство используют для устойчивости вычислений при [math]c=max\left ( x,y,z \right )[/math]

Модификация Soft-Arg-Max

[math]\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)}[/math]

Данная модификация полезна, когда необходимо контролировать распределение вероятностей, получаемое [math]\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}[/math]. Чем больше параметр [math]t[/math], тем больше получаемые вероятности будут похожи на равномерное распределение.

Soft-Max

Плохой Soft-Max

рис.1 Плохой Soft-Max (помечен красным)
рис.2 Хороший Soft-Max (помечен оранжевым)

Зададим функцию [math]\boldsymbol{\mathbf{soft{\text -}max}}[/math] таким образом:

[math]\boldsymbol{\mathbf{soft{\text -}max}}\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 .\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}\left . \left (x_{1},\ldots,x_{n} \right ) \right \rangle[/math]

Гладкая аппроксимация максимума. Математическое ожидание или средневзвешенное, где веса — экспоненты значений соответствующих элементов. Сохраняет некоторые свойства максимума:

  • [math]\boldsymbol{\mathbf{soft{\text -}max}}\left ( a,a,a\right ) = a[/math]
  • [math]\boldsymbol{\mathbf{soft{\text -}max}}\left ( x+a,y+a,z+a\right ) =\boldsymbol{\mathbf{soft{\text -}max}}\left ( x,y,z\right ) + a[/math]

Заданный выше [math]\boldsymbol{\mathbf{soft{\text -}max}}[/math] — "плохой" в связи с тем, что мы считаем средневзвешенное значение, которое всегда будет меньше максимума, что приведёт к проблемам с поиском максимума.

Хороший Soft-Max

[math]\boldsymbol{\mathbf{soft{\text -}max}}\left ( x_{1},\ldots,x_{n}\right ) = \log\left(\sum_{i}\exp\left(x_{i}\right)\right)[/math]

  • Не сохраняется свойство [math]\boldsymbol{\mathbf{soft{\text -}max}}\left(a,a,a\right)=a[/math]
  • Производная равна [math]\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}[/math]

В этом случае сохраняется монотонность, значит, не возникнет проблем с поиском минимума и максимума.

Связь между вариациями Soft-Max

Обозначим "плохой" [math]\boldsymbol{\mathbf{soft{\text -}max}}[/math] как [math]\boldsymbol{\mathbf{bad{\text -}soft{\text -}max}}[/math]. Тогда:

  • [math]\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[/math]
  • [math]\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)[/math]
  • [math]\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)[/math]

Примечания

  • В большинстве статей пишется [math]\boldsymbol{\mathbf{soft{\text -}max}}[/math], хотя вместо этого подразумевается [math]\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}[/math]
  • [math]\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}[/math] можно называть также как обобщённая (многомерная) сигмоида
  • [math]\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}[/math] является алгоритмом подсчёта весов для [math]\boldsymbol{\mathbf{soft{\text -}max}}[/math]

Источники

  1. Лекция 7. Байесовские методы А. Забашта
  2. Лекция 7. Автоматическое дифференцирование и нейронные сети С. Муравьёв