Làm thế nào các kết cấu 1x1 giống như một lớp được kết nối đầy đủ?


55

Gần đây tôi đã đọc bình luận của Yan LeCun về các kết quả 1x1 :

Trong Convolutional Nets, không có thứ gọi là "các lớp được kết nối đầy đủ". Chỉ có các lớp chập với các hạt tích chập 1x1 và một bảng kết nối đầy đủ.

Một thực tế quá hiếm khi hiểu rằng ConvNets không cần phải có đầu vào có kích thước cố định. Bạn có thể huấn luyện chúng trên các đầu vào xảy ra để tạo ra một vectơ đầu ra duy nhất (không có phạm vi không gian), sau đó áp dụng chúng cho các hình ảnh lớn hơn. Thay vì một vectơ đầu ra duy nhất, sau đó bạn có được một bản đồ không gian của các vectơ đầu ra. Mỗi vector nhìn thấy các cửa sổ đầu vào tại các vị trí khác nhau trên đầu vào. Trong kịch bản đó, "các lớp được kết nối đầy đủ" thực sự hoạt động như các kết cấu 1x1.

Tôi muốn xem một ví dụ đơn giản cho việc này.

Thí dụ

Giả sử bạn có một mạng kết nối đầy đủ. Nó chỉ có một lớp đầu vào và một lớp đầu ra. Lớp đầu vào có 3 nút, lớp đầu ra có 2 nút. Mạng lưới này có 32=6 thông số. Để làm cho nó cụ thể hơn nữa, giả sử bạn có chức năng kích hoạt ReLU trong lớp đầu ra và ma trận trọng số

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

Vậy mạng là f(x)=ReLU(Wx+b) với xR3 .

Làm thế nào lớp chập phải trông giống như vậy? LeCun có nghĩa là gì với "bảng kết nối đầy đủ"?

Tôi đoán để có được một CNN tương đương, nó sẽ phải có cùng số lượng tham số. MLP từ trên cao có 23+2=8 thông số.

Câu trả lời:


29

Ví dụ của bạn

Trong ví dụ của bạn, chúng tôi có 3 đơn vị đầu vào và 2 đầu ra. Để áp dụng kết luận, hãy nghĩ về các đơn vị có hình dạng: [1,1,3][1,1,2], tương ứng. Theo thuật ngữ CNN, chúng tôi có các bản đồ tính năng 3đầu vào và 2đầu ra, mỗi bản đồ có các kích thước không gian 1 x 1.

Áp dụng n x ntích chập cho một lớp với các kbản đồ đặc trưng, ​​đòi hỏi bạn phải có nhân hình dạng [n,n,k]. Do đó, hạt nhân của bạn 1x1có hình dạng [1, 1, 3]. Bạn cần 2những hạt nhân (hoặc bộ lọc) đó để tạo ra các 2bản đồ tính năng đầu ra. Xin lưu ý: các kết cấu thực sự là 1 × 1 × số kênh của các cấu trúc đầu vào . Điều cuối cùng chỉ hiếm khi được đề cập.1×11×1×number of channels of the input

Thật vậy, nếu bạn chọn làm hạt nhân và thiên vị:

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

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

Chuyển đổi trong mã thực

Đối với một ví dụ thực tế, cũng có một cái nhìn về việc thực hiện vgg-fcn của tôi . Mã được cung cấp trong tệp này lấy trọng số VGG, nhưng chuyển đổi mọi lớp được kết nối đầy đủ thành một lớp chập. Mạng kết quả mang lại đầu ra giống như vggkhi áp dụng cho hình ảnh đầu vào có hình dạng [244,244,3]. (Khi áp dụng cả hai mạng mà không cần đệm).

