1.1 머신러닝이란?
일반적 정의
[머신러닝은] 명시적인 프로그래밍 없이 컴퓨터가 학습하는 능력을 갖추게 하는 연구 분야다.
조금 더 공학적 정의
어떤 작업 T에 대한 컴퓨터 프로그램의 성능을 P로 측정했을 때 경험 E로 인해 성능이 향상됐다면, 이 컴퓨터 프로그램은 작업 T와 성능 측정 P에 대해 경험 E로 학습한 것이다.
스팸 필터는 스팸메일과 일반 메일의 샘플을 이용해 스팸메일 구분법을 배울 수 있는 머신러닝 프로그램이다. 시스템이 학습하는 데 사용하는 샘플을 훈련 세트 training set라고 하고 각 훈련 데이터를 훈련 사례 trainnig instance 혹은 샘플이라고 한다. 이 경우 작업 T는 새로운 메일이 스팸인지 구분하는 것이고, 경험 E는 훈련 데이터 trainnig data이며, 성능 측정 P는 직접 정의해야 한다. 예를 들면 정확히 분류된 메일의 비율을 P로 사용할 수 있다. 이 성능 측정을 정확도 accuracy라고 부르며 분류 작업에 자주 사용된다. 위키백과 문서를 모두 내려받으면 우리 컴퓨터는 아주 많은 데이터를 갖게 된다. 그렇다고 해서 어떤 작업이 갑자기 좋아지는 것은 아니다. 그러므로 위키백과 문서를 다운로드하는 것은 머신러닝이 아니다.
1.2 왜 머신러닝을 사용하는가?
전통적인 프로그래밍 기법을 사용해 어떻게 스팸 필터를 만들 수 있을까.
- 먼저 스팸에 어떤 단어들이 주로 나타나는지 살펴본다. 그러면 '4U', '신용카드', '무료', '굉장한' 같은 단어나 구절이 제목에 많이 나타나는 경향이 있다는 것을 알 수 있다. 어쩌면 보낸 이의 이름이나 메일 주소, 본문이나 이메일의 다른 요소에서 다른 패턴을 감지할 수도 있다.
- 발견한 각 패턴을 감지하는 알고리즘을 작성하여 프로그램이 이런 패턴을 발견했을 때 그 메일을 스팸으로 분류하게 된다.
- 프로그램을 테스트하고 론칭할 만큼 충분한 성능이 나올 때까지 1단계와 2단계를 반복한다.
반면 머신러닝 기법에 기반을 둔 스팸 필터는 일반 메일에 비해 스팸에 자주 나타나는 패턴을 감지하여 어떤 단어와 구절이 스팸 메일을 판단하는 데 좋은 기준인지 자동으로 학습한다. 그러므로 프로그램이 훨씬 짧아지고 유지 보수하기 쉬우며 대부분 정확도가 더 높다.
스팸 메일 발송자가 '4U'를 포함한 모든 메일이 차단된다는 것을 안다면 어떻게 될까? 아마도 '4U'대신 'For U'를 쓰기 시작할지도 모른다. 전통적인 프로그래밍 방식의 스팸 필터는 'For U'메일을 구분하기 위해 수정이 필요하다. 스팸 메일 방송자가 스팸 필터에 대항해 계속 단어를 바꾸면 영원히 새로운 규칙을 추가해야 한다.
하지만 머신러닝 기반의 스팸 필터는 사용자가 스팸으로 지정한 메일에 유독 'For U'가 자주 나타나는 것을 자동으로 인식하고 별도의 작업을 하지 않아도 자동으로 이 단어를 스팸으로 분류한다.
우리는 머신러닝을 통해 배울 수도 있다. 즉, 머신러닝 알고리즘이 학습한 것을 조사할 수 있다.
예를 들어 스팸 필터가 충분한 스팸 메일로 훈련되었다면 스팸을 예측하는 데 가장 좋은 단어 및 단어의 조합이 무엇인지 확인할 수 있다. 가끔 예상치 못한 연관 관계나 새로운 추세가 발견되기도 해서 해당 문제를 더 잘 이해하도록 도와준다. 머신러닝 기술을 적용해서 대용량의 데이터를 분석하면 '겉으로는 보이지 않던 패턴을 발견'할 수 있다. 이를 '데이터 마이닝 (data mining)'이라고 한다.
요약하면 머신러닝은 다음 분야에 뛰어나다.
- 기존 설루션으로는 많은 수동 조정과 규칙이 필요한 문제: 하나의 머신러닝 모델이 코드를 간단하게 만들고 전통적인 방법보다 더 잘 수행되도록 할 수 있다.
- 전통적인 방식으로는 해결 방법이 없는 복잡한 문제: 가장 뛰어난 머신러닝 기법으로 해결 방법을 찾을 수 있다.
- 유동적인 환경: 머신러닝 시스템은 새로운 데이터에 적응할 수 있다.
- 복잡한 문제와 대량의 데이터에서 통찰 얻기
1.3 애플리케이션 사례
- 이미지를 분석해 자동으로 분류하기: 이미지 분류 작업이다. 일반적으로 합성곱 신경망(convolutional neural network CNN)을 사용하여 수행
- 뇌를 스캔하여 종양 진단하기: 시맨틱 분할 작업이다. 일반적으로 CNN을 사용해 이미지의 각 픽셀을 분류한다.(종양의 정확한 위치와 모양을 결정해야 한다.)
- 자동으로 뉴스 기사를 분류하기: 자연어 처리 netural language processing NLP 작업. 텍스트 분류, 순환 신경망 recurrent neural network(RNN), CNN, 트래스포머 Transformer를 사용해 해결할 수 있다.
- 긴 문서를 자동으로 요약하기: 텍스트 요약이라고 불리는 NLP의 한 분야이다.
- 챗봇 chatbot 또는 개인 비서 만들기: 자연어 이해 natural language understanding NLU와 질문-대답 모듈을 사용해 여러 가지 NLP 컴포넌트가 필요하다.
- 다양한 성능 지표를 기반으로 회사의 내년도 수익을 예측하기: 회귀 regression 작업이다.(즉 숫자로 값을 예측한다) 선형 회귀, 다항 회귀, 회귀 랜덤 포레스트, 인공 신경망 artificial neural network과 같은 회귀 모델을 사용해서 해결할 수 있다. 지난 성능 지표의 시퀀스를 고려한다면 RNN, CNN 또는 트랜스포머를 사용할 수 있다.
- 음성 명령에 반응하는 앱을 만들기: 음성 음식 작업이다. 오디오 샘플 처리해야 한다. 이는 길고 복잡한 시퀀스이므로 일반적으로 RNN, CNN 또는 트랜스포머를 사용한다.
- 신용 카드 부정 거래 감지하기: 이상치 탐지 작업이다.
- 구매 이력을 기반으로 고객을 나누고 각 집합마다 다른 마케팅 전략을 계회하기: 군집 clustering 작업이다.
- 고차원의 복잡한 데이터셋을 명확하고 의미 있는 그래프로 표현하기: 데이터 시각화 작업이다. 차원 축소 dimensionality reduction 기법을 많이 사용한다.
- 과거 구매 이력을 기반으로 고객이 관심을 가질 수 있는 상품 추천하기: 추천 시스템이다. 과거 구매 이력을 인공 신경망에 주입하고 다음에 구매할 가능성이 가장 높은 상품을 출력하는 것이 한 가지 방법이다. 일반적으로 모든 고객의 구매이력을 기반으로 훈련한다.
- 지능형 게임 봇 만들기: 보통 강화 학습 reinforcement leanring으로 해결한다. 시간이 지나면 주어진 환경에서 보상이 최대가 되는 행동을 선택하는 에이전트를 훈련하는 머신러닝의 한 분야이다. (예를 들어 상대 플레이어 점수가 잃을 때마다 봇이 보상을 받을 수 있다) ex) 알파고
1.4 머신러닝 시스템의 종류
1.4.1 지도 학습과 비지도 학습
지도 학습
지도 학습 supervised learning에는 알고리즘에 주입하는 훈련 데이터에 레이블 lable이라는 원하는 답이 포함된다. 분류 classification가 전형적인 지도 학습 작업이며, 스팸 필터가 좋은 예이다. 스팸 필터는 많은 메일 샘플과 소속 정보(스팸인지 아닌지)로 훈련되어야 하며 어떻게 새 메일을 분류할지 학습해야 한다.
전형적인 예측 변수 predictor variable라 부르는 특성 feature (주행거리, 연식, 브랜드 등)을 사용해 중고차 가격 같은 타깃 targit 수치를 예측하는 것을 회귀 regression라고 부른다.
- k-최근접 이웃 k-nearest neightbors
- 선형 회귀 linear regression
- 로지스틱 회귀 logistic regression
- 서포트 벡터 머신 support vector machine(SVM)
- 결정 트리 decision tree와 랜덤 포레스트 random forest
- 신경망 neural networks
비지도 학습
비지도 학습 unsupervised learning에는 말 그대로 훈련 데이터에 레이블이 없다. 시스템이 아무런 도움 없이 학습해야 한다.
- 군집 clustering
- k-평균 k-means
- DBSCAN
- 계층 군집 분석 hierarchical cluster analysis (HCA)
- 이상치 탐지 outlier detection와 특이치 탐지 novelty detection
- 원-클래스 one-class SVM
- 아이솔레이션 포레스트 isolation detection
- 시각화 visualization 와 차원 축소 dimensionality reduction
- 주성분 분석 principal component analysis (PCA)
- 커널 kernel PCA
- 지역적 선형 임베딩 locally-linear embedding (LLE)
- t-SNE t-distributed stochastic neighbor embedding
- 연관 규칙 학습 association rule learnig
- 어프라이어리 Apriori
- 이클렛 Eclat
준지도 학습
데이터에 레이블을 다는 것은 일반적으로 시간과 비용이 많이 들기 때문에 레이블이 없는 샘플이 많고 레이블 된 샘플은 적은 경우가 많다. 어떤 알고리즘은 일부만 레이블이 있는 데이터를 다룰 수 있다. 이를 준지도 학습이라고 한다.
강화 학습
강화 학습은 매우 다른 종류의 알고리즘이다. 여기서는 학습하는 시스템을 에이전트라고 부르며 환경을 관찰해서 행동을 실행하고 그 결과로 보상 또는 벌점을 받는다. 시간이 지나면서 가장 큰 보상을 얻기 위해 정책이라고 부르는 최상의 전략을 스스로 학습한다. 정책은 주어진 상황에서 에이전트가 어떤 행동을 선택해야 할지 정의한다.
1.4.2 배치 학습과 온라인 학습
머신러닝 시스템을 분류하는 데 사용하는 다른 기준은 입력 데이터의 스트림으로부터 점진적으로 학습할 수 있는지 여부이다.
배치 학습
배치 학습에서는 시스템이 점진적으로 학습할 수 없다. 가용한 데이터를 모두 사용해 훈련시켜야 한다. 일반적으로 이 방식은 시간과 자원을 많이 소모하므로 보통 오프라인에서 수행된다. 먼저 시스템을 훈련시키고 그런 다음 제품 시스템에 적용하면 더 이상의 학습 없이 실행된다. 즉, 학습한 것을 단지 적용만 한다. 이를 오프라인 학습이라고 한다.
배치 학습 시스템이(새로운 종류의 스팸 같은) 새로운 데이터에 대해 학습하려면 (새로운 데이터뿐만 아니라 이전 데이터도 포함한) 전체 데이터를 사용하여 시스템의 새로운 버전을 처음부터 다시 훈련해야 한다. 그런 다음 이전 시스템을 중지시키고 새 시스템으로 교체한다.
온라인 학습
온라인 학습에서는 데이터를 순차적으로 한 개씩 또는 미니 배치라 부르는 작은 묶음 단위로 주입하여 시스템을 훈련시킨다. 매 학습 단계가 빠르고 비용이 적게 들어 시스템은 데이터가 도착하는 대로 즉시 학습할 수 있다.
온라인 학습은 연속적으로 데이터를 받고(예를 들면 주식 가격) 빠른 변화에 스스로 적응해야 하는 시스템에 적합하다.
컴퓨팅 자원이 제한된 경우에도 좋은 선택이다.
온라인 학습 시스템에서 중요한 파라미터 하나는 변화하는 데이터에 얼마나 빠르게 적응할 것인지 이다. 이를 학습률이라고 한다.
학습률을 높게 하면 시스템이 데이터에 빠르게 적응하지만 예전 데이터를 금방 잊어버릴 것이다. 반대로 학습률이 낮으면 시스템의 관성이 더 커져서 더 느리게 학습됩니다. 하지만 새로운 데이터에 있는 잡음이나 대표성 없는 데이터 포인트에 덜 민감 해진다.
1.5 머신러닝의 주요 도전 과제
간단하게 말해 우리의 주요 작업은 학습 알고리즘을 선택해서 어떤 데이터에 훈련시키는 것이므로 문제가 될 수 있는 두 가지는 '나쁜 알고리즘'과 '나쁜 데이터'이다. 이 절에서는 이 두 가지에 대해 알아보자.
- 충분하지 않은 양의 훈련 데이터
- 대표성 없는 훈련 데이터
- 샘플이 작으면 샘플링 잡음 sample noise(즉, 우연에 의한 대표성 없는 데이터)이 생기고, 매우 큰 샘플도 표본 추출 방법이 잘 못되면 대표성을 띠지 못할 수 있다. 이를 샘플링 편향 sampling bisa이라고 한다. - 낮은 품질의 데이터
- 훈련 데이터가 에러, 이상치, 잡음(예를 들면 성능이 낮은 측정 장치 때문에)으로 가득하다면 머신러닝 시스템이 내재된 패턴을 찾기 어려워 잘 작동하지 않을 것이다. 그렇기 때문에 훈련 데이터 정제에 시간을 투자할 만한 가치는 충분하다. - 관련 없는 특성
성공적인 머신러닝 프로젝트의 핵심 요소는 훈련에 사용할 좋은 특성들을 찾는 것이다.
- 특성 선택 feature selection: 가지고 있는 특성 중에서 훈련에 가장 유용한 특성을 선택한다.
- 특성 추출 feature extration: 특성을 결합하여 더 유용한 특성을 만든다. 앞서 본 것처럼 차원 축소 알고리즘이 도움이 될 수 있다.
- 새로운 데이터를 수집해 새 특성을 만든다.
- 훈련 데이터 과대 적합
- 훈련 데이터 과소 적합
1.6 테스트와 검증
모델이 새로운 샘플에 얼마나 잘 알반화될지 아는 유일한 방법은 새로운 샘플에 실제로 적용해 보는 것이다. 이를 위해 실제 서비스에 모델을 넣고 잘 작동하는지 모니터링하는 방법이 있다. 이것은 좋은 방법은 아니다.
훈련 오차가 낮지만(즉, 훈련 세트에서 모델의 오차가 적음) 일반화 오차가 높다면 이는 모델이 훈련 데이터에 과대 적합되었다는 뜻이다.
- 보통 데이터의 80%를 훈련에 사용하고 20%는 테스트용으로 떼어놓는다. 하지만 이는 데이터셋 크기에 따라 다르다.
1.6.1 하이퍼파라미터 튜닝과 모델 선택
모델 평가는 아주 간단하다. 그냥 테스트 세트를 사용하면 된다. 두 모델 중 어떤 것을 선택할지 갈등하고 있다고 해보자. 둘 중에 하나를 어떻게 결정할 수 있을까? 두 모델 모두 훈련 세트로 훈련하고 테스트 세트를 사용해 얼마나 잘 일반화되는지 비교해 보면 된다.
홀드 아웃 검증
간단하게 훈련 세트의 일부를 떼어내서 여러 후보 모델을 평가하고 가장 좋은 하나를 선택한다. 이 새로운 홀드 아웃 세트를 검증 세트라고 부른다. 구체적으로 말하면 줄어든 훈련 세트(즉, 전체 훈련 세트에서 검증 세트를 뺀 데이터)에서 다양한 하이퍼파라미터 값을 가진 여러 모델을 훈련한다. 그다음 검증 세트에서 가장 높은 성능을 내는 모델을 선택한다. 홀드아웃 검증 과정이 끝나면 이 최선의 모델을 전체 훈련 세트에서 다시 훈련하여 최종 모델을 만든다. 마지막으로 최종 모델을 테스트 세트에서 평가하여 일반화 오차를 추정한다.
데이터 불일치
어떤 경우에는 쉽게 많은 양의 훈련 데이터 얻을 수 있지만 이 데이터가 실제 제품에 사용될 데이터를 완벽하게 대표하지 못할 수 있다. 예를 들어 꽃 사진을 찍어 꽃 이름을 자동으로 찾아주는 모바일 앱을 만든다고 가정해보자. 웹에서 수백만 개의 꽃 사진을 쉽게 다운로드할 수 있다. 하지만 모바일 앱을 사용해 실제로 찍을 사진을 완벽하게 대신하지는 못한다. 대신할 수 있는 사진이 10,000개만 있을 수 있다.
이 경우 가장 중요한 규칙은 검증 세트와 테스트 세트가 실전에서 기대하는 데이터를 가능한 한 잘 대표해야 한다는 것이다. 따라서 검증 세트와 테스트 세트에 대표 사진이 배타적으로 포함되어야 한다. 이 사진을 섞어서 반은 검증 세트에 반은 테스트 세트에 넣는다.(양쪽 세트에 중복되거나 비슷한 사진이 들어가지 않게 한다.) 하지만 웹에서 다운로드한 사진에 모델을 후련한 후에 검증 세트에서 모델의 성능을 측정하면 매우 실망할 것이다.
'스터디 > 딥러닝' 카테고리의 다른 글
Attention Mechanisms (0) | 2022.07.22 |
---|---|
[논문] ViT(Vision Transformer) (0) | 2022.07.18 |
CNN VS FC (0) | 2022.07.14 |
Pytorch vs Tensorflow (0) | 2022.03.15 |
CNN-based Approaches For Cross-Subject Classification in Motor Imagery: From The State-of-The-Art to DynamicNet (0) | 2022.03.12 |