얼굴 인식에 대한 이해

얼굴 인식을 이해하고 서비스를 만드는 방법 (3)

supersumin 2024. 8. 25. 14:27

1. 인공지능을 만들 거면 뭐부터 해야 돼요?

인공지능을 만들기 위해서는 인공지능이 해결할 문제를 명확히 정의하는 것이 첫 단계이다. 예를 들면 고양이와 개를 구분하는 모델을 만들겠다는 구체적인 목표가 필요하다!

 

왜냐하면 문제를 정의함에 따라 프로젝트의 목표와 상황이 달라지기 때문이다! 문제 정의와 데이터가 명확하다면 데이터셋이 우선이며, 모델 중심의 연구나 실험적 접근이 필요할 때는 모델 설정이 먼저일 수 있다.

 

모델 중심 연구는 여기서는 다루지 않고 문제 정의가 명확한 경우부터 생각해보자. 문제가 명확히 정해진 경우라면 그 유형에 따른 Dataset과 모델 학습 과정이 따로 있다. 예시와 함께 살펴보자

 

- 문제 해결 유형에 따른 데이터셋의 예시

  • Classification(분류) 문제

개나 고양이 사진을 보고, 어떤 동물인지 분류하는 문제이다.

 

필요한 Dataset: 각 이미지에 해당 동물이라고 label이 붙은 이미지 Dataset

데이터셋 예시:

이미지 1: 개(Label: Dog)

이미지 2: 고양이(Label: Cat)

 

  • Object Detection(객체 탐지) 문제

이미지 내에서 특정 객체(자동차)를 찾아 그 위치를 지정하는 문제이다.

 

필요한 Dataset: 이미지와 그 이미지 내에서 객체가 위치한 좌표(바운딩 박스)가 포함된 데이터셋

데이터셋 예시:

이미지 1: 자동차(바운딩 박스 좌표: (x1, y1, x2, y2))

이미지 2: 자동차(바운딩 박스 좌표: (x3, y3, x4, y4))

 

  • Segmentation(세그멘테이션) 문제

이미지 내의 각 픽셀을 개별 객체나 영역으로 분류하는 문제이다.

 

필요한 데이터셋: 각 이미지와 해당 이미지의 각 픽셀에 대한 레이블(예: 0=배경, 1=고양이, 2=개).

데이터셋 예시:

이미지 1: (픽셀별 레이블 맵이 포함된 마스크)

이미지 2: (픽셀별 레이블 맵이 포함된 마스크)

 

 

- 모델의 학습 과정에 따른 데이터셋의 예시

  •  Supervise Learning(지도 학습)

얼굴 사진을 보고 사람의 이름을 인식하는 문제이다.

 

필요한 Dataset: 각 얼굴 이미지에 해당 사람의 이름이 Label로 붙어 있는 Dataset

예시:

이미지 1: John(Label: John)

이미지 2: Mary(Label: Mary)

 

  • Unsupervised Learning(비지도 학습)

얼굴 사진을 보고 비슷한 얼굴들끼리 그룹화하는 문제이다.

 

필요한 Dataset: Label이 없는 image dataset

예시:

이미지 1(Label 없음)

이미지 2(Label 없음)

 

  • Semi-Supervised Learning(준지도 학습)

일부는 Label이 있고, 나머지는 없는 데이터를 사용하여 얼굴을 분류하는 문제이다. 데이터 확보 과정에서 레이블이 부족한 상황을 해결하기 위해 사용된다.

 

필요한 Dataset: 일부 이미지는 레이블이 있고, 일부는 레이블이 없는 혼합 Dataset

예시:

이미지 1: John (레이블: John)

이미지 2: Mary (레이블: Mary)

이미지 3: (레이블 없음)

이미지 4: (레이블 없음)

 

즉, 인공지능을 만들기 위해서는 명확한 목표가 있어야 하며 그 목표에 따라 Dataset과 모델 학습 과정을 설정해야 한다.

 

참고로 보통 데이터 값은 Label이 되어있지 않으며, 그로 인해 Data에 Label을 붙이는 과정에서 비용과 시간이 요구된다.

 

 

2. Dataset을 준비하면 모든 데이터를 학습에 활용하면 되나요?

보통 가지고 있는 데이터는 학습(Train) / 검증(Validation) / 평가(Test)로 나누는 것이 일반적이다.

