머신러닝 학습 어떻게 시작할까? 1. 학습을 시작하는 마음가짐

대부분의 사람들에게 (심지어는 개발자들에게도) 머신러닝은 접근하기 쉽지 않은 분야입니다. 그러한 분들을 위해서 머신러닝 완전정복(Machine Learning Mastery)이라는 웹사이트를 소개하고자 합니다. 이 사이트의 운영자인 Jason Brownlee 박사는 머신러닝이라는 한가지 주제로 기초부터 고급과정까지 방대한 지식을 공유하고 있습니다. 앞으로 매일매일 네피리티 블로그를 통해서 Jason Brownee 박사의 머신러닝 완전정복 시리즈를 연재해 드리겠습니다. 이 글이 머신러닝을 배우는 데 도움이 되었다고 생각하시면 머신러닝 완전정복 사이트를 방문하여 Jason Brownee 박사에게 감사의 댓글을 남겨 주세요.




머신러닝 학습, 어떻게 시작할까?

1. 학습을 시작하는 마음가짐

머신러닝을 시작하기 주저하는 이유가 무엇입니까?

머신러닝을 시작하려는 개발자와 학생들로부터 많은 이메일을 받습니다. 제가 그들에게 묻는 첫번째 질문은 “머신러닝을 시작하기 주저하는 이유가 무엇입니까?”입니다. 저는 그 답이 자기 제한적인 믿음이라고 생각합니다. 

이 게시물에서 저는 제가 가르치는 학생들과 이 웹사이트를 통해 교류하는 사람들이 가진 몇가지 자기 제한적인 믿음에 대해 말하고자 합니다. 어쩌면 당신도 이런 믿음을 가지고 있을지도 모르겠습니다. 만약 그렇다면, 이는 잘못된 믿음이라는 것을 말씀 드리고 싶습니다.


자기 제한적 믿음

자기 제한적인 믿음은 당신이 진실이라고 가정하는 어떤 것이며, 그것은 당신의 발전을 제한하고 있습니다. 문제는 당신이 그 믿음을 진실이라고 주장하고 그것에 의문을 제기하지 않는다는 것입니다.

스티브 파블리나 (Steve Pavlina)는  ‘자기 제한적 믿음 깨뜨리기‘에서 3가지 유형의 자기 제한적 믿음을 열거합니다. (첫번째와 세번째는 유사하기 때문에 생략함)


  • 보편적인 신념 : 예를 들어, “모든 데이터 과학자는 박사 학위를 가지고 있으며 뛰어난 수학자일거야.”
  • 개인 및 자존감 신념 : 예를 들어, “난 머리가 좋지도 않고 끈기가 없어서 머신러닝을 배울 수 없어.

당신은 아마도 논리적이고 합리적인 사람일 것입니다. 위와 같은 잘못된 믿음을 깨뜨리고 배움에 도전해 보시기 바랍니다.


시작하기를 주저함

자기 제한적인 믿음의 가장 보편적인 예는 ‘어떤 분야에 대해 사전지식을 갖기 전에는 시작할 수 없다’는 믿음이라고 생각합니다. 문제는 당신이 필요하다고 생각하는 사전 지식이 사실 필요하지 않거나 그 분야의 전문가조차도 그것을 모두 알지 못할 정도로 범위가 너무 넓다는 것입니다.

예를 들어, “머신러닝을 시작하기 위해서는 통계를 알아야 해”라고 말하곤 합니다. 

그 믿음이 얼마나 모호한지 살펴볼까요? 얼마나 많은 통계, 어떤 통계 영역, 그리고 머신러닝을 공부도 하기 전에 왜 통계를 알아야 할까요?

다음은 머신러닝을 시작하기 전에 배워야 하는 기술 또는 사전 지식에 대한 보다 일반적인 자기 제한적인 믿음 중 일부입니다.


