인공지능/생각 끄적

1D CNN 은 Fully connected layer 일까 ?

고등어찌짐 2022. 4. 7. 12:01


  작년에 했던 자연어 프로젝트 중 1D CNN 을 사용했던 경험이 있다. 해당 프로젝트를 발표하는 자리에서, 이런 질문을 받은 적이 있다. "1D CNN 은 결국 fully connected layer 아닌가요?" 자연어 처리 논문들에서 1D CNN 을 활용한 방법이 많았고, 프로젝트 결과도 나쁘지 않았기에 1D CNN 이 fully connected layer인가? 라는 의문을 이전에는 전혀 가지지 못했다. 그래서 1D CNN 이 정말 fully connected layer 인지 알아보기로 했다. 먼저, Fully connected layer 와 Convolution layer 는 무엇이 다를까.


 FCNN ( Fully Connected Neural Nets ) 란 ?

 FCNN 이란 말 그대로 FC ( Fully connected layer ) 들로 구성된 뉴럴넷이라고 할 수 있다. 그렇다면, FC ( Fully connected layer ) 는 무엇일까 ?  FC 는 다음 수식처럼, 가중치 벡터를 입력 벡터에 곱하고, bias w 를 더하는 linear 계산을 한 후 그 결과값에 non-linear 한 f 함수를 적용하게 된다. 

FC 수식

이 수식을 그림으로 표현하면 다음과 같다. 

 

FC 동작방식

output 벡터의 원소 1개를 계산하기 위해, 모든 input 과 wiehgt 벡터 한 줄을 dot product 하고, bias 를 더한 후 f 함수를 적용하는 방식이다. 이걸 뉴럴 네트워크 모양의 그림으로 표현하면 다음과 같다. 

 

FC Neural Nets

왼쪽 노드들은 input, 오른쪽 노드들은 output 에 해당한다. 위 그림을 보면 Fully connected 라는 이름처럼 모든 input 노드들이 output 노드들에 하나씩 연결되어있다. 


Convolution Layer 의 계산방식

 

컨볼루션 레이어의 계산 방식은 또 다르다. 

 

CNN 계산 방식

 input 이 들어오면, input 전체 값을 사용하는 것이 아니라 특정 크기만을 dot 연산에 사용한다. 이걸 뉴럴 네트워크 그림으로 표현하면 다음과 같이 표현된다. 

 

CNN 계산 방식

 이 그림을 보면, 위의 FC 그림과는 다르게 input 노드들이 일부분만 output 노드에 연결되어있다. FC처럼 노드끼리 빽빽하게 연결되어 있지가 않다. 즉, Convolution layer 자체가 FC 와 다른 계산방식을 가진, 다른 layer 이다. 



그렇다면, CNN 과 FC 자체가 다른 개념인데 왜 1D CNN이 Fully connected network 가 아니냐는 질문이 나온걸까?

아마 1D CNN 이 아닌 기존 CNN 에서 fully connected layer 의 역할때문에 이런 질문이 나온 것 같다. CNN 은 크게 특징을 추출하는 Convolution layer, Pooling layer 와 마지막으로 각 레이어를 1차원으로 변환하고 결과를 분류해내는 fully connected layer 로 이루어져 있다. 1차원의 벡터 데이터를 사용했기 때문에, 그냥 fully connected layer 가 아니냐? 라는 질문이 나온 것 같다. 하지만, 인풋 데이터만 1차원 이었을 뿐 colvolution, pooling 등의 연산은 일반적인 CNN 과 똑같이 사용해주었기 때문에 1D CNN 은 단순히 fully connected layer 가 아니었다고 할 수 있다. 

 


결론. 1D CNN 은 Fully connected layer 가 아니다. 

 

 

 

#참조 

Convolutional Layers vs Fully Connected Layers

https://towardsdatascience.com/convolutional-layers-vs-fully-connected-layers-364f05ab460b

CNN 기초 
https://m.blog.naver.com/bananacco/221928562116