Документация Engee

Интеграция с 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],)