네이버 AI 부트코스 준비 - 4

박경현·2022년 12월 15일
0

오늘은 pre-course 9일차 수업을 듣고 CNN에 대해 배웠다

하지만 제대로 이해 되지않아 블로그를 찾아보았고 그 중 매우 핵심을 잘 이해시켜준
블로그가 있어서 오늘배운 내용과 함께 정리해보려고 한다!!

CNN이란

Convolutional(합성이라는 뜻) Neural Networks의 약자로
딥러닝에서 주로 이미지나 영상데이터 처리할때 사용되며
Convolutional이라는 전처리 작업이 들어가는 Neural Network의 모델

CNN을 왜 사용할까?

DNN(Deep Neural Network)의 문제점에서부터 출발
일반 DNN은 1차원형태의 데이터를 사용 - 이미지 같은거

이 이미지가 입력값이 되는 경우, 이것을 flatten시켜서 한줄 데이터로 만들어야하는데,
이 과정에서 공간적/지역적 정보 손실이 난다!

또한 추상화 과정없이 바로 연산으로 가버려서 학습시간과 능률의 효율성이 저하!

이래서 나왔다!!

CNN은 이미지를 날것(raw input) 그대로 받음으로써 공간적/지역적 정보를 유지한채
특성들의 계층을 빌드한다

CNN의 중요포인트는 이미지전체보다는 부분을 보는 것, 그리고 이미지의 한 픽셀과
주변 픽셀들의 연관성을 살리는것

CNN 예시 - ex) 새 그림 찾기

문제 상황

  • 어떤 이미지가 들어왔을때 이것이 새 이미지인지 확인하고 싶다

핵심 부분

  • 새의 부리가 있는지 없는지 확인하는 것이 키워드

과정

  • 새의 부리의 경우 이미지에서 매우 적은 부분만을 차지
  • 때문에 CNN의 뉴런이 패턴(새의 부리)을 파악하기 위해서 전체이미지가 아닌 부분만 봄
  • 새마다 부리 길이와 모양이 다르기 때문에 이미지의 부분부분을 캐치하는것이 핵심이다!

Convolution의 작동원리

우리가 5X5의 인풋이미지와 3X3의 커널(필터)가 존재한다고 가정

이 필터가 전체 인풋을 훑는것이다

우리의 입력값 이미지의 모든 영역에 같은 필터를 적용해 패턴을 찾아 처리하는게 목적!

필터를 이용해 연산처리한다 => matrix간의 inner Product!

이때 결과값의 경우
입력값: d1,d2
필터: k1,k2
결과: (d1-k1+1) * (d2-k2+1) 이 전체 결과 (matrix dimension)이다!

zero padding

방금 5X5 인풋의 결과가 3X3으로 나왔다 => 즉 손실이 발생했다

이런 손실은 없애고 싶다면 이때 0으로 된 padding을 가장자리에 감싸면 없앨 수 있다

padding을 2를 준다면 => (7-3+1)* (7-3+1) = 5X5가 나옴

stride

필터를 얼마만큼 움직여 주는가!
기본이 1이다 즉 바로 옆칸으로 옮기는 것!

stride가 커질수록 결과값은 당연히 작아지고 이미지를 건너띄는 칸도 커진다

stride가 1일때 => ( (d1-k1)/s +1) * ( (d2-k2)/s +1 )

CNN의 전체적인 네트워크 구조

CNN의 구조는 기존 완전 연결계층과 다르게 구성되어있다
완전 연결계층의 경우 이전계층의 모든 뉴런과 결합되어있는 Affine 계층으로 구현

CNN은 Convolutional Layer와 Pooling Layer들을 활성화 함수 앞뒤에 배치하여 만들어짐

첫번째 Convolutional Layer

28X28 의 이미지를 여러개의 필터(커널)을 사용하여 결과값을 얻습니다

5X5 커널로 훑는다면 24X24 matrix라는 결과값이 완성됩니다!

이때 10개의 커널을 사용한다면 10 24X24 matrix가 됩니다

그후 이렇게 도출해낸 결과값에 Activation function(ReLU function등)을 적용

A Convolutional Layer = convolution + activation

왜 Activation Function 즉 활성함수를 사용할까?

간단히 말하면 선형함수인 convolutional에 비선형함수를 추가하기 위해 사용!

첫번째 Pooling Layer

convolution과정을 통해 많은 수의 결과값(이미지)들을 생성 -> 너무 많아지면 문제
이때 Pooling을 고안!

Pooling이란 결과값의 dimentionality를 축소해 주는것을 목적으로 둠

Flatten

이 과정들을 반복하고 난 후 4X4X20 의 텐서를 일자 형태로 데이터를 펼친다
이 과정을 Flatten or Vectorization이라고 함

쉽게 말해 각 세로 줄을 일렬로 세워두는 것

그렇다면 왜 이렇게 1차원 데이터로 변형해도 상관이 없을까요?
이 전에 두번째 pooling layer에서 얻어낸 4x4크기의 이미지들은 이미지 자체라기 보다는
입력된 이미지에서 얻어온 특이점 데이터가 됩니다.
즉 1차원의 벡터 데이터로 변형시켜주어도 무관한 상태가 된다는 의미입니다.

Fully-Connected Layers(Dense Layers)

이제 마지막으로 하나 혹은 하나 이상의 Fully-Connected Layer를 적용시키고
마지막에 Softmax activation function을 적용해주면
드디어 최종 결과물을 출력하게 됩니다.

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글