Machine Learning(ML) 첫걸음

본 게시물은 구글 머신러닝 단기집중과정 스터디을 참고하여 작성되었습니다.

week 0?

  • 코딩에서 0부터 시작해서 0은 아님…
  • 구글 머신러닝의 내용을 담고 있지만 언급되지 않는 것들
  • 시작하기 전에 기본적인 내용을 알고 가기 위한 기초 내용
  • 전반적인 내용 및 미리 알고 있으면 좋을 법한 내용을 먼저 정리

정의

  • 인공 지능의 한 분야로, 컴퓨터가 학습할 수 있도록 하는 알고리즘과 기술을 개발하는 분야
  • 스터디 후 개인적인 소감 : 휴먼러닝 + for문의 진화 버전?

그래서 머신러닝이 무엇인가?

우린 고등학교에서 확률&통계를 배웠다.
하지만 어떤 데이터에서 평균, 분산, 표준 편차, 정규분포 등 구하는 법을 배웠고
이를 통해서 의미있는 무언가를 얻을 수 없었다.
(열심히 시험 공부만 했을뿐…)

그래서 회귀분석을 통해서 이런 데이터들에서 변수 간의 관계 나타내 정확도를 측정하고
이를 통해서 새롭게 들어오는 input에 대해서 예측하는 것이다.

Figure 1 : 회귀분석

하지만 데이터가 많아야 더욱 정확한 데이터를 얻을 수 있는 것이고
무작정 많은 데이터를 통해 관계도를 뽑아낸다면
기상청 같이 데이터는 방대하지만 실시간 예측이 필요한 분야는
실시간은 커녕, 하루에 한번 예측하는 것도 어려울 것이다.

Figure 2 : 위상사진

따라서, 머신러닝이란 
많은 데이터를 효율적으로 분석해서 이를 기반으로 
들어온 input에 대해서 예측할 수 있게 만드는 것이다.

머신러닝이 필요한 예시 - 가위바위보

예를 들자면 가위바위보를 할때 상대가 가위를 낼 확률은 1/3이다.
하지만 이 확률로는 실제로 지금 상대가 무엇을 낼지 알 수는 없다.

만약에 내가 A라는 사람을 최대한 많이 이기기 위해서는
A에게 임의의 대상 10명에게 10번의 가위바위보를 시키고
이를 기반으로 대결을 하면 된다.

어떻게 하면 이 데이터를 기반으로 최대한 많이 이길 수 있을까?
바로… 상대의 패턴을 파악하면 된다!

  1. 매 경기마다의 A 데이터만 반영한다.
    • A가 1번째에 가위를 많이 냈다면 바위를 내면 되고
    • 2번째에 바위를 많이 냈다면 보를 내면 된다.
    • 하지만 매 판마다 가장 많이 나온 것을 참고하면 실제와는 다를 수 있다!
    • 앞에서 먼저 상대했던 사람들에게 가위 승률이 좋지 않아 가위를 내지 않는다면…?
1 2 3 4 10
가위(S) 2 1 2 5 0
바위(R) 3 1 5 1 7
보(P) 5 8 3 4 3
예상 P P R S R
  1. A가 앞에서 냈던 것을 참고한다.
    • A가 처음에 가위를 내고 다음에 보를 많이 냈다면 나는 2번째에선 가위를 내면 된다.
    • A가 가위-보-보-바위…. 패턴으로 자주 보였다.
    • 이 경우에는 경우의 수가 많아지지만 데이터만 확실하다면 승률이 높다.
    • 하지만 A가 상대하는 사람마다 다르게 대처하고 있다면..?

A가 가위로 시작했을 때의 경우의 수
S : 가위, R : 바위, P : 보

S
/ l \
R S P
/ l \ / l \ / l \
R S P R S P R S P

1은 확률(결과)을 단순히 계산하기 좋지만 큰 틀을 벗어나기 어렵기 때문에 변칙적인 요소에 약하다.
2는 모든 경우의 수를 계산하기에는 연속되는 경기가 많아질수록 어려워지지만 1에 비해서 변칙적인 요소에 강하다.

물론 1, 2 둘 다 정답일 수도 있고 아닐 수도 있다.(실제로 이렇게까지 안해ㅂ…..)
그리고 더 많은 방법도 있을 것이다.

복잡하니 한마디로 정리 좀….

글로 이해하기

새로운 데이터(예측하고 싶은 데이터)가
머신러닝을 통해 만든 그래프에
최대한 가까워지도록 그래프를 예측하는 것

그림으로 이해하기

Figure 3 : 예측 그래프
모델 1보다는 2가 더 예측을 잘한 것

그래서 필요한 기본 개념은…?

개인적으로 머신러닝은 수알못도 할 수 있다고 생각한다.
하지만 수알못도 기본 상식은 알고 가야 고통이 덜하다고 생각한다.
스터디하면서 정말 오랜만에 확률/통계를 접한 나도 고통 받았는데
단어조차 모르는 사람들은 얼마나 고통이었을까….
그래서 간략하게 적어본다.

예측