데이터를 나누는 비율은 문제에 따라 다르지만, 일반적으로 60-70%를 학습 데이터로, 10-20%를 검증 데이터로, 나머지 10-20%를 평가 데이터로 7 : 2 : 1의 비율로 나누는 것이 보통이다.

- 학습(Train)

모델을 학습하기 위해 쓰는 데이터이다. 이 데이터는 모델이 주어진 문제를 해결하기 위한 패턴을 학습하고, 예측 능력을 향상시키는 데 사용된다.

 

- 검증(Validation)

모델 학습이 잘 되고 있는지를 모니터링 하기 위한 데이터이다. 학습 과정에서 검증 데이터셋에 대한 성능을 참고하여 모델이 과적합되고 있는지, 또는 언제 학습을 중단해야할 지를 결정하는 데 사용된다.

 

예를 들어, 학습을 300번 진행했을 때 성능이 좋다면, 이후 성능이 저하될 경우 300번째 학습된 모델로 돌아갈 수 있다.

 

- 평가(Test)

모델의 실제 성능을 측정하기 위한 데이터이다. 이 데이터는 학습 과정에 절대 사용하면 안 되며, 우리가 모르는 데이터에 대해 모델이 얼마나 잘 예측할 수 있는지를 확인하기 위해 사용된다.

 

평가 데이터는 모델이 일반화될 수 있는지, 우리가 모르는 새로운 데이터에서도 좋은 성능을 발휘할 수 있는지를 검증하는 중요한 역할을 한다.

 

 

3. 왜 데이터를 나누는 것인가요?

왜 데이터를 나누는 것인지는 다음과 같다.

1) 모집단 파악의 어려움

실제 데이터에서 모집단 전체를 파악하기 매우 어렵기 때문이다. 우리가 가진 데이터는 표본일 뿐이며, 이 표본이 전체 데이터를 잘 대표하는지는 확신할 수 없다.

 

강아지 사진 100장 고양이 사진 10장인 데이터는 전체 데이터를 잘 대표하는 데이터가 아닌 것이 예시다.

 

2) 데이터의 편중 가능성

데이터가 한쪽으로 치우쳐 있는 가능성이 있다. 모든 데이터를 학습에만 사용하면, 모델은 특정 패턴에만 집중하여 학습할 수 있고, 이는 다른 패턴에 대해 부정확한 예측을 할 수 있다.

 

3) 일반화 능력

모델이 새로운 데이터에서도 잘 작동할 수 있는지 확인하기 위해 데이터를 나누어 사용하는 것이 필요하다. 

 

모델은 학습 데이터에 특화된 비현실적인 성능을 가질 수 있기 때문이다. 그렇게 되면 실제 환경에서 성능이 급격히 저하될 수 있다.

 

=> 데이터셋을 나누는 것만으로는 충분하지 않을 수 있기 때문에, 데이터셋의 편향이나 불균형을 최소화하는 노력의 일환으로 Cross Validation(교차 검증) 기법이 사용된다. 이는 데이터셋을 나누기만 했을 때의 한계를 보완한다.

 

- Cross Validation(교차 검증)

데이터 분할은 모집단을 대표하지 못할 가능성을 줄이기 위한 첫 번째 단계이며 Cross Validation은 그 한계를 보완하여, 더 안정적이고 신뢰성 있는 모델 평가를 가능하게 하는 추가적인 기법이다.

 

예시) K-폴드 교차검증 (K-Fold Cross-Validation)

  • K를 설정: 먼저 데이터를 K개의 동일한 크기로 나눈다. 여기서 K는 보통 5, 10과 같은 값으로 설정된다. K값이 너무 작으면 검증이 불안정해질 수 있고, 너무 크면 계산 비용이 높아지기 때문이다.
  • 학습 및 검증 과정:

1) 첫 번째 Fold(부분집합)를 검증 데이터로, 나머지 K-1개 Fold를 학습 데이터로 사용하여 모델을 학습하고 검증한다.

2) 두 번째 Fold를 검증 데이터로, 나머지 K-1개 Fold를 학습 데이터로 사용하여 모델을 학습하고 검증한다.

3) 이 과정을 K번 반복하여 모든 Fold가 검증 데이터로 한 번씩 사용되도록 한다.

  • 평균 성능 계산: K번의 검증 결과를 평균하여 모델의 최종 성능을 평가한다. 이렇게 하면 데이터의 분할에 따른 성능 변동을 최소화할 수 있다.

