(번역) 머신러닝을 배우지 마세요

Jung Han
6 min readMar 5, 2024

--

ML모델을 사용해 소프트웨어를 빌드하는 방법을 학습하세요

원문:https://medium.com/@calebkaiser/dont-learn-machine-learning-8af3cf946214

Source: Pexels

면책 사항: 이 글은 업계에 대한 학술적 조사가 아닌 머신러닝 팀에 대한 저의 관찰을 바탕으로 한 것입니다. 참고로 저는 프로덕션 환경에서 모델을 배포하기 위한 오픈 소스 플랫폼인 Cortex의 기여자입니다.

개발자라면 머신러닝에 대한 관심이 조금이라도 있을 것입니다. 스스로 예측을 학습할 수 있는 알고리즘이라는 개념은 정말…. 멋지죠.

하지만 머신러닝을 공부하기로 결심하고 일반적인 권장 사항을 따라 시작한다면 선형 대수와 다변수 미적분을 배우는 데 2주를 소비한 후 포기할 가능성이 높습니다.

그 이유는 대부분의 머신러닝 입문 자료가 개발자를 위한 것이 아니라 ML 연구자를 위한 것이기 때문입니다. 이런 성향은 머신러닝으로 제품을 만들고자 하는 개발자에게는 문제가 될 수 있습니다.

제품을 만들고 싶으신가요, 아니면 연구하고 싶으신가요?

2000년대 후반 이전까지만 해도 머신러닝은 연구에만 국한된 문제였습니다. 의미 있는 방식으로 머신러닝을 프로덕션에 사용하는 기업은 많지 않았습니다.

따라서, 머신러닝 입문 자료의 대부분은 이러한 연구 관점에서 머신러닝에 접근합니다. 수학적 관점에서 신경망을 설명하는 것으로 시작해 역전파(back propagation) 및 적대적(adversarial) 네트워크와 같은 ML의 모든 이론을 설명합니다.

대학과 관련이 없는 자료도 어느 정도는 이 패턴을 따릅니다. 예를 들어보죠. 아래 문서는 TensorFlow의 “초보자를 위한 빠른 시작”에서 직접 가져온 것입니다.

소스: https://www.tensorflow.org/tutorials/quickstart/beginner?hl=ko

제가 혼란스러운 표현을 골라 언급했다고 생각하신다면, 전체 내용을 읽어보시기를 바랍니다.

이미 머신러닝의 수학에 익숙하거나 머신러닝을 배우는 데 흥미가 있다면 이 접근 방식이 적합할 것입니다. 하지만 머신러닝으로 무언가를 만들고자 하는 것이 주된 목적이라면 이 방법이 적합하지 않을 수도 있습니다.

프로그래밍적 접근으로 비유하자면, 이 접근 방식은 어셈블리를 먼저 배우면서 코드 작성을 배우는 것과 같습니다. 사실상 이런 식으로 배우는 개발자는 거의 없습니다.

참고: 만약 당신이 어떻게든 어셈블리로 코딩을 시작했다면 미안합니다. 당신이 실행하고 있는 어떤 낯선 리눅스 배포판에서 브라우저를 설치한 것에 대해 놀랍다고 생각합니다.

코딩을 배웠다면 아마도 Hello world를 고수준 언어로 작성하면서 처음 시작했을 겁니다. 그런 다음 프로젝트에 약간의 복잡성을 도입하면서 필요에 따라 점점 더 낮은 수준의 프로그래밍을 배웠을 것입니다.

이러한 학습 패턴은 무언가를 만드는 것을 우선시한다는 점에서 소프트웨어를 만드는 사람들 사이에서 그동안 성공적으로 받아들여졌습니다. 만약 당신이 논문을 출판하는 것보다 추천 엔진을 만드는 데 더 관심이 있다면, 이 방법으로 머신러닝을 배워야 합니다.

소프트웨어를 만들면서 ML을 배우는 방법

