자동 차별화를 사용합니다. 그래디언트를 할당하는 그래프에서 체인 규칙을 사용하고 백 워드를 사용하는 위치.
우리가 텐서 C를 가지고 있다고 가정 해 봅시다.이 텐서 C는 일련의 연산 후에 만들어졌습니다.
따라서이 C가 Xk라는 텐서 세트에 의존하는 경우 그라디언트를 가져와야합니다.
Tensorflow는 항상 작업 경로를 추적합니다. 노드의 순차적 동작과 노드 간 데이터 흐름 방법을 의미합니다. 그것은 그래프에 의해 이루어집니다
우리가 비용 wrt X 입력의 파생물을 얻을 필요가 있다면 이것이 먼저 할 일은 그래프를 확장하여 x 입력에서 비용으로 경로를로드하는 것입니다.
그런 다음 강 순서로 시작합니다. 그런 다음 체인 규칙으로 그라디언트를 배포하십시오. (역전 파와 동일)
어떤 방식 으로든 소스 코드가 tf.gradients ()에 속하면 tensorflow가이 그라디언트 분포 부분을 훌륭하게 수행 한 것을 알 수 있습니다.
백 트래킹 tf가 graph와 상호 작용하는 동안 백 워드 패스에서 TF는 다른 노드를 만날 것입니다이 노드 안에 우리는 (op) matmal, softmax, relu, batch_normalization 등의 작업이 있습니다. 그래프
이 새로운 노드는 부분적으로 파생 된 작업을 구성합니다. get_gradient ()
새로 추가 된 노드에 대해 조금 이야기 해 봅시다
이 노드들 내에서 우리는 2 가지를 더합니다. 1. 미분을 계산했습니다.
체인 규칙에 따라
이것은 백 워드 API와 동일합니다.
따라서 tensorflow는 자동 차별화를 수행하기 위해 항상 그래프 순서를 생각합니다.
그래디언트를 계산하기 위해 순방향 변수가 필요하다는 것을 알기 때문에 텐서에도 불합리한 값을 저장해야합니다. 이는 메모리를 줄일 수 있습니다.