즉, 데이터가 모집단을 대표할 수 없을 수 있기 때문에 데이터를 Train, Validation, Test로 나누며 학습 과정에서 도욱 신뢰성 있는 모델을 만들기 위해 Cross Validation 기법이 쓰인다.

 

4. 그렇다면 데이터는 얼마나 많아야 하는 것인가요?

모델을 효과적으로 학습하고 평가하귀 위해 필요한 데이터의 양은 여러 요소에 따라 달라진다. 필요한 데이터 양을 결정하는 요소들은 다음과 같다.

  • 문제의 복잡성

복잡한 문제일수록 더 많은 데이터가 필요하다. 예를 들어, 이미지 분류 문제에서 개와 고양이를 구분하는 것보다 다양한 동물 종을 구분하는 문제가 더 복잡하며, 더 많은 데이터가 필요하다.

 

  • 모델의 복잡성

심층 신경망(DNN) 같은 복잡한 모델은 더 많은 파라미터를 학습해야 하므로, 일반적으로 더 많은 데이터를 필요한다. 반면, 간단한 모델(예: 선형 회귀)은 상대적으로 적은 데이터로도 효과적으로 학습할 수 있다.

 

  • 데이터의 품질

데이터의 품질이 높을수록, 동일한 양의 데이터로도 모델이 더 잘 학습될 수 있습니다. 반대로, 데이터에 노이즈가 많거나 레이블이 잘못된 경우, 더 많은 데이터가 필요할 수 있다.

 

  • 타깃 성능 수준

목표 성능 수준에 따라 필요한 데이터 양이 달라질 수 있다. 예를 들어, 높은 정확도가 필요한 응용 분야에서는 더 많은 데이터가 필요할 수 있다.

 

  • 데이터의 다양성

데이터가 다양할수록 모델이 다양한 상황에 잘 일반화할 수 있다. 예를 들어, 다양한 조명 조건, 각도, 배경 등을 포함하는 이미지 데이터는 더 나은 모델 성능을 보장한다.

 

일반적으로, 모델에 학습할 파라미터 수의 10배 이상의 데이터 포인트를 사용하는 것이 권장된다. 예를 들어, 1,000개의 파라미터를 가진 모델은 최소한 10,000개의 데이터 포인트가 필요하다.

 

요약: 모델이 복잡하고 파라미터(가중치)의 수가 많을수록, 더 많은 데이터가 필요하다. 문제의 복잡성(자유도)이 높을수록, 즉 해결해야 할 패턴이나 변수들이 많을수록, 큰 모델과 많은 데이터가 필요하다. 복잡한 문제는 더 많은 변수를 포함하고 있으며, 이를 학습하기 위해 더 큰 모델과 다양한 데이터를 요구한다.

 

 

5. 준비한 데이터셋을 모델에 학습할 때 추가로 고려해야할 사항이 있나요?

데이터를 준비한 후 추가로 고려해야할 중요한 사항 중 하나로 Overfitting(과적합), Underfitting(과소적합) 이 있다. 

- Overfitting(과적합)

모델이 학습 데이터에 너무 잘 맞춰져서, 학습 데이터의 노이즈나 특수한 패턴까지 학습하게 되는 현상이다. 이로 인해 모델이 새로운 데이터에 대해서는 일반화된 예측을 잘 하지 못하는 상태를 의미한다.

 

Train 데이터에서 모델이 90% 이상의 정확도를 보이지만, Validation 데이터에서는 60% 이하의 정확도를 보일 때는 Overfitting의 신호일 수 있다. 

 

이 경우 모델이 학습 데이터의 특정 패턴이나 노이즈에 지나치게 맞춰져,새로운 데이터에 대해 잘 대응하지 못 하고 있는 것이라 해석할 수 있다.

 

- Underfitting(과소적합)

모델이 학습 데이터의 패턴을 충분히 학습하지 못한 상태를 의미한다. 이로 인해 학습 데이터뿐만 아니라 새로운 데이터에 대해서도 성능이 저조하게 나오는 상태이다.

 

Train 데이터와 Validation 데이터 모두에서 모델의 정확도가 낮다면, 이는 모델이 데이터를 충분히 학습하지 못한 상태인 Underfitting의 가능성이 있다.

 

