[인공지능 기초] 1. Basic Machine Learning

2021. 5. 8. 00:23인공지능/인공지능 기초

인공지능을 처음 접했던 것은 대학교 4학년 수업에서였다. 

시키는 일만 하는 코딩만 배우다, 스스로 배우는 프로그램이라니...충격이였다.

(그래서 빠지게 된듯...)

 

이번에 올릴 게시글들은 내가 처음 인공지능을 공부할 당시에 github에 요약해놓았던 것들을 

모아모아 쓸 것이다. 

 

인공지능을 많이 배웠던, 이미 공부했던 사람이라면 매우 쉽게 느껴질 수 있으니 참고바란다.


1. Machine Learning

인공지능이란, 인간의 인지와 관련된 기능을 모사하는 SW/HW를 말한다.

말그대로 기계가 사람의 지능을 가지게 되어서 여러 Task를 해내는 것이다.

 

현재까지 엄청난 발전이 이루어져 왔지만,

아직까지 사람과 비슷한 지능을 가진 인공지능은 꿈만 같은 이야기다.

 

Machine Learning에 대한 설명 중 가장 유명한 Tom M. Mitchell의 말이 있다.

 

"A computer program is said to learn from Experience E with repect to some class of Task T 
and Performance measure P, if its Performance at Tasks in T as measured by P, improve with Experience E."

 

처음보면 이게 도대체 뭔 소리지....라는 생각이 들 것이다. 

대략 Task T에 대한 경험 E와 성능 측정 P를 통해서 학습하는 프로그램이 머신러닝이라는 소리이다.

 

머신러닝은 좀 더 쉽게 말하자면, 가능한 모든 경우의 수를 프로그래머가 정의해주지 않더라도,

데이터를 통한 학습으로 최적의 판단이나 예측을 가능하게 해주는 것을 말한다.

 

처음 인공지능을 배우게 되면 인공지능이랑 머신러닝은 무슨 차이고, 딥러닝은 또 뭐지? 라고 생각하는 사람이 있을 것이다. 다음 표하나면 이해 끝!

 

 

위의 보이는 그림처럼 딥러닝 $\subset$ 기계학습 $\subset$ 인공지능의 관계에 있다.

 

1.1 표현형 학습(Representing Learning)

Deep Neural Network가 높은 성능을 가질 수 있는 이유는 복잡한(고차원의) 데이터 공간을 

선형분류가 가능할 정도로 단순화시켜 표현하기 때문이라는 이론이다.

 

단순 퍼셉트론을 생각해보면 된다.

나중에 퍼셉트론에 대해서는 더 자세히 다루겠지만 여기서는 선형 분리를 예로 들어보겠다.

**선형 분리: X와 Y사이 관계를 선형으로 표현하는 것을 말한다.

**밑 그림 AND 연산을 예로 들면 x1, x2가 (1, 1)일 경우만 검정(1)이고, 나머지는 흰색(0)이다.

 

출처: https://www.quora.com/How-can-a-multi-layer-perceptron-address-limitations-of-a-single-layer-perceptron

위의 그림을 보면 AND와 OR연산은 선형, 즉 직선을 통해서 분리가 가능하다. 

하지만 OR는 어떠한가? 저 그림을 직선으로 나눌 수 있을까? (만약 찾았다면 수학 학회에 연락해라..)

 

즉, 이렇게 단순 선형으로 분리가 불가능한 문제를 3차원, 4차원, ..., 100차원 등의 고차원 문제로 바꾸어서 풀겠다란 말이다. 

출처: https://stackoverflow.com/questions/37734655/neural-network-solving-xor

직선이 안되면 위와 같이 곡선으로 풀어버리겠다 이것이다. 

**위 2차원 공간에서는 곡선으로 보이지만, 어느 고차원에서는 두 클래스를 나누는 선형공간이 될 것이다.

 

1.2 Performance(성능 측정)

모델의 성능은 어떻게 측정하는 것일까?

데이터 기반으로 학습을 하는 만큼 성능도 데이터로 측정을 하게 된다.

 

그럼 train시에 사용한 데이터로 Performance를 측정하면 될까?

물론 아니다.

훈련할 때 사용된 데이터는 모델이 이미 인지(?)하고 있기 때문에 당연히 높은 정확도가 나온다.

 

데이터셋의 종류는 다음과 같이 3종류가 있다.

  • train-set
  • test-set
  • validation-set

train-set은 학습을 할 때 사용되는 데이터셋이고,

validation-set은 학습하는 중에 중간 평가를 하기 위해 사용되며, 학습 자체에는 쓰이지 않는다.

test-set은 모델의 Performance를 측정할 때 쓰이게 된다.

**test-set과 validation-set은 train-set에 포함되어있지 않은 데이터로만 구성되어 있어야한다.

**보통 validation-set은 학습이 잘 되고 있는지를 보는 것이다. Hyper-parameter값을 조정할 때도 쓰인다.

