В настоящее время я пытаюсь реализовать алгоритм машинного обучения, который включает функцию логистических потерь. в МАТЛАБ. К сожалению, у меня возникли проблемы из-за числового переполнения.
В общем, для заданного входа s
значение логистической функции равно:
log(1 + exp(s))
а наклон функции логистических потерь:
exp(s)./(1 + exp(s)) = 1./(1 + exp(-s))
В моем алгоритме значение s = X*beta
. Здесь X
— это матрица с N
точками данных и P
функциями на точку данных (т. е. size(X)=[N,P]
), а beta
— это вектор из P
коэффициентов для каждой функции, таких что size(beta)=[P 1]
.
Меня особенно интересует вычисление среднего значения и градиента логистической функции для заданного значения beta
.
Среднее значение логистической функции по отношению к значению beta
равно:
L = 1/N * sum(log(1+exp(X*beta)),1)
Среднее значение наклона логистической функции относительно к значению b
равно:
dL = 1/N * sum((exp(X*beta)./(1+exp(X*beta))' X, 1)'
Обратите внимание, что size(dL) = [P 1].
Моя проблема в том, что эти выражения продолжают создавать числовые переполнения. Проблема фактически возникает из-за того, что exp(s)=Inf
когда s>1000
и exp(s)=0
когда s<-1000.
Я ищу решение, при котором s
может принимать любое значение в арифметике с плавающей запятой. В идеале я также был бы очень признателен за решение, которое позволяет мне оценивать значение и градиент векторизованным/эффективным способом.