8 분 소요

image



Convolutional Neural Networks

Foundations of Convolutional Neural Networks

Strided Convolutions

스트라이드 합성곱은 합성곱 신경망에서 사용되는 합성곱의 또 다른 기본 빌딩 블록입니다. 예시를 살펴보겠습니다.


image

이 7 x 7 이미지를 3 x 3필터와 컨볼브한다고 가정해 보겠습니다. 단 일반적인 방법으로 하지 않고 스트라이드 2로 진행하겠습니다. 왼쪽 상단의 3 x 3 영역에서 평소처럼 아다마르 곱을 취하고 곱하고 더하면 91이 됩니다.

파란색 상자를 한 칸 씩 이동하는 대신 두 칸 씩 옆으로 이동하겠습니다. 왼쪽 상단 모서리가 여기서 여기로 이동하여 한 위치를 뛰어 넘는 방법에 주의하세요. 그 후, 일반적인 방법대로 아다마르 곱을 취하고 더하면 100이됩니다.

이제 다시 한 번 파란색 상자를 두 칸 뛰어넘겠습니다. 우측 위에 오게 되고 83이 됩니다. 다음 행으로 이동해서 한 칸 대신 두 칸을 이동하므로 파란색 상자는 저쪽으로 이동하게 됩니다. 어느 한 칸을 뛰어넘는 것에 주목하세요. 그러면 69가 나오고, 다시 두 칸을 뛰어넘으면 91이 되고 127이 됩니다.

마지막 행은 44, 72, 74가 됩니다. 이 예시에서는 7 x 7 행렬을 3 x 3 행렬과 컨볼브해서 3 x 3 출력을 얻게됩니다.

입력 및 출력 크기는 다음 공식에 따라 결정됩니다. n x n 이미지가 있는 경우 f x f 필터로 컨볼브됩니다. 패딩 p와 스트라이드 s를 사용한다면 이 예시에서는 s=2 출력은 N + 2 P - F가 됩니다. s 칸을 이동하기 때문에 한 번에 한 칸씩 이동하고 s 로 나눈 다음 1을 더하고 동일하게 곱해주면 됩니다.

우리가 사용하는 예시에서는 7+0-3이고 스트라이드 2로 나눈 다음 1을 더하면 4/2 + 1 = 3이 되는데 이런 방식으로 3 x 3 출력이 나오게 됩니다.

마지막으로, 이 부분이 정수가 아니라면 어떻게 될까요? 그런 경우, 내림을 하고 이 표기법이 floor를 표시하도록 해줍니다. 이 표시는 $floor(z)$를 나타냅니다. 이는 z를 내림 해서 가장 가까운 정수로 만들라는 의미입니다.

이렇게 구현되는 방식은 파란 박스가 이미지나 이미지와 패딩된 부분에 완전히 포함된 경우에만 계산을 수행하고 파란 박스의 일부가 외부에 있는 경우에는 계산을 수행하지 않습니다.

3 x 3 필터는 이미지 또는 이미지와 패딩 영역 내에 있어야만 대응하는 출력이 생성된다는 것이 규칙입니다. 출력 차원을 계산하기 위해 해야 할 올바른 일은 (n + 2p -f)/s가 정수가 아닌 경우 내림하는 것입니다.


image

요약하면 n x x 행렬 또는 n x n 이미지가 f x f 행렬 또는 패딩 p와 스트라이드 s가 있는 f x f 필터와 컨볼브하면 출력의 크기는 이렇게 됩니다. 때로는 그럴 필요가 없고 내림하는 것도 괜찮지만 정수가 나오도록 숫자를 선택하는 것이 좋습니다.

하지만 직접 여러개의 n, f, p, s의 값을 가지고 이 공식의 결과가 맞는지 확인해 보세요.


image

다음으로 넘어가기 전에 교차 상관과 합성곱에 대해 짚어볼 것이 있습니다. 합성곱 신경망을 구현하는 데 영향을 주지는 않겠지만 다양한 수학 교과서나 신호 처리 교재를 읽을 때 표현에 있어서 약간 다른 부분이 있을 수 있습니다.