‘나는 …하기 전까지는 머신러닝을 배울 수 없어’

  • 이러이러한 분야의 학위를 취득
  • 이러이러한 과정을 완료
  • 선형 대수학을 숙달
  • 통계와 확률 이론 숙달
  • R 프로그래밍 언어 마스터

하지만 이런 것들 없이 지금 바로 머신러닝을 시작할 수 있습니다. 단 5분이면 첫번째 classifier를 실행할 수 있습니다. 그럼 된 겁니다.


저는 예전에 이런 종류의 믿음에 대해 열거한 적이 있습니다. 


완벽한 조건을 기다림

자기 제한적인 믿음의 또 다른 부류는 시작하기 전에 완벽한 환경이나 조건을 기다리는 것입니다. 하지만 상황은 언제나 완벽하지 않을 것입니다.

머신러닝을 시작할 수 없는 이유는 언제나 많습니다.


  • 난 지금 시간이 없어.
  • 빠른 CPU, GPU 또는 충분한 RAM이 없어.
  • 난 지금 그냥 학생이야.
  • 난 아직 실력 있는 프로그래머가 아니야.
  • 난 지금 직장에서 아주 바빠.


머신러닝을 잘하기 위해서는 많은 시간과 노력이 필요하지만 한 번에 전부는 아니며 시작부터 잘 할 수는 없습니다.

일주일에 몇 시간 또는 하루에 수십 분으로도 진전을 이뤄낼 수 있습니다. 머신러닝을 시작하기 위해 시도해 볼 수 있는 짧고 간단한 과제들이 많이 있습니다. 당신은 지금 시작할 수 있습니다. 인생의 다른 멋진 것들과 마찬가지로 약간의 투자는 필요하겠지만요.


열심히 해 봤지만 실패

자기 제한적 믿음의 세 번째 부류는 어쨌든 시작은 했지만 어려움을 겪고 있거나 목표를 달성하지 못한 경우입니다.

물론 쉽지는 않습니다. 하지만 프로그래밍같은 다른 기술보다 어렵지는 않습니다. 따라서 끈기와 노력, 경험과 시행착오가 필요합니다.


‘나는 다음과 같은 이유로 머신러닝을 배울 수 없어’

  • … 나는 압도 당한다.
  • … 나는 x를 이해하지 못한다.
  • … 나는 y만큼 결코 좋지 않을 것이다.
  • … 다음에해야 할 일을 모르겠습니다.
  • … 프로그램을 작동시킬 수 없습니다.


이런 경우 범위를 줄이거나 방향을 바꾸는 것이 좋습니다. 되도록이면 작은 규모의 프로젝트를 많이 해 보시길 권해 드립니다.


당신의 자기 제한적인 믿음은 무엇입니까?

자기 제한적인 믿음이 있습니까? 그것에 대해서 생각해 보십시오. 당신은 목표를 가지고 있지만 왜 도달하지 못했는지 생각해 볼 필요가 있습니다.


데이터 과학자 또는 머신러닝 엔지니어가 되려는 목표가 있지만 아직 첫 걸음을 내딛지 않은 게 아닐까요?

  • 기술을 완벽하게 습득하려고 합니까?
  • 완벽한 조건을 기다리고 있지는 않은가요?
  • 첫 시도를 해 봤지만 포기한 것은 아닌가요?


지금 고민하고 있는 것이 무엇인지 공유한다면 분명 도움이 될 것입니다.



머신러닝이 그렇게 어려울 필요 없는 이유

수학, 물리학 및 컴퓨터 과학과 같은 기술 주제는 상향식 접근 방식을 사용하여 진행됩니다. 이 접근법은 논리적인 학습 순서에 따라 학습 주제를 배치합니다. 하지만 인간은 단순히 학습 프로그램을 실행하는 로봇이 아닙니다. 학습에는 동기부여가 필요하고 무엇보다 가시적인 결과가 중요합니다. 독서, 운전 및 프로그래밍과 같은 기술들은 이런 식으로 배우지 않았으며 실제로는 이와 반대로 하향식 접근 방식을 사용하여 배웠습니다. 이 하향식 접근 방식은 머신러닝과 같은 기술 과목을 직접 학습하는 데 사용할 수 있으므로 훨씬 더 빨리 생산성을 높이고 많은 재미를 느낄 수 있습니다.

