[Ⅳ. Convolutional Neural Networks] Convolutional Neural Networks (5)
Convolutional Neural Networks
Foundations of Convolutional Neural Networks
Simple Convolutional Network Example
지난 번에는 합성곱 신경망의 단일 합성곱 레이어의 구성 요소를 살펴보았습니다. 이번에는 심층 합성곱 신경망의 예시를 한 번 살펴보겠습니다. 그리고 이전에 다루었던 표기법들에 대한 연습도 될 것입니다.
Example ConvNet
이미지가 하나 있는데 이미지 분류 혹은 이미지 인식을 한다고 가정 해 보겠습니다. 인풋 이미지 $X$를 가지고 이게 고양이인지 아닌지 0인지 1인지를 결정해야 하기 때문에 분류 문제입니다. 이 작업을 위해 사용할 수 있는 합성곱 신경망의 예시를 만들어 보겠습니다.
이 예시에서는 $39 \times 39 \times 3$의 작은 이미지를 사용하겠습니다. 이렇게 하면 숫자들이 계산하기에 편리해지죠. 레이어 0에 있는 $n_H$ 가 $n_W$ 와 같아지면 높이와 넓이는 39가 됩니다. 그리고 레이어 0에 있는 채널의 수는 3이 됩니다.
첫 번째 레이어가 $3 \times 3$ 필터 세트를 사용해서 속성을 검출한다고 가정하겠습니다. $3 \times 3$ 필터를 사용하기 때문에 $f^{[1]}$ 은 3 입니다. 스트라이드 1을 사용하고 패딩은 없다고 가정해 보겠습니다.
세임 합성곱을 사용하고 필터는 10개 입니다. 그러면 신경망의 다음 레이어의 활성값은 $37 \times 37 \times 10$ 이고 10은 10개의 필터를 의미하고 37은 공식이었던 $\dfrac{n + 2p - f}{s} + 1$에서 도출됩니다.
그래서 $\dfrac{39 + 0 - 3}{1} + 1$은 37이 됩니다 따라서 출력은 $37 \times 37$ 이고 밸리드 합성곱이며 출력의 크기입니다. 따라서 우리의 표기법에서는 $n_H^{[1]} = n_W^{[1]} = 37$ 이고 $n_C^{[1]} = 10$ 이며 $n_C^{[1]}$는 첫 번째 레이어의 필터 개수와 동일합니다. 이것이 첫 번째 층의 활성값의 크기가 됩니다.
또 다른 합성곱 층이 있다고 해봅시다. 이번에는 $5 \times 5$의 필터를 사용하겠습니다. 우리가 사용하는 표기에 의하면 신경망의 다음 레이어에 해당하는 $f^{[2]} = 5$ 가 되고 스트라이드 2를 사용하고 패딩은 없으며 필터는 20개 입니다.
그러면 출력의 크기는 $17 \times 17 \times 20$ 이 됩니다. 이번에는 스트라이드를 2 로 설정했기 때문에 크기가 훨씬 빨리 줄어들었습니다. $37 \times 37$ 이 절반보다 조금 큰 $17 \times 17$로 줄어들었죠. 그리고 20 개의 필터를 사용하기 때문에 채널의 수는 20 입니다.
그래서 활성값 $a^{[2]}$는 이 크기를 가집니다. $n_H^{[2]} = n_W^{[2]} = 17$ 이고 $n_C^{[2]}$는 20 입니다.
마지막으로 하나의 합성곱 레이어를 더 적용해 보겠습니다. $5 \times 5$의 필터와 스트라이드 2를 사용하면 계산은 생략하겠습니다. 이렇게 하면 $7 \times 7$ 이 되고 40개의 필터를 사용하고 패딩은 없습니다. 결국 $7 \times 7 \times 40$ 가 됩니다.
지금까지 $39 \times 39 \times 3$의 입력 이미지의 $7 \times 7 \times 40$개의 특성을 계산했습니다. 일반적으로 $7 \times 7 \times 40$을 취하면 $7 \times 7 \times 40$은 1960 인데 이것을 계속해서 펼쳐서 1960 개의 요소로 만드는 것입니다.
펼쳐서 하나의 백터로 만든 뒤 로지스틱 회귀 유닛이나 소프트맥스 유닛에 넣게 되면 고양이인지 아닌지 인식하거나 k 개의 물체를 인식하느냐 등 방식의 차이에 따라서 이것이 신경망의 최종 예측값이 됩니다.
마지막 과정을 좀 더 분명히 하면 모든 숫자인 1960 개의 숫자들을 하나의 긴 백터에 넣고 이긴 백터를 소프트맥스 함수나 로지스틱 회귀 함수에 넣어서 최종 예측을 합니다. 이것이 합성곱 신경망의 일반적인 예시입니다.
합성곱 신경망을 디자인 하는 일은 대부분 필터의 크기나 스트라이드나 패딩 또는 필터의 개수 같은 하이퍼파라미터를 선택하는 과정입니다.
이 시점에서 알 수 있는 것은 신경망이 깊어질수록 $39 \times 39$ 같은 더 큰 이미지에서 시작해서 높이와 너비가 비슷하게 유지되다가 신경망이 깊어질 수록 줄어든다는 것입니다. 39가 37, 17, 7로 작아졌습니다.
반면에 채널의 수는 3 에서 10, 20, 40 으로 늘어났습니다. 그리고 많은 합성곱 신경망에서 이러한 경향을 볼 수 있을 것입니다.
이후에는 이런 변수들을 선정하는 지침을 드리겠습니다. 합성곱 신경망의 첫 번째 예시를 살펴봤습니다.
Types of layer
일반적인 합성곱 신경망에는 세 종류의 레이어가 있습니다. 하나는 합성곱 층이고 주로 CONV 레이어라고 표현됩니다. 바로 지금까지의 신경망에서 사용하던 것입니다.
그리고 아직 다루지 않은 두 종류의 레이어가 있습니다.
하나는 풀링 레이어인데 종종 풀이라고 부릅니다. 마지막은 FC라고 하는 완전히 연결된 레이어입니다. 합성곱 층만 사용해도 충분히 좋은 신경망을 설계할 수 있지만 대부분의 신경망의 구성에는 풀링 레이어와 완전 연결 레이어가 있습니다.
다행히도 풀링 층과 완전 연결 레이어는 합성곱 레이어 보다 정의가 간단합니다. 그래서 이어서 빠르게 다루어 볼 것이고 그러면 합성곱 신경망의 가장 흔한 층에 대해 이해가 될 것입니다. 그리고 같이 조합했을 때 더 강력한 신경망을 형성할 수도 있습니다.
Pooling Layers
합성곱 레이어 외에도 합성곱 신경망은 풀링 레이어를 사용하여 표현 크기를 줄임으로써 계산 속도를 높이고 특성을 훨씬 더 잘 검출해낼 수 있습니다.
Max Pooling
먼저 풀링의 예를 보고 그 이유를 살펴봅시다. $4 \times 4$ 크기의 입력이 있고 최대 풀링이라는 풀링을 적용한다고 할 때 최대 풀링을 구현한다면 $2 \times 2$의 출력이 나올 것입니다.
방법은 굉장히 간단합니다. $4 \times 4$ 의 입력을 입력을 여러 구간으로 나누면 되는데 4개의 구간을 다음과 같이 칠하면 $2 \times 2$ 의 출력에서 각각의 출력은 해당 색의 구간에서 최대값이 됩니다.
왼쪽 상단의 4개의 숫자 중 최대값은 9 이고 오른쪽 상단의 파란색 숫자의 최대 값은 2입니다. 왼쪽 하단의 최대 숫자는 6이고 오른쪽 하단의 최대 숫자는 3입니다.
오른쪽의 각 숫자를 계산하기 위해서는 $2 \times 2$ 영역의 최대값을 취합니다. 필터의 크기가 2이고 스트라이드가 2인 $2 \times 2$ 영역을 취하는 것입니다. 이것이 최대 풀링의 하이퍼파라미터입니다.
필터 크기인 $2 \times 2$의 영역에서 9를 얻고 두 칸을 이동한 다음 영역에서 2를 얻고 행을 두 칸 내려가면 6을 얻고 또 오른쪽으로 두 칸 이동하면 3을 얻습니다. 정사각형이 $2 \times 2$ 이므로 $f=2$가 되고 스트라이드는 2 이므로 $s=2$가 됩니다.
최대 풀링이 하는 작업을 한 번 생각해보면 이 $4 \times 4$ 입력을 큰 숫자가 아닌 어떤 특성의 집합이나 신경망의 레이어에서 활성값이라고 생각한다면 특정 특성에 의해 검출됨을 의미합니다.
따라서 왼쪽 상단 사분 면에는 특별한 특성이 있습니다. 수직 엣지이거나 고양이를 검출할 경우 눈이나 수염일 수 있습니다. 이런 특성은 왼쪽 상단 사분 면에 존재합니다. 이 특성이 고양이의 눈을 검출하는 것이 아닐수 있고 오른쪽 상단 사분면에 이 특성이 존재하지 않을 수도 있습니다.
따라서 최대 연산은 이러한 특성이 한 곳에서 발견되면 그것을 최대 풀링의 결과로 도출합니다. 그래서 최대 연산이 하는 일은 한 특성이 필터의 한 부분에서 검출되면 높은 수를 남기고 만약 특성이 검출되지 않아서 특성이 오른쪽 상단 사분면에 존재하지 않으면 그 안의 최대값은 여전히 작은 수로 남게 됩니다.
이것이 바로 최대 풀링의 직관력입니다. 하지만 사람들이 최대 풀링을 사용하는 주된 이유는 많은 실험 속에서 성능이 좋고 방금 말한 직관력 때문이겠지만 아무도 그 이유를 완전히 알지는 못합니다.
합성곱 신경망에서 최대 풀링이 잘 작동하는 이유를 완전히 아는 사람은 없을것 같습니다. 최대 풀링의 한 가지 흥미로운 점은 여러 하이퍼파라미터가 있지만 학습할 수 있는 변수는 없다는 것입니다. 경사 하강에 대해 배울 것이 없습니다. $f$와 $s$가 고정된 값이라면 고정된 계산이고 경사 하강은 아무것도 바꾸지 못합니다.
또 다른 하이퍼파라미터의 예시를 한 번 살펴보겠습니다. 여기 $5 \times 5$ 의 입력이 있고 적용할 최대 풀링의 필터 크기는 $3 \times 3$ 이라서 $f=3$이고 스트라이드는 1을 적용하겠습니다. 그러면 출력의 크기는 $3 \times 3$ 이 되겠죠.
이전 강의에서 도출한 합성곱 레이어에서 출력을 계산하는 공식이 최대 풀링에서도 성립합니다. $\dfrac{n + 2p - f}{s} + 1$의 공식으로 최대 풀링의 출력 크기를 계산할 수 있습니다.
하지만 이 예시에서는 $3 \times 3$ 출력의 각 요소들을 한 번 계산해 보겠습니다. 왼쪽 상단의 요소를 살펴보겠습니다.
필터의 크기가 3이기 때문에 $3 \times 3$ 의 영역이고 최대값을 취합니다. 그러면 9가 되고 스트라이드가 1이기 때문에 한 칸 이동합니다. 파란 상자의 최대값은 9가 되고 한 칸 더 이동하면 파란 상자의 최대값은 5가 됩니다.
그리고 다음 행으로 이동하는데 스트라이드가 1 이기 때문에 한 칸 아래로 이동하겠습니다. 이 영역의 최대값은 9이고 이 영역의 최대값은 9이고 5가 두 개가 있군요. 이 영역의 최대값 5가 있습니다.
마지막으로 왼쪽 하단 영역의 최대값은 8이고 이 영역의 최대값은 6입니다. 오른쪽 하단의 최대값은 9입니다.
그래서 $f = 3, s = 1$인 하이퍼파라미터로 이런 출력이 나오게 됩니다. 지금까지 2차원 입력에 대한 최대 풀링을 살펴봤습니다. 3차원 입력이라면 출력도 같은 차원을 가집니다.
만약 $5 \times 5 \times 2$라면 출력은 $3 \times 3 \times 2$가 되겠죠. 그리고 최대 풀링을 계산하는 방법은 방금 했던 계산을 그대로 각 채널에 적용하는 것입니다.
여기에 보이는 첫 번째 채널은 이렇게 위쪽에 그대로 남아있고 두 번째 채널은 그 아래에 그려지는데 똑같은 계산 과정을 거치면 두 번째 부분을 알 수 있습니다.
그리고 좀 더 일반적으로 만약 이것이 $5 \times 5 \times n_C$라면 출력은 $3 \times 3 \times n_C$이 될 것입니다. 그리고 최대 풀링은 각 $n_C$ 채널에 개별적으로 적용됩니다. 이것이 바로 최대 풀링입니다.
Average pooling
또 자주 사용되지 않는 풀링의 종류가 있는데 바로 평균 풀링인데 간단하게 설명하겠습니다. 예상하는 대로 최대값을 취하는 대신 각 필터의 평균을 취합니다.
이 예시에서 보라색 부분의 평균값은 3.75 이고 파란색은 1.25 이고 초록색은 4 그리고 빨간색 2 입니다. 이것이 $f = 2, s = 2$ 의 하이퍼파라미터인 평균 풀링이고 다른 하이퍼파라미터를 선택해도 됩니다.
요즘에는 최대 풀링이 평균 풀링보다 훨씬 더 많이 사용됩니다. 하나의 예외가 있는데 신경망의 아주 깊은 곳에서는 평균 풀링을 사용해서 예를들어 $7 \times 7 \times 1000$ 의 값을 축소해서 단면적의 평균값을 취해서 $1 \times 1 \times 1000$ 의 값을 얻게 됩니다.
하지만 신경망에서는 최대 풀링을 평균 풀링보다 훨씬 많이 사용합니다.
Summary
요약하자면 풀링의 하이퍼파라미터는 $f$가 필터의 크기, $s$가 스트라이드이고 가장 일반적인 값은 $f=2, s=2$일 것입니다. 높이와 너비를 절반 정도 축소시킵니다.
가장 자주 사용하는 하이퍼파라미터는 $f=2, s=2$인데 이것도 역시 높이와 너비를 절반으로 축소시킵니다. f=3, s=2 인 경우도 본 적이 있고 또 다른 하이퍼파라미터는 이진 비트로 최대 풀링인지 평균 풀링인지 알려주는 것이 있습니다.
원한다면 패딩에 해당하는 하이퍼파라미터를 추가해도 되지만 그런 경우는 거의 드뭅니다. 최대 풀링에서는 패딩을 거의 사용하지 않습니다.
다음에 그 예외를 한 번 살펴보겠지만 일반적으로 최대 풀링에서는 패딩을 사용하지 않습니다. 그래서 p 의 일반적인 값은 0 이 됩니다.
그리고 최대 풀링의 입력으로 $n_H \times n_W \times n_C$ 크기의 입력이 있으면 그 출력은 이렇게 됩니다.
그래서 패딩이 없다고 가정하면 $\Big\lfloor\dfrac{n_H - f}{s} + 1\Big\rfloor \times \Big\lfloor\dfrac{n_W - f}{s} + 1\Big\rfloor \times n_C$가 되겠죠.
여기서 입력의 채널과 출력의 채널은 일치하는데 풀링은 각 채널에 개별적으로 적용되기 때문입니다. 한 가지 유의할 점은 풀링에서는 학습할 변수가 없다는 것입니다. 그래서 역전파를 적용해보면 역전파가 가능한 변수가 없습니다.
직접 혹은 교차 검증을 통해 정해진 하이퍼파라미터이기 때문이고 그 이상은 없습니다. 신경망 한 레이어에서 계산하는 고정 함수이고 학습할 것이 없습니다. 고정 함수에 불과합니다.
이것으로 풀링을 마무리하겠습니다. 이제는 합성곱과 풀링 레이어를 형성할 수 있게 되었고 다음에는 완전 연결 레이어를 이해할 수 있도록 좀 더 복잡한 예시를 살펴보겠습니다.
댓글남기기