본문 바로가기

ML & AI Theory

인공신경망관련 용어정리 : 퍼셉트론, MLP, Feed Forward, Back Propagation, 활성 함수, 시그모이드 함수, Gradient Descent Method

반응형

퍼셉트론

퍼셉트론은 1957년에 개발된 최초의 인공지능 모형입니다. Feed-Forward Network모형의 가장 간단한 형태이며 선형 분류(Linear Classfier)모형의 형태를 띠고 있습니다. 

 

Input과 Weight가 선형 결합의 형태를 띠는 것을 알 수 있습니다. 이 선형 결합의 값에 특정 임곗값의 초과 여부를 판단하는 함수를 적용합니다. 이 출력 값이 0보다 크면 1, 작으면 -1로 결괏값을 내보내 분류하는 모형을 '퍼셉트론'이라 합니다.

 

여기서 임곗값의 초과 여부를 판단하는 함수를 '활성화 함수(Activation Function)'라 합니다. 가장 기본적인 Activation함수는 Step Function으로 Input값이 0이상이면 1, 이상이 아니면 0을 출력하도록 하는 함수입니다.

 

퍼셉트론은 처음에 이 Weight을 랜덤하게 설정한 후 모델의 에러와 Weight가 업데이트됩니다. 모든 데이터를 올바르게 분류할 때까지 이 과정을 거칩니다.

 

그런데 이 퍼셉트론은 선형 분류 모형의 형태를 띠고 있어 선형 문제밖에 풀지 못합니다. 비선형 분류 문제는 풀지 못한다는 단점이 있습니다. 일정 에러를 허용하고 선을 그을 수밖에 없는 것이죠.

 


MLP

퍼셉트론이 지니고 있는 한계점을 극복하기 위해 여러 Layer를 쌓아올린 MLP(Multi Layer Perception)가 등장하게 됐습니다. 퍼셉트론은 Input과 Output Layer만으로 구성돼 있지만, MLP는 중간에 Hidden Layer를 넣은 형태입니다.

 

MLP는 여러 개의 퍼셉트론의 조합으로 볼 수 있고 이들의 조합이 Output Layer로 연결됩니다. 즉, MLP는 여러 개의 퍼셉트론 조합과 이것들의 재조합으로 복잡한 비선형적인 모형을 만들어내는 것이라 할 수 있습니다. 딥러닝의 기본 구조가 되는 것이 신경망이라면 기본적으로 MLP를 의미합니다. MLP의 Hidden Layer를 쌓으면 Layer가 깊어지기(Deep)때문에 딥러닝의 기본적인 모델이 됩니다.

 

Input 1개, Hidden 1개, Output 1개, 즉 총 3개의 Layer로 연결돼 있는 MLP이며 각 원은 '노드(Node)'라고 부릅니다. Input Node의 수는 Input Data의 변수의 수가 되며 Hidden Layer와 Hidden Node의 수는 사용자가 지정해야 할 하이퍼파라미터입니다. Output Layer는 최종적으로 모델의 결괏값을 의미하기 때문에 Output Node의 수는 1,0부터 9까지의 숫자 분류를 하고자 하는 경우 Output Node의 수는 10이 됩니다.

 


Feed Forward

신경망은 Input에서 Weight와 Hidden을 거쳐 Output을 내보냅니다. 이 과정을 Feed Forward라 합니다.

 


Back Propagation

Feed Forward를 이용해 Input에서 Output까지 계산합니다. 여기서 Output은 우리가 얻고자 하는 예측값을 의미합니다. 그리고 모델의 예측값과 실제값의 차이(error)를 계산합니다.

 

이 에러를 바탕으로 신경망의 Weight를 업데이트합니다.  뒤의 Weight부터 업데이트하고 이후에 앞의 Weight를 업데이트합니다. Feed Forward를 이용해 계산된 에러를 바탕으로 뒤의 Weight부터 업데이트한다고 해서 Back Propagation이라 합니다.

 

즉, 에러를 뒤에서부터 전파하겠다는 의미인 것이죠. Feed ForwardBack Propagation을 계속 반복하면서 Weight를 업데이트하며 점차 신경망의 Output이 실제 값에 가까워지면서 모델의 학습이 이뤄집니다. 여기서 데이터를 여러 번 Feed Forward와 Back Propagation을 반복하면서 학습하는데, 이 반복하는 횟수를 'Epoch'라고 합니다. 100Epoch라고 하면 전체 데이터셋에 대해 100번의 Feed Forward와 Back Propagation을 했다고 이해하면 됩니다.

 


활성 함수

활성 함수는 어떤 신호를 입력받아 이를 적절히 처리해 출력해주는 함수를 의미합니다. 신경망에서는 기본적으로 비선형 활성 함수를 사용합니다.

 


시그모이드 함수

