가볍게 읽어보는 머신러닝 개념 및 원리 - (3) 신경망과 딥러닝

2018. 7. 28. 20:26IT, 데이터/Data Science(데이터 분석)

728x90





지난 글에서는 지도 학습 중 회귀모델, 의사결정나무, 서포트 벡터 머신에 대해서 알아보았고, 이번 글에서는 신경망에 대해서 알아보려고 합니다. 


그런데 왜 신경망을 같이 안 다루고 따로 글을 썼느냐? 하면 신경망이 최근에 머신러닝에서 가장 핫한 알고리즘이고 다른 머신러닝 기법을 제치고 정확도 면에서 가장 우수한 높은 퍼포먼스를 나타냈기 때문입니다.


신경망은 1950년대에 만들어진 역사가 깊은 방법이지만 왜 그 때는 지지부진하다 최근에서야 다시 떠오르게 되었는가 하면,


2000년대에 들어와서야 대규모 데이터를 만들고 처리할 수 있는 컴퓨터 환경이 갖춰졌기 때문입니다. 신경망이 제대로 작동하려면 엄청난 데이터를 입력해주어야 하고 또 엄청난 연산작업을 수행해야 하는데, 1950년대 컴퓨터로는 택도 없었고, 1980~90년대까지도 지지부진 했던 것을 보면 그 때는 아직 신경망이 제대로 꽃을 피우기에는 너무 이른 시기였던 것이였죠. 





또 한편으로는 신경망의 정확성을 더욱 높여주는 계기가 만들어졌는데, 2004년 토론토 대학교의 제프리 힌튼(Geoffrey Hinton)교수 및 연구진이 신경망을 좀 더 심화한 방법, 이른바 딥 러닝(Deep Learning) 기법을 개발하여 발표했는데 이 기법이 다른 모든 머신러닝의 성능을 뛰어넘는 놀라운 성과를 이루어냈습니다. 


따라서 신경망은 빅데이터의 출현, 컴퓨터 성능의 발전, 그리고 딥러닝 기법과 같은 알고리즘 고도화의 힘을 업어 인공지능의 구현을 이끄는 대표적인 알고리즘이 되었습니다.



그래서 신경망은 따로 다룰만큼 비중이 크기 때문에 이번 글에서는 신경망의 개념과 신경망을 응용한 기법에 관해서 이야기하도록 하겠습니다.



1. 인공신경망(Artificial Neural Network, ANN) 개념



인공신경망(보통 그냥 신경망이라고 부릅니다.)의 용어는 먼저 두뇌의 신경세포가 전기신호를 전달하는 모습에서 착안하여 만들어졌기 때문에 붙여진 이름입니다. 고등학교 생물시간 때 뉴런과 시냅스 어쩌구 하는 것을 배웠던 기억이 어렴풋이 나는데요, 


오른쪽 위 그림과 같이 신경망은 어떠한 입력값이 있으면 입력값 별로 가중치를 매기고 변환함수(F(x))로 잘 섞어넣어서 출력값을 도출해내는, 어떻게 보면 심플한 개념입니다.





이렇게 신경망은 입력값이 들어가는 입력층, 그리고 입력값들을 잘 섞어서 변환하는 중간층(은닉층), 그리고 출력값이 나오는 출력층, 그리고 입력층과 중간층, 중간층과 출력층 사이를 연결하는 각각의 가중치로 구성이 되어있습니다. 또한 신경망의 특징으로는 좀 더 복잡합 데이터도 학습할 수 있도록 입력값을 잘 섞는 중간층의 노드(변환함수)가 하나가 아니라 두 개 이상이 될 수 있다는 것입니다. 


우리가 뭔가 아이디어를 발굴할 때도 혼자 생각하는 것보다, 둘이 생각하는 것이, 또 둘보다는 그 이상이 같이 머리를 맞대면 더 다양하고 좋은 아이디어가 나오겠죠? 그것처럼 중간층의 노드를 여러개 만들어서 입력값의 특성을 다양한 방법으로 학습할 수 있도록 합니다.

