Функция софтмакс

алгоритм

В процессе распознавания рукописных цифр мы упомянули, что слой Softmax превращает вывод нейронной сети в вероятностное распределение. Основная используемая здесь функция Softmax.

Сначала мы должны ответить на вопрос, зачем превращать строку чисел в распределение вероятностей?

Начнем с вопроса выбора. Предположим, мы хотим случайным образом выбрать индивидуума из 3 индивидуумов, но они имеют веса 1, 4 и 13, и мы хотим, чтобы индивидуума с более высоким весом было легче выбрать. Это,Вероятность быть выбранным пропорциональна доле индивидуума в популяции..

Учащиеся, знакомые с генетическими алгоритмами, могут сразу подумать, что генетический алгоритм, используемый в индивидуальном отборе,Алгоритм выбора рулеткиможно использовать в этой сцене. Его описание выглядит следующим образом:

На самом деле это довольно просто, сложите всех индивидуумов и рассчитайте долю каждого индивидуума в общей сумме. Сумма этих пропорций равна 1, тогда можно сделать случайный выбор на основе интервала.

Взяв приведенный выше пример в качестве примера, общее количество трех человек равно 1 + 4 + 13 = 18, поэтому пропорции таковы:

физическое лицо Доля Суммарный коэффициент
1 1 / 18 = 0.06 0.06
4 4 / 18 = 0.22 0.06 + 0.22 = 0.28
13 13 / 18 = 0.72 0.28 + 0.72 = 1

В это время случайным образом генерируется число от 0 до 1. Если оно попадает в пределы [0, 0,06), выбирается первая особь, если попадает в пределы [0,06, 0,28), выбирается вторая особь, если попадает в пределы [0,06, 0,28) выбирается вторая особь; [0,28, 1) выбирается третья особь.

Легко понимать, что в алгоритме рулетки индивидуальная ценность не может быть отрицательной, что требует от нас заранее обработать индивидуальную ценность. Предполагая, что наше первоначальное значение содержит отрицательные числа, его необходимо преобразовать в положительные числа перед воспроизведением рулетки.

Написание алгоритма рулетки в более понятной форме будет выглядеть так:

Наше исходное значение x может содержать как положительные, так и отрицательные числа, но с помощью обработки функции f оба могут быть преобразованы в положительные числа. Как вы могли догадаться, f здесь точно такое:

f(x) = e^x

В совокупности мы получаем нашу функцию Softmax:

Предполагая, что наши исходные значения равны -1, 0, 3, 5, то после обработки Softmax мы можем получить:

\sum_{j=1}^N f(x_j) = e^{-1} + e^0 + e^3 + e^5= 169.87

x молекулярныйe^x Доля
-1 0.368 0.002
0 1 0.006
3 20.09 0.118
5 148.41 0.874

В Python это очень легко сделать с помощью Numpy:

import numpy as np

def softmax(xs):
    return np.exp(xs) / sum(np.exp(xs))

xs = np.array([-1, 0, 3, 5])
print(softmax(xs)) # [0.0021657, 0.00588697, 0.11824302, 0.87370431]

Конечно, на самом деле мы используем функцию Softmax в нейросети не для выбора, но суть в том,выразить вероятность, если наша нейросеть выдает -1 и 2 для кошачьего или собачьего соответственно, то мы можем сказать, что 95,3% похожи на собаку. Это то, что делает функция Softmax.

x e^x вероятность
-1 0.368 0.047
2 7.39 0.953

Ссылаться на