비선형 활성 함수 중 가장 기본적으로 사용하는 함수는 '시그모이드 함수'입니다.  입력 값이 0이하이면 0.5이하의 값을 출력하고 0이상이면 0.5이상의 값을 출력합니다. 다시 말해, 입력 값에 대해 0부터 1사이로 Scaling해주는 개념이라 보면 될 것 같습니다. 이 비선형 활성 함수를 사용하는 이유는 우리가 풀고자 하는 것이 비선형적인 복잡한 문제이기 때문입니다. Input과 Weight의 선형 결합이 활성 함수로 들어가게 됩니다. 즉, 선형 결합을 비선형화한 개념이라 볼 수 있습니다. 기존에는 신경망 모형이 직선밖에 긋지 못했다면 비선형화시켜 여러 곡선의 조합으로 복잡한 문제를 풀 수 있게 된 것이죠. 그러나 시그모이드 함수는 Back Propagation과정 중 Gradient Vanishing현상이 발생할 수 있으며, 이는 Hidden Layer가 쌓일수록, 즉 모델이 깊어질수록 심해집니다.

 


Gradient Descent Method

'기울기 경사 하강법'입니다.

Loss Function에 대해 먼저 알아봐야 하는데요. 가장 간단한 선형 회귀 모형은 이 Loss Function을 MSE로 설정해 MSE가 감소하도록 회귀계수를 추정합니다. 그렇다면 이 MSE는 회귀계수에 대한 함수로 볼 수 있습니다. MSE는 2차 함수의 형태이므로 이 MSE가 최소가 되는 지점을 찾을 수 있습니다. MSE는 회귀계수에 대한 함수이므로 회귀계수로 미분해 기울기가 0이 되는 지점을 찾으면 그때의 회귀계수는 MSE가 최소로 만드는 회귀 계수입니다. 그런데 회귀 모델의 경우에는 MSE가 최소가 되는 지점을 한 번에 찾을 있습니다. 직선으로 이뤄진 비교적 간단한 모델이기 때문에 MSE를 회귀계수로 미분해 기울기가 0이 되는 지점을 한 번에 찾을 수 있는 것입니다.

 

그러나 신경망 모형은 Hidden Layer가 깊어질수록, Hidden Node가 많아질수록 더욱 복잡해집니다. 그렇기 때문에 신경망 모형에서 MSE를 신경망 모형의 Weight로 미분해 기울기가 0이 지점을 찾을 수 없습니다. 그래서 MSE를 신경망 모형의 Weight로 미분해 기울기를 감소시켜 최소가 되는 지점을 찾아갑니다. 다시 말해, 한 번에 기울기가 최소가 되는 지점을 찾기 어렵기 때문에 산의 정상에서 차근차근 내려오면서 길을 찾듯이 기울기를 조금씩 구해 MSE가 낮아지는 지점을 찾아갑니다.

 

MSE의 Z축, X축, Y축이 Weight로 이뤄진 것을 알 수 있습니다. 즉, MSE값이 Weight에 따라 달라지고 초기 지점에서 MSE가 최소가 되는 지점을 기울기를 구해 찾아갑니다. 물론, 초기 Weight를 어떻게 설정 하느냐에 따라 MSE가 최소가 되는 지점을 찾아가는 시간이 달라질 수 있습니다. 기본적으로 정규분포또는 균등분포에서 난수를 추출해 초기 Weight를 설정하지만, 더 좋은 초기 Weight를 설정하기 위한 방법 또한 존재합니다.

 

신경망의 학습은 Feed Forward와 Back Propagation을 번갈아가며 진행되며 학습에 따라 점차 학습 데이터에 대한 MSE가 줄어듭니다. 여기서 우리가 갖고 있는 모든 데이터를 한 번에 Feed Forward하지는 않습니다. 너무 많은 연산을 필요로 하는 컴퓨팅 문제가 발생하기 때문에 매우 비효율적인 학습 과정을 거치게 됩니다. 

 

그래서 우리가 갖고 있는 데이터를 쪼개 Feed Forward합니다. 우리가 갖고 있는 전체 데이터가 1,000개라 하면 100개씩 쪼개 Feed Forward와 Back Propagation을 10번 반복합니다. 이 한 과정을 'Epoch'이라 하고 여기서 100개의 데이터를 'Mini-Batch'라 하며 100의 크기에 대해서는 'Batch Size'라 합니다.  이렇게 데이터 쪼개 Gradient Descent Method하는 방법을 'Srochastic Gradient Descent(SGD)'라고 부르며 이렇게 Gradient Descent해주는 것을 통틀어 'Optimizer'라 합니다. 

 

일반적으로 구해지는 Gradient의 크기는 매우 큽니다. 따라서 이 Gradient의 크기를 조절해줄 필요가 있는데, 이 조절해주는 상수를 Learning Rate라 부르고 Learning Rate까지 넣었을 때 Weight가 업데이트가 됩니다.

 

Learning Rate를 지정해주지 않으면 Gradient를 구했을 때 Loss가 제대로 감소되는 방향을 구하지 못할 확률이 높고 아예 학습되지 않는 경우도 많습니다. 그렇기 때문에 Learning Rate는 적절히 지정해 줘야 하는데, 일반적으로 0.01아래로 작은 값을 주면서 여러 번 학습을 시도해가며 조졸합니다.

 

 

 

반응형