본문 바로가기
Book Review/[케라스 창시자에게 배우는 딥러닝] 리뷰

머신러닝의 목표: 일반화

by 3n952 2023. 1. 11.

머신러닝의 근본적인 이슈는 최적화일반화 사이의 줄다리기입니다.

최적화란 가능한 훈련 데이터에서 최고의 성능을 얻기 위해 모델을 조정하는 것이며(학습),

일반화란 훈련된 모델이 이전에 본 적 없는 데이터에서 얼마나 잘 수행되는 지를 의미합니다.

따라서 머신러닝의 목표는 결국 좋은 일반화 성능을 얻는 것입니다.

 

그렇다면 일반화 성능을 높이려면 어떻게 해야 할까요?


-과소적합과 과대적합

일반화 성능을 높이기 전에 과소적합과 과대적합의 개념에 대해 알 필요가 있습니다.

 

훈련 초기에 최적화와 일반화는 상호 연관적입니다.

훈련 데이터의 손실이 낮아질수록 테스트 데이터의 손실도 낮아집니다.

이런 상황이 발생할 때, 모델은 과소적합(underfitting)되었다고 말합니다.

즉, 모델의 성능이 계속 발전될 여지가 있는 것을 의미합니다.

 

하지만, 훈련 데이터에서 훈련을 반복하고 나면 검증 세트의 성능이 멈추고 감소되기 시작하며, 

일반화 성능이 높아지지 않습니다. 훈련 데이터에 특화된 패턴을 학습하기 시작했다는 의미입니다.

이를 모델이 과대적합(overfitting) 되었다고 말합니다.

 

과소적합과 과대적합

 

-훈련 성능 향상

일반화의 성능을 높이기 위해선 우선 모델을 훈련시켜야 합니다.

훈련 성능을 향상하기 위해서는 모델이 먼저 과대적합되어야 합니다.

과대적합이 되는 모습을 보여야 과소적합, 과대적합의 경계가 어디인지 알 수 있기 때문입니다.

일반적으로 과소적합이 끝나고 과대적합이 시작되는 경계가 최적으로 적합한 모델이라고 할 수 있습니다.

따라서 초기의 목표는 적합한 모델을 얻어 과대적합과 싸워 일반화 성능을 개선하는 것입니다.

 

이때 일반적으로 발생하는 문제가 있습니다.

1. 훈련이 안된다

-> 시간이 지나도 훈련 손실이 감소하지 않는다.

 

2. 훈련은 잘 되지만 모델이 의미 있는 일반화를 달성하지 못한다

-> 과소, 과대 적합의 경계를 찾지 못한다.

 

이러한 문제를 해결하는 방법은 다음과 같습니다.

(약간의 일반화 능력이 있고 과대적합할 수 있는 모델을 얻는 것)

1. 경사 하강법의 핵심 파라미터 튜닝: 옵티마이저 선택, 모델 가중치의 초깃값 분포, 학습률, 배치 크기 조절하기

2. 구조에 대한 가정 향상하기: 문제에 대한 올바른 가정을 하는 모델을 사용하기(ex. 이미지 데이터 종류에는 합성곱 신경망 구조)

3. 모델의 용량을 늘리기: 모델의 표현 능력을 키우기. (층을 추가하거나 층의 크기를 늘리거나 등등)

 

 

-일반화 성능 향상

앞서 훈련 성능을 향상했다면 이제 일반화 성능을 극대화할 수 있습니다.

 

1. 데이터셋 큐레이션

 

딥러닝의 일반화를 위해서는 적절한 데이터셋으로 작업이 이뤄져야 합니다.

데이터가 충분해야 하며, 레이블 할당 에러가 최소가 되어야 하고, 데이터에 누락된 값을 처리해야 합니다.

이를 데이터셋 큐레이션이라고 합니다.

데이터셋 큐레이션을 통해 딥러닝의 일반화 성능이 향상될 수 있습니다.

 

2. 특성 공학

 

특성 공학이란 데이터와 머신 러닝 알고리즘 사이에 관한 지식을 사용하는 것입니다.

모델에 데이터를 주입하기 전 변환을 적용하여 알고리즘이 더욱 잘 수행되도록 하는 것입니다.

 

예를 들어 시계 이미지의 원본 픽셀을 입력으로 받아 시간을 계산하는 모델을 개발한다고 가정해 보겠습니다.

이를 위해서는 합성곱 신경망을 사용해야 하며, 컴퓨팅 자원도 꽤 많이 필요할 것입니다.

