[밑바닥부터 시작하는 딥러닝 1] 5. 오차역전파 - 역전파 기초
가중치 매개변수의 기울기(정확히는 가중치 매개변수에 대한 손실함수의 기울기)는 수치 미분을 사용해 구했었다.
수치 미분은 단순하고 구현하기도 쉽지만 계산 시간이 오래 걸린다는 단점이 있다.
이번 장에서는 가중치 매개변수의 기울기를 효율적으로 계산하는
오차역전파법(backpropagation)을 계산 그래프를 사용해서 배워보자.
# 계산 그래프(computational graph)
계산 과정을 그래프로 나타낸 것을 말한다.
노드(node)와 에지(edge, 노드 사이의 직선)로 표현한다.
간단한 문제를 풀어보자.
1개에 100원인 사과를 2개 샀다면, 이때 지불 금액은? 단, 소비세가 10% 부과된다.
사과의 100원이 ×2 노드로 흐르고, 200원이 되어 ×1.1 노드를 거쳐서 220원이 된다.
곱셈인 ×만을 연산으로 생각해서 그릴 수도 있다.
그러면 사과의 개수, 소비세가 변수가 되어 원 밖에 표기되게 된다.
그렇다면 다음 문제를 풀어보자.
사과를 2개, 귤을 3개 샀다. 사과는 1개 100원, 귤을 1개 150원이다.
소비세가 10%일 때 지불 금액은?
덧셈 노드가 등장하였다.
계산을 왼쪽에서 오른쪽으로 진행하는데, 이것을 [순전파](forward propagation)라고 한다.
한편 반대방향으로 전파하는 것을 [역전파](backward propagation)라고 한다.
역전파는 이후에 미분을 계산할 때 중요한 역할을 한다.
계산 그래프의 특징은 '국소적 계산'을 전파함으로써 최종 결과를 얻는다는 점에 있다.
'국소적'이란 '자신과 직접 관계된 작은 범위'라는 뜻이다.
전체에 무슨 일이 일어나든 상관없이 자신과 관계된 정보만으로 결과를 출력할 수 있다.
각 노드는 자신과 관련된 계산 외에는 아무것도 신경쓸 게 없다.
계산 그래프는 전체가 아무리 복잡해도 각 노드에서는 단순한 계산에 집중하여 문제를 단순화할 수 있다.
그리고 중간 계산 결과를 모두 보관할 수 있다.
계산 그래프를 이용하는 가장 큰 이유는 역전파를 통해 '미분'을 효율적으로 계산할 수 있는 점에 있다.
사과 가격이 오르면 최종 금액에 어떤 영향을 끼치는지 알고 싶다고 하자.
이는 '사과 가격에 대한 지불 금액의 미분'을 구하는 것이다.
이 미분값은 사과값이 아주 조금 올랐을 때 지불 금액이 얼마나 증가했는지를 표시한 것이다.
이 값을 구하려면 계산 그래프에서 역전파를 하면 된다.
위 그림과 같이 역전파는 순전파와는 반대 방향의 화살표로 그린다.
이 전파는 '국소적 미분'을 전달하고 그 미분값은 화살표 아래에 적는다.
이 그래프로 내린 결론은 사과가 1원 오르면 최종 금액은 2.2원 오른다는 내용이다.
# 연쇄법칙
역전파로 '국소적 미분'을 전달하는 원리는 연쇄법칙에 따른 것이다.
y = f(x)라는 계산의 역전파를 그려보았다.
그림과 같이 역전파의 계산 절차는 신호 E에 노드의 국소적 미분을 곱한 후 다음 노드로 전달하는 것이다.
여기서 말하는 국소적 미분은 순전파 때의 y = f(x) 계산의 미분을 구한다는 것이며, 이는 x에 대한 y의 미분을 구한다는 뜻이다.
# 연쇄법칙이란?
연쇄법칙을 설명하려면 우선 합성함수 이야기부터 시작해야 한다.
합성함수란 여러 함수로 구성된 함수이다.
첫 번째 식은 두 번째 식(제곱하는 식)과 세 번째 식(더하는 식)으로 구성되어 있다.
연쇄법칙은 합성함수의 미분에 대한 성질이며, 다음과 같이 정의된다.
"합성함수의 미분은 합성함수를 구성하는 각 함수의 미분의 곱으로 나타낼 수 있다."
x에 대한 z의 미분은 위의 식처럼 나타낼 수 있다는 것이다.
∂t가 똑같으므로 서로 지울 수 있다.
미분을 하면 위와 같이 된다.
최종적으로 구하고 싶은 x에 대한 z의 미분은
두 미분을 곱하면 된다.
2t * 1 = 2(x + y) 가 된다.
# 연쇄법칙과 계산 그래프
2제곱 계산을 **2 노드로 나타내면 이와 같이 그릴 수 있다.
역전파의 계산 절차는 노드로 들어온 입력 신호에
그 노드의 국소적 미분(편미분)을 곱한 다음 다음 노드로 전달한다.
맨 왼쪽 역전파를 보면 결국 x에 대한 z의 미분이 된다.
즉 역전파가 하는 일은 연쇄법칙의 원리와 같다는 뜻이다.
# 덧셈 노드의 역전파
z = x + y라는 식을 대상으로 역전파를 실행해보자.
위의 값이 모두 1이기 때문에 덧셈 노드의 역전파는 입력값을 그대로 흘려보낸다.
덧셈 노드 역전파에서는 1.3을 그대로 다음 노드로 전달한다.
# 곱셈 노드의 역전파
z = xy에서의 미분은 다음과 같다.
곱셈 노드에서는 순전파 때 x였다면 역전파에서는 y 이런 식으로 서로 바꾼 값을 하류로 보내게 된다.
1.3 * 10 = 13, 1.3 * 5 = 6.5를 서로 바꾸어서 신호를 보낸다.
이렇게 보면 곱셈의 역전파는 순방향 입력 신호의 값이 필요하다는 것을 알 수 있다.
그래서 곱셈 노드를 구현할 때는 순전파의 입력 신호를 변수에 저장해둔다.