그리고 다양하게 나온 아이디어를 그냥 중구난방으로 두지말고 잘 종합해서 정리하는 것이 좋겠죠? 마찬가지로 중간층의 여러 노드에서 만들어진 값 별로 적절한 가중치를 부여해서 수렴한 다음 출력값에 반영하는 과정을 통해 정확한 값을 도출하도록 하는 것이 신경망의 목표라고 할 수 있겠습니다.   


참고로 중간층을 은닉층으로 부르는 이유는 입력층과 출력층은 사람의 눈에 보이지만 은닉층은 신경망 알고리즘이 내부에 꽁하고 감춰놓고 알아서 적절하게 계산한다는 의미에서 그렇게 많이들 부릅니다. (앞으로는 은닉층으로 통일해서 부르겠습니다.)





2. 신경망과 회귀분석의 차이


신경망에서 가중치라는 말이 계속 나오는데, 어디서 들어본 것 같죠? 바로 이전 글의 회귀 모델에서도 입력값마다 고유의 가중치가 도출된다고 했었습니다. 이렇게 회귀모델과 신경망이 일견 비슷해보이기도 하는데 어떤 차이가 있는 지 다음 그림을 통해 알아보겠습니다.



                  



위의 그림은 회귀모델과 신경망의 차이를 직관적으로 보여주고 있습니다. 보시다시피 회귀모델은 은닉층(중간층)없이 입력값과 출력값 간의 관계가 다이렉트로 연결되어 있습니다.


위 그림을 함수형태로 나타내면 왼쪽의 회귀모델은 이전 글에서 보신 것과 같이 일반적으로 x에 대한 y의 1차 함수 형태로 나타내며, x[0], x[1] 등 각각의 x 성분이 고유의 가중치 w와 곱해져 출력값 y에 독립적이고 직접적으로 영향을 주고 있습니다.  


회귀모델   :   y = w[0] × x[0]  +  w[1] × x[1]  +  w[2] × x[2]  +  w[3] × x[3]



반면 신경망은 입력층이 은닉층과 관계를 가지기 때문에 은닉층의 값 h[0], h[1], h[2]는 아래 식 중 처음 세 개의 형태로 구성되게 됩니다. 각각의 은닉층 함수는 입력값 별로 가중치가 곱해지는 형태가 위의 회귀모델과 비슷하게 생겼네요. 차이가 있다면 선형 함수가 아니라 맨 바깥에 tanh() 함수가 덧씌워진 것인데 이것은 지난 글에서 로지스틱 회귀모델이 로지스틱 함수를 사용하는 것과 비슷한 개념으로 생각하면 되겠습니다. tanh 함수도 로지스틱 함수와 비슷한 그래프 개형을 보이기 때문에 데이터를 분류하는 용도에 적합하기 때문입니다.



             

그리고 입력값과 은닉층 사이의 관계식으로 끝나면 안되겠죠? 이제 은닉층의 값에 다시 가중치를 매겨서 출력값을 도출해야 합니다. 이것은 아래 식 중 가장 마지막 식의 형태로 나타납니다. 이것도 마찬가지로 은닉층의 값 h[0], h[1], h[2]에 가중치 v[0], v[1], v[2]가 곱해져서 결정되는군요.






[tanh 함수 개형]            



따라서 입력값이 4개, 출력값이 1개로 구성된 데이터를 학습할 때 회귀분석에 의한 모델은 단 하나의 식으로 결정되는 반면, 신경망은 은닉층에 노드가 세 개 더해졌을 뿐인데, 식이 무려 네 개나 되고 입력값과 출력값의 관계도 직접적으로 관계를 맺지 못하고 은닉층에 의해서 뒤죽박죽 섞여버리는 바람에 훨씬 복잡해졌습니다. 위의 예시는 신경망 중에서 엄청 단순한 예시일 뿐인데 말이죠.



