2019년 3월 7일 목요일
Strided 컨볼루션는 컨볼루션 신경망에서 사용되는 컨볼루션의 기본적인 빌딩블록의 또 다른 하나입니다. 예시를 들어보죠. 이 7x7 이미지를 3x3필터와 컨벌브한다고 생각해봅시다, 일반적인 대신에 2 스트라이드으로 처리 할 것입니다. 즉, 이 왼쪽 상단 3x3 영역에 있는 Element-wise product (요소 간의 곱셈)을 평소대로 진행하고 곱하고 더하면 91이 됩니다. 파란색 상자를 한 칸 씩 이동하는 대신 2칸을 옆으로 이동합니다. 우리는 이렇게 두 걸음씩 점프해보겠습니다. 왼쪽 상단 코너가 여기서 시작해서 여기 시작 부로 어떻게 이동했는지 유의하십시오. 한 칸을 뛰어 넘는 거죠. 그리고 나서, 일반적인 방법대로 요소 간 곱셈을 하고 합하면 100이됩니다. 이제 우리는 그걸 다시 할 것인데요, 파란색 상자를 두 칸 건너 뛰세요 여기에 오게 되고, 83이 됩니다. 다음 행으로 가서, 다시 한 칸이 아니라 두 칸을 이동하고, 그럼 파란색 상자가 이쪽으로 가게 되겠죠. 우리가 어떻게 포지션 중 하나를 건너뛰고 있는지, 그리고 어떻게 하면 69 가 되는지 잘 보십시오. 그리고 다시 두 칸을 건너뛰면, 91이 되고 이런 식으로 127이 됩니다. 그리고 마지막 행은 44, 72, 74. 이 예에서 우리는 7x7 매트릭스를 3x3매트릭스와 컨벌브해서 3x3 결과물을 얻게 됩니다. 이 인풋과 아웃풋 크기는 다음 공식에 따라 산정됩니다. N×N 이미지가 있는 경우 F와F 필터로 컨벌루션됩니다. 그리고 패딩 P와 스트라이드 S를 사용하는 경우, 이 예제에서 S=2 이고, N+2 P에서 F를 뺀 아웃풋이 나오게 되는 거죠. 이제 S 단계를 거치므로, 한 번에 한 칸 옮기고, S 로 나눈 다음 1을 더해주세요. 그런 다음 똑같은 방식을 적용하면 되겠습니다. 예시에서, 7+0-3 가 되고, 스트라이드 2로 나눈 다음 1을 더하면 2분의 4+1, 즉 3이 됩니다. 이런 방식으로 3x3 아웃풋으로 결론 낼 수 있는 겁니다. 자, 마지막으로, 이 부분이 정수가 아니면 어떻게 될까요? 이 경우 남는 숫자를 잘라버리고 이 표기법이 floor를 표시하도록 해줍니다. 이 표시는 Z의 floor라는 뜻이죠. 이는 Z를 내림 해서 가장 가까운 정수로 만들라는 뜻입니다. 이렇게 구현되는 방식은 이미지 또는 패딩에 더해진 이미지 내에 파란 상자가 완전히 포함되어 있는 경우에만 파란상자 곱셈을 취하는 것입니다. 만약 이 파란색 상자 종류 중 일부가 바깥쪽에 걸쳐있다면, 그 계산은 하지 마세요. 생성 된 해당 출력이 있기 전에 3x3 필터가 이미지 또는 이미지에 더해진 패딩 영역을 완전히 포함해야 한다고 생각한다면, 그것 또한 고정관념입니다. 그러므로, 아웃풋 크기를 계산해내는 올바른 방법은 N+2p-f를 S로 나누었을 때 정수가 아닌 경우 내림 하는 것입니다. dimension을 요약해보자면, NxN 매트릭스 혹은 NxN 이미지를 패딩 P와 스트라이드 S와 컨벌브하면 아웃풋 사이즈는 이러한 dimension을 가지게 될 겁니다. 때로는 그럴 필요가 없기도 하지만, 여기 정수가 생기도록 여기 있는 모든 숫자들을 선택할 수 있다는 건 좋죠, 내림 하는 것도 괜찮습니다. 그러나 N, F, P 및 S 값의 몇 가지 예를 통해 편하게 작업하시고 원하는 경우 이 수식이 출력 크기에 맞는지 확인해보십시오. 이제 계속 진행하기 전에 cross-correlation (교차 상관)과 컨벌루션의 차이점에 대해 기술적인 의견을 덧붙이고 싶은데요, 이는 컨볼루션 신경망을 실행할 때 영향을 미치게 됩니다. 다른 수학 교과서나 신호 처리 교재를 읽어보면, 표기법에 있어 생길 수 있는 불일치점이 하나 있습니다. 그게 뭐냐 하면, 전형적인 수학 교과서를 보면, 요소 간 곱셈과 덧셈을 하기 전에 컨벌루션 이 정의 되는 방식에 있어서, 사실 먼저 수행해야 하는 한 단계가 더 있습니다. 6 x6 행렬을 3x3 필터로 콘볼부하는 것입니다. 우선, 3x3 필터를 취해 가로, 세로축 모두 옆으로 돌려보면 3, 4, 5, 1, 0, 2, -1, 9, 7 가 될 겁니다. 3은 여기로 하고, 4는 저쪽으로, 5는 저쪽, 그리고 두 번째 행은 1, 0, 2, -1, 9, 7이 됩니다. 이것은 실제로 3x3개 필터를 취하여 수직 축과 수평 축 둘 다로 좁힙니다 그리고 나서, 옆으로 돌려진 이 매트릭스가 여기에 복사합니다 아웃풋을 계산하려면, 2x7 3x2를 더하고 7x5를 더하는 이런 방식으로 진행합니다. 이 옆으로 돌린 행렬을 곱해서 4x4 아웃풋의 왼쪽 상단 행의 원소들을 계산하면 됩니다. 그런 다음 9 개의 숫자를 가져 와서 한 칸 이동하고, 또 한 칸 이동시키세요. 이 강의의 컨벌루션 연산을 다루는 방법은 이 좁히는 작업을 건너뛰고 진행했습니다. 기술적으로, 우리가 실제로 하고 있는 것, 즉, 지난 강의에서 사용해온 작업은 때로는 컨볼루션이 아닌 교차 상관 입니다 그러나 관례에 따르는 딥러닝 문헌에서는 우리는 이것을 컨벌루션 연산이라고 부릅니다 간단히 요약하자면, 기계 학습의 관례에 따라, 우리는 일반적으로 이 skipping operation을 신경 쓰지 않고, 기술적으로는 이 작업을 교차 상관이라고 할 수도 있지만 대부분의 딥러닝 문헌에서는 이것을 컨벌루션 연산라고 부릅니다. 그래서 저는 이 강의에서도 이 관례대로 사용할 예정입니다. 많은 기계 관련 문헌을 읽는다면 대부분의 사람들이 이렇게 돌린 매트릭스를 사용하지 않고 컨벌루션 연산로 부르는 것을 볼 수 있을 것입니다. 신호 처리나 특정 수학 분야에서 컨벌루션 연산가 컨볼루션 정의대로 을 뒤집기를 하면 A*B 먼저 컨벌브하고 C와 컨벌브하면 A를 컨벌브 된 B와 C에 나중에 컨벌브하는 것과 같다는 것이 밝혀졌습니다. 이것은 일부 신호 처리 애플리케이션에 적합하지만 심층 신경망 의 경우에는 그다기 상관이 없기 때문에 이 이중 mirroring operation을 생략해서 코드를 단순화시키고, 신경망도 제대로 작동하게 할 수 있습니다. 관례에 따라, 대부분 사람들은 이걸 컨벌루션이라고 부릅니다. 수학자들이 때때로 이걸 교차 상관이라고 부르는 걸 선호긴 하지만, 이것은 문제점 연습에서 실행하는 것에는 영향을 미치지 않아야 하며 딥러닝 문헌을 읽고 이해하는 데에 영향을 주어서는 안됩니다. 지금까지 컨볼루션을 수행하는 방법과 패딩과 컨볼루션 스트라이드를 사용하는 방법을 보셨습니다. 하지만 지금까지 보신 것은 6 x6보다 큰 매트릭스에 관한 컨벌루션이었습니다. 다음 강좌에서는, 볼륨에 대해 컨볼루션을 수행하는 방법을 볼 수 있습니다. 그러면 컨볼루션을 훨씬 더 강력한 것으로 만들 수 있습니다. 다음 동영상으로 넘어 갑시다.
DNN을 구축하기 위해, 기본적인 컨볼루션 연산에 한 가지 변형을 여러분이 할 줄 알아야 하는데요, 그것은 바로 패딩입니다. 어떻게 작동하는지 보시죠. 지난 영상에서 본 것은 6x6 이미지를 3x3 필터와 합성했을 때, 4x4 행렬로 된 4x4 아웃풋이 나온다는 것이었습니다. 이게 가능한 이유는 3x3필터로 된 가능한 위치에 놓이는 숫자들이 있기 때문입니다. 이는 4x4에만 가능한 위치가 있다는 뜻이죠. 6x6매트릭스에 맞는 3x3필터가 있기 때문이기도 합니다. 수학적으로 봤을 때, n x n 이미지를 f x f 필터로 합성시키면 아웃풋의 차원은 (n-f+1) x (n-f+1) 이 될 것입니다. 이 예시에서, 6-3+1 = 4 입니다. 이것이 4x4 아웃풋을 갖게 되는 이유입니다. 여기엔 두 가지의 단점이 있는데요, 하나는 이겁니다. 컨벌루션 연산을 적용할 때 마다 이미지가 축소됩니다. 6x6에서 4x4로 줄어든다면, 여러분의 이미지가 정말 작아지기 전에
단 몇 번의 연산만 수행할 수밖에 없습니다. 1x1 정도로 줄어드는 그 때 정도까지만 말이죠. 그러니, 모서리를 감지할 때마다 이미지가 줄어들지 않게 하거나 다른 피쳐를 그 위에 얹고자 할 때엔, 그게 하나의 단점이 되는 것이죠. 두 번째 단점은 이겁니다. 코너나 모서리에 있는 픽셀을 보면 이 작은 픽셀이 아웃풋의 하나로서만 사용되도록 터치되어집니다. 왜냐하면 이게 3x3영역을 건드리기 때문이죠. 반면에 가운데에 있는 픽셀을 고르면,
(이 픽셀이라고 치면) 그럼 그 픽셀과 겹쳐지는 3x3 영역이 많아지게 되고, 다시 말해, 코너나 모서리에 있는 픽셀들이
아웃풋에서 훨씬 적게 사용된다고 볼 수 있습니다. 따라서 이미지 가장자리 쪽의
많은 정보를 버리는 것과 같습니다. 이러한 두 가지 문제점을 해결하기 위해서 축소되는 아웃풋과 여러분이 정말 여러 층으로 이루어진 인공 신경망을 만들 때 단계마다 이미지가 왜 줄어들면 안 되는지 살펴보세요.
왜냐하면 만약 여러분이 100개의 레이어로 된 deep net을 가지고 있고, 각 레이어마다 이미지 크기가 줄어든다면, 100 레이어 이후에는 매우 작은 이미지만 남게 될 것이기 때문입니다. 그래서 이게 첫 번째 문제점이었고, 또 다른 문제는 이미지의 가장자리에서
많은 정보를 버리고 있다는 것입니다. 따라서 이 두 가지 문제점을 해결하기 위해 여러분이 할 수 있는 것은
컨벌루션 연산을 최대로 적용하는 것입니다. 이미지를 덧붙일 수 있습니다. 이 경우, 이미지에
추가적인 경계선을 덧댄다고 생각해봅시다. 모든 모서리 둘레에 하나의 픽셀을 추가해서 경계선을 그리는 거죠. 그렇게 하면, 6x6 이미지 대신에, 이걸 덧붙여서 8x8 이미지를 만들게 되고, 이 8x8 이미지를 3x3 필터와 컨볼브하게 되면,
이러한 결과를 만들어내게 됩니다. 자, 4x4 이미지가 대신 6x6 이미지가 생기고, 이제 원래의 6x6 인풋 사이즈를 유지하게 됩니다. 따라서 습관적으로 패딩할 때 0으로 패딩하고, p 크기만큼 패딩한다면 이러한 경우, p=1과 같습니다. 왜냐하면 픽셀의 추가적인 경계선으로 모든 테두리를 덧붙이고 있기 때문입니다. 그리고 아웃풋은 (n+2p-f+1) x (n+2p-f+1) 이므로, 이는 (6+2-3+1) x (6+2-3+1) 가 됩니다. 따라서 (6+2-3+1) 은 6이 됩니다. 원본 사이즈를 보존한 6x6 이미지를 얻게 되는 것입니다. 이 픽셀의 존재는 실제로 아웃풋의 모든 셀에 영향을 주고, 정보를 허비하는 게 아니라 덜 셈으로서 이미지의 코너의 모서리나 이미지의 가장자리에 있는 정보는 줄어들게 됩니다. 여기 보여드리는 것처럼, 하나의 픽셀을 deep border를 덧붙이는 효과인데요, 원한다면 두 개의 픽셀을 경계에 붙일 수도 있습니다. 이런 경우엔 또 다른 경계 면에 붙일 수도 있는데요, 여러분이 선택한 만큼 더 많은 픽셀을 붙일 수도 있겠죠. 제 생각엔 여기 그리고 있는 건, 이건 덧붙여진 건 2개, 즉 p=2이죠 얼마나 많이 덧붙일 수 있는가에 대해서는, 공통적으로 불리는 2개가 있는데요 Valid Convolution과 Same Convolution입니다. 대단한 이름은 아니지만, Valid Convolution에서는 기본적으로 패딩이 없는 것을 의미합니다. 이 경우, n x n 이미지를 f x f 필터로 컨볼브해서 이는 (n-f+1) (n-f+1) x (n-f+1) 의 아웃풋을 산출하게 됩니다. 이것은 이전 영상에서 보았던 예시와 같은 것인데요, n x n 이미지를 3 x 3 필터로 컨볼브 해서 4x4 아웃풋을 도출했었습니다. 또 다른 일반적인 선택지는 Same Convolution인데요, 이것은 패드를 해서 아웃풋 사이즈가 인풋 사이즈와 같은 경우를 뜻합니다. 실제로 이 공식을 보시면, p 픽셀로 패드를 할 때, 이는 마치 n+2p 그리고 나서 이 나머지인 거죠, 그렇죠? -f+1 nxn 이미지와 온 테두리를 p 픽셀로 패딩하였다면, 이 아웃풋의 차원은 n +2p-f+1을 곱한 것과 같습니다. 따라서 만약 n+2p-f+1이 n이 되려면 즉, 아웃풋 사이즈가 인풋 사이즈와 같아지려면, 이걸 계산하면 양변에 n 을 지워주고, p에 대해 풀어보면 p는 2분의 f-1 이 됩니다. f가 홀수이면 다음과 같이 패딩 크기를 결정해서 아웃풋 사이즈가 인풋사이즈와 같다는 것을 확인할 수 있습니다, 그렇게 때문에 예를 들어 이전 슬라이드에서 봤던 것처럼 필터가 3x3이면 아웃풋 크기와 인풋 크기를 같게 하는 패딩은 2분의 3-1, 즉 1 입니다. 또 다른 예를 들어보면, 필터가 5x5 이고 즉, f=5이라면 이걸 방정식에 대입하면, 2만큼의 패딩이 아웃풋 크기를 인풋 크기와 똑같게 만들어줍니다. 필터가 5x5일때 말이죠. 그리고 컴퓨터 비전 분야의 관습에 따르면 f는 주로 홀수이며, 사실 대부분 항상 홀수입니다, 짝수로 된 필터는 보기도 어렵습니다. 필터는 컴퓨터 비전을 사용해서 작동합니다. 그리고 제 생각에 그 이유는 두 가지 입니다. 첫째로, f가 짝수이면 몇 가지 비대칭적인 패딩을 해야 합니다. 따라서 f가 홀수여서 이 Same Convolution 유형이 자연적인 패딩 영역을 주기만 한다면 패딩이 왼쪽엔 더 많고 오른쪽엔 더 적다거나 혹은 불규칙적이지 않고 사방에 같은 dimension이 있을 것이다. 두 번째 이유는, 홀수 차원의 필터를 사용한다면 예를 들어 3x3 이나 5x5와 같이 중앙 포지션을 가지고 있고 때로는 컴퓨터 비전분야에 있어서 특징점을 가지고 있다는 것은 좋은 점입니다. 픽셀을 가지고 있으면 좋습니다, 중앙의 픽셀을 칭할 수 있고 필터의 포지션에 대해 이야기할 수 있습니다. 맞습니다, 어느 것도 f 가 거의 항상 홀수로 사용되는 데 있어 좋은 이유가 될 수는 없습니다. 하지만 컨벌루션 문헌에 보면, 3x3 필터가 매우 흔하다는 걸 보게 됩니다. 또는 5x5, 7x7을 보게 되기도 하고, 실제로 때로는, 1x1 필터에 대해 알아보고 그게 어떻게 가능한지도 살펴보겠습니다. 하지만 관행적으로, 홀수 필터를 사용하기를 권장합니다. 제 생각엔 아마 가능할 것 같습니다. f에 짝수 값을 사용한다 하더라도 좋은 성능을 낼 수 있을 것 같습니다. 하지만 여러분이 아직 컴퓨터 비전 관행에 매여있다면, 저는 대개 홀수 f를 사용합니다,
자, 여러분은 Padded Convolution을 사용하는 방법을 살펴보았습니다. 컨벌루션 연산을 위해 패딩을 더 알고 싶다면 p 값을 구체화하거나 Valid Convolution이라고 하면 되는데요, 이는 p=0 임을 의미하는 것이죠.
아니면 Same Convolution, 즉, 아웃풋이 인풋과 같은 차원을 가지는 패딩도 있습니다. 여기까지 패딩에 대해 보았습니다. 다음 강좌에서는, Strided Convolution를 실행하는 법에 대해 알아보겠습니다.
단 몇 번의 연산만 수행할 수밖에 없습니다. 1x1 정도로 줄어드는 그 때 정도까지만 말이죠. 그러니, 모서리를 감지할 때마다 이미지가 줄어들지 않게 하거나 다른 피쳐를 그 위에 얹고자 할 때엔, 그게 하나의 단점이 되는 것이죠. 두 번째 단점은 이겁니다. 코너나 모서리에 있는 픽셀을 보면 이 작은 픽셀이 아웃풋의 하나로서만 사용되도록 터치되어집니다. 왜냐하면 이게 3x3영역을 건드리기 때문이죠. 반면에 가운데에 있는 픽셀을 고르면,
(이 픽셀이라고 치면) 그럼 그 픽셀과 겹쳐지는 3x3 영역이 많아지게 되고, 다시 말해, 코너나 모서리에 있는 픽셀들이
아웃풋에서 훨씬 적게 사용된다고 볼 수 있습니다. 따라서 이미지 가장자리 쪽의
많은 정보를 버리는 것과 같습니다. 이러한 두 가지 문제점을 해결하기 위해서 축소되는 아웃풋과 여러분이 정말 여러 층으로 이루어진 인공 신경망을 만들 때 단계마다 이미지가 왜 줄어들면 안 되는지 살펴보세요.
왜냐하면 만약 여러분이 100개의 레이어로 된 deep net을 가지고 있고, 각 레이어마다 이미지 크기가 줄어든다면, 100 레이어 이후에는 매우 작은 이미지만 남게 될 것이기 때문입니다. 그래서 이게 첫 번째 문제점이었고, 또 다른 문제는 이미지의 가장자리에서
많은 정보를 버리고 있다는 것입니다. 따라서 이 두 가지 문제점을 해결하기 위해 여러분이 할 수 있는 것은
컨벌루션 연산을 최대로 적용하는 것입니다. 이미지를 덧붙일 수 있습니다. 이 경우, 이미지에
추가적인 경계선을 덧댄다고 생각해봅시다. 모든 모서리 둘레에 하나의 픽셀을 추가해서 경계선을 그리는 거죠. 그렇게 하면, 6x6 이미지 대신에, 이걸 덧붙여서 8x8 이미지를 만들게 되고, 이 8x8 이미지를 3x3 필터와 컨볼브하게 되면,
이러한 결과를 만들어내게 됩니다. 자, 4x4 이미지가 대신 6x6 이미지가 생기고, 이제 원래의 6x6 인풋 사이즈를 유지하게 됩니다. 따라서 습관적으로 패딩할 때 0으로 패딩하고, p 크기만큼 패딩한다면 이러한 경우, p=1과 같습니다. 왜냐하면 픽셀의 추가적인 경계선으로 모든 테두리를 덧붙이고 있기 때문입니다. 그리고 아웃풋은 (n+2p-f+1) x (n+2p-f+1) 이므로, 이는 (6+2-3+1) x (6+2-3+1) 가 됩니다. 따라서 (6+2-3+1) 은 6이 됩니다. 원본 사이즈를 보존한 6x6 이미지를 얻게 되는 것입니다. 이 픽셀의 존재는 실제로 아웃풋의 모든 셀에 영향을 주고, 정보를 허비하는 게 아니라 덜 셈으로서 이미지의 코너의 모서리나 이미지의 가장자리에 있는 정보는 줄어들게 됩니다. 여기 보여드리는 것처럼, 하나의 픽셀을 deep border를 덧붙이는 효과인데요, 원한다면 두 개의 픽셀을 경계에 붙일 수도 있습니다. 이런 경우엔 또 다른 경계 면에 붙일 수도 있는데요, 여러분이 선택한 만큼 더 많은 픽셀을 붙일 수도 있겠죠. 제 생각엔 여기 그리고 있는 건, 이건 덧붙여진 건 2개, 즉 p=2이죠 얼마나 많이 덧붙일 수 있는가에 대해서는, 공통적으로 불리는 2개가 있는데요 Valid Convolution과 Same Convolution입니다. 대단한 이름은 아니지만, Valid Convolution에서는 기본적으로 패딩이 없는 것을 의미합니다. 이 경우, n x n 이미지를 f x f 필터로 컨볼브해서 이는 (n-f+1) (n-f+1) x (n-f+1) 의 아웃풋을 산출하게 됩니다. 이것은 이전 영상에서 보았던 예시와 같은 것인데요, n x n 이미지를 3 x 3 필터로 컨볼브 해서 4x4 아웃풋을 도출했었습니다. 또 다른 일반적인 선택지는 Same Convolution인데요, 이것은 패드를 해서 아웃풋 사이즈가 인풋 사이즈와 같은 경우를 뜻합니다. 실제로 이 공식을 보시면, p 픽셀로 패드를 할 때, 이는 마치 n+2p 그리고 나서 이 나머지인 거죠, 그렇죠? -f+1 nxn 이미지와 온 테두리를 p 픽셀로 패딩하였다면, 이 아웃풋의 차원은 n +2p-f+1을 곱한 것과 같습니다. 따라서 만약 n+2p-f+1이 n이 되려면 즉, 아웃풋 사이즈가 인풋 사이즈와 같아지려면, 이걸 계산하면 양변에 n 을 지워주고, p에 대해 풀어보면 p는 2분의 f-1 이 됩니다. f가 홀수이면 다음과 같이 패딩 크기를 결정해서 아웃풋 사이즈가 인풋사이즈와 같다는 것을 확인할 수 있습니다, 그렇게 때문에 예를 들어 이전 슬라이드에서 봤던 것처럼 필터가 3x3이면 아웃풋 크기와 인풋 크기를 같게 하는 패딩은 2분의 3-1, 즉 1 입니다. 또 다른 예를 들어보면, 필터가 5x5 이고 즉, f=5이라면 이걸 방정식에 대입하면, 2만큼의 패딩이 아웃풋 크기를 인풋 크기와 똑같게 만들어줍니다. 필터가 5x5일때 말이죠. 그리고 컴퓨터 비전 분야의 관습에 따르면 f는 주로 홀수이며, 사실 대부분 항상 홀수입니다, 짝수로 된 필터는 보기도 어렵습니다. 필터는 컴퓨터 비전을 사용해서 작동합니다. 그리고 제 생각에 그 이유는 두 가지 입니다. 첫째로, f가 짝수이면 몇 가지 비대칭적인 패딩을 해야 합니다. 따라서 f가 홀수여서 이 Same Convolution 유형이 자연적인 패딩 영역을 주기만 한다면 패딩이 왼쪽엔 더 많고 오른쪽엔 더 적다거나 혹은 불규칙적이지 않고 사방에 같은 dimension이 있을 것이다. 두 번째 이유는, 홀수 차원의 필터를 사용한다면 예를 들어 3x3 이나 5x5와 같이 중앙 포지션을 가지고 있고 때로는 컴퓨터 비전분야에 있어서 특징점을 가지고 있다는 것은 좋은 점입니다. 픽셀을 가지고 있으면 좋습니다, 중앙의 픽셀을 칭할 수 있고 필터의 포지션에 대해 이야기할 수 있습니다. 맞습니다, 어느 것도 f 가 거의 항상 홀수로 사용되는 데 있어 좋은 이유가 될 수는 없습니다. 하지만 컨벌루션 문헌에 보면, 3x3 필터가 매우 흔하다는 걸 보게 됩니다. 또는 5x5, 7x7을 보게 되기도 하고, 실제로 때로는, 1x1 필터에 대해 알아보고 그게 어떻게 가능한지도 살펴보겠습니다. 하지만 관행적으로, 홀수 필터를 사용하기를 권장합니다. 제 생각엔 아마 가능할 것 같습니다. f에 짝수 값을 사용한다 하더라도 좋은 성능을 낼 수 있을 것 같습니다. 하지만 여러분이 아직 컴퓨터 비전 관행에 매여있다면, 저는 대개 홀수 f를 사용합니다,
자, 여러분은 Padded Convolution을 사용하는 방법을 살펴보았습니다. 컨벌루션 연산을 위해 패딩을 더 알고 싶다면 p 값을 구체화하거나 Valid Convolution이라고 하면 되는데요, 이는 p=0 임을 의미하는 것이죠.
아니면 Same Convolution, 즉, 아웃풋이 인풋과 같은 차원을 가지는 패딩도 있습니다. 여기까지 패딩에 대해 보았습니다. 다음 강좌에서는, Strided Convolution를 실행하는 법에 대해 알아보겠습니다.
컨벌루션 연산을 통해 vertical edge detector를 구현하는 방법을 살펴 보았습니다 이번 강의에서는, 포지티브 에지와 네거티브 에지의 차이점, 다시 말해, 밝음에서 어두운 에지로의 변화와 어두움에서 밝은 에지로의 변화되는 차이점을 알아보도록 하겠습니다. 또한 어떻게 알고리즘이 학습하게 할 수 있을지 뿐만 아니라 다른 유형의 edge detector를 보게 될 것입니다. 지금까지 해왔던 것처럼 edge detector를 직접 핸드코딩시키는게 아닙니다. 그럼 시작해보겠습니다. 이전 강의에서 보셨던 예시입니다. 6x6, 왼쪽은 밝고 오른쪽은 어두운 이 이미지를 보셨었습니다. 그리고 이걸 vertical edge detection 필터와 합성해서 이미지 가운데에 수직 에지가 감지되도록 했었죠. 색상이 뒤집어져서 왼쪽이 어둡고 오른쪽이 밝은 이미지에서는 어떤 일이 생길까요? 이렇게 하니 10 은 이미지 오른쪽 절반에 있고, 0은 왼쪽에 있군요. 그걸 똑같은 edge detection 필터와 합성하면, 가운데가 30 대신에 -30의 결과를 가지게 됩니다. 이렇게 생긴 그림을 그려볼 수 있을 겁니다. 전환되는 명암이 이렇게 반대로 되기 때문에, 이제 30 또한 반대로 뒤바뀌게 되는 것입니다. 그리고 -30은 밝은 색에서 어둠으로의 변화가 아니라 어두운 색에서 밝은 색으로 변화하는 것이죠. 이 둘 중 어느 경우인지 신경 쓰지 않으면, 이 결과 매트릭스의 절대값을 얻을 수 있습니다. 그러나 이 특정한 필터는 밝은 색에서 어두운 색으로 변하는 에지와 어두운 색에서 밝은 색으로 변화하는 에지의 차이점을 만들어냅니다. edge detection의 예시를 좀 더 보시죠. 지금까지 공부한 이 3 x 3 필터를 사용하면 vertical edges(수직 모서리)를 감지 할 수 있습니다. 따라서, 이 3x3필터가 수평 모서리를 감지해내는 것도 여러분에게 놀라운 일도 아닐 겁니다. 기억해두실 것은, 이 필터에 따르면, 수직 모서리는 왼쪽에 상대적으로 밝은 픽셀과 상대적으로 어두운 오른쪽 부분에 있는 3x3영역이라는 것입니다. 이와 비슷하게, 수평 모서리는, 픽셀이 위쪽은 상대적으로 밝고 아래쪽은 상대적으로 어두운 3x3 영역이 됩니다. 예시가 하나 있습니다. 이건 좀 더 복잡한데요, 위쪽 왼쪽과 오른쪽 아래 코너에 10들이 있습니다. 따라서 이걸 이미지로 그려보시면, 0이 있는 곳은 어두운 이미지가 되겠죠, 따라서 어두운 영역에 쉐이드를 만들어보겠습니다. 위쪽 왼쪽과 오른쪽 아래 코너가 있는데요. 이걸 수평 모서리 감지기와 합성하면, 이걸 얻을 수 있습니다. 몇 가지 예시를 보자면, 여기 있는 이 30은 이 3x3영역에 대응하는데요, 실제로 위쪽엔 밝은 픽셀이 있고 아래쪽엔 어두운 픽셀들이 있습니다. 바로 여기죠. 강한 포지티브 에지를 만들어내는 것입니다. 그리고 여기에 이 -30은 이 영역에 대응하게 되는데요, 아래쪽은 더 밝고, 위쪽은 어둡게 되는 것이죠 그리고 이게 바로 네거티브 에지의 예시입니다. 다시 말해서, 우리가 6x6같은 상대적으로 작은 이미지들로 작업하고 있다는 사실을 보여주는 것입니다. 하지만 예를 들어 -10같은 이 중간 값들은 왼쪽에 포지티브 에지 부분을 담아내고 오른쪽에 네거티브 에지를 담아낸다는 사실을 보여주는 것입니다. 따라서 그것들을 함께 섞으면 중간 값을 얻게 되는 것이죠. 하지만 이게 매우 큰, 체크 패턴을 가진 1000x1000 정도의 이미지라면, 이런 10의 전환영역은 보이지 않습니다. 중간 값은 이미지 사이즈에 비해 꽤 작을 겁니다. 요약하자면, 다른 필터를 사용하면 수직/수평 에지를 찾도록 도와줍니다. 다시 말해, 우리가 사용한 3x3 수직 에지 detection filter는 가능한 여러 선택 중 하나일 뿐이라는 게 분명한 거죠. 역사적으로 볼 때, 컴퓨터 비전 문헌에서, 어떤 게 최상의 숫자체계인지에 대해 꽤 많은 논의가 있었습니다. 따라서 여러분이 사용할 수 있는 또 다른 것은, 아마도 1, 2 1, 0, 0, 0, -1, -2, -1 일겁니다. 이건 Sobel Filter라고 불리는 겁니다. 이것의 장점은 중앙 열, 중앙픽셀에 에 좀 더 무게를 두어 좀 더 견고하게 만든다는 것입니다. 그러나 컴퓨터 비전 연구원들은 또 다른 세트의 숫자들도 사용하겠죠. 1, 2, 1, 대신에 3, 10, 3, 이렇게 될 수 있을 겁니다, 그렇죠? 그리고 -3 ,-10, -3 이렇게요. 그리고 이건 Scharr Filter라는 겁니다. 이건 약간 다른 특징을 가지고 있습니다 그리고 이건 vertical edge detection만을 위한 겁니다. 그리고 이걸 90도 돌려보시면, horizontal edge detection을 볼 수 있죠. 딥러닝이 떠오르면서, 우리가 배운 것 중의 하나는 복잡한 이미지에서 모서리들을 감지할 때, 컴퓨터 비전 연구원들이 이 9개의 숫자를 택하게 하지 않아도 된다는 겁니다. 여러분은 그냥 그걸 배워서 이 매트릭스의 9개의 숫자들을 파라미터로 처리하면, 백 프로퍼게이션 (역전파)을 사용하는 것을 배울 수 있을 테니까요. 목표는 9개의 파라미터를 배워서 6x6 이미지를 얻어낼 때, 그리고 그걸 3x3 필터와 컨볼브해서 좋은 edge detector를 만들어내도록 하는 거죠. 후속 강의들에서는 파라미터로 이 9개의 숫자들을 처리하여 역전 파가 1, 1, 1, 0, 0, 0, -1, -1을 학습하거나 혹은 Sobel Filter 나 Scharr Filter를 학습하거나, 혹은 이런 핸드코딩된 필터보다 여러분 데이타의 통계를 훨씬 잘 담아낼 수 있는 무언가를 학습하도록 선택하는 것을 알아보겠습니다. 그리고 수직/수평 에지가 아니라, 45도로 된 모서리에서, 아님 70도 혹은 73도 혹은 어느 방향으로 선택하든지 감지하는 것을 배울 수 있습니다. 이 모든 숫자들이 파라미터가 되게 만들고 데이타로부터 자동으로 그걸 배움으로써, 신경망가 low-level features배우고, 에지 같은 특징들을 배우도록 할 수 있을 겁니다. 컴퓨터 비전 연구원들이 수작업으로 이것들을 암호화 시키는 것보다 훨씬 견고하게 할 수 있을 겁니다. 이 모든 계산에는 여전히 컨벌루션 연산이 근간에 있으며, 이는 back propagation으로 하여금 3x3필터든 뭐든 배우게 합니다. 이 위치에서 감지하려 하는 게 어떤 특징이던 지간에 결과물로 내기 위해서 그걸 전체 이미지에 적용시키는 거죠. 그게 수직 에지, 수평 에지, 혹은 또 다른 각도에서의 에지나 심지어 영어로 이름조차 없는 다른 필터일 수도 있습니다. 이 9개의 숫자를 파라미터로 학습되도록 하는 생각은 컴퓨터 비전분야에서 가장 영향력 있는 아이디어의 하나였습니다. 이 과정의 뒷부분에서, 이번 주 후반이 되겠네요, 이 9개의 숫자를 배우기 위해서 back propagation을 사용하는 방법에 대해 자세하게 이야기해보죠. 하지만 우선, 기본 컨벌루션 연산에서 몇 가지 다른 변수나 몇 가지 세부사항에 대해 이야기해봅시다. 다음 강좌에서는 컨볼루션에서 패딩과 스트라이드 사용하는 방법을 이야기해보고 싶습니다 이 두 가지가 convolution neural network 빌딩블록의 중요한 요소들이 될 것입니다. 다음 강좌로 가보시죠
2019년 3월 1일 금요일
1. Convolutional Neural Networks_Computer vision
1.1. 컴퓨터 비전 소개
Convolutional Networks(콘볼루션망)
컴퓨터 비전은 빠르게 발전 - 딥러닝
자율주행 자동차 - 주변 어디에 다른 자동차나 보행자 감지
안면 인식 - 예전보다 훨씬 잘 작동
ex) 핸드폰 얼굴 인식. 집에 잠긴 문 인식
핸드폰의 음식 사진이나 호텔 사진, 혹은 재미있는 풍경사진들을 인식 하는 app
새로운 유형의 예술을 탄생
1.1.1. 컴퓨터 비전 분야의 빠른 발전이 완전히 새로운 어플리케이션 생산
1.1.2. 컴퓨터 비전 시스템 자체를 만드는 것 못한다 해도, 컴퓨터 비전을 연구하는 단체가 그 동안 아주 창의적이고 아주 독창적으로 새로운 신경망 구조와 알고리즘을 이용해 일해 왔기 때문에 실제로 다른 부냐로도 교차 적용할 수 있도록 북돋워 준다는 것
1.2. Computer Vision Problems
1.2.1. Image Classification
Cat 구분
1.2.2. Object detection
자율 자동차에 물체 인식
1.2.3. Neural Style Transfer(신경 스타일 이동)
기존 사진을 다른 스타일의 이미지로 결합
기존 강의에서 64 * 64 이미지에 3 rgb 채널을 사용하여 12288 feature가 됩니다.
하지만 64 * 64 이미지는 상당이 작은 이미지
만약 더 큰 이미지들로 작업을 하면
1000 * 100 * 3 = 300만입니다.
300만의 입력feature를 가지고 있다면 이는 곧 300만 차원일 것이라는 것을 의미합니다.
결국, 첫 번째 은닉 층에서 아마도 1000 은닉 층이 있을 것이고 그럼 총 무게가 W1매트릭스라는 것입니다.
만일 여러분이 기본 혹은 연결된 네트워크를 사용한다면, 이 매트릭스는 1000 x 3000000 차원의 매트릭스가 될 것입니다.
왜냐하면 X는 300만을 곱한 R이 되기 때문이죠. 3m, 300만 표시하기 위해 m을 사용하고 있습니다.
이 매트릭스가 매우 매우 거대한 30억 파라미터에 이른다는 것이죠.
그리고 이 많은 파라미터로 신경망 네트워크가 과대 적합을 방지하도록 충분한 데이터를 얻는 것을 어렵습니다.
또한, 30억 파라미터를 가진 신경망을 단련하는 것에 대한 컴퓨터 요구사항과 메모리 요구사항은 실행불가능 합니다.
더 나은 회선 작업을 구현 해야 컨볼루션 신경망의 근본적 구성 요소 중의 하나이기도 하니까요.
edge detection의 예시를 통해 컨볼루션을 설명하도록 하겠습니다.
Convolutional Networks(콘볼루션망)
컴퓨터 비전은 빠르게 발전 - 딥러닝
자율주행 자동차 - 주변 어디에 다른 자동차나 보행자 감지
안면 인식 - 예전보다 훨씬 잘 작동
ex) 핸드폰 얼굴 인식. 집에 잠긴 문 인식
핸드폰의 음식 사진이나 호텔 사진, 혹은 재미있는 풍경사진들을 인식 하는 app
새로운 유형의 예술을 탄생
1.1.1. 컴퓨터 비전 분야의 빠른 발전이 완전히 새로운 어플리케이션 생산
1.1.2. 컴퓨터 비전 시스템 자체를 만드는 것 못한다 해도, 컴퓨터 비전을 연구하는 단체가 그 동안 아주 창의적이고 아주 독창적으로 새로운 신경망 구조와 알고리즘을 이용해 일해 왔기 때문에 실제로 다른 부냐로도 교차 적용할 수 있도록 북돋워 준다는 것
1.2. Computer Vision Problems
1.2.1. Image Classification
Cat 구분
1.2.2. Object detection
자율 자동차에 물체 인식
1.2.3. Neural Style Transfer(신경 스타일 이동)
기존 사진을 다른 스타일의 이미지로 결합
기존 강의에서 64 * 64 이미지에 3 rgb 채널을 사용하여 12288 feature가 됩니다.
하지만 64 * 64 이미지는 상당이 작은 이미지
만약 더 큰 이미지들로 작업을 하면
1000 * 100 * 3 = 300만입니다.
300만의 입력feature를 가지고 있다면 이는 곧 300만 차원일 것이라는 것을 의미합니다.
결국, 첫 번째 은닉 층에서 아마도 1000 은닉 층이 있을 것이고 그럼 총 무게가 W1매트릭스라는 것입니다.
만일 여러분이 기본 혹은 연결된 네트워크를 사용한다면, 이 매트릭스는 1000 x 3000000 차원의 매트릭스가 될 것입니다.
왜냐하면 X는 300만을 곱한 R이 되기 때문이죠. 3m, 300만 표시하기 위해 m을 사용하고 있습니다.
이 매트릭스가 매우 매우 거대한 30억 파라미터에 이른다는 것이죠.
그리고 이 많은 파라미터로 신경망 네트워크가 과대 적합을 방지하도록 충분한 데이터를 얻는 것을 어렵습니다.
또한, 30억 파라미터를 가진 신경망을 단련하는 것에 대한 컴퓨터 요구사항과 메모리 요구사항은 실행불가능 합니다.
더 나은 회선 작업을 구현 해야 컨볼루션 신경망의 근본적 구성 요소 중의 하나이기도 하니까요.
edge detection의 예시를 통해 컨볼루션을 설명하도록 하겠습니다.
2019년 1월 17일 목요일
2019년 1월 3일 목요일
005. Machine learning W1 05 Model Representation
Linear regression with one variable
Model representation
Supervised Learning
Given the "right answer" for each example in the data.
Regression Problem
Predict real-valued output
Training set
Learning Algorithm
Size of house -> h -> Estimated price
x hypothesis (estimated value of y)
h maps from x's to y's
How do we represent h?
Linear regression with one variable.
Univariate linear regression.
Linear regression with one variable
Cost function
Model representation
Supervised Learning
Given the "right answer" for each example in the data.
Regression Problem
Predict real-valued output
Training set
Learning Algorithm
Size of house -> h -> Estimated price
x hypothesis (estimated value of y)
h maps from x's to y's
How do we represent h?
Linear regression with one variable.
Univariate linear regression.
Linear regression with one variable
Cost function
004. Machinelearing W1 04UnsupervisedLearning
Unsupervised Learning
- Organize computing clusters
- Social network analysis
- Market segmentation
- Astronomical data analysis
Cocktail party problem
Speaker1 Microphone1
Speaker2 Microphone2
[W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');
Of the following examples, which would you address using an unsupervised learning algorithm?(Check all that apply.)
- Given email labeled as spam/not spam, learn a spam filter.
- Given a set of news articles found on the web, group them into set of articles about the same story.
- Give a database of customer data, automatically discover market segments and group customers into different market segments.
- Give a dataset of patients diagnosed as either having diabetes or not, learn to classify new patients as having diabetes or not.
- Organize computing clusters
- Social network analysis
- Market segmentation
- Astronomical data analysis
Cocktail party problem
Speaker1 Microphone1
Speaker2 Microphone2
[W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');
Of the following examples, which would you address using an unsupervised learning algorithm?(Check all that apply.)
- Given email labeled as spam/not spam, learn a spam filter.
- Given a set of news articles found on the web, group them into set of articles about the same story.
- Give a database of customer data, automatically discover market segments and group customers into different market segments.
- Give a dataset of patients diagnosed as either having diabetes or not, learn to classify new patients as having diabetes or not.
피드 구독하기:
글 (Atom)