일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- groupby
- Comparisons
- subplot
- BOXPLOT
- Python
- linalg
- namedtuple
- 최대가능도 추정법
- Python 유래
- 가능도
- scatter
- 정규분포 MLE
- Array operations
- VSCode
- boolean & fancy index
- 부스트캠프 AI테크
- type hints
- seaborn
- unstack
- python 문법
- Numpy data I/O
- dtype
- Python 특징
- 카테고리분포 MLE
- ndarray
- pivot table
- 딥러닝
- Numpy
- 표집분포
- Operation function
- Today
- Total
또르르's 개발 Story
[12-1] Convolution 연산 이해하기 본문
다층신경망(MLP)은 각 뉴런들이 선형모델과 활성함수로 모두 연결된 (fully connected) 구조였습니다.
1️⃣ Convolution 연산 이해하기
하지만 Convolution 연산은 이와 달리 커널(kernel)을 입력벡터 상에서 움직여가면서 선형모델과 합성함수가 적용되는 구조입니다. 아래 그림과 같이 $x$를 모두 활용하는 것이 아니라 $k$벡터에 해당하는 사이즈만 움직여가면서 연산하는 방식입니다.
따라서 가중치 행이 존재하지 않고 kernel에 따라 공통적으로 적용되기 때문에 parameter 사이즈를 많이 줄일 수 있습니다.
Convlution 연산의 수학적 의미는 "신호(signal)를 커널을 이용해 국소적으로 증폭 또는 감소시켜서 정보를 추출 또는 필터링"하는 것을 뜻합니다.
아래 수식에서 $z$를 움직여가면서 적분을 하거나 더해주는 방법입니다. ($z$, $i$는 kernel)
하지만 CNN에서 사용하는 연산은 사실 convolution이 아니고 cross-correlation이라고 부릅니다.
커널은 정의역 내에서 움직여도 변하지 않고(translation invariant) 주어진 신호에 국소적(local)으로 적용합니다.
아래 그림에서 파란색은 신호, 빨간색은 커널, 검은색은 결과를 나타냅니다.
Convolution 연산은 1차원뿐만 아니라 다양한 차원에서 계산이 가능합니다.
예를 들어, 2차원 convolution (2D-conv)은 두 개의 위치 $i$, $j$에 따라 움직입니다.
여기서 $i$, $j$, $k$값이 바뀌어도 커널 $f$의 값은 바뀌지 않습니다.
2️⃣ 2차원 Convolution 연산 이해하기
2D-Conv 연산은 커널(kernel)을 입력벡터 상에서 움직여가면서 선형모델과 합성함수가 적용되는 구조입니다.
아래와 같은 커널 $f(p,q)$와 입력 $g(i+p, j+q)$이 있을 때 아래와 같은 matrix 연산이 일어나게 됩니다.
2차원 Convolution 과정을 거친 후, 출력 크기는 다음과 같습니다.
(입력 크기를 $(H, W)$, 커널 크기를 $(K_{H}, K_{W})$, 출력 크기를 $(O_{H}, O_{W})$로 나타냄)
3️⃣ 3차원 Convolution 연산 이해하기
3차원은 대표적으로 RGB를 말할 수 있습니다.
3차원부터는 행렬을 tensor라고 부릅니다.
RGB에서 2차원 Convolution을 3번 적용한다고 생각하면 됩니다.
3차원 Convolution에서는 특히, 커널과 입력의 Channel 수를 맞추는 것이 중요합니다.
아래 사진과 같이 커널의 channel은 C개이며, 3차원 입력의 channel도 C개로 맞춰야 계산이 가능합니다.
이때 출력으로 나오는 channel수는 1개입니다.
만약 출력을 $O_{C}$개로 출력하고 싶다면 $O_{C}$개의 커널 수가 필요합니다.
4️⃣ Convolution 연산의 역전파
Convolution 연산은 커널이 모든 입력데이터에 공통적으로 적용되기 때문에 역전파를 계산할 때도 Convolution 연산이 나옵니다.
만약, 입력 $X$에 대해 커널 $W$를 convolution한 값이 $O$일 때, 순전파는 아래와 같이 진행됩니다.
여기서 입력 $X3$에서 출력 $O1, O2, O3$가 나오기 위해서는 커널 $W3, W2, W1$ 순으로 계산되게 됩니다.
다음 그림과 같습니다.
(각 $\delta$는 미분값을 의미합니다.)
이때, backpropagation을 위해 $\delta_{1}, \delta_{2}, \delta_{3}$이 들어오게 되면, Karpathy의 계산그래프 형태로 표현이 가능합니다.
(Karpathy의 계산 그래프 : 곱셈 노드의 역전파는, 순전파로 받은 입력에 대해 서로 바꾸어 곱해 진행함)
✅ Karpathy의 계산 그래프
- 덧셈 노드에서의 역전파
덧셈 노드에서의 역전파는 그 값을 그대로 흘려보냅니다. $z = x + y$라는 식이 있을 때, $z$에 대한 $x$의 미분값은 1이 됩니다. ($y$도 마찬가지입니다) 어떤 값에 1을 곱하면 자기 자신이 됩니다.
$$\frac {\partial z} {\partial x} = 1, \frac {\partial z} {\partial y} =1$$
- 곱셈 노드에서의 역전파
곱셈 노드에서의 역전파는 상대의 변수만큼을 그 계산 값으로 취합니다. $z=xy$라는 식이 있을 때 $z$에 대한 $x$의 미분 값은 y가 됩니다. ($y$도 마찬가지입니다.)
$$\frac {\partial z} {\partial x} = y, \frac {\partial z} {\partial y} = x$$
따라서 선형회귀 $y = Wx + b$ 식에서 backpropagation을 진행하면 가중치 $W1$와 입력 $X3$에 대한 그레디언트 $\delta_{1}$는 아래와 같이 표현이 가능합니다.
따라서 입력 $X3$에서 커널 $W1, W2, W3$에 전달되는 그레디언트 값은 아래와 같습니다.
이런 식으로 Convolution 연산의 backpropagation을 표현하면 아래 수식과 같습니다.
즉, 각 커널에 들어오는 모든 그레디언트를 더하면 결국 convolution 연산과 같습니다.
'부스트캠프 AI 테크 U stage > 이론' 카테고리의 다른 글
[14] RNN, LSTM, GRU 정리 (1) (0) | 2021.02.04 |
---|---|
[13] CNN(Convolutional Neural Network) (0) | 2021.02.03 |
[12] 최적화 (Optimization) 종류와 용어들 (0) | 2021.02.02 |
[11-2] PyTorch 기본문법 (0) | 2021.02.02 |
[11-1] Deep Learning의 발전 (0) | 2021.02.02 |