이 글에서는 기술 자료 학습에 대한 하향식 및 상향식 접근 방식의 구체적인 차이점과 이것이 실무자가 머신러닝 및 관련 수학을 배우는 데 사용해야하는 접근 방식인 이유를 말씀 드리겠습니다.


이 게시물을 읽은 후, 당신은 다음과 같은 내용을 알게 될 것입니다 :

  • 대학에서 기술 과목과 그 문제를 가르치기 위해 사용되는 상향식 접근 방식.
  • 사람들이 하향식 방식으로 읽기, 운전 및 프로그래밍을 배우는 방법과 하향식 접근 방식이 어떻게 작동하는지.
  • 하향식 접근 방식으로 머신러닝과 수학을 배우는 법


이제 시작해 보겠습니다.


당신은 그것을 잘못하고 있습니다. 기계 학습이 그렇게 어려울 필요가없는 이유

Photo by popofatticus, some rights reserved.



개요

이 게시물은 아래와 같이 일곱 부분으로 나뉩니다.

  1. 상향식 학습
  2. 읽기 배우기
  3. 운전 배우기
  4. 코드 배우기
  5. 하향식 학습
  6. 머신러닝 배우기
  7. 수학 학습


상향식 학습

수학을 예로 들어 보겠습니다.

수학은 학습자의 기술, 역량, 이해정도를 고려하여 점진적으로 학습을 진행할 것을 전제로 학습과제를 배치합니다. 문제는 이 진행이라는 것이 이미 반대편에 있는 사람들(이미 과정을 진행한 사람)에게만 의미가 있고 주제간의 연관성을 맺을 수 있다는 것입니다. 대부분의 학교는 이러한 상향식 학습을 추구합니다. 다양한 기술 및 과학 분야의 연구가 이런 식으로 진행됩니다.

고등학교, 대학교 학부 과정 그리고 당신이 배워온 모든 분야를 생각해보십시오. 

  • 수학
  • 생물학.
  • 화학.
  • 물리학.
  • 컴퓨터 과학.


학습자료가 어떻게 배치되었는지, 매주, 학기별, 연도별로 어떻게 배치되었는지 생각해보십시오. 상향식이며 논리적 진행을 따르고 있습니다. 문제는 학습자료를 통한 논리적 진행이 배우는 데 있어서 가장 좋은 방법이 아닐 수도 있다는 것입니다.

우리는 학습 프로그램을 실행하는 로봇이 아닙니다. 우리는 동기 부여, 관심, 관심, 격려 및 결과가 필요한 감정적인 인간입니다. 당신은 여전히 상향식으로 기술 과목을 배울 수 있으며 소수의 사람들은 이런 방식을 선호하기도 하지만 유일한 방법은 아닙니다.

이제 기술 과목을 완료했다면 실제로 어떻게 배웠는지 생각해보십시오. 나는 그것이 상향식이 아니었을 것이라고 확신합니다.


읽기 학습

어떻게 읽는 법을 배웠는지 한번 생각해 보시겠습니까?

우리가 글 읽는 법을 배운 과정은 다음과 같습니다.

  • 부모님이 당신에게 책을 읽어 주었습니다.
  • 알파벳을 적고 발음을 해 봅니다.
  • 가장 빈번한 단어, 소리 및 철자를 외웁니다.
  • 처음 보는 단어를 읽기 위해 spell-out-the-word 방식을 배웁니다.
  • 부모님이 지켜보는 가운데 책을 읽습니다.
  • 마지막으로, 혼자서 책을 읽습니다.


다음과 같은 이유로 인해 읽는 법이 왜 중요하고 필요한지 자연스럽게 깨닫게 됩니다.

  • TV 프로그램의 자막을 읽어야 합니다.
  • 스타워즈처럼 좋아하는 이야기를 읽고 싶습니다.
  • 표지판과 메뉴를 읽고 싶습니다.
  • 그 밖에도 읽어야 할 다른 많은 것들이 있습니다.


