Softmax: функция для получения вероятностного распределения чисел в глубоком обучении
Softmax - это функция активации, которая применяется в нейронных сетях для превращения необработанных числовых значений в вероятностное распределение. Она преобразует вектор с необработанными результатами прогнозирования в вектор вероятностей, сумма которых равна единице.
Формула для softmax выглядит следующим образом:
$\sigma(z_i) = \frac{e^{z_i}}{\sum_j e^{z_j}}$,
где $z_i$ - необработанный результат для $i$-го класса, а $\sigma(z_i)$ - это вероятность принадлежности элемента к классу $i$.
Для примера, представим, что у нас есть набор данных, состоящий из изображений цифр и нужно классифицировать их на 10 классов - цифры от 0 до 9. Нейронная сеть должна выдать необработанные результаты для каждого класса, подсчитав веса для каждого изображения. Например, для одного изображения нейронная сеть выдает следующие результаты для каждого класса:
$z = [4.56, 0.23, 2.49, 8.71, 1.72, -3.89, 2.10, 1.15, -2.62, 0.61]$
Чтобы преобразовать эти значения в вероятностное распределение, мы можем применить функцию softmax:
$\sigma(z) = [0.006, 0.002, 0.009, 0.242, 0.004, 0.000, 0.008, 0.004, 0.001, 0.002]$
Мы можем заметить, что все вероятности положительные и их сумма равна единице, что означает, что результат нейронной сети классифицирует данное изображение как цифру "3" с вероятностью 24,2%.
Пример кода на Python для реализации функции softmax:
python
import numpy as np
def softmax(z):
exp_z = np.exp(z - np.max(z))
softmax_vals = exp_z / exp_z.sum()
return softmax_vals
В этом примере мы сначала вычитаем максимальное значение из входного вектора, чтобы избежать возможного переполнения, а затем применяем формулу softmax, разделив экспоненту каждого элемента на сумму экспонент всех элементов вектора.