| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 자바
- ncbi
- 인공지능
- Java
- RNN
- COVID
- 결정트리
- 생명정보학
- 오류역전파
- 인공신경망
- HMM
- 시그모이드
- Kaggle
- AP
- 생물정보학
- 이항분포
- 블록체인
- 바이오인포매틱스
- MERS
- AP Computer Science A
- bioinformatics
- BLaST
- 딥러닝
- CNN
- 바이오파이썬
- 캐글
- SVM
- 서열정렬
- 인공지능 수학
- 파이썬
- Today
- Total
데이터 과학
CNN(합성곱) Algorithm 본문
Convolutional Neural Network(합성곱 신경망)를 약어로 CNN이라고 호칭합니다.
딥러닝의 가장 대표적인 알고리즘으로 많이 사용되고 있습니다. CNN, RNN, GAN, DQN이 딥러닝을 접할 때 기본적으로 학습하는 알고리즘들입니다.
CNN을 알아보면서 딥러닝 알고리즘을 학습해 봅시다. 이전 게시글에는 캐글에서의 예제를 통해 CNN알고리즘을 운영하는 방법을 배웠는데 그 원리와 방법에 대해 학습을 하도록 합니다.
90년대 이후 오류역전파의 문제점이 많이 나타나기 시작해서 판별함수의 문제점과 과적합의 성능 문제로 연구가 거듭되다가 2005년에 딥러닝 이론이 나왔다는 사실은 많이들 알고 있습니다. 이미지 프로세싱에서 CNN이 선구적인 역할을 했을 만큼 처음 배우는 알고리즘이 되겠죠.
오류역전파를 공부해 봤으면 인공신경망 알고리즘의 기본 구조에 대해 이해를 했을 것 같습니다.
입력 -> 가중치 연산 -> 은닉층 판별함수 -> 가중치 연산 -> 출력 판별함수
-> 오차 수정 -> 반복
생각보다 간단한 구조입니다.
CNN은 여기에서 Convolution 층과 Pooling 층으로 구분하여 중간중간에 판별함수로 연산을 하는 방법입니다. 나중에 Flattern이 하나 더 있다는 것이겠죠.
그리고, Feature extraction이라는 부분이 있습니다. 상태 추출이라고 하는데 각 사물의 특징을 나타내는 단어로 90년대부터 사용되어 왔던 인공지능의 기법 중 하나인데, CNN에서 사물의 특징을 판별할 때 사용하는 이론으로 적용해서 사용합니다.
일반서적이나 인터넷에 많이 돌아다니는 CNN 구조 하나 보고 갑시다.

28*28 이미지 파일을 분석하는 예제에서 Convolution Layer 에 대해 한번 살펴보면 다음과 같습니다.

소스 픽셀이 000 011 012 이며 컨볼루션 커널을 400 000 00(-4) 값으로 만들어 놓으면 행렬의 내적 연산을 통해 -8 값을 만들어 낼 수 있는데 이를 좀 더 자세하게 표현 내용은 아래에 있습니다.
이런 방식으로 표현도 가능하고 다른 블로그에서 나타내는 연산식은 다음과 같습니다.

5*5에서 3*3을 잘라서 필터를 응용해서 연산식을 만드는데 4로 결과가 나오는 것은 입력값에 대한 변환을 통해 가능합니다. 여기서 변환이라는 것은 수학적 방법을 적용해서 공식을 변화시킨 내용입니다.
1*1+1*0+1*1+0*1+1*1+1*0+0*1+0*0+1*1=4
Padding
5*5의 크기를 3*3으로 변환하였더니 주변에 손실되는 부분이 발생합니다. 이를 적절한 값으로 채워줘야 하는데 이를 Padding(충전)이라고 합니다.
방법에는 zero padding, valid padding, full padding, same padding이 있습니다.
zero padding은 셀 주변을 0으로 채워주는 것이며, valid padding은 합성곱 연산할때 변환 없이 사용하는 방법으로 중심에 있는 값이 주변부 값보다 높아진다는 단점이 있습니다.
full padding은 valid padding에서 모든 셀들의 연산이 공평하게 이루어지지 않아 발생할 수 있는 문제를 개선하여 필터의 폭을 줄여주는 방법입니다.
same padding은 출력 크기를 입력크기와 동일하게 만들어주는 방법으로 나타냅니다.
padding 내용 참고 사이트
선생님, Padding은 뭔가요? 밸리드 패딩 / 풀 패딩 / 세임 패딩
패딩(padding)의 사용은 앞에서 언급했듯이 출력 크기를 보정하기 위해 사용하며 ‘충전재’라는 의미처럼 입력 데이터의 사방을 특정 값으로 채우는 것을 말한다. 일반적으로 특정 값은 그냥 0을
ardino.tistory.com
stride
https://machine-geon.tistory.com/46
합성곱 신경망 (CNN, Convolution Neural Network)
CNN을 학습하며 설명이 좋은 글들을 모았으며, 이해한것을 바탕으로 추가적인 해석을 붙였놓았습니다. 고난이도가 아니며, 저와같은 초보분들의 이해가 쉽도록 최대한 신경쓰며 정리중입니다. C
machine-geon.tistory.com
2차원 이미지 문제는 위의 방법으로 해결이 되는데 3차원에서는 아래와 같은 방법으로 필터를 사용해서 합성곱을 사용하면 됩니다.
3*3*3 Tensor를 나타낸 그림

