2018년 11월 12일 월요일

DL/코세라 딥러닝 1.딥러닝 혹은 인공 신경망(Artificial Neural Network)이란?

이 글은 코세라 Andrew Ng 교수의 deep learning AI 강의를 듣고 기억하기 좋게 정리한 것입니다. 목표는 제 부모님도 이해하시도록 쓰는 것입니다.

알파고 이후로 다들 딥러닝 딥러닝 하는데, 내 부모님을 비롯해서 연세 있으신 분들 대부분은 그게 뭔지 모르신다. 내 또래들도 사실 잘 모르는 것 같다. 나도 앤드류 응 강의 듣기 전엔 몰랐고. 관련 분야 종사자나 컴공 전공자 아니면 모르는 게 정상인가보다.

딥러닝은 기계가 깊게 배운다는 뜻이 아니고 인공신경망(Artificial Neural Network)을 이용한 기계학습을 뜻한다. 인공신경망은 이름에서도 알 수 있듯 사람의 뇌에서 영감을 얻은 기계학습 기법이다. 가령 사람이 어떤 물체를 보고 그게 동물인지 식물인지, 개인지 고양이인지 구분하는 과정은 어떻게 이루어질까? 아마 시각세포에서 전달된 이미지가 뇌의 신경세포들을 거쳐서 특징(feature)들을 잡아낸 후 이건 강아지다 고양이다 하고 판단하게 될 것이다. 딥러닝도 마찬가지로 특징(feature)들을 잡아내는 신경망을 훈련시키는 걸 목표로 한다.
사람의 뇌에는 신경세포, 즉 뉴런(neuron)과 뉴런 사이의 시냅스(synapse)가 있다. 신경세포(neuron)를 보면 자극을 받아들이는 돌기와 다른 신경세포에 자극을 전달하는 돌기가 있다. 인공신경망도 마찬가지로 신경세포를 모방한 노드(node)들이 있다. 노드는 흔히 사용되는 컴퓨터 용어로, 일단 데이터가 저장되는 단위 정도로 생각하면 된다. 각 노드는 다음 노드에 값을 전달하고, 이런 과정을 반복해서 출력값 층의 노드는 결과값을 내놓게 된다. 노드들은 층을 가지고 있는데, 입력값에 가까운 층은 낮은 단계의 특징(직선인지 곡선인지 등)을 파악하고 출력값에 가까운 층은 높은 단계의 특징(사람 얼굴인지 고양이 얼굴인지)을 파악한다. 아래의 그림을 보면 입력값 층과 결과값 층을 포함해서 4개의 층이 있는 것을 볼 수 있다.

이미지 출처 : http://www.2e.co.kr/hp/pages/share/ShareView.php?modsrl=5913&docsrl=162760&datatype=

가령 어떤 사진 파일을 입력받아서 이게 고양이 이미지인지 아닌지를 판별하는 프로그램을 짠다고 하자. 사람이라면 이 일을 어떻게 진행할까? 우선 빛을 눈으로 받아들여서 눈의 신경세포가 뇌로 이미지를 전달한다. 그럼 뇌에서는 수많은 신경세포들이 이 신호를 가지고 어떤 공정을 거쳐서 머릿속에서 고양이인지 아닌지를 판단하게 하는 것이다. 딥러닝도 비슷하다. 어떤 사진 파일을 입력하면 이 데이터는 여러 층의 노드를 거친다. 그래서 최종 층의 노드는 고양이인지(1) 아닌지(0) 결과값을 내놓게 된다.
이 작업이 오차가 아주 적어서 매우 정확해 만족할 만한 수준이 되면 딥러닝 프로그램을 성공적으로 만들었다고 할 수 있다. 따라서 오차를 최대한 줄이는 게 관건이다. 딥러닝이 요새 부흥하는 이유 중 하나는 많은 데이터가 사용 가능하게 됨으로써 오차를 줄이는 알고리즘이 더 잘 작동하기 때문이다. 수많은 데이터들로 오차를 점점 줄이는 과정의 핵심은 경사하강법과 오차역전파이다.

딥러닝의 핵심은 경사하강법(gradient descent)의 반복을 통해 오차를 최대한 줄이는 데에 있다. 경사 하강법은 대단한 게 아니고 미분을 사용해서 오차를 계속 줄여나가는 방법이다. 입력 데이터를 받고 각 노드(node)에 부여된 가중치(weight)를 업데이트하는 작업이 경사하강법을 반복함으로써 자동으로 이루어진다. 이렇게만 이야기하면 못 알아들으시겠지... 경사하강법에 대해서는 다음에 쓴다. 가중치가 뭔지, gradient가 뭔지 일단 모르는 상태로 지나가자. 경사하강법이라는 게 있는데, 편미분을 이용해서 오차를 줄이는 법이라고만 해 두고 자세한 건 다음에 설명한다.

경사하강법을 하긴 하는데 이것만 가지고는 효과적인 학습이 되지 않는다. 신경망이 예측을 했다고 하자. 100번 정도 예측을 했으면 일단 50번 맞고 50번 틀렸다고 하자. 그럼 이걸 99번 맞고 1번 틀리는 수준까지 끌어올리기 위해 노드들의 가중치를 수정해야 한다. 수정하려면 맞는 결과에 대해서는 맞았다고 피드백을, 틀린 결과에 대해서는 틀렸다고 피드백을 줘야 한다. 이 작업을 한다면 결과값 층부터 입력값 바로 다음 층까지 순서대로 피드백이 가게 된다. 이게 오차역전파(back propagation)의 개념이다. 이것도 다음 번에 다루자.

기본 원리는 크게 어려울 것이 없다. 일단 신경망을 만들어서 예측을 시키고 맞으면 맞다 하고 틀리면 틀리다 해서 피드백을 줘서 오차를 줄이는 과정을 반복하면 된다. 그 종류에는 지도학습, 강화학습, 비지도학습 등이 있고 또한 여러 가지 기법들이 있지만 알파고도 기본적인 작동 원리는 이렇다. 우선 지도학습에 대해 알아보고, 그 다음에는 간단한 분류기(classifier)만들기와 경사하강법과 오차역전파를 다뤄보자.




댓글 없음:

댓글 쓰기

DL/코세라 딥러닝 3.이진 분류기(Binary Classifier)를 만들기 위해서는?

이 글은 코세라 Andrew Ng 교수의 deep learning AI 강의를 듣고 기억하기 좋게 정리한 것입니다. 목표는 제 부모님도 이해하시도록 쉽게 쓰는 것입니다.