Computer >> 컴퓨터 >  >> 프로그래밍 >> Ruby

모든 웹 개발자가 머신러닝을 배워야 하는 이유

아직 아이는 없지만, 언젠가 자녀를 갖게 된다면 꼭 두 가지를 가르치고 싶습니다.

  • 개인 금융 관리
  • 머신러닝

기술적 특이점(singularity)이 곧 도래할 것이라고 믿든 믿지 않든, 오늘날 세상이 데이터 위에서 돌아간다는 사실은 부정할 수 없습니다. 데이터가 어떻게 지식으로 변환되는지 이해하는 것은 이 시대에 성장하는 모든 사람에게 필수적이며, 특히 개발자에게는 그 중요성이 더욱 큽니다.

이 글은 풀스택 루비(Ruby) 개발자에게 머신러닝(ML)을 쉽게 다가갈 수 있도록 돕기 위한 시리즈의 첫 번째 글입니다. 여러분이 활용할 수 있는 머신러닝 도구들을 이해하면, 이해관계자들이 더 나은 의사결정을 내리도록 도울 수 있습니다. 이후 글에서는 개별 기법과 실전 예제를 다룰 예정이지만, 이번 글에서는 전체적인 지도를 펼치고 "여러분은 여기 있습니다"라고 핀을 꽂아 두는 단계입니다.

머신러닝의 초창기

모든 웹 개발자가 머신러닝을 배워야 하는 이유

인공지능(AI)과 머신러닝은 결코 새로운 개념이 아닙니다. 이미 1950년대에 아서 사무엘(Arthur Samuel)은 체커를 둘 수 있는 컴퓨터 프로그램을 만들었고, 여기에는 널리 쓰이는 탐색 알고리즘인 '알파-베타 가지치기(alpha-beta pruning)'가 활용되었습니다.

1960년대에는 다층 신경망(multi-layered neural network)과 최근접 이웃(nearest-neighbor) 알고리즘이 등장했는데, 후자는 오늘날에도 창고에서 최적 경로를 찾는 데 사용됩니다.

그렇다면 이렇게 오래된 기술임에도 불구하고, 왜 요즘 AI 스타트업이 이토록 주목받고 있을까요? 제 생각에는 두 가지 이유가 있습니다.

  • 컴퓨팅 파워의 발전 (무어의 법칙 참조)
  • 매일 인터넷에 쏟아져 들어오는 방대한 데이터

데이터 생성량과 관련해 저를 매번 놀라게 하는 통계 두 가지를 소개합니다.

  • 2018년 기준으로 인류는 하루에 약 2.5 퀸틸리언(2.5×10¹⁸) 바이트의 데이터를 생산하고 있으며, 포브스 기사 이후 이 숫자는 분명 더 늘어났을 것입니다.
  • 세상에 존재하는 데이터의 90%는 불과 최근 2년 안에 생성된 것입니다.

이 두 가지를 종합하면 다음과 같은 의미가 됩니다. 첫째, 데이터를 저장하고 알고리즘을 실행하는 데 필요한 하드웨어 비용은 계속 저렴해지고 있습니다. 둘째, 머신러닝 모델을 학습시키는 데 쓸 수 있는 데이터는 폭발적인 속도로 증가하고 있습니다.

우리는 매일 인공지능과 머신러닝의 세계와 상호작용하고, 그 영향을 받으며, 동시에 그 일부가 되어가고 있습니다. 예를 들어 다음과 같은 것들은 모두 알고리즘 덕분이라고 해도 과언이 아닙니다.

  • 여러분의 신용 한도
  • 질병 진단 보조
  • 어쩌면 취업 여부조차도
  • 현재 교통 상황을 반영한 최적 경로 안내
  • 알렉사(Alexa)가 재채기를 했다는 말의 의미를 정확히 이해하는 것
  • 스포티파이(Spotify)가 여러분의 새로운 최애곡을 추천해주는 것

