지난 글에서 배운 convolution은 일종의 필터이다.
이번시간에는 Convolution의 priniciple과 architecture을 배울 것이다.
cnn이 등장하게 된 이유를 살펴보자
2d 이미지에서 특정 물체를 인식하려면 어떻게해야할까?
ann으로 이미지를 분석하기 위해서는 이미지를 행벡터로 변환해야한다.
다시 말해 28x28 크기의 이미지를 1x784의 크기로 변환해야한다.
하지만 2d 이미지는 공간정보가 있기 때문에 크기를 변환(flattening) 해버리면 공간 정보가 파괴된다.
또한 ann 방식으로는 너무 많은 파라미터(weight와 bias)를 찾아야하기 때문에 작업 시간이 오래걸린다.
이러한 이유로 ANN 방식으로 특정 물체를 인식하기는 어렵다
그래서 cnn이 등장했다.
cnn은 이미지 전부를 분석하는 것이 아니라 전체 이미지 중 특정 물체의 이미지만 분석하는 locally-connected-layer을 이용한다.
이때 kernel을 이용하는데 이것은 일종의 필터이다. 그리고 kernel을 구하기 위해 학습시킨다.
CNN의 가장 특징은 가중치를 공유하며 local connectivity라는 것이다.
컬러 이미지의 크기는 (h,w,c)로 표현된다.
h : 높이, w : 너비, c : 채널(색깔)
cnn layer에서 무슨 일이 벌어질까?
다음 이미지와 같이 각각의 채널에 대해 convolution을 해주고 마지막에 sum을 해준다.
단순히 위와 같은 방식으로 convolution을 해버리면 이미지의 해상도가 낮아진다. 이를 개선하기 위해 padding을 이용할 것이다.
padding은 이미지의 가장자리에 인위적으로 값을 넣는 것을 의미한다. (일반적으로 zero-padding을 많이 사용)
stride는 convolution을 얼마만큼 옮겨갈지 정해주는 것이다.
한 칸, 두 칸씩 갈지 결정한다. --> output(activation map)의 크기를 결정
ann에서는 activation function으로 sigmoid를 사용하였는데 cnn에서는 relu를 사용할 것이다.
왜 cnn에서는 relu를 활성화함수로 사용할 까?
sigmoid의 도함수는 0에 수렴하는 부분이 있어 가중치를 학습할 때 역할을 제대로 하지 못하는 경우가 있기 때문이다.
pooling은 sliding window에서 max 값을 찾는 것이다.
마지막으로 cnn의 과정을 살펴보자.
input layer로 데이터가 들어오고 filter를 거쳐 convolution을 해준다. 그리고 relu 함수에 넣어준 뒤 출력된 값을 pooling 하여 output layer로 출력한다.
'프로그래밍 > 인공지능과 여름학교' 카테고리의 다른 글
4주차. CNN : convolution (0) | 2022.12.29 |
---|---|
3주차. ANN : 실습(tensorflow) (0) | 2022.12.28 |
2주차. ANN Optimization (0) | 2022.12.27 |
1주차. ANN_from Perceptron to MLP (1) | 2022.12.27 |