화이트 모드로 보시길 권장합니다

이 글은 [핸즈온 머신러닝 2판] 시리즈로
Hands on Machine Learning with Scikit-Learn, Keras & TensorFlow을 통해 공부하는
머신러닝, 딥러닝에 대한 내용을 정리한 글이다.

머신러닝 모델 테스트

모델 성능 테스트

훈련 데이터를 훈련 세트, 테스트 세트로 나눈 뒤 훈련 세트를 사용해 모델을 학습시키고, 테스트 세트를 사용하여 모델을 테스트한다.

새로운 샘플에 대한 오류 비율을 일반화 오차(Generalization Error)  혹은 외부 샘플 오차(Out-Of-Sample Error)라 한다.

테스트 세트에서 모델을 평가해 새로운 샘플에서 모델이 얼마나 잘 작동할 지 알려주는 추정값(Estimation)을 얻는다.


머신러닝 모델 검증

홀드아웃 검증(Holdout Validation)

모델을 학습시킬 때 과대적합 예방을 위해 규제를 적용하려 할 때, 하이퍼파라미터 값이 각기 다른 10개의 모델을 학습시키는 방법을 사용해 일반화 오차가 가장 낮은 모델을 선택한 후, 실제 서비스에 투입하여도 높은 오차를 만들어 낼 수 있다.

이는 테스트 세트에서 일반화 오차 테스트를 여러번 측정하게 되며 테스트 세트에 최적화된 모델을 만들었기 때문이다.

 

위와 같은 문제를 일반적으로 해결하는 방법이 ' 홀드아웃 검증(Holdout Validation) '이다.

홀드아웃 검증 방법은 데이터 세트가 작을 경우 잘 작동하지 않는다.

홀드아웃 검증 방법 :

훈련 세트의 일부를 떼어내 여러 후보 모엘을 평가하고 가장 좋은 한 개의 모델을 선택하는 방법이다.

  1. 훈련 세트에서 일부를 떼어낸 검증세트(Validation Set)을 만든다.
  2. [훈련세트-검증세트]세트를 사용해 다양한 하이퍼파라미터 값을 가진 모델을 훈련한다.
  3. 검증세트에서 가장 높은 성능을 보이는 모델을 선택한다.
    (위 과정이 홀드아웃 검증 과정이다.)
  4. 선택된 모델을 훈련 세트에서 다시 훈련해 최종 모델을 만든다.
  5. 테스트 세트를 사용해 최종 모델을 평가해 일반화 오차를 추정한다.

교차 검증(Cross-Validation)

데이터 세트가 작을 경우 사용될 수 있다.

 

교차 검증 방법:

검증 세트를 여러개 만들어 평가하는 방법이다.

검증 세트마다 나머지 데이터에서 훈련한 모델을 해당 검증 세트에서 평가하며, 모든 모델 평가의 평균을 구해 성능을 측정한다.

교차 검증은 훈련 시간이 검증 세트의 개수에 비례해 늘어나게 된다.

화이트 모드로 보시길 권장합니다

이 글은 [핸즈온 머신러닝 2판] 시리즈로
Hands on Machine Learning with Scikit-Learn, Keras & TensorFlow을 통해 공부하는
머신러닝, 딥러닝에 대한 내용을 정리한 글이다.

머신러닝에 악영향을 끼치는 데이터

What is Main Task of Machine Learning?

머신러닝의 주요 작업은 ' 어떠한 데이터를 어떠한 학습 알고리즘에 훈련시킬 것인가? '이다.

나쁜 알고리즘나쁜 데이터가 머신러닝의 학습에 문제가 될 수 있다.

 

적은 양의 훈련 데이터

대부분의 머신러닝 알고리즘이 잘 작동하기 위해선 데이터가 많아야 한다.

 

데이터의 효과 : 

