1x1 컨볼 루션은 완전히 연결된 레이어와 어떻게 동일합니까?


55

최근 에 1x1 회선에 대한 Yan LeCuns 의견을 읽었습니다 .

Convolutional Nets에는 "완전히 연결된 레이어"와 같은 것은 없습니다. 1x1 컨볼 루션 커널과 전체 연결 테이블이있는 컨볼 루션 레이어 만 있습니다.

ConvNet에 고정 된 크기의 입력이 필요하지 않다는 사실은 매우 드물게 이해됩니다. 공간 출력 범위없이 단일 출력 벡터를 생성하는 입력에 대해 입력을 훈련 한 다음 더 큰 이미지에 적용 할 수 있습니다. 단일 출력 벡터 대신 출력 벡터의 공간 맵을 얻습니다. 각 벡터는 입력의 다른 위치에서 입력 창을 봅니다. 이 시나리오에서 "완전히 연결된 레이어"는 실제로 1x1 컨볼 루션 역할을합니다.

이에 대한 간단한 예를보고 싶습니다.

네트워크가 완전히 연결되어 있다고 가정하십시오. 입력 레이어와 출력 레이어 만 있습니다. 입력 레이어에는 3 개의 노드가 있고 출력 레이어에는 2 개의 노드가 있습니다. 이 네트워크에는 32=6 매개 변수가 있습니다. 좀 더 구체적으로 만들기 위해 출력 레이어와 가중치 매트릭스에 ReLU 활성화 기능이 있다고 가정 해 봅시다.

W=(011235)R2×3b=(813)R2

f(x)=ReLU(Wx+b)xR3

컨벌루션 레이어는 어떻게 같아야합니까? LeCun은 "전체 연결 테이블"이란 무엇입니까?

23+2=8

답변:


29

당신의 예

귀하의 예에는 3 개의 입력 장치와 2 개의 출력 장치가 있습니다. 컨벌루션을 적용하려면 모양이 각각 [1,1,3]및 : 인 단위를 생각하십시오 [1,1,2]. CNN 용어로, 우리는 각각 공간 치수를 갖는 3입력 및 2출력 기능 맵을 가지고 1 x 1있습니다.

n x nk[n,n,k]1x1[1, 1, 3]221×11×1×number of channels of the input


w1=(011)R3w2=(235)R3b=(813)R2

f(x)=ReLU((w1xw2x)+(b1b2))xR3

실제 코드에서의 변환

실제 예를 보려면 vgg-fcn 구현도 살펴보십시오 . 이 파일에 제공된 코드는 VGG 가중치를 취하지 만 완전히 연결된 모든 레이어를 컨볼 루션 레이어로 변환합니다. 결과 네트워크 vgg는 shape의 입력 이미지에 적용될 때 와 동일한 출력을 생성합니다 [244,244,3]. (패딩없이 두 네트워크를 모두 적용하는 경우).

