밑바닥부터 시작하는 딥러닝 Chapter 5
오차역전파법 (Backpropogation)
chapter 4에서 배웠던 수치 미분으로 기울기를 구하는 방법은 빠르게 역전파의 기울기들을 계산하기 어렵다는 문제가 있다. 그 대신 chapter 5의 오차역전파법에서는 계산 그래프를 그려 빠르게 기울기(gradient)들을 구할 수 있다.
계산그래프
계산그래프는 위 그림과 같이 계산이 필요한 문제들을 노드와 엣지로 그린 것이다. 노드에는 연산자가 엣지에는 연산에 사용되는 수가 표시된다. 위 계산 그래프는 순전파이다.
국소적 계산
국소적 계산은 계산 그래프의 특징이다. 말 그대로 자신과 관계된 작은 범위의 계산만을 진행하는 것이 국소적 계산이다. 국소적 계산은 이후 연쇄 법칙(chain rule)에서 진가를 발휘한다. 해당 노드와 관련된 계산에만 집중해서 연산을 진행하면 되기 때문이다.
계산 그래프 사용 이유
계산 그래프는 역전파를 계산하기에 굉장히 좋은 도구이다. 역전파를 계산할 때 국소적 계산 특징을 사용해 어떤 노드에 있는 변수가 Loss에 어떤 영향을 끼치는지 확인하기 용이하다.
예를 들어, 위 계산 그래프 그림에서 사과가 비용에 어떤 영향을 끼치는지 알고 싶다면 사과의 가격인 100원부터 시작해 연산을 진행하면서 최종 Loss를 구하면 된다. 또 역전파를 구하기 위해서 사과와 관계없는 다른 노드들은 잠시 제쳐두고 사과 노드와 관련된 엣지만을 집중해서 연산하면 사과에 대한 Loss의 기울기(사과 값이 아주 조금 변했을 때, Loss값이 변하는 정도)를 구할 수 있다.
연쇄법칙
역전파는 국소적인 미분을 오른쪽에서 왼쪽으로 전달하게 되는데, 이때 국소적 미분을 전달하는 원리는 연쇄법칙이 사용된다.
위 그림을 통해서 연쇄법칙이 어떻게 적용되는지 알 수 있다.
역전파
이제 역전파가 연쇄법칙에 의해 어떻게 적용되는지 알아보자.
역전파는 연산에 따라 다르게 오른쪽에서 왼쪽으로 넘어간다.
덧셈, 곱셈 노드의 역전파
위 그림을 통해서 덧셈과 곱셈 노드의 역전파에 대해 확인할 수 있다.
덧셈 노드는 순전파의 어떤 정보도 사용되지 않지만 곱셈 노드에서는 곱셈에 사용되는 순전파 정보가 필요하다.
때문에 실제 역전파를 구축할 때도 곱셈 노드의 구현에서는 순전파의 결과값을 저장해놔야 한다.
활성화 함수 계층
일반 노드의 순전파와 역전파는 이제 마무리하고 활성화 함수 계층도 알아보자. 활성화 함수도 마찬가지로 연산을 통해 순전파가 진행되므로, 역전파도 필요하다.
활성화 함수의 역전파는 위 그림과 같이 일반 노드 역전파보다 조금 더 복잡하다. 하지만 국소적 미분법에 따라 차근차근 연쇄법칙을 통해 계산하다보면 원하는 기울기값을 얻을 수 있다.
Affine / Softmax 계층
Affine 계층은 이전에 상수로 순전파를 진행하던 것과 달리 행렬(matrix)단위로 순전파가 진행되는 것을 의미한다. 즉, 일반 연산인 덧셈과 곱셈이 아니라 좀 더 복잡한 내적이 사용되는 것을 의미한다.
Affine 계층의 순전파, 역전파는 연산이 내적이라는 것을 제외하고는 상당히 비슷하다. 하지만 행렬의 내적 연산은 위치가 중요하기 때문에 연산하기 전에 잘 확인해야 한다.
역전파를 진행할 때는 해당 연산이 내가 원하는 기울기의 행렬 형태로 만들어지는지 확인해야 한다.
행렬 X와 X로 L을 미분한 행렬은 모양이 동일하다. 이 개념은 모든 행렬 변수에 적용된다.
배치용 Affine 계층
배치 단위로 Affine을 진행하는 것은 데이터의 개수가 증가한 것 말고는 달라질 것이 없다. 때문에 위의 Affine 계층 구현과 동일하게 순전파, 역전파를 진행하면 된다.
다만, 주의할 점이 있다면 편향의 역전파를 주의해야 한다.
편향(Bias)행렬, B의 역전파를 구할 때는 배치 단위의 데이터를 모두 더해줘야한다.
왜냐하면 순전파에서 B가 np.dot(X, W)에 더해질 때 각 데이터에 B가 복사되어 각각 더해지기 때문이다.
이런 이유 때문에 역전파에서는 한 노드로 오른쪽에서 왼쪽으로 모아지는 엣지들과 과정이 동일하다고 볼 수 있다. 그러므로 axis=0 배치 단위 방향으로 더해줘야 한다.
Softmax-with-Loss 계층
마지막으로 softmax와 loss가 함께 있는 출력층에 대해서 알아보자.
소프트맥스 함수의 손실 함수로 교차 엔트로피 오차를 사용하니 역전파가 (y - t)의 모양으로 말끔하게 떨어진다. 이는 우연하게 나온 것이 아니라 교차 엔트로피 오차라는 함수가 그렇게 설계되었기 때문이다. 마찬가지로 회귀의 출력층에서 항등함수의 손실 함수로 평균 제곱 오차(MSE)를 사용하면 역전파의 결과가 동일하게 (y - t)의 모양으로 말끔하게 떨어진다.
정리
- 계산 그래프를 이용해 계산 과정을 시각적으로 파악할 수 있다.
- 계산 그래프의 노드는 국소적 계산으로 구성된다. 국소적 계산을 조합해 전체 계산을 구성한다.
- 계산 그래프의 순전파는 통상의 계산을 수행한다. 한편, 계산 그래프의 역전파로는 각 노드의 미분을 구할 수 있다.
- 신경망의 구성 요소를 계층으로 구현하여 기울기를 효율적으로 계산할 수 있다. (오차역전파법)
- 수치 미분과 오차역전파법의 결과를 비교하면 오차역전파법의 구현에 잘못이 없는지 확인할 수 있다. (기울기 확인)