Microsoft 연구자인 Michele Banko;미셸 반코, Eric Brill;에릭 브릴은 2001년 발표된 유명한 논문 ( https://homl.info/6 )에서 아주 간단한 모델을 포함한 여러 머신러닝 알고리즘에 충분한 데이터가 주어지면 복잡한 자연어 중의성 해소 문제를 거의 비슷하게 잘 처리한다는 것을 보였다.

 

위 결과는 시간과 돈을 알고리즘 개발에 쓰는것과 데이터셋 개발에 쓰는 것 사이의 trade-off 를 생각해 봐야 한다는 것을 알려준다.

 

2009년 Peter Norvig;피터 노르빅 등이 쓴 ' The Unreasonable Effectiveness if Data '를 통해 복잡한 문제에서 알고리즘보다 데이터가 더 중요하다는 생각이 더 유명해 졌지만, 작거나 중간 규모의 데이터셋이 매우 흔하고, 훈련 데이터를 추가로 모으는 것이 쉽거나 값싼 일은 아니기에 알고리즘을 무시하지는 말아야 한다.

( ' The Unreasonable Effectiveness if Data;데이터의 불합리한 효과성 '이란 논문에서는 복잡한 문제를 해결하기 위해선 좋은 알고리즘보다 더 많은 데이터가 중요하다는 것을 말하고 있다. )

 

대표성 없는 훈련 데이터

일반화가 잘 되기 위해선 일반화 하기를 원하는 사례를 훈련 데이터가 잘 대표하는 것이 중요하다.

( 사례기반, 모델 기반 학습에서도 마찬가지 이다. )

( ' 사례를 훈련 데이터가 잘 대표하는 것 '은 특정 상황, 집단, 문제의 특성 등을 전체적으로 잘 나타내는 것을 의미한다. )

샘플이 작을 경우 샘플링 잡음(Sampling Noise)가 생길 수 있고, 데이터가 크더라도 표본 추출 방식이 잘못될 경우 대표성이 없을 수 있는 샘플링 편향(Sampling Bias)이 생길 수 있다.

( 데이터셋은 데이터의 전체 집합, 즉 모집단을 뜻하며 샘플은 모집단에서 샘플링 과정을 통해 선택된 표본을 뜻한다. )

( 샘플링 잡음 : 선택된 특성이 모집단의 전체적인 특성을 반영하지 못하는 것. )

( 샘플링 편향 : 선택된 특성이 모집단의 특정 특성만 과도하게 선택되거나 소외되어 모집단의 실제 분포를 정확히 반영하지 못하는 것. )

 

낮은 품질의 데이터

훈련 데이터에 에러, 이상치, 잡음 등이 많아 머신러닝 시스템이 데이터셋의 패턴을 파악하기 힘들어 잘 작동하지 못하게 된다.

대부분의 Data Scientist는 데이터 정제에 많은 시간을 쓴다.

 

훈련 데이터의 정제가 필요한 경우 :

일부 샘플에 이상치가 명확하게 보이는 경우, 무시하거나 수동으로 고치는 것이 좋다.

일부 샘플에 특성에 대한 정보가 누락되어 있을 경우, 해당 특성을 모두 무시할지, 누락된 값을 채울지 결정해야 한다.

 

관련 없는 특성

훈련 데이터에 관련 없는 특성이 적고, 관련 있는 특성이 많아야 시스템이 학습할 수 있다.

머신러닝의 핵심 요소는 훈련에 사용할 좋은 모델을 찾는 것으로 이 과정을 특성 공학(Feature Engineering)이라 한다.

 

특성 공학 :

특성 선택(Feature Selection) : 가지고 있는 특성 중, 훈련에 가장 유용한 특성을 선택

특성 추출(Feature Extraction) : 특성을 결합해 더욱 유용한 특성을 만듦.

새로운 데이터 수집을 통해 새로운 특성 만듦


머신러닝에 악영향을 끼치는 알고리즘

훈련 데이터 과대적합

과대적합(Overfitting)이란 모델이 훈련 데이터에만 최적화 되어 일반성이 떨어진다는 뜻이다.

과대적합은 훈련 데이터에 있는 잡음의 양의 비해 모델이 복잡할 경우 일어난다.

심층 신경망과 같은 복잡한 모델은 데이터에서 미묘한 패턴을 찾을 수 있으나, 훈련세트가 낮은 품질의 데이터일 경우 잡음이 섞은 패턴을 감지하게 되며, 이러한 패턴은 새로운 샘플에 일반화 되지 못한다.

데이터에 완벽히 맞추는 것과 일반화를 위해 단순한 모델을 유지하는 것 사이의 올바른 균형을 찾는 것이 좋다.

 

과대적합 해결 방법 :

파라미터 수가 적은 모델 선택하거나 훈련 데이터에 있는 특성 수를 줄이거나, 모델에 제약을 가해 단순화 시킨다.

훈련 데이터를 더욱 모은다.

훈련 데이터의 잡음을 줄인다.

 

규제(패널티) :

모델을 단순하게 하고 과대적합이 일어나지 않도록 하기 위해 모델에 제약을 가하는 것.

학습을 하며 적용할 규제의 양은 하이퍼파라미터(Hyperparameter)가 결정한다.

하이퍼파이미터는 학습 알고리즘의 파라미터로, 학습 알고리즘으로부터 영향을 받지 않으며 훈련 전 미리 지정된다.

 

간단한 선형 모델 y = θ_{1}𝓍 + θ_{0}은 두 개의 파라미터 y절편 θ_{0}, 기울기 θ_{1}를 가지고 있으며, 각 파라미터는 학습 알고리즘을 통해 값이 변경되며 모델이 훈련 데이터에 맞춰지게 조정된다.

 

θ_{1}=0으로 규제를 가하게 될 경우 학습 알고리즘에는 θ_{0}만을 조정하는 자유도만 남게 되어, 훈련 데이터에 맞춰지도록 직선을 올리거나 내리기만 하는 간단한 모델(자유도 1 모델)이 된다.

 

θ_{1}의 수정을 허락하되 작은 값을 갖도록 규제를 가할 경우 학습 알고리즘이 θ_{1}, θ_{0} 두 개의 값을 조정하며 '자유도 1 모델' 보다는 복잡한 모델을 만들게 된다.

 

훈련 데이터 과소적합

과소적합(Underfitting)이란 모델이 너무 단순해 데이터의 패턴을 학습하지 못할 때 일어난다.

 

과소적합 해결 방법 :

모델 파라미터가 더 많은 복잡한 모델을 선택한다.

학습 알고리즘에 더 좋은 특성을 제공한다(특성 공학).

모델의 규제를 줄인다.

 

 

화이트 모드로 보시길 권장합니다

이 글은 [핸즈온 머신러닝 2판] 시리즈로
Hands on Machine Learning with Scikit-Learn, Keras & TensorFlow을 통해 공부하는
머신러닝, 딥러닝에 대한 내용을 정리한 글이다.

머신러닝이란?

What is Machine Learning?

일반적 정의 :

"머신러닝(Machine Learning)은 명시적 프로그래밍 없이 컴퓨터가 학습하는 능력을 갖추게 하는 연구 분야이다"

( _Arthur Samuel; 아서 새뮤얼 )

 

공학적 정의 :

"어떤 작업 T에 대한 컴퓨터 프로그램의 성능을 P로 측정했을 때 경험 E로 인해 성능이 향상됐다면, 이 컴퓨터 프로그램은 작업 T와 성능 측정 P에 대한 경험 E로 학습한 것이다."

( _Tom Mitchell; 톰 미첼 )

 

ex. 스팸 필터 )

