안녕하세요. 이번에느 FCN(Fully Connected Network)에 대해서 리뷰를 해보겠습니다. Fully Connected Network란 이름에서럼 모두 연결된 의 의미를 가지고있는데, 이걸 딥러닝 관점에서 해석해보면 이웃 레이어의 모든 Node정보들이 서로 연결되어 있음을 의미합니다.
위의 그림에서 처럼 이웃 노드끼리 서로 예외없이 전부 연결되어 연산이 진행되는것을 의미합니다. 물론 위의 그림에서 weight는 표현되어 있고 bias는 없지만 bias는 각 레이어의 노드마다 더해진다고 보시면 됩니다.
혹시 선형대수쪽(꼭 선형대수가 아니더라도 행렬의 곱정도 배우셨으면) 공부하셨다면 제가 그린 허접(?)한 그림처럼 생각하시면 편할거에요!
이 메트릭스 연산은 위의 노드연산을 행렬로 표현한 겁니다 (물론 여기서도 bias는 생략되어있습니다.)
방향은 서로 반대로 보셔야합니다.
우선 위의 노드그림은 5 -> 6 -> 8 -> 2 의 순으로 연산이 진행됩니다.
이를 행렬의 입장에서보면 (파란색 그림기준 우측부터 보시면) 5개의 인풋이 있고 (5x1) 모양의 행렬과 (6x5)모양의 행렬이 연산되는게 5->6으로 변하는 부분입니다.
그래서 (6x5) x (5x1) 연산이 되어 곱이 가능해지고 그다음에 6개의 값이 나올수 있게됩니다.
마찬가지로 (6x1) 의 노드와 (8x6) 행렬곱 즉, (8x6) x (6x1) 연산이 되어 8개의 노드가 나오는 것입니다.
이것을 쭉쓰면 5 -> 6 -> 8 -> 2 연산은 다음과같이 표현될수 있습니다.
(2x8)x(8x6)x(6x5)x(5x1)
<<<<<<<<<<<<<<<<<<<<<<<<<
여기서는 이러한 진행방향입니다.
물론여기서 bias까지 포함된다면 matrix multiply 이후에 해당 노드의 수만금의 bias를 더해주면 됩니다.
이러한 Fully connected network는 회귀, 분류모델에서 많이 쓰이고 가장 쉽게 접할수 있는 레이어입니다.
FCN은 우리가 이해하기 쉽지만 만능은 아닙니다.
여러 단점들이 존재하는데 첫번째로는 그 파라미터수가 굉장히 많아진다는 것입니다. 예를들어 MNIST같은 데이터셋의 경우에는 28X28 = 784개로 feature가 굉장히 많습니다. 이러한경우에 FCN 네트워크를 사용하게될경우 파라미터수가 기하 급수적으로 늘어나는것을 볼수 있습니다. 그러면 훈련또한 느려지고 속도도 느려지게되며 그렇다고 최선의 결과가 나오는것도 아닙니다.
두번째 단점은, FCN은 공간적인 특징을 무시하게 된다는 것입니다. 이미지에서 픽셀은 서로 가까울수록 그 연관성이 커집니다. 예를들어 좌측상단의 픽셀은 그 주변부와 깊은 관련이 있고 거기서 멀어질수록 관련이 떨이질수 있습니다.
예를들어 빨간색 박스의 107값을 가지고있는 필셀은 그 주변부인 주황색 픽셀들과 높은연관이 있지 좌측하단의 0과는 깊은 관련이 없습니다. 그렇기 때문에 공간적인 위치 정보가 중요한데 FCN네트워크는 이러한 공간적 정보를 무시하게 되는것이죠.
그럼에도 불구하고 FCN은 꼭 필요한 부분이 있습니다. CNN같은 레이어로 이미지의 특징을 뽑아내고나서 이미지의 좌표나, 분류, 어떤 회귀작업이 필요할때 최종단에서 주로 사용되는데, 이는 윗단 레이어에서 추출한 feature들로 결국 특정 숫자를 뽑아내야하기 때문입니다. 그래서 주로 모델의 뒷단에 연결되며 우리가 원하는 결과를 최종적으로 만들어줄때 사용됩니다.
위의 이미지에서는 우측에 위치한 Flat한 부분이 FCN입니다.
Keras Callbacks (Model_CheckPoint,Early_Stopping,ReduceLROnPlateau) (0) | 2022.01.01 |
---|---|
CIFAR_10 (0) | 2021.12.19 |
Convolution Neural Network(CNN) (0) | 2021.12.03 |
Keras MNIST 예제코드 (0) | 2021.11.20 |
댓글 영역