만약 당신이 강의를 들으며 가장 잘 배우는 타입의 사람이라면, fastai의 개발자를 위한 실용적인 딥러닝 강좌가 가장 큰 도움이 될 것입니다. 이 강좌는 탑-다운, 실습을 통한 ML 학습 접근법에 대한 가장 좋은 자료입니다.

이 글의 목표는 fastai를 대대적으로 홍보하는 것이 아닙니다. 창립자인 Jeremy Howard와 Rachel Thomas는 개발자들이 실제로 무언가를 만들면서 딥러닝을 가르치는 여러 강좌를 구성했습니다. 그들은 만들어지는 프로젝트와 관련된 기본 이론을 이해하면서 실제로 무언가를 만드는 방식으로 딥러닝을 가르칩니다. 그들의 가르치는 스타일에 대한 감을 얻기 위해 Rachel Thomas의 이 강연을 확인해 보세요.

반대로, 만약 당신이 직접 뛰어들어 무언가를 만들면서 가장 잘 배우는 사람이라면 다른 프로그래밍과 마찬가지로 흥미로워 보이는 프로젝트를 선택해 시작해 보세요. 초보자에게 적합한 NLP 프로젝트의 방대한 목록이 여기에 정리되어 있으니 바로 시작하세요.

이러한 방식으로 학습한다고 가정할 때 머신러닝으로 구축하는 것에 익숙해지는 좋은 접근 방식은 다음과 같습니다.

  1. 텍스트 자동 완성기 또는 번호판 식별기 구축과 같은 목표를 설정합니다.
  2. 프로젝트에 맞는 사전 학습된 모델을 찾습니다. 앞서 언급한 프로젝트에는 각각 gpt-2 또는 YOLOv3가 적합합니다.
  3. 좀 더 정교한 작업을 원한다면 gpt-2-simple과 같은 라이브러리를 사용하여 모델을 파인 튜닝(자체 데이터에 맞게 사용자 지정)할 수도 있습니다.
  4. 마지막으로 모델을 마이크로서비스로 배포합니다.

API로 배포된 모델이 있으면 다른 웹 서비스처럼 쿼리하고 이를 이용해 앱을 구축할 수도 있습니다.

이 프로젝트에서 이 프로세스를 실제로 적용한 실제 사례를 볼 수 있는데, 이 프로젝트는 혼자 머신러닝을 공부한 엔지니어가 만든 것입니다.

이 접근 방식을 사용하면 머신러닝에 대한 다양한 인기 모델 아키텍처와 접근 방식, 그리고 어떤 앱에 적합한지에 대해 배울 수 있습니다. 또한, 모델로 실제 제품을 구축하는 데 필수적인 ML 인프라에 대해 배울 수 있다는 점도 중요합니다.

머신러닝으로 빌드할 수 있게 되면, 그 때 이론을 배우세요.

만약 당신이 엔지니어라면, 어떤 형태든 인증을 구현해 본 적이 있을 것입니다. 이때 당신은 (아마도) 비밀번호를 해시 했을 겁니다.

비밀번호 해싱 방식을 설정할 때, 당신은 맞춤형 해싱 알고리즘을 작성하였나요? 암호학에 대해 오래 공부했었나요? 아니면 그냥 bcrypt를 사용하였나요?

마찬가지로, 첫 웹 앱을 만들 때, 데이터베이스에 대해 오래 학습했나요? 처음부터 직접 작성하였나요? 아니면 당신이 가장 좋아하는 프레임워크에 포함된 ORM을 사용하였나요?

이와 같은 논리가 머신러닝에도 적용됩니다. 만약 당신이 소프트웨어를 만드는 것을 좋아하는 사람이라면, 머신러닝을 활용한 소프트웨어를 만들기 시작하고, 도구, 사전 훈련된 모델, 그리고 ML 프레임워크가 기본적인 ML 이론을 추상화하게 하세요. 그런 다음, 만약 당신이 궁금하거나 프로젝트가 더 복잡한 요구를 가지고 있다면, 내부를 더 깊게 파고들어 모든 것이 어떻게 작동하는지 확인하세요.

--

--