본문 바로가기

dev_AI_framework

역전파 사고 흐름 정리

 

  • 역전파는 **계산 그래프의 루트 노드 (비용 함수 output)**에서 시작된다.
  • 해당 값은 최종 loss 값이며, ∂L/∂L = 1 이므로 upstream_gradient = 1.0으로 시작된다.
  • 역전파는 노드들의 연산자 종류에 따라 각 노드의 입력값과 가중치에 대해 미분 값을 계산한다.
  • 대부분의 노드는 가중치를 가지지 않기 때문에, grad_weight_total = 0.0 그대로 유지된다.
  • 오직 입력값과 가중치의 곱(예: multiply)이 있는 노드들만 grad_weight가 실제로 의미 있게 존재하고, 학습 가능한 파라미터로 작용한다.

 

대부분의 노드들은 학습 대상이 아닌 단지 gradient 전달자, 

역전파는 계산 그래프 전체를 따라 체이닝된 연쇄 미분법을 수행하지만, 학습 대상이 되는 건 multiply 연산자 등 파라미터가 있는 노드들 뿐

 

다시,

모든 노드에서 grad_input ( 입력값 변화에 대한 비용 함수 변화량 ) 은 자식 노드에게 전달되지만

grad_weight 는 Node 의 operation 이 실제로 가중치를 사용하는 연산일 때만 의미 있음

 

아이디어

각 노드 별 grad_input 이 update 되는 것, 이러한 계산 그래프의 자식을 탐방하고 방문, 연산자 종류에 따라 연산을 수행, 이러한 과정들이 n 차원 공간을 탐색하는, 번거롭고 복잡한 과정이라고 생각됨, 

복잡한 형태의 계산 그래프를 행렬로 바꿔 표현할 수 있을 거라 생각됨, 

또한 update 되는 grad 값이 오히려 컴퓨터 연산에서 얻을 수 있는 이득이 있을 것, 다른 값을 가지는 grad 값의 위치를 새로 탐색하는 것이 아닌, update 되는, 고정되어 있는 자리에 있는 데이터를 그대로 사용하여 메모리 이동 비용 절약 가능하지 않을까