하지만 우리가 시계 표현에 대한 문제를 잘 이해하고 있다면 시간 계산 머신 러닝 알고리즘을 위해 더 좋은 

입력 특성을 만들 수 있을 것입니다.

 

픽셀을 따라 바늘 끝의 (x, y)좌표를 출력하는 것이죠. 이 좌표와 적합한 시간의 관계를 머신 러닝 알고리즘을 사용하여 학습하는 것입니다.

 

하지만 이보다 더 좋은 특성을 만들 수 있습니다.

바로 (x,y) 포인트를 이미지 중심에 대한 극좌표로 나타내는 것입니다.

각 시곗바늘의 각도가 입력되면 간단한 연산만으로도(머신 러닝 x) 적절한 시간을 추정할 수 있을 것입니다.

 

이것이 특성 공학의 핵심입니다. 특성을 더 간단한 방식으로 표현하는 것입니다.

 

3. 조기종료 

 

모델을 끝까지 훈련하면 결국 훈련 손실이 최솟값에 도달하기 훨씬 전에 훈련을 중단하게 됩니다.

훈련 중 일반화 성능이 가장 높은 최적적합의 지점은 과소와 과대 적합의 경계에 있기 때문입니다.

따라서 앞서 말한 것처럼 이 경계를 찾는 것이 가장 효과적입니다.

이때 필요한 개념이 조기종료(early stopping)입니다.

 

최상의 검증 점수를 내는 에포크 횟수를 찾아 모델을 훈련하면,

그 에포크 횟수에 맞춰 모델을 다시 훈련했습니다.

이렇게 번거로운 방법 대신 에포크가 끝날 때마다 모델을 저장하고 최상의 에포크를 찾은 후 저장된 모델을 재사용할 수 있습니다.

케라스에서는 일반적으로 EarlyStopping callback을 사용하여 이를 처리합니다.

검증 지표가 더 이상 향상되지 않으면 바로 훈련을 중지하고 그전까지 최상의 검증 점수를 낸 모델을 남기는 것입니다.

 

 

4. 모델 규제하기

 

규제(regularization) 기법은 훈련 데이터에 완벽하게 맞추려는 모델의 능력을 방해하는 것입니다.

이를 통해 모델의 검증 점수를 향상하는 것이 주목적입니다.

 

- 가중치 규제하기

간단한 모델이 복잡한 모델보다 덜 과대적합될 가능성이 높습니다.

심지어 너무 간단하면 과대적합이 되지 않는 모습을 보이기도 합니다.

 

따라서 과대적합을 완화하기 위한 일반적인 방법은 모델의 가중치를 규제하는 것입니다.

모델 복잡도에 제한을 두어 가중치가 작은 값을 가지도록 강제하는 것을 의미합니다.

이를 가중치 규제라고 하며 두 가지 형태의 비용을 모델의 손실 함수에 큰 가중치에 연관된 비용을 추가합니다.

1. L1 규제: 가중치의 절댓값에 비례하는 비용이 추가됨.

2. L2 규제: 가중치의 제곱에 비례하는 비용이 추가됨. 

 

-드롭아웃(dropout)

드롭아웃이란 훈련하는 동안 부작위로 층의 출력을 일부 제외시키는 것을 의미합니다.

모델 층에 드롭아웃을 적용하면 뉴런 사이사이에 출력층에 대한 노이즈를 추가하는 것과 같습니다.

이를 통해 패턴을 단순히 기억하는 과대적합을 줄여주는 것입니다.

 

 

 

이번 포스팅에서는 머신 러닝의 일반화에 대해 알아보았습니다.

정리하자면 머신 러닝의 일반화를 위해서는 먼저 훈련 데이터에 잘 맞는 모델이 필요합니다.

하지만 결국 일반화 성능을 저해하기 때문에 그 사이의 긴장 관계를 관리하는 것이 필요합니다.

 

따라서 먼저 관심을 가져야 하는 것은 약간의 일반화 능력을 가지고 과대적합할 수 있는 모델을 구축하는 것입니다.

(하이퍼파라미터 튜닝, 구조에 대한 가정 향상, 모델 용량 늘리기)

과대 적합이 시작되면 일반화 성능 향상을 위해 조기 종료 혹은 모델 용량을 줄이거나 규제를 추가하는 것이 필요합니다.

하지만 가장 효율적이고 좋은 모델의 일반화는 더 크고 더 좋은 데이터셋이라는 것을 명심하세요!