논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

Caffe Tutorial 3. Forward / Backward

Forward and Backward

Forward pass와 backward pass는 Net의 기본적인 계산입니다.

passes

간단한 logistic regression 분류기를 생각해봅시다.

Forward pass는 주어진 입력에 대해 inference를 진행하기 위해서 출력을 계산합니다. Caffe의 forward 과정은 각층에 대해서 model에 의해 표현되는 "함수"를 계산하는 과정들로 이루어져 있습니다. 이 pass는 아래에서 위로 진행됩니다.

bottomup

데이터 $x$는 $g(x)$를 계산하기 위해서 내적 층(inner product layer)를 통과합니다. 다음 $h(g(x))$를 위해서 softmax를 통과합니다. 이제 softmax의 loss는 $f_W(x)$에 할당됩니다.

Backward는 learning 작업을 하기 위해 주어진 loss에 대한 그래디언트를 계산합니다. Caffe에서 backward는 각 층에서 전체 모델에 대한 그래디언트를 자동적으로 계산하는 과정으로 이루어져 있습니다. 이것이 back-propagation입니다. 이 pass는 위에서 아래로 진행됩니다.

topdown

Backward pass는 loss를 가지고 계산을 시작하며, 먼저 출력에 대한 그래디언트 $\frac{\partial f_W}{\partial h}$를 계산합니다. 나머지 model에 대한 그래디언트는 체인 룰를 통하여 층별로 따로 계산됩니다. INNER_PRODUCT 층처럼 파라미터를 가진 레이어는 backward 단계에서 각 파라미터에 대한 그래디언트 $\frac{\partial f_W}{\partial W_{ip}}$를 계산하게 됩니다.

이러한 계산들은 model을 정의하는 과정 이후 바로이어집니다. Caffe는 forward와 backward pass들을 계획하고 실행합니다.

  • The Net::Forward()Net::Backward() 메소드는 각 해당하는 pass를 계산합니다. 이 과정에서 Layer::Forward()Layer::Backward()가 각 단계에서 실행됩니다.
  • 각 층의 타입은 forward_{cpu,gpu}()backward_{cpu,gpu}() 메소드를 가지며 이들은 계산의 모드에 따라 계산을 수행합니다. Layer는 CPU나 GPU모드 중 하나만으로 구현되며, 이는 제한을 걸거나 편이성을 취하기 위함입니다.

Solver는 첫번째로 forward를 호출하여 출력과 loss를 계산하여 model의 최적화를 시작합니다. 다음 backward를 수행하여 model의 그래디언트를 생성합니다. 이어서 그래디언트를 이용하여 가중치를 갱신하여 loss를 최소화 하도록 시도합니다. 분리된 Solver, Net, Layer들은 Caffe의 모듈화와 개발 시 개방성을 유지시켜줍니다.

Caffe의 층 종류의 자세한 Forward, Backward 단계들은 layer catalogue 페이지를 참고하기 바랍니다.


Tags:
Add a Comment Trackback