거의 알고리즘 일기장
CNN (합성곱 신경망) 본문
CNN의 필요성
이론적으로는 ANN으로도 모든 함수를 근사할 수 있다고 알고있지만, 이미지 데이터에 직접 이용해보면 성능이 좋지 않다.
그 이유는 밑의 그림을 보면 이해가 빠를것이다.
사람이 보기에는 그냥 x와 기울어진 x이지만 컴퓨터에게는 전혀 다른 input이다. 그러므로 만약에 기울어지지 않은 x의 데이터만 학습한 모델은 오른쪽과 같이 기울어진 x는 판별하기 힘들것이다. 이처럼 기본적인 ANN은 변형된 데이터에 약하다.
사실 왼쪽과 오른쪽의 이미지의 특징은 비슷하다. 밑의 그림을 보면 알수 있다.
그래서 나온게 CNN이다. 사람처럼 이런 변형된 x라도 이러한 이미지의 특징을 뽑아 훈련시켜 판별할 수 있게끔 하는 신경망이다.
CNN의 연산 과정
위의 그림이 정말 잘 설명해둔 그림이다. 왼쪽의 입력 이미지를 가운데의 필터가 왼쪽 위부터 지나가면서 오른쪽의 특징을 뽑은것이다.
Padding과 Pooling
Padding
쉽게 생각하면 Padding은 필터의 사이즈나 스트라이드에 따라 특징을 뽑을 이미지가 계속 줄어들수있으므로 이를 방지하기 위해 이미지를 층으로 감싸는것이다.
Pooling
이건 이미지의 사이즈를 줄어들게 한다고 생각하면 된다. 밑의 그림 참고하면 간단하게 이해가 가능하다.
MNIST CNN예제
유명한 MNIST예제이다. 밑의 git링크 참고. pytorch로 짰음.
github.com/Kwonkunkun/DeepLearning/blob/main/CNN%20MNIST.ipynb
e2eml.school/how_convolutional_neural_networks_work.html
위의 링크는 영어자료지만 CNN을 알기에 좋은자료인것 같아 참고하길 바란다.
'파이토치 첫걸음' 참고함.
'딥러닝' 카테고리의 다른 글
ANN (인공신경망) (0) | 2020.10.02 |
---|---|
선형회귀분석 (0) | 2020.10.02 |
CT사진에서 폐사진만 가져오기!! (0) | 2020.09.29 |