전형적인 수학 교과서를 보면 아다마르 곱셈과 덧셈을 하기 전에 한 가지 과정이 더 있습니다. 6 x6 행렬을 3 x 3 필터로 가로축, 세로축을 모두 우선 3 x 3 필터를 뒤집으면 콘볼브하면 3, 4, 5, 1, 0, 2, -1, 9, 7은 3은 여기, 4는 저기 5는 저기에 가게 되고 두 번째 행으로 넘어갑니다. 1, 0, 1, -1, 9, 7이 됩니다.

이것은 실제로 3 x 3 필터를 사용하여 수직 및 수평 축을 모두 좁힙니다. 이렇게 뒤집힌 행렬을 가지고 여기에 복사해서 출력을 계산하면 2 x 7 + 3 x 2 + 7 x 5 이렇게 계속 이어집니다. 이 뒤집힌 행렬을 가지고 4 x 4 출력 행렬의 왼쪽 상단 값을 구하는것이죠.

그런 다음 9 개의 숫자를 가져 옵니다. 한 칸 이동하고 한 칸 이동하고 이런 식으로 계속 합니다 이 강의에서 정의한 합성곱 연산은 이 좁히는 작업을 생략한 것입니다.

기술적으로 우리가 실제로 하고 있는 것 지금까지 했던 연산의 과정은 종종 합성곱 대신 교차 상관으로 불리지만 딥러닝에서는 일반적으로 합성곱 연산이라고 부릅니다.

요약하자면 머신 러닝의 관례에 따라 일반적으로 이 건너뛰기 작업을 신경 쓰지 않으며 기술적으로 이 작업을 상호 상관이라고 하는 것이 더 나을 수 있지만 대부분의 딥 러닝 문헌에서는 이를 합성곱 연산자라고 부릅니다.

이번에도 관례에 따라 사용하겠습니다. 많은 머신 러닝 관련 문헌을 읽어보면 대부분의 사람들은 뒤집는 과정을 생략한 채로 이것을 합성곱 연산이라 부릅니다. 신호 처리나 특정 수학 분야에서 합성곱의 뒤집는 연산이 합성곱의 특수한 성질을 갖게 하는데 (A x B) x C = A x (B x C)이 되고 수학에서는 이것을 결합법칙이라고 부릅니다.

신호 처리 분야에서는 유용하지만 심층 신경망의 분야에서는 큰 소용이 없기 때문에 좁히는 과정을 생략하는 것이 코드를 단순화 할 수 있고 신경망의 작동에도 아무런 문제가 없습니다. 수학자들은 이것을 교차 상관이라고 부르지만 일반적으로는 이것을 합성곱이라고 합니다.

하지만 이것이 프로그래밍에 어떤 영향을 주거나 딥러닝을 문헌을 읽고 이해하는데 어려움을 주지 않을 것입니다.

지금까지 어떻게 합성곱 연상을 실행하고 또 패딩과 스트라이드를 사용하는지 알아보았습니다. 지금까지는 6 x 6 행렬처럼 행렬에 대한 합성곱에 대해 알아보았는데 다음에는 입체 형태에 대한 합성곱에 대해 알아보도록 하겠습니다. 이것으로 합성곱을 훨씬 더 잘 활용할 수 있을 것입니다. 다음 강의에서 뵙겠습니다

Convolutions over volumes

지금까지는 2D 이미지에서 합성곱의 방식을 배웠는데 이번에는 2D 이미지뿐만 아니라 3D 입체형의 합성곱에 대해 알아보겠습니다.


image

먼저 예시를 살펴봅시다. 살펴볼 이미지가 흑백이 아닌 RGB 이미지라고 가정해보겠습니다. 이미지는 6 X 6가 아니라 6 X 6 X 3가 될 수 있습니다.

여기에서 3은 세 개의 색상 채널에 해당합니다. 6 x 6 이미지 3개를 쌓은 것으로 생각하면 됩니다. 이 이미지에서 엣지를 검출하거나 다른 특성들을 알아보려면 이전에 사용했던 3 x 3 필터로 컨볼브 하는 것이 아니라 3 x 3 x 3의 이젠 3 x 3 x 3의 3D 필터로 컨볼브 해야 합니다.

