[LGaimers] 딥러닝 - (3) CNN

govldbstj·2023년 1월 24일
0

23LGAimers

목록 보기
18/21
post-thumbnail

< convolution neural networks & Image classification >

합성곱 신경망의 동작 원리 및 이를 통한 이미지 분류

  • LGAimers의 주재걸교수님 강의를 바탕으로 작성한 글입니다. 사용한 이미지는 강의 자료이며 개인 공부를 위한 포스팅입니다.

1. Various neural network architectures

-> Fully Connected neural network :
앞에서 배운 멀티레이어 퍼셉트론에서 각 레이어의 입력 노드 -> 가중치 -> 출력노드의 형태로 연결된 네트워크
-> ConvNets or CNN
: 이번에 배울 합성곱 신경망 (CV 분야에서 주로 사용하는 네트워크 종류)
-> RNN
: sequence data나 시계열 데이터 등에 사용되는 네트워크

2. 활성화 함수와 활성화 지도

-> how ConvNet works?

이렇게 조금씩 다르게 생긴 x도 x로 분류를 할 수 있어야 하는데, 어떻게 할 수 있을까?
(1) 먼저 이미지를 픽셀단위로 자르고, 각 픽셀 당 가중치를 매긴다 (ex. 명암에 따라 1, -1)
(2) 이 전체의 이미지에서 특징이 될 만한 부분들이 존재하는데 그 부분을 찾아낸다.
: 예를 들어 이 사진처럼 알파벳 x를 분류해내려면 중앙 부분은 작은 x로, 양 모퉁이 부분은 사선이라는 특징을 찾아내어야 할 것이다.

(3) 찾아내고자 하는 특징을 필터로 만들어 분류내려고 하는 대상 이미지 위에 올려 움직이면서 맞는지 아닌지 검사한다. 조그만한 필터를 대상 이미지 위에 올려서 합성곱을 하면 1이나 -1과 같은 숫자가 나오게 되고, 결국 이 숫자가 옳은지 아닌지를 분류할 수 있는 수를 도출해내게 된다.

이렇게 분류하고자하는 이미지 위에다 파란색 부분에 필터를 올리면 합성곱 연산을 실행하면 두번째 33 매트릭스가 나오게 된다. 지금은 필터랑 이미지랑 완전히 동일하기 때문에 각 픽셀이 전부 1이 되고, 이 값의 평균을 구하면 당연히 1이 됨 (100%일치). 이 1이라는 값을 33필터의 정중앙에 기록하고 필터 위치를 옮겨 또 특징을 찾아낸다.

그렇게 연속적으로 하나의 대상 이미지에 하나의 필터를 합성곱하면 이런 activation map, 활성화 지도가 나오게 된다.
세개의 필터를 만들어서 각각 합성곱을 하면 필터의 개수(3)만큼 활성화 지도를 구할 수 있다.

간단히 정리하면,
(1) 이미지 위에 convolution filter를 오버랩시킨다.
(2) 이미지와 필터에 대해 각 픽셀마다 곱한다.
(3) 평균을 구해서 특징을 잡아낸다.

3. Convolution layer


32x32사이즈의 이미지가 있을 때, 보통은 3개의 색깔 레이어(RGB)를 가지므로 depth가 3 (32x32x3)
여기에 맞게 필터도 필요한데, 보통 필터 크기는 대상 이미지보다 작다. 그렇지만 depth는 같아야 함. (5x5x3)

합성곱을 해주면 필터 개수만큼 활성화 지도(activation map)가 나온다.

4. Pooling layer : 정보의 축약

-> 이렇게 구한 활성화 지도에서 다시 아까 필터 씌우듯 작은 사각형으로 잘라서 pooling을 진행한다.
Pooling에는 여러개의 방식이 있는데 max pooling방식을 가장 많이 사용된다.
(2x2사이즈로 풀링을 한다면, 4개의 픽셀 중 가장 값이 높은 숫자를 채택해서 넣는 방법)

5. Relu layer

: 선형결합을 한 후에 deep learning에 유리하도록 activation map의 각각 값에다가 활성화 함수를 씌워준다.
-> Rectified Linear Units (ReLU -> 활성화함수의 일종)
합성곱을 하고 풀링을 마친 활성화 지도에서 각 픽셀마다 활성화함수를 거쳐 학습하기 쉬운 형태로 값을 0또는 0~1사이 확률값으로 바꾸어준다.

-> phase 1 (conv(특징잡기), relu(0또는 1), pooling(이미지 축소)의 연속)

-> phase 2 (FC layer의 연속)
-> phase 1에서는 convolution layer -> relu -> pooling으로 이루어진
-> phase 2에서는 fully connected layer가 반복적으로 수행되면서 마지막으로 풀링된 아주 작은 데이터를 하나의 벡터로 쭉 펴서 이 값이 정답 데이터에 맞는지 아닌지를 찾아내도록 한다.

6. hyperparameters

이미지 분류 과정에서 ReLU 계층에는 파라미터를 조정할 만한 게 없다.
그러나 convolution layer에서는 그리드에 들어가는 각각의 1이나 -1과 같은 값이 가중치로서 역할을 하게 되고 이런 가중치들이 전부 trainable 한 parameter가 된다. 필터 개수나 필터 사이즈도 파라미터가 될 수 있다.
풀링층에서는 윈도우 사이즈(풀링 필터 크기)나 스트라이드(얼마나 옮겨갈지)가 파라미터가 될 수 있다.
FC층에서는 레이어 개수와 뉴런 개수가 파라미터가 될 수 있다.
그래서 다시 거꾸로 back propagation 할 때 gradient descent를 활용해서 filter의 coefficient를 최적의 값으로 도출하게 된다.

-> 정리하자면, 하나의 convolution neural network을 구성할 때 결정해야하는 다양한 hyperparameter가 있다. 한 convolution layer 내에서 몇개의 convolution filter을 쓸지 그리고 한 필터에 가로 세로 사이즈를 어떻게 할지 결정해야 한다.
이 사이즈를 반으로 만드는 max pooling layer같은 경우에도, 한번 max pooling하는 데 사용되는 window(filter) size를 얼마로 설정할 건지도 결정해줘야 한다. (filter가 3*3이면 1/3으로 크기가 줄어듦), Window stride : 얼마나 옮겨갈지를 정함

7. 대표적인 CNN architecture

AlexNet

VGGNet : 필터 크기가 3*3으로 고정되어 있지만, 이 층을 굉장히 깊이 쌓아서 좋은 성능을 내도록 한다.ㅜ

GoogLeNet

ResNet : 파라미터들은 항상 random initializing으로 시작을 하게 되는데, 레이어가 너무 많으면 거기에 있는 파라미터들이 계속 업데이트되어야 하고 그러면 시간이 오래 걸린다. 그래서 skip connection이라는 게 있음

Skip connection : layer를 필요에 따라서는 스킵할 수 있도록 하는 중간과정
h(x) = f(x) + x의 형태로 층을 쌓게 되는데, 하나의 층을 그냥 skip한다면 f(x)에서 파라미터를 0으로 세팅해 f(x)값이 0으로 반영되도록 한다.
-> 여러개의 layer를 쌓아도 학습이 잘 안되는 경우, 파라미터들이 꼬이는 문제들에서 해결책이 될 수 있다는 장점이 있어서 요즘은 ResNet을 가장 많이 사용한다.

profile
ajou software 20

0개의 댓글