1. Weight Initialization
신경망의 주목적은 손실을 최소화하는 것이며 이를 위해서는 파라미터 최적화가 필수적이다. 이를 위해 경사하강법, 미니배치경사하강법 등 최적화 기법을 배웠었는데, 그 기법들을 사용하며 계산되는 가중치도 최적화기법이 존재한다.
이를 알아보도록 하자.
가중치 초기화, Weight Initialization을 제대로 하지 않으면, 기울기 소실 혹은 학습시간이 엄청 오래 걸리는 등 모델 학습이 효율적으로 진행되지 않는다. 가중치가 매우 높거나, 작게 초기화되면 일반적으로 사용하는 활성화 함수인 sigmoid나 relu를 사용하였을 때 기울기가 0에 가까워지게 되기 때문에 기울기가 천천히 변하며 학습에 오랜 시간이 걸리게 되고 기울기 소실도 발생한다. 또한 각 활성화 함수의 출력으로 인해 데이터가 한쪽으로 편향되거나 쏠리는 경향이 있다.
가중치를 초기화하는 아이디어는 여러가지가 있었다.
1. 0으로 초기화
일반적인 초기화로 0으로 초기화하면 어떨까라는 아이디어가 있었지만, 모든 뉴런의 가중치가 0이면, 활성화함수에 가중치의 합인 0이 통과되고 이는 출력이 0 혹은 0에 매우 근접한 값들만 출력됨에 따라 학습이 진행되지 않게 된다. 또한 역전파도 이뤄질 수가 없다.
2. 표준 정규분포로 초기화
표준 정규분포의 형태인 평균이 0, 표준편차가 1인 분포로 가중치들을 초기화했을 경우, 활성화함수 sigmoid를 거쳤을 때 출력값이 0혹은 1에 치우치게 되어 역전파시 기울기가 0에 가깝게 되는 기울기 소실문제가 발생.
이를 완화하기 위하여 표준편차가 0.01로 하는 정규분포 형태로 초기화했을 경우 아래와 같이 0.5중심으로 모여있는 것을 볼 수 있는데, 이는 기울기 소실문제는 완화되겠지만, 값이 모여있어 대부분의 뉴런이 거의 같은 값을 출력하여 여러 개의 뉴런을 쓴 의미가 줄어든다.
3. Xavier 초기화
Xavier 초기화 방법은 Sigmoid 나 tanh 같은 선형 활성화 함수를 사용할 때 효과적인 초기화 방법이다. 이는 고정된 표준편차를 사용하지 않고, 은닉층의 노드 수을 고려하여 변화시킨다. 이전 은닉층의 노드 개수가 $n$이고, 현재 은닉층의 노드가 $m$개 일 때, $ \sqrt{\frac{n + m}{2}}$ 를 표준편차로 하는 정규분포로 가중치를 초기화시킨다.
이를 사용하면 층 마다 노드 개수를 다르게 설정하더라고 각각에 맞게 가중치가 초기화되기 때문에 고정된 표준편차보다 강건하다. 아래 그림을 보면 출력값의 분포가 더 고르게 퍼져있는 것을 확인할 수 있다.
그러나 RELU함수에서는 출력값이 0으로 수렴하는 현상을 발생하기 때문에 일반적으로 sigmoid 함수와 같이 사용한다.
4. He 초기화
He초기화는 RELU 활성화함수와 주로 쓰이는 가중치 초기화 방법으로 $\sqrt{\frac{2}{n}}$을 표준편차로 하여 정규분포를 초기화한다. 이때 He가 Xavier보다 2배가 되는 제곱근을 사용하는 이유는, RELU함수의 경우 입력값이 음수일 때 활성화함수의 출력값이 모두 0이 되기 때문에 더 넓게 분포시키기 위해 2배를 해주는 것이다.
2. 가중치 감쇠: Weight decay
가중치 감쇠는 큰 가중치에 대한 패널티를 부과함으로써 모델의 가중치를 작게 유지하려고 한다. 이 말은 즉 손실함수의 값이 같을 때 가중치 크기가 더 작은 쪽을 선택하는 방향으로 학습을 진행한다는 것이며, 이를 통해 모델의 복잡도를 감소시켜서 모델이 과적합되는 것을 막으며, 노이즈가 많은 경우에 특히 유용하다. 수식은 아래와 같으며 $\lambda$를 `가중치 감쇠 계수`라고 부르며 이를 적절하게 정해줘야 하는데,우선 2가지의 규제 수식을 보겠다.
$|w|$를 사용하는 경우는 `L1 norm`라고 부르며, $w^2$은 `L2 norm`라고 부른다.
$$ L \leftarrow L + \lambda \sum_{i=1}^{n} |w_i| $$
$$ L\leftarrow L + \lambda \sum_{i=1}^{n} w_i^2 $$
위의 두 식에서 만약 $\lambda$ 가 매우 크면 모델은 손실함수L을 줄이기 보다는 가중치규제만을 줄이기 위한 학습을 할 것이고, $\lambda$가 아주 작으면 또 규제가 무의미해진다. 따라서 $\lambda$ 하이퍼파라미터를 잘 설정해야만 손실함수가 충분히 학습되어 작아졌을 때는 가중치규제에 따라 가중치가 더 작은 것이 선택되도록 해야 한다.
즉, 가중치규제는 처음에는 손실함수 그 자체만을 고려하다가 어느정도 줄였으면 손실함수가 다시 늘어나지 않는 한에서 가중치의 수를 줄이자 라는 것이다.
L2는 작은 애들은 적게 규제하고, 큰 애들은 크게 규제하기 위하여 제곱을 사용하였고 L1은 전부 동일하게 규제하여서 애초에 작았던 애들은 필요가 없다 라는 느낌으로 규제한다고만 알아두면 될 것 같다.
3. 학습 조기 종료
Early stopping이라고 부르며, 모델 학습 시 과적합을 방지해주는 방법 중 하나로, 일반적으로 학습이 진행될수록 모델의 학습오차는 계속해서 줄어들면서 검증오차는 어느 순간 증가하는 과적합이 발생함. 따라서 적절한 시점에 학습을 끊어 주는 것을 말한다.
4. 학습 스케쥴러
Learning rate scheduler은 딥러닝 훈련과정에서 사용되는 학습률을 동적으로 조절하는 역할을 한다. 보통 learning rate를 고정하기도 하지만, 적절한 학습률 스케줄링은 학습속도를 빠르게 하고, 지역해를 벗어나게 하며 일반적으로 더 나은 성능의 모델을 얻게 도와준다.
`Constant`는 스케줄러를 적용하지 않은 것으로, 초기에 설정한 학습률을 학습 과정 전체에 걸쳐 변경하지 않는다.
`Step scheduler`은 일정한 주기(epoch나 iteration)마다 학습률을 일정 비율로 감소시킨다.
`Cosine scheduler`은 코사인 함수를 따라 학습률이 감소하도록 설정하여, 안정적으로 감소하게 하며 일정주기로 다시 재시작할 수 있다.
`One-cycle Policy`는 학습률이 먼저 증가한다음 감소하도록 설정하여, 빠르게 수렴하고 끝부분에서는 학습률을 감소시켜 안정적인 학습을 도운다.
'ML & DL > 개념정리' 카테고리의 다른 글
Data Augmentataion: 데이터 증강 (0) | 2023.12.26 |
---|---|
최적화 알고리즘 (0) | 2023.12.26 |
성능 고도화 기법 (0) | 2023.12.23 |
RNN, LSTM, GRU (1) | 2023.12.22 |
CNN: Convolution Neural Network (0) | 2023.12.21 |