스팸 필터는 스팸 메일과 일반 메일의 샘플의 구분법을 배우는 머신러닝 프로그램.

학습하는 데 사용되는 샘플을 훈련 세트(Training set, 각 훈련 데이터 = 훈련 사례;Training instance, 샘플)라 함.

작업T: new 메일이 스팸 메일인지 판단, 경험E: 훈련 데이터;Training data, 성능 측정P: 정확도;Accuracy.

 

Why use Machine Learning?

데이터를 기반으로 패턴을 자동으로 감지하여 데이터를 판단하기에 가장 좋은 패턴을 자동으로 학습하기 때문이다.

  • 알고리즘으로는 복잡한 문제 :  머신러닝이 코드를 간단하게 하여 기존 알고리즘보다 더욱 좋은 성능 발휘 가능.
  • 새로운 데이터에 쉽게 적응 가능.
  • 대용량 데이터에서 통찰을 얻음.

Machine Learning System 종류

머신러닝 시스템의 종류

머신러닝 시스템의 종류는 배타적이지 않으며 서로가 연결될 수 있다.

학습할 때의 감독 유무&정보의 종류 :

지도(Supervised)·비지도(Unsupervised)·준지도(Semi-supervised)·강화(Reinforcement) 학습.

 

실시간, 점진적으로 학습하는가? :

온라인(Online), 배치(Batch) 학습.

 

데이터 판단 방법 :

사례 기반(Case-based), 모델 기반(Model-based) 학습.

 

지도 학습(Supervised Learning)

머신러닝 알고리즘에 제공하는 훈련 데이터에 레이블(label)이 포함되어 있다.

지도학습의 종류로는 분류(Classification), 회귀(Regression)가 있다.

( 필자는 여태껏 label을 '라벨'이라 발음하였다. 라벨이 어감상 더 좋은데 레이블이라니 아쉽다. )

분류(Classification) :

