※ 본 내용은 stanford에서 제공하는 cs231n 강의, 강의자료를 바탕으로 작성하였습니다.
Assignment2 에서는 코드보다는 진행했던 실험에 대한 결과와 구현 시 어려웠던 점을 중점적으로 정리할 예정이다.
<Batch Normalization>
https://vstylestdy.tistory.com/38
Batch normalization에 대해 강의에서 다룬 내용을 정리해둔 글이다.
이론적 내용은 위 글을 참고 하면 되겠다.
Q2에서는 batch normalization layer를 구현하는 내용을 진행하였다.
Affine이나 ReLU 등을 layer로 구현하여 forward, backward 연산을 구현한 것처럼 batch normalization에 대해서도 forward, backward를 구현하면 된다.
그 중 역전파를 계산하는 과정이 복잡했어서 해당 내용에 대해 정리하겠다.
BN back propagation
먼저 batch normalization을 계산 그래프로 표현하면 다음과 같다.
평균을 구하는 mean이나 표준편차를 계산하는 std 등이 일반적이진 않지만, 위 계산 그래프를 바탕으로 역전파를 계산하면 backward()의 수식을 구현할 수 있다.
또 하나 주의할 점은 행렬 간의 미분이 필요하다는 점이다.
https://vstylestdy.tistory.com/35
Assignment1 에서 affine layer의 역전파를 구현할 때 사용했던 방법을 그대로 적용했다.
직접적으로 미분을 구하기 보다는 chain rule을 이용한다.
우선 $ \frac{dL}{dx'} $까지의 역전파 과정을 나타내면 다음과 같다.
(편의상 $ \hat x$를 x'으로 나타내었다.)
앞서 말했듯이 affine layer때 역전파를 계산한 것처럼 chain rule을 적용하여 계산하면 된다.
위 과정 중에서 $\frac{dL}{dx'} $이 r*dout이 되는 과정에 대해서만 chain rule을 통해 계산하는 법을 적용해보겠다.
gamma나 beta에 대한 미분도 동일한 원리를 적용하면 쉽게 유도할 수 있을 것이다.
$\frac{dL}{dx'} = r*dout$ 유도
$x'$과 $r$의 곱을 $t$라고 하고, dout을 통해 전달되는 값($ \frac{dL}{dy}$)의 i행 j열을 $ o_{ij}$라고 표현하겠다.
(역전파 계산은 생략되었지만, $ \frac{dL}{dy} = \frac{dL}{dt}$ 이다.)
$ \frac{dL}{dx'_{11}}$의 미분만 살펴보면, 위와 같이 계산된다. Matrix 사이의 dot은 element-wise 곱을 의미한다.
※ 수식 자체에서 matrix가 사용되는 것은 아니고, scalar간의 합을 한 번에 표현하기 위해서 위와 같이 표현했다.
(좌측의 시그마와 동일한 표현이다.)
$ \frac{dt_{11}}{dx'_{11}}$을 제외한 미분 값은 모두 0이 되므로 $ r_1$과 $ o_{11}$의 곱으로 정리된다.
동일한 원리로 나머지 원소의 미분값을 계산하면 $ \frac{dL}{dx'}$은 다음과 같이 $ dout*r$이 된다.
$ \frac{dL}{dx'}$ 이후의 역전파는 다음과 같이 계산된다.
마지막의 $ \frac{dL}{dx}$는 3가지로 갈라진 곳에서 전달되는 역전파를 모두 합하면 된다.
이번 역전파의 계산도 모두 chain rule을 기반으로 계산하였고, root나 역수 등으로 인해 계산이 조금 껄끄러워지고 식이 복잡해지긴 했지만 그 원리는 동일하다.
평균을 구하는 mean 노드와 표준편차를 구하는 std 노드는 조금 새로운데, 막상 계산해보면 특이할 것은 없다.
'mean' 노드의 역전파만 조금 더 자세히 살펴보겠다.
Mean 노드의 역전파
먼저 x, u와 역전파를 전달되는 값은 위와 같이 표현하겠다.
마찬가지로 $ \frac{dL}{dx_{11}}$을 먼저 살펴보면, 다음 식이 성립한다.
위 예시에 대해서는 n = 2겠지만 $ u$는 평균으로 계산되는 값이므로 일반화하여 n으로 표현하였다.
같은 방식으로 모든 $ x$에 대해 계산하면, $ \frac{dL}{dx}$는
위와 같다.
(k는 전달되는 역전파 값이며, 다른 방향에서 계산되는 $ \frac{dL}{dx}$ 값과 더해져야 최종적인 미분이 계산된다.)
표준 편차를 계산하는 루트로 흐르는 역전파의 계산도 같은 원리로 계산할 수 있다.
실험 - with BN vs without BN
Forward와 backward를 모두 추가하여 batch normalizaton layer를 구현한 후,
실제로 affine layer와 ReLU 사이에 해당 layer를 추가한 후 train 과정을 비교하는 실험을 진행했다.
BN을 추가한 상태로는 10 epoch로 loss가 1 정도로 감소하였다.
BN을 적용하지 않았을 때는 10 epoch로 loss가 1.4 정도까지만 감소하였다.
파란색으로 표현된 결과가 BN을 적용한 결과, 주황색으로 표현된 결과가 BN을 추가하지 않은 결과이다.
더 빠르게 수렴하는 것을 확인할 수 있다.
이번엔 다양한 weight initialization에 대해 BN을 적용한 경우와 BN을 적용하지 않은 경우를 비교한 실험이다.
BN을 적용한 경우에는 initialization의 영향을 훨씬 덜 받는다.
실험 - Batch size의 영향
Batch size를 다양하게 한 후 학습 과정을 비교한 결과이다. baseline은 BN을 적용하지 않은 경우이다.
먼저 실험 결과를 살펴보면, batch size가 클수록 training accuracy가 더 빨리 증가하는 모습을 보인다.
그러나 validation accuracy의 경우에는 큰 차이를 보이지 않는다.
관련 내용을 찾아본 결과,
기본적으로 batch size가 클수록 batch의 통계가 전체 training data의 통계에서 크게 벗어나지 않을 확률이 커지기 때문에, 더 빠르게 수렴하고 좋은 성능을 보이는 것이 맞다고 한다.
반대로 batch size가 작은 경우 수렴은 덜 안정이지만, 일종의 regularization 효과를 준다고 한다.
'Computer Vision > cs231n' 카테고리의 다른 글
[Lec 11] Detection and Segmentation (0) | 2022.01.24 |
---|---|
[Assignment 2] Convolution 역전파, Spatial Batch Normalization (1) | 2022.01.21 |
[Lec 10] Recurrent Neural Networks, RNN (0) | 2022.01.19 |
[Lec 9 ]CNN Architectures (0) | 2022.01.17 |
[Lec 8] Deep Learning Software (0) | 2022.01.16 |