왜 image Neural Networks를 CNN으로 다루어야할까?
CNN를 써야하는지에 대해서 살펴보기 전에 기존의 ANN가 image data에 적용할 때 어떠한 문제점이 있었는지에 대해서 먼저 알아보자. 아래의 이미지는 112 X 150 을 가지고 RGB 채널에서 3개의 채널을 가지고 있다. ( 112 X 150 X 3 ) 이런 image를 python이나 R에서 다룰려면 (112, 115, 3) 형태의 tensor를 다루게 된다. tensor를 ANN에 적용하려면 tensor를 vector의 형태로 flatten해주어야 되는 과정이 필요하다.( ANN은 tensor를 input 으로 받지 않기 때문에 ) 그런데 image를 보면 image내에서 지엽적인 부분이 분명히 있을 수 있다. 그 부분을 tensor로 image를 다루지 않고, vector로 다루게 되면 지엽적인 곳에 픽셀이 모여있는 부분이 어떠한 정보가 사라지게 된다.
또한 데이터를 vector로 펼치면 vector의 차원은 ( 1, 112, 150, 3 )로 엄청나게 긴 vector를 가지게 된다. 이러한 vector가 어떠한 node와 결합하게 되면 weight의 개수가 엄청나게 많아진다. ( 50,400개의 weights ) 단 하나의 node만을 가정했을 경우에도 50,400개의 weight를 가지게 되는데 만약 node가 더 많아진다면? ...
ANN으로 image를 다루면 vector형태의 input을 받아야 하기 때문에 weight가 기하급수적으로 늘어남에 있어서 모델에 복잡성이 증가하고 그로 인한 오버피팅 가능성이 높아진다.
반면 CNN은 ANN의 문제를 해결했기 때문에 image에 잘 적용해서 활용할 수 있다. CNN은 어떤 image를 tensor형태로 받으면 그대로 tensor형태로 활용을 한다. ( ANN과 달리 vector로 만들지 않음 ) ANN와 달리 CNN은 Local connectivity와 Parameter sharing이라는 성질을 활용하여 weight가 증가하는 문제를 극복하게 된다.
Local connectivity
ANN에서는 node 하나가 image전체에 연결된다. 그렇기 때문에 하나의 node에 대해서 연결되는 weight의 개수가 많아진다. Local connectivity는 어떠한 image에 대한 하나의 구역을 node 하나가 담당하게 된다.
receptive field (filter size) = 35
Fully-connected ( each neuron ) : 112 X 150 X 3 = 50,400
Local connectivity ( each neuron ) : 35 X 35 X 3 = 3,675
각 node가 구역(receptive field)을 담당했을 경우 위와 같이 하나의 node에 대해 weight가 엄청나게 줄어든 것을 볼 수 있다. weight가 이전과 비교해서 많이 줄었다고 하지만 node 수가 늘어나면 아직도 node에 대한 weight자체가 많이 복잡한 상태다. 그렇기 때문에 parameter sharing이라는 개념을 도입해 weight를 줄이게 된다.
Parameter Sharing
Parameter Sharing이 어떠한 가정을 하고 있는지 먼저 알아보자. 어떠한 feature가 어떠한 구역에서 의미가 있다면 다른 구역에서도 의미가 있다라는 가정이다. feature map 1에서 어떤 특징을 찾는다고 하면, feature map 안에 3675개의 weight들이 총 3번 들어가게 된다. 만약 그 feature map 내에 있는 하나의 node가 의미 있다면 나머지 2개의 node를 사용할 필요 없이 하나의 node만 사용하자는 것이다. ( node 하나는 각 구역을 담당한다 ) parameter Sharing을 적용하게 되면 3675 X 3 개의 weight가 3675개로 대폭 줄어들게 된다.
아래그림은 CNN의 첫 번째 Convolution layer의 filter를 시각화한 것이다. 어떠한 filter를 시각화 했을 때 어떠한 특징들이 나타나게 되는데 그 특징들이 의미가 있으면 다른 구역에서도 의미가 있기 때문에 똑같은 parameter를 공유해도 된다는 의미다. 수평선이 어떤 이미지 구역에서 중요하다면 다른 구역에서도 중요할 것이라는 이야기다.
ANN vs CNN
ANN | CNN |
input을 vector로 받는다 | input을 tensor로 받는다. |
vector로 받기 때문에 weight가 많다. | local connectivity, parameter Sharing으로 극복 |
weight가 많아서 오버피팅 가능성이 높다. | input이 image인 모델에서 가장 많이 사용 |
'이론상' 모든 Neural Network를 구현 가능 | AlexNet, GoogleNet,... |
'Deep Learning > CS231N' 카테고리의 다른 글
[CS231N] CNN 기반 모델의 종류(LeNet, AlexNet, ZFNet, VVGNet, GoogleNet, ResNet, DenseNet) (0) | 2021.07.14 |
---|---|
[CS231N] Stride, Padding, Pooling layer 란? (0) | 2021.07.14 |
[CS231N] Optimization의 종류 - SGD부터 Adam까지 (0) | 2021.07.12 |
[CS231N] 활성화 함수(Activation Fucntion)의 종류 (0) | 2021.07.08 |
[CS231N] Neural Network Back-propagation (0) | 2021.07.06 |