변환 된 컨볼 루션 레이어는 기능 _fc_layer(라인 145)에 도입됩니다 . 그들은 커널 크기가 7x7로, 최대입니다 FC6 (를 들어 pool5VGG 모양의 기능지도 출력의 [7,7, 512]. 레이어 FC7FC8로 구현 1x1회선.

"전체 연결 테이블"

100 % 확신 할 수는 없지만 입력 기능 맵과 치수가 같은 필터 / 커널을 참조 할 수 있습니다. 두 경우 모두 (코드 및 예제) 공간 차원은 필터의 공간 차원이 입력과 공간 차원과 동일하다는 점에서 최대입니다.


"따라서 여러분의 커널은 1x1 컨볼 루션의 형태가 [1, 1, 3]입니다." 뭐? 컨볼 루션에 대한 더 큰 오해가있는 것 같습니다. 컨볼 루션 커널의 모양이 [1, 1, 3]이라면 1x1x3 컨볼 루션이라고 생각합니까? 따라서 1x1 컨볼 루션은 커널에 관한 것이 아니라 출력에 관한 것입니까?
Martin Thoma

2
저에게 kernel = filter동의하십니까? >> "그래서 × 1 회선은 전혀?하지 커널에 대해 만 출력에 관한 것입니다. 3x3회선은 임의의 출력 형상을 가질 수있다."실제로, 패딩이 사용되는 경우 stride=1다음 output shape = input shape. >> "컨볼 루션 커널의 모양이 [1, 1, 3]이라면 1x1x3 컨볼 루션이라고 생각합니까?" 아니요, 누군가가 3x3x512회선 에 대해 이야기하는 것을들은 적이 없습니다 . 그러나 내가 본 모든 컨볼 루션 필터는 입력 레이어의 기능 맵 수와 동일한 세 번째 공간 차원을 가지고 있습니다.
MarvMind

참고 Convolution Demo로 Karpathies CS321n 코스 cs231n.github.io/convolutional-networks/#conv를 살펴 보십시오 . 또는 tensorflow API에서 : tensorflow.org/versions/r0.9/api_docs/python/nn.html#conv2d 필터는 모양이 있어야합니다 [filter_height, filter_width, in_channels, out_channels].
MarvMind

"1x1 컨볼 루션은 1 x 1 x 수의 입력 채널 수"인 것을 답변에 추가해도 될까요? 이것이 내 혼란의 근원이었고 나는 이것을 잊어 버렸습니다.
Martin Thoma

응 해봐!
MarvMind

4

nnimnnm

nnim

nnim

nnim

( 소스 )


1
n=1

2

동등한 커널은 입력의 모양이 무엇이든 텐서 도트 곱을 계산합니다. ( "크기"에 대해 약간의 혼동이있는 것처럼 보이기 때문에 "모양"이라는 단어를 사용하는데, 이는 종종 채널 / 깊이 차원을 무시합니다). 커널이 가능한 한 커서 "입력을 가로 질러 커널을 슬라이딩"하는 것은 없습니다. 인용 Stanford CS 231n 과정 노트 :

모든 FC 레이어는 CONV 레이어로 변환 될 수 있습니다. 예를 들어, 크기가 7 × 7 × 512 인 입력 볼륨을보고있는 K = 4096의 FC 레이어는 F = 7, P = 0, S = 1, K = 4096, F 인 CONV 레이어와 동일하게 표현 될 수 있습니다. = 7, P = 0, S = 1, K = 4096. 다시 말해, 필터 크기를 입력 볼륨의 크기로 정확하게 설정하고 있으므로 단일 깊이 열만 입력 볼륨에 맞도록 출력이 1 × 1 × 4096이되므로 동일한 결과를 얻을 수 있습니다. 초기 FC 레이어

여기서 "F = 7, P = 0, S = 1, K = 4096, F = 7, P = 0, S = 1, K = 4096"은 각 전환 커널의 모양이 7x7x512이고 4096 개의 필터가 있다는 것을 의미합니다.

앞의 대답은 AlexNet의 마지막 fc (형태 1x1x4096의 입력을 수신하고 1000 개의 클래스 점수를 계산 함)가 "1x1 컨볼 루션"으로 구현되었다고 언급했습니다. 완료하려면 이러한 각 전환 커널의 모양은 1x1x4096이며 그 중 1000 개입니다.

Le Cunn은 또한 CNN 논문 , 8 페이지 LeNet5에 대한 설명에서이를 설명합니다.

레이어 C5는 120 개의 기능 맵이있는 컨볼 루션 레이어입니다. 각 장치는 16 개의 S4 기능 맵 모두에서 5x5 이웃에 연결됩니다. 여기서 S4의 크기도 5x5이므로 C5의 기능 맵의 크기는 1x1입니다. 이것은 S4와 C5 사이의 완전한 연결에 해당합니다.


1

나와 같은 초보자 PyTorch 사용자에게는 "완전히 연결된 레이어"와 "선형 레이어"를 혼동 하지 마십시오.

선형 레이어와 1x1 컨볼 루션은 동일합니다. "완전히 연결된 층"과 같은 것은 없다는 것을 이해하는 데 잠시 시간이 걸렸습니다. 그것은 단순히 공간 차원을 1D 거대한 텐서로 평탄화하는 것입니다. 평탄화는 모든 공간 위치의 모든 요소가 별도의 피쳐 맵 / 채널 / 치수로 표시되도록합니다 (원하는대로). 우리가 적용 할 때 따라서, 선형 층 A의 평평 텐서 , 우리는 얻을 완전히 연결 분명히, 1 × 1 회선과 동일하지 않습니다 작업을.

1x1j=01X[j]W0[j]+b[0]j=01X[j]W1[j]+b[1]j=01X[j]W2[j]+b[2]

O=W2×3X3×1+b2×1

완전히 연결된 레이어가 단순히 크기 입력에 대한 유효한 nxn 컨볼 루션 레이어 라고 주장하는 다른 답변 nxn은 혼란 스럽지만 정확합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.