본 내용은 "딥러닝 초보자를 위한 엔비디아 가이드북"을 읽고 작성한 내용입니다!
첫 시작으로 '머신러닝'은 무엇이고, 머신러닝에서 사용되는 용어들은 무엇인지에 대해 기초를 다지는 챕터가 되겠습니다!
🥸 Machine Learning (머신 러닝)은 무엇이고, 왜 필요할까?
머신 러닝은 컴퓨터를 포함한 장치를 의미하는 'machine'과 인간의 활동 또는 패턴을 학습하는 'learning'이 합쳐진 단어입니다.
=> 즉, '컴퓨터가 스스로 인간이 잘하는 행동을 학습하는 기술'
머신러닝 기술의 필요성
- 복잡한 계산이나 반복적인 작업에 있어 효율적 -> 적은 비용으로 작업을 처리할 수 있습니다.
- 기존 : 규칙을 정의하고, 유지하고, 업데이트에 필요한 여러가지 경우가 너무 많기 때문에 모든 규칙을 정의할 수 없음
- 머신러닝 : 스스로 데이터와 해당 데이터의 패턴을 학습
- 알고리즘 개발도 쉽고 용이함
- 능동학습과 같이 인간과 기계가 협력하여 모두의 장점을 결합시킬 수 있습니다.
실제로 사용되고 있는 머신러닝 기술
- 고객에게 해당되는 스팸 메일 자동 필터링
- 쿠키에 맞는 사용자 기반 광고 제공
- 사용자 기반 검색 엔진
🥸 머신 러닝의 하위 개념
머신 러닝의 한 종류로 'Deep Learning(딥러닝)'이 있습니다.
간단한 차이로는 🗒️ 머신 러닝에선 패턴을 학습할 뿐, 패턴을 사용자가 직접 추출해줘야 합니다.
반면, 🗒️ 딥 러닝은 인공신경망을 통해 패턴 추출까지 기계가 스스로 진행합니다.
🥸 머신 러닝의 시스템
머신 러닝 시스템은 위 사진과 같이 이루어집니다. 입력값(input)이 필요하며, 현재 위 사진에서 입력을 위한 데이터셋으로는 '고양이/강아지 이미지셋'을 사용했습니다.
-- 이때 입력값으로는 오디오, 텍스트, 숫자, 사진 모두 사용할 수 있습니다.
위 예시를 보면, 데이터셋 구성은 사진과 사진에 해당되는 label이며,
사진은 강아지와 고양이 사진, label은 '개', '고양이'에 해당됩니다.
머신러닝은 입력데이터를 컴퓨터가 인지할 수 있는 데이터로 변환하고, 사람이 직접 데이터별 특징을 추출해줍니다.
이를 학습하여, 분류와 같은 작업에 맞는 알고리즘을 구성하고, 클래스나 숫자 등의 출력값(output)으로 나오게 됩니다.
즉, 기존 데이터를 학습하여, 새로운 데이터에 대한 예측을 수행하는 것입니다.
Loss Function = Cost Function
머신 러닝 모델이 잘 학습되고 있는지 확인하는 방법이 있습니다. 이는 손실함수(Loss function)을 정의하는 것입니다.
손실함수
: 머신 러닝 모델이 예측한 값과 실제 값 사이의 차이를 측정하는 함수
이 손실 함수의 값을 최소화하는 것이 모델 학습의 목표이며, 손실함수는 모델에 따라 각각 다른 함수를 사용할 수 있습니다.
🥸 학습 데이터 성격에 따른 머신러닝 학습 방법
머신러닝은 학습 데이터에 따라 4가지로 분류할 수 있습니다.
1. Unsupervised Learning [비지도 학습]
2. Supervised Learning [지도 학습]
3. Semi-supervised Learning [반지도 학습]
4. Reinforcement Learning [강화 학습]
4가지 머신러닝 학습에 대해 더 자세히 알아보겠습니다.
1. Unsupervised Learning [비지도 학습]
- 사용 조건 : 학습 데이터에 label이 부여되지 않은 경우
- 목적 : 데이터 내에서 비슷하거나 의미있는 패턴 및 그룹을 찾는 것
- 예시
- Clustering [클러스터링] (왼쪽 사진) : 데이터 포인트들을 비슷한 특성을 가진 그룹으로 묶는 것 (질감에 따라 털은 털끼리, 나무 껍질은 나무 껍질끼리 그룹화하는 것!)
- Dimension Reduction [차원 축소] (오른쪽 사진) : 3차원과 같은 고차원의 데이터 포인트들을 2차원으로 축소시켜주는 것처럼 중요한 특징은 유지하면서, 데이터 차원을 줄이는 것
2. Supervised Learning [지도 학습]
- 사용 조건 : 학습 데이터에 label이 함께 제공되는 경우
- 목적 : 입력 데이터를 출력 데이터에 매핑하는 규칙을 찾는 것
- 예시
- Classification [분류] (왼쪽 사진) : 정의된 카테고리(label) 별로 데이터를 나누는 것
- Regression [회귀] (오른쪽 사진) : 연속적인 값을 예측하는 것
- 종속변수가 연속적인 값이면 회귀, 카테고리와 같은 범주형이면 분류를 사용
3. Semi-supervised Learning [반지도 학습]
- 사용 조건 : 학습 데이터의 일부만 label이 함께 제공되는 경우
4. Reinforcement Learning [강화 학습]
- 사용 조건 : 학습 데이터가 피드백 형태로 제공되며
- 목적 : 특정한 목표를 달성하기 위해 환경에 적응하도록 보상을 받으며 학습
- 예시 : 알파고 (어떠한 경우의 수가 실패한다는 것과 어떤 수를 두었을 때 성공한다는 것을 학습)
🥸 Generalization이란,
Generalization [일반화]란, 학습된 모델이 훈련 데이터를 포함하여 새로운 데이터에서도 정확하게 예측하도록 하는 것입니다.
인간의 시험 공부처럼 실제 시험에서 좋은 성적을 얻기 위해 학습을 하고, 수능을 위해 중간 중간 실력을 검증할 수 있는 모의고사가 필요한 것처럼! 모델 학습도 검증 단계를 통해 일반화를 시킬 수 있습니다.
이때 사용하는 훈련 데이터셋이 TrainSet이며, 성능을 평가하기 위한 데이터셋을 TestSet이라고 합니다.
또한 검증을 위해 사용하는 ValidationSet도 필요합니다.
ValidationSet이 필요한 이유
- TestSet으로 학습 중간 중간의 성능을 확인한다면, TestSet이 학습에 영향을 끼치기 때문에 '새로운 데이터'라고 할 수 없습니다.
- 즉 TestSet은 학습에 영향을 주지 않는 새로운 데이터로 남겨두어야 하기 때문에 검증용인 ValidationSet이 필요합니다.
- 모의고사(단원 평가)처럼 학습이 제대로 되고 있는지 학습 중 성능을 확인하는 데에 사용합니다.
이렇게 데이터셋을 여러 개로 분할하고, 각 iteration마다 TestSet을 다르게 하여 평균을 낼 수도 있습니다.
🥸 Overfitting, Underfitting과 Bias-varidance TradeOff
Overfitting과 Underfitting에 대해 알기 전, 짚고 넘어가면 좋을 개념은 'Bias'와 'Variance'입니다.
- Bias [편향] : 목표 값과 평균이 얼마나 떨어져 있는지를 나타내는 척도 (정답을 맞추지 못한 정도)
- Variance [분산] : 예측 값들이 분산되어 있는 정도
그렇다면, Overfitting과 Underfitting은 무엇일까요? 해석된 그대로,
Overfitting은 '과적합'된 상태입니다. 학습이 데이터의 특징들을 추출해서 이루어져야 하는데, 질문과 답을 암기해버린 것처럼 진행하면 과적합이 발생합니다.
Underfitting은 '과소적합'된 상태입니다. 데이터의 기본 추세를 포착하지 못한 것이므로 학습이 덜 이루어졌다라고 생각하면 됩니다.
Bias가 높으면 -> 정답에서 멀리 떨어져 있다는 것이므로 -> Underfitting이 됩니다.
반면, Variance가 높으면 -> Feature가 조금만 달라져도 예측 값이 크게 달라집니다 -> 이는 Overfitting이 됩니다.
가장 왼쪽 사진처럼 Bias와 Variance가 모두 작다면, 목표값과 크게 떨어지지도, 조금의 변경으로도 예측값이 크게 달라지지도 않는 이상적인 상태라는 것을 확인할 수 있습니다.
하지만! Bias와 Variance 사이에는 TradeOff가 존재하여, 하나를 낮추면 다른 하나가 증가하게 됩니다.
Bias-variance TradeOff
예시로 손실함수 MSE (Mean Squared Error)를 보겠습니다.
간단한 연산 배치를 변경하여 식을 Bias와 Variance로 나타낼 수 있으며, 그래프에서 볼 수 있듯이
학습 모델이 복잡하고 훈련 샘플이 많아질수록 Bias(편향)은 낮아집니다.
그러나 그럴수록 더 많은 데이터 포인트에 맞추기 위해 더 많이 이동하게 되어 분산이 증가하게 됩니다.
🥸 Overfitting을 피하는 방법
그렇다면, overfitting을 피하는 방법을 알아보겠습니다.
우선 어떤 경우가 overfitting의 경우일까요?
이렇게 error의 값이 다시 증가하거나, accuracy 값이 증가하다가 다시 떨어지는 경우, 과적합이 되고 있다는 것을 알 수 있습니다.
피하는 방법 1. Cross-Validation
- 사용 경우
- Train : Validation : Test set을 6 : 2 : 2로 나누기에 데이터가 충분하지 않을 때
- 확실한 성능 평가가 필요할 때
- 방법
- 데이터셋을 각 iteration에서 다르게 분할하고, 모든 라운드의 테스트 결과를 평균내어 사용
- Exhaustive, Non-exhaustive 방법으로 나눌 수 있음. (본 글에서는 자세히 다루지 않겠습니다 !)
피하는 방법 2. Regularization
모델의 불필요한 복잡성이 과적합의 원인이 되기 때문에 'Regularization[정규화]'를 통해 복잡한 모델에 패널티를 부과하는 것
학습은 cost(loss)가 작아지는 방향으로 즉, cost를 최소화되도록 학습이 진행됩니다. cost 식은 다음과 같으며, 마지막 항이 바로 Regularization이 도입되는 Regularization term입니다.
이렇게 Regularization term을 통해 패널티 값을 추가함으로써 학습이 되는 정도를 상쇄시켜 복잡성을 줄일 수 있습니다.
정규화 정도를 정하는 것은 ƛ (lambda) 값인데, 이 값을 너무 작게 하면 소용이 없고, 너무 크게 해도 학습에 방해가 될 수 있어 적당히 선택을 해야합니다.
피하는 방법 3. Early Stopping
더 이상 accuracy가 증가하지 않고, 다시 떨어진다면, 사용자의 설정에 따라 학습을 설정했던 epoch 수보다 더 일찍 종료할 수 있습니다.
이렇게 조기 종료를 하게 되면, 학습에 소비하는 시간도 줄일 뿐더러, 복잡성이 제어되어 과적합이 덜 발생할 수 있습니다.
피하는 방법 4. Feature Selection
이미지와 텍스트 같은 고차원 데이터들은 처리하는 계산 비용은 매우 크고, 복잡성이 커지기 때문에 과적합에 취약할 수밖에 없습니다.
이때, 고차원 데이터에는 많은 feature들이 있지만, 모든 feature들이 유용한 것은 아닙니다. 오히려 쓸데 없는 feature로 인해 복잡성이 더 커질 수 있습니다.
그렇기에 좋은 feature를 선택하는 것이 중요할 수 있습니다. => 이를 Feature Selection이라고 합니다.
추가적으로 underfitting을 막기 위해선, 데이터의 양을 더 늘리거나, 학습의 양을 늘리는 방법을 사용할 수 있습니다!
다음 편에서 또 뵐게요 :)