**test-set이 validation-set이 될 수 있다.

 

1.4 머신러닝의 분류

머신러닝은 크게 Supervised LearningUnsupervised Learning, Reinforcement Learning으로 나뉜다.

**최근에는 GAN(Generative Adversarial Network)도 추가하여 분류하기도 한다.

 

Supervised Learning(지도 학습)

Supervised Learning은 말그대로 학습을 누군가가 지도한다는 것이다. 

 

Supervised Learning과 Unsupervised Learning의 가장 큰 차이점은 지도자가 있냐 없냐이다.

여기서 지도자란, labeled data를 말한다.

 

딥러닝이나 머신러닝을 접해본 사람이라면 "데이터를 태깅해야한다"라는 말을 들어봤을 것이다.

태깅이란 것이 Labeled data를 만드는 작업이다.

 

Unsupervised Learning(비지도 학습)

지도학습과는 반대로 지도자가 없다.

비지도 학습에서는 데이터들만 주어지고, 이 데이터들로부터 유의미한 다른 데이터를 만들어내는 것이 목적이다.

 

지도학습과 비지도학습의 예

우리는 강아지와 고양이 사진만 보고 강아지인지 고양인지를 분류하는 모델이 필요하다. 

Supervised Learning관점에서는 이미지와 해당 이미지에 해당하는 정답지(강아지 또는 고양이)를 같이 넣어주어야한다.
Unsupervised Learning관점에서는 정답지 없이 이미지만 모델에 넣어주면 된다.

 

실제로는 Unsupervised Learning은 Classificaiton Task에서 잘 사용되지 않는다.

어떠한 Task이냐에 따라서 적합한 학습 방법이 있다.

 

  • Supervised Learning
    • Classificaiton(분류)
      • 이산 값(discrete value)에 대한 예측. 
      • 신원 사기 조회, 이미지 분류, 고객 유지, 진단 
    • Regression(회귀)
      • 연속 값(continuous value)에 대한 예측.
      • 광고 조회수 예측, 기상, 마켓 예측, 기대수명 예측, 인구 수 증가 예측

<왼쪽> Classificaiton, <오른쪽> Regression

  • Unsupervised Learning
    • 차원 축소
      • ML알고리즘의 계산 능력과 저장 공간이 한정되어있다
      • 특성이 많아질수록 공간 소모가 심해진다. (ex. SVM)
      • 차원 축소는 원래 input의 대부분의 정보를 유지하면서 데이터의 노이즈를 제거하거나 낮은 차원으로 데이터를 압축시키는 역할을 한다. 
      • 특징 제거, 구조 발견, 빅데이터 시각화, 의미있는 압축
    • 클러스터링: 추천 시스템, 티켓 마켓팅, 고객 세분화

<왼쪽> 차원 축소, <오른쪽> Clustering

출처:medium.com/analytics-vidhya/visitor-segmentation-using-k-means-clustering-c874dcd41785

 

Reinforcement Learning(강화 학습)

출처 : (왼쪽)http://blog.quantylab.com/rl.html

강화 학습에는 환경과 에이전트 두 가지 요소로 구성되어 있다.

 

간략하게 설명하자면 에이전트가 어떠한 행동을 취하고, 그에 대해서 환경이 보상을 내리게 된다.

이러한 루틴이 반복되고 에이전트는 보상을 많이 받는 쪽으로 학습하게 되어 최적의 행동을 하게 되는 것이다.

 

주로 게임, 기술 습득, 로봇, 실시간 결정하는 Task에 쓰인다.

 

(강화학습은 이 블로그에서는 자세히 다루지 않을 예정이다...)

 

2. Deep Learning(딥러닝)

딥러닝에 대해서도 간단하게 알아보도록 하자!

 

딥러닝은 머신러닝의 일종이고, 지도학습이며

깊은(deep) 층(layer)를 쌓아서 만든 모델을 이용하여 학습을 하는 방법이다.

출처: semiengineering.com/deep-learning-spreads/

컴퓨터비전을 예로, 딥러닝 이전의 머신러닝은 개발자가 정한 Feature Extraction 방식(HOG, Haar, Canny 등)을 통해 1차 특징을 만들어낸 다음, ANN이나 SVM을 통해 최종 Output을 내었다.

 

이런 방식의 단점Feature Extraction부분을 사람이 정해주어야 한다는 것이다.

어떤 방식을 선택하느냐에 따라 결과가 달라지므로 이 방식을 정해주는 과정도 시간이 소요된다.

 

여기서 딥러닝은 모델이 Feature extraction과 원하는 Task(위 예에서는 classification)를 한번에 학습해서 처리하도록 해준다. 

 

또한, 학습을 통해 feature를 뽑아내므로, 사람이 고안해낸 feature extraction보다 성능이 더 좋은 경우가 많다.

 

딥러닝에서 학습을 한다는 것은 무엇을 의미할까?

지금은 조금 어려운 이야기 일 수 있지만 미리 개념만 알아두자.

 