예를 들어, 복잡한 문제를 간단한 선형 모델로 해결하려고 하면 이러한 상황이 발생할 수 있다.


- Overfitting과 Underfitting을 예방하는 방법

   1) Overfittng의 경우

  • 데이터 양 증가 및 데이터 증강(Data Augmentation)

: 더 많은 데이터를 수집하거나 기존 데이터를 변형하여 데이터셋을 다양화한다.

  • 모델 복잡도 감소:

모델의 파라미터 수나 레이어 수를 줄인다.

  • 드롭아웃(Dropout):

신경망 학습 중 일부 뉴련을 무작위로 비활성화 한다.

  • 조기종료(Early Stopping):

검증 성능이 더 이상 향상되지 않으면 학습을 중단한다.

  • 교차검증(Cross-Validation):

다양한 데이터 분할을 통해 모델의 일반화 성능을 평가한다.

 

 

    2) Underfittng의 경우

  • 모델 복잡도 증가:

모델 파라미터 수나 레이어 수를 느려 모델의 표현력을 향상시킨다.

  • 더 많은 특징(feature) 사용:

데이터의 중요한 패턴을 포착할 수 있도록 더 많은 유의미한 특징을 추가한다.

  • 학습 시간 연장:

모델이 충분히 학습할 수 있도록 더 많은 에포트 동안 학습한다.

  • 적절한 학습률(Learning Rate) 설정:

학습률을 조정하여 모델이 효과적으로 학습할 수 있도록 한다.

 

 

6. Overfitting을 방지하기 위해 데이터를 늘리는 것이 있는데 어떻게 늘리나요?

1) 데이터 직접 수집 방법

데이터를 직접 수집하는 것은 모델 학습을 위해 실제 환경에서 데이터를 모으는 과정이다. 사진 촬영, 설문조사, 실험 및 관찰을 통해 이루어질 수 있다.

 

수집된 데이터는 실제 환경을 잘 반영하고 있어, 모델이 실생활에 적용될 때 더 신뢰성 높은 결과를 기대할 수 있다. 하지만, 직접 수집하는 방법은 시간과 비용이 많이 들고, 특정 상황에서는 데이터를 모으기 어려울 수 있다.

 

2) 데이터 합성(Synthetic Data)

실제 데이터를 수집하기 어려운 경우, 게임 엔진이나 3D 모델링을 통해 합성 데이터를 생성합니다. 예를 들어, 자율 주행 자동차의 주행 데이터를 합성 환경에서 생성할 수 있다.

    • 합성 데이터 생성 모델: 데이터를 합성하기 위해서는 GANs(Generative Adversarial Networks)나 VAE(Variational Autoencoders)와 같은 별도의 생성 모델이 필요하다. 이 모델들은 주어진 데이터의 패턴을 학습해, 유사하지만 새로운 데이터를 생성할 수 있다.
    • 다양성의 문제: 합성 데이터는 실제 데이터를 기반으로 생성되기 때문에, 데이터의 다양성이 떨어질 수 있다. 이는 모델이 현실 세계에서 다양한 상황을 충분히 학습하지 못하게 되어, 실제 데이터에 대해서는 성능이 저하될 수 있다.
    • 성능 한계: 합성 데이터로만 학습된 모델이 실제 데이터에 대해 좋은 성능을 보이지 못하는 경우도 있다. 이는 합성 데이터가 실제 환경을 완전히 반영하지 못하거나, 모델이 특정 패턴에 과도하게 맞춰지기 때문이다.
    • 실제 데이터와 합성 데이터의 혼합: 합성 데이터만 사용하면 성능이 떨어질 수 있으므로, 실제 데이터와 합성 데이터를 함께 사용하여 성능을 향상시킵니다.

 

3) 데이터 증강 (Data Augmentation)

데이터셋을 인위적으로 늘려 모델의 성능을 향상시키는 기법이다. 데이터 증강은 원본 데이터를 변형하거나 변환하여 새로운 데이터를 생성하는 방식으로 이루어진다.

 

- Data Augmentation의 방법

1) 기하학적 변환 (Geometric Transformations)

  • 회전(Rotation): 이미지를 특정 각도로 회전시켜 다양한 방향에서의 학습을 유도
  • 좌우반전(Flipping): 이미지를 좌우로 반전시켜 대칭적인 데이터를 생성
  • 크기 조절(Scaling): 이미지를 확대하거나 축소하여 다양한 크기에서의 학습
  • 이동(Translation): 이미지를 좌우 또는 상하로 이동시켜 다른 위치의 데이터를 학습
  • 잘라내기(Cropping): 이미지의 일부분을 잘라내어 모델이 전체 이미지 외의 부분에서도 학습

