Generalization(일반화)
반복 횟수에 따른 error 그래프를 training과 text로 비교해보면 다음과 같다.
여기서 Generalization gap을 Generalization Performance라 한다. 즉, training error와 text error의 차이를 말한다. 이때 학습데이터의 성능이 현저히 떨어진다면 Generalization Performance가 좋다고 테스트 성능이 좋은 것 이라고 판단할 수 없다. 다시 말해 학습데이터가 제대로된 성능을 갖춘 것을 전제로 Generalization Performance를 판단할 수 있는 것이다.
Underfitting & Overfitting
간단히 말해서 Underfitting은 너무 학습이 적게 된 것이고 Overfitting은 너무 학습이 많이 된 것을 의미한다. 자세한 설명은 이전에 작성한 과대적합과 과소적합을 보자.
Cross-validation
Cross-validation(교차 검증)은 n번의 검증 과정을 통해 학습 데이터의 모든 데이터를 한 번씩 검증 데이터로 사용해서 n개의 검증 결과를 평균낸 값을 구하는 것이다. 이전에 작성한 혼동행렬과 교차 검증을 참고하자.
Bias and Variance
다음 그림을 확인해보면 Variance(분산)은 커질수록 점들이 서로 퍼져있는 것을 볼 수 있고 Bias(편향)은 커질수록 중심에서 멀어지는 것을 확인할 수 있다.
- Tradeoff
과소적합된 모델은 '편향되었다'라고 하고 과대적합된 모델은 '분산이 크다'라고 한다. 이때 과소적합된 모델(편향)과 과대적합된 모델(분산)사이의 관계를 편향-분산 트레이드오프(bias-variance tradeoff)라고 한다. 트레이드오프라는 말이 들어간 이유는 '하나를 얻기 위해서는 다른 하나를 희생해야 하기 때문'이다. 즉, 편향-분산 드레이드오프란 편향을 줄이면(훈련 세트의 성능을 높이면) 분산이 커지고(검증 세트와 성능 차이가 커지고) 반대로 분산을 줄이면(검증 세트와 성능 차이를 줄이면) 편향이 커지는 (훈련 세트의 성능이 낮아진다는) 것을 말한다. 따라서 분산이나 편향이 너무 커지지 않도록 그 중간 지점을 선택해야 한다. 그리고 이런 행위를 '적절한 편향-분산 트레이드오프를 선택했다'라고 한다. 수식으로는 다음과 같이 나타낼 수 있다.
Bootstrapping
우선 데이터를 여러 개로 나누고 각 데이터로 모델들을 여러 개 만든다. 이 모델들로 예측한 값의 일치성을 확인하고 전체적인 모델들의 uncertainty(불확실성)을 예측하는 것이다. 간단히 말하면 데이터를 여러 개로 나누고 각 데이터로 모델들을 만든 후 무언가를 하는 것이다. 또는 부트스트랩은 데이터를 조금은 편향되도록 샘플링하는 기법이라고도 설명한다.
Bagging & Boosting
Bagging의 경우 여러 개의 모델을을 가지고 나온 예측값들로 평균을 내서 더 좋은 성능을 가진 모델을 만드는 기법이다. 그리고 Boosting은 하나의 모델을 학습하고 이 모델이 부족한 부분을 다음 모델에서 보완하여 학습하고 그 다음 모델에도 똑같이 반복해서 학습하는 것을 말한다. Bootstrap과 Bagging & Boosting에 대한 내용은 이전에 작성한 글 [앙상블] 배깅(bagging)과 부스팅(boosting) 을 참고하자.
Gradient Descent
Gradient Descent는 일반적으로 다음과 같이 세 가지로 나눌 수 있다.
- Stochastic gradient descent : 하나의 샘플을 가지고 gradient 계산
- Mini-batch gradient descent : 하나의 데이터 집합을 가지고 gradient 계산
- Batch gradient descent : 전체 데이터를 가지고 gradient 계산
여기서 Stochastic gradient descent는 하나의 샘플로 계산을 하기 때문에 상당히 시간이 많이 걸리고 Batch gradient descent도 또한 전체 데이터를 가지고 계산하기 때문에 시간이 많이 걸린다. 따라서 대부분 Mini-batch gradient descent를 많이 사용한다.
Batch-size Matters
"On Large-batch Training for Deep Learning: Generalization Gap and Sharp Minima, 2017"라는 논문에서 다음과 같은 내용이 있다.
"We ... present numerical evidence that supports the view that
large batch methods tend to converge to sharp minimizers of the
training and testing functions. In contrast, small-batch methods
consistently converge to flat minimizers... this is due to the
inherent noise in the gradient estimation."
간단히 해석해보면 "큰 배치 사이즈를 사용하면 sharp minimizer에 도달하고 작은 배치 사이즈를 사용하면 flat minimizer에 도달한다"라는 내용이다. 즉, 작은 배치를 사용하면 flat minimizer에 도달하기 때문에 배치 사이즈를 작게하는 것이 성능이 좋다는 내용이다. 이때 sharp minimizer와 flat minimizer를 다음 그림을 보고 이해해보자.
위에서처럼 Sharp Minimum일 경우 Training Function에서의 값과 Testing Function에서의 값이 서로 차이가 많이 나지만 Flat Minimum의 경우는 차이가 작게 나는 것을 확인할 수 있다. 따라서 위에서 말한 flat minimizer에 도달한다는 내용을 이해할 수 있다.
Gradient Descent Methods
Gradient Descent Method에는 다음과 같이 7개가 있는데 각각 어떻게 개선되어왔는지 확인해보겠다.
- Stochastic gradient descent
- Momentum
- Nesterov accelerated gradient
- Adagrad
- Adadelta
- RMSprop
- Adam
1. Stochastic gradient descent
SGD는 다음과 같이 Gradient에 Learning rate를 곱하여 업데이트를 하는 방법을 사용한다.
2. Momentum
관성을 의미하며 경사하강법이 진행하는 방향으로 관성의 법칙에 따라 더 움직이는 방법을 말한다.
3. Nesterov accelerated gradient
일단 관성 방향으로 움직이고 움직인 자리에서 스텝을 계산하는 것이다.
4. Adagrad
계산한 곳은 step size를 줄이고 계산을 안한 곳은 step size를 크게 주어서 빠르게 진행하는 방법을 말한다.
5. Adadelta
Adagrad의 경우 한 곳에서 머무는 문제가 생겨 이러한 문제를 해결한 method이다. 여기서는 step size가 저절로 조정이 되기때문에 수식에 따로 없다.
6. RMSprop
Adagrad에서 step size를 곱한 방법을 말한다.
7. Adam
momentum의 특징과 스텝 사이즈를 조정하는 특징을 모두 합친 방법을 말하며 가장 많이 사용하는 method이다.
Regularization
정규화는 오버피팅을 방지하기위한 방법이고 다음과 같은 것들이 있다.
1. Early stopping
오버피팅이 일어나기 전에 일찍 학습을 멈추는 방법을 말한다.
2. Parameter Norm Penalty
다음과 같이 패널티를 주어서 오버피팅이된 함수를 smoothness하게 만들어주는 것을 말한다.
3. Data Augmentation
더 많은 데이터를 만들어내는 방법을 말하는데 예를 들어서 하나의 이미지를 여러 각도로 돌리거나 이동시키거나 해서 약간의 다른 이미지를 만들어내는 것이라고 생각하면 된다.
4. Noise Robustness
이미지에 랜덤한 noise를 집어넣게되면 좀 더 성능이 좋게 나온다고 한다.
5. Label Smoothing
결정 경계선을 좀 더 부드럽게 만들어주는 역할을 해준다.
Mix-up : 학습 데이터를 두 개를 랜덤하게 뽑아서 섞는 방법을 말한다.
CutMix : 학습 데이터를 서로 일정 영역을 잘라 합친 방법을 말한다.
6. Dropout
드롭아웃은 각 layer에서 몇 개의 뉴런을 랜덤하게 골라서 0으로 만들어버리는 방법을 말한다.
7. Batch Normalization
평균과 분산을 가지고 전체 데이터를 0~1사이의 값으로 정규화하는 방법을 말한다.
'Boostcamp AI Tech' 카테고리의 다른 글
[Boostcamp Day-8] DL Basic - Modern CNN (0) | 2021.08.11 |
---|---|
[Boostcamp Day-8] DL Basic - Convolutional Neural Networks (0) | 2021.08.11 |
[Boostcamp 2주차] 피어세션과 학습 회고 (0) | 2021.08.09 |
[Boostcamp Day-6] Data Visualization - Python과 Matplotlib (2) | 2021.08.09 |
[Boostcamp Day-6] DL Basic - Multi-Layer Perceptron (0) | 2021.08.09 |