딥러닝에 대하여 1 - 딥러닝과 머신러닝, 그리고 신경망 기초 개념
2017년에 들어서면서, 올 한해 동안 지속적으로 공부하고 알고 싶은 주제를 선택하여 블로그에 연재를 해보자는 계획을 갖게 되었습니다. 계획을 실천하기 위해 고심하여 선택한 주제는 바로 '딥 러닝(deep learning)'입니다. 평소에 업무를 보면서 자연스레 접하기는 힘든 분야이지만, 작년에 뜨거운 관심을 받았던 알파고와 이세돌의 대결 덕분에 머신 러닝과 딥 러닝에 호기심을 갖게 되었습니다. 그렇게까지 알파고가 압승을 하리라고는 생각지도 못해서 저에게는 꽤나 충격이었습니다.
올해는 개인적인 공부와 블로그 연재를 통해 단순한 호기심을 벗어나 이해하고, 딥러닝 기술을 활용한 작은 프로젝트를 하나 만들어 보는 것이 목표입니다. 과연 저는 이 목표를 달성할 수 있을까요?ㅎㅎ 용두사미가 되지 않도록 글을 쓰는 이 순간도 다짐해봅니다. 그러면 머신러닝, 신경망, 그리고 딥러닝의 개념에 대해 간단하게 알아보겠습니다.
머신 러닝을 통해서 해결할 수 있는 작업은 '패턴 인식, 이상 감지, 예측' 등이 있습니다. 패턴 인식은 실제 장면에서 사물 인식, 사람 얼굴 혹은 얼굴의 감정 표현 인식, 음성 단어 인식 등이 있습니다. 이상 감지는 비정상적인 일련의 신용 카드 거래 감지, 원자력 발전소 센서 판독 값의 비정상적인 패턴 감지 등이 있습니다. 마지막으로 예측은 미래의 주식 가격 혹은 통화 환율 예측, 특정 인물이 좋아할만한 영화 예측 등이 있습니다.
- 딥 러닝(Deep learning)이란?
딥 러닝이란 머신 러닝의 한 갈래입니다. 머신 러닝이 인공지능(AI)의 주요 아이디어의 일부를 가져와서 인간의 뇌에서 일어나는 의사 결정 과정을 모방하여 만든 신경망으로 현실 세계의 문제를 푸는 것에 집중한다면, 딥 러닝은 머신 러닝의 도구와 기술의 일부에 더욱 초점을 맞춥니다. 그리고 생각이 필요한 어떤 문제를 해결하는 일에 이를 적용하려 합니다.
기존의 머신 러닝의 차이점이 있다면, 머신 러닝에서 기계가 학습하기 위해 주어진 데이터에서 특징을 추출하는 과정에 여전히 사람이 개입하지만 딥 러닝은 주어진 데이터를 그대로 입력데이터로 활용한다는 점입니다. 사람이 생각한 특징을 훈련하는 것이 아니라 데이터 자체에서 중요한 특징을 기계 스스로 학습하는 것입니다. 그래서 딥 러닝을 end-to-end machine learning 이라고 한다고 합니다. 처음부터 끝까지 기계가 학습한다는 것이죠. 그렇기 때문에 사람이 개입함으로써 생길 수 있는 오류를 줄일 수 있습니다.
딥 러닝도 머신 러닝과 마찬가지로 신경망을 통한 기계 학습을 통해 이루어집니다. 딥 러닝에서 신경망은 입력층(input layer)과 출력층(output layer) 그 사이의 은닉층(hidden layer)이라는 것으로 구성되어 있습니다. 은닉층은 다층으로 구성될 수 있으며 이어져있는 각 층은 그 전 층의 입력 신호로부터 나온 새로운 출력을 사용합니다. 쉽게 말해, 순서대로 은닉층 1, 2 가 있다고 할 때, 은닉층 1에서 받은 입력신호를 가공하여 도출된 출력을 은닉층 2로 보내는데, 이 때 1에서 도출된 출력은 2의 입력이 됩니다.
각 뉴런에는 입력신호를 가공하여 출력을 도출하기 위해서 활성화 함수(activation function)가 역할을 하는데, 활성화 함수에는 계단 함수, 시그모이드 함수, Rectified Linear Unit 함수등 이 있습니다. 다음 번 글에서는 이 다양한 활성화 함수와 각 특징에 대해 쓰려고 합니다.
그렇다면 딥 러닝은 실생활에 어떤 방식으로 활용되고 있을까요? 구글에서는 음성과 이미지 인식 알고리즘에 딥러닝을 활용하고 있고, 넷플릭스(Netflix)와 아마존에서는 사용자가 다음에 무엇을 볼 지, 무엇을 구매할 지를 결정하기 위해 활용하고 있다고 합니다. 이 밖에도 화가의 화풍을 따라하여 그림을 그리는 연구와, DOGAN 기법을 이용하여 새로운 이미지를 창조하는 연구가 진행중이라고 합니다. 이 외에도 딥 러닝 기술이 더욱 발전하여 보편화된다면 적용할 수 있는 분야는 무궁무진할 것 이라고 생각합니다.
지금까지 아주 간단하게 머신러닝, 신경망 그리고 딥 러닝의 개념에 대해 적어보았습니다. 딥 러닝의 세부적인 내용을 공부하기 전 가벼운 인트로격으로 써보았습니다. 사실 각 개념들에 대해 찾아보면 방대한 양의 자료들이 많이 있습니다. 상세하고 깊은 내용까지 알고 싶으신 분들은 관련된 책이나 온라인 자료들을 보시면 좋을 듯 합니다. 저는 지금 '밑바닥부터 시작하는 딥러닝' 이라는 책과 coursera 사이트의 Machine learning 강좌를 통해 개인적으로 공부를 하고 있습니다. 혹시나 딥 러닝에 D자도 모르는데, 처음부터 배워보고 싶으신 분들께 제가 공부하는 루트를 추천해드리고 싶습니다. (경험상 백지상태인 초보자에게도 이해하기 쉽도록 가르쳐주는 것 같습니다.) 다음 글에서는 위에서 언급했듯이 신경망의 활성화 함수에 대해 써보겠습니다.
딥러닝에 대한 더 자세한 내용을 살펴보고 싶다면, 아래 링크를 클릭해주세요.
'백엔드' 카테고리의 다른 글
딥러닝에 대하여 2 - 파이썬 설치 및 기초 활용 (0) | 2017.04.03 |
---|---|
java Generics && Netty Bootstrap (0) | 2017.03.20 |
[JAVA]Composite 패턴과 재귀호출로 파일탐색기 만들기 - 1 (1) | 2016.08.01 |
Git merge, rebase 이해하기 (0) | 2016.07.29 |
JAVA exception 처리하기 (0) | 2016.07.01 |