본 게시물은 앤드류 응 교수의 CNN 강좌를 참고하여
개념이나 수식 등을 (내가) 한 번에 복습하기 편하게 정리해둔 게시글이다
계속해서 수정될 수 있음
https://www.coursera.org/learn/convolutional-neural-networks
Convolutional Neural Networks
deeplearning.ai에서 제공합니다. In the fourth course of the Deep Learning Specialization, you will understand how computer vision has evolved and become ... 무료로 등록하십시오.
www.coursera.org
컴퓨터 비전에서 주로 다루는 문제는 이미지분류, 객체 인식, 신경망 스타일 변형(style transfer) 등이 있다
컴퓨터 비전에서 큰 장애물 중에 하나는 입력데이터가 아주 크다는 것인데,
합성곱 연산을 활용하면 DNN에 비해 연산량이 매우 적은게 CNN의 장점 중 하나.
이미지는 (높이 x 넓이) 로 표현됨.
왼쪽 이미지는 원래 이미지, 중앙에 있는 3 x 3 행렬은 필터(filter) 또는 커널(kernel)이라 부른다.
각 원소를 합성곱한 뒤 전부 더해준다.
그후 다음 스텝으로 필터(커널)를 한칸 이동하여 합성곱 연산을 진행.
이렇게 이미지의 밑부분까지 진행하여 최종 4 x 4 의 새로운 행렬을 만들어 내고,
새로 생성된 행렬을 특성 맵(feature map)이라 한다.
이 행렬의 각 원소는 입력 이미지의 국부적인 픽셀패치(patch)에서 유도된다. (원본 이미지의 가장 작은 단위를 의미)
필터의 장점
작은 필터를 겹쳐 층을 깊게 할 수 있는데, 이때의 장점은 매개변수 수가 줄어든다는 것이다.
층을 깊게 한 신경망은 깊지 않은 경우보다 적은 매개변수로 같거나 그 이상의 수준의 표현력을 보일 수 있다.
층을 깊게 함으로써 학습 데이터의 양을 줄여 학습을 고속으로 수행할 수 있다는 의미이다. (효율성)
또한 신경망을 깊게 하면 학습해야 할 문제를 계층적으로 분해하고, 정보도 계층적으로 전달 할 수 있다.
즉, 각 층이 학습해야 할 문제를 더 단순한 문제로 대체할 수 있다는 것이다.
에지를 추출한 층의 다음 층은 에지 정보를 쓸 수 있고, 고도의 패턴을 효과적으로 학습할 수 있다고 생각할 수 있다.
즉, 층을 깊게 해서 각 층이 학습해야 할 문제를 풀기 쉬운 단순한 문제로 분해할 수 있어 효율적인 학습이라 생각할 수 있다.
합성곱에 사용되는 필터의 종류는 다양한데,
CNN은 학습을 통해 문제 해결에 적합한 필터를 알아서 찾아내는 것이 목적이기 때문에 따로 설정하진 않는다.
CNN의 한 계층은 합성곱 연산 -> bias 추가 -> 활성화함수(주로 ReLU) 순으로 이루어짐.
패딩(Padding)
합성곱 연산을 계속하면 출력 특성맵의 크기가 지속적으로 작아지므로 이를 방지하기 위해 원본 이미지에 패딩을 한다.
세임패딩을 가장 많이 사용하는데, 원본의 크기와 출력의 크기가 동일하게 패딩을 설정해주는 것을 의미한다.
일반적으로 필터의 크기는 홀수인데, 이는 패딩이 번거로워지는 특성 때문에 그렇다.
이미지 크기 = n
패딩 크기 = p
필터 크기 f 일때 합성곱 후 출력 특성맵의 크기는 아래 공식과 같다.
(n + 2p - f + 1) x (n + 2p - f + 1)
스트라이드(Stride)
기존 필터가 한칸씩 이동해서 계산했다면, 스트라이드를 주게 되면 그 수만큼 필터가 이동해서 계산한다.
스트라이드를 적용하면
1. 연산량이 줄어들고
2. 원본 이미지의 한 픽셀이 중복되어 추출되는 회수를 줄여주는 특성을 가진다.
s만큼 스트라이드 했을 때 출력 특성맵의 크기는 아래 공식과 같다.
((n + 2p - f ) / s + 1) x ((n + 2p - f ) / s + 1)
여기서 주의할 점은 크기가 소수라면 내림한다.
연산 예시:
28 x 28 x 3 이미지를 동일한 5 x 5 필터 20개를 사용해서 계산(패딩없고 스트라이드는 1) 한다면,
-> 24 x 24 x 20 크기의 출력이 나온다. (출력 특성맵의 개수는 앞서 필터 개수와 같다.)
필터의 크기가 커질수록 출력 이미지의 크기는 작아지고 개수는 많아지는(깊어지는) 형태를 보인다.
합성곱 연산에 필요한 총 변수의 크기는 5 x 5 x 3 x 20 + 20(bias 더해준 것) = 1520 이지만,
단순 신경망을 사용하여 같은 크기의 결과를 나타내려면
(28 x 28 x 3) x (24 x 24 x 20) + (24 x 24 x 20) = 27,106,560 만큼의 변수가 필요하다.
- 합성곱 신경망이 이렇게 적은 변수를 필요로 하는 이유 중 하나는 파라미터 공유이다. 어떤 한 부분에서 이미지의 특성을 검출하는 필터가 이미지의 다른 부분에서도 똑같이 적용되거나 반영이 된다는 의미다.
- 다른 하나의 이유는 희소 연결이다. 출력값이 이미지의 일부(작은 입력값)에 영향을 받고, 나머지 픽셀들의 영향을 받지 않기 때문에, 과대적합을 방지할 수 있다.
- 합성곱 신경망은 이동 불변성을 포착하는데도 용이하다. 이미지가 약간의 변형이 있어도 이를 포착할 수 있다.
풀링(Pooling)
합성곱층과 별개로 풀링층이 존재한다.
- 풀링 층을 사용해 표현의 크기를 줄임으로써 계산속도를 줄이고 특징을 더 잘 검출 해낼 수 있다.
- 국부적인 작은 변화가 최대 풀링의 결과를 바꾸지 못함을 의미한다. (작은 것들 제거하는 효과)
- 과대적합 방지 효과도 있다.
위 예시의 최대 풀링은 필터 크기 2, 스트라이드 2, 패딩이 없는 필터를 합성곱 연산이 아닌 최대 연산을 하는 것과 같다.
따라서 풀링층을 거친 출력값의 크기는 (4 - 2) / 2 + 1 = 2가 된 것이다.
'데이터사이언스 > 인공지능' 카테고리의 다른 글
PTB-XL ECG Dataset Description (0) | 2022.05.14 |
---|---|
텐서플로우 CPU 이용해서 학습하기 (GPU X) (0) | 2022.05.13 |
로컬에서 텐서플로우 gpu 사용 가능한 환경 설정 (CUDA, cuDNN 호환성 확인하기, MX450) (0) | 2022.02.15 |
기계번역 관련 참고자료 (1) | 2022.02.15 |
Van Gogh의 화풍으로 인물 초상화 만들기 (Style Transfer 실습) (1) | 2021.12.22 |