1장 딥러닝이란 무엇인가?
Updated:
인공 지능과 머신 러닝, 딥러닝
인공지능
인공 지능은 초기 컴퓨터 과학 분야의 일부 선각자들이 “컴퓨터가 생각할 수 있는가?”라는 질문을 하면서 시작하였다. 인공 지능 분야에 대한 간결한 정의는 보통의 사람이 수행하는 지능적인 작업을 자동화하기 위한 연구 활동으로, AI는 머신 러닝과 딥러닝을 포괄하고 있다. 또한 학습 과정이 전혀 없는 다른 방법도 많이 포함하고 있다.
아주 오랜 기간 동안 많은 전문가는 프로그래머들이 명시적인 규칙을 충분하게 많이 만들어 데이터베이스에 저장된 지식을 다루면 인간 수준의 인공지능을 만들 수 있다고 믿었다. 이런 접근 방법을 심볼릭 AI(symbolic AI)라고 하며 전문가 시스템(expert system)의 호황으로 그 인기가 절정에 다다랐다.
심볼릭 AI가 잘 정의된 논리적인 문제를 푸는 데 적합하다는 것이 증명되었지만, 더 복잡하고 불분명한 문제를 해결하기 위한 명확한 규칙을 찾는 것은 아주 어려운 일이다. 이런 심볼릭 AI를 대체하기 위한 새로운 방법으로 머신 러닝이 등장하였다.
머신 러닝
컴퓨터가 유용한 작업을 하도록 만드는 일반적인 방법은 프로그래머가 입력 데이터를 적절한 해답으로 바꾸기 위해 따라야 하는 규칙(컴퓨터 프로그램)을 작성하는 것이다. 하지만 머신 러닝은 이와 반대로 입력 데이터와 이에 상응하는 해답을 보고 규칙을 찾는다.
머신 러닝 시스템은 명시적으로 프로그램되는 것이 아니라 훈련(training)된다. 어떤 작업과 관련 있는 많은 샘플을 제공하면 이 데이터에서 통계적 구조를 찾아 그 작업을 자동화하기 위한 규칙을 만들어 낸다.
머신 러니은 통계학과 밀접하게 관련되어 있지만 다른 점이 몇 가지 있다. 머신 러닝은 통계학과 달리 보통 대량의 복잡한 데이터셋을 다루기 때문에 베이즈 분석(Bayesian analysis)같은 전통적인 통계 분석 방법은 현실적으로 적용하기 힘들다. 이런 이유로 머신 러닝, 특히 딥러닝은 수학적 이론이 부족하고 근본적으로 엔지니어링 분야에 해당한다.
데이터에서 표현을 학습하기
머신 러닝 알고리즘이 무엇인지 알아보자. 머신 러닝은 샘플과 기댓값이 주어졌을 때 데이터 처리 작업을 위한 실행 규칙을 찾는 것이다. 머신 러닝을 하기 위해서는 세 가지가 필요하다.
- 입력 데이터 포인트(Input)
- 기대 출력(Output)
- 알고리즘의 성능을 측정하는 방법(Performance Measure): 알고리즘의 현재 출력과 기대 출력 간의 차이를 결정하기 위해 필요하다. 측정값은 알고리즘의 작동 방식을 교정하기 위한 신호로 다시 피드백된다. 이런 수정 단계를 학습(learning)이라고 한다.
머신 러닝 모델은 입력 데이터를 의미 있는 출력으로 변환한다. 이것이 입력과 출력으로 구성된 샘플로부터 학습하는 과정이다. 그렇기 때문에 머신 러닝과 딥러닝의 핵심 문제는 의미 있게 데이터를 변환하는 것이다. 다른 말로 하면 기대 출력에 가까워지도록 입력 데이터의 유용한 표현(representation)을 학습하는 것이다.
여기서 표현이란 데이터를 인코딩(encoding)하거나 표현하기 위해 데이터를 바라보는 다른 방법이다. 예를 들어 컬러 이미지는 RGB 포맷이나 HSV 포맷으로 인코딩될 수 있다. 머신 러닝 모델은 입력 데이터에서 적절한 표현을 찾는 것이 전부이다. 이런 데이터 변환은 당면한 문제를 더 쉽게 해결할 수 있도록 만들어 준다.
다음과 같이 x축, y축이 있고 이 (x, y) 좌표 시스템으로 표현된 데이터 포인트를 보자.
포인트의 좌표 (x, y)를 입력으로 받고 그 포인트가 빨간색인지 흰색인지를 출력하는 알고리즘을 개발하려고 한다. 이 경우는 다음과 같이 요약할 수 있다.
- 입력(Input)은 포인트의 좌표이다.
- 기대 출력(Output)은 포인트의 색깔이다.
- 알고리즘의 성능(Performance Measure)은 정확히 분류한 포인트의 비율을 사용하여 측정한다.
여기에서 우리가 원하는 것은 흰색 포인트와 빨간색 포인트를 완벽하게 구분하는 새로운 데이터 표현이다. 사용할 수 있는 변환 방법 중 하나는 다음과 같은 좌표 변환이다.
위 표현을 사용하면 색깔 분류 문제를 “x > 0인 것은 빨간색 포인트다.” 또는 “x < 0인 것은 흰색 포인트다.”라는 간단한 규칙으로 나타낼 수 있다.
자동으로 생성한 여러 가지 데이터 표현과 이를 기반으로 하는 규칙 중에서 약간의 개발 데이터셋으로 올바르게 분류된 숫자의 비율을 피드백받아 좋은 것을 체계적으로 찾는다면 머신 러닝을 하고 있는 것이다. 머신 러닝에서 학습(learning)은 유용한 데이터 표현을 만드는 데이터 변환을 피드백 신호를 바탕으로 자동으로 탐색하는 과정을 말한다. 이 표현은 더 간단한 규칙으로 문제를 해결할 수 있다.
이 변화은 좌표 변환이거나 픽셀의 히스토그램이나 동심원을 헤아리는 것일 수 있다. 또는 선형 투영, 이동, 비선형 연산 등이 될 수도 있다. 머신 러닝 알고리즘은 일반적으로 이런 변환을 찾기 위한 창의력이 없다. 가설 공간(hypothesis space)이라고 하는 미리 정의된 연산의 모음들을 자세히 조사하는 것뿐이다.
간략하게 말하면 머신 러닝은 가능성 있는 공간을 사전에 정의하고 피드백 신호의 도움을 받아 입력 데이터에 대한 유용한 변환과 규칙을 찾는 것이다.
딥러닝에서 ‘딥’이란 무엇일까?
딥러닝은 머신 러닝의 특정한 한 분야로서 연속된 층(layer)에서 점진적으로 의미 있는 표현을 배우는 데 강점이 있으며, 데이터로부터 표현을 학습하는 새로운 방식이다. 데이터로부터 모델을 만드는 데 얼마나 많은 층을 사용했는지가 그 모델의 깊이가 된다. 최근 딥러닝 모델은 표현 학습을 위해 수십 개, 수백 개의 연속된 층을 가지고 있다. 이 층들을 모두 훈련 데이터에 노출해서 자동으로 학습시킨다. 한편 다른 머신 러닝 접근 방법은 1 ~ 2개의 데이터 표현 층을 학습하는 경향이 있다. 그래서 이런 방식을 얕은 학습(shallow learning)이라고 한다.
딥러닝에서는 층을 겹겹이 쌓아 올려 구성한 신경망(neural network)이라는 모델을 사용하여 층 기반 표현을 학습한다. 딥러닝 알고리즘으로 학습된 표현이 어떻게 나타나는지를 몇 개의 층으로 이루어진 네트워크가 이미지 안의 숫자를 인식하기 위해 이미지를 어떻게 변환하는지를 통해 살펴본다.
위 그림에서 볼 수 있듯이 최종 출력에 대해 점점 더 많은 정보를 가지지만 원본 이미지와는 점점 더 다른 표현으로 숫자 이미지가 변환된다. 심층 신경망을 정보가 연속된 필터(filter)를 통과하면서 순도 높게 정제되는 다단계 정보 추출 과정으로 생각할 수 있다.
위 과정이 바로 딥러닝이다. 기술적으로는 데이터 표현을 학습하기 위한 다단계 처리 방식을 말한다.
그림 3개로 딥러닝의 작동 원리 이해하기
지금까지 머신 러닝이 많은 입력과 타깃의 샘플을 관찰하면서 입력(이미지)을 타깃(‘고양이’ 레이블)에 매핑(mapping)하는 것임을 알았다. 심층 신경망은 이런 입력-타깃 매핑을 간단한 데이터 변환기(층)를 많이 연결하여 수행한다는 것도 알았다. 이런 학습이 어떻게 일어나는지 자세히 알아보자.
층이 입력 데이터를 처리하는 방식은 일련의 숫자로 이루어진 층의 가중치(weight)에 저장되어 있다. 기술적으로 말하면 어떤 층에서 일어나는 변환은 그 층의 가중치를 파라미터(parameter)로 가지는 함수로 표현된다.
이런 맥락으로 보면 학습은 주어진 입력을 정확한 타깃에 매핑하기 위해 신경망의 모든 층에 있는 가중치 값을 찾는 것을 의미한다. 하지만 어떤 심층 신경망은 수천만 개의 파라미터를 가지기도 한다. 이런 경우에 파라미터 하나의 값을 바꾸면 다른 모든 파라미터에 영향을 까지기 때문에 모든 파라미터의 정확한 값을 찾는 것은 어려운 일로 보인다.
신경망의 출력을 제어하려면 출력이 기대하는 것보다 얼마나 벗어났는지 측정해야 한다. 이는 신경망의 손실 함수(loss function)가 담당하는 일이다. 손실 함수를 이따금 목적 함수(object function)또는 비용 함수(cost function)라고도 부른다. 신경망이 한 샘플에 대해 얼마나 잘 예측했는지 측정하기 위해 손실 함수가 신경망의 예측과 진짜 타깃의 차이를 점수로 계산한다.
기본적인 딥러닝 방식은 이 점수를 피드백 신호로 사용하여 현재 샘플의 손실 점수가 감소되는 방향으로 가중치 값을 조금씩 수정하는 것이다. 이런 수정 과정은 딥러닝의 핵심 알고리즘인 역전파(backpropagation) 알고리즘을 구현한 옵티마이저(optimizer)가 담당한다.
초기에는 네트워크의 가중치가 랜덤한 값으로 할당되므로 랜덤한 변환을 연속적으로 수행한다. 자연스럽게 출력은 기대한 것과 멀어지고 손실 점수가 매우 높을 것이다. 하지만 네트워크가 모든 샘플을 처리하면서 가중치가 조금씩 올바른 방향으로 조정되고 손실 점수가 감소한다. 이를 훈련 반복(training loop)이라고 하며, 충분한 횟수만큼 반복하면 손실 함수를 최소화하는 가중치 값을 산출한다. 최소한의 손실을 내는 네트워크가 타깃에 가능한 가장 가까운 출력을 만드는 모델이 된다.
딥러닝 이전: 머신 러닝의 간략한 역사
확률적 모델링
확률적 모델링(probabilistic modeling)은 통계학 이론을 데이터 분석에 응용한 것이다. 초창기 머신 러닝 형태 중 하나고 요즘도 널리 사용된다.
초창기 신경망
성공적인 첫 번째 신경망 애플리케이션은 1989년 벨 연구소에서 나왔다. 얀 르쿤은 초창기 합성곱 신경망과 역전파를 연결하여 손글씨 숫자 이미지를 분류하는 문제에 적용했다.
커널 방법
커널 방법(kernel method)은 분류 알고리즘의 한 종류를 말하며 그중 서포트 벡터 머신(Support Vector Machine, SVM)이 가장 유명하다.
SVM은 두 클래스를 나누는 결정 경계(decision boundary)를 찾는 분류 알고리즘이다. SVM이 결정 경계를 찾는 과정은 두 단계이다.
- 결정 경계가 하나의 초평면(hyperplane)으로 표현될 수 있는 새로운 고차원 표현으로 데이터를 매칭한다.
- 초평면과 각 클래스의 가장 가까운 데이터 포인트 사이의 거리가 최대가 되는 최선의 결정 경계를 찾는다. 이 단계를 마진 최대화(margin maximization)라고 부른다. 이렇게 함으로써 결정 경계가 훈련 데이터셋 이외의 새로운 샘플에 잘 일반화되도록 도와준다.
SVM이 개발되었을 때 간단한 분류 문제에 대해 최고 수준의 성능을 달성했고 광범위한 이론으로 몇 안되는 머신 러닝 방법 중 하나가 되었다. 또 수학적으로 깊게 분석하기 용이하여 이론을 이해하고 설명하기 쉽다. 이러한 특징 때문에 SVM이 큰 인기를 끌었으나, 대용량의 데이터셋에 확장하기 어렵고 이미지 분류 같은 지각에 관련된 문제에서 좋은 성능을 내지 못한 단점이 있다.
결정 트리, 랜덤 포레스트, 그레이디언트 부스팅 머신
결정 트리(decision tree)는 플로차트(flowchart)같은 구조를 가지며 입력 데이터 포인트를 분류하거나 주어진 입력에 대해 출력 값을 예측한다. 결정 트리는 시각화하고 이해하기 쉽다.
특히 랜덤 포레스트(random forest) 알고리즘은 결정 트리 학습에 기초한 것으로 안정적이고 실전에서 유용하다. 서로 다른 결정 트리를 많이 만들고 그 출력을 앙상블하는 방법을 사용한다. 랜덤 포레스트는 다양한 문제에 적용할 수 있다.
그레이디언트 부스팅 머신(gradient boosting machine)은 랜덤 포레스트와 아주 비슷하게 약한 예측 모델인 결정 트리를 앙상블하는 것을 기반으로 하는 머신 러닝 방법이다. 이 알고리즘은 이전 모델에서 놓친 데이터 포인트를 보완하는 새로운 모델을 반복적으로 훈련함으로써 머신 러닝 모델을 향상하는 방법인 그레이디언트 부스팅을 사용한다. 결정 트리에 그레이디언트 부스팅 방법을 적용하면 비슷한 성질을 가지면서도 대부분의 경우에 랜덤 포레스트의 성능을 능가하는 모델을 만든다.
다시 신경망으로
신경망은 대부분 과학 커뮤니티에서 관심을 받지 못했지만, 여전히 신경망에 대해 연구하고 있던 일부 사람들이 중요한 성과를 내기 시작했다. 2012년부터 심층 합성곱 신경망이 모든 컴퓨터 비전 작업의 주력 알고리즘이 되었다. 딥러닝은 자연어 처리같은 다른 종류의 문제에도 적용되어 다양한 애플리케이션에서 SVM과 결정 트리를 완전히 대체하고 있다.
딥러닝의 특징
딥러닝이 이렇게 빠르게 확산된 주된 이유는 많은 문제에서 더 좋은 성능을 내고 있기 때문이다. 또한 딥러닝은 머신 러닝에서 가장 중요한 단계인 특성 공학을 완전히 자동화하기 때문에 문제를 더 해결하기 쉽게 만들어준다.
얕은 학습인 이전 머신 러닝 기법은 입력 데이터를 고차원 비선형 투영(SVM)이나 결정 트리 같은 간단한 변환을 통해 하나 또는 2개의 연속된 표현 공간으로 변환한다. 하지만 복잡한 문제에 필요한 잘 정제된 표현은 머신 러닝 방법들로 처리하기 용이하게 사람이 초기 입력 데이터를 여러 방식으로 변환해야 한다. 즉, 데이터의 좋은 표현을 수동으로 만들어야 한다. 이를 특성 공학(feature engineering)이라고 한다. 그에 반해 딥러닝은 이 단계를 완전히 자동화한다. 딥러닝을 사용하면 특성을 직접 찾는 대신 한 번에 모든 특성을 학습할 수 있다. 머신 러닝 워크플로(workflow)를 매우 단순화시켜 주므로 고도의 다단계 작업 과정을 하나의 엔드-투-엔드(end-to-end) 딥러닝 모델로 대체할 수 있다.
얕은 학습 방법을 연속적으로 적용하면 각 층의 효과는 빠르게 줄어든다. 3개의 층을 가진 모델에서 최적의 첫 번째 표현 층은 하나의 층이나 2개의 층을 가진 모델에서 최적의 첫 번째 층과는 달라야 한다. 딥러닝의 변환 능력은 모델이 모든 표현 층을 순차적이 아니라(탐욕적(greedy) 방법이 아니라) 동시에 공동으로 학습하게 만든다. 이런 공동 특성 학습 능력 때문에 모델이 내부 특성 하나를 조정할 때마다 이에 의존하는 다른 모든 특성이 사람이 개입하지 않아도 자동으로 변화에 적응하게 된다.
딥러닝이 데이터로부터 학습하는 방법에는 두 가지 중요한 특징이 있다. 층을 거치면서 점진적으로 더 복잡한 표현이 만들어진다는 것과 이런 접진적인 중간 표현이 공동으로 학습된다는 사실이다. 각 층은 상위 층과 하위 층의 표현이 변함에 따라서 함께 바군다. 이 2개의 특징이 이전의 머신 러닝 접근 방법보다 딥러닝이 훨씬 성공하게 된 이유다.
왜 딥러닝일까? 왜 지금일까?
일반적으로 세 가지 기술적인 힘이 머신 러닝의 진보를 이끌었다.
- 하드웨어
- 시중에 판매되는 CPU는 1990년과 2010년 사이에 거의 5000배가 빨리졌고 발전된 GPU로 딥러닝 모델을 학습시킨다.
- 이에 더해 딥러닝 산업은 GPU를 넘어서 더 효율적이고 특화된 딥러닝 칩에 투자하기 시작했다.
- 데이터셋과 벤치마크(benchmark)
- 딥러닝이 산업혁명의 증기 기관이라면 데이터는 이 기관에 필요한 연료이다.
- 지난 20년간 저장 장치의 급격한 발전과, 대량의 데이터셋을 수집하고 배포할 수 있는 인터넷 성장이 시장의 판도를 바꾸었다.
- 알고리즘의 향상
- 몇 가지 간단하지만 중요한 알고리즘이 개선되면서 10개 이상의 층을 가진 모델을 훈련시킬 수 있게 되었을 때 비로소 딥러닝이 빛을 발하기 시작했다.
딥러닝의 현재 상태를 AI의 혁명이라고 정의할 수 있는 몇 가지 특징이 있다. 이 중요한 특징은 크게 세 가지 범주로 나눌 수 있다.
- 단순함: 딥러닝은 특성 공학이 필요하지 않아 복잡하고 불안정한 많은 엔지니어링 과정을 엔드-투-엔드로 훈련시킬 수 있는 모델로 바꾸어 준다.
- 확장성: 딥러닝 모델은 작은 배치(batch) 데이터에서 반복적으로 훈련되기 때문에 어떤 크기의 데이터셋에서도 훈련할 수 있다.
- 다용도와 재사용성: 딥러닝 모델은 처음부터 다시 사작하지 않고 추가되는 데이터로도 훈련할 수있다. 더불어 훈련된 딥러닝 모델은 다른 용도로 쓰일 수 있어 재사용이 가능하다.
댓글남기기