# AI 이론/DeepLearning

합성곱 신경망(CNN)

alz 2022. 3. 3. 16:35

합성곱 신경망이란? 

이미지 인식과 음성 인식 등 다양한 곳에서 사용되는데, 특히 이미지 인식 분야에서 자주 사용된다.

 

합성곱 계층의 구조 

  • 완전연결 계층(Affine)

  • CNN 계층

 

CNN을 이용하여 구축했을때, 출력 가까이에서는 Affine 구조를 사용한다.

이전의 MNIST 숫자인식 데이터는 Flatten 을통해 3차원 데이터를 1차원 행렬(1x784)로 평탄화 하였지만,

CNN 방식은 3차원 방식을 유지하여 연산이 가능하다. 

CNN에서는 입출력 데이터를 입력특징맵, 출력특징맵라고 부른다.

 

합성곱 연산의 경우, 입력과 필터에서 대응하는 원소끼리 곱한후 그총합을 구한다.

(단일 곱셈-누산 방식이라고 함)

 

합성곱 연산시 패딩(Padding)도 가능한데, 이는 출력의 크기를 조정하는데 사용된다. 

np.pad(input_data ,axis1,axis2,axis3,...axisn)방식으로 사용 가능하다.

 

패딩을 하는 이유는 합성곱 연산시 출력이 계속작아지는데, 1x1이 된다면, 합성곱을 하는 이유가 없어진다.

따라서, 행렬의 크기를 조절할 수 있도록 하는것이 패딩의 역할이다 .

 

Stride 란 ?

Filter가 이동하는 간격으로, 스트라이드가 커지면 출력이 줄어들게 된다. 

스트라이드가 1이라면 한칸씩 이동하지만 2라면 2칸씩이동한다.

 

출력값 

 

단일 필터일경우의 합성곱 연산

이와같이 입력데이터에 필터를 적용하여 출력데이터가 나오지만, 하나의 입력데이터에 여러개의 필터가 붙게 된다. 이때는 ,

 

하나의 데이터에 FN개의 필터가 합성곱을 통해 FN개의 OH,OW크기를 갖는 출력 데이터가 생성 되었다.

위의 경우에서 편향을 더한 경우는 아래와 같다.

풀링 계층

 

풀링(Pooling) 이란 가로 세로 방향의 공간을 줄이는 연산으로,

보통 풀링 윈도우의 크기와 스트라이드의 크기는 동일하게 둔다고함

 

풀링계층의 특징

  • 학습시 필요한 매개변수가 존재하지 않음
  • 채널수도 변하지 않음
  • 입력의 변화에 큰 영향을 받지 않음

 

CNN은 계층이 깊을수록 더 복잡하고 추상적인 정보를 추출할수 있다.

대표적인 CNN 방식은 LeNet,AlexNet 이다.

 

LeNet 

손글씨 숫자를 인식하는 네트워크로 1998년에 제안되었음. 

 

현재의 CNN과는 몇가지 면에서 차이가 존재하는데,

첫번째로는 활성화 함수이다. LeNet은 Sigmoid(1/(1+exp(-x)) 함수를 사용하엿지만 현재는 주로 ReLU방식을 사용함

두번째로는 LeNet은 서브샘플링을 통해 중간데이터 크기를 줄이지만 현재는 MaxPooling 방식을 사용

 

 

AlexNet

합성곱 계층과 풀링 계층을 거듭하여 마지막으로 완전연결 계층(Affine과같은) 거쳐 결과를 출력

LeNet-->AlexNet으로 넘어오면서 바뀐 3가지

  • 활성화(activation) 함수로 ReLU
  • LRN(Local Response Normalization)이라는 국소적 정규화를 실시하는 계층을 이용
  • 드롭아웃을 이용