반응형

[33편]까지 머신러닝의 기초적인 내용에 대해 거의 모두 다루었으므로, 이번 포스팅부터는 요즘 핫하게 뜨고 있는 딥러닝과 관련된 내용을 차근차근 다루어 보도록 하겠습니다.


먼저, [2편]에서 다루었던 인공신경망인 단층 퍼셉트론을 다시 상기해봅니다. 너무 오래된 일이라 기억이 나지 않으면 아래 링크를 눌러 살포시 다시 보고 옵니다.


☞ [2편] 퍼셉트론 다시 보러 가기



퍼셉트론의 활성 함수를 개선하여 퍼셉트론을 발전시킨 인공신경망이 아달라인이라고 했습니다. 아달라인은 [6편]에서 다루었는데, 이 역시 기억이 가물가물하다면 아래 링크를 눌러 다시 복습하고 옵니다.


☞ [6편] 아달라인 다시 보러 가기



이제, 퍼셉트론과 아달라인에 대해 다시 감을 잡았다고 생각하고, 포스팅을 진행하도록 하겠습니다.



[2편]과 [6편]에서 다룬 퍼셉트론과 아달라인은 데이터의 입력층과 출력층만 있는 구조입니다. 이러한 구조를 갖는 퍼셉트론을 단층 퍼셉트론이라 부른다고 했습니다.




퍼셉트론에서 결과값을 내놓는 부분은 결국 활성 함수(activation function)인데, 단층 퍼셉트론에서는 이 활성 함수가 1개밖에 없는 구조이지요. 위 그림에서 출력층의 활성 함수를 a로 표시했습니다.


인공신경망인 단층 퍼셉트론은 그 한계가 있는데, 비선형적으로 분리되는 데이터에 대해서는 제대로 된 학습이 불가능하다는 것입니다. 예를 들면 단층 퍼셉트론으로 AND연산에 대해서는 학습이 가능하지만, XOR에 대해서는 학습이 불가능하다는 것이 증명되었습니다.


이를 극복하기 위한 방안으로 입력층과 출력층 사이에 하나 이상의 중간층을 두어 비선형적으로 분리되는 데이터에 대해서도 학습이 가능하도록 다층 퍼셉트론(줄여서 MLP)이 고안되었습니다. 아래 그림은 다층 퍼셉트론의 구조의 한 예를 보인 것입니다.



입력층과 출력층 사이에 존재하는 중간층을 숨어 있는 층이라 해서 은닉층이라 부릅니다. 입력층과 출력층 사이에 여러개의 은닉층이 있는 인공 신경망을 심층 신경망(deep neural network)이라 부르며, 심층 신경망을 학습하기 위해 고안된 특별한 알고리즘들을 딥러닝(deep learning)이라 부릅니다.


따라서 딥러닝을 제대로 이해하기 위해서는 심층 신경망의 가장 기초적인 다층 퍼셉트론에 대해 제대로 알고 있어야 하겠지요~

다층 퍼셉토론에서는 입력층에서 전달되는 값이 은닉층의 모든 노드로 전달되며 은닉층의 모든 노드의 출력값 역시 출력층의 모든 노드로 전달됩니다. 이런 형식으로 값이 전달되는 것을 순전파(feedforward)라 합니다. 입력층과 은닉층에 있는 한개의 노드만 볼 때, 하나의 단층 퍼셉트론으로 생각할 수 있습니다. 따라서 은닉층에 있는 각각의 노드는 퍼셉트론의 활성 함수라고 볼 수 있습니다. 은닉층에 있는 각 노드에 이름을 a1~am으로 이름을 붙여서 그림을 그려보면 아래와 같겠지요.




마찬가지로 은닉층과 츨력층에 있는 한개의 노드만 고려해보면 이 역시 하나의 단층 퍼셉트론이며 출력층의 각 노드에 A1~A3로 이름을 붙여서 그림을 그려보면 아래와 같습니다.