(때로는 가시적이고 측정할 수 있는) 성과를 얻는 것도 중요합니다.

  • 더 긴 단어.
  • 막힘 없는 읽기 실력
  • 더 어려운 내용의 책


반면 아래와 같은 방법으로 읽는 법을 배우지는 않았습니다.

  • 단어 유형의 정의 (동사, 명사, 부사 등)
  • 문법의 규칙.
  • 구두점의 규칙.
  • 인간 언어의 이론.


운전 배우기

운전하십니까?

그러지 않아도 사는 데 지장은 없지만, 대부분의 성인은 필요에 따라 운전을 합니다. 

운전하는 법을 어떻게 배웠습니까?

필기 테스트와 컴퓨터 테스트를 했던 것으로 기억합니다. 저는 이 테스트들을 통과하기 위해 공부는 했지만 공부한 것이 기억나지는 않습니다. 대신 제가 기억하는 것은 다음과 같은 것들입니다.

운전 강사와 함께 운전 연습을 했던 것입니다. 이 과정에서 저는 마스터해야 하는 기술을 연습하고, 실제 차가 다니는 도로에서 주행을 연습했습니다.


운전 강사와 다음과 같은 내용을 공부하거나 토론하지는 않았습니다.

  • 자동차의 역사.
  • 연소 엔진의 이론.
  • 자동차의 일반적 기계적 결함.
  • 자동차의 전기 시스템.
  • 교통 흐름의 이론.


오늘날까지도  나는 이 주제에 대한 지식없이 안전하게 운전할 수 있습니다.

사실 저는 이 주제들을 배울 생각이 없었으며 안전 운전에 도움이 되지도 않았습니다. 차가 고장 나면 그저 전문가에게 전화하면 그만이니까요.


코딩 배우기

저는 코딩이나 소프트웨어 엔지니어링이 무엇을 의미하는지 전혀 모른 채 프로그래밍을 시작했습니다.

집에서 저는 Basic이나 Excel 명령어를 써 보거나 컴퓨터 게임을 개조하곤 했습니다. 무척 재미있었습니다.

프로그래밍과 소프트웨어 공학을 배우기 시작했을 때, 그것들은 상향식 학습으로 진행되는 대학의 전공과목이었습니다.

우리는 다음과 같은 것들을 배웠습니다 :

  • 언어 이론
  • 데이터 형식
  • 제어 흐름 구조
  • 데이터 구조
  • 기타 등등


학교에서도 코드를 작성하긴 했지만, 컴파일러 문제, 경로 문제 등 실제로 프로그래밍을 배우는 것과 관련이 없는 많은 문제가 저를 괴롭혔습니다.

몇 년 후 저는 복잡한 시스템을 다루는 전문 소프트웨어 엔지니어로 일하기 시작했습니다. 저는 정말 그 일에 능숙했고 좋아했습니다. 저는 그래픽 사용자 인터페이스를 만드는 법, 소켓 프로그래밍을 사용하여 컴퓨터가 서로 대화하도록 하는 방법을 보여주는 법, 그리고 스레드를 사용하여 동시에 여러 가지를 실행하는 방법 등의 코스를 수료했습니다.

나는 지루한 것들을 제가 정말로 좋아하는 것들과 연결 시켰습니다. 즉, 문제를 해결할 수 있는 소프트웨어를 만들고, 사람들이 실제 사용할 수 있는 중요한 것들과 연결시켰습니다. 그것은 더 이상 추상적이고 난해하지 않았습니다.

저를 포함한 많은 개발자들은 잘못된 방법으로 코딩을 배웠습니다. 이 때문에 진짜 열정을 갖고 일할 수 있는 일에 쏟아야 할 시간과 노력을 수년간 낭비하고 말았습니다. 


하향식 학습

