딥러닝이란 무엇일까?
본 문서는 [케라스 창시자에게 배우는 딥러닝] 책을 기반으로 하고 있으며, subinium(본인)이 정리하고 추가한 내용입니다. 생략된 부분과 추가된 부분이 있으니 추가/수정하면 좋을 것 같은 부분은 댓글로 이야기해주시면 감사하겠습니다.
1.1 인공지능과 머신러닝, 딥러닝
이번학기 인공지능 수업을 들었지만, 아직 인공지능이 무엇인지는 모르겠다. 이번 공부를 통해 한번 알아보자.
1.1.1 인공 지능
1950년대 초기, 컴퓨터 과학 분야의 일부 선각자들은 “컴퓨터가 ‘생각’할 수 있는가?”에 대해 의문을 품기 시작했습니다. 이 질문에 대한 답은 아직 찾는 과정이지만, 우리는 이것을 인공 지능 이라 명명하고, 보통 다음과 같이 정의를 내립니다.
보통의 사람이 수행하는 지능적인 작업을 자동화하기 위한 연구 활동 - 본문
인공지능(人工知能, 영어: artificial intelligence, AI)은 기계로부터 만들어진 지능을 말한다. - wikipedia
위와 같이 인공지능에 대한 정의는 전문가마다 다를 수 있지만, 우리는 대충 이 의미를 알고 있습니다. 그렇다면 우리의 어린 시절 컴퓨터 게임 (ex. 체스)와 같이 학습하지 않고 규칙만으로 지능을 흉내내는 작업도 인공지능일까요?
정의에 따라 다를 수 있지만, 제가 생각하기에는 YES입니다. 결론적으로는 기계가 보통 사람의 수행하는 작업을 자동으로 하는 작업이기 때문입니다. 이런 명시적인 규칙을 충분하게 만들어 기계의 수준을 높이는 접근 방법을 symbolic AI 라고 하며, 1950년대부터 1980년대까지 AI의 지배적인 패러다임이었습니다.
하지만 명확한 규칙이 안보이는 경우는 이 방법이 어렵다는 것을 알고 있습니다. 이미지 분류, 음성 인식, 대부분의 사회 문제 등 규칙을 알 수 없는 방법이 많습니다. 그렇기에 이런 문제를 해결하기 위해 새로운 접근법이 등장했는데, 이것이 머신 러닝 입니다.
추가로 위키에서는 다음과 같은 두 방향을 다음과 같이 설명하고 있습니다.
역사적으로, 인공지능 연구는 두 개의 부류 – 깔끔이(Neats)와 지저분이(Scruffies) – 로 나눌 수 있다. 깔끔이는 우리가 전통적 혹은 기호적(symbolic) 인공지능 연구라고 부르는 분야로서, 일반적으로 추상적인 개념에 대한 기호적 연산과 전문가 시스템(expert systems)에 사용된 방법론을 가르친다. 이와 상반된 영역을 우리는 지저분이(Scruffies) 또는 연결주의자(connectionist)라 부르는데, 시스템을 구축하여 지능을 구현/진화시키려고 시도하고, 특정 임무를 완수하기 위해 규칙적인 디자인을 하기보다는 자동화된 프로세스에 의해서 지능을 향상시키는 방식이다. - wikipedia
1.1.2 머신 러닝
기계가 일일이 코드로 명시하지 않은 동작을 데이터로부터 학습하여 실행할 수 있도록 하는 알고리즘을 개발하는 연구 분야 - 아서 사무엘, 1959
머신 러닝은 다음과 같은 질문에서 시작됩니다.
우리가 어떤 것을 작동시키기 위해 ‘어떻게 명령할 지 알고 있는 것’ 이상을 컴퓨터가 처리하는 것이 가능할까?
즉, 규칙을 학습할 수 있을지에 대한 의문입니다. 기존의 규칙과 데이터를 프로그램에 넣어서 결과를 얻는 프로그래밍의 단계에서 이제는 데이터와 결과를 넣으면 규칙을 찾는 프로그램을 목표로 합니다. 그렇기에 머신 러닝 시스템은 더 이상 명시적 프로그램되는 것이 아닌 훈련(training)됩니다. 많은 샘플을 준다면, 시스템은 통계적 규칙과 등등을 통해 사용자가 원하는 규칙을 학습하는 것 입니다.
1990년대부터 각광받기 시작했고, 고성능 하드웨어의 개발과 대량의 데이터셋 처리가 가능해지며 AI에서 가장 인기있고, 성공적인 분야가 되었습니다.
1.1.3 데이터에서 표현을 학습하기
딥러닝 을 정의하기 위해서는 머신 러닝 방식과의 차이점을 먼저 알아야 하고, 머신 러닝 방식이 무엇인지 알아야합니다. 아래는 머신 러닝에 필요한 세 가지 입니다.
- 입력 데이터 포인트 : 음성인식에 있어서는 녹음된 사운드 파일, 이미지 태깅 작업에는 사진을 의미 합니다. INPUT값으로 생각하면 됩니다.
- 기대 출력 : 입력 데이터 포인트에서 실제 값을 의미합니다. 음성 인식에 제 목소리라면 기대 출력은 subinium이 되겠죠.
- 알고리즘 성능 측정 방법 : 알고리즘의 현재 출력과 기대 출력 간의 차이를 결정하기 위해 필요합니다. 피드백을 위해 필요한 것으로 이런 수정 단계를 학습이라고 합니다.
머신 러닝 모뎅을 입력 데이터를 의미 있는 출력으로 변환합니다. 머신 러닝과 딥 러닝 모두 의미 있는 데이터(표현, representation)로의 변환이 중요한 것입니다.
예시를 들어보면 컬러이미지 데이터는 RGB 포맷으로 나타낼 수도 있고, HSV 포맷으로도 인코딩될 수 있습니다. 하지만 빨간색을 찾는 문제에서는 앞의 포맷이, 채도가 높은 것을 찾는 문제에서는 뒤의 포맷이 훨씬 편할 것입니다. 가볍게는 데이터의 N차원 표현에서의 회전, 대칭 변환이 될 수 있겠지만 어떤 문제에서는 복잡한 연산을 통해 새로운 값으로 표현될 수 있습니다.
머신 러닝은 이런 많은 변환들을 하나씩 시도해보며 가장 나은 변환을 찾습니다. (가설 공간)
1.1.4 딥러닝에서 ‘딥’이란 무엇일까?
머신 러닝와 딥러닝을 처음 배울때, 가장 이해가 안되는 부분은 층(layer) 라는 표현이었습니다. 대체 층이란 무엇일까??
우선 제가 이해한 방식을 가볍게 설명하면 다음과 같습니다. 층이란 쉽게 단계를 표현하는 명칭입니다. N층이라 함은 1단계, 2단계, … N단계를 의미하는 것입니다. 위에서 설명했듯이 머신 러닝이란 것은 representation으로의 변환을 중간 목표로 하고 있습니다. 하지만 이런 변환에는 여러 단계가 있고 여러가지 상호관계가 있을 수 있습니다.
예시로 후에 커널 등을 배우면 알 수 있는 예시로 다음과 같은 데이터가 있다고 가정해봅시다.
- CLASS A : (0, 3), (3, 0)
- CLASS B : (1, 2), (2, 1)
에서 CLASS A와 B를 나누는 방법을 고려해봅시다. 이런 문제는 직선으로는 힘들 것 입니다. 그렇기에 변환이 필요한 것 입니다. 본 데이터에서 각각의 데이터를 $x_1, x_2$라고 한다면, 다음 데이터를 1차원 좌표에 $x_1^2 + x_2^2$ 또는 $x_1 * x_2$와 같이 변환한다면 어떻게 될까요?
아마 명확하게 A와 B에 대한 정보가 구별됩니다. 데이터가 4개밖에 없어 이런 여러가지 방법으로 데이터의 규칙을 찾을 수 있지만, 데이터가 많을 수록 많은 변환이 필요할 수 있습니다. 로그를 취하고, 곱하고, 나누고 등등….
그렇기에 딥러닝은 이런 단계, 즉 층(layer)을 많이 만들어 보다 정확한 규칙을 만들어 나가는 것을 의미합니다. 이런 방법을 층 기반 표현 학습(layered representation learning) 또는 계층적 표현 학습(hierarchical) 이라고도 할 수 있습니다.
최근 딥러닝은 이런 층을 수십, 수백개를 만들어서 진행합니다. 그렇기에 좋은 컴퓨팅 파워가 필요한것입니다. 딥러닝에서는 이런 기본 층을 겹겹이 쌓아 올려 구성한 신경망(neural network, NN)이라는 모델을 사용하여 표현 층을 학습합니다.
정리하자면 딥러닝은 데이터 표현을 학습하기 위한 다단계 처리 방식 을 의미합니다.
1.1.5 그림 3개로 딥러닝 작동 원리 이해하기
머신 러닝, 딥 러닝을 공부하면 가장 어려운 것은 용어의 의미입니다. 분명 논문을 읽고 있는데 각 표현이 무엇을 의미하는 지가 저는 제일 어려웠습니다.
- 타깃(target) : 기대 출력을 의미합니다.
- 매핑(mapping) : 입력과 타깃의 관계로 입력을 representation로 변환, 연관시키는 것을 의미합니다.
- 가중치(weight) : 머신 러닝, 딥러닝 모두 결국은 가장 효율적인 식을 찾는 것이 목표이며, 이런 식 또는 식에 필요한 파라미터를 칭합니다.
- 손실함수(loss function) : 타깃과 출력값의 차이를 계산하는 함수입니다
- 역전파(Backpropagation) : 손실함수의 결과를 개선하기 위해서 다시 결과에서부터 가중치를 수정하는 과정입니다. 이를 옵티마이저(optimizer)가 담당합니다.
즉 딥러닝은 다음과 같은 순서로 진행됩니다.
- 데이터를 입력합니다.
- 여러 층을 통해 예상 결과값을 만듭니다. (매핑)
- 실제 값과 비교해서 그 차이를 구합니다. (타깃과 손실함수)
- 차이를 줄이기 위한 방법으로 앞의 층들의 가중치를 수정해줍니다. (역전파)
- 이 방법의 반복으로 규칙을 계속 개선합니다.
이런 총 과정을 그래프로 그리면 다음과 같습니다.
위와 같은 방법을 반복하여 우리는 메커니즘을 계속 확장시킵니다.
1.1.6 지금까지 딥러닝의 성과
현재 책에 쓰여진 바에 의하면 딥러닝은 다음과 같은 획기적인 발전을 이루었습니다.
- 사람 수준의 이미지 분류, 음성 인식, 필기 인식
- 향상된 번역
- 향상된 TTS 변환
- 디지털 비서
- 자율 주행 능력
- 광고 타게팅
- 웹 엔진 결과
- 자연어 질의 대답 능력
- 바둑
1.1.7/8 단기간의 과대 선정을 믿지 말자 / AI에 대한 전망
책에서 전하고자 하는 바는 다음과 같습니다.
- 지나친 기대는 큰 실망을 가져온다.
- 실망은 투자 감소로 이어진다.
- 투자 감소는 AI 겨울로 이어진다.
기술에 대한 거품이 증가하여, 갑작스럽게 지원이 많아지고 훅 모두 투자를 안하는 상황이 올 수 있다는 것입니다. 이미 2번의 AI 겨울을 겪었고, 현재 3번째 겨울이 진행이 되고 있을지도 모른다는 점입니다.
단기간의 기대는 비현실적이지만 장기적인 전망은 매우 밝다고 합니다.
역시 AI의 미래에 대한 견해는 제가 더 공부해보고 스스로 생각해야할 것 같습니다. 이 분야에 대해 심도있는 공부를 해야 제 시야도 넓어질 것 같습니다.
1.2 딥러닝 이전 : 머신 러닝의 간략한 역사
이 책에서는 전통적인 머신 러닝 방법에 대해서 간략하게만 서술하고 넘어갑니다. 이런 전통적 머신 러닝 방법은 후에 따로 포스팅하겠습니다. 가벼운 내용은 이 문서에서 다루겠습니다.
1.2.1 확률적 모델링
확률적 모델링(probability modeling) 은 통계학 이론을 데이터 분석에 응용한 것입니다. 초창기 머신 러닝 형태 중 하나이고, 현재에도 많이 사용됩니다. 가장 잘 알려진 알고리즘은 나이브 베이즈(Naive Bayes) 알고리즘입니다.
나이브 베이즈 알고리즘이란 입력 데이터의 특성이 모두 독립적이라고 가정하고 베이즈 정리(Bayes’ theorem)를 적용하는 머신 러닝 분류 알고리즘입니다.
이와 관련된 모델은 로지스틱 회귀(logistic regression) 입니다. (줄여서 logreg라고도 부르는 것 같습니다.) 이름은 회귀인데 회귀 알고리즘이 아닌 분류 알고리즘 입니다.
데이터 과학자가 분류 작업에 대한 초기 감을 위해 첫 번째로 선택되는 알고리즘입니다.
1.2.2 초창기 신경망
초창기 신경망과 현재의 신경망에는 큰 차이가 있습니다.
1950년대에는 대규모 신경망에 대한 효율적인 학습 방법이 없었으나, 1980년대에 여러 사람들이 제각기 역전파 알고리즘을 발견하며 현재의 신경망까지 발전할 수 있었습니다.
1.2.3 커널 방법
커널 방법(Kernel method) 분류 알고리즘의 한 종류로 그 중에서는 서포트 벡터 머신(Support Vector Machine, SVM) 이 가장 유명합니다.
1.2.4 결정 트리, 랜덤 포레스트, 그래디언트 부스팅 머신
결정 트리(decision tree) 는 플로우차트와 같은 구조를 가집니다. 특히 랜덤 포레스트(Random Forest) 알고리즘은 결정 트리 학습에 기초한 것으로 안정적이고 실전에 유용합니다.
그래디언트 부스팅 머신(gradient boosting machine) 은 후에 나온 기법으로, 이전 모델에서 놓친 데이터 포인트를 보완하는 새로운 모델을 반복적으로 훈련함으로써 머신 러닝 모델을 향상하는 방법인 그래디언트 부스팅을 사용합니다. 캐글 경연 대회에서 가장 많이 사용되는 기법입니다.
1.2.5 다시 신경망으로
2010년경부터 일부 사람들이 중요한 성과를 내며 신경망은 다시 주목을 받았습니다. 2015-2016년에 열린 컴퓨터비전 콘퍼런스에서는 어떤 형태로든 컨브넷(Convolution neural network - 영상 인식에 특화된 심층 신경)을 포함하지 않은 발표를 찾는 것이 어려울 정도로 합성곱 신경망은 이제 메인 알고리즘으로 자리잡았습니다.
1.2.6 딥러닝의 특징
딥러닝은 머신 러닝에서 가장 중요한 단계인 특성 공학을 자동화 한다는 점에서 매우 큰 장점을 가지고 있습니다. 특성공학(feature engineering) 이란 초기 학습을 위한 데이터의 변환을 의미합니다. 전처리라고도 할 수 있습니다. 이런 딥러닝에서 데이터를 학습하는 방법에는 두가지 중요한 특징이 있습니다.
- 층을 거치며, 점진적으로 복잡한 표현이 만들어짐
- 점진적인 중간 표현이 공동으로 학습
이런 특징이 머신 러닝 접근 방법보다 딥러닝이 훨씬 성공하게 된 이유입니다.
1.2.7 머신 러닝의 최근 동향
동향을 알아보기 가장 좋은 방법은 사람들이 가장 많은 커뮤니티를 찾는 것입니다. 그렇기에 머신 러닝 알고리즘과 도구의 동향에 대한 정보를 얻는 좋은 방법은 캐글의 머신 러닝 경연을 살펴보는 것입니다.
2016-2017 캐글에는 그래디언트 부스팅 머신과 딥러닝의 두 가지 접근 방법이 주류를 이뤘다고 합니다.
1.3 왜 딥러닝일까? 왜 지금일까?
머신 러닝의 진보는 다음 세 가지 기술적인 힘이 큰 역할을 했습니다.
- 하드웨어
- 데이터셋과 벤치마크
- 알고리즘 향상
1.3.1 하드웨어
CPU는 1990년부터 2010년 사이에 약 5000배 정도 빨라졌습니다. 그렇기에 작은 딥러닝 모델의 경우에는 노트북에서도 돌릴 수 있게 되었습니다.
하지만 컴퓨터 비전이나 음성 인식에서 사용되는 일반적인 딥러닝 모델들은 노트북보다 10배의 계산 능력이 필요합니다. 이런 상황에서 2000년대 게임 그래픽 성능 개발을 위한 대용량 고속 병렬 칩(그래픽 처리장치 GPU)가 발전하였고, GPU 제품을 위한 프로그래밍 인터페이서 CUDA를 출시하였습니다. 물리 모델링을 시작으로 신경망까지 병렬화가 가능해진 것입니다.
게임용 GPU인 NVIDIA TITAN X는 6.6 테라플롭의 단정도 연산 성능을 제공합니다. 이는 초당 6.6조 개의 float32 연산을 수행합니다. (PS에서 1초에 2~3억 연산을 가정하고 풀었는데 엄청난 속도입니다.) 큰 회사에서는 딥러닝을 위한 GPU 수백개로 딥러닝 모델을 훈련시킵니다.
이에 더하여 구글은 2016년에 텐서 처리 장치 프로젝트를 공개했습니다. 이 칩은 심층 신경망을 실행하기 위해 완전히 새롭게 설계한 것으로 최고 성능을 가진 GPU보다 10배 이상 빠르고 에너지 소비도 더 효율적입니다. (2017에 발표한 TPU는 180 테라플롭입니다.)
1.3.2 데이터
‘데이터의 바다’라는 용어가 있듯이 현재는 데이터가 매우 많습니다. 저장 장치의 발전, 데이터 셋을 수집하고 배포할 수 있는 인터넷의 성장은 머신 러닝에 필요한 데이터들을 마련할 수 있는 환경을 만들어주었습니다. 비디오에는 유튜브, 자연어에는 위키피디아, 이미지는 플리커 등 다양한 데이터가 존재하는 것이죠. 1400만 개의 이미지를 1000개의 범주로 구분한 ImageNet도 빼놓을 수 없는 데이터 셋입니다.
1.3.3 알고리즘
- 활성화 함수
- 가중치 초기화 방법
- 최적화 방법
위의 방법 등은 더 많은 층의 딥러닝을 가능하게 만들었습니다. 이제는 층의 깊이가 수천 개인 모델을 처음부터 훈련시킬 수 있습니다.
1.3.4 새로운 투자의 바람
생략
1.3.5 딥러닝의 대중화
딥러닝의 대중화의 큰 주역은 도구들의 대중화입니다.
초창기 딥러닝은 C++와 CUDA의 전문가를 필요로 했지만, 요즘에는 기본 파이썬 스크립트 기술만 있으면 고수준의 딥러닝을 연구하는 데 충분합니다. 씨아노(Theano) 와 텐서플로(TensorFlow) 와 같은 모듈들이 개발되었기 때문입니다. 또한 이런 툴을 더 편리하게 사용하기 위한 케라스 같은 사용자 편의 도구는 더욱 대중화를 이뤄낼 수 있었습니다.
1.3.6 지속될까?
생략
Leave a Comment