- 머신러닝 개요 및 학습 방법
- 마스터 / 2021.08.23
머신러닝이란?
경험을 바탕으로 컴퓨터(기계)가 스스로 학습을 통해 개선할 수 있도록 알고리즘과 기술구현을 한 것이라 할 수 있습니다. 수많은 입력 값에 따라 출력 값을 표현할 수 있도록 많은 수의 규칙을 집어넣어 단순히 입력된 값을 토대로 연산의 결과물만 제시하는 것이 컴퓨터 기능이었다면 인공지능의 큰 분야로 머신러닝은 입력된 수많은 규칙들을 토대로 인간이 구현한 알고리즘을 통해 규칙의 과정을 기억하고 최적의 결과를 도출하기 위해 개선 작업을 반복하면서 기계가 겪어보지 못한 입력 값에 대해 완벽한 혹은 동일한 결과를 출력하는 것을 의미합니다.
머신러닝이란 분야가 확장할 수 있었던 이유는 기술의 발전을 토대로, 삶을 살아가는 인간들이 축적한 빅데이터로부터 시작합니다. 기술이 발전함에 따라 1대1로 매칭하며 관리, 기록하던 데이터부터 현재는 보이지 않는 가상의 저장 공간에 실재의 데이터를 쌓아 올려 대용량을 적재하여 보관, 관리를 하는 현재, 그리고 앞으로 각광받는 가상 공간까지도 모든 행위들이 하나의 데이터로 간주되어 모든 것이 학습 가능한 재료가 되었습니다. 뿐만 아니라 기계 스스로도 입력과 출력의 반복된 작업에서 파생된 결과물들의 기록 또한 재사용, 재활용이 가능해지면서 이를 토대로 기계학습이 발전할 수 있었습니다.
새로운 기술이라는 것은 기존의 기술을 등한시하여 발생할 수는 없습니다. 개선이 되고 새롭게 생성을 하면서 수정과 보완, 생성과 소멸을 반복하며 나아가게 되는데 머신러닝 또한 기존의 학문들과 기술들을 바탕으로 나타나게 되었습니다.
그렇다면 기계가 학습을 할 수 있도록 머신러닝을 학습하려면 어떤 방법으로 시작해야 할까요?
기술 구현을 위해서라면 막연히 프로그래밍 즉, 코딩을 할 수 있다면 무조건 할 수 있을까요?
다양하고 기초적인 학문 학습부터 시작을 해야 머신러닝을 구현할 수 있습니다. 보기엔 너무 어렵기만 하고 시도하기 힘들 거라 생각할 수 있지만 모든 내용을 다 파악하는 것이 아니라 필요한 부분만 습득하면서 지식을 확장해 나가는 방법으로 진행한다면 좀 더 효율적으로 학습할 수 있습니다.
머신러닝의 복잡한 알고리즘 안에는 다양한 수리, 통계적 연산이 포함되어 있습니다. 기존에 생성되어 있는 모듈들을 활용할 때는 내부적 연산에 대한 깊이 있는 이해가 필요할 수 있으나 작동되는 원리만 파악한다면 사용하는 것에는 큰 무리가 없습니다. 머신러닝 엔지니어로 모듈을 직접 제작하고 수정보완을 하고 싶다면 두 영역의 학문적 이해도는 상당히 높아야 합니다.
수학 영역에서 중요하게 필요로 하는 배경지식은 행렬의 연산과 확률, 미분, 공간의 개념과 차원에 대한 이해가 필요합니다. 데이터가 입력되고 출력되는 모든 일련의 과정이 행렬과 벡터의 데이터 타입으로 진행되며 연산 내부적으로는 공간, 차원의 축소와 최적화된 결과를 도출하기 위한 미분 연산, 전달 과정에 있어서 진행되는 여러 이론들이 복합적으로 내포되어 있습니다. 단순히 위의 내용들만 이해한다고 가능한 부분은 아니지만 연산의 매커니즘을 파악하는 데는 수학의 A-Z를 다 알아야하는 것은 아닙니다. 모듈의 알고리즘에 대한 해석을 하는 부분에서는 친절하게 설명을 하는 경우도 많고 유명한 알고리즘 기법들은 이미 기본적으로 설명을 하는 과정이 많기 때문에 내용을 이해할 수 있는 차원으로만 학습한다면 크게 무리가 없습니다.
통계 영역은 통계학 개론의 수준을 이해한다면 보다 쉽게 파악할 수 있습니다. 수많은 데이터를 이용하여 결과를 도출하는 것이 머신러닝 기술이기 때문에 대량의 데이터를 구분하고 예측과 추론을 위해서는 통계 영역의 이해는 필수적으로 자리매김하고 있습니다. 특히 회귀분석, 나이브 베이즈 이론, 유의성 검증 등 알고리즘 연산의 기틀은 통계적 기법이 가장 중요하기 때문에 이에 대한 이론의 정립과 도출된 결과값에 대한 유의성 판별에 있어서는 통계학은 단단한 배경지식이 뒷받침되어야 합니다. 그렇다고 통계학 전체를 학습하는 것은 시간적으로나 내용적으로도 많은 양을 요구하기 때문에 기법 하나에 필요한 지식들을 습득하는 것이 보다 효과적일 수 있습니다.
머신러닝은 말 그대로 기계학습이기 때문에 기계가 데이터를 인지하고 학습할 수 있도록 기능 구현을 사람이 해야 합니다. 쉽게 얘기하자면 아무리 배경 지식이 탄탄하고 수많은 데이터를 가져다 쌓아 놓아도 기계가 그 내용들을 연결하지 못한다면 아무것도 할 수 없으니 사람은 기계가 그것을 이해하고 받아들일 수 있도록 프로세스를 만들어줘야 합니다.
머신러닝을 구현할 수 있는 언어는 현존하는 프로그래밍 언어라면 어떤 언어라도 모두 구현이 가능합니다. 가장 유명한 Python, R, Java로 가능하며 심지어 Oracle의 SQL 질의문에서도 프로시저 구성을 통해 머신러닝 구현이 가능하게 되었습니다. 일반적으로 머신러닝을 떠올려본다면 AI가 자동으로 해결하는 것을 쉽게 떠올릴 수 있지만 이 모든 것이 가능하게끔 하는 것은 사람이 모든 것을 구성해야 가능해집니다. 그렇다면 프로그래밍 언어는 모두 다룰 수 있어야 하는 것일까요?
최근 프로그래밍 언어를 습득하는 방식은 필요한 영역에 따라 많이 나눠져 있습니다. 다양한 용도에서 활용할 수 있는 Python과 통계 데이터를 다루는 S에서 파생된 R, 전문 개발을 위해 사용한 C++, Java 등으로 학습하는 형태가 나눠지는 데 다양한 라이브러리와 패키지를 활용할 수 있는 Python을 머신러닝 분야에서는 좀 더 많이 사용하고 있습니다. 물론 Python과 같이 기본 코딩 능력은 필수이지만 데이터 분석 및 머신러닝 알고리즘 학습은 동시에 수반되야 합니다. 또한 Python 언어의 코딩에서 그치는 것이 아니라 머신러닝을 위해 특화된 라이브러리로 Tensorflow나 Pytorch와 같은 모듈 사용에 대해서는 좀 더 기술적으로 학습해야 합니다.
학습 개요에 대해 간단하게 리스트로 요약 정리를 해보면
1. 수학 / 통계
- 지수, 로그(초월함수)
- 행렬, 벡터 연산, 차원 축소(PCA, SGD)
- 미분, 편미분
- 확률, 전확률 법칙, 조건부확률, 나이브 베이즈 이론
- 단순회귀분석, 다항회귀분석
- 가설 설립 및 검증, 통계적 유의성 검정
2. 코딩
- 프로그래밍 언어 기초 (Python, R, Java, C++) 추천은 Python
- 머신러닝 알고리즘 이해(이론적)
- 머신러닝 알고리즘 모델링(실습)
- Tensorflow, Pytorch 등 머신러닝, 딥러닝 기반 전문 라이브러리
- 기술 논문의 이해(고급 과정)
단순하게 정리하자면 위와 같지만 내용의 깊이나 이해 수준은 개별적으로 다를 수 있기 때문에 어느정도 기간을 정해둔 후 목표에 맞춰 학습한다면 좀 더 높은 효율과 빠른 시간에 습득할 수 있다고 생각합니다.
최소한의 기간은 개별 편차가 있지만 3개월부터 장기간으로 잡는다면 6개월까지도 시간이 필요할 수 있습니다. 중요한 것은 단순히 이론에 대해 이해하고 내용을 숙지하여 알고 있다 하더라도 뚜렷한 결과물을 제시하지 못한다면 기술 습득을 했다고 주장하는 것은 여러분의 능력을 인정받기 힘들 수 있습니다.
최근에는 웹 페이지를 생성해 본인이 직접 구현한 모델을 API를 통해 전달하고 표현하는 방법도 많이 쓰고 있습니다. 또한 머신러닝 이상으로 딥러닝 같은 경우 자연어처리나 이미지, 영상처리, 아두이노 등을 통한 기술 구현 등을 많이 사용하기 때문에 기본 내용을 바탕으로 업무나 실생활에 사용할 수 있는 결과물을 많이 보여주고 있습니다.
새로운 기술을 습득한다는 것은 대단히 많은 노력과 공부를 필요로 합니다. 쉽게 얻어지는 것은 없고 또한 홀로 한다는 것도 매우 어려운 일입니다. 여러가지 방법이 있을 수 있겠지만 가이드를 확실히 잡고 이끌어주는 방법이 있다면 그것을 통해 습득하는 것이 훨씬 수월하고 효율이 높을 수 있습니다. 많은 책과 강의가 있을 수 있지만 이지업에서는 오프라인에서 20년 넘게 빅데이터와 개발자 과정을 교육하고 이를 바탕으로 온라인에서 과정을 개설하고 강의하고 있습니다. 여러분이 습득하고자 하는 그 배움을 도와주고 이끌 수 있다고 자신합니다.
머신러닝 학습에 있어서 좋은 길라잡이 역할을 이지업에 한 번 맡겨 보시는 것도 추천 드립니다.