Из класса Udacity глубокого обучения softmax of y_i является просто экспонентой, деленной на сумму экспоненты всего Y-вектора:
Где S(y_i)
- функция softmax от y_i
, а e
- экспоненциальная, а j
- нет. столбцов входного вектора Y.
Я пробовал следующее:
import numpy as np
def softmax(x):
"""Compute softmax values for each sets of scores in x."""
e_x = np.exp(x - np.max(x))
return e_x / e_x.sum()
scores = [3.0, 1.0, 0.2]
print(softmax(scores))
который возвращает:
[ 0.8360188 0.11314284 0.05083836]
Но предлагаемое решение было:
def softmax(x):
"""Compute softmax values for each sets of scores in x."""
return np.exp(x) / np.sum(np.exp(x), axis=0)
который создает тот же результат, что и первая реализация, хотя первая реализация явно принимает разницу в каждом столбце и max, а затем делит на сумму.
Может ли кто-нибудь математически показать почему? Правильно ли, а другое неправильно?
Являются ли реализация аналогичной с точки зрения сложности кода и времени? Что более эффективно?