반응형

Lecture 8 - Data Splits, Models & Cross-Validation | Stanford CS229: Machine Learning (Autumn 2018)

 

 

주요내용

  • Bias/ Variance
  • Regularization 정규화
  • Train/dev/test splits
  • Model selection & Cross validation

 

 

 

Bias/ Variance

이전 강의에서 예를 들었던 주택 사이즈별 가격 데이터를 가지고 이야기 해 보겠습니다. 같은 데이터를 가지고 아래와 같이 3가지의 모델을 만들 수 있습니다. 왼쪽은 언더피팅(underfit)된 1차원 모델의 High bias 그래프이고 가운데는 적당한 2차원 모델, 오른쪽에는 다중 선형모델로 오버피팅(Overfitting)된 모델의 High Variance 그래프 입니다.

 

 

 

Regularization 정규화

아래는 로지스틱 회귀 공식 입니다. - 부호 뒤의 람다|| ||^2가 Regularization 내용입니다. 이 변수를 통해 곡선의 구부러진 정도를 조정할 수 있습니다.

 

λ람다에 따른 곡선의 변화를 보면 아래와 같습니다. λ가 아주크면 0에 가까워지는 군요.

 

SVM의 경우 수많은 변수를 세타함수를 통해서 만들어 사용하는 데(고차원 매핑) 왜 오버피팅이 되지 않을 까요? 그것은 - λ||θ||^2 와 같은 역할을 하는 것이 SVM에서는 minimize ||w||^2 때문에 결국 같은 효과 즉 오버피팅을 막는 효과가 있습니다.

 

나이브 베이즈의 예를 들어 보겠습니다. 전 시간에 예를든 스팸 분류기도 좋고 트위터 데이터에 대한 감성분석도 좋습니다. 이러한 분류 문제를 다룬다고 할때 특히 이렇게 피처는 많고(10,000) 예제 데이터는 적을때(100)는 로지스틱 회귀에 정규화 Normalization 을 추가하여 개발한 모델의 성능이 나이브 베이즈 보다 좋습니다. 정규화를 이용하지 않으면 오버피팅되기 때문에 성능이 좋지 않습니다.   보통은 피처가 예제 데이터 보다 10배이상 크면 정규화를 이용합니다.

정리하면 

 

Frequentist와 Bayesian 학자들 사이의 차이점에 대해서 설명합니다. Frquentist는 MLE를 구하고 베이지안 학자는 MAP(Maximization A Posteriori)를 구합니다.

 

 

 

y축은 에러율, x 축은 모델의 복잡도를 기준으로 그래프를 그려보면 아래와 같습니다.  일반적인 그래프는 모델 복잡도가 낮으면 언더핏되고 모델 복잡도가 높아질 수록 점점 에러가 줄어들게 됩니다. 그러다가 중간이 지나면 다시 에러율이 상승하는데 이렇게 상승된 상태의 모델을 오버피팅된 모델이라고 합니다.  곡선이 위로 꺽기기 시작하는 중간지점이 가장 좋은 모델 복잡도를 가진(에러가 가장 낮은) 모델입니다.

 

여기에 정규화(Normalization)을 위해 λ를 사용할 경우 λ크기에 따라 에러의 변화를 만들 수 있습니다. λ가 너무 크면 제일 왼쪽 처럼 언더피팅되고 λ를 0으로 설정하면 (정규화를 안하면) 오른쪽 처럼 오버피팅됩니다. 적당한 λ값을 설정해주면 중간에 가장 에러가 낮을때를 만들 수 있습니다.

 

 

 

 

Train/dev/test splits

일반적으로 트레인/개발/테스트로 나눕니다. 트레인/검증/테스트(Train/Validation/Test) 로도 불립니다. 10,000 개의 example 데이터가 있을 경우 모델의 복잡도를 하나씩 높여가면서 결과를 보고, 또는 람다 값 등 변수들을 조정하면서, 그리고 정규화를 적용해 보면서 모델을 만듭니다.

 

 

이때 데이터셋(S)를 train용 dev용, test용 으로 분리합니다. dev 는 development를 말합니다.

각각의 모델을 S(train) 테레인 데이터를 가지고 훈련하여 적당한 하이퍼파라메타를 찾습니다.  

옵션으로 논문 페이퍼를 위한 내용 필요시 테스트 데이터를 가지고 사용합니다. 이전에는 한번도 사용되지 않은 데이터 입니다.

 

 

degree를 높여가면서 S(dev)개발용 데이터를 이용한 에러가 아래 왼쪽처럼 감소하다가 증가하는 degree가 나옵니다. 보기에는 4.9에러가 나온 degree의 모델을 사용하면 될 것 같은데 자세히 보면 그전, 그리고 전전 에러율이 5.0, 5.1로 큰 차이가 없습니다. 이러한 경우에 실제 모델 degree의 차이때문에 생긴 에러 차이가 아니라 바이어스나 모델의 다른 변수에 의한 것일 수 있습니다. S(test)로 측정해서 선택하도록 합니다.

 

