티스토리 뷰
1. 기계학습이란?
초창기 인공지능은 컴퓨터가 모든 경우의 수를 따져서 가장 좋은 수를 택하는 것이었어
다들 체스 챔피언을 꺾은 슈퍼 컴퓨터 '딥 블루'에 대해서 들어본 적이 있을 거야.
딥 블루도 마찬가지로 체스의 모든 경우의 수를 따져서 가장 최적의 결과를 선택하는 방식으로 프로그래밍 되었지.
슈퍼컴퓨터인 딥블루는 수많은 코어들로 1초에 2억가지 경우의 수를 계산했어. 그 결과 세계 챔피언도 이기는 위엄을 보여줬지.
예전 인공지능은 대부분 이런 경우의 수를 모두 계산하거나 특정 상태에서 특정한 행동을 하는 식으로 직접 프로그래밍 해서 인공지능을 만들었어.
하지만 이런 방식의 인공지능은 어느정도 룰이 있거나 지정된 범위가 있을 때만 가능한 방법이었어.
수많은 경우의 수가 있는 여러가지 문제들 (필체 및 얼굴 인식 등등)이나 바둑 같은 건 어려운 방법이야.
바둑의 모든 경우의 수를 계산하는데 10^111년이 걸린다니까 얼마나 미친짓인지 알겠지?
게다가 수많은 경우의 수가 있는 문제 같은 경우에는 일일히 다 프로그래밍 해줄 수도 없었어.
스타크래프트 인공 지능을 만든다고 생각해봐. 저글링이 3마리 일 때 처리하고 미네랄이 400일때 처리하고 언제 전부 다 만들겠냐?
그래서 컴퓨터가 인간처럼 점점 학습을 하면서 똑똑해지는 기계학습(Machine Learning, 머신러닝)을 개발하게 되었어.
지난 글에서도 소개했지만 기계학습은 컴퓨터 공학에다가 통계학을 접목시킨 학문이야.
만약 체스 기계 학습 알고리즘을 처음에 만들어 놓으면 처음엔 병신같이 두지만 몇십 몇백 몇천판을 깨져보고 이겨도 보고 하면서 점점 잘 두게 된다 이기야.
얼굴 인식도 마찬가지로 수많은 사진을 보고서 아무리 이상한 각도라도 누구인지 판별하게 되지. 따봉북에서 그런 경험들 다들 있지?
구글에서 개발하는 무인 자동차 운전이나 맞춤형 쇼핑 같은 것도 전부 기계학습으로 만들어 진 거지.
최근에는 의학분야에서도 CT만 보고도 질병을 판별하는 인공지능 같은 기술도 만들어지고 있어.
2. 기계학습의 원리
-뇌를 벤치마킹하자! 인공 신경망
그럼 기계학습이 대체 어떤 원리로 작동하는 걸까?
기계학습에 대한 첫 시도는 1940년도에 인간의 뇌가 어떤식으로 돌아가는지 연구하다가 생겨났어.
인간의 뇌는 수많은 뉴런으로 이루어져있는건 급식 시절에 다 배우지?
과학자들은 이 뇌가 어떻게 사물을 인식하고 판단하는지 궁금해서 이런저런 실험을 하게 되었어.
연구자들은 이 뉴런들은 조건에 따라 병신 같이 예 아니오 두가지 대답밖에 못 하는 걸 알게 되었어.
수상돌기에서 다른 뉴런이 준 신호를 입력받아서 일정 강도 (역치) 이상이 되면 다음 뉴런에 1을 아니면 0을 보내는 거였지.
그런데 이 뉴런들이 촘촘히 연결 되어 하나의 네트워크를 형성하면 엄청난 지적 능력을 가지게 된다는 걸 알게되었지.
뉴런마다 다른 강도에 반응하고 그 정보가 모이면 인식을 할 수 있다는 걸 알게 된거지!
사람들은 이 뉴런이 인식하는 모델을 그대로 프로그래밍 하면 컴퓨터도 인지를 할 수 있겠구나! 불알을 탁 쳤지
저 각 네모나 동그라미가 뉴런이라고 생각하자.
입력으로 날개에 1, 꼬리에 0, 부리에 1 이런식으로 들어오면 각 뉴런마다 있는 역치 값에 의해서 다음 뉴런에게 보내는거야.
그렇게 해서 정해진 규칙에 1이 되면 새로 인식을 하게 되는거지!
만약 날개 1, 부리 0, 엔진 1 이면 비행기로 인식하겠지?
그럼 학습은 어떻게 시키나?
처음에 랜덤한 역치로 모든 뉴런을 설정하고 새라는 결과에 대한 입력을 계속 주는거야. 만약 원하는데로 결과가 안 나오면
역치를 원하는 방향으로 조금씩 움직여준다. 그러다보면 점점 입력에 따른 결과가 맞는 모습이 나오게 되지.
실제로 학습을 하는 뇌의 뉴런을 연구해보면 이런식으로 화학적 역치가 움직인다고 해.
이런식으로 뇌의 신경망을 벤치마킹해서 만든 인공지능 알고리즘을 인공신경망 (Artificial Neural Network)이라고 불렀어.
재밌는건 이러한 연구는 1940년대에 이미 다 발표된 논문이었지만, 2000년 초까지 별 다른 반응은 없었어.
왜냐하면 이렇게 신경망 뉴런으로 실제로 이용할 만한 이미지 인식 같은 곳에 쓰기에는 컴퓨터 성능이 너무 낮았었거든.
고화질 이미지의 픽셀 하나하나를 뉴런화 시켜서 몇만번 씩 학습시키려면 20세기의 컴퓨터로는 어림도 없겠지?
그래서 한동안 저런 발상은 잊혀져있었어.
그러다 2000년대 후반에 들어서 컴퓨터 성능이 비약적으로 늘어나고 이러한 모델이 실현 가능해지면서 인기가 엄청 높아졌어.
그리고 계산 능력이 아무리 좋아져도 학습 할 데이터가 적으면 말짱 꽝이겠지?
근데 스마트폰 시대와 더불어 데이터를 엄청나게 많이 생성하게 되어서 이런 기계학습 알고리즘의 상용화가 가능하게 되었어.
(그들이 쏟아내는 데이터는 상상을 초월한다....)
이렇게 인공 신경망을 이용하면 인간이 학습하듯이 바둑에서도 승리로 가는 수를 조금씩 배우게 되면서 모든 경우의 수를 계산 할 필요 없이
자신이 학습한 대로만 두면 되는거야. 또 다른 알고리즘과 수많은 시뮬레이션을 하면서 계속해서 알고리즘을 고쳐나갈 수 있지.
-답이 없는 데이터도 학습한다
물론 기계학습 알고리즘에 인공신경망만 있는 것은 아니야.
이런 기본 인공신경망 알고리즘의 단점이 있는데, 그것은 바로 '지도 학습'이라는 거야.
무슨 말이냐면 답이 있는 문제에 대해서만 학습이 가능하다는거야.
새 라는 그림을 보여주고 이것이 새다! 라고 해주면 그에 맞춰서 학습을 하게 되지.
마찬가지로 바둑이나 게임에서도 이런 모양새면 이기는 수다! 라고 해줘야 그걸 토대로 학습을 하게 되는거야.
따봉북 얼굴 인식 같은 것도 태그를 해주면 지도 학습이 되겠지?
하지만 현실에서는 답을 모르는 상태에서도 학습을 하는 경우가 많아.
사과사진인지 모르는 상태에서 사과 사진을 무작위로 마구 줬을 때 이 것 끼리 묶고
다양한 데이터를 줬을 때 스스로 분류를 하게 하고 싶을 때는 어떻게 할까?
만약 바둑에서 여러가지 다음 수 중에서 승리에 가까운 수끼리 묶고 싶다면?
이런 문제를 위해 K-평균 알고리즘이라는 걸 개발했어.
K라는 건 군집 숫자야. 만약에 너가 어떤 데이터를 2 세트로 나누고 싶으면 K = 2가 되겠지?
K-평균 알고리즘은 의외로 굉장히 간단해
1. 무게 중심을 정한다.
2. 각 무게중심과 가까운 애들끼리 묶는다.
3. 묶은 애들끼리 무게중심을 다시 구한다.
4. 1단계로 돌아가서 반복
이렇게 무현반복하면 가장 최적화된 집단으로 나뉘게 돼.
예를 들어서 보자.
먼저 아무 무게중심 두개를 정했어. 빨간 무게중심과 파란 무게중심
그 다음 각 무게중심에 가까운 애들끼리 묶어줬어
그 다음 새 집단에서 무게중심을 찾아서 다시 옮겨줘
이걸 반복하다보면
이렇게 두 집단으로 나뉘게 되지!
이렇게 데이터를 집단화 시키면 새로운 입력이 들어왔 을 때 '이것은 빨간 쪽에 해당하는 데이터다' 이렇게 판단을 할 수 있는거야.
새 그림이 들어오면 '이것은 새 그림입니다' 라고 판단도 가능해지는 것이지!
만약 수 많은 바둑 데이터가 들어온다고 생각해보자. 수많은 기보와 경우의 수를 따져가며 학습을 하기 시작하면
이기는 수와 지는 수를 군집화 시킬 수 있겠지? 물론 위의 알고리즘은 아주 간단한 버전들이고 실제로는
훨씬 더 복잡하고 체계화 된 방식들이 있어.
이러한 알고리즘으로 기계들이 학습을 하면서 점점 똑똑해지는거야.
이세돌과 컴퓨터의 경기는 누가 이길지는 아직 나도 잘 모르겠어. 얼마나 바둑 기보가 데이터화 되어있는지는 알 수 없으니까.
하지만 기존의 딥블루가 했던 체스 대결처럼 모든 경우의 수를 따지는 것이 아닌 인간처럼 생각하며 둔다는 점에서
이 경기는 다른 의미로 봐야한다고 생각해.
결과가 어떻든 간에 기계학습이 굉장히 진보했다는 뜻이기도 하고. 무인 자동차가 사용화 될 날이 얼마 안 남은 것 같아.