[CS231n]Weight lnitialization

ai_lim·2022년 2월 14일
0
post-thumbnail

CS231n 6강

가중치 초기화에 대해 알아보자

가중치 W를 0으로 초기화한다면?? gradient vanishing이 발생한다.

1. small random numbers

그래서 생각해낸 첫번째 아이디어가 랜덤의 작은 값들로 초기화하는 것이다.

평균이 0이고, 표준편차가 0.01인 randn을 발생시켜 W를 초기화한다.이것은 동작이 꽤나 잘되지만 네트워크가 깊어질수록 문제가 생긴다.

code



1. 10개의 레이어, 각각은 500개의 노드를 가지고 있고 활성화 함수는 tanh 이다.

2. 가중치를 랜덤의 작은 값들로 초기화시켜주었다.


3. 그러고나서 레이어마다 평균과 표준편차를 구해주고 그래프를 그리고 분포를 히스토그램으로 표현해준 코드이다.

결과를 보니 평균과 표준편차가 0으로 모두 수렴한다. 표준편차가 0으로 수렴하니 히스토그램도 가운데로 몰린다. 그렇게되면 모든 activation이 0이 되어 vanishing gradient가 되는 문제가 발생한다.

2. big random numbers

0.01 대신에 좀 더 큰 값 1을 곱해준 가중치 초기화를 살펴보자


W값이 너무 커져서 오버슈팅이 일어난다.
-1과 1에 saturation이 되어 이 또한 gradient를 0으로 만든다.

3. Xavier initialization


입력의 개수로 normalized 하는 것이다.
입력의 개수가 크면 큰 값으로, 작으면 작은 값으로 나눠주어 합리적으로 weight를 초기화시킨다.

tanh 에서는 잘먹히지만...

ReLU에서는 적용이 잘 안된다.

4. 카이밍해

이를 보완하기위해 2015년에카이밍해가 2를 나눠주는 방식을 적용했다.



빨간색이 카이밍해를 적용한 것이고 파란색이 기존 Xavier 방법이다.
확실히 성능이 잘 나오는 것을 볼 수 있다.

5. 아직도 연구중😎


가중치 초기화의 방법은 아직도 활발하게 연구중이라고한다.

가중치 초기화를 안하고 Batch Normalization을 사용해도 되는데 이는 다음 포스팅에서 만나요~

0개의 댓글