예전에는 대부분 데이터 셋(S)은 아래처럼 70%와 30%로 나누거나 60%, 20%, 20%로 나누었습니다.  그런데 예제 데이터가 10,000,000개 있을 경우 6:2:2로 분리하는 것이 좋을까요? 정말 test 데이터가 2,000,000개 필요한지 생각해 봐야합니다. 온라인 추천이라든가 매우 작은 소수점아래 자리까지 고려하는 경우에는 많은 test 데이터가 필요합니다. 그러나 다른 업무에서는 이렇게 많이 필요하지 않을 수 있습니다. 데이터가 충분히 많이 있다면 90%:5%:5%로 나누는 것이 좋습니다. 그리고 여기에 원하는 정확도의 차이(0.01%까지 고려해야하는지 0.0001%까지 고려해야하는지) 에 따라서 dev/test 수를 조정하면 됩니다.

 

 

 

 

Model selection & Cross validation

이처럼 데이터를 트레인/데브/테스트로 분리하는 것을 (Simple) Hold-out cross validation 이라고 합니다. 그리고 dev set은 Cross Validation Set 이라고도 불립니다.

그럼 데이터 셋이 작은 경우에는 어떻게 할까요?  예를 들면 m=100 개 셈플이 있다면 70개를 훈련에 30개를 개발(검증)에 써야합니다. 훈련과 검증에 너무 작은 수 입니다. 

 

이러한 경우 K-fold Cross Validation을 이용합니다. k는 임의 의 숫자인데 통상적으로 10을 씁니다. 여기서는 설명을 위해 5로 합니다. 전체 데이터셋(S)를 K로 나눈 숫자만큼의 덩어리로 만들어서 , k번 반복하는 동안 한번에 한 덩어리 데이터를 가지고 훈련하는 방법입니다. K 번 훈련해서 나온 에러를 평균해서 하나의 degree(복잡도, 하이퍼 파라메터)에서의 에러율을 구합니다. 이런 절차를 degree 숫자만큼 반복하면서 진행하면 어느 degree에서 가장 작은 에러가 발생하는 지 알수있습니다. (측, 최적의 degree모델을 찾을 수 있습니다.) 데이터를 가지고 1번의 훈련과 검증이 가능 했던 것을 k 번 반복할 수 있게되어서 훈련을 더 잘할 수 있습니다. 알고리즘은 아래의 오른쪽에 나와있습니다.

옵션으로 해도되고 안해도 되는데, 이렇게 해서 선택하게된 degree의 모델을 가지고 전체 100% 훈련데이터를 가지고 훈련해서 모델을 만들 수 있습니다.

이러한 Cross Validation 은 특히 적은 데이터를 가지고 있을때 유용합니다.

 

Leave-one-out Cross Validation

훈련 데이터의 개수가 아주 적을 때(100보다 같거나 작을 경우) Leave-one-out Cross Validation을 쓰면 좋습니다.  예를 들어 훈련 데이터가 20개(m=20)일 경우의 예를 들면 데이터들을 아주 작게 즉 1개 단위로 사용할 수 있게 분리해서 사용 하는 방법입니다. 즉, 20개로 분리하고 19개를 훈련에 사용하고 1개로 검증하고, 전에 사용했던 훈련 데이터중 하나를 검증으로 사용하고 나머지를 모두 훈련데이터로 사용하는 방법입니다. 이렇게 하면 모델의 훈련과 검증을 20번 할 수 있습니다. 컴퓨팅에 많은 비용이 소모되므로 데이터가 많을 경우는 사용하지 않습니다. 말씀 드린 대로 100개 이하인 경우만 사용을 권장합니다.  

 

 

 

Feature Selection

피처 선택(Feature Selection)은 여러 개의 피처 중에서 성능에 많은 영향을 미치는 피처들을 찾는 것을 말합니다. 전방 피처 선택(Forward Feature Selection)과 후방 피처 선택(Backward Feature Selection) 방법이 있습니다. 전방 피처 선택의 예를 들면 5개의 피처가 있다고 가정할 때 가장 영향력이 큰 피처를 하나씩 추가해 가는 방법입니다. 아래의 경우 x2가 제일 중요한 피처라고 발견된 경우 x2는 고정하고 추가로 x2와 x1, x2와 x3, x2와 x4, x2와 x5 처럼 x2피처에 하나의 피처를 추가할 경우 어떤 피처가 가장 영향력이 큰지를 찾는 방법입니다.  이러한 방법으로 하나씩 피처를 선택해나가는 방법이 전방 피처 선택법(Forward Feature Selection)입니다.

반응형
반응형

