오차역전파법

2018. 10. 30. 17:42ML, OpenCV

오차역전파법이라는 용어를 먼저 살펴보자면

역전파라는 말 그대로 역전파는 역방향으로 전파하는 방법과

손실함수(오차)를 이용하기 때문입니다.


오차역전파법은 계산 그래프로 쉽게 나타낼 수 있습니다.

계산 그래프는 '국소적 계산'을 한다는 장점과 중간 계산 경과를 모두 보관할 수 있다는 점

그리고 미분을 효율적으로 계산할 수 있다는 점이 있습니다.


위와같이 나타내는게 계산 그래프 입니다. (x 부호는 곱셈노드 +부호가 있는 노드는 덧셈노드라 합니다.)

따로 설명하지 않아도 이해가 될 만큼 아주 직관적입니다.

'국소적 계산' 이란 각각의 범위 예를들면 위 그림에서 2x100 과 150x3을 몰라도 

200과 450의 합은 650인 것을 알 수 있는 것입니다. 때문에 복잡한 계산도 단순화 할 수 있습니다.


역전파의 계산 절차는 출력에서 보내오는 기울기 값에 노드의 국소적 미분을 곱한 후 다음 노드로 전달하는 것입니다.


왼쪽그림의 식 z = x + y 을 역전파하면 오른쪽과 같은 값을 가지게 됩니다.

출력쪽에서 보내오는 값  x 1 값을 각각의 노드에 줬는데

여기서  x 1이 되는 이유는 z = x + y 의 미분값이 x로 미분했을 때 1 y로 미분했을 때 1이 나오기 때문입니다.


덧셈 노드의 역전파에 대한 이미지 검색결과

따라서 덧셈노드는 출력층의 기울기값을 그대로 전달해줍니다.

덧셈 노드의 역전파에 대한 이미지 검색결과


곱셈노드는 z = xy 라는 식의 미분으로 설명 할 수 있습니다.


곱셈 노드 역전파에 대한 이미지 검색결과

그림을 아주 간단하게 설명하자면

곱셈 노드는 역으로 곱해줍니다.

x 를 보낸 곳에는 y를 곱해주고

y 를 보낸 곳에는 x를 곱해줍니다.

x에 대한 미분이 y

y에 대한 미분이 x 가 나왔기 때문입니다.



곱셈 노드 역전파에 대한 이미지 검색결과

위 그림이 이해가 되면

덧셈노드와 곱셈노드의 역전파법을 잘 알고계신겁니다.


기계학습에서는 함수를 사용합니다.

위의 곱하기와 더하기 부호 대신에 들어갈 함수를 활성화 함수라고 합니다.

대표적으로 사용하는 활성화 함수로는 

ReLU, Sigmoid, Softmax 함수가 있습니다.


우선 ReLU는 저번 글에서 설명했듯이 0아래 즉 음수이면 0값을 주고

양수이면 입력한 값을 그대로 주는 함수입니다.

예를들어 위 그림에 맨 오른쪽 노드에 렐루함수가 있다고 치면

1은 양수이기 때문에 1이라는 값을 그대로 전달할 것입니다.


시그모이드는 시그모이드의 미분이 뭔지만 알고 있으면 됩니다.

시그모이드의 미분 = 자기자신 x (1 - 자기자신)

마찬가지로 위 그림의 맨 오른쪽 노드에 시그모이드 함수가 있다고 치면

1 x ( 1 - 1) 값을 전달할 것입니다.


위에서 들었던 예는 변수의 수도 적고 너무 단순합니다.

기계학습에서는 수많은 데이터를 계산해야 하기 때문에 배열을 사용합니다.

이 때 각각의 행렬의 곱을 어파인 변환 (어파인 계층) 이라고 합니다.


이 내용은 저번에 올렸던 행렬의 곱 부분과 같은 내용입니다.

http://yeowool0217.tistory.com/503?category=758103

하지만 역전파에 대한 설명은 없기 때문에

어파인 계층의 역전파에 대해서 설명하자면


어파인계층역전파에 대한 이미지 검색결과

역시 미분이 필요합니다.

계산 방식은 위에 설명한 곱셈노드의 계산방법과 같습니다.

다만 차이점은 행렬이기 때문에 전치행렬을 해줘야 한다는 것 입니다.

전치행렬은 예를들어 (2, 3) 이라는 행렬이 있을때 전치행렬을 하면 (3, 2)행렬로 바뀌게 됩니다.

아래 그림을 참고하면 이해가 쉬울겁니다.

어파인계층역전파에 대한 이미지 검색결과



softmax with loss rPcmd에 대한 이미지 검색결과

위 그림은 3층으로 이루어진 신경망입니다.

어파인은 단순 계산작업만 하고 ReLU와 Softmax는 활성화 함수입니다.

Softmax로 나타낸 값들의 합은 1이 되기 때문에 확률을 나타내기도 합니다.


역전파에서는 Softmax 계층에 손실 함수인 교차 엔트로피 오차도 포함하여

Softmax-with-Loss 계층이라고 합니다.


과정은 복잡하지만 결과 값은 다음과 같습니다.


softmax with loss에 대한 이미지 검색결과


위 그림에서 t는 정답값 y는 출력값을 의미합니다.

Softmax-with-loss를 적용하면 결국에는

출력 - 정답 ( t - y ) 값이 나오는 것을 알 수 있습니다.