Optimization¶
1️⃣ Generalization¶
Training error가 줄었다고 해서 항상 최적값에 도달했다는 보장은 없다. 일반적으로 Training error가 줄어들지만 시간이 지나면 Test error(학습에 사용하지 않은 데이터)에 대해서는 성능이 떨어지게 된다. Training error와 Test error사이의 차이를 Generalization gap이라고 한다. Generalization이 좋으면 Training error와 Test error의 차이가 적다.
2️⃣ Under-fitting vs over-fitting¶
일반적으로 학습데이터에는 잘 동작하지만 테스트 데이터에서 잘 동작하지 않는 것을 overfitting이라고 한다. 네트워크가 너무 간단하거나 train을 너무 조금 시켜서 학습데이터도 맞추지 못하는걸 underfitting이라고 한다.
3️⃣ Cross validation¶
train data에서 일부를 학습에 사용하지 않고 Validation data로 두어 얼마나 성능이 좋은지 보게 된다.
✅ 이때 Validation data는 얼만큼 써야할까?
Validation data를 너무 많이 쓰면 train data가 부족하여 학습이 잘 안이루어 질 수있다. 반대의 경우는 검증이 제대로 이루어 지지 않을 수 있다. 이때 사용하는 기법은 각 데이터를 n개의 fold로 나누어서 각 fold에 대해서 검증을 진행한다. 예를들어 5개의 fold로 나누었으면 1~4번 fold로 학습를 진행하고 5번 fold를 검증 데이터로 사용한다. 그다음은 1,2,3,5번 fold를 이용해서 학습을 진행하고 4번 fold를 검증데이터를 사용한다. 이렇게 1번 fold까지 검증을 진행한다. 이러면 5번의 검증이 일어나고 좀더 일반적인 검증이 가능하다.
4️⃣ Bias-variance tadeoff¶
Variance 내가 어떤 입력을 넣었을때 출력이 얼마나 일괄적으로 나오는지를 이야기한다. 간단한 모델들은 Variance가 낮게 나올 것이다. Variance가 높은 모델은 비슷한 입력이 들어와도 출력이 크게 달라지는 모델이다. 이렇게 되면 overfitting될 가능성이 크다. Bias는 평균적으로 봤을때 주요 타겟에 근접해 있는지를 나타낸다. Bias가 낮은건 평균하고 타겟이 가까이 있을때이고 Bias가 높은건 평균하고 타겟이 멀리있을때이다.
Cost는 bias, variance, noise로 구성되어 있다. 이때 bias를 많이 줄이게 되면 variance가 높아질 가능성이 크고 반대로 variance를 줄이게 되면 bias가 높아질 가능성이 크다. 학습 데이터의 noise가 껴있는 경우 bias와 variance를 둘다 줄일수 있는 모델은 얻기가 힘들다.
5️⃣ Bootstraping¶
부트 스트랩핑은 무작위 샘플링을 사용하는 여러 모델을 만들어서 무언가 하겠다는 것.
6️⃣ Bagging and boosting¶
그림으로 보면 아래와 같다.
Gradient Descent Methods¶
- Stochastic gradient descent
- 하나의 sample을 가지고 gradient를 계산한다.
- Mini-batch gradient descent
- 데이터의 subset을 가지고 gradient를 계산한다.
- Batch gradient descent
- 전체 데이터를 가지고 gradient를 계산한다.
논문에 의하면 큰 batch size에 대해서 Sharp Minimum에 도달하고 작은 batch size에 대해서는 Flat Minimum에 도달한다고 한다. ✅ 이때 그럼 뭐가 더 좋은가?
위 그림을 보면 Flat Minimum에 도달하면 테스트 데이터에 대해서는 조금 벗어나도 큰 차이가 없지만 Sharp Minimum의 경우 조금만 벗어나도 큰 차이가 발생한다. batch size를 작게하면 좀 더 일반화가 가능하다.
1️⃣ Stochastic gradient descent¶
여기서 문제는 Learning rate를 잡는 것이 어렵다. 크게되면 학습이 안되고 너무 작으면 아무리 학습해도 학습이 안된다. 여기서 발전된 것이 다음 설명이다.
2️⃣Momentum¶
그 전의 gradient에 momentum값을 곱해서 사용한다.
3️⃣ Nesterov Accelerated Gradient¶
컨셉만 놓고 보면 Momentum과 비슷하다. a라고 불리는 현재 정보가 있으면 한번 이동하고 그 이동한 곳에서 gradient를 계산해서 더해준다. 봉우리에 좀 더 빠르게 도달하게 된다.
4️⃣ Adagrad¶
뉴럴 네트워크의 파라미터가 얼만큼 지금까지 많이 변했나를 본다. 뉴럴 네트워크 파라미터가 많이 변한 파라미터에 대해서는 적게 변화시키고 안 변한 파라미터는 많이 변화 시킨다.$G_{t}$로 나눠주게되면 적은 변화는 크게 바뀌고 큰 변화는 작게 바뀌게 된다. $\epsilon$은 0으로 안나눠지게 만드는 값이다.
✅ 여기서 가장 큰 문제는 $G_{t}$는 계속 커지게 되기 때문에 나중에는 $W$가 업데이트가 잘 안된다. 뒤로 갈수록 학습이 멈춘다.
5️⃣ Adadelta¶
$G_{t}$를 다른 방법으로 계산한 것이다.
6️⃣ RMSprop¶
Adadelta의 $G_{t}$값을 Adagrad식에 넣은 모양이다.
7️⃣ Adam¶
Regularization¶
1️⃣ Early stopping¶
학습에 사용하지 않은 데이터로 검증을 할때 Error가 증가할때 일찍 멈춘다.
2️⃣ Parameter norm penalty¶
파라미터 값이 너무 커지지 않게 한다. 파라미터를 제곱하여 더한 값을 cost function에 추가하여 같이 줄인다. 부드러운 함수로 만들기 위해서
3️⃣ Data augmentation¶
데이터가 많을수록 더 좋은 모델이 만들어진다. 따라서 기존 데이터를 통해서 더 데이터를 만들어 낸다.
4️⃣ Noise robustness¶
입력 데이터의 노이즈를 추가해서 만든다. 실험적 결과!!
5️⃣ Label smoothing¶
Mix-up
- 무작위로 선택된 두개의 훈련데이터의 입력 및 출력을 혼합하여 data augmentation
CutMix
- 잘라 내기 및 붙여 넣기로 data augmentation
6️⃣ Dropout¶
랜덤으로 몇개의 뉴런을 0으로 만든다. 이 효과로 좀 더 일반화가 가능해 진다.
7️⃣ Batch normalization¶
각 차원(레이어)에 대해 독립적으로 정규화 한다. 이러면 좀 더 좋은 성능을 발휘한다.
'AI > 이론' 카테고리의 다른 글
Computer Vision Applications (0) | 2021.02.03 |
---|---|
CNN - 1x1 Convolution (0) | 2021.02.03 |
CNN - Convolution (0) | 2021.02.03 |
CNN Preview (0) | 2021.02.02 |
뉴럴 네트워크 - MLP(이론) (0) | 2021.02.01 |
PyTorch basic (0) | 2021.02.01 |
베이즈 통계학 (0) | 2021.02.01 |
통계학 (0) | 2021.01.29 |