2) 색상 변환 (Color Augmentation)

  • 밝기 조절(Brightness Adjustment): 이미지의 밝기를 조절하여 다양한 조명 조건에서의 학습을 유도
  • 대비 조절(Contrast Adjustment): 이미지의 대비를 조절해 다양한 명암 조건을 제공
  • 채도 조절(Saturation Adjustment): 이미지의 색 농도를 조절해 다양한 색상 변화를 학습
  • 색상 변환(Color Jittering): 이미지의 색상을 임의로 변환해 색상에 대한 모델의 민감도를 높임

3) 노이즈 추가 (Noise Addition)

  • 가우시안 노이즈(Gaussian Noise): 이미지에 가우시안 노이즈를 추가하여 모델이 노이즈에도 강건하도록 학습
  • 블러링(Blurring): 이미지를 흐리게 만들어 다양한 해상도에서의 학습을 가능하게 함

 

- Data Augmentation의 효과

  • 모델의 허용 범위를 넓히는 효과

모델의 허용 범위를 넓히는 것은 모델이 데이터에서 특정 패턴만을 학습하는 것이 아니라, 다양한 변화를 수용할 수 있도록 하는 것을 의미한다.

 

이 과정에서 데이터에 노이즈를 추가하거나 정규화 기법을 사용하게 됩니다. 이러한 방법들은 모델이 특정 데이터에만 과도하게 맞춰지지 않고, 새로운 데이터에 대해 더 잘 일반화할 수 있다.

 

  • 데이터에 노이즈를 주어 과적합(Overfittng)을 방지하는 효과 (Regularization)

Regularization(정규화)은 모델이 학습 데이터에 과도하게 맞추는 과적합(Overfitting)을 방지하기 위한 방법이다.

 

모델이 학습 데이터의 특수한 패턴이나 노이즈까지도 학습하여, 새로운 데이터에 대해 일반화된 예측을 잘 하지 못하는 상태인 과적합이다.

 

이 때, 데이터에 노이즈를 추가하는 방법인 정규화 기법을 통해 모델이 특정 데이터에만 지나치게 맞추지 않도록 한다.

 

예를 들어, 이미지 데이터에서 노이즈를 추가하면 모델은 더 다양한 이미지 변형을 학습하게 되어, 새로운 데이터에 대해서도 잘 예측할 수 있게 된다.

 

  • 데이터 부족 문제 해결

데이터 증강을 통해 데이터셋을 인위적으로 늘림으로써, 데이터가 부족한 상황에서도 효과적으로 학습할 수 있다.

 

  • 모델이 데이터를 암기하는 것을 막는 효과 (Reduced Memorization)

암기(Memorization)는 모델이 학습 데이터의 특수한 패턴이나 노이즈까지 그대로 기억해버리는 상태를 말한다. 암기는 모델이 학습 데이터에서 벗어난 새로운 데이터에 대해서는 예측을 잘 하지 못하게 한다.

 

데이터 증강이나 노이즈 추가, 정규화 기법을 사용하면 모델이 데이터를 단순히 암기하는 것이 아니라, 데이터의 중요한 패턴을 학습하도록 유도할 수 있다.

 

이를 통해 모델이 학습 데이터에 과도하게 의존하지 않으며, 다양한 데이터에 대해 잘 일반화된 예측을 할 수 있게 됩니다.

 

 

* 암기가 나쁜 건가? *

암기 자체가 나쁜 것은 아니지만 딥러닝 모델의 목표는 단순히 주어진 데이터를 정확하게 기억하는 것이 아닌, 학습한 데이터를 바탕으로 새로운 데이터에 대해서도 잘 예측할 수 있는 능력, 즉 일반화 능력(Generalization)을 갖추는 것

 

새로운 데이터에 대해서는 성능이 급격히 떨어지는 현상 과적합(Overfittng)된 모델은 현실적인 상황에서 쓸모가 없을 수 있다. 데이터를 암기하는 대신 데이터의 본질적인 패턴을 이해하는 것이 더 중요하다.

 