주어진 데이터 라벨에 맞춰 패턴을 학습하여, 입력되는 데이터를 분류한다.

분류 알고리즘을 회귀에 사용할 수 있다.

 

회귀(Regression) :

특성(feature; 예측 변수predictor variable)을 사용해 타깃(target) 수치를 예측한다.

회귀 알고리즘을 분류에 사용할 수 있다.

로지스틱 회귀(Logistic Regression)는 클래스에 속할 확률을 도출한다.

  • k-nearest neighbors
  • linear regerssion
  • logistic regression
  • support vector machine(SVM)
  • decision tree&randrom forest
  • neural networks

 

비지도 학습(Unsupervised Learning)

훈련 데이터에 레이블이 포함되어 있지 않은 것이다.

정답이 없고, 시스템이 스스로 데이터를 분석하여 비숫한 것들을 그룹화한다.

군집화(Clustering) :

시스템이 스스로 데이터 간의 연결성을 찾아 비슷한 것들을 묶는 것이다.

계층 군집(Hierarchical Clustering) 알고리즘을 사용하여 각 그룹을 세분화할 수 있다.

( 계층 군집 : 데이터를 점차 병합하여 계층적인 구조로 군집화 하는 것이다. 트리구조로 표현 )

 

시각화(Visualization) 알고리즘:

고차원 데이터를 도식화 가능한 2D|3D 표현으로 만들어 준다.

가능한 한 구조를 그대로 유지하려 하기에 데이터의 구조를 이해할 수 있고, 패턴을 발견할 수 있다.

차원 축소(Dimensionality reduction) : 

너무 많은 정보를 잃지 않으며 데이터를 간소화한다.

머신러닝 알고리즘에 데이터를 입력하기 전, 차원 축소를 통해 훈련 데이터의 차원을 줄이는 것이 유용할 수 있다.

(실행속도 증가, 메모리 차지 감소, 성능 증가)

  • 특성 추출(feature extraction) : 상관관계가 있는 데이터를 하나로 합치는 방법이 있다.

이상치 탐지(Outlier detection) :

훈련 데이터에 포함된 대부분이 정상 샘플이며, 다른 샘플들의 패턴들과는 다른 패턴을 가진 샘플을 탐지한다.

 

특이치 탐지(Novelty detection) :

훈련 데이터의 모든 샘플을 정상 데이터로 인식하며, 훈련 데이터와는 다른 새로운 샘플을 탐지한다.

 

연관 규칙 학습(Association rule learning) :

대량의 데이터에서 각 특성 간의 관계를 찾는 것이다.

 

준지도 학습(Semi-supervised learning)

일부만 레이블이 있는 데이터를 사용한다.

지도학습과 비지도 학습의 조합으로 이루어져 있다.

심층 신뢰 신경망(Deep belief network; DBN) :

비지도 학습인 제한된 볼츠만 머신(Restricted Boltzmann machine;RBM)을 쌓아 만든 신경망이다.

  1. 비지도 학습(RBM 학습) : 레이블이 없는 데이터를 사용해 학습하며, 각 층이 데이터의 숨겨진 구조를 학습한다.
  2. 지도 학습(세밀 조정) : 비지도 학습을 통해 전체 네트워의 초기 구조를 설정한 후, 지도 학습 방식으로 세밀하게 조정한다. 레이블이 있는 데이터를 사용해 분류 등의 성능을 향상한다.

ex). 두 개의 클래스; 새로운 샘플이 레이블이 있는 클래스 네모에 가깝지만, 레이블이 없는 샘플이 새로운 샘플을 삼각형 클래스로 분류하는데 도움을 준다.

 

강화 학습(Reinforcement learning)

용어 :

  • 에이전트(Agent) : 학습하는 시스템
  • 환경(Environment)
  • 행동(Action)
  • 보상(Reward)
  • 벌점(Penalty)
  • 정책(Policy)

환경을 관찰하여 행동을 실행, 결과로 보상 혹은 벌점을 받는다. 시간이 지나 가장 큰 보상을 얻기 위해 정책이라 하는 최상의 전략을 스스로 학습한다. 정책은 주어진 환경에서 에이전트가 어떤 행동을 할지 선택한다.


배치 학습(Batch Learning)&오프라인 학습(Offline Learning)

시스템이 점진적으로 학습할 수 없다.

모든 데이터를 사용해 훈련해야 하기 때문에 시간과 자원을 많이 소모하기에 주로 오프라인에서 수행된다. 

