본문 바로가기
머신러닝 딥러닝

0917 CNN 합성곱 신경망

by 대금부는개발자 2021. 9. 17.
SMALL

합성곱 신경망 CNN(Convolutional Neural Network) → convnet이라고도 불려요.

 

DNN(Deep Neural Network) : 지난 글에서 다뤘던 가장 일반적인 Deep Learning 구조
→ layer를 추가해 전체적으로 Model의 복잡도를 높인 구조, 일반적인 Deep Learning 구조

 

FC layer(Fully Connected Layers) : 일반적으로 DNN과 같은 의미로 종종 사용되지만 사실은 같지 않아요!

layer안에 있는 모든 node가 그 이전, 그다음 node와 연결되어 있는 구조.

DNN 안에 들어있는 건 결국 FC layer(Dense layer)

일반적인 DNN으로도 이미지 학습이 되긴 해요. 하지만 한계가 있어요!

→ 그래서 해결책으로 생각한 게 특징(pattern)을 학습하면 훨씬 적은 Data로 더 정확한 예측이 가능(마치 사람처럼)

 

사람은 공간데이터를 학습할 수 있어요.(이미지가 회전하거나 기울어져 있어도 알 수 있어요.)

컴퓨터는 공간 데이터에 대한 내용은 학습이 되지 않고 이미지라 표현되어 있는 픽셀(숫자)들의 패턴만 파악해요.

→ 컴퓨터는 이미지가 기울어지거나 회전하면 아예 다른 이미지로 판단해요.(판단 x)

MNIST는 필기체가 달랐다 뿐이지 제대로 형태가 들어오는 데이터로만 사용했어요.

 

CNN → pixel 데이터로 학습은 하는데 특징들을 파악해서 사람처럼 예측하고자 만들었어요.(얼굴인식 등에 사용)

 

DNN과 CNN의 Architecture

 

DNN(Deep Neural Network) 

 

A1 : 모든 독립변수가 합친 2차원 배열 matrix

W² : (입력개수, output의 node개수) → weight, matrixb² :  각각 bias의 집합hidden layer가 있으면 DNN  A1 * + → Z² → relu → relu(Z²) A2

 

A2가 입력이 되어 W³ 와 위와 같은 처리가 되어 output layer로 들어가요.마지막  activation은 softmax → 최종 예측 값 y hat(class별 확률)

 

예측값(y hat)과 정답으로 들어온 T 비교해서 차이를 계산 → Cross Entropy가 개입되어 비교

차이가 적으면 종료, 최적이 아니면 다시 입력(편미분을 하지 않고 Backpropagation(행렬곱)로 weight, bias업데이트)

 

 

CNN(Convolutional Neural Network) 

 

위의 내용과 비슷해요. 하지만 input player다음 Convolution Layer가 추가되었어요!

 

입력값을 받은 Convolution Layer에서 conv(합성곱) 연산을 수행하는데 Filter를 이용해서 합성곱 연산을 수행해요.

(Filter 안에 있는 값이 일반적으로 우리가 구해야 하는 weight)

Convolution 한 결과를 가지고 다음 연산으로 넘기기 위해 Relu연산을 해요. 

Convolution layer 와 Convolution layer 사이에 pooling layer를 거쳐요!

(pooling layer는 나올 수도 있고 안 나올 수도 있어요)

pooling layer는 어느 때 나오고 어느 때 안 나오나요? 내가 판단해서 결정! 

 

 pooling layer에서  pooling 처리를 한 뒤 이 작업이 끝나고 Convolution Layer가 또 올 수 있어요.

또 다른 Filter 를 거쳐 다음 Convolution  작업을 한 뒤 Relu연산..다음 또  pooling layer에서 pooling 처리

이 세트(Convolution, pooling는 제한 없어요. 초록색 박스 전체가 Convolution 작업

 

 

이 작업을 거친 뒤 FALTTEN(FC layer)으로 들어가요.

그다음 hidden layer는 넣어도 되고 안 넣어도 돼요(일반적으로 잘 안 써요) → output layer에서 linear regression을 거친 뒤 softmax 해서 예측 결과가 나가요!

초록색 박스 전체가 Convolution layer 작업이 입력 데이터 역할(이미지에 대한 총 데이터(pixel data)

특징을 추출해서 특징을 입력으로 보냄 그다음 DNN처리

결국 Convolution 작업은 학습하는 작업이 아닌 특징을 뽑아내는 작업이에요.

weight와 bias를 업데이트하면서 동시 filter(이미지의 특징을 뽑아내는 역할)를 업데이트(Convolution) 하고,

그렇게 뽑아낸 특징을 가지고 학습 

 

 

Convolution 연산에 대해 알아보아요!

 

Convolution

합성곱 연산은 두 함수 A와 B가 있다면, 하나의 함수를 반전(Reverse), 전이(Shift) 시킨 후 다른 함수와 곱해서 나온 결과를 적분해요.....수학적 정의는 넘어가요~ 

 

그림을 통해서 convolution연산이 어떻게 수행되는지 알아보아요!

5 X 5 Image 데이터로 0과 1만 사용해서 알아보아요. → 입력데이터

 

Filter의 사이즈는 정방향(정사각) 형 형태로 임의로 잡아요. 크게 하는 것보다 작게 하는 게 좋아요.
3 X 3을 현업에서 많이 써요! →  Filter

Filter는 이미지의 좌측 상단에서 부터 시작해요.

그리고 같은 위치에 있는것 끼리 곱해서 그 결과의 합을 구해요.

CNN에서 이 Filter는 특징을 찾아내기 위해 공용 parameter 예요.

일반적으로 정방형 사용, 작은 size유리, 3X3 혹은 4X4를 많이 이용해요!

 

Filter는 여러 개 쓸 수 있어요! 이 Filter를 지정된 간격으로 이동시키면서 입력으로 들어온
입력 이미지 데이터와 합성곱 연산을 반복적으로 시킬 수 있어요!

 

지정된 간격 → stride

if stride가 1이면 계산한 뒤 우측으로 한칸 이동해서 합성 곱

오른쪽으로 이동이 끝나면 밑으로 내려가요.

 

 

결과는  3 X 3으로 떨어져요 .

 

stride가 2이면 2 X 2 

stride가 3이면 5X5 데이터기 때문에 filter 사이즈가 안 맞아서 사용할 수 없어요!

stride는 filter의 크기와 연관해서 사용해야 해요.

stride에 따라서 결과 데이터가 바뀌어요 .

stride의 결과가 잘 정리된 해당 이미지를 잘 표현하는 특징추출!! 

 

결국 Convolution은 우리의 입력 데이터가 있고 filter 데이터가 존재해야 해요.(각 layer 하나마다 filter 존재)
filter와 입력 데이터를 mapping 시켜서 stride로 이동시키고 각 위치에 있는 것들끼리 곱해서 나온 수를 더한 뒤

결과 데이터를 만들어서 특징을 뽑아낸 데이터를 만들어 결과 데이터를 추출해요.

LIST

'머신러닝 딥러닝' 카테고리의 다른 글

0928 CNN 구현(tf 1.15, tf 2.x)  (0) 2021.09.28
0927 CNN(Convolution Neural Network)  (0) 2021.09.27
0917 Image 처리의 기본  (0) 2021.09.17
0916 Deep Learning  (0) 2021.09.16
0915 mnist  (0) 2021.09.16

댓글