데이터를 잘 학습하면서도 모델이 일반화 능력을 갖출 수 있도록 암기를 줄이는 방향으로 모델을 설계하고 학습시키는 것이 중요하다.

 

이를 위해 Regularization, Data Augmentation, Early Stopping 등의 기법을 활용하여 모델의 일반화 성능을 높이는 노력이 필요하다.

 

 

* 암기(Memorization)와 과적합(Overfitting)의 차이 *

  • 암기(Memorization): 모델이 학습 데이터의 세부적인 패턴, 특수성, 또는 노이즈를 그대로 기억하는 상태
  • Overfitting: 암기(Memorization)를 포함한 더 넓은 개념으로, 모델이 학습 데이터에 너무 잘 맞추어져 학습 데이터의 특이사항까지도 학습해버리는 현상

암기는 과적합의 한 예로 볼 수 있다.

 

- Data Augmentation의 주의사항

  • 모든 데이터 증강이 학습에 도움이 되지는 않음: 잘못된 증강 방법을 사용하면 모델이 왜곡된 데이터를 학습하여 성능이 저하될 수 있다. 예를 들어, 손글씨 인식 모델에 좌우반전 증강을 적용하면 'b'와 'd'를 혼동하게 될 수 있다.
  • 과도한 증강: 너무 많은 증강을 적용하면 원본 데이터의 패턴이 희석될 수 있어, 모델이 중요한 특징을 학습하지 못할 수 있다.
  • 적절한 증강 기법 선택: 데이터의 특성과 문제의 도메인에 맞는 증강 기법을 신중하게 선택해야 한다. 각 데이터 증강 기법이 실제 문제 해결에 도움이 되는지 검증하는 과정이 필요합니다.

 

 

7. 인공지능을 만들 때 데이터셋에서 신경써야할 것, 모델에서 신경써야할 것을 정리해보자!

인공지능 모델을 개발할 때 데이터셋과 모델 자체에서 각각 신경 써야 할 요소들을 다음과 같이 정리할 수 있다.

- 데이터셋을 세팅할 때!

1) 데이터셋의 질과 양

  • 데이터 양: 데이터가 모집단을 대표할 수 있도록 여러 데이터를 수집해야 한다. 그로 인해 모델은 다양한 패턴을 학습할 수 있다.
  • 데이터 증강(Data Augmentation): 데이터가 부족한 경우, 모델이 Overfitting이 일어난 경우 데이터를 늘림으로써 모델의 일반화 능력을 높인다.

 

2) 데이터셋의 분할

  • Train, Validation, Test 데이터 분할: 데이터가 모집단을 대표하고, 일반화 능력을 향상시키기 위해 데이터를 분할한다.
  • Cross-Validation(교차 검증): 학습하는 과정에서 특정 데이터에 치우치지 않기 위해 사용한다. 그로 인해 새로운 데이터에 성능이 떨어지는 Overfitting을 방지할 수 있다.

 

3) 데이터 전처리

  • 데이터 정규화 및 표준화: 데이터의 스케일을 조정하여 학습이 용이하게 해준다.

 

- 모델을 구조화할 때!

1) 모델 복잡도

  • 모델 복잡도 조절: 모델이 너무 복잡하면 Overfitting, 너무 간단하면 Underfitting의 위헙이 있다. 모델 복잡도를 데이터와 문제의 특성에 맞게 조정해야한다.
  • 정규화(Regularization): 모델이 지나치게 복잡해지는 것을 방지하기 위해 L1, L2 정규화와 같은 기법을 사용하여 가중치의 크기를 제한합니다.

 

2) 학습 과정에서 최적화

  • 학습률(Learning Rate) 설정: 학습률은 모델이 얼마나 빠르게 최적의 상태에 도달할지를 결정하는 중요한 하이퍼 파라미터이다. 너무 높으면 최적해에 도달하지 못하고, 너무 낮으면 학습이 오래 걸린다.
  • 조기 종료(Early Stopping): 학습 도중 검증 데이터의 성능이 더 이상 개선되지 않을 때 학습을 중단하여 Overfitting을 방지할 수 있다.
  • 배치 크기(Batch Size) 설정: 배치 크기는 한 번에 학습에 사용되는 데이터의 양을 결정한다. 큰 배치는 더 안정적인 그래디언트를 제공하지만, 메모리 사용이 많고, 작은 배치는 학습이 더 빠를 수 있지만 불안정할 수 있다.

 

 

