티스토리 뷰

머신러닝

1. 머신러닝이란?

김태훈 2021. 7. 18. 19:36

목차

    개요

     요즘 4차 산업혁명이다, 뭐다 하면서 머신러닝이 되게 유망한 분야라고 사람들은 이야기한다. 도대체 머신러닝이 뭐길래 다들 그렇게 열광하는 것일까? 일단 머신러닝의 정의를 한 번 읽어보자.

    어떠한 작업 T에 대해 꾸준한 경험 E를 통하여 그 T에 대한 성능 P를 높이는 것


     내가 생각하는 머신러닝을 가장 잘 표현한 정의이다. 저 말만 가지고 설명하기는 너무 어려우니 예시를 통해 설명해보겠다. 네이버 이메일을 사용하는 개발자 태훈은 아침에 일어나 어떤 이메일들이 왔는지를 확인한다. 그런데 엥?? 친구들이나 회사가 보낸 이메일들은 안 보이고 스팸메일들로 가득하다. 아침부터 굉장히 기분이 잡친다. 회사에 출근해서 일을 하던 태훈은 핸드폰에 이메일이 왔다고 알람이 울린다. 이메일을 확인해보니 대출을 권유하는 스팸메일이다. 계속되는 스팸메일에 지치고 짜증이 쌓이던 태훈은 다른 회사의 이메일이 있는지 찾기 시작한다.
     이메일 서비스를 제공하는 네이버에게 스팸메일을 잘 구별하지 못하는 건 고객 이탈로 이어지는 치명적인 문제이다. 그렇다고 아르바이트를 고용해서 이메일들을 하나하나 살펴보고 스팸을 구별시킬 것인가? 비용적으로도 어마어마하게 큰 손해일뿐 아니라 사생활 침해로 골머리를 앓을 것이다. 좋은 성능을 갖는 스팸을 구별하는 모델이 필요하다.
     이 스팸메일을 구별하기 위해(어떠한 작업 T) 많은 데이터를 통해 스스로 학습해서(꾸준한 경험 E) 스팸을 구별하는 모델의 성능을 개선시키는 것, 이런 걸 바로 머신러닝이라고 한다.

    스팸메일을 구별하는 모델들은 과거에도 있던 거 아닌가요?


     맞다. 과거에도 전문가 시스템 등의 인공지능 모델을 통해 스팸메일을 구별해내곤 했다. 그때랑 지금이랑 뭐가 달라졌길래 머신러닝이라는 말을 사용하는 걸까?
     차이부터 말하면 머신러닝은 스스로 학습할 수 있다. 하지만 과거의 모델들은 그렇지 않다. 사람들이 일일이 규칙을 정해주면 그 규칙에 따라 주어진 일을 수행할 뿐이다. 일일이 규칙을 정해줘야 하고 규칙이 보이는 특정 분야에서만 사용할 수 있는 등 한계점이 나타났고, 인공지능의 열기는 한동안 시들했다. 이후 특정 사건을 계기로 머신러닝과 함께 인공지능의 시대가 다시 찾아왔고 현재 진행 중이다. 특정 사건은 기술의 발달로 빅데이터라는 게 생겨났고, 기계의 처리속도가 빨라진 것이다. 이 부분이 더 알고 싶으신 분들은 인공지능의 역사를 찾아보면 궁금증이 해결될 것이다.

    머신러닝 프로세스

    데이터 수집 - 데이터 점검/탐색 - 데이터 전처리 - 모델링/학습 - 평가 - 배포

     

    요리를 통해 비유하겠다. 여러분은 요리 연구가 백종원이다. 가게에 닭볶음탕을 출시하기 위해 레시피를 만들고 있다. 데이터는 사라지는 게 아니니까 요리재료는 창고에 다 쓰지 못할 정도로 넘쳐난다고 가정하자.

     

    1. 데이터 수집 : 모델을 만들기 위해서 필요로 하는 자료를 구해온다. 닭볶음탕을 만들기 위해 닭, 양파, 파 등 재료들을 선정하고 구해오는 과정이다.

    2. 데이터 점검/탐색 : 데이터에 이상이 없는지, 속성들의 특징, 관계, 연관 정도 등을 파악해  어떤 속성을 어떻게 쓸 건지를 정한다. 재료들이 상하지는 않았는지, 대파랑 쪽파를 사왔는데 굳이 이 비슷한 두개를 다 넣어야 하는지 등을 생각해본다.

    3. 데이터 전처리 : 데이터를 깔끔하게 만든다. 이상치 등을 처리하고 날것의 데이터를 모델에 사용할 수 있게 정제한다. 재료들을 씻고 상한 부분을 잘라내고, 요리에 넣기 알맞은 모양으로 잘라준다.

    4. 모델링/학습 : 모델에 전처리를 한 데이터를 넣어 학습시킨다. 닭볶음탕을 만드는 데에는 고추장을 넣어서 조리할 수도 있고, 고춧가루나 간장을 넣어서 조리하는 방법 등 다양한 방법이 존재한다. 본인이 생각하기에 적절하다고 생각하는 여러 방법으로 닭볶음탕을 조리해본다.

    5. 평가 : 어떤 방법으로 만들 때가 가장 맛있는지, 손이 덜가는지 등을 평가해 가장 괜찮다고 생각하는 방법을 하나 선택한다.

    6. 배포 : 내가 만든 모델을 필요로 하는 곳에서 사용한다. 내가 만든 방법을 다른 프랜차이즈 가게들에 넘겨줘 다들 이 레시피로 닭볶음탕을 요리하도록 만든다.

    머신러닝의 분류

     머신러닝은 일반적으로 지도학습, 비지도학습, 강화학습, 이렇게 세 가지로 나뉜다. 지도학습은 컴퓨터에게 데이터와 정답을 함께 가르쳐준다. 비지도학습은 정답을 가르쳐 주지 않고 그냥 데이터만 넣어준다. 강화학습은 보상과 체벌을 통해 모델이 답을 선택할 수 있게 만든다.
     강아지와 고양이, 거북이를 구별하는 모델을 만든다고 가정하자. 지도학습은 강아지 사진과 함께 이 사진은 강아지라고 가르쳐준다. 고양이는 고양이라고 가르쳐준다. 이 작업을 계속해서 반복해서 모델을 만들고, 이 모델에 사진을 넣으면 모델은 이 사진이 강아지다! 고양이다! 라는 걸 가르쳐준다.
      비지도학습은 정답을 가르쳐 주지 않는다. 아까 위에서 사용한 강아지, 고양이, 거북이가 있는 사진을 그냥 컴퓨터에게 학습시킨다. 컴퓨터는 해당 사진들이 뭔지는 모른다. 그렇지만 여러 특징들을 보고 비슷하게 생긴 친구들을 묶어낸다. 강아지, 고양이, 거북이들은 각각 구별되는 특징들이 있기 때문에, 기준에 맞춰 모델은 데이터들을 세 개로 나눠둔다.
     강화학습은 모델이 행동을 하면 그에 대한 보상, 벌을 준다. 가중치라는 개념으로 설명해야 하는데 그러면 어려워질 수 있으니까 모델을 쥐🐭라고 가정해서 설명하겠다. 쥐를 상자에 가둬두고 버튼을 누르면 먹이를 준다. 쥐는 어느 순간 우연히 버튼을 누르게 되고 먹이가 나오는 걸 알게 된다. 의도적으로 버튼을 누른 건 아니기 때문에 바로 효과가 나타나지는 않지만 버튼을 누르는 게 몇 번 반복되면 쥐는 '버튼을 누르면 먹이가 나온다' 는 사실을 알게 된다. 특정 행동을 했을 때 보상을 주면서 특정 행동을 유도하는 것. 이게 강화학습이다.
     지도학습에는 크게 분류와 회귀가 있고, 비지도학습은 클러스터링, 차원 축소 등이 있다. 강화학습은 두 학습에 비해 난이도도 높고 대중적인 학습방법은 아니라 크게 신경쓰지 않아도 될 것 같다.

    * 주의할 점! 

    필자는 지도학습이 분류/회귀로 나뉘는 것처럼 비지도학습도 클러스터링/차원 축소로 나뉜다고 생각했다. 그래서 지도 학습을 하는데 데이터에 차원 축소를 하는 과정에서 굉장히 큰 혼란을 겪었다. 독자들은 그런 고통을 겪지 않길 바란다.
    데이터의 속성이 많을수록 모델링은 어려워진다. 데이터의 속성이 하나가 추가될 때마다 차원이 하나가 추가된다. 1차방정식, 2차방정식, 3차방정식을 학교 교육과정에서 배운 여러분이라면 차원이 하나 커지는 게 얼마나 복잡해지는 건지 체감이 올 것이다. 아무리 컴퓨터라 해도 차원이 10개, 20개 되는 데이터를 가지고 모델을 만드는건 힘든 일이다. 그래서 어떤 방법을 사용해 차원을 줄여 나가는 걸 차원 축소라고 한다. 자세한 설명은 하지 않겠다.
    지금 막 머신러닝이 뭔지 검색해서 볼 때는 뭔 말인지 이해할 필요 없다. 그냥 차원 축소는 데이터 전처리 과정에서 쓰는 거구나라는 거 정도만 기억해주면 될 것 같다. 후에 차원 축소에 관련된 글을 작성할 때 다시 언급하겠다.

    머신러닝에 사용되는 도구

     언어부터 살펴보겠다. 머신러닝 시장에서 가장 많은 사람들이 이용하는 언어는 파이썬과 R이다. 두 언어 모두 많은 라이브러리, 프레임워크를 지원해 어떤 걸 사용해도 상관없다. 자신에게 익숙한 언어가 있다면 그걸 사용하면 된다.

     두 언어가 다 익숙하지 않고 뭘 배워야 할지 고민이 된다면 본인이 강점을 가진 부분에서 생각하자. 내가 통계와 컴퓨터 중 컴퓨터 쪽에 자신이 있다면 파이썬을 공부한다. 통계에 자신이 있다면 R을 공부한다. 애매하면 파이썬을 추천한다.

     R은 아무래도 통계 분석을 위해 만들어진 언어고 파이썬보다 더 많은 통계 패키지들을 가지고 있다. 이미 오랜 기간동안 사용되었기에 공부에 있어 더 수월할 것이다. 반면, 파이썬은 R보다 역사가 짧지만 점점 성장하고 있다. 그리고 기본이 컴퓨터 언어이다 보니 문법을 익히면 다른 쪽으로 응용할 수도 있다. 게다가 텐서플로와 같은 프레임워크들은 파이썬 우선 정책을 사용한다. 미래를 알 수는 없지만, 파이썬의 시장은 점점 커져가지 않을까 하는 예상을 한다.

     언어를 정한 뒤 패키지를 선택한다. 사실 선택의 여지가 많지 않다. Numpy, Pandas, Matplotlib, Seaborn이 가장 대중적이니까 특별한 이유가 없다면 저 패키지들을 공부하면 된다. 모델 학습에 사용하는 패키지로는 Scikit-Learn, Tenserflow, Keras 등이 있지만 필자는 Scikit-Learn을 사용하겠다. 가장 배우기 쉽고 머신러닝에 특화된 언어이기 때문이다. 나중에 인공지능에 더 관심이 생기고 딥러닝까지 공부하고 싶다면 추가로 Tenserflow를 배울 계획이다.

    인공지능의 전망

    세계 인공지능 시장규모 (출처: 연합뉴스)
    국내 인공지능 시장규모 (출처: 연합뉴스)

    두 그래프에서 보이는 것처럼, 인공지능 시장은 계속해서 커져 나갈 것으로 예상된다. 다양한 분야에서 머신러닝과 딥러닝을 사용한 인공지능은 강세를 보이고 있다. 채용 공고들도 계속해서 올라오고 있으며, 내 주변 지인들의 이야기를 들어보면 인공지능 쪽으로 취업한 친구들도 꽤 있는 걸로 보인다. 연봉도 쎄게 받는다. 인공지능을 공부한다면 지금이 적기가 아닌가 생각이 든다.
    인공지능은 데이터마이닝, 영상 인식, 이미지 인식, 음성 인식, 자연어 처리 등 인간이 모델을 설계하기 어려운 분야들에서 사용된다. 이 기술들은 성장 가능성도 높고, 성장 시 시장 지배력 역시 뛰어날 것이다. 4차 산업혁명을 이끄는 많은 기업들에게 머신러닝을 활용한 기술은 핵심 기술인 경우도 빈번하다.
    구글, 애플, 테슬라, 현대 등의 기업은 영상 인식을 활용해 자율주행자동차를 만들기 위해 노력한다. 쿠팡, 네이버, 그리고 각종 유통업체들 역시 데이터마이닝을 활용해 판매 이익을 극대화하려고 노력한다. 구글, 네이버 등 포털 사이트들은 검색 효율을 극대화하기 위해 자연어 처리를 활용한다.
    핑크빛 이야기만 하는 건 좋지 않으니, 우려되는 부분도 이야기 하겠다. 머신러닝이라는 건 아무래도 빅데이터를 필요로 하는 기술이다. 모든 회사들이 빅데이터를 가지고 있는 건 아니다. 빅데이터를 가지고 있는 건 대부분 대기업이고, 그 말은 취업을 준비하는 입장에서 다른 분야에 비해 그렇게 많은 인원을 필요로 하지 않는다. 우리나라는 다른 나라들에 비해 인공지능에 투자한 시기도 꽤 늦은 편인데, 과연 대한민국의 인공지능 시장이 어떻게 변할지도 미지수이다.
    그렇지만, 인공지능이라는 분야는 굉장히 매력적인 분야이고 미래에 사라질 걱정은 없다고 생각한다. 내가 이 분야에 관심이 있다면 발은 한 번 담가보는게 어떨까 싶다. 적성에도 맞고, 흥미도 있어 열심히 한다면 그 분야의 전문가는 될 수 있지 않겠는가?

    관련 진로


    인공지능을 공부해서 나갈 수 있는 진로는 크게 4갈래로 나뉜다. 데이터 엔지니어, 데이터 애널리스트, 머신러닝 엔지니어, 데이터 사이언티스트가 그것이다. 인공지능 쪽으로 진로를 고민한다면 해당 유튜버의 동영상을 보는 게 좋을 듯 하다. 워낙에 잘 정리된 동영상이라 보는 걸 추천하고 싶다. 진로만 보고 싶다면 13분부터 보면 된다.
    https://www.youtube.com/watch?v=7tf3lKh1pxU&t=1598s

    끝마치며


    필자 같은 경우에는 비전공자이다. 비전공자다 보니 주변의 개발자를 꿈꾸는 친구들이 많지 않다. 프로젝트 구하기가 힘들다.... 이에 따라 나는 전혀 모르는 친구들에게 매력적인 요소를 갖춰야 한다. '무엇을 해야 할까?'라는 고민과 함께 최근 해커톤 등 수상작들을 많이 찾아봤고, 많은 프로젝트가 인공지능을 사용하는 걸 확인할 수 있었다. 소프트웨어 관련 학과를 다니는 친구들이 프로젝트를 한다면 가장 팀원을 구하기 어려운 분야는 인공지능이 아닐까?라는 생각을 하며 인공지능을 공부하기로 마음을 먹는다.
    추가적으로 필자는 산업공학 출신인데, 산업공학 역시 인공지능에 강점이 있는 학과라고 한다. 내가 관심을 갖고 있는 백엔드 분야는 인공지능 시장에서 수요가 많고, 부족하지만 일반적인 비전공자들에 비해 상당 수준의 통계적 지식을 가졌으며 산업공학도인 내게 적성적으로 맞는 듯 하다. 더 많은 자료를 찾아봐야겠다.



    이 글은 제가 쓰는 첫 글입니다. 말하는 건 자신 있지만, 글 쓰는 건 아무래도 해본 적이 많이 없어 걱정이 살짝 되네요 ㅋㅋ 내 글이 다른 사람들을 이해시킬 수 있을까?라는 생각이 듭니다. 이해가 안 된다면 어떤 부분에서 막히는지 많은 피드백 부탁드립니다..!
    이 짧은 글을 쓰는데도 상당한 에너지를 쓰네요. 앞으로 꾸준하게 글을 써보겠습니다. 글을 안 쓰고 제가 게으름을 피운다면 댓글로 따끔하게 한마디 해주세욥 ㅎㅎ 다들 잘 부탁드립니다!! 읽어주셔서 감사합니다!!!


    사진 출처: https://www.mk.co.kr/news/economy/view/2020/12/1308737/

    '머신러닝' 카테고리의 다른 글

    Numpy란?  (1) 2021.07.20
    머신러닝 목차  (0) 2021.07.18
    댓글
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    TAG
    more
    «   2025/08   »
    1 2
    3 4 5 6 7 8 9
    10 11 12 13 14 15 16
    17 18 19 20 21 22 23
    24 25 26 27 28 29 30
    31
    글 보관함