상향식 접근 방식은 기술 과목을 가르치는 일반적인 방법이 아닙니다. 하지만 당신이 실제로 어떻게 배우는지를 알게 되기 전까지는 유일한 방법처럼 보입니다.

대학 과정의 디자이너, 자기 분야의 전문가들이 돕기 위해 있습니다. 그들은 당신이 필요로 하는 기술과 능력을 배양할 수 있다는 기대를 가지고 학습 커리큘럼을 작성합니다.

위에 제가 언급했듯이, 어떤 사람들에게는 그런 방식이 효과가 있습니다. 하지만 저에게는 효과가 없었으며 당신에게도 효과가 없을 것입니다. 사실 제가 만난 극소수의 뛰어난 프로그래머들은 컴퓨터 과학 프로그램을 배우긴 했지만 독학했거나 집에서 혼자 해킹을 하면서 배웠습니다. 

제가 생각하는 대안은 하향식 접근 방식입니다. 개념정의와 이론으로 시작하지 마십시오. 대신 주제를 원하는 결과와 연결하여 시작하고 즉시 결과를 얻는 방법을 보여줘야 합니다.

결과를 얻고, 필요에 따라 일부 영역으로 더 깊이 들어가지만, 항상 필요한 결과의 맥락에서 진행하는 이 과정을 연습하는 데 중점을 두어야 합니다.

다만, 이 방식을 선택할 때 전통적인 사고 방식이나 비교 방식을 사용하지 않도록 주의하십시오.

당신이 학습의 모든 과정을 주도하며, 모든 책임이 당신에게 있지만 멈추지 않는 한 실패하지 않습니다.

  • 이 방식은 반복적입니다. 학습자는 더 깊게 이해하기 위해 한가지 주제를 여러번 반복해야 합니다.
  • 그것은 불완전합니다. 처음에는 결과가 좋지 않을 수 있지만 연습을 통해 개선됩니다.
  • 검색이 필요합니다. 학습자는 지속적인 학습과 발견에 개방적이어야 한다.
  • 주인의식이 필요합니다. 학습자는 개선에 대한 책임이 있습니다.
  • 호기심이 필요합니다. 학습자는 관심있는 것에 주의를 기울여야 합니다.


저는 “전문가”라고 하는 사람들이 이렇게 말하는 것을 자주 들었습니다.

“이 기술을 사용하기 전에 먼저 이론을 알아야 하며, 그렇지 않으면 제대로 사용할 수 없습니다.”

저는 결과가 처음에는 불완전할 것이라는 데는 동의하지만, 이론과 기초에서 비롯될 필요는 없다고 생각합니다. 초급 프로그래머가 변경 사항을 프로덕션에 push하고 deploy해서는 안된다고 생각한다면 초보급 머신러닝 실무자가 동일한 제약 조건을 겪을 것이라고 봐야 합니다.


머신러닝 배우기

그렇다면 머신러닝의 주제에 어떻게 접근했습니까?

저는 다음과 같은 것들로 시작하지 말 것을 당부 드립니다.

  • 수학을 먼저 배울 생각을 버리십시오.
  • 머신러닝 이론도 배울 필요 없습니다.
  • 모든 알고리즘을 밑바닥부터 코딩하지 마십시오.


이것은 나중에 당신이 배운 하나하나의 점을 연결하는 데 도움이 될 수는 있습니다.

대신 저는 다음과 같은 것들로 시작하시길 권해 드립니다.

  1. 무료이며 사용하기 쉬운 오픈 소스 도구가 있는 고정된 프레임워크를 사용하여 매우 간단한 예측 모델링 문제를 해결하는 방법을 배우는 것부터 시작하십시오.
  2. 다수의 소규모 프로젝트에서 연습하고 천천히 복잡성을 증가시킵니다.
  3. 공개 포트폴리오를 구축하여 당신의 작업을 사람들에게 보여줍니다.