예측은 말그대로 예측이다.
기존 데이터나 미래 상황에 대한 가정을 활용하여 어떤 결과를 예측하는 것을 말한다.
인터넷 용어 검색해봐도 예측을 예측한다고 한다;;;

  • 예시
    • 오늘 날씨가 영하이다. -> 비가 올까? 눈이 올까? -> 영하니깐 눈이 오겠지
    • 영희가 매일 지각한다. -> 수업을 시작했는데 나타나지 않는다. -> 오늘도 지각이겠지

손실

여기서 손실은 예측한 값과 실제 값의 차를 말한다.
평균이 100이라서 100을 예측했지만 실제로 80이 측정됐다면 20의 손실이 발생한 것이다.

  • 예시
    • 곱창을 어제 100인분 팔았으니 오늘도 100인분을 준비하자 -> 실제로 50인분만 판매됨 -> 50인분의 손실 발생

행렬(matrix)

되게 뜬금 없는 개념이라고 생각할 수 있겠지만 아주 중요한 개념이다.
고딩때 행렬을 왜 배우나 했는데 이렇게 쓸지 누가 알았겠는가….(주입식 교육 ㅂㄷㅂㄷ)

보통 방정식 계산할때 행렬(matrix)을 사용한다.
컴퓨터는 능동적으로 식과 식을 빼고 더하고 해서 미지수를 구할 수 없으니
방정식을 행렬 바꾸어 계산한다.

  • 그리고 행렬을 다차원 데이터를 나타내기 아주아주 좋은 방식이다.

  • 예시

    • 방정식 계산
      ax + by = p
      cx + dy = q
      에서 x, y 값 구하기

      Figure 4 : 방정식을 행렬로 계산하기

차원(dimension)

간단하게 1, 2, 3차원과 같은 n차원을 말할 수도 있고 차원을 통해서 벡터를 표현할 수 있다.

  • 2차원 원 : 1 = x^2 + y^2
    Figure 5 : 2차원 그래프

  • 3차원 원 : 1 = x^2 + y^2 + z^2
    Figure 6 : 3차원 그래프

  • 5차원 데이터 : 레이더 차트
    Figure 7 : 레이더 차트

    위의 공식을 보면 알겠지만 결국 차원이라는건 어떤 미지수(특성)를 의미하는 것이다.

  • 2차원은 x,y
  • 3차원은 x,y,z
  • 5차원 데이터는 게임에서 능력치를 비교할때 많이 볼 수 있는 차트인데
    이는 [견고성, 가격, 디자인, 편의성, 창의성] 이렇게 특성(미지수) 5개로 구성된 데이터인 것이다.

    즉, n차원은 미지수(특성)가 n개 있다는 뜻이다.
    그렇다면 이런 미지수로 방정식을 세울 수 있고
    방정식은 결국 행렬로 변환 가능하다.

    차원은 결국 우리가 어떤 데이터를 행렬로 표현하기 위해서 사용하는 것
    행렬로 표현하는 이유는? 컴퓨터가 계산하기 위함!

벡터

Figure 8 : 속도는 벡터, 속력은 스칼라

흔히 공대 개그로 많이 쓰는 짤인데

  • 속력는 초당 이동거리를 나타낸 값이고(10m/s)
  • 속도는 속력에 방향을 나타낸 값이다.(앞으로 10m/s, 뒤로 10m/s)

    이는 간단히 스칼라, 벡터로 구별되는데

  • 스칼라는 크기를 나타낸 것이고
  • 벡터는 방향과 크기를 나타낸 것이다.

    그래서 보통 그래프에서 벡터를 표시할때 방향을 나타내기 위해 화살표를 사용한다.

    Figure 9 : 벡터 그래프

    차원을 설명할때 차원으로 벡터를 표현할 수 있다고 했는데
    이 말은 벡터를 행렬로 표현한다는 뜻이다.

    2016년 롤 대회에서 팀별 능력치를 Figure 7과 같은 레이터 차트로 비교한 글의 이미지로 예를 들면

    원본 링크

    Figure 10 : SKT vs EmFire

    라인전, 대치상황, 정글장악력, 한타, 조합시너지 이렇게 5개의 스탯으로 분석해놨다.
    이는 5개의 벡터이자 5차원 데이터이고 이를 행렬로 나타낸다면 아래 표와 같이 나타날 것이다.
    이렇게 차원, 벡터, 행렬의 개념은 컴퓨터가 계산할 수 있도록 바꾸기 위한 것이다.

SKT EmFire
라인전 9 9
한타 10 8
조합시너지 10 8
정글장악력 8 10
대치상황 7 10

지수/로그

지수/로그는 크거나 작은 그래프를 표현하기 좋기 때문에 사용한다.
또한 둘은 역함수(y=x에 대칭) 관계이므로
값을 역추적할때 서로 필요하다.
y=2^x에서 y=2일때 x 값을 알고 싶다면 역함수를 찾아서 x=2일때 y 값을 찾으면 된다.
(역함수는 y=log(x)이고 x=2일때 y는 1이므로 원래 알고 싶었던 x값은 1이다.)

자연상수, 자연로그/지수

자연상수(e)는 매우매우 크거나 작은 값의 근사값을 처리하기 유리하다.