아래의 해외 블로그들을 참고하여 작성한 글입니다 :)
https://intoli.com/blog/neural-network-initialization/
https://towardsdatascience.com/hyper-parameters-in-action-part-ii-weight-initializers-35aee1a28404
1. 가중치 초기화란?
- 신경망을 구축하고 훈련할 때 우리는 크고 작은 선택들을 해야 합니다. 어떤 손실 함수를 사용할지, 몇 개의 레이어를 가질지, 각 Covolution Layer에 사용할 stride와 kernel 크기, 네트워크에 가장 적합한 최적화 알고리즘 등을 결정해야 하죠.
- 결정해야 할 사항이 너무 많기 때문에, 초기 가중치의 선택은 사소해 보일 수 있지만, 실제로는 네트워크의 수렴 속도와 네트워크 성능에 모두에 지대한 영향을 미칠 수 있습니다. 아래는 이것을 시각화 해서 보여준 블로그의 자료입니다.
- 초기 가중치가 최적의 가중치에 가까운 시점에서 초기화되어 시작한다면 가장 좋겠죠. 이렇게 초기화 시점에 따라 성능의 차이가 나기도 합니다. 하지만 그 지점은 아무도 모르기 때문에 사실상 불가능합니다.
- 그 대신, 모델이 학습되는 도중에 Vanishing Gradient나 Exploding Gradient 현상은 겪지 않게 초기화하는 방법들이 있습니다.
- 그중 대표적인 것이 Xavier Glorot 초기화와 Kaining He 초기화입니다.
2. 가중치 초기화의 대표
2.5.1 Xavier Glorot 초기화
: "가중치의 초깃값을 N(0, var= 2/(n(in)+n(out))) 에서 뽑는다"
- n(in) : 해당 레이어에 들어오는 특성의 수
- n(out) : 해당 레이어에서 나가는 특성의 수
: 몇 개의 레이어를 통과하더라도 활성화 값이 너무 커지거나 작아지지 않고 일정 범위에 있도록 제한을 둠
: 시그모이드나 하이퍼볼릭 탄젠트를 주로 사용하는 경우 적합함
: 해당 논문 (http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf) 저자(Xavier Glorot)의 이름을 따서 만든 초기화 방법으로, 'Xavier 초기화' 또는 'Glorot 초기화'로 줄여서 불리기도 한다.
2.5.1 Kaining He 초기화입
: "가중치의 초깃값을 N(0, var = 2/((1+a²)x n(in)) 에서 뽑는다. "
- a : ReLU 또는 Leaky ReLU의 음수부분의 기울기 (기본값 = 0)
: ReLU가 활성화 함수로 많이 사용되면서 활성화 값이 0이하인 경우에 발생하는 ReLU의 특징을 반영하기 위해 등장
: ReLU 함수를 주로 사용하는 경우 적합함
'AI > 딥러닝 기초(Deep learning)' 카테고리의 다른 글
[Pytorch][BERT] 버트 소스코드 이해_⑧ BERT model 입력값 (0) | 2022.10.28 |
---|---|
[Pytorch][BERT] 버트 소스코드 이해_⑦ Bert Pooler (0) | 2022.10.28 |
[NLP] Transformer(트랜스포머)_② Deep dive (0) | 2021.05.24 |
[딥러닝] 오토인코더(Autoencoder) (0) | 2021.05.20 |
[딥러닝][퀴즈] RNN(Recurrent Neural Network) (0) | 2021.05.20 |
댓글