딥러닝에서 학습이란,

Cost Function에서 계산되는 loss 값을 최소화시키도록 Parameter(Weight and Bias)를 업데이트 시키는 것.

 

이 내용은 다른 내용들을 배운 후에, 더 자세히 다루도록 하겠다.

 

OverFitting(오버피팅)

https://blog.funhnc.com/entry/Overfitting-vs-Underfitting-%EA%B0%9C%EB%85%90%EC%A0%81-%EC%84%A4%EB%AA%85

딥러닝에는 오버피팅이라는 개념이 있다.

 

Overfitting이란, 모델이 train dataset에 너무 fitting되어서 train-set에 대해서는 정확도가 매우 높게 나오지만 test-set에서는 정확도가 낮게 나오는 현상을 말한다. 

 

보통 학습할 수 있을 정도의 충분한 데이터가 없거나 

학습을 너무 과도하게 하여서 모델이 train-set에 fitting되는 경우 발생한다.

 

또한, 모델이 데이터셋에 비해 너무 깊을 때에도 나타난다.

 

이러한 현상은 다음과 같은 방법으로 완화시킬 수 있다.

  • 데이터 추가
  • Auto encoding
  • Dropout
  • Regularization

CNN vs RNN

CNN, RNN은 딥러닝을 배운다면 알아두어야할 중요한 개념이다.

둘 다 딥러닝의 일종으로 보통 CNN은 영상처리, RNN은 자연어 처리에 많이 사용된다.

 

CNN의 배경

출처: https://www.run.ai/guides/deep-learning-for-computer-vision/deep-convolutional-neural-networks/

ANN은 1차원 벡터밖에 처리할 수 없다는 한계점을 가지고 있다.

현실세계에서는 수많은 데이터가 다차원으로 이루어져있어 ANN만으로는 해결하기 힘들다.

 

그래서 다차원을 처리하기위한 새로운 모델 구조가 필요했고, 그것이 CNN이다.

 

RNN의 배경

출처: https://medium.com/deeplearningbrasilia/deep-learning-recurrent-neural-networks-f9482a24d010

CNN은 시간 개념이 존재하지 않는다. 연속되어 일어나는 사건에 대한 관계성을 만들어내기 어렵다.

 

이러한 연속된 time line 정보를 같이 살려주면서 데이터를 처리할 수 있는 모델이 RNN이다.

 

Loss vs Cost 함수

딥러닝에서 loss 함수, cost 함수라는 단어를 많이 들어보았을 것이다. 

 

굳이 구분하려고 한다면

loss하나의 데이터에 대한 loss, cost전체 총 데이터에 대한 loss라 할 수 있다.

 

하지만 보통 구분하지 않고 같은 의미로 사용된다.

이 블로그에서는 loss함수라 하겠다.

 

 

loss function with SGD(Stochastic Gradient Descent)

출처: https://www.mdpi.com/1424-8220/20/3/723/htm

loss함수는 말그대로 loss를 구하기 위한 함수이다.

loss란 간략히 얘기하자면 labeled data인 실제값(ground truth)예측값(prediction value)간의 오차를 말한다.

 

이 loss함수는 Convex함수를 주로 사용하는데, 

non-convex일 경우, Gradient Descent Algorithm을 적용하지 못하기 때문이다.

[Convex 함수 조건]

$f(\alpha x + (1- \alpha)y) \lt \alpha f(x) + (1-\alpha)f(y) \forall x, y \in dom f, \forall \alpah \in [0,1]$

 

Preprocessing(전처리)

대부분의 머신러닝 알고리즘은 feature들이 같은 스케일을 가지는 것을 요구한다. 

그 외에도 훈련성과를 높이기 위해 원하는 목적에 맞도록 데이터들을 변형/변환할 필요가 있다.

 

이렇게 데이터를 학습시키기 전에 모델에 맞도록 데이터를 최적화하는 과정을 전처리라고 한다.

 

No Free Launch Therom

유명한 머신러닝에 대한 이론으로, 머신러닝 알고리즘은 특정한 가정이 요구되는, 특정한 task에 잘 동작되도록 만들어진다는 이론이다.

 

즉, 모든 task에 다 잘 동작하는 머신러닝 알고리즘은 없다라는 뜻이다.

=> 여러번에 걸쳐 다양한 모델을 실험하고, 자신이 원하는 결과에 제일 잘 맞는 모델을 찾아야한다!


이상으로 머신러닝 기초에 대해서 배워보았다.

인공지능을 한번도 배워보지 못한 사람들을 위하여 전체적으로 인공지능을 살펴보았다.

 

이후에는 한 단계 한 단계씩 더 자세한 내용을 배워보도록 하겠다! 


**사용된 이미지에 대해서 출처를 같이 적었지만 문제가 된다면 삭제하겠습니다. 메일로 연락주세요.

If you any problem with Images uploaded, Contact me by email please. I will delete it.