신경망에 대해서 간단히..

신경망에 대한 관심이 다 죽었다가 딥 러닝이라는 이름으로 다시 살아났다. 많은 사람들이 다른 일을 하다가 신경망에 대해서 관심을 갖게 되었고, 소프트웨어 엔지니어, 하드웨어 엔지니어 할 것 없이 시류를 타고 본인의 몸값을 올리기 위해 신경망에 관심을 갖고 일 하고 있다. 신경망이 뭘 하는 것인지 일반사람들은 잘 알지 못한다. 대개 학술 용어로 쳐바른 글을 읽다보면 졸음이 오거나 주위가 산만해져서 읽다가 포기하게 될 것이고, 그림으로 쳐바른 글을 읽다보면 그림이 뭘 뜻하는지 대충 쳐다보다가 말게 될 것으로 난 생각한다.내가 아는 신경망은 이렇다 (참고로 내가 학교 다닐 때 지도교수 전공이 신경망이었고, 그 때문에 전공 비슷하게 하기도 했고, 전공하다가 다른 분야로 돌린 분들과 같이 공부했다).1. 하나의 신경망 구성요소 (뉴런이라고 부름)가 여러 개의 입력을 받아들이게 되어있다.1. 각각의 입력은 연결강도라고 불리는 weight에 따라 강하게 혹은 약하게 연결된다. 쉽게 말해서 어떤 수를 곱해서 들어온다고 봐도 되고, 앰프에 익숙한 사람이라면 gain이라고 생각해도 될 것이다.2. 이렇게 들어온 입력의 weighted sum을 가지고 decision을 내리는데, 이 때 이 decision은 soft decision이다. 즉, 0과 1로 딱 구분을 하는 게 아니라 0.1, 0.23232 등등 애매한 결정을 내린다. 즉 결정의 단계가 매우 많다. 그래서 fuzzy한 결과를 얻을 수 있다.2. 하나의 신경망은 여러 개의 뉴런이 복잡하게 연결되어진 네트워크(=망)이다. 일반적으로 뉴런을 새로로 한 줄 배열한 것을 layer라고 한다. 우리가 사용하는 신경망은 multi-layered neural network (다층 신경망?)이라고 한다.3. 하나의 신경망은 자기 자신이 얻은 결과를 입력으로 취할 수 있게, 즉 feedback할 수 있게, 다시말해서 closed loop의 구성도 한다. 혹자는 이것을 Recurent NN이라고 한다. 4. 신경망은 주로 스스로 학습할 수 없는 컴퓨터가 인식/인지 문제를 해결할 수 있도록 고안된 것이다. 즉, 카메라가 찍은 정지영상을 보고 이게 어떤 물건을 찍은 사진인지 인식한다거나, 항공기가 찍은 지상의 사진을 보고 땅이 어떤 식으로 이용되고 있는지 자동으로 인식한다거나 하는 일이다.인식/인지의 문제는 classification (분류?)의 문제와도 연결된다. 즉, 여러 개의 사진을 들여다보고 각각의 사진이 어떤 분류에 들어가는지 스스로 판단할 수 있는 기능과 같다. 이를테면 사람의 얼굴이 주가 되는 사진이면 인물 사진으로 분류하고, 풍경이 주가 되는 사진이면 풍경 사진으로 분류하는 것처럼 말이다.요새 딥러닝에서 신경망을 쓴다고 하면 layer의 수가 꽤 많고 그 안에 들어가는 연결강도의 수도 매우 많아서 매우 복잡한 입력에 대한 classification이 가능하다. 이 말은 신경망이 어떠한 결정을 내릴 때 고려하는 요소의 수가 매우 많아진다는 것을 의미한다. 즉, 하나의 그림을 인식할 때 색깔과 모양, 빛의 밝기 등등의 요소들을 매우 종합적으로 관찰해서 최종적으로 이것이 어떤 사진이다라고 구분한다는 말이다. 인간의 경우는 그 모든 것들을 눈으로 보고 그 신호를 뇌에 전달해서 그가 학습한 내용들과 경험을 통해 얻게된 것들을 종합하여 그 그림을 구분하게 되는데, 신경망의 경우도 비슷하다고 할 수 있다.신경망이 어떤 것을 인지/인식/분류할 때 그 근거가 되는 것은 미리 학습시킨 데이터와 계속된 인지과정을 통해서 단련된 연결 강도에 근거하게 된다. 이것을 supervised learning/unsupervised learning이라고 하는데, 신경망을 학습시킬 때 답이 확실한 것들을 미리 가르쳐주고, 그 재료를 바탕으로 답을 알려주지 않은 것들에 대해서도 스스로 학습하게 한다.사실 이것을 잘 뜯어보면 연결강도에 학습시키려는 데이터를 외우게 시키는 것이나 다름이 없다. 각각의 뉴런은 일종의 correlation (유사도) 측정 과정을 하는 것이라고 볼 수도 있거니와 말이다. 그러나 correlation만 측정한다고 해서 엄청나게 다양한 경우에 대해서 인식률이 완벽해지는 것도 아니고, 컴퓨터가 스스로 입력되는 신호들을 적절히 가공하지 않으면 인식률도 떨어질 수 밖에 없는데, 일반적으로 이런 일들은 모두 사람들이 컴퓨터가 인식을 잘 할 수 있도록 인위적으로 전처리를 해주어야 하는 것처럼 손이 많이 가게 된다.신경망에서는 layer의 숫자를 늘려서 학습시킴으로써 이러한 전처리 작업이라든가 특징 요소를 뽑아내는 일을 신경망 스스로 하게 한다. 따라서 입력을 주고 그 입력이 어떤 것을 의미하는 것인지 학습을 시키고 (=연결 강도를 최적화시키고) 하는 작업만 해주면 된다. 나머지 계산은 컴퓨터가 전부 하게 된다. 지금까지 설명한 것으로만 보면, 신경망을 요새 반도체 기술로 구현하려고 한다고 하면, 수많은 곱셈기와 덧셈기의 집적체를 이용할 수 밖에 없다. 그것이 바로 CUDA와 같이 GPU에 들어있는 곱셈/덧셈기 덩어리를 병렬로 이용하는 방법이다. 그래서 흔히 하드웨어 회사에서 deep learning에 관한 일을 한다고 하면, 그 곱셈기와 덧셈기의 배열이라든가, 또는 학습시에 필요한 weight 최적화 작업에 들어가는 미분계산을 돕는 연산기 같은 것들을 추가해준다거나, 아니면 신경망이 동작할 때의 데이터 흐름을 관찰해서 데이터를 빠르게 교환할 수 있는 구조로 곱셈/덧셈기를 연결하는 방법들을 고려해서 하드웨어를 만드는 일들을 하는 것으로 이해하면 된다.신경망이라고 신기술 같지만 컴퓨터로 들어가게 되면 수많은 곱셈과 덧셈의 연속일 뿐이다. 이것은 다른 신호처리/인공지능 응용 분야들도 비슷하다. 대부분이 인식(어떤 것인이 알아맞춤)/추청(주어진 데이터로 어떠한 것인지 정해봄)/예측(주어진 데이터로 다음에 무엇이 될지 찍어봄)의 연속이다. 기본적으로 기계들이 바라보는 세상은 그 성질이 시간에 따라 변화하지 않는다 (time invariant)으로 주로 한정된다. 만일 시간에 따라 이랬다 저랬다 달라진다면 신경망은 계속해서 학습을 해야하고, 시간에 따라 정확도도 왔다갔다 하게 될 것이다. 아마도 신경망 입장에선 죽을 노릇일텐데, 사람이 습득해야 하는 지식이나 사회현상은 시간에 따라 계속 변화하고 있고 위치에 따라 달라지니 여기에 적응하고 살아야 하는 인간에게는 정말 죽을 노릇이다. 근대화가 되기 전 까지만해도 농사를 짓던 사람들은 어제와 같은 방식으로 농사를 짓고 살고, 조상이 경험으로 터득한 지식만 가지고 사는데도 아무런 문제가 없었던 것을 생각하면 지금의 정보화/글로벌한 세상은 인간 그 스스로에게 너무 가혹한 사회가 아닌가 한다. 배우고 배워도 정말로 끝이 없다.