은닉층과 출력층의 노드에 이름 붙여진 a1~am, A1~A3를 소문자 a로 통일되게 표현하기 위해 위첨자와 아래첨자를 도입해 봅니다. 입력층, 은닉층, 출력층은 각각 1번째, 2번째, 3번째 층이므로 a의 위첨자에 층을 표시하도록 해봅니다. 또한 은닉층에도 입력층에서와 같이 바이어스 a0를 추가하여 다층 퍼셉트론을 표현하면 아래 그림과 같이 됩니다.




위 그림에서 제시된 다층 퍼셉트론은 입력층의 노드수가 n개, 은닉층의 노드수가 m개, 출력층의 노드수가 3개입니다. 이렇게 구성되는 다층 퍼셉트론을 n-m-3 다층 퍼셉트론이라 부릅니다.

단층 퍼셉트론과 마찬가지로 다층 퍼셉트론에서도 바이어스 x0, a0의 값은 보통 1로 두면 됩니다.


그러면 다층 퍼셉트론이 동작하는 원리에 대해 살펴봅니다.


우리는 단층 퍼셉트론이 동작하는 원리는 다 알고 있습니다. 단층 퍼셉트론은 활성 함수가 내놓는 결과값이 실제값과 오류가 최소가 되도록 입력층에서 전달되는 값들에 곱해지는 가중치의 값을 결정하는 것입니다.


다층 퍼셉트론의 동작 원리 역시 단층 퍼셉트론의 동작 원리와 크게 다를 것이 없습니다. 차이점은 단층 퍼셉트론은 활성 함수가 1개인 반면, 다층 퍼셉트론은 은닉층과 출력층에 존재하는 활성 함수가 여러개이고, 이에 따른 가중치도 여러개인 것이지요.


다층 퍼셉트론은 아래와 같이 동작합니다.


  1. 각 층에서의 가중치를 임의의 값(보통 0으로 설정함)으로 설정합니다. 각 층에서 바이어스 값은 1로 설정합니다.
  2.  하나의 트레이닝 데이터에 대해서 각 층에서의 순입력 함수값을 계산하고 최종적으로 활성 함수에 의한 출력값을 계산합니다.
  3. 출력층의 활성 함수에 의한 결과값과 실제값이 허용 오차 이내가 되도록 각층에서의 가중치를 업데이트합니다.
  4. 모든 트레이닝 데이터에 대해서 출력층의 활성 함수에 의한 결과값과 실제값이 허용 오차 이내가 되면 학습을 종료합니다.


그런데, 여기서 한가지 어려움이 있습니다. 단층 퍼셉트론에서는 은닉층이 존재하지 않고, 입력층과 출력층만 존재하기 때문에 출력층의 결과값을 우리가 확보한 실제값과 비교하여 오차가 최소가 되도록 가중치를 업데이트하고 결정하면 됩니다. 하지만 다층 퍼셉트론에서는 입력층과 출력층 사이에 은닉층이 존재하고, 은닉층의 출력값에 대한 기준값을 정의할 수 없습니다. 은닉층에서 어떤 값이 출력되어야 맞다 틀리다하는 기준이 없다는 것이지요.


이러한 문제점을 해결하기 위해 다층 퍼셉트론에서는 출력층에서 발생하는 오차값을 이용하여 은닉층으로 역전파(backpropagation)시켜 은닉층에서 발생하는 오차값에 따라 은닉층의 가중치를 업데이트하게 됩니다. 역전파에 대한 내용은 나중에 자세히 다루도록 하겠습니다.


다층 퍼셉트론의 동작 원리를 이해하기 위해 좀 더 구체적으로 들어가 보겠습니다.


l층의 k번째 노드와 l+1층의 j번째 노드를 연결하는 가중치 w를 다음과 같이 정의해봅니다.


 

 


자 다시, 위에서 제시한 n-m-3 다층 퍼셉트론에서 은닉층에 있는 j번째 노드를 생각해봅니다.



은닉층의 j번째 노드에 입력되는 순입력 함수값은 아래와 같습니다.



순입력 함수값은 해당 노드의 활성 함수에 입력되는 값입니다. 우리가 여태까지 배웠던 활성 함수를 되새겨 보면, 단순 퍼셉트론에서는 활성 함수로 계단 함수(step function)를, 아달라인에서는 1차 항등 함수를, 로지스틱 회귀에서는 시그모이드 함수를 적용했습니다.

