[인공지능 개론] CNN 구조

2022. 10. 11. 16:09인공지능,딥러닝,머신러닝 기초

 


CNN 등장배경

- 일반 DNN은 기본적으로 1차원 형태의 데이터를 사용함

- 따라서 이미지가 입력될 경우, 이것을 flatten 시켜서 한줄의 데이터로 만들게 됨

- 이 과정에서 이미지의 공간적 정보가 손실되어 특징 추출과 학습이 비효율적이고 정확도의 한계가 발생한다는 문제가 있었음

- 그래서 CNN을 통해 이미지를 raw input으로 받음으로써, 공간적/지역적 정보를 그대로 유지한채 특성들의 계층을 빌드업하게 됨

 

 

CNN 작동원리

- 예를 들어 위 그림처럼, 2차원 이미지를 행렬로 표현할 수 있음

- CNN에는 필터(커널)이 존재하는데, 오른쪽에 표현된 것처럼 3*3크기의 필터가 있다고 하면 이 필터를 이미지 입력값에 전체적으로 훑어주면서 이미지의 패턴을 찾아 처리할 수 있음

- 이때 훑어준다는 것은 연산처리를 해준다는 것, 즉 matrix와 matrix간의 inner product을 진행함

- 먼저 위 input image에 순서대로 필터와 같은 크기 부분과 필터의 inner product연산을 해주면 아래 빨간색 테두리 처럼 해당위치의 결과값은 4가 나옴

- 이 과정을 순서대로 위치를 옮겨가면서 진행하게 되면,

CNN 전체 구조

- 먼저 이미지를 대상으로 여러개의 필터를 사용해서 결과값을 얻는다

- 위 그림에서는 28*28이미지 입력값에 10개의 5*5필터를 사용해서 10의 24*24의 결과값들을 만들어낸 결과

- pooling이란 결과값의 차원을 축소해주기 위한 작업으로, 각 결과값의 크기를 줄일 수 있음

- 위 그림에서는 대표적으로 Max pooling 과 Average pooling을 소개하고 있으며, pool의 크기에 맞춰 matrix에서 가장 큰 값을 가져와 구성하거나, 평균을 내어 결과값의 크기를 줄여주는 작업

따라서 pooling layer를 거치게 되면 결과값이 12x12 matrics가 된 것을 확인할 수 있음

-  Convolutional layer에서는 텐서 convolution을 적용함

- 이전 pooling layer에서 얻어낸 12x12x10텐서를 대상으로, 5x5x10크기의 텐서필터20개를 사용해줌

- 그 결과 각각 8x8크기를 가진 결과값 20개를 얻어낼 수 있게됨

- 첫번째 Pooling과 같은 방식으로 처리해주면 더 크기가 작아진 20개의 4*4결과값을 얻게됨

- 그 후 4*4*2텐서를 일자형태의 데이터로 쭉 펼쳐주는 flatten작업을 거치게됨

- 최종적으로 320차원을 가진 벡터 형태로 완성됨

- 이렇게 데이터를 펼쳐도 가능한 이유는 두번째 Pooling layer에서 얻어낸 4*4이미지가 입력된 이미지에서 얻어온 특이점 데이터가 되기 때문

 

- 마지막으로 Fully-Connected Layer를 적용하고 softmax activaiton function을 적용하면 최종 결과값이 도출됨