|
|
(не показано 37 промежуточных версий 3 участников) |
Строка 1: |
Строка 1: |
− | ==Soft-Arg-Max==
| |
− | ===Постановка задачи===
| |
− | Пусть есть задача мягкой классификации:
| |
| | | |
− | Алгоритм выдает значения <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 =</tex> '''soft-arg-max'''<tex>\left ( L \right )</tex>
| |
− |
| |
− | Пусть <tex>y = </tex> '''soft-arg-max'''<tex>\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>
| |
− |
| |
− | ===Свойства 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'''
| |