개요
머신러닝(Machine learning)과 딥러닝(Deep learning)은 화두다! 언제부터인지 주위에 이 단어들을 쓰는 사람들을 굉장히 많이 보았을 것이고 들어봤을 것입니다. (그들의 차이점을 알건 모르건을 떠나서 말이죠!) 얼마나 많은 사람들이 관심을 가지고 있는지 알기 위해서, 키워드로 검색한 구글 트렌드 결과입니다.
만약 머신러닝과 딥러닝의 차이점이 궁금하다면, 비전문가의 말로 풀어쓴 이 글이 도움이 될 것입니다. 전문 용어들을 설명하였고, 두 가지의 차이점과 어떻게 활용할 수 있을지 설명하였습니다.
"머신러닝(Machine Learning)과 딥러닝(Deep Learning)이 무엇일까요?"
"머신러닝(Machine Learning)이 무엇일까요?"
"딥러닝(Deep Learning)이 무엇일까요?"
1. 머신러닝(Machine Learning)과 딥러닝(DeepLearning)이 무엇일까요?
기초부터 시작해보겠습니다. 만일 머신러닝과 딥러닝의 차이점을 이미 알고계신다면
section 2로 넘어가시면 됩니다.
1.1 머신러닝(Machine Learning)이 무엇일까요?
Tom Mitchell의 정의가 가장 많이 인용되고 있는데 저 또한 동의합니다.
A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P if its performance at tasks in T, as measured by P, improves with experience E.
이해가 잘 안되시나요? 더 간단한 예제로 가보겠습니다.
예제 1 - Machine Learning - 키(height)를 기반으로 몸무게(weight) 예측하기
예를 들어서 당신이 어떤 사람의 키를 기반으로 몸무게를 예측하는 시스템을 만든다고 해봅시다. 가장 첫번째로 당신이 해야할 일은 데이터를 수집(collect)하는 것입니다. 데이터가 이런 형태를 보인다고 가정해봅시다.
그래프의 각 점은 하나의 데이터(record)를 뜻합니다. 시작하기에 앞써 우리는 키를 기반으로 하여 몸무게를 예측하기 위해 선 하나를 그어볼 수 있겠습니다. 선은 이런 수식으로 표현될 수 있을 것입니다.
몸무게 (kg) = 키 (cm) - 100
이 공식은 우리의 예측에 도움을 줄 것입니다. 지금 이 공식만으로도 만족스럽긴 하지만 우리는 '성능'을 이해하고 향상하기 위해 노력해야 할 것입니다. 이 경우, 우리는 성능 향상을 위해 실제값(y)과 예측값(y-hat)의 차이를 줄여야 할 것입니다. 이것이 성능을 측정하는 방법입니다.
더 나아가, 데이터가 많을수록(즉, 경험이 많을수록), 더 나은 성능의 모형이 만들어질 것입니다. 또한 추가 변수(variables)를 넣어보면서(ex. 성별 등) 선의 위치도 조금씩 변화시켜 볼 수 있을 것입니다.
예제 2 - 폭풍 예측 시스템(Storm prediction System)
조금 복잡한 예제를 보겠습니다. 당신이 폭풍 예측 시스템을 만들고 싶다고 가정해봅시다. 당신은 과거에 있었던 storm에 관한 정보들과 이와 더불어 그 storm이 발생하기 3개월전 날씨 상태를 데이터로 보유하고 있습니다.
만일 손과 눈으로만 이 폭풍 예측 시스템을 만들려고 한다면 우리는 어떻게 해야할까요?
가장 첫번째로 해야 할 일은 모든 데이터를 샅샅이 뒤져 패턴을 찾는 것입니다. 목표는 어떤 조건이 폭풍을 일으키냐 겠지요?
그 결과 조건은 이러할 수 있습니다. '기온이 40도 이상으로 올라갈 때, 습도는 80~100사이를 유지함'
그리고 이 조건을 그대로 우리 시스템에 적용할 것입니다.
또 다른 경우는 폭풍이 발생할지 안할지에 대해서 과거 데이터를 모두 훑어보고 폭풍이 일어날 가능성이 가장 높은 사유들을 꼽아볼 것입니다. 이렇게 시스템이 셋팅이 된다면 우리의 사유가 얼마나 잘 예측했는지 폭풍 발생 여부에 따라 확인할 것입니다. 그리고 이 작업을 반복적으로 진행하여, 더 나은 예측 성능을 위해 수정할 부분은 수정할 것입니다.
다시 우리가 이해하였던 1.1에서의 머신러닝 정의를 빗대어 생각해봅시다.
우리의 목표 'T'는 어떤 환경적 조건이 폭풍을 일으키는지 찾는 것이었고, 성능 'P'는 그러한 조건 속에서 폭풍 발생 여부에 대한 예측을 몇 번이나 맞추었는지에 대한 결과입니다. 그리고 경험 'E'는 그 시스템을 몇 번 반복을 하냐 입니다.
1.2 딥러닝(Deep Learning)이 무엇일까요?
딥러닝의 개념은 아주 새로운 것은 아닙니다. 2년전부터 이 이야기가 돌긴 하였지만 요새의 트렌드때문에 딥러닝은 더욱 뜨거운 관심을 받고 있습니다. 1.1에서 머신러닝의 정의를 살펴본 것처럼 딥러닝의 formal definition부터 알아보고 예제를 보여드리겠습니다.
Deep learning is a particular kind of machine learning that achieves great power and flexibility by learning to represent the world as nested hierarchy of concepts, with each concept defined in relation to simpler concepts, and more abstract representations computed in terms of less abstract ones.
헷갈리실 것이에요. 간단한 예제를 살펴보겠습니다.
예제 1 - 도형 구분
개념적으로 어떻게 진행되는지 간단한 예를 살펴보겠습니다. 어떻게 인간이 정사각형과 다른 도형을 인지하는지 알아봅시다.
가장 먼저 우리의 눈은 도형에 4개의 선들이 있는지 없는지를 확인합니다. (이 단계가 simple concept입니다.) 우리가 4개의 선을 찾는다면, 그 다음 스텝으로는 이 선들이 연결되어있는지,닫혀있는지(closed), 직각인지, 선의 길이가 동일한지 찾아볼 것입니다. (이 단계가 nested hierarchy of concepts입니다.)
다시 정리해보면, 우리는 복잡한 task(즉 정사각형을 구분하는 일)를 좀 덜 추상적인 task로 구분하였습니다. 딥러닝이 바로 이러한 개념으로 실행된다고 보면 됩니다.
예제 2 – Cat vs. Dog
사진을 보고 개인지 고양이인지 구분하는 것을 예로 들어봅시다.
만일 이 문제를 머신러닝으로 풀으려 한다면, 우리는 변수들(features)를 이렇게 정의할 것입니다.
*참고. 머신러닝, 딥러닝에서는 input 변수를 feature라고 부릅니다. 저는 variable이라는 표현이 더 익숙했었던건지 새롭게 와닿았습니다. 양쪽다 맞는 표현이지만 feature라는 표현이 좀 더 머신러닝/딥러닝의 개념과 유사하게 느껴집니다.
동물이 수염이 있는지 없는지,귀가 있는지 없는지, 만일 있다면 솟아있는지 등을 확인할 것입니다. 정리하자면 우리는 시스템으로 feature 중 무엇이 특정 동물(이번 예제의 경우 개인지 고양이인지)을 더 잘 묘사하는지를 구분할 것입니다.
딥러닝에서는 여기서 한 스텝 더 나아갑니다. 딥러닝은 분류에 있어 중요한 feature를 자동적으로 골라냅니다. 머신러닝은 수동적으로 중요한 feature를 제공하는 반면에요.
딥러닝은 이렇게 움직이는 것입니다. – 어떤 정보(edge)가 개와 고양이를 가장 잘 구분할지를 찾는 것입니다.
2. 머신러닝과 딥러닝의 비교
1장에서는 머신러닝과 딥러닝의 대략적인 개요를 살펴보았습니다. 이제 우리는 특히나 중요한 몇 가지 포인트들과 두 방법론의 테크닉 차이를 비교해보겠습니다.
2.1 데이터 의존도(Data dependencies)
딥러닝과 전통적이 머신러닝에 있어 가장 큰 차이점은 데이터 양에 따른 성능입니다. 데이터 양이 작다면 딥러닝 알고리즘의 성능은 잘 나오지 않습니다. 왜냐하면 딥러닝 알고리즘은 어떤 과제를 이해하기 위해서 매우 큰 데이터가 필요하기 때문입니다. 그와 반면에, 똑같은 시나리오에서는 수작업이 들어간 전통적인 머신러닝 알고리즘이 더 우세합니다.
2.2 하드웨어 의존도(Hardware dependencies)
딥러닝 알고리즘은 고사양 machine이 많은 부분을 좌지우지합니다. 그와 반대로 머신러닝은 저사양 machine에서도 실행이 가능합니다. 이 이유는 무엇일까요? 딥러닝 알고리즘의 요구사항(requirements)는 GPU가 포함되기 때문입니다. GPU는 작업에서 숫자 계산을 담당합니다. 딥러닝 알고리즘은 본질적으로 많은 양의 행렬 곱셈(matrix multiplication)을 수행합니다. 이 작업은 GPU의 구축 목적과 같기 때문에, GPU를 사용하면 보다 효율적으로 최적화 할 수 있습니다.
2.3 Feature engineering
Feature engineering은 데이터 복잡성을 줄이고 학습 알고리즘에서 패턴을 보다 잘 보이게 하는 과정입니다. 이 과정은 시간과 전문가가 필요하다는 관점에서 어렵고 비쌉니다. 머신러닝의 경우, 대부분의 적용된 변수(feature)는 전문가가 식별한 다음 정보 영역 및 데이터 유형별로 손으로 코딩해야 합니다.
*참고. 쉽게 설명드리자면, A은행에서 신용등급을 평가하는 모형을 만든다고 가정해봅시다. A은행에서 가지고 있는 데이터를 활용해 머신러닝 알고리즘에 대입해 보았더니 대략 50개 정도의 변수가 유의미하다고 내뱉어졌습니다. 하지만 우리는 50개 변수 모두 활용할 수 없습니다. 비즈니스적 요건이나 금융당국의 규제에 따라 제거되어야 하는 변수들이 있을 수 있겠지요. 예를 들자면, 학력 정보(중졸/고졸/대졸 등)나 성별 정보입니다. 이런 경우가 전문가가 직접 확인하고 걸러내는 작업입니다.
예를 들어, 변수가 픽셀값, 모양, 텍스쳐, 위치, 방향이라고 가정해봅시다. 대부분의 머신러닝 알고리즘 성능은 변수가 어느 정도로 정확히 식별되고 추출되는가에 달려 있습니다.
딥러닝 알고리즘은 high-level features를 학습합니다. (고차원적인 변수로 이해하시면 될 것 같습니다.) 이 부분이 딥러닝이 머신러닝보다 좀 더 앞서 있다라는 특징입니다. 따라서 딥러닝은 모든 과제에서 새로운 변수 추출이라는 작업을 줄여줍니다. Convolutional Neural Network의 경우, 초기 layer에서는 이미지의 edge나 line같은 low-level features를 학습하고 그 다음 이미지의 high-level 표현을 학습합니다. (그림과 함께 보시면 이해에 도움이 되실 것입니다.)
2.4 문제 해결 접근법(Problem Solving approach)
전통적인 머신러닝 알고리즘으로 문제를 해결할 때에는 주로 문제를 여러 개의 파트로 쪼갠 후, 각각에 대한 답을 구하고 그 결과를 합치는 방법을 추천합니다. 딥러닝은 그와 대비되게 end-to-end방식으로 문제를 해결합니다. (end-to-end가 명확하지 않으니 다음 예제를 참고하십시오.)
예제를 들어보겠습니다.
만약 당신이 사물 인지 작업을 진행해야 한다고 가정해봅시다. 그리고 사물이 무엇인지 그리고 사진 어디에 해당 사물이 위치하고 있는지를 구별해내는 것이 과제입니다.
대게의 머신러닝 접근 방법은 문제를 1.사물 탐지/2.사물 인지 두 개의 step으로 나눌 것입니다. 먼저, ‘grabcut’과 같은 경계 탐지 알고리즘(bound box detection algorithm)을 사용하여 이미지를 훑어보고 가능한 모든 객체를 찾습니다. 그리고 발견된 모든 개체들 중에서 HOG가있는 SVM(Support Vector Machine)과 같은 객체 인식 알고리즘을 사용하여 관련 객체를 인식합니다.
반면, 딥러닝 접근방법은 end-to-end입니다. 예를들어 YOLO net(딥러닝 알고리즘 중 하나)에서 이미지를 전달하면 객체의 이름과 함께 위치가 표시됩니다.
2.5 실행 시간(Execution time)
딥러닝 알고리즘은 훈련(train) 시간이 굉장히 오래 걸립니다. 딥러닝 알고리즘에서는 다른 알고리즘 대비 변수가 너무 많기 때문입니다. 최신 딥러닝 알고리즘인 ResNet의경우 training이 약 2주 정도 걸립니다. 하지만 머신러닝은 수 초에서 수 시간으로 비교적 적은 시간이 걸립니다.
test에서의 시간은 반대로 딥러닝 알고리즘에서 훨씬 적은 시간이 소요됩니다.
반면, k-nearest neighbors (머신러닝 알고리즘의 일종)의 경우 데이터 크기가 커질수록 테스트 시간이 길어집니다. 이것은 일부 머신러닝 알고리즘은 너무 작은 테스트 시간을 갖고 있기 때문에 모든 머신러닝 알고리즘이 그렇다고 볼 수 는 없습니다.
* 모델링에는 train set과 test set이 존재합니다. 단어에서 얼추 유추하셨을 수 있겠지만, 우리가 일반적으로 실제값에 가까운 모델을 만들기 위해 활용되는 데이터셋은 train set이고, 이 train set으로부터 적합된 결과가 타당하지 검사할 때 쓰는 데이터가 test set입니다. 정리하자면, linear model(y = ax +b)에서 train set으로 input 변수 x에 해당하는 적절한 a,b 값을 찾았다면, test set의 input 변수 x값으로 최종 성능이 train set의 성능과 유사하게 산출되는지 검증한다고 보시면 됩니다.
2.6 해석력(Interpretability)
마지막으로 머신러닝과 딥러닝을 비교할 수 있는 또 다른 요인으로는 ‘해석력’을 들 수 있습니다. 이 요인이 딥러닝이 실제 실무에 쓰려 마음 먹으면 그 전에 10번 정도는 고민하는 이유입니다.
예제를 들어볼게요. 에세이의 점수를 자동으로 매기기 위해 딥러닝 알고리즘을 활용했다고 해봅시다. 성능은 거의 사람이 한 것과 유사할 정도로 뛰어납니다. 하지만, 아주 치명적인 문제가 있긴 합니다. 왜 이 점수가 부여됐는지는 알 수 없기 때문입니다. 사실 수학적으로 딥러닝의 어느 노드가 활성화되었는지를 알 수 있긴 하지만, 우리는 거기에 어떤 뉴런이 만들어 졌는지, 그리고 이들 뉴런 레이어가 전제적으로는 무엇을 하고 있는지 알지 못합니다. 그래서 우리는 결과를 해석하지 못합니다.
하지만, 의사결정나무(decesion tree)와 같은 머신러닝 알고리즘은 왜 선택됐는지 명확한 rule이 제공되기 때문에 해석하기가 특히 쉽습니다. 따라서 ‘해석’이 필요한 산업에서는 의사결정나무나 선형회귀모형, 로지스틱회귀모형이 활용됩니다.
반면에 의사 결정 트리와 같은 기계 학습 알고리즘은 왜 선택한 알고리즘을 선택했는지에 대한 명확한 규칙을 제공하므로 배후의 추론을 해석하기가 특히 쉽습니다. 따라서 결정 트리 및 선형 / 로지스틱 회귀와 같은 알고리즘은 주로 업계에서 해석 가능성을 위해 사용됩니다.
3. 머신러닝과 딥러닝은 현재 어디서 쓰이고 있나?
컴퓨터 비전: 자동차 번호판 인식, 안면인식 등
출처 : https://brunch.co.kr/@itschloe1/8
'IT-기타(미분류)' 카테고리의 다른 글
10가지 소프트웨어 아키텍처 패턴 요약 (0) | 2020.01.28 |
---|---|
Lucene(루씬)/Solr(솔라)/Nutch(넛츠) (0) | 2018.10.30 |
Solr vs ElasticSearch 비교 (0) | 2018.10.30 |