저는 이 접근법에 대해 여러 번 기술했습니다. 게시물 끝의 “추가 읽기” 섹션에서 머신러닝에 대한 하향식 접근 방식을 시작하는 방법에 대한 게시물들을 참조하십시오.

대학에 갇힌 “전문가”는 위험하다고 말할 것입니다. 그들을 무시하십시오.

세계적 수준의 실무자들은 그것이 그들이 배워 온, 그리고 배움을 계속하는 방식이라고 말할 것입니다. 그들을 모델링하십시오.


기억하십시오:

  • 당신은 언어 이론을 공부하는 것이 아니라 독서를 연습함으로써 읽는 법을 배웠습니다.
  • 당신은 연소 엔진을 공부하는 것이 아니라 운전을 연습함으로써 운전을 배웠습니다.
  • 당신은 computability 이론을 공부하는 것이 아니라 코딩을 연습함으로써 코딩을 배웠습니다.


수학과 이론을 공부하는 것이 아니라 예측 모델링을 연습함으로써 머신러닝을 배울 수 있습니다.

이것은 내가 배우고 머신러닝을 계속 연습하는 방식일 뿐만 아니라 수만명의 학생들 (그리고 이 블로그의 수백만명의 독자)을 도와온 방식입니다.


수학 학습

거기서 멈추지 마십시오.

머신러닝을 배우면서 선형 대수, 미적분학, 통계, 확률 등과 같은 주제를 맞닥뜨리면 뒤로 물러나고 싶을 수도 있습니다. 그러나 이러한 주제에 대해서도 정확히 동일한 하향식 접근 방식을 사용할 수 있습니다.

자신에게 중요한 목표나 결과를 고르고, 그 결과를 얻기 위해 이것들을 필터, 렌즈 또는 시프트로 사용해야 합니다.

예를 들어, 선형 대수를 선택한다고 가정해 봅시다.

목표는 SVD 또는 PCA를 이해하는 것일 수 있습니다. 이러한 방법은 데이터 프로젝션, 데이터 감소 및 기능 선택 등의 작업에 사용되는 방법입니다.


하향식 접근 방식은 다음과 같습니다.

  1. scikit-learn과 같은 고급 라이브러리에서 메서드를 구현하고 결과를 얻으십시오.
  2. NumPy/SciPy와 같은 하위 수준 라이브러리에서 메서드를 구현하고 결과를 재현합니다.
  3. NumPy 또는 Octave에서 행렬 및 행렬 연산을 사용하여 메서드를 직접 구현합니다.
  4. 관련된 행렬 산술 연산을 연구하고 탐구하십시오.
  5. 관련된 매트릭스 분해 작업을 연구하고 탐구하십시오.
  6. 매트릭스의 고유 분해를 근사화하는 방법을 연구합니다.
  7. 기타등등


목표는 동기를 부여하고 호기심은 연구에 깊이를 더해 줍니다.

이런 식으로 학습하면 수학을 공부하는 것은 프로그래밍, 머신러닝 또는 기타 기술 과목에서 다른 주제를 공부하는 것과 다르지 않습니다.

그것은 매우 생산적이며, 재미있습니다!


추가 읽기

이 섹션에서는 더 깊이 들어가려는 경우 주제에 대한 더 많은 리소스를 제공합니다.


요약

이 글에서는 기술 자료 학습에 대한 하향식 및 상향식 접근 방식의 구체적인 차이점과 이것이 실무자가 머신러닝 및 관련 수학을 배우기 위해 사용해야하는 접근 방식을 알아 보았습니다.

특히, 당신은 이런 것들을 배웠습니다 :

  • 대학에서 기술 과목과 그 문제를 가르치기 위해 사용되는 상향식 접근 방식.
  • 사람들이 하향식 방식으로 읽기, 운전 및 프로그래밍을 배우는 방법과 하향식 접근 방식이 어떻게 작동하는지.
  • 머신러닝과 뿐만 아니라 수학도 하향식 접근 방식으로 빠르게 배울 수 있습니다.
네피리티
No Comments

Sorry, the comment form is closed at this time.