딥러닝이란 무엇인가? (퍼셉트론, 뉴럴 네트워크)
이전 글에서는 딥러닝의 기본 개념에 대하여 알아보았다. 사람의 신경망에서 사용되는 정보 처리의 과정을 모방하여 기계가 학습을 빠르게 할 수 있도록 구현한 기술을 딥러닝이라고 정의하였다. 이러한 딥러닝이 어떻게 구현되는지 조금 더 자세히 살펴 보겠다. 딥러닝을 보다 보면 가장 먼저 퍼셉트론(Perceptron)에 대해서 듣게 될 것이다. 퍼셉트론(Perceptron)이란 인식(Perception)과 뉴런(Neuron)을 합한 용어이다. 인공신경망의 가장 초기 알고리즘으로 입력층, 중간층, 출력층으로 나누어진 학습 알고리즘의 하나이다. 각 입력 정보에 대해서 가중치 팩터(w)가 곱해지고 바이어스 팩터(b)를 이용하여 더하는 과정을 통해서 원하는 답을 출력으로 도출할 수 있도록 구현된 알고리즘이 바로 퍼셉트론이다. 이러한 퍼셉트론 알고리즘을 통해서 뉴런이 입력을 받고 처리하는 과정을 거쳐 출력 신호를 보내는 학습 과정이 정리되었고, 컴퓨터에서도 이를 유사하게 구현해낼 수가 있는 초기 인공지능의 가능성이 열리게 되었다. 퍼셉트론은 단층 퍼셉트론에서 다층 퍼셉트론으로 발전하게 되었다. 입력층에서 입력을 받고 가중치를 고려한 후 바로 출력을 내보내는 것을 단층 퍼셉트론이라고 하고 위의 그림처럼 입력층에서 입력을 받은 후 중간층(Hidden Layer)을 거친 후 출력을 표출하는 것을 다층 퍼셉트론이라고 한다. 이러한 다층 퍼셉트론을 인공신경망(Artificial Neural Network)이라고도 부를 수 있다. 단층 퍼셉트론의 경우에는 XOR의 표현이 힘들다는 단점이 있어서 초기에 한계를 맞이하고 다층 퍼셉트론으로 넘어가게 되었다. 위의 그림에서 다층 퍼셉트론이 어떻게 동작하는지 간단히 살펴보자. 일단 입력층(Input Layer)에서 Xi 입력을 받게 된다. 이 입력에 대응하는 값이 출력층(Out Layer)에서 Yi로 정확히 출력이 되도록 알고리즘이 구현되어야 한다. 예를 들어서 음성인식의 경우 "자동차"라는 단어가 입력되었다고 하면 입력되는 음성의 크기, 빠르기, 억양 등등에 상관없이 출력에서는 "자동차"로 정확히 출력 되어야 한다. 이렇게 여러가지 변수(사람마다 다른 음성의 크기, 빠르기, 억양 등)들을 고려하여 입력에 대응되는 정확한 출력을 얻는 과정이 가중치 팩터(Wi)와 바이어스(b)를 통해서 처리되는 중간층(Hidden Layer) 과정이다. [f = Xi*Wi + b]의 수식을 통해서 이를 정리할 수 있다. 여기서 f 값은 각 입력에 대해서 가중치 팩터(Wi)와 바이어스(b)가 고려되어 출력되는 값이고, 인공 신경망에서는 이렇게 단계마다 f 값이 계산되고 여러 단계를 거쳐서 최종 출력되는 값이 출력층에서 나오는 값이 되는 것이다. 이러한 인공신경망은 각 단계의 가중치 팩터(Wi)와 바이어스(b)가 제대로 결정이 되야 정확한 알고리즘이 되는 것이다. 그렇다면 가중치 팩터 (Wi)와 바이어스(b)는 어떻게 계산해야 할까. 이 값이 자동으로 결정되는 것을 학습(Learning)이라고 부른다. 이는 역전파(Back Propagation)라고 불리는 방식으로 가능하게 되었다. 순전파(Propagation)는 입력층에서 중간층을 거쳐서 출력층으로 가는 과정이라고 하면, 역전파는 반대로 출력층에서 중간층을 거쳐 입력층으로 가는 과정이다. 순전파 과정을 통해 출력된 값이 원래 예상된 값과의 차이가 발생하면 이를 오차로 본다. 이 오차를 통해 역으로 가중치 팩터와 바이어스를 수정해 나갈 수 있다. 이를 역전파 방식을 통해 학습하는 것이라고 부른다. 학습된 가중치 팩터와 바이어스를 이용하면 입력 값에 대응되는 정확한 출력이 표출된다. 그러나 이러한 역전파 방식도 문제가 있다. 초기 값이 어떤 값이 나오는지에 따라 학습 과정이 제대로 이루어지지 않는 정확도 문제가 있었고, 활성화 함수를 Sigmoid 함수나 Step 함수를 사용할 때 중간층(Hidden Layer)이 많아지면 학습 최적화가 이루어지지 않는 문제들이 있었다. 꽤 오랜기간 해결되지 못하다가 이러한 문제들이 해결된 인공신경망 기법이 발표되었는데 이것이 바로 딥러닝(Deep Learning)이다. 딥러닝에서는 바로 인접한 두개의 층(Layer)에서만 계산해보면서 가중치 팩터와 바이어스를 학습하는 방식으로 초기 값 문제를 해결하였다. 즉, 초기에 인접한 두개의 층에서만 가중치 팩터와 바이어스를 학습하고 결과가 도출되면, 다음 두개의 층으로 넘어가고 다시 가중치 팩터와 바이어스가 학습되면, 그 다음 두개의 층으로 넘어가서 가중치 팩터와 바이어스를 학습하는 과정을 반복 확장하여 최종적으로 출력층까지 도달하는 방식을 이용하였다. 이를 통해 초기에 전혀 엉뚱한 값이 설정되어 최종 출력이 정확하게 출력되지 않았던 문제를 해결하였다. 두번째로는 중간층(Hidden Layer)이 깊어질 경우 학습이 되지 않는 것은 ReLU(Rectified Linear Unit)이라는 함수를 이용하여 해결하였다. 기존에 사용하는 Sigmoid 함수나 Step 함수의 경우 0에서 1사이의 값만 나오게 되므로 중간층이 깊어져서 Chain rule을 통해 미분을 계속하게 되면 0에 가까운 값이 나오게 되어 정확한 학습을 할 수 없었다. 하지만 ReLU 함수는 0보다 크고 상한 제한은 없는 함수로 출력에 제한이 사라지게 되어 중간층이 깊어질 때 오학습률을 줄일 수 있게 되었다. 딥러닝에 사용된 이런 기법은 현재도 계속하여 발전하고 있고 학습 정확도가 계속 높아지고 있다. 초기 인공신경망인 퍼셉트론과 이후 발전된 인공신경망(뉴럴 네트워크) 그리고 현재 알파고에 적용된 딥러닝에 이르기까지 간단히 살펴보았다. 딥러닝은 현재 다양한 분야에서 사용되고 있고 그 범위가 점차 확대되고 있고 앞으로 그 중요도가 더욱 높아질 것이다.