다층 퍼셉트론의 활성 함수로 시그모이드 함수를 적용하게 되면 분석이 복잡해지긴 하지만 시그모이드 함수의 결과가 미분가능한 꼴이어서 역전파 알고리즘을 적용할 수 있게 되고, 나아가 이미지 분류 등과 같은 복잡한 비선형 문제를 풀 수 있는 잠재력을 지니게 됩니다.


여기서 잠깐~! 퍼셉트론의 활성 함수는 시그모이드가 아닌데.. 시그모이드를 활성 함수로 적용하게 되면 이는 로지스틱 회귀를 겹겹히 쌓아 놓은 구조가 되므로, 엄밀히 말하면 다층 퍼셉트론이라는 말은 좀 어폐가 있어 보이네요~ 아무튼 그냥 다층 퍼셉트론이라 부르기로 합니다.


시그모이드 함수에 대해서는 [12편]에서 다루었습니다. 아래 링크를 눌러서 살포시 학습하고 오시죠~


☞ 로지스틱 회귀 다시 보기



시그모이드 함수를 적용한 활성 함수를 φ라 하면 




따라서 은닉층의 j번째 노드의 활성 함수는 다음과 같이 표현할 수 있습니다.




이와 같이 각 층에서 순입력 함수값을 계산하고, 시그모이드 활성 함수에 의해 출력값을 계산하여, 최종적으로 출력층에서 활성 함수에 의한 결과값이 나오면 실제값과 오차를 계산한 후 가중치를 업데이트하는 행위를 반복하여 학습을 수행합니다.


학습의 결과가 허용된 오차 이내가 되면 각 층의 신경망에 곱해지는 가중치가 결정되는 것이고, 최종적으로 학습을 종료하게 됩니다. 이런 과정이 결국 딥러닝의 핵심 개념이라 보면 됩니다.


다층 퍼셉트론은 순전파(feedforward) 인공 신경망의 전형적인 예입니다. 순전파라는 말은 루프를 돌지 않으면서 각 층의 출력값이 그 다음층의 입력값이 된다는 의미입니다. 나중에 다룰 또 다른 인공 신경망인 RNN(Recurrent Neural Network)은 순전파와는 대비되는 개념이 적용됩니다.


단층 퍼셉트론과는 달리 다층 퍼셉트론의 출력층의 출력 노드는 여러개가 될 수 있습니다. 만약 3개 품종을 지닌 아이리스를 분류하는 다층 퍼셉트론은 출력층의 출력노드를 3개로 구성하고 그 결과값에 따라 품종 분류는 아래와 그림과 같은 형식으로 하면 될 것입니다.



출력층을 3개의 노드로 구성하고, 아이리스의 3개 품종 setosa, versicolor, verginica에 대한 실제값을 (1, 0, 0), (0, 1, 0), (0, 0, 1)로 정의합니다. 출력층의 1번째 노드 a1(3), 2번째 노드 a2(3), 3번째 노드 a3(3)의 값이 (1, 0, 0) 스러우면 아이리스 품종을 setosa로, (0, 1, 0) 스러우면 versicolor로 분류하는 식입니다.

활성 함수가 시그모이드 함수이므로 실제 출력층에서의 출력값은 0~1사이의 값을 갖게 됩니다. 따라서 출력값은 (0.9, 0.01, 0.19)과 같은 꼴로 될 것이며, 이는 (1, 0, 0) 스러우므로 setosa로 분류하면 됩니다. 

만약 0~9까지 숫자를 인식하는 다층 퍼셉트론이라면 출력층의 노드 개수를 10개로 하면 될 것입니다. 


이정도로 다층 퍼셉트론에 대한 소개는 마무리 하도록 하겠습니다.



다음 포스팅에서는 심층 인공신경망 학습의 핵심인 역전파(backpropagation)에 대한 내용을 살펴보도록 하겠습니다. 


반응형

+ Recent posts