brunch

You can make anything
by writing

C.S.Lewis

by artanis Oct 09. 2018

02.<딥러닝이 뭐야?>딥러닝과 신경망

"딥러닝" - 이제는 낯설지 않은 말입니다. 많은 사람들은 "인공지능=딥러닝" 이라고 인식하고 있는것 같습니다. "인공지능=딥러닝" 맞습니다. 최근의 인공지능은 딥러닝 기술을 통해 실현 되고 있기 때문이죠. 이번 글에서는 딥러닝이라는 용어가 가지는 의미와 탄생배경, 어떻게 인공지능의 대명사가 될 수 있었는지 역사적, 이론적 배경들을 간단하게 살펴보도록 하겠습니다.

[출처 : https://medium.com/autonomous-agents/mathematical-foundation-for-activation-functions-in-artificial-neural-networks-a51c9dd7c089]


신경망(Neural Network)의 역사

 신경망의 아이디어는 인간이 학습하고 기억하는 메커니즘을 흉내내려는 시도로부터 시작되었습니다. 위의 그림은 사람의 뇌가 학습하고 기억하는 메커니즘를 도식화 한 것입니다. 뉴런과 뉴런이 시냅스를 통해 연결되어 있는 모습을 볼 수 있습니다. 인간의 뇌는 수백억개 이상의 뇌세포로 구성되어 있습니다. 실제로 인간의 뇌는 약 100억개 가량의 뉴런과 6조개의 시냅스로 결합 되어 있다고 합니다.

 뇌공학자들은 인간이 학습하는 과정에따라 수백억개의 뇌세포에 여러 변화가 일어나는 것을 알아냈습니다. 인간이 새로운것을 학습하고 기억하는 과정에서 뉴런과 뉴런을 연결하는 시냅스의 화학적 특성이 변하게 되며 시냅스를 따라 흐르는 미세한 전기 신호의 전압값이 달라진다는 것을 알아낸것입니다. 이러한 원리를 이용하여 공학자들은 뇌가 학습하는 메커니즘을 수학적으로 모델링하였습니다.

 위의 그림에서 입력층과 출력층은 뇌세포의 뉴런에 해당하고, 입력층과 출력층을 연결하는 화살표는 뇌세포의 시냅스를 표현하고 있습니다. 수학적으로 보면 입력은 가중치(W) 와 곱해져 출력층에 연결되고, 출력층은 입력층으로 부터 들어오는 신호를 모두 더해서 내보내는 형태를 나타내고 있습니다.

 이것을 모델링 하면 아래 그림과 같은 형태로 표현할 수 있습니다. 모델을 인간이 학습하는 과정과 비교해서 설명하면, 이해가 조금 더 쉬울것 같습니다.

 어린 아이가 고양이를 인지하는 학습과정을 예로 들어 볼까요?

 

  아이가 창틀에 앉아있는 고양이를 바라봅니다. 엄마는 아이에게 저 녀석은 고양이라고 정답을 알려줍니다. 이때 고양이를 바라보는 아이는 고양이의 울음소리, 형태, 움직임등을 인지합니다. 아이가 가진 오감을 통해 고양이의 특징을 인지하는 것입니다. "유연하게 움직이고, 귀여운 표정을 짓고, 울음 소리가 아기 같은 특징을 가진 녀석은 고양이다" 라고 학습을 합니다. 이제부터 아이는 비슷한특징을 가진 동물을 보았을때, 고양이라는 것을 알아차릴것입니다. 고양이라는 동물을 학습한 것이죠.


이러한 고양이 학습 과정을 모델을 통해 설명할 수 있습니다.


아이가 고양이를 바라보고 아이의 오감을 통해 고양이의 특징들을 파악하게 되는데, 이러한 특징은 학습모델에서 입력으로 표현 됩니다. 즉, 고양이의 특징들이 입력으로 주어지는 것입니다.

 예를들어 위 모델에서 x1은 고양이 울음소리, x2는 털 색깔, x3는 수염의 형태라고 가정하는 것입니다. (공학적으로는 이것을 컴퓨터가 이해할 수 있도록 각각 어떤 숫자로 표현할 것입니다.)  w1,w2,w3는 뇌세포의 뉴런과 뉴런을 연결하는 시냅스를 표현하는 것으로 weight라고 부르며, 인간이 학습하는 과정에서 뇌세포의 뉴런과 뉴런을 연결하는 시냅스의 전압이 변하듯, W의 값이 고양이를 표현하기 위한 값으로 변화 하게 됩니다. 예를들면 w1=0.1,w2=0.5,w3=-0.2  와 같이 말이죠.

이것을 수식으로 표현해볼까요?

위의 수식에서 W 를 제외한 값들은 모두 주어진 값이므로, 위의 식을 만족하는 W를 구하면 고양이를 구분할 줄 아는 뇌세포를 성공적으로 모델링 한 것입니다.


퍼셉트론(Percetpron)

이렇게 뇌세포의 메커니즘을 모델링 했습니다. 아이디어가 매우 간단하지 않은가요? 이러한 뇌세포 메커니즘이 수백만개 모이면 인간과 같은 지능을 가지게 되지 않을까요? 이러한 작은 뇌세포 재현 모델을 "퍼셉트론" 이라고 부릅니다. 뉴럴네트워크는 작은 뇌세포를 수학적으로 재현하고자하는 시도로부터 시작되었습니다. 현대의 뉴럴네트워크 알고리즘의 초석이 된 퍼셉트론(Perceptron)은 1957년 코넬 항공 연구소(Cornell Aeronautical Lab)에서 프랑크 로젠블라트(Frank Rosenblatt)에 의해 고안되었습니다. 인공 신경망의 초기모델로서 입력과 출력만 존재하는 아주 간단한 형태의 (Feed-Forward network)피드포워드 네트워크입니다.

퍼셉트론을 최초로 소개한 로젠블라트의 논문 "Principles of Neurodynamics: Perceptrons and the Theory of Brain Mechanisms", by Frank Rosenblatt, 1962. 지금은 아주 간단한 형태라는 것을 알게 되었지만, 당시에는 낯선 개념인데다가 잘 정리되지 않은 논문이어서 매우 읽기 어려웠다고 합니다. 사람들은 로젠블라트의 논문 이후, 신경망이 무엇이든 할 수 있을것 처럼 보였고 많은 연구들이 뜨겁게 진행되었습니다. 당시에는 신경망에 대한 대부분의 연구 개발은 물리학자들에 의해 진행되었다고 합니다. 신경망에 대한 뜨거운 열기와 관심은 1969년 마빈민스키와 시모어페퍼트에 의해 급격히 식어버립니다. 두 과학자가 발표한 퍼셉트론즈  (Minsky M. L. and Papert S. A. 1969. Perceptrons. Cambridge, MA: MIT Press.) 라는 유명한 저서는 퍼셉트론의 제한점들을 이론적으로 증명해 냈습니다. 퍼셉트론은 선형분리문제의 단순한 예인 XOR 함수 조차 학습하는 것이 불가능하다는 것을 저서를 통해 입증하였고, 3개 또는 그 이상의 layer를 가지는 퍼셉트론도 마찬가지 일 것이라고 추측하였습니다. 지금 수준의 기술과 컴퓨팅 환경에서는 누구나 수분내에 그것을 증명할 수 있겠지만, 당시의 환경을 고려했을때 증명이 쉽지는 않았을 것입니다.


Back-propagation 알고리즘

오랜 기간 냉각기를 가졌던 신경망 연구분야를 다시 부활 시킨것은 얀러쿤 교수와 그의 동료들이 개발한 "Back-propagation 알고리즘" 입니다. 우편물의 손글씨 우편번호를 인식하고자 개발한 것으로 알고리즘은 성공적인 성능을 보여주었습니다. 신경망이 1969년의 비관적인 추측을 완벽히 깨뜨려버리고 성공적으로 재기한것입니다. 1989년에 등장한 Back-propagation은 또 다시 신경망 연구의 붐을 일으킵니다. 이후 수많은 논문과 연구 결과들이 쏟아져 나오게 됩니다.

그러나 안타깝게도 학습속도가 느리고, 과적합으로 인해 새로운 문제를 잘 풀지 못한다는 한계점들이 속속 밝혀 지면서, 제 2의 냉각기를 맞이하게 됩니다.

이후 신경망이 다시 부활하게 되는데 Back-propagation 알고리즘은 현대 딥러닝 알고리즘의 근간이 됩니다.  

 Back-propagation은 신경망 초기의 입력과 출력층으로 구성된 Single-Layer Perceptron을 확장하여, 1개 이상의 은닉층(hidden layer)을 가지는 Multi-Layer Perceptron의 형태로 구현되었습니다.

 입력데이터 셋은 가중치와 곱해져 은닉층으로 흐르고 은닉층의 출력은 다시 출력층과 연결된 가중치와 곱해져 출력층으로 흘러 나갑니다. 이때 출력층의 값과 정답과의 차이는 신경망 예측 오류로 계산되고, 오류를 감소할수 있는 값으로 가중치들을 조정합니다. 가중치를 조정하기 위해서는 먼저 출력값과 정답의 차이를 줄이도록 출력층의 가중치를 조정하고, 다음으로 은닉층의 가중치를 조정합니다. 즉, 가중치의 조정은 오류를 줄이는 방향으로 출력층에서 입력층으로 거꾸로 진행됩니다. Back-propagation은 오류가 출력층에서 입력층으로 전달된다는 의미로 붙여진 이름입니다.  



Deep Neural Network(심층신경망)

Deep Neural Network(DNN) 이라는 개념이 2000년대 제프리힌튼 교수에 의해 새롭게 등장합니다. 사실 Back-propagation 과 크게 다르지 않습니다. 다만, 인간의 뇌가 수백만개의 뉴런과 시냅스로 구성되어 있듯이 수천개의 노드와 수십개의 레이어로 신경망을 구성해보자는 것에서 출발하였습니다.

  이러한 상상력을 발휘 할 수 있었던것은 GPU 덕분입니다. 제프리 힌튼교수는 게임을 위해 만들어진 GPU를 활용하여 병렬 연산을 하면 수백개의 레이어와 노드의 연산을 빠르게 할 수 있을 것이라고 생각하였습니다.

  GPU는 원래 게임을 위해 만들어진 프로세서이며 수천개의 프로세서로 구성되어 있습니다. 각각의 프로세서는 CPU와 비교할 수 없을 정도로 느리지만, 수천개의 프로세서가 간단한 연산들을 병렬 처리 할 수 있도록 고안된 것입니다.

  GPU에 대한 이해를 쉽게하기 위하여 여러분이 슈팅게임을 하고 있다고 가정해봅시다. 적들의 함선에서는 수백개의 총알이 발사되었습니다. 내 전투기는 이것을 피해야 합니다. 그와 동시에 내 전투기에서는 적 함선을 향해 총알이 발사 됩니다. 적 함선에서 나온 수백개의 총알은 각각 다른 궤적과 속도를 가지며 내 전투기를 향해 날아옵니다. 이와 같은 장면은 슈팅게임에서 매우 흔한 장면입니다. 모든 일들이 동시에 벌어지고 있는 중입니다. 수백개의 총알들과 내 전투기, 배경화면의 전환등이 모두 동시에 벌어져야 합니다. 이와 같이 게임은 여러 일들이 동시에 일어나야 합니다. 간단한 게임은 CPU가 얼른 많은 일들을 순차적으로 처리해도 워낙 빨라서 사람이 느끼지 못할 수 있겠지만, 요즘처럼 복잡한 게임은 그렇지 않습니다. 게임에서 일어나는 일들을 동시에 처리하는 역할을 위해 탄생한것이 GPU 입니다. GPU는 각각의 프로세서들이 수백개의 총알들의 움직을 각각 맡아서 궤적을 계산합니다. 즉, 병렬 처리를 하는 것입니다.

 제프리힌튼 교수는 이것을 신경망 훈련에 응용하였습니다. 쉽게 예를들어 1000개의 데이터셋을 훈련하는 경우 core가 1개인 CPU에서는 1000번의 알고리즘 연산이 필요하지만, 1000개의 프로세서를 가진 GPU에서는 1000개를 동시에 처리할 것이므로 1번의 알고리즘 연산만 필요합니다.




DNN(Deep Neural Network)은 20년 전에는 감히 상상할 수 도 없었던 많은 노드와 레이어로 구현됩니다.

이제 인간은 인간의 뇌가 수백억개의 뇌세포를 가지듯, 수백억개의 노드와 레이어를 가지는 인공 신경망을 상상할 수 있게 되었습니다. 사람과 같은 지능을 가지는 인공지능의 탄생이 머지 않아 보입니다.

마지막으로 질문을 하나 던지며 이번 글을 마치겠습니다.

DNN의 노드와 레이어를 수십만, 수백만개로 늘려서 학습하면 똑똑한 인공지능이 탄생할까요?


글 - 박태훈 (oldamigo9@gmail.com/wayne.t.park@selvas.com)

매거진의 이전글 01.<딥러닝이 뭐야?>인공지능 시대
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari