현재 Udacity Deep Learning Tutorial을하고 있습니다. 레슨 3에서는 1x1 컨벌루션에 대해 이야기합니다. 이 1x1 컨볼 루션은 Google Inception Module에서 사용됩니다. 1x1 컨볼 루션이 무엇인지 이해하는 데 문제가 있습니다.
나는 또한 Yann Lecun 의이 게시물 을 보았습니다.
누군가 나에게 친절하게 설명해 주시겠습니까?
현재 Udacity Deep Learning Tutorial을하고 있습니다. 레슨 3에서는 1x1 컨벌루션에 대해 이야기합니다. 이 1x1 컨볼 루션은 Google Inception Module에서 사용됩니다. 1x1 컨볼 루션이 무엇인지 이해하는 데 문제가 있습니다.
나는 또한 Yann Lecun 의이 게시물 을 보았습니다.
누군가 나에게 친절하게 설명해 주시겠습니까?
답변:
실제로 Google Inception 기사 Going Deeper with Convolutions 에서 다음 과 같이 설명합니다.
적어도이 순진한 형태의 상기 모듈들에 대한 하나의 큰 문제는, 적은 수의 필터를 갖는 컨볼 루션 층 (convolutional layer)에서 아주 적은 수의 5x5 컨볼 루션조차 엄청나게 비쌀 수 있다는 것이다.
이는 제안 된 아키텍처의 두 번째 아이디어로 이어진다. 계산 요구 사항이 너무 많이 증가 할 때마다 차원 축소 및 투영을 신중하게 적용한다. 이것은 임베딩의 성공을 기반으로합니다. 낮은 차원의 임베딩에도 비교적 큰 이미지 패치에 대한 많은 정보가 포함될 수 있습니다. 1x1 컨볼 루션은 값 비싼 3x3 및 5x5 컨볼 루션 이전의 감소를 계산하는 데 사용됩니다. 축소로 사용되는 것 외에도 정류 선형 활성화를 사용하여 이중 용도로 만듭니다.
따라서 Inception 아키텍처에서는 1x1 컨볼 루션 필터를 사용하여 필터 차원의 차원을 줄입니다. 위에서 설명한 바와 같이, 이러한 1x1 전환 레이어는 일반적으로 필터 공간 차원 (증가 또는 감소)을 변경하는 데 사용될 수 있으며, Inception 아키텍처에서는 필터 차원 공간에서 이러한 1x1 필터가 차원 축소에 얼마나 효과적인지 알 수 있습니다. 공간 차원 공간이 아닙니다.
아마도 1x1 전환 필터에 대한 다른 해석이있을 수 있지만 특히 Google Inception 아키텍처와 관련 하여이 설명을 선호합니다.
1x1 컨볼 루션은 단순히 모든 채널을 가진 입력 픽셀을 주변을 보지 않고 출력 픽셀에 매핑합니다. 깊이 채널 수를 줄이는 데 자주 사용됩니다. 볼륨이 매우 큰 볼륨을 곱하기에는 속도가 느리기 때문입니다.
input (256 depth) -> 1x1 convolution (64 depth) -> 4x4 convolution (256 depth)
input (256 depth) -> 4x4 convolution (256 depth)
아래쪽은 약 ~ 3.7 배 느립니다.
이론적으로 신경망은 모든 것을 곱하는 무차별적인 힘 대신 이것을 사용하기 위해 '색상'을 입력하도록 '선택'할 수 있습니다.
num_weights = in_depth x out_depth x kernel_size = 256x256x4x4
. 첫 번째 경우 num_weights = 256x64x1x1+64x265x4x4=256x64x17
. 비율을 취하면 256 / 17 ~ 3.7이됩니다. 숫자 가중치가 입력 깊이 및 출력 깊이와 관련되는 방식에 대한 시각화는이 페이지 9를 확인하십시오. arxiv.org/pdf/1603.07285.pdf
https://datascience.stackexchange.com/questions/9175/how-do-subsequent-convolution-layers-work
특히, 유형 2.2는 회선에 대한 올바른 설명입니다.
또 다른 유용한 답변 :
이 답변은 각 인 / 아웃 채널 조합 에 대해 별도의 필터가있는 방법을 설명합니다 . 이들 각각을 계산 한 후 결과 는 출력 채널 수 값을 남기고 입력 채널 축에 대해 합산 됩니다.
다음은 1x1 컨볼 루션 작동 방식을 이해하는 데 도움이되는 비디오입니다.
내가 얻은 주요 내용은 다음과 같습니다.
1 개 * 1 전환 (일명 네트워크의 네트워크 )?
입력이 (n_H, n_W, n_c_prev)라고 가정 해 봅시다. 당신은 할 수 있습니다 생각 (1 * 1 * n_c_prev)으로의 단일 신경 세포 (완전히 연결된 네트워크 - 즉 왜 N / N / w에 w ) 즉 그들을 곱 입력에 (n_c_prev) 숫자 복용 (1 * 1 * n_c_prev )를 추가 한 다음 ReLu & 출력 (n_H, n_W)을 취하고 여러 필터 (n_c)가 있으면 출력은 (n_H, n_W, n_C)가됩니다.
따라서 풀링 레이어를 사용하여 공간 크기 (n_H, n_W)를 줄이고 1 * 1 전환을 사용하여 n_c_prev (즉, 채널 수)를 줄여 많은 계산을 절약 할 수 있습니다. 예를 들어
따라서 빼앗아
1x1 컨 벌루 셔널 레이어를 사용하여 n_C를 줄일 수 있지만 n_H, n_W는 줄일 수 없습니다.
풀링 계층을 사용하여 n_H, n_W 및 n_C를 줄일 수 있습니다.
1 * 1 CONV 필터를 사용하여 무엇을합니까? 당신은 기본적으로 (elementwise는 * + 뒤에) "W 크기의 이미지 / featureMap 이상이 볼륨"1 * 1 * num_input_channel_of_featureMap "크기 가중치 및 말다을 H num_input_channel_of_featureMap가"과 무엇을 얻는 것은 크기 "W의 *의 H"의 출력이다.
이제 이런 종류의 "1 * 1 * num_input_channel_of_featureMap"의 "#filters"번호를 사용 하고 최종 출력으로 "W H #filter" 볼륨을 얻을 수 있습니다 !
더 정확하게는, 입력 피쳐 맵에서 동일한 위치에 32 개의 다른 가중치 (1 * 1 볼륨)와 "1 * 1"을 곱한 후 ReLu가 뒤 따르고 녹색 픽셀로 표시되는 해당 숫자 하나를 얻는 것입니다. !
1 * 1 CONV는 일부 네트워크 (INCEPTIONS)에서 채널 수를 줄이고 계산 비용을 줄이는 데 도움이됩니다.!
그러나 물론 채널 수를 입력 기능 맵과 동일하게 유지하려면 1 * 1 CONV 가하는 한 가지 간단한 방법은 ReLU 비선형 성을 적용하여 복잡한 기능을 배울 수 있다는 것입니다. NN .
1x1 필터와 관련된 차원 축소에 대한 또 다른 아이디어 :
FCN의 4096x8x8 fc7 레이어를 예로 들어 보겠습니다. 다음 계층 (fc8이라고 함)이 필터 크기가 1 인 2048x8x8이면 어떻게됩니까? fc7은 네트워크 내부에 매우 깊고 4096 개의 기능은 의미 적으로 풍부하지만 각 뉴런 (예 : 입력 이미지는 250x250x3)에 큰 수용 영역이 있습니다. 다시 말해서, 뉴런이 매우 활동적이라면, 시맨틱 필드 어딘가에 상응하는 특징이 존재한다는 것을 알고 있습니다.
예를 들어 1x1 필터가있는 fc8에서 가장 왼쪽에있는 뉴런을 예로 들어 보겠습니다. 동일한 수용 필드 (이미지의 왼쪽 위 모서리)에서만 4096 개의 뉴런 / 기능에 모두 연결되며 각 기능은 단일 기능으로 활성화됩니다. 그들 중 일부 (같은 500 명)는 매우 활동적입니다. 결과 뉴런도 매우 활동적이라면 아마도이 수용 분야에서 하나 이상의 특징을 식별하는 것을 배웠 음을 의미합니다. fc8에서 가장 왼쪽에있는 뉴런에 대해 2048 번이 작업을 수행 한 후에는 그 중 상당수 (예 : 250)가 매우 활성화되어 동일한 수신 필드에서 fc7을 통해 기능을 '수집'했으며 하나.
차원을 계속 줄이면 점점 더 많은 수의 뉴런이 동일한 수용 영역에서 점점 더 많은 수의 특징을 배우게됩니다. 그리고 공간 파라미터 8x8은 동일하게 유지되므로, 각 뉴런의 '시각'을 변경하지 않으므로 공간 조도를 감소시키지 않습니다.
Long, Shelhamer 및 Darrel의 'Fully Convolutional Networks'를 살펴볼 수 있습니다.