В процессе распознавания рукописных цифр мы упомянули, что слой 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 здесь точно такое:
В совокупности мы получаем нашу функцию Softmax:
Предполагая, что наши исходные значения равны -1, 0, 3, 5, то после обработки Softmax мы можем получить:
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 | вероятность | |
---|---|---|
-1 | 0.368 | 0.047 |
2 | 7.39 | 0.953 |