8. 오늘의 수업, 데이터셋 세팅에 대한 전반적인 흐름에 대해 정리해보자

1) 데이터를 모은다
  • 모집단을 대표할 수 있도록 충분한 데이터 수집
2) 데이터셋을 학습시키기 위한 준비
  • 데이터를 훈련(train), 검증(validation), 검사(test) 세 부분으로 분할
  • 모델의 일반화 성능을 향상시키기 위해 교차검증(Cross-Validation) 수행
  • 데이터가 부족하다면 직접 수집, 데이터 합성 데이터 증강 등의 기법 사용
  • 픽셀 값을 정규화(normalization)하여 모델이 학습에 용이하도록 데이터 전처리
3) 모델을 학습시키며 성능을 평가
  • Overfittng: 모델의 복잡도를 낮추거나, 조기 종료(Early Stopping) 같은 기법을 사용하여 문제 해결
  • Underfittng: 모델의 복잡도를 증가시키거나 학습 시간을 늘려 문제 해결

4) 데이터가 부족한 경우 추가 작업

  • 데이터가 부족한 경우, 직접 수집, 데이터 합성 데이터 증강 등의 기법 사용
  • 이로 인해 Overfitting, Underfitting 방지

 

 

+) 추가적으 알면 도움이 되는 것들에 대해 알아보자!

- 범주형 데이터(Categorical Data)

1) 정의

특정 범주나 그룹으로 나뉘는 데이터로, 각 데이터 포인트는 명확한 범주에 속한다. 그 범주는 보통 수량이 아닌 이름이나 label로 표현된다.

 

2) 범주형 데이터의 주요 유형

  • 명목형 데이터(Nominal Data): 순서나 크기와 상관없이 이름이나 레이블로 분류되는 데이터, 각 범주는 서로 대등하며, 특정 순서가 존재하지 않는다.

예를 들어 과일 종류 데이터는 사과, 바나나, 오렌지 등의 범주로 나뉘지만 순서는 없다.

  • 순서형 데이터(Ordinal Data): 범주 간의 순서나 서열이 있는 데이터

예를 들어 고객 만족도는 매우 불만족, 불만족, 보통, 만족, 매우 만족과 같이 순서가 있는 범주고 나뉜다.

 

3) 범주형 데이터의 처리

머신러닝 모델에 사용할 때 범주형 데이터를 수치형 데이터로 변환하는 작업이 필요하다. 컴퓨터는 숫자를 처리하는 기계이기 때문에 범주형 데이터에 쓰이는 문자나 레이블을 직접 이해할 수 없기 때문이다.

  • 레이블 인코딩(Label Encoding): 각 범주에 고유한 숫자를 부여한다.

예를 들어 빨강 = 0, 파랑 = 1, 초록 = 2

  • 원-핫 인코딩(One-Hot Encoding): 각 범주를 이진 벡터로 변환한다. 각 범주에 할당되는 이진 벡터 값은 사용자가 직접 지정하는 것이 아닌, 원-핫 인코딩 알고리즘이 자동으로 할당한다.

예를 들어 빨강 = [1, 0, 0], 파랑 = [0, 1, 0], 초록 = [0, 0, 1]

 

 

- 수치형 데이터(Numerical Data)

1) 정의

수치로 표현될 수 있는 데이터를 의미하며, 연속적인 값이나 이산적인 값으로 나타낼 수 있다. 그로 인해 수학적 연산이 가능하다.

 

2) 수치형 데이터의 주요 유형

  • 이산형 데이터(Discrete Data): 개별적인 값으로 이루어진 데이터로, 주로 정수로 표현된다. 연속적인 값 사이에 중간값이 존재하지 않는다.

예를 들어, 학생 수, 물건의 개수, 동전 던지기의 횟수 등이 있다.

  • 연속형 데이터(Continuous Data): 특정 범위 내에서 연속적으로 값을 가질 수 있는 데이터로, 소수점까지 표현될 수 있다.

예를 들어, 온도, 키, 무게, 시간 등의 데이터는 연속적인 값으로 나타낼 수 있다.

 

3) 수치형 데이터의 처리