앞서 미래의 자녀 이야기를 꺼낸 이유는 다음과 같습니다. 디지털 삶이 현실 삶에 어떤 영향을 미치는지, 데이터 프라이버시 선택이 어떤 결과를 낳는지, 그리고 언제 기계를 믿어야 하고 언제 믿지 말아야 하는지 스스로 판단하는 법을 익혔으면 하기 때문입니다.

이 글의 나머지 부분에서는 제가 공부한 세 가지 유형의 머신러닝, 즉 지도 학습(supervised learning), 비지도 학습(unsupervised learning), 강화 학습(reinforcement learning)을 개괄적으로 살펴보겠습니다. 각 접근법이 무엇으로 구별되며, 어떤 문제 해결에 특히 강한지 함께 알아보겠습니다.

지도 학습(Supervised Learning)

모든 웹 개발자가 머신러닝을 배워야 하는 이유

지도 학습은 말 그대로 인간의 '감독' 아래 이루어집니다. :) 모기지(주택 담보 대출) 승인 여부를 판단하는 지도 학습 시스템을 만든다고 가정해 보겠습니다. 작동 방식은 대략 다음과 같습니다.

  1. 은행이 고객 속성(나이, 연봉 등)과 결과(상환, 연체 등)를 매핑한 데이터셋을 구축합니다.
  2. 이 데이터로 시스템을 학습시킵니다.
  3. 학습된 시스템은 신청자의 속성을 바탕으로 미래 결과를 예측합니다.
  4. 알고리즘이 맞히면 "좋았어! 정답이야."라고 알려주고, 틀리면 "아니, 틀렸어. 개선해서 다시 시도해봐."라고 피드백을 줍니다.

이 예시는 알고리즘의 출력이 '승인' 또는 '거절' 같은 카테고리이기 때문에 분류(classification) 문제에 해당합니다. 분류 문제의 다른 예로는 다음과 같은 판단이 있습니다.

  • 특정 환자가 병에 걸렸는지 여부
  • X-ray 사진에 골절이 있는지 여부
  • 이메일이 스팸인지 여부

ML 분류 알고리즘의 수학적 원리가 궁금하다면, 나이브 베이즈(naive Bayes), 서포트 벡터 머신(SVM), 로지스틱 회귀(logistic regression), 신경망(neural networks), 랜덤 포레스트(random forests) 등을 검색해 보세요.

'예/아니오' 형태의 결과를 내는 분류 문제 외에도, 지도 학습은 회귀(regression) 문제에도 활용됩니다. 회귀는 연속적인 값으로 예측을 수행하며, 대표적인 예는 다음과 같습니다.

  • 특정 주식의 미래 가치
  • 뉴잉글랜드 패트리어츠가 슈퍼볼에서 우승할 확률
  • 회사가 후보자에게 제시해야 채용을 수락할 평균 연봉

지도 회귀 문제에 사용되는 대표 알고리즘으로는 선형 회귀(linear regression), 비선형 회귀(non-linear regression), 베이지안 선형 회귀(Bayesian linear regression) 등이 있습니다.

비지도 학습(Unsupervised Learning)

모든 웹 개발자가 머신러닝을 배워야 하는 이유

앞선 지도 학습 예시에서는 분류 카테고리를 사전에 정의했습니다. 모기지 신청자는 승인되거나 거절되거나 둘 중 하나였습니다.

반면 비지도 학습에서는 우리가 카테고리를 제공하지 않습니다. 애초에 카테고리가 존재하지 않거나 알 수 없는 경우가 많고, 알고리즘이 스스로 결론을 도출해야 합니다.

그럼 왜 비지도 학습을 사용할까요?

  1. 때로는 카테고리를 미리 알 수 없기 때문입니다. 인터넷에 널려 있는 많은 데이터는 구조화되지 않은(unstructured) 상태, 즉 라벨이 없는 상태로 존재합니다.
  2. 또 다른 경우에는 무엇을 찾아야 할지조차 모르기 때문에, 분류에 유용한 패턴이나 특징(feature)을 알고리즘이 찾아내도록 요청합니다.

