Автоматичне диференціювання
Автоматичне диференціювання (англ. automatic differentiation, AD) в математиці та символьних обчисленнях — спосіб обчислити похідну для функції, яка задана алгоритмом.
AD використовує той факт, що довільна функція в комп'ютерній програмі все одно буде обчислюватись за допомогою арифметичних дій (+, -, *, /) та елементарних функцій стандартних бібліотек (exp, log, sin, cos, і т.д.). Застосовуючи ланцюгове правило, похідна довільного порядку може бути обчислена з заданою точністю, за кількість операцій, що пропорційна кількості операцій для обчислення самої функції.
Автоматичне диференціювання не є:
Символьне диференціювання не завжди ефективне, оскільки деякі функції важко представити єдиним виразом, а чисельне диференціювання призводить до внесення похибок округлення та дискретизації. Обидва ці методи не є зручними для обчислення похідних високих порядків, оскільки похибка і складність значно зростає. Також обидва ці методи є повільними при обчисленні часткових похідних для функції багатьох аргументів. Автоматичне диференціювання вирішує всі ці проблеми, але вводить додаткову програмну залежність.
Ланцюгове правило вперед і назад
Основою AD є розклад диференціалів використовуючи ланцюгове правило. Застосувавши його до складеної функції y = g(h(x)) = g(w) отримаємо:
- Рух вперед
Зафіксувавши незалежну змінну, і застосовуючи ланцюгове правило до проміжної функції, отримаємо:
- Рух назад
Застосовуючи ланцюгове правило до початкової функції по нововведеній змінній отримаємо:
Рух вперед і назад є крайніми випадками застосування ланцюгового правила. Задача ж обчислення повного Якобіана з мінімальною кількістю операцій є NP-повною.
Використання дуальних чисел
Застосовуючи рух вперед, помістимо поряд із кожним числом, що використовується для обчислення функії, ще одне, яке міститиме значення похідної. Буквально, замінимо дійсне число на конструкцію , де є дійсним числом, а є уявною одиницею, такою, що . Така конструкція називається дуальним числом.
Тоді для арифметичних операцій отримаємо:
Тобто, уявна частина знову буде містити значення похідної від виразу в дійсній частині.
Запишемо дуальні числа без уявної одиниці у вигляді впорядкованої пари і використаємо ланцюгове правило для функції двох аргументів :
де та є похідними по першому та другому аргументу відповідно.
Підставивши замість арифметичні операції та елементарні функції, отримаємо повний набір операцій над дуальними числами:
Реалізація
Реалізація автоматичного диференціювання можлива через:
- автоматичне перетворення вихідного коду,
- перевантаження функцій та операторів.
Джерела