페이지

2022년 8월 17일 수요일

13.1 가변 길이 인수에 대응한 Add클래스의 역전파

 역전파를 구현하기에 앞서 [그림 13-1]의 덧셈 계산 그래프를 살펴봅시다.



[그림 13-1]에서 덧셈의 순전파는 입력이 2개, 출력이 1개입니다. 역전파는 그 반대가 되어 입력이 1개, 출력이 2개입니다. 수식으로 확인하면 y = x0 + x1일때 미분하면 dy/dx0 = 1, dy/dx1 = 1이 구해집니다.

y = x0 + x1계산(함수)와 입력 변수는 2개입니다. 이처럼 압력 변수가 여러 개인 함수를 다변수 함수라고 합니다. 다변수 함수에서 하나의 입력 변수에만 주목하여(다른 변수는 상수로 취급) 미분하는 것을 편미분이라고 합니다. 편미분에서는 미분 기호로 를 사용합니다. 예를 들어 dy/dx0  는 x0 이외의 변수를 상수로 생각하고 x0에만 주목하여 미분한다는 뜻입니다. 이 책에서는 앞으로 편미분을 따로 구분하지 않고 '미분'으로 통일해 부르겠습니다. 또한 변수가 하나인 경우에도 수식에서  d 기호를 사용하겠습니다.


덧셈의 역전파는 출력쪽에서 전해지는 미분값에 1을 곱한 값이 입력 변수(x0, x1)의 미분입니다. 즉, 상유에서 흘러오는 미분값을 '그대로 흘려보내는 것'이 덧셈의 역전파입니다. 이상을 반영하여 Add클래스를 다음과 같이 구현합니다.

class Add(Function):
  def forward(selfx0x1):
    y = x0 + x1
    return y

  def backward(selfgy):
    return gy, gy

이와 같이 backward메서드는 입력이 1개, 출력이 2개입니다. 물론 이 코드처럼 여러 개의 값을 반환할 수 있게 하려면 역전파의 핵심 구현을 변경해야 합니다. DeZero에서는 Variable클래스의 backward메서드를 수정하기로 했습니다.

댓글 없음: