Autograd не может правильно вычислить нормальную производную CDF

Когда дело доходит до Autograd, я абсолютный новичок, поэтому мне кажется, что я делаю что-то совершенно очевидно не так. Однако я потратил целый день на борьбу с этим.

Я пытаюсь вычислить производную функции, которая включает обычный cdf. У меня не было успеха с Autograd, поэтому я разбил его на все более мелкие части, пока я не выделил источник ошибки как нормальный CDF. Вот минимальный рабочий пример:

import autograd.numpy as np
from autograd.misc.optimizers import adam, rmsprop, sgd
from autograd import grad
from autograd.scipy.stats import norm

def test_func(x,t):
    return norm.cdf(x)

grad_test = grad(test_func)

def callback(params, t, g):
    print(params, " Gradient: ", g, " Derivative: ", norm.pdf(params))

print(adam(grad_test, 0.0 ,num_iters = 10, step_size= 0.1, callback = callback))

Я знаю, что нет смысла оптимизировать CDF, я просто сделал это, чтобы получить результат обратного вызова, который ниже:

0.0  Gradient:  0.24197072451914337  Derivative:  0.398942280401
-0.09999999586726883  Gradient:  0.26608524890906193  Derivative:  0.396952547641
-0.20013469787000787  Gradient:  0.2897227684832687  Derivative:  0.391032156046
-0.30048876968878535  Gradient:  0.31236074851454854  Derivative:  0.38133185077
-0.40113882898768705  Gradient:  0.33345215596996947  Derivative:  0.368102181121
-0.5021500752550674  Gradient:  0.35244319911051986  Derivative:  0.351686233767
-0.6035729426432459  Gradient:  0.3687944858147128  Derivative:  0.332508890217
-0.7054397817605528  Gradient:  0.38200507149861374  Derivative:  0.311062576619
-0.8077615706004915  Gradient:  0.391638389745137  Derivative:  0.287889684926
-0.910524672771251  Gradient:  0.3973485394632615  Derivative:  0.263562137446

Градиенты, вычисленные Autograd, не соответствуют теоретической производной, представленной обычным PDF.

Я это неправильно реализую? Думаю, маловероятно, что в таком широко используемом пакете будет такая дыра. Как я могу использовать Autograd (или другие пакеты в Python), чтобы получить эффективные числовые производные функции, которая выводит скаляр.

Это было исправлено: См .: github.com/HIPS/autograd/issues/407

TotalFailure 26.06.2018 20:48
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
191
0

Другие вопросы по теме