지금도 많은 제품이 머신러닝을 활용하지만 더 많은 제품이 머신러닝을 활용할 수 있습니다. 실용적인 머신러닝은 머신러닝의 도움을 받을 수 있는 실용적인 문제를 식별하고 이런 문제를 위해 성공적인 솔루션을 제공하는 것입니다.
머신러닝을 데이터에 있는 패턴을 활용하여 알고리즘을 자동으로 조정하는 과정이라 생각해봅시다. 이 정의는 범용적이기 때문에 많은 애플리케이션, 도구, 서비스가 핵심 기능에 머신러닝을 통합하는 일이 놀라운 것은 아닙니다.
이런 애플리케이션 중 일부는 검색엔진, 소셜 플랫폼의 추천 시스템, 번역 서비스, 사진에서 가족의 얼굴을 자동으로 감지하는 시스템, 음성 명령을 따르는 시스템, 이메일을 쓸 때 문장의 끝말을 추천하는 시스템과 같이 사용자와 직접 상호작용합니다.
일부 애플리케이션은 겉으로 잘 드러나지 않습니다. 그 예로는 스팸 메일과 가짜 계정 필터링, 광고 게재, 효율적인 자원 할당을 위한 미래 사용 패턴 예측, 웹사이트 경험을 개인화하기 위한 실험 등을 들 수 있습니다.
일부 머신러닝 교육과정은 데이터셋을 제공하고 이를 기반으로 모델을 훈련하는 방식으로 머신러닝을 가르칩니다. 하지만 데이터셋에서 알고리즘을 훈련하는 것은 머신러닝 전체 과정에서 작은 부분입니다. 강력한 머신러닝 기반 제품은 하나의 정확도 점수보다 더 많은 것을 고려해야 하는 긴 처리 과정의 결과입니다.
그래서 아이디어에서 시작하여 제품에 이르기까지 예제 애플리케이션으로 각 단계를 설명하면서 모든 과정을 거쳐 볼 필요가 있습니다.
성공적으로 머신러닝 제품을 사용자에게 제공하려면 단순한 모델 훈련 이상의 작업을 수행해야 합니다.
제품의 요구 사항을 머신러닝 문제로 표현하고, 적절한 데이터를 수집하고, 여러 모델을 효율적으로 반복하고, 결과를 검증하고, 견고한 방법으로 배포해야 합니다.
모델 구축은 머신러닝 프로젝트의 전체 작업량 중 10분의 1밖에 되지 않는 경우가 많습니다. 전체 머신러닝 파이프라인(pipeline)을 마스터하는 것은 성공적으로 프로젝트를 구축하거나, 머신러닝 인터뷰를 통과하거나, 머신러닝 팀에서 최고의 기여자가 되는 데 매우 중요합니다.
아이디어에서 머신러닝 애플리케이션 배포까지 가는 길은 길고 험난합니다. 이런 프로젝트를 만드는 많은 회사와 기술자를 보고 경험한 결과, 다음의 네 가지 주요 성공 단계를 확인할 수 있었습니다.
머신러닝 분야는 넓고 제품의 목표를 달성하기 위한 다양한 방법이 존재합니다. 주어진 문제를 위한 최상의 방법은 성공 기준, 가용 데이터, 문제의 복잡성과 같은 많은 요소에 따라 달라집니다. 이 단계의 목표는 올바른 성공 기준을 설정하고 적절한 초기 데이터셋과 모델을 찾는 것입니다.
모델링 작업을 하기 전에 먼저 엔드투엔드 프로토타입을 만듭니다. 이 프로토타입은 머신러닝을 사용하지 않고 제품의 목표을 달성하는 것이 목적입니다. 또한 최상의 머신러닝 적용 방법을 결정하는 데 도움이 됩니다. 프로토타입이 구축되면 머신러닝의 필요성을 알 수 있고 모델 훈련을 위해 데이터 수집을 시작할 수 있습니다.
데이터셋이 준비되면 모델을 훈련하고 단점을 평가할 수 있습니다. 이 단계의 목표는 오류 분석과 구현 사이를 오가며 반복하는 것입니다. 이 반복 루프의 속도를 높이는 것이 머신러닝 개발 속도를 높이는 최상의 방법입니다.
모델이 좋은 성능을 내면 배포를 위해 적절한 방식을 선택해야 합니다. 배포된 후에 예상치 못한 방식으로 종종 모델이 실패합니다. 그래서 모델의 오류를 완화하고 모니터링하는 방법을 알아 둘 필요가 있습니다.
앞서 머신러닝 아이디어에서 시작하여 제품에 이르기까지 예제 애플리케이션으로 각 단계를 설명하면서 모든 과정을 거쳐볼 필요가 있다고 했습니다. 성공적인 머신러닝 서비스 개발을 위해서는 위 네 가지 성공 단계에 대한 이해가 필요하다고 생각합니다.
이런 종류의 시스템을 매일 배포하는 팀과 함께 일하면서 배운 도구, 모범 사례, 자주 발생하는 실수를 공유하는 것도 도움이 될 것이라 생각합니다.
머신러닝을 사용하면 기계가 데이터로부터 학습하고, 주어진 목표에 맞게 최적화하는 확률적인 방식으로 문제를 해결할 수 있습니다. 이런 방식은 프로그래머가 단계별로 명령을 작성해 어떻게 문제를 해결하는지 나타내는 전통적인 프로그래밍과는 반대입니다. 따라서 경험적으로 해결책을 정의할 수 없는 문제에 적합한 시스템을 만들 때 특히 머신러닝이 유용합니다.
[그림 : 전통적인 프로그램 방식과 샘플을 사용한 학습 방식] (출처 : <머신러닝 파워드 애플리케이션>, 한빛미디어, 2021)
위 그림은 고양이를 감지하는 시스템을 만드는 두 가지 방법을 보여줍니다. 왼쪽 프로그램은 직접 작성한 명령문으로 구성됩니다. 오른쪽의 머신러닝 방법은 고양이와 강아지 레이블(label)이 부여된 데이터셋(dataset)으로 이미지를 해당 카테고리(category)로 매핑하는 모델을 학습합니다.
머신러닝 방법에서는 어떻게 결과를 달성할지에 관한 지침은 없으며 일련의 입력과 출력 샘플만 사용합니다. 머신러닝은 강력하며 완전히 새로운 제품을 만들 수 있지만 패턴 인식에 기반하기 때문에 일정한 불확실성(uncertainty)을 가집니다. 그래서 제품의 어떤 부분에 머신러닝을 사용하면 도움이 될지 파악하는 것이 중요합니다.
또한 나쁜 사용자 경험이 발생할 위험을 최소화하도록 학습의 목표를 정해야 합니다. 예를 들어 픽셀 값을 기반으로 이미지에 있는 동물을 자동으로 감지하는 단계별 명령을 사람이 작성하는 것은 거의 불가능합니다(그리고 시간이 매우 많이 소요됩니다).
하지만 합성곱 신경망(CNN. convolutional neural network)에 수천 개의 동물 사진을 주입하면 사람보다 정확하게 분류하는 모델을 만들 수 있습니다. 이런 작업은 머신러닝으로 해결할 수 있는 좋은 예입니다.
반면에 세금을 자동으로 계산하는 애플리케이션은 정부의 가이드라인을 따라야 합니다. 경험했을지 모르지만 세금 신고에 오류가 있으면 곤란해집니다. 따라서 머신러닝으로 세금을 자동으로 신고하려는 생각은 좋지 않습니다.
감당할 만한 규칙으로 문제를 해결할 수 있다면 머신러닝을 사용할 필요가 없습니다. 감당할 만하다는 의미는 명확한 코드로 작성할 수 있고 유지 보수하기 너무 복잡하지 않다는 뜻입니다.
머신러닝이 새로운 종류의 애플리케이션 등장을 가능하게 만들지만 머신러닝으로 어떤 작업을 해결할 수 있고, 해결해야 하는지 아는 것이 중요합니다. 제품을 만들 때 구체적인 비즈니스 문제에서부터 시작해 머신러닝이 필요한지 결정하고 가능한 한 빠르게 반복할 수 있는 머신러닝 방법을 찾아야 합니다.
그래서 머신러닝으로 해결할 수 있는 작업인지 판단하는 방법부터 어떤 머신러닝 방법이 제품의 목표에 적절한지, 어떤 데이터를 준비해야 하는지를 정리한 상태에서 머신러닝의 구현은 시작됩니다.
이 글은 <머신러닝 파워드 애플리케이션> 도서 내용 일부를 발췌 편집하여 작성되었습니다. 머신러닝 아이디어에서 시작해 완성된 제품에 이르기까지 강력한 머신러닝 애플리케이션을 구축하는 전 과정에 대한 보다 자세한 정보는 하기 책에서 만나볼 수 있습니다.
이전 글 : AI 제품 관리자에게 필요한 실무 기술
최신 콘텐츠