결과적으로 회귀 모델은 위의 식을 보고 입력값이 출력값에 어떻게 영향을 주는 구나 설명이 가능하지만, 신경망은 모델을 설명이 불가능하다는 차이를 낳게 됩니다. (이렇게 설명 불가능한 점은 서포트 벡터 머신과 동일합니다.)



만약 어떤 연구자가 각 지역의 환경을 조사하여 집값을 추정하고 각 환경적 요인이 집값에 어떻게 영향을 주는지 회귀모델과 신경망을 사용했다고 칩니다. 그랬을 경우 연구자는 결과를 다음과 같이 발표할 수 있습니다.



회귀모델을 사용하는 경우


집값에 영향을 주는 요인을 파악하기 위해 회귀모델로 분석한 결과 주변 공원의 개수가 1만큼의 영향이 있고 지하철역의 유무가 5만큼의 영향이 있으며, 유흥업소의 개수가 -1만큼의 영향이 있다는 결과를 도출하였습니다. 따라서 지하철역의 유무가 집값에 큰 영향이 있으며, 공원의 개수와 유흥업소의 개수는 집값에 반대로 영향을 주지만 그 크기는 비슷한 수준이 있음을 알 수 있었습니다.


하지만 모델의 설명력(정확도)은 70%이기 때문에 다른 케이스에 대해 집값을 추정하면 30%정도는 오차가 발생할 수 있습니다.  



즉, 모델과 현상을 설명하긴 좋으나 정확성을 상대적으로 떨어집니다.



신경망을 사용하는 경우


집값에 영향을 주는 요인을 파악하기 위해 신경망으로 분석한 결과 주변 공원의 개수가 1번 은닉층에서 0.5만큼 영향력이, 2번 은닉층에서 1만큼 영향력이, 3번 은닉층에서 -0.1만큼 영향력이 있고, 1번 은닉층은 집값에 1만큼 영향력이 있고, 2번 은닉층은 3, 3번 은닉층은 -2만큼의 영향력이 있습니다...는 개소리고요.


공원의 개수가 집값에 어떻게 영향을 주는지 말로 설명이 안됩니다.


하지만 모델의 정확도는 95%이기 때문에 다른 케이스에 대해 공원 개수, 지하철역 유무, 유흥업소 개수만 가지고도 집값을 거의 정확하게 맞힐 수 있다는 것은 사실입니다.   



즉, 모델과 현상을 설명할 수는 없으나, 어쨌든 결과는 정확합니다.


이렇게 서포트 벡터 머신과 신경망처럼 복잡한 알고리즘은 학습된 모델을 사람이 이해할 수 없고, 따라서 알파고와 이세돌이 대국을 할 때 알파고가 왜 예측하지 못한 방법으로 수를 두는지 그 의도를 파악할 수 없는 것이 바로 이러한 신경망의 특징 때문임을 알 수 있습니다.


인공지능이 인간을 위협하지 않으면서 인간에게 더 많은 지식과 통찰력을 줄 수 있도록 잘 사용되려면 학습된 모델이 어떤 방법으로 작동하는 지 이해할 수 있어야 하는데, 아직까지 이러한 신경망의 거의 유일한 단점은 앞으로의 연구자들에게 도전과제로 남아있습니다.














3. 딥러닝의 정의와 특징



지금까지 신경망의 개념과 특징에 대해서 알아보았고, 또 다른 궁금증은 그러면 딥러닝은 과연 뭘까 하는 것입니다.


위에서 잠깐 힌트를 드렸었는데, 2004년 제프리 힌튼 교수가 기존 신경망을 심화한 기법을 개발하였고 그것을 딥러닝이라고 불렀다는 것입니다. 따라서 딥러닝은 머신러닝과는 다른 또다른 무언가가 아니라 머신러닝에 속하는 신경망 알고리즘을 좀 더 딥(Deep)한 방법으로 학습하도록 개량한 방법을 말하며 머신러닝 안에 딥러닝이 속해있다고 보면 되겠습니다.



       