수치형 데이터는 대부분의 머신러닝 알고리즘에서 직접적으로 사용될 수 있다. 하지만, 모델의 성능을 향상시키기 위해 데이터 정규화(Normalization)나 표준화(Standardization) 등의 전처리 작업이 필요할 수 있다.

  • 정규화(Normalization): 데이터의 값을 0과 1 사이의 범위로 변환하여, 특정 피처의 값이 다른 피처의 값에 비해 지나치게 크거나 작아지는 것을 방지한다.
  • 표준화(Standardization): 데이터의 평균을 0, 분산을 1로 변환하여 데이터의 분포를 일정하게 만들어준다. 이는 모델의 학습 과정에서 특정 피처가 지나치게 큰 영향을 미치는 것을 방지한다.

 

- 얼굴 인식 모델에서 사람마다 하나의 범주가 생긴다면?

얼굴 인식에는 주로 범주형 데이터가 쓰인다. 만약 얼굴 인식 모델에서 사람마다 하나의 범주가 생성된다면, 사람이 추가될수록 범주가 계속 많아지게 된다. 이런 경우에는 데이터셋과 모델에서 문제가 발생한다.

  • 데이터셋의 관리: 사람이 많아질수록 각 범주에 대한 데이터를 충분히 확보해야 한다. 충분한 데이터가 없으면 모델이 해당 범주를 제대로 학습하지 못해 성능이 저하될 수 있다.
  • 모델의 복잡도: 범주가 많아지면 처리해야 할 클래스의 수가 증가한다. 데이터가 불균형할 경우, 모델이 일부 범주에 Overfitting되거나, 다른 범주에 대해 일반화 성능이 떨어질 수 있다.
  • 확장성 문제: 사람이 지속적으로 추가되는 환경에서는 모델을 주기적으로 업데이트하거나 다시 학습시켜야 한다. 이는 비효율적일 수 있으며, 사람의 수가 무한정 늘어날 경우 모델의 확장성도 문제가 된다.
  • 계산 비용: 범주가 늘어날수록 학습과 추론 과정에서 계산 비용과 메모리 사용량이 증가한다.

 이러한 문제를 해결하기 위해서 특징 기반 접근법, 임베딩 기법, 유사도 계산 등의 방법을 사용하여 직접적으로 범주를 늘리지 않고도 효과적으로 얼굴을 인식하는 방법을 사용하는데 이는 다다음 시간에 배우자.

 

 

- 데이터셋에서 클래스 불균형은 모델 성능에 큰 영향을 준다!!!

클래스 불균형이란 특정 클래스의 데이터가 다른 클래스에 비해 지나치게 많거나 적은 상황을 말한다.

 

* 참고로 얼굴인식에서는 "클래스"와 "범주"는 같은 의미이다. 각 사람의 얼굴은 하나의 클래스 또는 하나의 범주로 취급되기 때문이다.

 

예를 들어, 차가 10,000,000개, 표지판이 100개인 경우와 차가 10,000개, 표지판이 10,000개인 경우를 비교해보자.

  • 차가 10,000,000개, 표지판이 100개인 경우: 모델이 모든 데이터를 '차'로 예측하더라도 높은 성능(정확도)을 보일 수 있다. 하지만 이는 모델이 표지판을 전혀 학습하지 않았음을 의미하며 모델의 실제 성능은 낮다.
  • 차가 10,000개, 표지판이 10,000개인 경우: 모든 데이터를 '차'로 예측하면 성능이 저조하다. 데이터가 균형을 이루지 않으면, 모델이 특정 클래스에 과도하게 편향될 수 있다.

즉, 모든 클래스가 충분히 대표될 수 있도록 데이터의 균형을 맞추는 것이 중요하다. 불균형한 데이터는 모델이 특정 클래스에 치우칠 수 있으며, 이로 인해 성능이 저하될 수 있다.

 

클래스 불균형을 해결할 방법에 대해 알아보자.

  • Over-sampling(과잉 샘플링): 데이터가 부족한 클래스의 샘플을 추가하여 클래스의 균형을 맞추는 방법이다. 기존 데이터를 단순히 반복하거나, 약간의 변형을 가해 복제한다. 학습 과정에서 Overfitting의 위험이 있다.
  • Under-sampling(과소 샘플링): 데이터가 많은 클래스에서 일부 샘플을 제거하여 클래스의 균형을 맞추는 방법이다. 샘플을 무작위로 제거하여 데이터의 양을 줄이는 방법이 있으며 데이터 손실로 인해 중요한 정보가 사라질 수 있다.

 

 

실습은 구글코랩으로 진행해보자.