Skip to content

Caffe Tutorial : 2.Forward and Backward (kor)

HanJiHoon edited this page Jan 24, 2017 · 3 revisions

정방향과 역방향 (Forward and Backward)

정방향과 역방향 과정들은 망의 필수적인 연산이다.

Simple Logistic Regression classifier을 한번 고려해보자. 정방향과정은 추론에 대한 입력을 받은 출력을 계산한다. 정방향에서 Caffe는 모델에 의하여 표현되는 "함수"를 계산하여 각각의 계층의 연산을 구성한다. 이런 과정은 bottom부터 top으로 간다.
데이터 x는 g(x)에 대한 내부 생산 계층(inner production layer)을 통해 지나간 뒤에, fw(x)를 넘겨주는 소프트맥스 손실과h(g(x))에 대한 소프트 맥스를 거쳐간다.

역방향과정은 학습에 대한 손실로 주어진 그래디언트를 계산한다. 역방향에서 Caffe는 자동 차별화에 의해 전체 모델의 그래디언트를 계산하여 각각 계층의 그래디언트를 역으로가는 과정을 구성한다. 이것을 Back-Propagation이라 한다. 이 과정은 top에서 bottom으로 흘러간다.

역방향과정은 손실로 시작해서 출력 ∂fW/∂h에 대하여 그래디언트를 계산한다. 모델의 잉여부분에 대한 그래디언트는 연쇄법칙 (The Chain Rule) 을 통하여 계층간 계층을 계산한다. 내부 생산 계층같은 파라미터를 가진 계층은 역방향 단계동안 이들의 파라미터 ∂fW/∂Wip에 대하여 그래디언트를 계산한다.
이러한 연산들은 모델을 정의하면서 즉시 동시에 정의된다. : Caffe는 당신을 위해 정방향과 역방향과정들을 계획하고 수행한다.

  • Layer::Forward()와 Layer::Backward()가 매 단계마다 연산를 하면서, Net::Forward()와 Net::Backward() 메소드는 각각의 과정을 수행한다.
  • 모든 계층 타입은 연산의 모드에 따라서 각 단계를 연산해주는 forward_{cpu,gpu}()와 backward_{cpu,gpu}() 메소드를 가진다. 계층은 아마 제한이나 편의성 때문에 CPU와 GPU에서만 수행할지모른다.

해결사는 결과와 손실을 산출하는 정방향을 처음에 호출하고, 다음에는 모델의 그래디언트를 만드는 역방향을 호출하고, 손실을 최소화하는 시도를 하는 가중치 업데이트로 그래디언트를 포함시키는 과정을 통하여 모델을 최적화한다. 해결사와 망, 그리고 계층 사이의 노동분담은 Caffe 모듈식을 유지해주고 개발의 개방성을 유지해주고 있다.
Caffe의 계층 타입의 정방향과 역방향 과정의 자세한 사항에 대하여 계층 목록에 대하여 언급해보자.

Clone this wiki locally