Привет, сообщество Stackoverflow!
Я задаюсь вопросом о простой идее сокращения требований к памяти, связанной с конкретной проблемой обучения нейронных сетей feedfoward (В связи с другим моим вопросом: Градиенты вычисления OOM дляглубокая нейронная сеть. ).
Предположим, у меня есть график, определенный с помощью тензорного потока, реализующий вычисления для мультиперцептрона и функции потерь.После инициализации переменных и т. Д. Я вычисляю прямой проход, вводя входные данные в этот график, таким образом получая некоторое выходное значение.Я храню выходное значение в списке.После этого я делаю еще один проход вперед, используя предыдущий вывод в качестве нового ввода, и снова сохраняю новое значение вывода.Я могу повторить эту процедуру несколько раз и реализовать своего рода прямой проход через глубокую нейронную сеть.Я бы назвал такое повторение step k .Я делаю общий K таких шагов.
Изображение распространение между шагами переводит эту идею в перспективу для двух последних вычисленных шагов.
Теперь моя цель - вычислить обратный проход ошибки черезвсе эти шаги.
Предполагается, что рассчитанные градиенты сохраняются для каждого шага, но не применяются напрямую.
Я могу использовать сохраненные значения для пересчета активаций для каждого шага.
На последнем шаге можно получить градиенты непосредственно из определенной функции потерь с помощью операции train_op.compute_gradients (убыток) с использованием определенной пользователем цели для шага K и последнего выводазначение сохранено для шаг K-1 .
Теперь я надеялся, что смогу просто использовать что-то вроде tf.gradients (loss, [input_vars]) для вычисленияградиент по входу.Я мог бы добавить этот градиент к выходному значению step K-1 и использовать эту сумму в качестве целевого значения для оценки функции потерь для step K-1 , снова используя выход шаг K-2 в качестве входного значения.
Другими словами: градиент потерь Fct относительно входа дает информацию о том, как должен измениться выход на предыдущем шаге.
Эта идея каким-то образом реализована или уже существуют методы для такого обратного распространения через промежуточные значения между отключенными вычислительными графами?
Или это то, что я спрашиваю / пишу полную чушь?(Для меня это довольно сложно выразить словами ...)
Спасибо за потраченное время!