시스템을 훈련시킨 후, 제품을 시스템에 적용하면 추가적인 학습 없이 실행된다.

위와 같은 방식을 오프라인 학습(Offline Learning)이라 한다.

 

새로운 데이터를 학습하기 위해선, 전체 데이터를 사용해 시스템의 새로운 버전을 처음부터 다시 학습시킨다.

머신러닝 시스템을 훈련, 평가, 론칭하는 전체 과정이 쉽게 자동화되기에, 데이터를 업데이트하고, 새 버전이 필요한 만큼 자주 훈련시켜 변화에 적응이 가능하다.

대량의 데이터를 사용해 매일 처음부터 훈련하도록 자동화해 둘 경우, 큰 비용이 발생하게 될 것이다.

 

온라인 학습(Online Learning)

데이터를 순차적으로 한 개 혹은 미니 배치( Mini-batch)라 부르는 작은 묶음 단위로 입력하여 학습시킨다.

매 학습마다 빠르고, 비용이 적게 들기에 데이터가 도착하는 대로 즉시 학습할 수 있다.

빠른 변화에 적응해야 하는 시스템에 적합하다.

단점 :

비정상적인 데이터가 입력될 경우 시스템의 성능이 점차 감소하게 된다.

해결방법 : 

  • 모니터링을 통해 성능 감소가 감지될 경우 학습을 중지시킨다.
  • 이상치 탐지 알고리즘 등 데이터 모니터링을 통해 비정상적인 데이터를 잡아낸다.

학습률(Learning rate) :

모델이 데이터로부터 배우는 속력을 제어하는 하이퍼 파라미터이다.

'속력'이란 경사하강법에서 파라미터가 어느 방향으로 업데이트되고, 파라미터가 업데이트되는 크기를 의미한다.

학습률이 높을수록 좋은 파라미터 값을 찾기 위해 파라미터의 값이 크게 업데이트되기 때문에 최저점에 수렴하지 못할 수 있다.

학습률이 낮을수록 천천히 학습되기에 학습 시간이 오래 걸리고 컴퓨팅 리소스가 많이 소모되게 된다.

 

 

외부 메모리 학습(Out-of-core Learning)&점진적 학습(Incremental Learning) :

매우 큰 데이터셋을 학습하는 시스템에 온라인 학습 알고리즘을 사용할 수 있다.

알고리즘이 데이터 일부를 읽어 들이고, 훈련 단계를 수행하며 전체 데이터가 적용될 때까지 과정을 반복한다.

이 학습은 주로 오프라인에서 실행되기에(실시간 시스템에서 수행되지 않음) 점진적 학습(Incremental Learning)이라 할 수 있다.


 

사례 기반 학습(Instance-based Learning)

시스템이 훈련 샘플을 기억하는 것으로 학습한다.

입력 데이터와 기존 데이터의 유사도를 측정해 비교하는 방식으로 일반화(Generalize) 한다.

입력 데이터와 가장 유사한 데이터가 속해있는 클래스로 예측한다.

(일반화 : 새로운 데이터에서 좋은 예측을 하는 것 )

(필자가 만든 '얼굴 인종 예측'모델이 이에 해당한다. )

https://github.com/JungbeomLee/Face_race_classification_with_FaceNet

 

모델 기반 학습(Model-based Learning)

샘플들의 모델을 만들어 예측(Prediction)에 사용한다.

모델 선택(Model Selection) : 

데이터를 분석하여 데이터에 맞는 학습 모델을 찾는 것이다.

 

ex. 선형 모델(Liear Model) :

간단 선형 모델 수식

간단한 선형 모델은 모델 파라미터(Model parameter)  θ_{0}, θ_{1}을 가진다.

(θ, ω, β는 모델 파라미터를 표현할 때 사용된다.)

 

측정 지표인 '효용함수(Utility Function || 적합도함수;Fitness Function) : 모델의 좋은 정도를 평가', '비용함수(Cost Function) : 모델의 나쁜 정도를 평가'를 정의하여 모델이 최상의 성능을 내는 파라미터 값을 구할 수 있다.

(선형 모델의 경우 예측 값과 실제 값 사이의 거리값을 재는 비용함수를 사용한다. 이 거리값을 최소화하는 것이 목표이다.)

 

선형 회귀(Linear Regression) 알고리즘에 훈련 데이터를 제공하고, 데이터에 가장 잘 맞는 파라미터를 찾는다. 이를 훈련(Training)시킨다고 한다.

 

+ Recent posts