오래된(?) 강의지만 다시 봐도 참 좋은 강의입니다. 앤드류 응 교수님의 스탠포드 컴퓨터 사이언스 과목의 299번 과목의 첫 번째 강의입니다. 앤드류 응 교수는 MIT에서 석사, UC버클리에서 박사를 받고 스탠포드에서 교수로 일하신 분입니다. 강화 학습 관련 훌륭한 연구를 하셨고, 무엇보다 대중에게는 온라인 학습 포탈로 많이 알려진 MOOC의 일종인 코세라(COURSERA)를 만들고 활성화시킨 분으로 유명합니다. 구글 브레인의 설립자이기도 하시고 바이두에서도 인공지능/기계학습 관련 많은 연구를 주도하신 분입니다.
첫 강의라 전반적인 운영 내용 등 학습과 조금 관련 없는 이야기들이 나오긴하지만 후반부 부터는 기계학습에 대한 간단한 정의와 예를 들어가며 설명해주는 내용이 이해하기 쉽습니다.
들어보면 좋은 내용이 많은 것 같습니다. 주요내용은 아래와 같습니다.
기계학습이란 무엇인지 설명해주고(36:23), 지도학습(Supervised Learning)에 대해서도 예를 들어 설명해줍니다. (39:38) 주택의 크기와 가격을 예로 들어 설명하고, 종양의 크기를 가지고 양성(암)과 음성(물혹)을 학습하는 것도 설명해줍니다. 모델의 아웃풋이 숫자인 경우(Regression)와 0과 1의 분류인 경우(Classification)를 설명합니다. 더 정확한 학습을 위해 종양의 크기와 환자의 나이를 가지고 분류하는 방법을 예로 설명해주고, 실제 현장에서는 더 많은 데이터를 이용하고 이렇게 많은 데이터를 이용할 경우 서포트 백터 머신(Support Vector Machine)이라는 방법(커널)을 이용하여 무한대의 데이터(피처)를 학습할 수 있음을 설명해줍니다.
인공지능(기계학습)의 목적은 인풋 x에 대한 아웃풋 y 를 매핑하는 것을 학습하는 것이라고 설명합니다. x가 주어졌을 때 가장 적합한 y를 매핑하는 것이지요. 그러면서 오래전에 카네기멜론 대학에서 만든 자율주행 자동차에 대한 영상을 보여주면서 x와 y에 대해서 설명해줍니다.(53:00)

Input은 x(도로 전방 사진 이미지)이고 y는 핸들을 오른쪽으로 틀어야할지 왼쪽으로 틀어야 할지입니다. 모델의 학습을 위해서 사람이 도로 전방 사진(x)에 대해서 실제로 어떻게 핸들을 회전하는지를 가지고 학습했다고 합니다.
기계학습 전략(58:10)은 어떻게하면 수많은 의사결정을 내리고 반복적으로 수행해야 하는 모델 개발에서 시스메틱 한 방법으로 진행할지를 찾는 방법에 대해서 이야기한다고 합니다. 몇 개월 씩이나 몰두해서 문제를 해결하기 위한 모델을 개발하지 말고 접근하려는 방법이 잘못되었다는 것을 빨리 알아낼 수 있는 방법에 대해서 향후 수업에서 이야기할 거라고 합니다. 유사한 예로 프로그램 코드를 빠르게 실행시키는 방법은 속도가 빠른 언어로 프로그램을 변경하는 것이 아니라 프로그램 로직에서 병목을 찾아 이를 변경하는 것이 경험 있는 사람들이 해결하는 방법이라고 말합니다.
딥러닝(Deep Learning)에 대해서는 cs230에서 더 깊이 다룬다고 하네요. (1:04:00)
비지도 학습(Unsupervised Learning)에 대해서는 구글 뉴스의 예를 들면서 설명해 줍니다. 방송사나 리포터가 다르더라도 같은 주제의 내용을 묶어서 보여주는 기능이 비지도 학습을 통해 제공되는 것이라고 설명합니다. 또한 칵테일 파티 문제도 비지도 학습으로 다룬다고 합니다.


강화 학습(Reinforcement Learning) (1:11:19)에 대해서는 스탠포드 자율비행 헬리콥터를 예로 들어 설명합니다. 최적의 비행 방법을 찾는 것을 강화 학습하여 진행했다고 합니다. 강화 학습의 예로 애완견에게 좋은 습관을 들이도록 가르칠 때의 예를 들어 설명합니다. 잘했을 때 칭찬해주고 잘못했을 때 벌을 주는 방법으로 강아지가 좋은 습관을 들이도록 한다는 내용입니다. (강아지) 로봇이 장애물을 넘는 방법을 학습하는 것도 강화 학습을 이용한다고 합니다.(1:13:40)

강화학습을 통해 학습한 강아지 로봇이 장애물을 넘는 모습



다음 강의는 아래 링크를 클릭해 주세요
https://bigdatamaster.tistory.com/143


1강의 자세한 내용은 아래의 유튜브 동영상을 참고해주세요.
감사합니다.


https://www.youtube.com/watch?v=jGwO_UgTS7I

반응형

+ Recent posts