Optimization

Optimization


1️⃣ Generalization

image.png 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이라고 한다.

image.png



3️⃣ Cross validation

image.png

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

image.png

Variance 내가 어떤 입력을 넣었을때 출력이 얼마나 일괄적으로 나오는지를 이야기한다. 간단한 모델들은 Variance가 낮게 나올 것이다. Variance가 높은 모델은 비슷한 입력이 들어와도 출력이 크게 달라지는 모델이다. 이렇게 되면 overfitting될 가능성이 크다. Bias는 평균적으로 봤을때 주요 타겟에 근접해 있는지를 나타낸다. Bias가 낮은건 평균하고 타겟이 가까이 있을때이고 Bias가 높은건 평균하고 타겟이 멀리있을때이다.


image.png

Costbias, variance, noise로 구성되어 있다. 이때 bias를 많이 줄이게 되면 variance가 높아질 가능성이 크고 반대로 variance를 줄이게 되면 bias가 높아질 가능성이 크다. 학습 데이터의 noise가 껴있는 경우 bias와 variance를 둘다 줄일수 있는 모델은 얻기가 힘들다.



5️⃣ Bootstraping

부트 스트랩핑은 무작위 샘플링을 사용하는 여러 모델을 만들어서 무언가 하겠다는 것.



6️⃣ Bagging and boosting

Bagging(Bootstrappping aggregating)

  • 부트 스트랩핑을 통해 여러 모델들을 만든다.
  • 예) 기본 분류기의 경우 여러 모델을 만들어서 투표 또는 평균을 통해 개별 값을 만든다.
  • 이것을 일반적으로 앙상블이라고 불리기도 함.

Boosting

  • 기본적인 모델을 하나 만들어서 학습을 진행하고 그 모델에서 학습이 잘 안된 데이터를 집중적으로 새로운 모델링을 한다.
  • 이렇게 여러개의 모델을 Sequential하게 묶어서 하나의 모델을 만드는 것.

그림으로 보면 아래와 같다.

image.png



Gradient Descent Methods

  • Stochastic gradient descent
    • 하나의 sample을 가지고 gradient를 계산한다.
  • Mini-batch gradient descent
    • 데이터의 subset을 가지고 gradient를 계산한다.
  • Batch gradient descent
    • 전체 데이터를 가지고 gradient를 계산한다.

image.png

논문에 의하면 큰 batch size에 대해서 Sharp Minimum에 도달하고 작은 batch size에 대해서는 Flat Minimum에 도달한다고 한다. ✅ 이때 그럼 뭐가 더 좋은가?
위 그림을 보면 Flat Minimum에 도달하면 테스트 데이터에 대해서는 조금 벗어나도 큰 차이가 없지만 Sharp Minimum의 경우 조금만 벗어나도 큰 차이가 발생한다. batch size를 작게하면 좀 더 일반화가 가능하다.


1️⃣ Stochastic gradient descent

image.png

여기서 문제는 Learning rate를 잡는 것이 어렵다. 크게되면 학습이 안되고 너무 작으면 아무리 학습해도 학습이 안된다. 여기서 발전된 것이 다음 설명이다.


2️⃣Momentum

image.png

그 전의 gradient에 momentum값을 곱해서 사용한다.


3️⃣ Nesterov Accelerated Gradient

image.png

컨셉만 놓고 보면 Momentum과 비슷하다. a라고 불리는 현재 정보가 있으면 한번 이동하고 그 이동한 곳에서 gradient를 계산해서 더해준다. 봉우리에 좀 더 빠르게 도달하게 된다.


4️⃣ Adagrad

image.png

뉴럴 네트워크의 파라미터가 얼만큼 지금까지 많이 변했나를 본다. 뉴럴 네트워크 파라미터가 많이 변한 파라미터에 대해서는 적게 변화시키고 안 변한 파라미터는 많이 변화 시킨다.$G_{t}$로 나눠주게되면 적은 변화는 크게 바뀌고 큰 변화는 작게 바뀌게 된다. $\epsilon$은 0으로 안나눠지게 만드는 값이다.

✅ 여기서 가장 큰 문제는 $G_{t}$는 계속 커지게 되기 때문에 나중에는 $W$가 업데이트가 잘 안된다. 뒤로 갈수록 학습이 멈춘다.


5️⃣ Adadelta

image.png

$G_{t}$를 다른 방법으로 계산한 것이다.


6️⃣ RMSprop

image.png

Adadelta의 $G_{t}$값을 Adagrad식에 넣은 모양이다.


7️⃣ Adam

image.png



Regularization


1️⃣ Early stopping

image.png

학습에 사용하지 않은 데이터로 검증을 할때 Error가 증가할때 일찍 멈춘다.


2️⃣ Parameter norm penalty

image.png

파라미터 값이 너무 커지지 않게 한다. 파라미터를 제곱하여 더한 값을 cost function에 추가하여 같이 줄인다. 부드러운 함수로 만들기 위해서


3️⃣ Data augmentation

image.png

데이터가 많을수록 더 좋은 모델이 만들어진다. 따라서 기존 데이터를 통해서 더 데이터를 만들어 낸다.


4️⃣ Noise robustness

image.png

입력 데이터의 노이즈를 추가해서 만든다. 실험적 결과!!


5️⃣ Label smoothing

image.png

Mix-up

  • 무작위로 선택된 두개의 훈련데이터의 입력 및 출력을 혼합하여 data augmentation

CutMix

  • 잘라 내기 및 붙여 넣기로 data augmentation


6️⃣ Dropout

image.png

랜덤으로 몇개의 뉴런을 0으로 만든다. 이 효과로 좀 더 일반화가 가능해 진다.


7️⃣ Batch normalization

image.png

각 차원(레이어)에 대해 독립적으로 정규화 한다. 이러면 좀 더 좋은 성능을 발휘한다.

image.png

'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

+ Recent posts