왼쪽 위 그림은 앞에서도 보여드린 신경망의 개념도이고 오른쪽 위 그림이 바로 딥러닝이라고 할 수 있는 심층 신경망의 개념도입니다.


둘의 차이는 딱 보면 아시겠죠? 은닉층이 한 개가 두 개군요. 예전에는 신경망의 학습수준을 높이기 위해 하나의 은닉층에 은닉노드를 3개가 아니라 10개, 100개 이런식으로 수직으로 쭉 늘려놓기만 했었는데, 그것보다는 은닉층 자체를 여러개로 만들어서 여러 단계를 거치도록 신경망을 구성하였더니 정확도가 훨씬 향상되더라 하는 것입니다.


이렇게 층이 여러 단계로 파고드는 점 때문에 깊다는 의미의 딥 러닝(Deep Learning)이라는 이름이 붙여지게 된 것입니다.




        [은닉노드 10개인 신경망]                       [은닉노드 100개인 신경망]        [은닉층 10개, 층 당 은닉노드 10개인 신경망]



위의 예시는 일반적인 신경망과 심층 신경망, 즉 딥 러닝을 적용하여 ●와 ▲ 데이터를 분류한 결과의 차이를 보여줍니다. 가장 왼쪽의 은닉노드가 10개은 둘 사이를 구분하는 경계선이 직선으로 뾰족뾰족한 반면, 중간의 100개인 신경망은 좀 더 곡선으로 부드럽게 둘 사이를 구분하였음을 알 수 있습니다. 또한 오른쪽과 같이 은닉노드의 총 개수는 100개로 동일한데 층을 10개로 깊게 만든 심층 신경망의 경우 좀 애매하게 걸쳐서 경계선이 만들어진 중간그림에 비해서 좀 더 확실하게 둘 사이를 구분한 것을 볼 수 있습니다.



딥러닝 기법을 통해서 신경망을 좀 더 다양하게 다룰 수 있게 되었고, 앞으로 소개하는 응용된 기법을 통해 몇몇 분야에서 훨씬 더 정확성을 높일 수 있게 되었습니다. 다음으로는 대표적인 두 가지 응용된 알고리즘인 CNN(Convolutional Neural Network)RNN(Recurrent Neural Network)에 대해 간단히 소개하겠습니다.





4. 합성곱 신경망(Convolutional Neural Network, CNN)


합성곱 신경망은 이미지 데이터를 학습하고 인식하는데 특화된 알고리즘입니다.


Convolution이라는 용어가 한국어로 번역하기 좀 난감하기도 하고, 굳이 합성곱으로 번역해서 부르긴 하지만 딱히 와닿는 뜻은 아니라 보통은 그냥 CNN, 아니면 ConvNet이라고 많이 부릅니다.


먼저 Convolution은 신호처리 등의 분야에서 사용되는 용어인데 이미지 프로세싱에서는 이미지를 일정한 패턴으로 변환하기 위해 수행하는 행렬연산이라는 뜻을 가지고 있습니다. 쉽게 이해하면 포토샵이나 사진 어플에서 흐리게 하거나, 선명하게 하거나 하는 등 각종 필터를 적용할 때 Convolution이 적용된다고 생각하시면 됩니다.


Convolution은 특정한 숫자들이 조합된 행렬인 필터를 사용하는데, 숫자들이 어떻게 조합되냐에 따라 효과가 달라진다고 볼 수 있습니다. 자세한 예시는 아래 위키피디어 링크를 들어가보면 확인할 수 있습니다.



https://en.wikipedia.org/wiki/Kernel_(image_processing)


