코딩하는 해맑은 거북이

딥러닝 기초 다지기 (2) 본문

AI

딥러닝 기초 다지기 (2)

#CJE 2022. 12. 25.
본 게시물의 내용은 '딥러닝 기초 다지기(부스트코스)' 강의를 듣고 작성하였다.
해당 글은 2. 최적화 3가지 파트를 다룬다.
1. 최적화의 주요 용어 이해하기
2. Gradient Descent Methods
3. Regularization

 

1. 최적화의 주요 용어 이해하기

* Gradient Descent

: First-order iterative optimization algorithm for finding a local minimum of a differentiable function. 

1차 미분한 값으로 계속 반복해서 최적화시키고, 항상 local minimum으로 간다

 

- Generalization, 일반화 성능

iteration 이 진행됨에 따라서 학습데이터에 대한 training error가 줄어들게 된다.

근데 training error가 0이 되었다해서 항상 원하는 최적값에 도달했다는 보장이 없다.

오히려 test error가 늘어나는 현상이 발생할 수 있음.
* Generalization gap = training error - test error

좋은 Generalization gap : 네트워크 성능이 학습데이터와 비슷하다.

but, 학습데이터의 성능 자체가 안좋으면 Generalization gap가 좋더라도 네트워크 성능이 좋다고 할 수 없다.


- Under-fitting vs over-fitting

Overfitting : train data에서 잘 동작하지만, test data에서 잘 동작하는 않는 현상
Underfitting : 지나친 단순화로 train data에서도 잘 동작하는 않는 현상


- Cross validation

보통은 train data, validation data로 나눠서 학습하고, 학습에 사용되지 않은 validation data (test data) 기준으로 얼마나 잘되는지 본다. 그럼 train data, validation data를 어떻게 나누면 좋을까? 이를 더 해결하기 위한 것이 Cross validation.

Cross Validation으로 최적의 하이퍼 파라미터셋을 찾고, 학습 시킬때는 모든 데이터를 다 사용한다.

그래야 더 많은 데이터를 가지고 학습할 수 있음. (test data를 학습에 이용되서는 안된다)

* k-Folds Cross Validation Method : k개 fold 를 만들어서 cross-validation을 시행하는 방법


- Bias-variance tradeoff

Low Variance : 어떤 입력에 대해 출력이 얼마나 일관적인지.

High Variance : overfitting 발생 가능성이 큼.

Low Bias : 같은 입력에 대해 출력이 많이 분산이 되더라도 평균적으로 봤을 때 어떤 특정타겟에 접근하게 되는 것.

High Bias : 원하고자 하는 타겟과 많이 벗어나는 것.

Bias-variance tradeoff : Bias를 낮추면 Variance가 높아지고, Variance를 낮추면 Bias가 높아진다.

즉, Bias와 Variance는 둘 다 낮추는 것은 어렵다.


- Bootstrapping

부츠의 신발끈을 위로 들어서 하늘을 날겠다..!

학습 데이터가 고정되어 있을 때, 전체 중에 일부를 뽑는 random sampling을 통해 학습 데이터를 여러개를 만들고,

이것으로 여러 sub-sample 들의 모델을 만들고, 전체 모델에 대해 각각의 예측값이 일치하는지 보는것


- Bagging and boosting

Bagging (Bootstrapping aggregating) : 학습 데이터가 고정되어 있을 때, 학습 데이터를 뽑아 여러 개로 만들고(Bootstrapping), 여러 모델들을 가지고 output 들의 평균(voting or averaging)을 내는 방법. → 앙상블기법
모델 한 개를 쓸 때보다 더 좋은 성능을 내는 경우가 많다.

 

Boosting : 학습 데이터가 100개가 있으면 이 중에서 간단한 모델을 하나 만들어서, 이를 학습 데이터에 대해서 돌려본다. 

다음 만드는 모델은 이전 모델에서 잘 안돌아가는 데이터에 대해서만 잘 동작하는 모델을 만든다.
각각의 모델을 weak learner로 불리는데,이를 sequencial 하게 합쳐서 하나의 strong learner를 만드는 것.

weak learner의 weight 를 찾는 식으로 모델을 업데이트하며 정보를 취합.

 


2. Gradient Descent Methods

- Gradient Descent Methods
1) SGD (Stochastic Gradient Descent) : Update with the gradient computed from a single sample.
한 번에 한 개만 gradient를 구해서(single sample) gradient를 업데이트 하는 방식을 반복

