CNN(Convolutional Neural Network:합성곱 신경망)

신민기·2025년 9월 10일

AI

목록 보기
7/17

CNN

사용 이유

FC Layer는 1차원 데이터만을 입력으로 받는데 이미지 데이터를 1차원으로 평면화하는 과정에서 정보에 손실이 일어난다. 그러기 때문에 이미지의 공간정보를 유지한 상태로 학습할 수 있는 CNN모델을 사용한다.

CNN의 구조

CNN은 두가지로 나눌 수 있는데 특징을 추출하는 부분과 분류를 하는 부분으로 나눌 수 있다.

특징을 추출 하는 영역은 Convolution Layer와 Poiling Layer로 나눌 수 있다.

color 이미지는 3차원인데 높이와 너비 그리고 이미지 색이 rgb로 표현 되었다면 3개의 채널을 갖게 된다.

Filter

filter는 이미지의 중요한 특징을 찾아내기 위한 파라미터입니다.(filter=kernel=mask)

이렇게 각 이미지에 채널마다 필터를 씌어 합성곱을 하고 Feature Map을 만듭니다.

여기서 필터의 가중치는 공유한다.
가중치를 공유하는 이유는
1. 파라미터 수가 적어져 효율적인 학습이 되고
2. 일관적이게 데이터를 학습한다.
ex) 초기 가중치(필터)는 랜덤값이라 이미지의 어느 부분을 중요하게 볼지 모르지만,
학습이 진행될수록 정답(라벨)을 맞히기 위해 유용한 부분을 스스로 찾아낸다.
이때 하나의 필터가 이미지 전체를 훑으며 가중치를 공유하기 때문에, 특정 '위치'에 종속된 정보를 외우는 것이 아니라 이미지 어디에 있든 공통적으로 나타나는 '시각적 특징(Feature)' 자체를 학습하게 된다.

Stride

stride는 필터의 이동량을 말한다. stride가 클 수록 이미지 크기가 작아진다.

Padding

합성곱을 점점 할 수록 이미지의 크기는 줄어든다 또한 이미지 가장자리에 위치한 픽셀들의 정보도 사라진다. 그러한 단점을 해결하기 위해 나온 것이 padding이다.

위와 같이 입력 이미지의 가장자리에 특정한 값으로 설정된 픽셀들을 추가함으로써 입력이미지와 출력이미지의 크기를 비슷하거나 같게 만든다.
가장 자리에 0을 추가하는 것을 zero-padding이라하고, 주로 CNN에서는 zero-padding을 사용한다.

Pooling Layer

이미지의 크기를 유지한 채 FC layer로 가면 연산량이 굉장히 많아진다 그러므로 크기도 줄이고 특정 feature을 강조 할 수 있는 pooling layer를 사용한다.

pooling layer에는 여러가지 방법이 있는데 주로 사용되는 것은 Max pooling layer이다.

위에 그림과 같이 선택 영역 내에 가장 큰 값만을 출력한다. 또한 pooling layer에 stride는 대부분 선택 영역의 높이, 너비와 크기가 같다.

이러한 pooling layer를 적용할 수 있는 이유는 이미지 데이터는 인접한 픽셀들 간의 유사도가 높기 때문이다.

Flatten Layer

위와 같이 이미지의 특징을 추출하는 단계를 거친 데이터들을 분류하기 위해 FC layer에 넣어야 하지만 FC layer는 1차원 형태에 데이터만을 받기 때문에 이를 평탄화 해줄 Flatten Layer가 필요하다.

위와 같이 다차원 데이터들을 1차원 데이터로 평탄화해준다.

FC layer

위와 같이 모든 노드들이 다음 층에 있는 노드들과 전부 연결 되어있는 layer를 말한다.

Softmax layer

pj=ezjk=1Kezk,j=1,2,,Kp_j = \frac{e^{z_j}}{\sum_{k=1}^{K} e^{z_k}}, \quad j = 1,2,\ldots,K

출력 데이터들의 확률을 나타내준다.

출처:
https://rubber-tree.tistory.com/116
http://taewan.kim/post/cnn/
https://syj9700.tistory.com/38
https://m.blog.naver.com/luvwithcat/222148953574

profile
AI 어렵다

0개의 댓글