Всякий раз, когда мы сталкиваемся с проблемой классификации в нейронных сетях, мы всегда видим, что слово «Softmax» уже на подходе. Все мы знали, что это функция активации, но что на самом деле скрывается за экраном? Давайте послушаем историю Softmax ...

Перед этим давайте разберемся, зачем нам такая функция. Если нам нужно получить ответ типа «Да» / «Нет» или нужно предсказать вероятность возникновения события, у нас есть ступенчатая функция и сигмовидная функция. Если вы не знаете о них, прокомментируйте, я тоже напишу о них.

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

  1. Собака: P (Собака) = 0,67
  2. Кот: P (Кот) = 0,24
  3. Лев: P (Лев) = 0,09

Обратите внимание, что вероятности должны быть добавлены к 1, то есть сумма (P (все классы)) = 1, и представьте, что у нас есть линейная модель, которая предсказывает этих трех животных с набором функций, таких как зубы, хвост, цвет, клыки, волосы и т. Д. . Мы можем вычислить линейные функции на основе характеристик и предположить, что у нас есть эти оценки,

  1. Собака получает оценку 2
  2. Кошка получает оценку 1
  3. Лев получить оценку 0

Примечание: если наша линейная граница представлена ​​как y = b + w1x1 + w2x2 + …… wnxn + b. Оценка является результатом замены b, w и x. (координаты точек данных)

Теперь вопрос в том, как мы можем превратить эти оценки в вероятности?

Помните, что нам нужно выполнить два условия,

  1. Вероятности должны быть в сумме до 1
  2. Поскольку у собаки самый высокий балл, чем у кошки и льва, у нее должна быть более высокая вероятность, и то же самое.

Все мы думаем о простом способе Оценка (x) / Сумма (Все оценки), но мы можем столкнуться с проблемой. Что делать, если у животного отрицательная оценка? вероятность не может быть отрицательной. И вторая проблема заключается в том, что, если Sum (All Scores) = 0, поскольку мы можем получить отрицательные оценки в наших линейных моделях, это возможно, и все мы знаем, что нельзя разделить число на 0.

Так какое же решение? Есть ли функция, которая может превращать отрицательные значения в положительные?

Абсолютно да!, Мы все знаем, что экспонента любого значения приведет к положительным значениям. Итак, вместо Score (x) / Sum (All Scores) давайте попробуем, exp (x) / Sum (exp (All Scores)) теперь выходы:

  1. P (Собака) = ехр (2) / (ехр (2) + ехр (1) + ехр (0)) = 0,67
  2. P (Кат) = ехр (1) / (ехр (2) + ехр (1) + ехр (0)) = 0,24
  3. P (Собака) = ехр (0) / (ехр (2) + ехр (1) + ехр (0)) = 0,09

Ура !!!, мы раскрыли секрет так называемой функции Softmax. И обратите внимание, поскольку экспоненциальные значения всегда увеличиваются, у нас более высокая вероятность для Dog, чем для других двух классов, а также более высокая вероятность для Cat, чем для льва, как мы и ожидали.

import numpy as np
L = [5,6,7]
def softmax(L):
    expL = np.exp(L)
    sumExpL = sum(expL)
    result = []
    for i in expL:
        result.append(i*1.0/sumExpL)
    return result
print(softmax(L)

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