Feed Forward (FF)

태그
Basic Perceptron
포스팅 날짜
2021/05/09
본 세션에서는, perceptron 을 활용한 가장 간단한 ANN 인 Feed Forward(FF) 에 대해서 알아보려고 합니다. 이 세션은 이전 세션을 읽고 나면 이해가 훨씬 잘 될 것입니다.
가장 먼저 보이는 구조의 변화는 perceptron 에서 초록색 원이 추가된 점일 것입니다. 이 초록색 원은 입력과 출력에서 관찰되지 않는다는 점에서 Hidden Cell(은닉층) 이라고 불립니다.
그런데 갑자기 왜 Hidden Cell 을 추가하게 된 것일까요?
그 이유는 이전 세션에서 언급했던 AND Gate 에서부터 이어집니다. AND Gate 를 구현한 것에서 더 나아가 XOR Gate 를 학습을 통해 구현하려고 한 것입니다.
XOR Gate 는 흔히 입력의 개수 중 True(참, 1) 인 것이 홀수 개 있으면 True(참, 1) 을 반환하는 논리 연산입니다. 입력이 두 개일 경우에는 특별히 서로 다른 두 논리가 들어왔을 때만 True(참, 1) 을 산출하고 같은 논리가 들어왔을 때는 False(거짓, 0) 을 산출하는 것으로도 해석할 수 있습니다. 도표로 표현하면 다음과 같습니다.
이전 세션에서 보여드린 AND Gate 의 경우에는 특정 직선으로 원하는 결과를 양분하여 한 쪽 영역을 True(참, 1) 로, 다른 쪽 영역을 False(거짓, 0) 으로 구분지을 수 있었습니다. 그리고, 그러한 특성을 이용해서 직선을 구성하는 parameter 를 학습하는 형태로 모델을 설계한 것이기도 합니다.
하지만, XOR Gate 는 AND Gate 와는 다르게 어떤 특정한 직선으로 원하는 결과를 양분할 수 없습니다. 정확히 말하면 양분할 수 있는 직선을 찾을 수 없습니다. 위의 그림처럼 어떠한 빨간색 직선을 그려도, 양분된 영역에 같은 색깔의 두 점이 각각씩 포함되게 그릴 수가 없습니다. 때문에, 직선이 아닌 어떤 파란색 선과 같은 선으로 이 영역을 양분해야 겠다는 생각이 들었고, 이를 위해서 모델은 조금 더 복잡한 함수를 구현해야 했으며 Hidden Cell 을 추가하게 된 것입니다.
Hidden Cell 을 추가한 것까지는 그 목적성을 알 수 있었습니다. 그렇다면 실제로 위의 그림처럼 Hidden Cell 을 추가하면 XOR 을 구현할 수 있다는 보장이 있는 걸까요?
결론부터 말씀드리자면 있습니다. 생각보다 간단하게 유도할 수 있는데요, 입력 두 개를 각각 XX, YY 라고 한다면 두 입력을 넣었을 때 XOR Gate 의 결과는 XY+XYX'Y+XY' 입니다.
드 모르간의 법칙을 사용하면 바로 이게 곧 (X+Y)(X+Y)(X'+Y')(X+Y) 임을 아실 수 있는데, 이게 곧 XXYY 를 각각 NAND Gate 와 OR Gate 에 통과시킨 후에 그 결과 둘을 AND Gate 에 통과시킨 것입니다. 결과적으로 NAND Gate, OR Gate, 그리고 AND Gate 만 있다면 XOR Gate 를 만들 수 있다는 것입니다.
그런데, AND Gate 처럼 NAND Gate 와 OR Gate 는 perceptron 으로 학습할 수 있습니다. 이는 NAND Gate 와 OR Gate 가 최종적으로 원하는 결과가 앞서 설명했던 2차원 좌표평면에서 직선으로 양분할 수 있기 때문입니다. 즉, 필요한 세 Gate 가 모두 perceptron 으로 학습할 수 있는 것입니다.
설명의 편의성을 위해 다시 한 번 Feed Forward 의 구조를 가져왔습니다. 눈치채셨겠지만, 위의 초록색 원을 NAND Gate 산출 결과로, 아래의 초록색 원을 OR Gate 산출 결과로, 그리고 마지막 주황색 원을 NAND Gate 와 OR Gate 를 통과한 값을 AND Gate 에 넣은 뒤에 나온 산출 결과로 생각해본다면, 위 구조가 XOR 를 어떻게 구현할 수 있는지에 대해서 이해하실 수 있으실 것입니다.
그럼 세부적으로 학습이 될 model parameter 들은 어떻게 구성이 되는 것일까요?
이 부분은 굳이 설명을 안드려도 될 정도로 이전과 동일합니다. 그리고, 이 세션을 마지막으로 앞으로의 세션에서는 이 부분을 생략하고자 합니다. Parameter 들의 적용이 모두 이렇게 반영된다라고 생각하시면 좋습니다.
먼저, 이전 세션에서도 언급했듯이 선 하나하나가 학습이 될 parameter 입니다. 하지만, 이전과는 달리 선의 영역이 두개가 있습니다. Input Cell 과 Hidden Cell 사이, 그리고 Hidden Cell 과 Output Cell 사이가 그것입니다. 이들 각각을 layer 라고 부르며 서로 다른 층이라고 보시면 됩니다. 각각의 layer 는 parameter 들로 구성되어 있는 것입니다.
각각의 초록색 원으로 들어가는 선을 먼저 살펴봅시다. 먼저 위쪽의 초록색 원으로 들어가는 선을 위에서부터 w11w_{11}, w12w_{12} 라고 합시다. Subscript 된 숫자 앞에 공통적으로 1 이 붙은 것은 해당 weight 가 layer 1 에 속한 weight 임을 명시하는 것입니다. 다음으로 아래쪽의 초록색 원으로 들어가는 선을 위에서부터 w13w_{13}, w14w_{14} 라고 합시다. 이렇게 구성하게 되면 다음과 같이 수식을 설계할 수 있게 됩니다.
x1=S(w11x1+w12x2+b11)x2=S(w13x1+w14x2+b12)x_1'=S(w_{11}x_1+w_{12}x_2 + b_{11})\\ x_2'=S(w_{13}x_1+w_{14}x_2 + b_{12})
어차피 같은 activation function 이 적용될 것이라면, 아래와 같이 간략하게 표현할 수 있습니다.
(x1x2)=S1((w11 w12w13 w14)(x1x2)+(b11b12))\begin{pmatrix} x_1' \\ x_2' \end{pmatrix}=S_1( \begin{pmatrix} w_{11} \ w_{12} \\ w_{13} \ w_{14} \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \end{pmatrix}+ \begin{pmatrix} b_{11} \\ b_{12} \end{pmatrix} )
이를 더 간단히 표현하면,
x=S(W1x+b1)x'=S(W_1x+b_1)
위의 식 정도로 간단하게 나타낼 수 있습니다.
다음으로 Output Cell 로 들어가는 선을 위에서부터 w21w_{21}, w22w_{22} 라고 합시다. 그러면 이어서 모델이 의미하고 있는 수식은 다음과 같습니다.
H(x)=S2((w21 w22)(x1x2)+b21)H(x')=S_2( \begin{pmatrix} w_{21} \ w_{22} \end{pmatrix} \begin{pmatrix} x_1' \\ x_2' \end{pmatrix}+b_{21} )
그리고 이는 곧
H(x)=S2(W2x+b2)H(x')=S_2( W_2x'+b_2 )
위의 식처럼 간략하게 적을 수 있습니다.
이를 연이어서 합치게 된다면,
H(x)=S2(W2(S(W1x+b1))+b2)H(x')=S_2( W_2(S(W_1x+b_1))+b_2 )
로 볼 수 있습니다. 무엇인가 perceptron 이 중첩된 것처럼 layer 가 중첩되었을 때 최종적인 결과도 중첩된 형태로 나오는 것을 느끼실 수 있으실 것입니다.
마지막으로, 과연 그러면 Feed Forward 에서는 어떻게 cost function 을 설정해야 될까요?
답부터 말씀드리자면, 이전 세션에서 설정한 것과 동일한 BCE loss 를 사용하면 됩니다.
그 이유를 간단히 설명드리자면, 마지막 AND Gate 에서 저희가 원했던 것은 똑같이 참으로 분류하고 싶은 입력 케이스들에 대해서는 W2x+b2W_2x'+b_2 가 0 보다 크도록, 거짓으로 분류하고 싶은 입력 케이스들에 대해서는 W2x+b2W_2x'+b_2 가 0 보다 작도록 하고 싶은 것입니다. BCE loss 는 그 자체만으로 이 역할을 동일하게 해줄 수 있는 것입니다.
다만 다른 점이 있다면, BCE loss 를 사용해서 참으로 분류하고 싶은 케이스와 거짓으로 분류하고 싶은 케이스가 AND Gate 학습 때와는 다르다는 점입니다. XOR Gate 의 학습 시에는 서로 다른 두 논리가 들어올 경우들을 참으로, 서로 같은 두 논리가 들어올 경우들을 거짓으로 분류하고 싶었던 것이었습니다. 이에 따라 각 입력 케이스 별로의 loss 를 구한 뒤 gradient descent 로 parameter 인 w11,w12,w13,w14,w21,w22w_{11}, w_{12}, w_{13}, w_{14}, w_{21}, w_{22} 를 update 해주는 것 자체는 이전과 동일합니다.
추가로, 마치기 전에 한 가지를 짚고 넘어가려고 합니다.
혹시 이 네트워크의 이름이 왜 Feed Forward(FF) 인지에 대해 아시나요? 이는 이후에 나올 Recurrent Nerual Network 와 비교해서 지어진 이름입니다. Recurrent Neural Network 는 한 Cell 에서 나온 weight 가 output 방향이 아닌 방향으로도 전파되지만, Feed Forward(FF) 는 무조건 forward propagation 연산이 좌측에서 우측으로, forward 로만 일어나기 때문입니다. 이런 배경으로 입력을 정방향으로만 이동시킨다는 의미에서 Feed Forward(FF) 라는 이름이 붙게 되었다고 합니다.
이렇게 이번 세션에서는 perceptron 을 활용한 가장 간단한 ANN 인 Feed Forward(FF) 의 구조와 예시에 대해서 알아보는 시간을 가졌습니다. 이번 세션을 통해서 Feed Forward 가 perceptron 으로는 모델링 할 수 없었던 복잡한 목적을 가지기 위해서 고안된 네트워크이며, Hidden Cell 이 존재할 때 모델이 의미하는 연산이 어떻게 변화하는지에 대해서 알아두시면 좋을 것 같습니다!!