Автоматичне диференціювання

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Автоматичне диференціювання (англ. automatic differentiation, AD) в математиці та символьних обчисленнях — спосіб обчислити похідну для функції, яка задана алгоритмом.

AD використовує той факт, що довільна функція в комп'ютерній програмі все одно буде обчислюватись за допомогою арифметичних дій (+, -, *, /) та елементарних функцій стандартних бібліотек (exp, log, sin, cos, і т.д.). Застосовуючи ланцюгове правило, похідна довільного порядку може бути обчислена з заданою точністю, за кількість операцій, що пропорційна кількості операцій для обчислення самої функції.

Автоматичне диференціювання не є:

Символьне диференціювання не завжди ефективне, оскільки деякі функції важко представити єдиним виразом, а чисельне диференціювання призводить до внесення похибок округлення та дискретизації. Обидва ці методи не є зручними для обчислення похідних високих порядків, оскільки похибка і складність значно зростає. Також обидва ці методи є повільними при обчисленні часткових похідних для функції багатьох аргументів. Автоматичне диференціювання вирішує всі ці проблеми, але вводить додаткову програмну залежність.

Ланцюгове правило вперед і назад[ред. | ред. код]

Основою AD є розклад диференціалів використовуючи ланцюгове правило. Застосувавши його до складеної функції y = g(h(x)) = g(w) отримаємо:

Рух вперед

Зафіксувавши незалежну змінну, і застосовуючи ланцюгове правило до проміжної функції, отримаємо:

Рух назад

Застосовуючи ланцюгове правило до початкової функції по нововведеній змінній отримаємо:

Рух вперед і назад є крайніми випадками застосування ланцюгового правила. Задача ж обчислення повного Якобіана з мінімальною кількістю операцій є NP-повною.

Використання дуальних чисел[ред. | ред. код]

Застосовуючи рух вперед, помістимо поряд із кожним числом, що використовується для обчислення функії, ще одне, яке міститиме значення похідної. Буквально, замінимо дійсне число на конструкцію , де є дійсним числом, а є уявною одиницею, такою, що . Така конструкція називається дуальним числом.

Тоді для арифметичних операцій отримаємо:

Тобто, уявна частина знову буде містити значення похідної від виразу в дійсній частині.

Запишемо дуальні числа без уявної одиниці у вигляді впорядкованої пари і використаємо ланцюгове правило для функції двох аргументів :

де та є похідними по першому та другому аргументу відповідно.

Підставивши замість арифметичні операції та елементарні функції, отримаємо повний набір операцій над дуальними числами:

Реалізація[ред. | ред. код]

Реалізація автоматичного диференціювання можлива через:

Джерела[ред. | ред. код]