* 전체 데이터셋이 아닌 무작위로 추출한 샘플 데이터셋에 경사하강법을 진행하는 방법론

2) Mini-batch gradient descent : Update wih the gradient computed from a subset of data.
batch size마다의 sample에 대해 gradient를 구하고 업데이트 하는 방식을 반복

→ 대부분의 딥러닝에서 활용하는 방법

* 각 배치 안에서 미니배치를 활용하여 SGD를 진행하는 방법론


3) Batch gradient descent : 기존 배치 경사하강법
한 번에 다 써서, 모든 gradient의 평균값으로 업데이트 하는 방식

* 전체 데이터셋을 바탕으로 진행하기에 학습 수렴 속도가 느리다.

   이를 효율적으로 빠르게 최적화를 하기 위한 방법론들이 등장

    → SGD, Mini-batch gradient descent : 이를 통해 더 빠르게 최적값에 도달할 수 있다.

 

- Batch-size Matters

엄청나게 큰 batch size를 사용하게 되면 Sharp Minimizers에 도달하게 된다.
반대로 작은 batch size를 사용하게 되면 Flat Minimizers에 도달하게 된다.

≫ 일반적으로 batch size가 작게 쓰는게 성능이 좋다. 즉, Sharp Minimizers보다 Flat Minimizers에 도달하는게 좋다.

위의 그림 - 우리의 목적은 testing function 의 minimum 지점을 찾고 싶은 것.

Flat Minimum의 특징은 training function에서 조금 멀어져도 testing function에서도 적당히 낮은 값이 나온다.

그러나, Sharp Minimum은 training function에서 local minimum에 도달했어도, testing function에서는 약간만 멀어져도 높은 값이 나온다. training 단계에서 얻어지는 값들(accuracy, loss값)이 test 데이터 기준에서는 잘 동작하지 않을 수도 있다.

그래서 batch size를 줄이게 되면 일반적인 성능이 좋아진다는 것을 실험적으로 보이고, 그럼 큰 batch size를 활용하려면 어떻게 하면 좋을지에 대한 논문.

- Optimizer

1) Stochastic gradient descent

가장 기본적인 gradient descent.

가장 큰 문제는 learning rate 혹은 step size를 적절히 잡는게 어렵다.

W : weight


2) Momentum

관성이라는 뜻, 한번 → 방향으로 흐른다면 이 정보를 조금 더 이어가자는 것.

모멘텀이 포함된 gradient로 업데이트 하는 것.


3) Nesterov accelerated gradient (NAG)

Momentum은 현재 주어진 파라미터에서 gradient를 계산하고, 그 gradient로 momentum을 accumulation 함.

그러나, NAG는 한번 이동한 후에 그곳에서의 gradient를 계산하고, 그 gradient로 momentum을 accumulation 하는 것.

NAG는 Momentum보다 local minimum의 최하점에 더 빨리 도달할 수 있다.

 

 

#여기서 부터 adaptive 방법을 알아보자.
4) Adagrad

뉴럴네트워크의 파라미터가 얼만큼 지금까지 변해왔는지, 안변해왔는지 보는것.

많이 변한 파라미터에 대해서는 적게 변화시키고, 안변한 파라미터는 많이 변화시키고 싶은 것.

그럼 지금까지 파라미터가 얼만큼 변해왔는지에 대한 값을 저장해둬야하는데, 이것이 Gt이다.

문제는 Gt가 계속해서 커지기 때문에, 결국에는 Gt가 무한대로 가게되면 W가 업데이트가 되지 않음

즉, 뒤로 갈수록 학습이 점점 멈춰지는 현상 발생 → 이를 해결하기 위한 방법 : Adadelta


5) Adadelta

현재의 time step 을 의미하는 t 가 주어졌을 때, window size 만큼 시간에 대한 gradient의 제곱의 변화를 보겠다.

문제는 window size를 100으로 잡게 되면, 이전 100개의 Gt의 정보를 가지고 있어야 함.

이를 막기 위한 방법이 Exponential Moving Average (EMA, 지수이동평균)를 사용해서 Gt를 업데이트 할 수 있음.

가장 큰 특징으로 learning rate 값이 없다. 그래서 바꿀 수 있는 요소가 많이 없어서 잘활용되진 않음.

 

6) RMSprop