필터 자체도 빨강, 초록, 파랑에 해당하는 세 개의 채널을 갖게 될 것입니다. 각각에 명칭을 붙이면 여기에 있는 처음 6은 높이고, 다음 6은 너비이고, 3은 채널의 수입니다.

필터도 마찬가지로 높이와 너비와 채널의 수를 가집니다. 이미지의 채널 수는 필터의 채널 수와 일치해야 하기 때문에 필터의 채널 수와 일치해야 하므로 이 두 숫자는 반드시 동일해야 합니다.

다음은 이 합성곱이 어떻게 실행되는지 살펴 볼 것인데 출력 이미지는 4 x 4입니다. 이것은 4 x 4 x 1입니다. 더 이상 뒤에 3이 없습니다.


image

더 깔끔한 이미지를 사용해서 좀 더 자세히 알아보겠습니다. 여기 6 x 6 x 3 이미지가 있고 3 x 3 x 3 필터가 있습니다. 그리고 3D 이미지와 필터의 마지막 숫자가 동일합니다.

3 x 3 x 3 필터의 모양을 단순화하기 위해서 행렬을 쌓아올리는 대신에 입체적인 정육면체로 표현하겠습니다. 이 합성곱의 연산의 출력을 계산하기 위해서는 먼저 이 3 x 3 x 3 필터를 왼쪽 상단에 위치 시키도록 하겠습니다.

3 x 3 x 3 필터에는 27개의 숫자가 있습니다. 27개의 매개 변수가 있는데 3의 세제곱이죠. 그리고 이 각각의 숫자를 빨강, 초록, 파랑 채널에 해당하는 수와 곱해줍니다.

빨간색 채널의 9개의 숫자와 곱해주고 아래의 3개의 숫자는 초록색 채널과 곱해주고 아래의 3개의 숫자는파란색 채널과 곱해줍니다. 왼쪽에 있는 노란색 정육면체에 해당하는 27개의 숫자와 곱하면 그러고 나서 이 숫자들을 모두 더해주면 출력의 첫 번째 숫자를 얻게 됩니다.

다음 출력을 계산하기 위해서 이 큐브를 한 칸 밀어주세요. 다시 27번의 곱셈을 하고 27개의 숫자를 다 더하면 그러면 다음 출력값을 구할 수 있고 다음 숫자를 위해 옆으로 밀어서 다음 칸의 숫자를 구하면 세 번째 출력값을 구할 수 있습니다.

이렇게 해서 네 번째 숫자를 얻고 한 행 내려가서 다음 숫자를 얻고 계속 동일한 방법으로 끝까지 반복하면 마지막 출력값의 위치는 여기입니다. 이것으로 무엇을 할 수 있을까요?

여기 예시가 있는데 이 필터의 크기는 3 x 3 x 3입니다. 빨간색 채널의 엣지를 검출하려 한다면 첫번째 필터는 1, 1, 1, -1, -1, -1이고 녹색 채널은 모두 0이 되어야 하고 파란색 채널도 모두 0이 됩니다. 이 세가지를 합쳐서 3 x 3 x 3 필터를 만들면 빨간색 채널의 수직 엣지를 검출하게 됩니다.

또는 수직 엣지의 색깔이 상관없다면 이런 필터를 사용하면 됩니다. 세 채널 모두에 1, 1, 1, -1, -1, -1이 있으면 됩니다.

두 번째 방식으로 숫자를 설정하면 모든 색의 엣지를 검출하는 3 x 3 x 3 엣지 검출기가 되고 그리고 다른 매개 변수를 선택함으로 3 x 3 x 3필터로 다른 특성을 검출할 수 있습니다.

컴퓨터 비전 분야에서는 일반적으로 입력 이미지가 특정한 높이, 너비와 특정한 수의 채널을 가지게 되면 필터의 높이와 너비는 다르지만 동일한 수의 채널을 가져야합니다.

