일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- 부스트캠프
- Tensor
- SGD
- wordcloud
- selenium
- 웹스크래핑
- 시각화
- 추천 시스템
- 추천시스템
- Cosine-similarity
- 데이터
- 머신러닝
- Python
- Overfitting
- recommendation system
- 코테
- 딥러닝
- 데이터 엔지니어링
- 알고리즘
- 협업 필터링
- TF-IDF
- 코딩테스트
- coursera
- 웹크롤링
- pytorch
- 분산 시스템
- 프로그래머스
- 백준
- 파이썬
- codingtest
- Today
- Total
개발자식
[딥러닝] CNN 본문
CNN
- Convolutional Neural Network의 약자로 일반 Deep Neural Network(DNN)에서 이미지나 영상과 같은 데이터를 처리할 때 발생하는 문제점들을 보완한 방법이다.
- convolution 작업을 수행하는 신경망
DNN의 문제점은?
- 이미지는 480x480과 같은 형태로 표현되어 하나의 row로 표현되지 않아 하나의 row로 변환하게 되는 순간 데이터는 큰 손실을 갖게 된다.
- 그래서 DNN은 이미지 행렬을 하나의 row로 만들고 신경망에 입력으로 넣어 가중치를 계산하여 정보 손실이 크다.
- CNN은 사람이 보는 것처럼 이미지 행렬 2차원 배열에서 가로, 세로축 모두 합성곱 연산과 풀링 연산으로 특징점을 추출하기에 정보 손실이 적다.
- 연산량도 CNN이 더 적다.
- CNN은 새로운 모델이라기보다 graphical feature를 추출하는 것에 초점을 맞춘 모델이다.
그래서 CNN은 어떻게 학습시키는 것일까?
- 하나의 이미지로부터 픽셀 간의 연관성을 살린 여러 개의 이미지를 생성하는 과정을 반복한다. (Convolution)
- 해당 과정을 반복하면 이미지의 숫자는 많아지면서 크기는 점점 줄어든다. (with Pooling)
- 최종적으로 도출된 특정 이미지의 데이터는 1차원 row 데이터로 취급해도 무관한 상태가 된다. (Flatten)
- DNN과 동일하게 만들어진 네트워크를 통해서 output을 출력한다.
cnn의 핵심 convolution
- filter를 원본 이미지에 적용하는 방식이다.
- input data에 필터를 일정 간격(stride)으로 이동시키면서 연산을 적용시키는 것이다.
-> 이미지 전체를 보는 것이 아니라 부분을 보는 것이 핵심 아이디어
convolution layer
- convolution layer에서는 특징을 추출하는 필터와 이 필터의 값을 비선형 값으로 바꿔주는 activation function으로 이루어져 있다.
- convolution layer의 학습 파라미터 수는 입력 채널 수 * 필터 폭 * 필터 높이 * 출력 채널 수이다.
convolution layer 출력 데이터 크기 계산
- 입력 데이터 높이 : H
- 입력 데이터 폭 : W
- 필터 높이 : FH
- 필터 폭 : FW
- stride 크기 : S
- 패딩 사이즈 : P
- 두 식의 결과는 자연수가 되어야 한다.
- 그리고 convolution 레이어 다음에 풀링 레이어가 온다면, feature map의 행과 열 크기는 polling 크기의 배수여야 한다.
convolution을 통해 특징을 추출하는 과정에서 이미지가 너무 많아지는 문제가 발생한다.
이러한 문제를 해결하기 위해서 Polling 작업을 진행한다.
polling layers란
- convolution을 거쳐서 나온 activation maps이 있을 때, 이를 이루는 convolution layer을 resizing 하여 새로운 layer를 얻는 것이다.
- polling을 convolution의 후속 과정이 아닌 별도의 개념으로도 정의한다. (matrix 연산을 사용하지 않고 각 픽셀에서 값을 뽑아내는 과정으로도 이해할 수 있다.)
- conv layer와 activation을 거쳐 나온 output인 activation feature map에 대하여 테크닉을 적용한다.
사용하는 이유는?
- 앞선 레이어들을 거치고 나온 output feature map의 모든 data가 필요하지 않기 때문이다.
효과는?
- 파라미터를 줄이기 때문에, 해당 네트워크의 표현력이 줄어들어 오버 피팅을 억제한다.
- 파라미터를 줄이므로, 그만큼 비례하여 computation이 줄어들어 hardware resource를 절약하고 속도가 증가한다.
특징은?
- training을 통해 train 되어야 할 파라미터가 없다.
- polling의 결과는 채널 수에는 영향이 없으므로 채널 수는 유지된다. (independent)
- input feature map에 변화가 있어도 polling의 결과는 변화가 적다. (robustness)
종류
- max polling
- average polling
- stochastic polling
- cross channel polling
- etc
polling 레이어 출력 데이터 크기
- 입력 데이터의 행 크기와 열 크기는 polling 사이즈의 배수여야 하기 때문에 polling 레이어의 출력 데이터의 크기는 행과 열의 크기를 polling 사이즈로 나눈 몫이다.
CNN 용어 정리
- 합성곱(convolution)
- 합성곱 처리 결과로부터 feature map을 만든다.
- 연산 과정
- 채널(channel)
- 컬러 이미지는 3개의 채널로 구성
- 흑백 이미지는 1개의 채널로 구성
- (높이, 폭, 채널)
- convolution layer에 유입되는 입력 데이터에는 한 개 이상의 필터(커널)가 적용된다. 1개 필터는 feature map의 채널이 된다. convolution layer에 n개의 필터가 적용된다면 출력 필터는 n개의 채널을 갖게 된다.
- 필터(커널)
- 이미지의 특징을 찾아내기 위한 공용 파라미터이다.
- 필터 = 커널
- 일반적으로 정사각 행렬로 정의된다.
- cnn에서 학습 대상이 필터 파라미터이다.
- stride
- 필터는 입력 데이터를 지정한 간격으로 순회하면서 합성곱을 계산하는데, 여기서 지정된 간격으로 필터를 순회하는 간격을 stride라고 한다.
- ex) stride = 2, 필터는 2칸씩 이동하면서 합성곱을 계산한다.
- feature map
- convolution layer의 입력 데이터를 필터가 순회하며 합성곱을 통해 만든 출력을 feature map 또는 activation map이라고 한다.
- feature map은 합성곱 계산으로 만들어진 행렬이고 activation map은 feature map 행렬에 활성 함수를 적용한 결과이다.
- padding
- convolution 레이어에서 Filter와 stride에 작용으로 feature map 크기가 입력 데이터보다 작은데 패딩을 이용해 출력 데이터가 줄어드는 것을 방지한다.
- 패딩은 입력 데이터의 외각에 지정된 픽셀만큼 특정 값으로 채워 넣는 것이다 (보통 0으로 채워 넣음)
- 추가로 이미지의 외각을 인식하는 학습 효과도 있다.
- pooling layer
- convolution layer의 출력 데이터를 입력으로 받아서 출력 데이터의 크기를 줄이거나 특정 데이터를 강조하는 용도로 사용한다.
- 일반적으로 polling 크기와 stride를 같은 크기로 설정하여 모든 원소가 한 번씩 처리되도록 설정한다.
아래의 사진으로 파라미터 개수와 출력 데이터의 크기를 계산해보자
- convolution layer1
- 입력 데이터 shape : (39,31,1)
- 출력 데이터 shape :
- row : (39 - 4) / 1 + 1 = 36
- col : (31 - 4) / 1 + 1 = 28
- channel : 20
- 학습 파라미터 : 4 * 4 * 1 * 20 = 320개
- max polling layer1
- 입력 데이터 : (36,28,20)
- 출력 데이터 :
- row : 36 / 2 = 18
- col : 28 / 2 = 14
- channel : 20
- 학습 파라미터 : 0
- convolution layer2
- 입력 데이터 shape : (18,14,20)
- 출력 데이터 shape :
- row : (18 - 3) / 1 + 1 = 16
- col : (14 - 3) / 1 + 1 = 12
- channel : 40
- 학습 파라미터 : 3 * 3 * 20 * 40 = 7,200개
- max polling layer2
- 입력 데이터 : (16,12,40)
- 출력 데이터 :
- row : 16 / 2 = 8
- col : 12 / 2 = 6
- channel : 40
- 학습 파라미터 : 0
- convolution layer3
- 입력 데이터 shape : (8, 6 ,40)
- 출력 데이터 shape : 필터 (3,3)
- row : (8 - 3) / 1 + 1 = 6
- col : (6 - 3) / 1 + 1 = 4
- channel : 60
- 학습 파라미터 : 3 * 3* 40 * 60 = 21,600개
- max polling layer3
- 입력 데이터 : (6,4,60)
- 출력 데이터 :
- row : 6 / 2 = 3
- col : 4 / 2 = 2
- channel : 60
- 학습 파라미터 : 0
- onvolution layer4
- 입력 데이터 shape : (3,2,60)
- 출력 데이터 shape :
- row : (3 -2) / 1 + 1 = 2
- col : (2- 2) / 1 + 1 = 1
- channel : 80
- 학습 파라미터 : 2 * 2 * 80 * 60 = 19,200개
- flatten layer
- fully connected neural network의 형태로 변경하는 레이어로 파라미터가 존재하지 않고, 입력 데이터의 shape 변경만 수행한다.
- 입력 데이터 : (2,1,80)
- 출력 데이터 : (160,1)
- softmax layer
- 분류 클래스 : 100개
- 입력 데이터 : (160,1)
- 출력 데이터 : (100,1)
- weight shape : (100,160)
- 파라미터 : 100 * 160 = 160,000개
출처 : http://taewan.kim/post/cnn/
CNN은 어떻게 파라미터 수를 줄이는 것일까??
-> parameter sharing
- (x, y)에서 어떤 patch feature가 유용했다면, 이 feature는 다른 위치(x2, y2)에서도 유용할 것이다를 전제로 각 depth 내에 뉴런들이 같은 가중치와 편향을 가지도록 제한한다.
- 여기서 depth는 신경망의 layer수가 아닌 feature map의 개수이다.
- 즉 depth방향으로 자른 2차원 slice를 ‘depth slice’라 할 때, 각 depth slice 내에 뉴런들이 하나의 파라미터를 서로 ‘공유’하도록 하는 것이다.
출처 : https://nanunzoey.tistory.com/entry/CNN-Parameter-Sharing
마지막으로 1x1 Convolution을 적용하는 이유는?
- 차원을 줄이고
- 파라미터 수는 줄이고 깊이는 늘리기 위해서이다.
-> 파라미터가 줄어들면 성능이 증가하는데, 깊이가 늘어나면 파라미터가 증가하기 때문에 1*1 convolution을 진행한다.
cnn 개념 용어를 정리하다 보니 길어졌다..!
틀린 부분이 있다면 지적해주세요!
'AI > Deep Learning' 카테고리의 다른 글
[딥러닝] 신경망, activation function, loss function (1) | 2022.10.08 |
---|---|
[딥러닝] 감성분석_BERT (0) | 2022.05.24 |
[딥러닝] 딥러닝 Summary (0) | 2022.05.01 |
[딥러닝] Batch Normalization (0) | 2022.05.01 |
[딥러닝] Avoiding Overfitting - Dropout (0) | 2022.05.01 |