일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Today
- Total
- activation function
- AdaGrad
- adaptive learning rate
- arithmetic reasoning
- Attention is all you need
- attention mechanism
- auto encoder
- Back Propagation Trough Time
- Backpropagation
- Bayes Theorem
- BCE
- Bert
- Bidirectional Encoder Representation from Transformer
- Binary classification
- BPTT
- Chain-of-Thought
- CNN
- commonsense reasoning
- Computer Vision
- Confusion Matrix
- convolutional neural network
- Cot
- cot reasoning
- counting
- Cross Entropy Loss
- deep learning
- degradation
- Dimension Reduction
- Few-shot
- fine-tuning
데이터 분석 일지
[Deep Learning] Regularization 본문
0. Overview: Overfitting
지난 블로그에서 overfitting에 대해 다룬 적이 있다. 이는 training error가 generalization error에 비해 현격히 낮아지는 현상으로, training dataset에 있는 noise까지 학습하게 되어 training dataset에서만 error가 낮아지는 것이다. 이를 해결하기 위하여 dataset을 train, valid, test의 세 가지로 나누고, 이를 각각 parameter, hyper-parameter, algorithm을 결정하는 데에 사용하였다.
1. Regularization
Regularization은 overfitting을 피하기 위해서 generalization error를 낮추기 위한 또 하나의 추가적인 방법이다. 이 과정은 보통 training error 최소화를 방해하는 형태이기 때문에 training error가 높아질 수 있다. 보통 training 과정에서 noise나 bias를 과도하게 학습하지 못하게 하는 형태를 가진다.
2. Regularization Methods
regularization은 아래와 같이 데이터, Loss 함수 등의 여러 방법으로 실행할 수 있다.
- 데이터를 통해: Data Augmentation(Noise injection)
- Loss 함수를 통해: Weight Decay
- Neural Network layer를 통해: Dropout, Batch Normalization
- 학습 방식 또는 추론 방식을 통해: Early Stopping, Bagging & Ensemble
2. 1. Weight Decay
이 방법은 weight parameter에 페널티를 주는 방식으로, L2 Norm을 사용하여 weight parameter가 원점에서 벌어지는 것을 방지한다. 일반적으로 Loss 함수에 weight의 크기에 대한 페널티 항을 추가하여 구현된다. weight decay의 수식은 아래와 같다.
$$\tilde{L}(\theta) = L(\theta) + \alpha||W||{^2_2} = L(\theta) + \alpha W^T·W$$ $$where$$ $$\theta = {W, b}$$
위의 수식에서 α는 weight decay의 강도를 나타내는 hyper-parameter이고, 합의 제곱항은 가중치의 제곱을 더한 것이며, 이를 통해서 각 가중치가 Loss 함수에 미치는 영향이 줄어들게 된다. 보통 신경망에서는 Loss를 최소화시키면 weight는 증가한다. Loss와 weight를 α를 통해 두 term 사이의 균형을 조절할 수 있다. 또한 두 term을 합친 Loss tilde를 최소화시킨다면, Loss와 weight 모두 균형 있게 최소화하는 방향으로 계산할 수 있다. PyTorch에서는 SGD나 Adam의 초기화 파라미터로 제공된다.
2. 2. Data Augmentation
이 방법은 데이터의 핵심 특징을 가진 상태(기존 데이터)에 noise를 더하여 데이터를 확장하는 방법이다. 즉 데이터의 수를 늘리는 것인데, 보통 핵심 특징을 보존하기 위하여 휴리스틱한 방법을 사용한다. 규칙을 통해 augment 하는 것은 옳지 않다. 모델이 그 규칙 또한 학습할 수 있기 때문이다. 따라서 randomness가 필요하다.
예를 들어 이미지 데이터를 augmentation할 때, 검고 흰 점을 찍는 salt & papper noise를 사용하거나, 회전을 하는 rotation, 대칭이 성립하는 이미지에 대해서 반전하는 flipping, 일정 pixel 이내로 좌우상하로 움직이는 shifting 등을 사용한다. 텍스트 데이터에서는 임의로 단어를 생략하는 dropping, 임의로 대상 단어를 주변 단어와 위치 교환을 하는 exchange 등을 사용한다. 이를 통해 데이터의 수를 몇 배 이상으로 만들 수 있다.
이 방법의 한계는 새로운 형태의 데이터를 생성할 수 없다는 것이다. 예를 들어 기존 꽃 이미지 데이터에 장미꽃이 없었다면, 장미꽃을 생성하지 못할 것이다. 하지만 최적화 측면에서 유리할 수는 있다.
2. 3. Dropout
data augmentation에서는 입력 데이터에 noise를 추가하였다. 이에 더 나아가 drop out은 입력 데이터가 아니라 신경망 중간에 noise를 추가하는 방법이다. 한 번 feedforward할 때마다 노드를 임의로 동작하지 않도록 한다. 각각의 노드들이 dropout될 확률 p에 따라 동작하지 않는 것이다. 이런 식으로 신경망을 학습한다면 원래 학습하여 나타난 출력보다 더 작은 값을 얻게 되고, 추론할 때의 노드 수가 다르게 된다. 이를 해결하기 위하여 추론할 때에는 학습할 때보다 평균적으로 1/p배 큰 입력을 받게 된다. 즉 p를 W에 곱하여 이를 상쇄한다. 이는 아래의 그림과 같다.
dropout은 신경망에서 활성화 함수 이후에 hyper-parameter p와 함께 사용한다. 또한 training 과정에서는 dropout이 동작하지만, validation 과정에서는 dropout이 동작하게 하면 안 된다. training에서 학습한 파라미터를 가지고 학습해야 하기 때문이다. 따라서 학습 과정에서 모델의 모드 전환이 꼭 필요하다. 이 방식은 generalization error를 감소시킬 수 있지만, 학습 속도가 저하할 수 있다는 단점이 있다.
2. 4. Batch Normalization
이전까지 설명한 regularization 방법들은 보통 학습 속도가 느려지게 되는 단점이 있다. 또한 Internal Convariance Shift 문제가 발생한다. 이 문제는 파라미터가 backward하면서 업데이트될 때 발생하는 문제로, backward는 feedforward와 반대로 흘러가기 때문에 발생한다. 초기 θ_1의 출력에 대해서 θ_2의 파라미터를 조정했는데, θ_1의 파라미터 또한 변경되면서 이에 따른 출력값이 변화되어 θ_2는 불안정한 파라미터가 될 수 있다. 이를 해결하기 위한 방법이 Batch Normalization이다.
batch normalization은 정규화를 하고 shifting과 scaling을 수행한다. 먼저 정규화는 각 미니배치에서 입력 데이터의 평균을 0으로 만들고, 분산을 1로 만든다(정규분포화). 이는 데이터를 표준 정규 분포로 정규화하는 역할을 한다. 다음으로 shifting과 scaling을 통하여 새로운 값을 얻는다. 이 값은 학습 가능한 가중치인 γ(스케일)와 β(시프트)를 사용하여 조절된다. 평균과 표준편차, 를 구하여 정규화하고, shifting과 scaling하는 것은 다음 수식과 같이 진행된다. 각각 순서대로 평균, 표준편차, shifting 및 scaling을 나타낸다.
$$\mu = x.mean(dim = 0)$$ $$ \sigma = x.std(dim = 0)$$ $$y = \gamma \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}}+\beta$$
위의 마지막 수식에서 스케일과 곱해지는 분수는 standardization을 의미하고, 마지막 수식 전체는 scale과 shift를 조절하여 학습에 유리한 정규분포를 만든다.
batch normalization은 주로 활성화 함수를 통과하기 전에 적용되고, 각 층의 입력을 정규화하여 gradient vanishing 및 exploding 문제를 완화한다. 또한, 가중치 초기화에 더 자유로워지게 해 주고, 학습률을 크게 설정할 수 있어 학습 속도를 높이는 데 도움을 줄 수 있다.
이 방법 또한 학습과 추론의 방법이 다르게 된다. 학습에서는 미니배치 내에서 μ와 σ를 계산하기 때문에 batch size는 항상 1보다 커야한다. 추론에서는 미니배치 내에서 계산하면 전체의 분포를 알 수 있으므로 다음 입력을 보는 것과 같다. 따라서 추론에서는 μ와 σ를 계산하지 않는 것에 주의해야한다.
이 방법은 hyper-parameter의 추가 없이 빠른 학습과 높은 성능을 모두 보장한다. 또한 dropout과 마찬가지로 모델의 모드 전환이 필요하다. 주의할 점은 시계열 데이터나 시퀀스 데이터와 같은 RNN에서 사용할 수 없다는 것이다. RNN에서는 Layer Normalization을 사용한다.
'Lecture or Textbook Review > Deep Learning' 카테고리의 다른 글
[Deep Learning] Probabilistic Perspective (0) | 2024.02.23 |
---|---|
[Deep Learning] Representation Learning (0) | 2024.02.22 |
[Deep Learning] Classification (0) | 2024.02.04 |
[Deep Learning] Overfitting (과적합) (0) | 2024.02.03 |
[Deep Learning] Hyper-Parameter & Optimizer (0) | 2024.02.02 |