논문을 통해 제안된건 아니고 Geoff Hinton의 딥러닝 강의에서 제안한 것.

Adagrad에서 Gt를 그냥 더해주는 것이 아니라 EMA를 사용한 Gt값을 더해줌. 대신에 stepsize가 들어간다.

 

7) Adam (Adaptive Moment Estimation)

가장 무난하게 사용하는 것.

gradient를 EMA를 가져감에 동시에 Momentum을 같이 활용하는 것.

gradient의 크기에 따라 adaptive하게 학습하는 것과 이전에 gradient의 정보에 해당하는 momentum을 합친 것.

 

3. Regularization

: Generalization 을 잘 될 수 있도록 규제를 건다.

규제하는게 학습에 방해해서 학습 데이터뿐아니라 테스트 데이터에서도 잘 동작할 수 있도록 만들어 주는 것.

 

1) Early stopping

train에 활용하지 않은 데이터셋에 지금까지 활용된 모델의 성능을 확인해봤을 때, loss가 어느시점에서 커지기 시작하면 학습을 멈추는 것.

추가적인 validation data가 필요하다.


2) Parameter norm penalty

뉴럴네트워크의 파라미터가 너무 커지지 않게 하는 것.

(네트워크를 학습할 때, 숫자들이 작을 수록 좋기 때문에.)

function space에서 함수를 최대한 부드러운 함수로 보자. 부드러운 함수일수록 일반적인 성능이 좋을 것이다.

L1 Norm, L2 Norm등이 있으며 손실함수에 해당 Norm Penalty Term을 추가적으로 활용하여 정규화를 진행한다.

L1 Norm은 오차의 절댓값을 L2 Norm은 오차 제곱합을 활용합니다.


3) Data augmentation

주어진 데이터를 지지고볶아서 변화를 주어 데이터를 늘리는 것.

예를 들어, 강아지 이미지에 45도, 90도, 살짝 찌그러져도 강아지 이미지다. ≫ Label-preserving data

이렇게 변화를 주어도 이미지 라벨이 바뀌지 않는 한도 내에서 변화를 주는 것.

예를 들어, 숫자 분류에서 6을 뒤집으면 9가 되므로 라벨이 바뀌게 된다.


4) Noise Robustness

입력데이터 및 weight에 noise를 집어 넣는 것.

weight를 학습시킬때, weight에 noise를 집어넣으면 성능이 더 잘나온다는 실험결과가 있음.

레이어 중간에 노이즈를 추가하여 학습 효과를 높이고 과적합을 방지하는 방법론


5) Label smoothing

데이터 2개를 뽑아서 학습데이터를 한개만 보는게 아니라, 이 2개를 섞어주는 것.

효과는 일반적으로 분류 문제를 볼 때, 한 이미지 공간에서 2개를 잘 분류할 수 있는 plane(평면)을 찾아 이를 통해 분류를 잘되게 하는 것이 목적이다.

ex) Mixup, Cutout, cutMix


6) Dropout

뉴럴네트워크의 랜덤한 weight를 일반적으로 0으로 바꾸는 것.

학습 과정 중 신경망의 뉴런 중 일부를 랜덤하게 부분적으로 생략하는 방법론으로 학습이 진행될 때마다 뉴런을 무작위로 학습하여 매번 모델을 다르게 학습시킨다는 관점에서 앙상블 기법과 유사한 효과를 낸다.


7) Batch Normalization

내가 적용하고자 하는 layer에 Statistics를 정교화 시키는 것.

일반적으로 layer가 깊게 쌓여져 있을 때, batch normalization을 활용하면 성능이 많이 올라간다.

배치단위간에 데이터 분포의 차이가 발생할 수 있기에, 학습 과정에서 각 배치 별로 데이터의 평균과 분산을 이용해 정규화를 진행하는 방법론으로 각 데이터 분포를 평균은 0, 표준편차는 1인 데이터의 분포로 조정한다.

Normalization 종류

 

'AI' 카테고리의 다른 글

딥러닝 기초 다지기 (4)  (0) 2022.12.26
딥러닝 기초 다지기 (3)  (0) 2022.12.25
딥러닝 기초 다지기 (1)  (0) 2022.12.25
인공지능(AI) 기초 다지기 (8)  (0) 2022.12.23
인공지능(AI) 기초 다지기 (7)  (0) 2022.12.19
Comments