이론적으로 하나의 필터가 빨간색이나 초록색 또는 파란색의 채널 단 하나만 보는것도 가능합니다. 그래서 6 x 6 x 3의 이미지를 3 x 3 x 3과 합성곱하면 2D의 4 x 4 출력 이미지를 얻게 됩니다.

입체형에서 어떻게 합성곱 연산을 하는지 알아보았습니다.


image

마지막으로 합성곱 신경망의 중요한 구성요소인 개념이 있는데 만약 세로 엣지만 검출하는 것이 아니라 세로와 가로 엣지 모두를 검출하거나 45도 혹은 70도 기울어진 엣지일수도 있습니다. 즉 여러 필터를 동시에 사용하려고 할때는 어떻게 해야할까요?

여기 전에 사용한 이미지입니다. 6 x 6 x 3 이미지가 3 x 3 x 3과 합성곱하여 4 x 4의 출력을 얻었는데 이것이 어쩌면 수직 엣지나 다른 어떤 검출기일 수 있습니다.

여기 두 번째 오렌지색 필터를 수평 엣지 검출기라 가정해 보겠습니다. 첫 번째 필터와의 합성곱은 4 x 4의 결과를 내놓았고 두 번째 필터와의 합성곱은 또 다른 4 x 4의 결과를 내놓습니다. 그리고 이 두 4 x 4 출력을 이미지에서 첫 번째를 앞 쪽에 두고 두 번째 필터를 출력 뒤에 놓습니다.

그래서 두 개를 쌓으면 4 x 4 x 2의 크기가 되는 것입니다. 입체형의 상자를 그린다고 생각하면 됩니다. 아마 이런 모양일 것이고 출력의 부피는 4 x 4 x 2이 될 것입니다.

6 x 6 x 3의 이미지를 두 개의 3 x 3 x 3 필터와 합성곱한 결과로 두 개의 4 x 4 행렬을 얻고 이 둘을 합쳐서 4 x 4 x 2의 부피가 나오며 여기서 2는 두 개의 필터를 의미합니다.

그래서 요약해보면 만약 n x n x (채널 수)의 크기의 입력 이미지가 있다면 예시에서는 6 x 6 x 3을 사용했는데 n의 아래첨자 c는 채널의 수를 의미하고 f x f와 컨볼브하였습니다.

f x f와 동일한 채널의 수를 사용해서 3 x 3 x 3이 되었습니다 그리고 일반적으로 이것과 이것은 동일한 숫자여야 합니다. 그래서 결과는 (n-f+1) x (n-f+1) x nc’인데 nc’는 사용한 필터의 개수입니다.

혹은 다음 레이어의 nc가 될 수도 있지만 여러분이 사용하는 필터의 개수입니다. 이 예시에서는 4 x 4 x 2였죠. 여기서 가정은 1의 스트라이드와 패딩이 없다는 것입니다.

n-f+1이 아닌 다른 패딩 스트라이드를 사용한다면 n-f+1은 이전에서 다룬 것처럼 일반적으로 영향을 받게 됩니다. 그래서 입체형에서의 합성곱은 매우 효과적입니다.

세 채널의 RGB 이미지에 적용 가능하다는 점은 극히 일부분이고 더 중요한 것은 가로와 세로 엣지처럼 두 개의 특성 또는 10개, 128개 혹은 수 백개의 특성들을 검출할 수 있고 그 출력은 검출하고자 하는 특성의 수만큼 채널을 가지게 될 것입니다. 출력값은 검출하고 있는 필터의 수와 같은 수의 채널이 표시됩니다.

그리고 용어에 대해 짚고 넘어가자면 채널의 수를 마지막 크기를 나타내는데 사용하였는데 종종 문헌에서는 3D 입체형의 깊이라고 불리기도 합니다. 채널과 깊이 모두 자주 사용되는 용어이지만 신경망의 깊이 때문에 깊이라는 표현이 혼란을 줄 수 있습니다.

그래서 채널이라는 용어를 입체형 필터의 크기를 나타내는데 사용하였습니다. 입체형에서 합성곱을 구현하는 법을 알아봤으니 이제는 합성곱 신경망의 한 층을 구현할 준비가 되었습니다. 다음엔 그 방법을 살펴보겠습니다.

댓글남기기