합성곱 신경망 (Convolutional Neural Network, CNN)
: CNN은 이미지, 동영상 등을 분석하는데 사용하는 알고리즘입니다.
완전연결 계층의 문제점
- 기존에 구현했던 완전 계측, 즉 기존 신경망은 데이터의 형상이 무시됩니다.
글자의 크기가 달라지거나 글자의 회전이 생기면 글자에 변형과 같이 글자에 변형이 조금만 생기더라도 다른 글자로 인식하기 때문에 새로운 학습 데이터를 넣어주지 않으면 좋은 결과 얻을 수 없습니다(패턴을 읽지 못하므로 인식을 위해 다양한 데이터 필요)
- 입력 데이터가 이미지인 경우, 이미지는 3차원(가로, 세로, 채널(색상))으로 구성된 데이터이나 1차원으로 평탄화해줘야 합니다.
합성곱 계층의 특징
- 원본 이미지를 가지고 여러개 특징 맵(feature map)을 만들어 분류 하는 완전 연결 계층으로, 이미지의 특징을 추출하기 때문에 이미지가 변형이 되더라도 잘 이닉할 수 있습니다(입력 데이터의 형상을 유지).
* 특징 맵(feature map) : CNN에서 합성곱 계층의 입출력 데이터
- 이미지도 3차원 데이터로 입력 받으며, 다음 계층에도 3차원 데이터로 전달합니다.
- 형상을 가진 데이터를 제대로 이해할 가능성이 있는 큽니다.
- 합성곱 연산
: 이미지 3차원(세로, 가로, 색상) data의 형상을 유지하면서 연산하는 작업으로, 입력 데이터에 적용한 것입니다.
<- 합성곱 연산을 기호로 표기
- 이미지 처리에서 말하는 필터 연산에 해당 합니다.
- 데이터와 필터의 형상을 (높이, 너비)로 표기 합니다.
- 위 예의 경우 입력은 (4, 4), 필터는 (3, 3), 출력은 (2, 2)
- 문헌에 따라 필터를 커널이라 칭하기도 합니다.
- 필터를 적용한 후 데이터에 더해집니다.
- 편항은 항상 (1 x 1)만 존재합니다.
패딩(padding)
: 합성곱 연산을 수행하기 전에데이터 주변을 특정값(예컨데 0) 으로 채워 늘리는 것을 의미합니다 .
- 합성곱 연산에서 자주 이용하는 기법 – 출력 크기를 조정할 목적으로 사용합니다.
+ 패딩을 하지 않을 경우 data의 크기는 합성곱 계층을 지날 때마다 작아지게 되므로 가장자리 정보들이 사라지는 문제가 발생하기 때문에 패딩을 사용합나다.
-입력 데이터 주위에 0을 채운다 (0 생략함)
- 처음에 크기가 (4, 4)인 입력 데이터에 패딩이 추가되어 (6, 6)이 됩니다.
- (3, 3) 크기의 필터를 걸면 (4, 4) 크기의 출력 데이터가 생성합니다.
스트라이드
: input 데이터에 filter를 적용하는 위치의 간격을 의미합니다.
- 필터를 적용하는 위치의 간격
- 스트라이드를 키우면 출력 크기는
작아짐
패딩, 스트라이드, 출력 크기 계산
- 입력 크기(H, W)
- 필터 크기(FH, FW)
- 출력 크기(OH, OW)
- 패딩 : P
- 스트라이드 : S
3차원 데이터의 합성곱 연산
: 이미지의 색은 보통 흑백이 아니라 RGB(Red, Green, Blue)컬러 이므로 RGB컬러에 대해서 합성곱을 해야합니다.
3차원 데이터 합성곱 연산의 계산 순서
- 3차원의 합성곱 연산에서 주의할 점
: 입력 데이터의 채널 수와 필터의 채널 수가 같아야 함.
- 필터 자체의 크기는 원하는 값으로 설정 가능.
(단, 모든 채널의 필터가 같은 크기여야 함)
3차원 합성곱 구현 이론
사진 한장을 RGB 필터로 합성곱하여 2차원 출력행렬(Feature map)을 출력하는 것입니다.
합성곱 연산의 처리 흐름(편향 추가)
합성곱 연산의 처리 흐름(배치 처리)
이미지를 한 장씩 학습시키는 것은 학습속도가 느립니다. 따라서 100장의 이미지를 묶음으로 나눠서 한번에 학습시킵니다. 이를 minibatch라고 합니다.
하지만 합성곱 계층을 미니 배치로 구현할 때 4차원 행렬의 연산이 됩니다. 따라서 연산의 속도가 느려지므로 행렬 연산을 빠르게 하기 위해 4차원이 아닌 2차원으로 차원을 축소해야할 필요가 있습니다. 이때!! im2col 함수를 사용합니다.
im2col 함수 원리 : 각 4차원 블럭을 R, G, B로 각각 나누어 2차원으로 변환 후 합쳐줍니다.
'Anaconda > DeepLearning' 카테고리의 다른 글
[DeepLearning] 오차역전파법 (backpropagation) (0) | 2020.08.10 |
---|---|
[DeepLearning] 확률적 경사 하강법(SGD), 학습 알고리즘 구현 (0) | 2020.08.07 |
[DeepLearning] 신경망 학습 (0) | 2020.08.06 |
[DeepLearning] 신경망(neural network) (0) | 2020.08.04 |
[DeepLearning] 넘파이(NumPy) (0) | 2020.08.03 |