[그림출처 : http://deeplearning.stanford.edu/wiki/index.php/Feature_extraction_using_convolution]



위의 그림은 특정한 필터로 이미지 데이터에 Convolution이 적용하여 변환하는 과정을 보여줍니다. 위에 각 격자들에 숫자가 들어찬 것과 같이 이미지 데이터는 각 픽셀(점)마다 고유의 색 정보가 숫자로 기록되어 있습니다. 그리고 한 픽셀은 R(빨강), G(초록), B(파랑)의 세 가지 색으로 구성되므로 100×100의 아주 작은 이미지라 하더라도 3×(100×100) = 3만개라는 엄청난 크기의 데이터로 구성되는 것입니다. 따라서 이런 이미지 데이터 수천, 수만장을 그대로 신경망에 입력시키면 학습이 엄청난 시간이 필요하게 됩니다.


이 때 3×3 사이즈의 필터를 가지고 Convolution 연산을 수행하면 오른쪽 그림과 같이 데이터의 크기가 축소되는 효과를 얻을 수 있습니다. 이렇게 Convolution을 여러 번 적용하여 데이터의 크기도 줄이면서 이미지의 특징도 추출할 수 있다는 점에서 두 가지 이득을 다 노릴 수 있는 것이 CNN의 특징입니다. 


 



따라서 CNN에서는 이미지를 Convolution으로 한번 변환한 다음 은닉층에 넣고(CNN에서는 Pooling Layer라고 합니다.), Pooling Layer를 통해 계산된 값을 다시 변환한 다음 다시 Pooling Layer에 넣는 과정을 반복합니다. 이 과정을 통해 이미지의 일반적인 특징(Feature Map)을 학습하여 어떤 이미지가 사람인지, 개인지, 고양이인지 구분할 수 있게 되는 것입니다.




5. 순환 신경망(Recurrent Neural Network, RNN)


지금까지 다뤄온 입력값은 서로 연관성 없이 독립적인 관계인 것들이였습니다. 하지만 주가라든가 실시간 필기, 음성같은 것들은 시간에 따라 변화하면서 입력되는 데이터의 경우 시간차이가 근접할수록 좀 더 서로 비슷한 특징이 있습니다. 그리고 시간에 따라 변화하는 데이터(시계열 데이터)는 바로 전의 상황과 밀접한 관련이 있으므로 신경망에서는 계속해서 이어지는 데이터를 입력받을 때 지금 들어온 데이터와 전에 들어온 데이터가 연관이 있다는 것을 인지해야합니다. 


하지만 기존 신경망은 지금 입력된 데이터를 학습해서 내보낼 뿐 그 다음 데이터가 들어오는 순간 이전에 입력받았던 데이터는 다 잊어버리기 때문에 시계열 데이터를 학습하기에 적합하지 않습니다. 따라서 이전에 입력받은 데이터를 잊어버리지 않도록 새로운 데이터를 입력받을 때 이전 데이터를 다시 입력시키는(아래 그림과 같이 다시 자신에게로 입력시키는 화살표) 방법인 순환 신경망이 개발되었습니다. 

 



순환 신경망을 구현하기 위해서는 고려할 사항이 많으나 다분히 기술적인 사항이므로 순환 신경망의 개념을 설명하는 것은 간단히 마치며, 순환 신경망이 활용된 재밌는 사례를 찾아보면 기계가 음성을 합성하여 사람처럼 말하는 인공지능이 있습니다. 들어가보시면 JTBC 손석희 사장을 합성한 목소리를 들을 수 있습니다. 잡음이 껴있어서 합성된 목소리라는 것이 티는 나지만 목소리 톤 자체는 상당히 비슷합니다. 대단하네요.

 

https://carpedm20.github.io/tacotron/


(전에는 박근혜와 문재인 대통령 목소리도 들을 수 있었는데 지금은 안되서 아쉽네요.)




지금까지 신경망을 포함한 지도학습의 알고리즘을 알아보았습니다. 마지막으로는 비지도학습 분야의 알고리즘을 소개하도록 합니다. 지금까지 내용이 조금 어려울 수도 있었는데 마지막은 좀 더 가볍게 볼 수 있지 않을까 싶네요.






[제목 그림출처 : https://www.ie.edu/exponential-learning/blog/bootcamps/machine-learning-marketing/]