유승훈

lec07 - Application and Tips 본문

강의정리/모두를 위한 딥러닝 시즌 2

lec07 - Application and Tips

seunghuni96 2021. 2. 16. 18:46

앞서 배웠던 머신러닝에서 개념적인 부분이 아니라 실제 적용을 위해서 필요한 내용들을 살펴봅니다.

 

Gradient Descent. 경사하강법에서 Learning Rate는 기울기로 Weight를 업데이트할 때 기울기를 얼만큼 반영할지에 대한 지표입니다. Tensorflow에서도 기울기와 Learning Rate를 통해 실제 모델값을 최적의 값으로 업데이트 할 수 있습니다. 

 

이 Learning Rate에 따라 모델의 학습 성능이 달라집니다. 보통은 0.01의 작은 값을 사용합니다. 꼭 0.01을 써야 하는 것은 아니고, 적절한 값을 찾아야 합니다.

 

너무 큰 Learning Rate는 Cost가 낮아지는 것이 아니라 오히려 커지는 방향으로 업데이트가 이루어질 수 있습니다.

너무 작은 Learning Rate는 모델이 학습되는데 너무 오랜 시간이 소요될 수 있습니다. 업데이트의 보폭이 작아지기 때문에 최소값으로 가는 과정이 길어지는 것입니다.

 

앞서 적절한 Learning Rate를 찾는 것이 필요하다고 이야기했습니다.

 

모델을 학습하면서 같은 Learning Rate를 쓸 수도 있지만, 학습하면서 값을 조절할수도 있습니다. 사실 Gradient Descent 알고리즘에서 학습의 처음부터 끝까지 같은 Learning Rate를 사용하는 것은 적절하지 않다는 생각도 듭니다. 보통 위의 그림과 같이 Convex한 구조에서 해를 찾기 위해 사용되는 것이 Gradient Descent인데, 경사를 따라 내려갈수록 같은 보폭으로 업데이트 하는 것은 비효율적인 것 같습니다. 내려갈수록 보폭을 줄여야 하는 것입니다.

 

같은 맥락에서 학습을 계속해서 진행하다보면 Cost가 떨어지지 않는 상황이 발생합니다. 보폭이 너무 커서 더 밑으로 내려갈 수 없는 것입니다. 따라서 Cost가 감소하지 않는 시점이 오면 Learning Rate를 떨어뜨리는 방식이 있는데, 이를 Learning Rate Decay라고 합니다.

 

다음은 Scaling에 대해서 알아보겠습니다.

Feature Scaling은 단위나 수치적인 차이가 모델의 학습을 방해하면서 성능을 떨어뜨릴 수 있습니다. 컬럼 간의 다른 측정단위(키, 몸무게 등)로 인한 차이나 컬럼 내의 이상치 문제를 해결하는 방법이 됩니다. 다양한 Scaler가 있지만, 많이 쓰이는 Scaler로는 두 가지가 있습니다. 수식으로 되어있지만, 정형데이터 뿐 아니라 Text나 Image같은 비정형 데이터에서도 사용됩니다. 모델의 학습에 필요없는 데이터에서 우리가 정말 필요한 데이터만 뽑아내는데도 활용될 수 있습니다.

 

다음은 Overfitting입니다.

 

학습이 반복될수록, 모델은 우리의 가설에 맞게 학습해나가면서 Accuracy가 올라갑니다. 만약 Train Accuracy로만 모델의 성능을 평가하여 파라미터를 수정한다면, 모델을 만드는데 사용된 데이터로만 모델을 평가한 것이기 때문에 해당 데이터에만 잘 맞는 모델이 만들어질 가능성이 높습니다. 이러한 상황을 과적합, Overfitting이라고 합니다. 우리는 모델을 만들어서 나중에 들어올 새로운 데이터를 예측하고자 하는 것이기 때문에 모델이 과적합 되는 것은 좋은일이 아닙니다. 

 

보통은 데이터를 Train/Valid로 나누곤 합니다. Train 데이터로 모델을 만들고, Valid 데이터를 통해 평가하며 모델을 개선해나갑니다. 물론 이렇게 만들어진 모델 또한 Valid 데이터만 잘 예측하는 모델이 될 수 있기 때문에, 요즘은 다양한 방식의 Cross Validation이 활용됩니다. 앞서 말했던 Valid Dataset을 활용하는 방법도 Holdout method로 일종의 Cross Validation으로 분류됩니다. 그 외에도 데이터를 여러 조각으로 나누어서 모델을 여러번 테스트한 뒤, 평균을 내서 평가하는 K-Fold, 각 조각의 특정 변수의 분포를 데이터셋과 동일하게 추출해서 검증하는 Stratified K-Fold 등이 있습니다.

 

Overfitting 문제를 해결하는 방법에는 여러가지가 있습니다. 앞서 언급했던 Feature Scaling도 Overfitting 문제를 해결하는 길이 되기도 합니다. 학습 과정에서 Weight를 업데이트하는 과정에서 Term을 통한 정규화로 Overfitting을 방지할 수 있습니다. 다른 Weight들에 비해 너무 큰 Weight가 있을 때, 그 크기를 정규화함으로서 Overfitting이 방지됩니다.

 

앞서 얘기했던 방법들 외에도, 데이터를 더 추가하는 방법도 있습니다. 데이터가 적을때 그 데이터가 가진 어떤 패턴이나 노이즈까지 모델에 학습되기 쉽기 때문입니다. 만약 데이터를 추가할 수 없다면, Data Augmentation이라는 기법을 통해서 데이터를 더 확보할수도 있습니다. 이외에도 Dropout이나 Batch Normalization이라는 방법이 있는데, 두 가지는 Neural Network에 대한 강의에서 배울 예정입니다.

Comments