Convolution Layer

28*28 이미지를 10개의 필터를 사용하여 24*24 크기의 Convolution 결과를 나타냅니다. 이후에는 활성화 함수인 ReLu 함수를 사용하여 발산을 합니다.
채널(Channel)
합성곱 신경망에서 입력값을 넣어서 변환 할때 채널을 기준으로 그 변환값을 만드는데 채널에 대한 정의는 어떤 이미지 값을 넣느냐에 따라 결정을 합니다.
컬러 사진의 경우는 RGB 3개의 값(Reb, Green, Blue)으로 표현된 색상이기에 채널을 3개로 구성하며 흑백 사진의 경우는 2차원 데이터로 1개의 채널로 구성됩니다.
입력값이 400*400 일때 컬러사진 같이 채널이 3개면 (400, 400, 3)으로 표기하고, 흑백이면 채널이 1이기 때문에 (400, 400,1)로 표기합니다.

합성곱 신경망(Convolutional neural network : CNN)이란?
☞ 문서의 내용은 가장 하단 참고문헌 및 사이트를 참고하여 필자가 보기 쉽도록 정리한 내용입니다. ☞ 틀린 내용 및 저작권 관련 문의가 있는 경우 문의하시면 수정 및 삭제 조치하겠습니다. C
ctkim.tistory.com
Pooling Layer
많은 결과값을 계산하기 어려워서 결과를 축소화하는 과정이 필요한데 이를 Pooling이라고 합니다.
풀링은 최대값만 나타내는 Max Pooling이 있고, 평균값을 나타내는 Average Pooling이 있습니다.

풀링을 통해 24*24 의 이미지 크기가 12*12로 줄어들었습니다.
다시 한번 Convolution Layer
12*12 크기의 결과를 가지고 다시 한번 합성곱 작업을 해서 5*5 크기를 가진 필터 10개 만들어서 연산을 합니다. 이후에는 8*8*20개의 크기를 가진 결과가 나타납니다.
다시 한번 Pooling Layer
한번 더 풀링 작업을 하면 4*4*20개의 결과 나타냅니다.
Flattern
행렬로 연산된 결과를 일자형으로 배열로 나타내는 방법으로 4*4*20 행렬이 320개의 배열로 나타납니다.
마지막 활성화 함수는 Softmax를 적용하면 CNN 알고리즘의 끝을 나타냅니다.
참고 사이트: https://cs231n.github.io/convolutional-networks/
CS231n Convolutional Neural Networks for Visual Recognition
Table of Contents: Convolutional Neural Networks (CNNs / ConvNets) Convolutional Neural Networks are very similar to ordinary Neural Networks from the previous chapter: they are made up of neurons that have learnable weights and biases. Each neuron receive
cs231n.github.io
http://halfundecided.medium.com/딥러닝-머신러닝--cnn-convolutional-neural-networks-쉽게-이해하기-836869f88375
[딥러닝/머신러닝] CNN(Convolutional Neural Networks) 쉽게 이해하기
필자는 뉴욕에서 머신러닝 전공으로 석사학위 취득과정에 있습니다. 학교 수업을 듣고 실습 과제를 하며 항상 느끼는 점은 이 분야는 무엇보다도 튼튼한 이론지식이 중요하다는 것입니다. 물론
halfundecided.medium.com
https://all-young.tistory.com/43
CNN(Convolutional Neural Network) 구조, 합성곱(Convolution), 필터(Filter), 채널(Channel), 특징 맵(Feature Map)
들어가며 포스팅된 글은 아래에 첨부된 논문과 유튜브 영상을 바탕으로 공부를 한 내용입니다. 이외에도 구글링을 통해 다양한 글들을 참고하며 공부한 내용을 포스팅 한 것 입니다. 더보기 논
all-young.tistory.com
https://velog.io/@gomgom17/%EB%94%A5%EB%9F%AC%EB%8B%9D-CNN-Convolutional-Neural-Network
(딥러닝) CNN, Convolutional Neural Network
딥러닝, CNN, 컴퓨터 비전
velog.io
'인공지능 > 딥러닝 -파이썬 인공지능' 카테고리의 다른 글
| 고양이와 개의 분류 예제 - CNN (케라스) (0) | 2022.10.23 |
|---|---|
| MNIST 예제 (1) | 2022.09.14 |
| 비주얼 스튜디오에서 텐서플로우 설치 (0) | 2022.05.22 |
| CNN Keras (0) | 2022.04.27 |
| numpy (0) | 2022.03.30 |