-
합성곱 신경망(Convolution Neural Network)인공지능 2022. 11. 20. 01:23
CNN이란?
- Convolution Neural Network의 약자로 딥러닝에서 주로 이미지나 영상 데이터를 처리할 때 쓰이는 모델이다.
뿐만 아니라 CNN은 DNN의 문제점을 해결하기 위해 사용하기도 한다.
Deep Neural Network의 문제점?
DNN은 기본적으로 1차원 형태의 데이터를 사용해서 이미지를 학습한다.
따라서 1028x1028같은 2차원 형태의 이미지가 입력 값이 되는 경우에 이를 flatten시켜서 한줄 데이터로 만들어야 하는데 이 과정에서 이미지의 공간적/지역적 정보가 손실된다.(CNN 모델을 사용하면 이미지를 날것 그대로 받음으로써 공간적/지역적 정보를 유지한 채 특성(feature)들의 계층을 추출하게 되며 DNN의 문제점을 보완할 수 있다.)

1. Convolution Layer
- Convolution Layer는 CNN에서 가장 핵심이 되는 레이어다. 보통 Convolution Layer에서 이미지를 분류하는데 필요한 특징(feature) 정보들을 뽑아낸다.

윤곽선 예시 Convolution Layer에는 수 많은 filter들이 있다. 이미지의 특징(feature)가 될 수 있는 요소는 굉장히 많지만, 그 중에서도 가장 대표적인 것은 "윤곽선"이다. 윤곽부분만 보고 이 물체가 무엇인지 구분하는데 큰 도움이 되기 때문이다.

Filter 연산과정 Convolution filter는 위와 같이 전체 이미지를 차례대로 움직이면서 특징 값을 추출한다.
이 과정에서 이미지를 확대시켜 탐색하고, 특정 filter의 모양과 일치하게 되면 그 부분에서 큰 값을 얻어가며 특징(feature)를 찾는다.
결국 filter가 전체 이미지를 순회하고 나면 전체 이미지에서 해당 filter와 유사한 모양을 가진 부분에 대한 특징(feature)들만 얻을 수 있게 된다.
따라서 Convolution filter 학습을 통해 이미지를 더욱 구체화 시켜 완성도 있는 edge filter로 만들어진다.
2. Pooling Layer이미지의 크기를 그대로 유지한 채 Fully Connected layer로 가게 된다면 연산량이 기하급수적으로 늘 것이다. 따라서 Pooling layer를 통해 크기도 적당한 사이즈로 줄이고, 특정 feature를 강조한다.
Pooling layer에는 총 3가지의 방법이 있다.
- Max Pooling
- Average Pooling
- Min Pooling
하지만 CNN에서는 주로 Max Pooling을 사용한다. 이는 각 Pixel마다 최댓값을 추출한다.
위와 같은 data가 주어져있다. 우리는 stride가 2일 때 2x2 filter를 통해 max pooling을 하려고 한다.
방법은 매우 간단하다. 첫 번째 빨간색 사각형 안의 숫자 1, 1, 5, 6 중에서 가장 큰 수인 6을 찾고, 다음 초록색 사각형 안의 숫자인 2, 4, 7, 8중에서 가장 큰 수인 8을 찾는다. 이와 같은 과정을 반복하면 오른쪽의 상자 6, 8, 3, 4를 얻을 수 있다.
3. Fully Connected Layer
지금까지 설명한 내용은 특징 추출을 위한 작업이었고, 그 다음부터는 분류 작업이다. 이미지의 특징을 추출해서 이것이 무엇을 나타내는 데이터인지를 분류하는 것이다.
여기에도 2가지의 Layer가 있다.
- Flatten : 데이터 타입을 Fully Connected 네트워크 형태로 변경한다. 즉, 이미지를 완전연결 신경망에 도입할 수 있도록 1차원 배열 형태로 변환해준다.
- Softmax : 분류(Classification) 수행
+ 부가적인 설명
4. Dense Layer
- 다양한 함수와 hidden layer(은닉층)을 거쳐서 나온 숫자들을 한 곳으로 모아주고, 태스크에 적절한 함수에 정보를 전달하기 위한 레이어다.
그냥 여러 Layer로부터 계산된 정보들을 한 곳으로 모은 자료라고 생각하면 편하다
# 4-1 예시
Convolution과 Pooling Layer를 지나서 압축된 정보들이 다음과 같이 있다고 가정해본다!
R 채널에서 나온 값
[[13, 8,],
79, 18]]
G 채널에서 나온 값
[[1, 7],
9, 7]]
B 채널에서 나온 값
[[33, 88],
29, 14]]
그런 다음에 Flatten layer를 사용해 쫙 펼쳐준다.
[13, 8, 79, 18, 1, 7, 9, 12, 33, 88, 29, 14]
이후 2개의 클래스를 분류하는 '개' '고양이' 분류 태스크에 사용한다고 가정하면,
Fully Connected Layer 혹은 Dense Layer라고 부르는 레이어가 모든 값들을 연결해서 압축해준다.
2개의 클래스 분류시
[4, 100]
이렇게 두개의 숫자로 반환해줘야한다. 만약 3개의 클래스 분류라면
[3, 50, 77] 이런식으로 1x3 행렬이 생성된다.
그리고 당연히 2개의 클래스 x 12개의 flatten된 값들이 있으니까 총 24개의 웨이트(파라미터)가 생성될거다!
이렇게 모든 레이어의 정보가 원하는 클래스 수의 모양의 벡터에 더해지도록 하는게 Dense Layer이다.'인공지능' 카테고리의 다른 글
경사하강법 [Optimizer] (0) 2022.11.17 순환 신경망 예제 [RNN] (0) 2022.11.16 순환 신경망에 대해서 [RNN] (0) 2022.11.16 머신러닝 - 1 (0) 2022.01.12