이전 포스팅에서 CNN의 구조적인 특징에 대해 알아보았습니다. 특이한 점이 합성곱 계층과 풀링 계층이 있다는 거여죠. 이 글에서는 합성곱의 역할과 연산방법 등에 대해 알아보도록 하겠습니다.
합성곱의 역할
합성곱은 데이터의 특징을 찾아서 이미지를 인식하기 위해 사용 됩니다. 가장 기초가 되는 특징(feature)부터 확인하고 그 특징들을 조합해서 복잡한 특징이 존재하는지 살펴본 뒤 마지막으로 물체를 분류하는 방식입니다. 예를 들어, 아래 단계처럼 동작하는 것이죠.
- 1단계 : 가로, 동그라미, 세모, 부드러움
- 2단계 : 눈, 코, 귀, 발
- 3단계 : 고양이
합성곱 연산
합성곱 연산은 이미지 처리에서 말하는 필터 연산을 말합니다. 우선 아래 세 가지 개념을 알고 있어야 합니다.
- 입력(input) 데이터 : 이미지 데이터
- 필터(mask) : 합성곱으로 곱해지는 항(가중치), 커널이라고도 말함
- 편향 : 1x1 항상 하나의 값만 존재하며, 더하기(+) 연산을 함
합성곱 연산 방법
- 윈도우(window)를 일정 간격으로 이동해 가며 입력 데이터에 필터를 적용
- 입력과 필터에서 대응하는 원소끼리 곱한 후 그 총합을 구하는 방식
- 예를 들어, 회색으로 칠해진 항과 필터를 곱함 (1 * 2 + 2 * 0 + 3 * 1 + … 0 * 0 + 1 * 2 = 15)
- 편향은 항상 하나의 값 (1x1) 만 존재하며 +를 해줌
완전연결 신경망에서는 각 뉴런마다 가중치 매개변수와 편향이 존재하는데, CNN에서는 필터의 매개변수가 가중치에 해당하는 것이 다릅니다. 그렇다면 여기서 필터 값은 어떻게 설정해야 할까?
필터의 역할
우리가 자주 사용하는 포토샵은 필터 값을 미리 정해놓고 사용합니다. 예를 들어, '화사하게', '상쾌' 등이 있죠. 그런데 딥러닝은 정해져 있지 않습니다. 필터 초기값은 임의의 랜덤 값으로 설정합니다.
학습의 원리에 의해 필터(가중치) 값들은 점점 물체를 잘 인식할 수 있는 값으로 업데이트(update) 되는 원리입니다. 이건 딥러닝의 원리이고 "필터의 값 = 가중치"라는 이야기 입니다.
필터의 사이즈는 VGG net 이후 일반적으로 3x3을 사용합니다. 효과가 좋았기 때문이죠. 사이즈를 키우면 그 만큼 파라미터는 많아져서 더 포괄적이게됩니다. 단점은 연산량이 많아진다는 것이죠. 그래서 필터 사이즈를 키우는 것보다 Layer를 더 쌓은 것을 선호합니다. 그렇다면 이렇게 필터의 크기를 3x3으로 고정하면 동일한 input에 대해서는 output 사이즈가 동일하게 나올 것입니다. 그런데 출력 크기를 조정할 수 있는 방법이 있습니다. 바로 패딩입니다.
패딩의 역할
필터를 고정하면 출력(output)의 크기를 조정할려면 input의 크기를 변경하는 방법밖에는 없습니다. 패딩은 입력 데이터 주변을 특정값으로 채우는 방법입니다. 예를 들어, 4x4 크기의 입력 데이터를 폭 1짜리 패딩을 하게 되면 가장 바깥으로 특정 값을 채워서 5x5의 입력 데이터를 만들수 있습니다.
계산해 보면, (4,4) 입력 데이터에 (3,3)의 필터 데이터를 합성곱 연산하면, 출력은 (2,2)가 되지만, 패딩을 한번 더 설정하면 (4,4)로 크기가 유지됩니다. 이때 채운 1짜리 패딩은 0값을 가집니다. 연산을 수행하면 할 수록 크기가 줄어들 수 있기 때문에 패딩을 적절히 사용하여 입력 데이터의 공간적 크기를 고정한 채로 다음 계층으로 데이터를 전달할 수 있습니다. 더 많은 층(Layer)를 쌓을 수 있는 방법입니다.
스트라이드 원리
그런데 필터가 꼭 한칸씩만 이동해야 할까요? 반드시 그럴 필요는 없습니다. 이 개념이 바로 스트라이드(stride)입니다. 이는 필터를 적용하는 위치의 이동하는 간격을 말합니다. 그림에서는 필터를 두 칸씩 이동하여 연산을 수행하였는데요. 이는 스트라이드 값이 2임을 의미합니다. 즉, 스트라이드를 2로 하면 윈도우가 2칸씩 움직이는 것을 알 수 있습니다.
출력크기 조절
앞에서 배운 개념들을 생각해 보면 스트라이드와 패딩을 통해 우리는 얼마든지 출력 사이즈를 조정할 수 있습니다. 이는 여러개 층을 쌓을 때 여러가지 방법을 테스트 해 볼 수 있는 조건이 됩니다. 정리해 보면 아래와 같습니다.
- 스트라이드의 값(↑)을 늘리면 출력 크기(↓)가 줄어든다.
- 패딩의 값(↑)을 늘리면 출력 크기(↑)가 늘어나게 된다.
- 수식 : $ 𝑂𝐻=\frac{𝐻+2𝑃−𝐹𝐻}{𝑆}+1 , 𝑂𝑊=\frac{𝐻+2𝑃−𝐹𝑊}{𝑆}+1 $
입력 데이터 크기를 (H, W), 필터 크기를 (FH, FW), 출력 크기를 (OH, OW), 패딩을 P, 스트라이드를 S로 설정 하게 되면 위의 수식과 같이 출력의 크기가 결정이 됩니다. 주의 사항은 위의 나눗셈이 정수로 나누어 떨어져야 합니다.
'딥러닝' 카테고리의 다른 글
CNN의 3차원 계산 및 분류 과정 (0) | 2024.02.26 |
---|---|
CNN의 풀링(Pooling) 이유 및 연산 (1) | 2024.02.23 |
CNN의 구조적 특징은 무엇인가? (0) | 2024.02.20 |
자기조직화지도(SOM, Self-Organizing Map) 작동 방식과 활용 (0) | 2024.02.19 |
하이퍼파라미터 튜닝 베이지안 최적화(Bayesian Optimization) (0) | 2024.02.15 |