Các lớp chập biến đổi được giới thiệu trong hàm _fc_layer(dòng 145). Chúng có kích thước hạt nhân 7x7cho FC6 (tối đa, do pool5VGG đưa ra bản đồ hình dạng đặc trưng [7,7, 512]. Lớp FC7FC8được triển khai dưới dạng 1x1chập.

"Bảng kết nối đầy đủ"

Tôi không chắc chắn 100%, nhưng anh ta có thể đề cập đến bộ lọc / kernel có cùng kích thước với bản đồ tính năng đầu vào. Trong cả hai trường hợp (Mã và ví dụ của bạn), kích thước không gian là tối đa theo nghĩa, rằng kích thước không gian của bộ lọc giống với kích thước không gian như đầu vào.


"Do đó, các hạt nhân của bạn 1x1 có hình dạng [1, 1, 3].". Gì? Dường như có một sự hiểu lầm lớn hơn về kết án. Tôi nghĩ nếu một hạt nhân chập có hình dạng [1, 1, 3], thì người ta sẽ nói nó là một tổ hợp 1x1x3? Vì vậy, tích chập 1x1 chỉ là về đầu ra, không phải về kernel?
Martin Thoma

2
Đối với tôi kernel = filter, bạn có đồng ý không? >> "Vì vậy, tích chập 1x1 chỉ là về đầu ra, không phải về hạt nhân? Hoàn toàn không. Một 3x3tích chập có thể có hình dạng đầu ra tùy ý." Thật vậy, nếu sử dụng phần đệm và stride=1sau đó output shape = input shape. >> "Tôi nghĩ rằng nếu một hạt nhân chập có hình dạng [1, 1, 3], thì người ta sẽ nói đó là một tổ hợp 1x1x3?" Không, tôi chưa bao giờ nghe ai đó nói về kết án 3x3x512. Tuy nhiên, tất cả các bộ lọc tích chập mà tôi đã thấy có kích thước không gian thứ ba bằng với số lượng bản đồ tính năng của lớp đầu vào.
MarvMind

Để tham khảo, hãy xem Convolution Demokhóa học của Karpathies CS321n: cs231n.github.io/convolutional-networks/#conv . Hoặc tại API tenorflow: tenorflow.org/versions/r0.9/api_docs/python/nn.html#conv2d Các bộ lọc được cho là có hình dạng [filter_height, filter_width, in_channels, out_channels].
MarvMind

Tôi có thể thêm điều với "kết quả 1x1 là 1 x 1 x số kênh của đầu vào" vào câu trả lời của bạn không? Đây là nguồn gốc của sự nhầm lẫn của tôi và tôi tiếp tục quên điều này.
Martin Thoma

Chắc chắn, đi trước!
MarvMind

4

nnimnnm

nnim

nnim

nnim

( Nguồn )


1
n=1

2

Hạt nhân tương đương chỉ đơn giản là có bất kỳ hình dạng nào mà đầu vào có, và tính toán một sản phẩm chấm căng. (Tôi sử dụng từ "hình dạng" vì dường như có một số nhầm lẫn về "kích thước", thường bỏ qua kích thước kênh / chiều sâu). Không có "trượt hạt nhân qua đầu vào" liên quan, vì hạt nhân càng lớn càng tốt. Trích dẫn ghi chú khóa học Stanford CS 231n :

bất kỳ lớp FC nào cũng có thể được chuyển đổi thành lớp CONV. Ví dụ: một lớp FC có K = 4096 đang xem xét một số khối lượng đầu vào có kích thước 7 × 7 × 512 có thể được biểu thị tương đương như một lớp CONV với F = 7, P = 0, S = 1, K = 4096, F = 7, P = 0, S = 1, K = 4096. Nói cách khác, chúng tôi đang đặt kích thước bộ lọc thành chính xác kích thước của âm lượng đầu vào và do đó, đầu ra sẽ chỉ đơn giản là 1 × 1 × 4096 do chỉ có một cột có chiều sâu duy nhất phù hợp với điều đó qua âm lượng đầu vào, cho kết quả giống hệt như lớp FC ban đầu.

Tôi tin rằng "F = 7, P = 0, S = 1, K = 4096, F = 7, P = 0, S = 1, K = 4096" ở đây có nghĩa là mỗi hạt nhân có hình dạng 7x7x512 và có 4096 bộ lọc như vậy.

Câu trả lời trước đó đã đề cập rằng fc cuối cùng của AlexNet (nhận đầu vào có hình 1x1x4096 và tính 1000 điểm của lớp) được triển khai dưới dạng "tích chập 1x1". Để hoàn thành, mỗi hạt nhân như vậy có hình dạng 1x1x4096 và có 1000 trong số chúng.

Le Cunn cũng giải thích điều này trong bài báo CNN , trang 8, mô tả về LeNet5:

Lớp C5 là một lớp chập với 120 bản đồ đặc trưng. Mỗi đơn vị được kết nối với vùng lân cận 5x5 trên tất cả 16 bản đồ tính năng của S4. Ở đây vì kích thước của S4 cũng là 5x5, kích thước bản đồ tính năng của C5 là 1x1; số tiền này kết nối đầy đủ giữa S4 và C5.


1

Đối với bất kỳ người dùng PyTorch mới nào như tôi - đừng nhầm lẫn "lớp được kết nối đầy đủ" với "lớp tuyến tính".

Một lớp tuyến tính và kết cấu 1x1 là cùng một thứ. Phải mất một lúc tôi mới hiểu rằng không có thứ gọi là "lớp được kết nối đầy đủ" - nó chỉ đơn giản là làm phẳng các kích thước không gian thành một tenxơ khổng lồ 1D. Việc làm phẳng khiến mọi yếu tố trên tất cả các vị trí không gian được trình bày dưới dạng bản đồ / kênh / thứ nguyên tính năng riêng biệt (bất cứ điều gì bạn muốn gọi nó). Do đó, khi chúng ta áp dụng một lớp tuyến tính trên một tenxơ phẳng , chúng ta sẽ có một hoạt động được kết nối đầy đủ , rõ ràng, không giống như một phép chập 1x1.

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

Các câu trả lời khác cho rằng một lớp được kết nối đầy đủ chỉ đơn giản là một lớp chập hợp lệ nxn cho một đầu vào có kích thước nxnlà khó hiểu (mặc dù, chính xác).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.