46
правок
Изменения
Новая страница: «==SoftArgMax== ===Постановка задачи=== Пусть есть задача мягкой классификации: Алгоритм выдает з…»
==SoftArgMax==
===Постановка задачи===
Пусть есть задача мягкой классификации:
Алгоритм выдает значения <tex>L_{1}, L_{2},\ldots, L_{n}</tex>, где <tex>n</tex> {{---}} число классов.
<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>, тогда:
<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>
У <tex>\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}</tex> такое название, так как это, по сути, гладкая аппроксимация модифицированного <tex>\boldsymbol{\mathbf{arg{\text -}max}}</tex>.
===Свойства SoftArgMax===
*Вычисляет по вектору чисел вектор с распределением вероятностей
*Можно интерпретировать как вероятность нахождения максимума в <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>
===Модификация SoftArgMax===
<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>
Данная модификация полезна, когда необходимо контролировать распределение вероятностей, получаемое <tex>\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}</tex>. Чем больше параметр <tex>t</tex>, тем больше получаемые вероятности будут похожи на равномерное распределение.
==SoftMax==
===Плохой SoftMax===
[[File:BadSoftMax.png|200px|thumb|Плохой SoftMax (помечен красным)]]
[[File:GoodSoftMax.png|200px|thumb|Хороший SoftMax (помечен оранжевым)]]
Зададим функцию <tex>\boldsymbol{\mathbf{soft{\text -}max}}</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>
Гладкая аппроксимация максимума. Математическое ожидание или средневзвешенное, где веса {{---}} экспоненты значений соответствующих элементов. Сохраняет некоторые свойства максимума:
*<tex>\boldsymbol{\mathbf{soft{\text -}max}}\left ( a,a,a\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>
Заданный выше <tex>\boldsymbol{\mathbf{soft{\text -}max}}</tex> {{---}} «плохой» в связи с тем, что мы считаем средневзвешенное значение, которое всегда будет меньше максимума, что приведёт к проблемам с поиском максимума.
===Хороший SoftMax===
<tex>\boldsymbol{\mathbf{soft{\text -}max}}\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(a,a,a\right)=a</tex>
*Производная равна <tex>\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}</tex>
В этом случае сохраняется монотонность, значит, не возникнет проблем с поиском минимума и максимума.
==Связь между вариациями SoftMax==
Обозначим «плохой» <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. Автоматическое дифференцирование и нейронные сети С. Муравьёв
[[Категория: Машинное обучение]]
===Постановка задачи===
Пусть есть задача мягкой классификации:
Алгоритм выдает значения <tex>L_{1}, L_{2},\ldots, L_{n}</tex>, где <tex>n</tex> {{---}} число классов.
<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>, тогда:
<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>
У <tex>\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}</tex> такое название, так как это, по сути, гладкая аппроксимация модифицированного <tex>\boldsymbol{\mathbf{arg{\text -}max}}</tex>.
===Свойства SoftArgMax===
*Вычисляет по вектору чисел вектор с распределением вероятностей
*Можно интерпретировать как вероятность нахождения максимума в <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>
===Модификация SoftArgMax===
<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>
Данная модификация полезна, когда необходимо контролировать распределение вероятностей, получаемое <tex>\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}</tex>. Чем больше параметр <tex>t</tex>, тем больше получаемые вероятности будут похожи на равномерное распределение.
==SoftMax==
===Плохой SoftMax===
[[File:BadSoftMax.png|200px|thumb|Плохой SoftMax (помечен красным)]]
[[File:GoodSoftMax.png|200px|thumb|Хороший SoftMax (помечен оранжевым)]]
Зададим функцию <tex>\boldsymbol{\mathbf{soft{\text -}max}}</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>
Гладкая аппроксимация максимума. Математическое ожидание или средневзвешенное, где веса {{---}} экспоненты значений соответствующих элементов. Сохраняет некоторые свойства максимума:
*<tex>\boldsymbol{\mathbf{soft{\text -}max}}\left ( a,a,a\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>
Заданный выше <tex>\boldsymbol{\mathbf{soft{\text -}max}}</tex> {{---}} «плохой» в связи с тем, что мы считаем средневзвешенное значение, которое всегда будет меньше максимума, что приведёт к проблемам с поиском максимума.
===Хороший SoftMax===
<tex>\boldsymbol{\mathbf{soft{\text -}max}}\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(a,a,a\right)=a</tex>
*Производная равна <tex>\boldsymbol{\mathbf{soft{\text -}arg{\text -}max}}</tex>
В этом случае сохраняется монотонность, значит, не возникнет проблем с поиском минимума и максимума.
==Связь между вариациями SoftMax==
Обозначим «плохой» <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. Автоматическое дифференцирование и нейронные сети С. Муравьёв
[[Категория: Машинное обучение]]