구조화되지 않은 데이터를 다루는 또 다른 방법은 사람이 직접 확인하고 라벨을 붙이는 것입니다. 실제로 데이터에 수동으로 분류 라벨을 붙이는 작업(data labeling)을 위해 인력을 고용하는 회사들이 많이 있습니다.

비지도 학습의 주요 접근법

비지도 학습에서 널리 쓰이는 두 가지 기법은 연관 규칙(association)클러스터링(clustering)입니다.

연관 규칙: 여러분이 아마존(Amazon)이라고 상상해 보세요. 방대한 고객 데이터와 구매 이력이 쌓여 있을 것입니다. 비지도 학습을 활용하면 고객을 '쇼핑 성향 유형별'로 나눌 수 있는데, 예를 들어 분홍색 우산을 산 고객이 말차 티도 함께 구매할 가능성이 높다는 사실을 발견할 수도 있습니다.

클러스터링: 클러스터링은 데이터를 지정된 개수의 그룹(cluster)으로 분할하는 기법입니다. 예를 들어 주택 관련 데이터를 가지고, 범죄율 같은 특정 특징(feature)이 해당 주택이 위치한 동네를 예측하는 데 쓸 수 있는지 확인할 수 있습니다. 또는 코사인 유사도(cosine similarity) 같은 기법으로 텍스트 분류도 가능합니다(예: 이 글은 테니스에 관한 글인가, 요리인가, 우주인가?).

비지도 학습 기법을 더 깊이 알고 싶다면 k-평균 클러스터링(k-means clustering), 코사인 유사도(cosine similarity), 계층적 클러스터링(hierarchical clustering), k-최근접 이웃(k-nearest-neighbor) 클러스터링 등을 검색해 보세요.

강화 학습(Reinforcement Learning)

모든 웹 개발자가 머신러닝을 배워야 하는 이유

강화 학습은 목표 지향적인 알고리즘을 활용하기 때문에 게임 분야에서 흔히 사용됩니다. 지도 학습과 달리 각각의 결정이 독립적이지 않습니다. 즉, 현재 입력이 주어지면 알고리즘이 의사결정을 내리고, 다음 입력은 이 결정에 따라 달라집니다.

초인종이 울릴 때 짖기를 멈추면 제 반려견의 머리를 쓰다듬어주고, 짖음을 멈추지 않으면 켄넬에 보내는 것처럼, 강화 학습 알고리즘도 목표를 최적화하는 결정을 내리면(예: 최대 점수 획득) 보상을 받고, 형편없는 결정을 내리면 벌점을 받습니다.

강화 학습 알고리즘의 대표적인 적용 분야는 다음과 같습니다.

  • 체스, 바둑 같은 게임 (아직 보지 않으셨다면 넷플릭스 다큐멘터리 <알파고>(AlphaGo)를 강력히 추천합니다.)
  • 로보틱스(로봇이 원하는 작업을 수행하도록 학습)
  • 자율주행차
  • 주식 시장을 이기도록 학습된 로보 어드바이저(robo-advisor)

강화 학습의 알고리즘에 대해 더 알아보고 싶다면 Q-러닝(Q-learning), SARSA(state-action-reward-state-action), DQN, A3C(asynchronous advantage actor critic) 등을 검색해 보세요.

마무리하며

이 글의 예제들이 여러분이 머신러닝 기법을 이해하고, 각 기술이 오늘날 우리가 살아가는 복잡한 세계에 어떤 식으로 영향을 미치는지 감을 잡는 데 도움이 되었기를 바랍니다. 배워야 할 것이 산더미처럼 많아 때로는 벅차게 느껴질 수 있지만, 어디선가 시작하는 것이 아무것도 하지 않는 것보다 낫습니다. 그리고 기억하세요. 이 기술의 상당 부분은 사실 그리 새롭지 않습니다. 다만 데이터가 풍부해지고 처리 비용이 저렴해지면서 우리 귀에 더 자주 들려올 뿐입니다.