Notice
Recent Posts
Recent Comments
05-21 07:17
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Byeol Lo

밑바닥부터 시작하는 딥러닝1 - 3. 오차역전파 본문

AI

밑바닥부터 시작하는 딥러닝1 - 3. 오차역전파

알 수 없는 사용자 2023. 6. 14. 11:08

 경사하강법을 쓰기 위해서 손실 함수로부터 수정해야하는 기준치를 얻을 수 있다. 하지만 이 수치를 노드들에 어떻게 적용시킬지 의문이 생길 수 있고, 이렇게 노드들을 데이터들에 적용하는 단계를 오차역전파(Back Propagation)이라고 한다. 다음 예제를 보자.

 

+, - 연산

  x+y = z라는 결과를 내뱉는 연산이다. 이때 x에 대한 z의 편미분과 y에 대한 편미분이 각각 1임을 알 수 있다. 이런 연산에서 Loss Function에서 얻은 값에 대해 편미분을 수행하는데, z의 결과를 도출하는 노드에 대해서는 해당 노드의 가중치에 dL/dz의 가중치를 넣게 된다. 즉, Loss Function을 계산하는데에 직접 맞닿아 있는 출력층은 dL/dz만 계산하면 된다. 하지만 그 전의 층으로 갈 때의 가중치는 x와 y의 결과를 내뱉는 것에 대한 가중치를 넣어주어야 한다. 따라서, dL/dx, dL/dy를 넣어주어야 하는데, 미적분학의 Chain Rule을 사용하여 dL/dx = dL/dz * dz/dx, dL/dy = dL/dz * dz/dy 임을 알 수 있다. 따라서 z를 y에 대한 식이 있을터인데 해당 식을 미분한 것을 곱해주면 된다.

Propagation
Back Propagation

 위의 사진을 통해 구체적으로 확인할 수 있다. 곱셈이나 나눗셈 노드도 비슷하게 해주면 된다. 편미분을 통해 activation function으로 자주 쓰이는 Sigmoid, ReLU의 역전파를 구해보자.

Sigmoid 역전파

 

Sigmoid 미분

 ReLU의 역전파는 좌측이면 0, 우측이면 1이기 때문에 그냥 전해주면 된다. 여기서 실제 신경망에서는 행렬의 미분을 쓰기에 그것만 다를 뿐 구동 원리는 전부 동일하다. Affine Layer을 살펴보자.

 

Affine Layer

 신경망의 순전파 때 수행하는 행렬의 곱은 기하학에서 어파인 변환(affine transformation)이라고 한다. 여기서 어파인 변환을 수행하는 처리를 Affine 계층의 이름으로 구현되는데, Y = X * W + B 가 된다. 행렬 곱을 통해 노드의 파라미터 하나하나를 수정하는게 아닌 노드의 전체 파라미터를 한꺼번에 수행할 수 있도록 한다. 따라서 행렬곱, 덧셈에 대한 Back Propagation을 진행해야 한다. 우선 데이터가 하나인 것에 대한 역전파를 해보자.

 Loss Function을 편미분을 연쇄적으로 하는 것이 노드의  파라미터를 얼마나 갱신할지 정하는 것이다. 위에 보이는 Node에 대해 W와 B에 대한 값을 수정할 수 있도록 행렬의 형상(shape)에 맞도록 편미분을 해주어야 한다. 따라서, 연산을 수행함에 있어 행렬의 곱은 연산 순서가 중요하기 때문에 다음과 같이 편미분을 수행한다(각각 행렬의 성분을 직접 써가면서 해보면 왜 이런 공식이 유도되는지 알 것이다). 정리하자면 다음과 같다.

행렬 곱의 역전파는 행렬의 대응하는 차원의 원소수가 일치하도록 곱을 조립하여 구할 수 있다.

 

배치용 Affine Layer

 앞서 살펴본 간단한 노드 내의 역전파는 하나의 데이터에 대한 역전파이다. 하지만 우리는 미니 배치 처리를 해야하는데, 배치 처리를 함에 있어 X에 많은 데이터들이 들어온다. 이때 Affine Layer는 그냥 차원 수만 늘어날 뿐 나머지는 변함없이 위와 같이 처리가 된다. 위의 정리된 말을 잘 따르기만 하면 문제는 없을 것이다.

 

Softmax-with-Loss 계층

 분류 문제에 있어서 출력층에 Softmax 계층을 많이 사용하게 되는데, Softmax전의 Affine Layer를 통해 나온 마지막 출력을 점수(Score)라고 하며, Softmax를 거친 최종 출력의 합은 1이 되게 된다. 이때 Softmax의 손실 함수로 교차 엔트로피 함수도 포함되어 Softmax-with-Loss 계층이라는 이름으로 구현된다.

log(y)에 대한 오차 역전파로 t/y가 되고, t의 합들이 1이라는 것(원-핫 인코딩)만 알면 나머지는 이해가 쉬울 것이다(여기서 S는 지수함수 끼리의 합이다). 이를 통해 우리는 수치 미분을 더 이상 사용할 필요가 없게 되었다.

Comments