Интеграция с ChainRulesCore
Взаимодействие инфраструктуры WeightedIndex
с библиотеками автоматического дифференцирования сопряжено с проблемами. Для упрощения автоматического дифференцирования предусмотрена интеграция с ChainRulesCore. Определено пользовательское правило rrule такое, что
y, itp_pullback = rrule(itp, 1)
itp_pullback
принимает возмущение в y
и возвращает значение, указывающее, как оно влияет на каждое измерение x
. Так как в Interpolations
уже есть функция gradient
, pullback
использует ее с масштабированием на Δy
.
Это обеспечивает интеграцию с такими библиотеками автоматического дифференцирования, как Zygote, делая возможным
x = 1:10
y = sin.(x)
itp = interpolate(y,BSpline(Linear()))
Zygote.gradient(itp, 2)
#([-0.7681774187658145],)