Тут використовується автоматична диференціація. Там, де він використовується ланцюговим правилом, і введіть слово в графі, що призначає градієнти
Скажімо, у нас є тензор C Цей тензор C зробив після ряду операцій. Скажімо, додаючи, множимо, переглядаючи деяку нелінійність тощо
Отже, якщо цей C залежить від деякого набору тензорів, який називається Xk, нам потрібно отримати градієнти
Tensorflow завжди відстежує шлях операцій. Я маю на увазі послідовну поведінку вузлів і те, як між ними протікають дані. Це робиться за графіком
Якщо нам потрібно отримати деривативи входів витрат wrt X, то це спочатку буде це завантаження шляху від x-input до вартості шляхом розширення графіка.
Потім він починається в порядку річок. Потім розподіліть градієнти за допомогою ланцюгового правила. (Те саме, що і розмноження)
У будь-якому випадку, якщо ви читаєте вихідні коди, що належать до tf.gradients (), ви можете виявити, що tensorflow зробив цю частину розподілу градієнта чудово.
Під час зворотного відстеження tf взаємодіє з графіком, у проході зворотного слова TF зустрінеться з різними вузлами. Всередині цих вузлів є операції, які ми називаємо (ops) matmal, softmax, relu, batch_normalization тощо графік
Цей новий вузол складається з часткової похідної операцій. get_gradient ()
Поговоримо трохи про ці щойно додані вузли
Всередині цих вузлів ми додаємо 2 речі 1. Похідне ми обчислили ealier) 2.Также вхідні дані для corpspoding opp в передньому проході
Тож за ланцюговим правилом ми можемо розрахувати
Тож це так само, як API-слово для зворотних слів
Тож тензорфлоу завжди думає про порядок графіка, щоб зробити автоматичну диференціацію
Отже, як ми знаємо, нам потрібні передні змінні для обчислення градієнтів, тоді нам потрібно зберігати проміжні значення також у тензорах, це може зменшити пам'ять. Для багатьох операцій TF знає, як обчислити градієнти та розподілити їх.