Nội dung bài viết
Giải thích trực quan và toán học về lớp tích chập 2D và các đối số của nó
Giới thiệu
Các thư viện và nền tảng của Deep Learning như Tensorflow, Keras, Pytorch, Caffe hoặc Theano giúp chúng ta trong cuộc sống hàng ngày để các ứng dụng mới hàng ngày khiến chúng ta nghĩ “Chà!”. Tất cả chúng ta đều có framework yêu thích của mình, nhưng điểm chung của chúng là chúng làm cho mọi thứ trở nên dễ dàng với chúng ta với các chức năng dễ sử dụng có thể được cấu hình khi cần thiết. Nhưng chúng ta vẫn cần hiểu các đối số có sẵn là gì để tận dụng tất cả sức mạnh mà các khuôn khổ này mang lại cho chúng ta.
Trong bài đăng này, tôi sẽ cố gắng liệt kê tất cả các đối số này. Bài đăng này dành cho bạn nếu bạn muốn xem tác động của chúng đối với thời gian tính toán, số lượng thông số có thể đào tạo và kích thước của các kênh đầu ra được đối chiếu.
Hình dạng đầu vào: (3, 7, 7) – Hình dạng đầu ra: (2, 3, 3) – K: (3, 3) – P: (1, 1) – S: (2, 2) – D: (2, 2) – G: 1
Tất cả các ảnh GIF đều được tạo bằng python. Bạn sẽ có thể kiểm tra từng đối số này và tự mình hình dung tác động của chúng bằng các tập lệnh được đẩy trên Github của tôi (hoặc để tạo GIF của bạn).
Các phần của bài đăng này sẽ được chia theo các lập luận sau. Các đối số này có thể được tìm thấy trong tài liệu Pytorch của mô-đun Conv2d :
Bạn đang đọc : Conv2d : Cuối cùng cũng hiểu điều gì xảy ra trong thẻ chuyển tiếp
- in_channels ( int ) – Số kênh trong hình ảnh đầu vào
- out_channels ( int ) – Số kênh được tạo ra bởi tích chập
- kernel_size ( int hoặc tuple ) – Kích thước của hạt nhân đang xoay
- stride ( int hoặc tuple, tùy chọn ) – Bước của tích chập. Mặc định: 1
- padding ( int hoặc tuple, tùy chọn ) – Thêm zero-padding vào cả hai mặt của đầu vào. Mặc định: 0
- dilation ( int hoặc tuple, tùy chọn ) – Khoảng cách giữa các phần tử kernel. Mặc định: 1
- nhóm ( int, tùy chọn ) – Số lượng kết nối bị chặn từ kênh đầu vào đến kênh đầu ra. Mặc định: 1
- thiên vị ( bool, tùy chọn ) – Nếu
True
, thêm một thiên vị có thể học được vào đầu ra. Vỡ nợ:True
Kernel là gì?
Chuyển đổi giữa hình ảnh nguồn vào và hạt nhân
Hãy để tôi giới thiệu kernel là gì (hay ma trận tích chập ). Kernel mô tả một bộ lọc mà chúng ta sẽ chuyển qua một hình ảnh đầu vào. Để làm cho nó đơn giản, hạt nhân sẽ di chuyển trên toàn bộ hình ảnh, từ trái sang phải, từ trên xuống dưới bằng cách áp dụng một tích chập. Đầu ra của thao tác này được gọi là ảnh đã lọc .
Sản phẩm chuyển đổi
Hình dạng nguồn vào : ( 1, 9, 9 ) – Hình dạng đầu ra : ( 1, 7, 7 ) – K : ( 3, 3 ) – P. : ( 0, 0 ) – S : ( 1, 1 ) – D : ( 1, 1 ) – G : 1
Để lấy một ví dụ rất cơ bản, hãy tưởng tượng một nhân chập 3 x 3 lọc một hình ảnh 9 x 9. Sau đó, hạt nhân này di chuyển trên toàn ảnh để thu vào ảnh tất cả các ô vuông có cùng kích thước (3 x 3). Tích chập là một phép nhân theo phần tử (hoặc theo điểm). Tổng của kết quả này là pixel kết quả trên hình ảnh đầu ra (hoặc đã lọc).
Nếu bạn chưa quen với bộ lọc và ma trận chập, thì tôi thực sự khuyên bạn nên dành thêm một chút thời gian để hiểu về nhân chập. Chúng là cốt lõi của lớp tích chập 2D .
Thông số có thể huấn luyện và độ chệch
Các tham số có thể huấn luyện, còn được gọi đơn giản là “tham số”, là tất cả các tham số sẽ được cập nhật khi mạng được huấn luyện. Trong Conv2d, các phần tử có thể đào tạo là các giá trị tạo nên các hạt nhân. Vì vậy, đối với nhân tích chập 3 x 3 của chúng ta, chúng ta có 3 * 3 = 9 tham số có thể huấn luyện.
Sản phẩm chuyển đổi có thiên vị
Để hoàn thiện hơn. Chúng tôi có thể bao gồm thiên vị hoặc không. Vai trò của độ lệch là được thêm vào tổng của tích chập. Sự thiên vị này cũng là một tham số có thể huấn luyện, làm cho số lượng tham số có thể huấn luyện cho hạt nhân 3 x 3 của chúng ta tăng lên 10.
Số kênh đầu vào và đầu ra
Hình dạng nguồn vào : ( 1, 7, 7 ) – Hình dạng đầu ra : ( 4, 5, 5 ) – K : ( 3, 3 ) – P. : ( 0, 0 ) – S : ( 1, 1 ) – D : ( 1, 1 ) – G : 1
Lợi ích của việc sử dụng một lớp là có thể thực hiện các hoạt động tương tự cùng một lúc. Nói cách khác, nếu chúng ta muốn áp dụng 4 bộ lọc khác nhau có cùng kích thước cho một kênh đầu vào, thì chúng ta sẽ có 4 kênh đầu ra. Các kênh này là kết quả của 4 bộ lọc khác nhau. Vì vậy, kết quả từ 4 hạt nhân khác nhau .
Trong phần trước, chúng ta đã thấy rằng các tham số có thể đào tạo là những gì tạo nên các nhân tích chập. Vì vậy số lượng tham số tăng tuyến tính với số lượng nhân chập. Do đó tuyến tính với số kênh đầu ra mong muốn. Cũng lưu ý rằng thời gian tính toán cũng thay đổi tỷ lệ thuận với kích thước của kênh đầu vào và tỷ lệ thuận với số lượng hạt nhân.
Lưu ý rằng những đường cong trong biểu đồ Tham số giống nhau
Nguyên tắc tương tự cũng áp dụng cho số lượng kênh đầu vào. Hãy xem xét tình huống của một hình ảnh được mã hóa RGB. Hình ảnh này có 3 kênh: đỏ, xanh dương và xanh lá cây. Chúng tôi có thể quyết định trích xuất thông tin bằng các bộ lọc có cùng kích thước trên mỗi kênh trong số 3 kênh này để thu được bốn kênh mới. Do đó, hoạt động là 3 lần giống nhau, cho 4 kênh đầu ra.
Hình dạng nguồn vào : ( 3, 7, 7 ) – Hình dạng đầu ra : ( 4, 5, 5 ) – K : ( 3, 3 ) – P. : ( 0, 0 ) – S : ( 1, 1 ) – D : ( 1, 1 ) – G : 1
Mỗi kênh đầu ra là tổng của các kênh đầu vào đã lọc. Đối với 4 kênh đầu ra và 3 kênh đầu vào, mỗi kênh đầu ra là tổng của 3 kênh đầu vào đã lọc. Nói cách khác, lớp tích chập bao gồm 4 * 3 = 12 nhân chập.
Xin nhắc lại, số lượng tham số và thời gian tính toán thay đổi tỷ lệ thuận với số kênh đầu ra. Điều này là do mỗi kênh đầu ra được liên kết với các hạt nhân khác biệt với các kênh khác. Điều này cũng đúng với số lượng kênh đầu vào. Thời gian tính toán và số lượng các tham số tăng lên tương ứng.
Kích thước hạt nhân
Cho đến nay, tất cả các ví dụ đã được đưa ra với các hạt nhân kích thước 3 x 3. Trên thực tế, việc lựa chọn kích thước của nó là hoàn toàn phụ thuộc vào bạn. Có thể tạo một lớp chập với kích thước lõi 1 * 1 hoặc 19 * 19.
Hình dạng nguồn vào : ( 3, 7, 9 ) – Hình dạng đầu ra : ( 2, 3, 9 ) – K : ( 5, 2 ) – P. : ( 0, 0 ) – S : ( 1, 1 ) – D : ( 1, 1 ) – G : 1
Nhưng cũng hoàn toàn có thể không có nhân vuông. Có thể quyết định có các hạt nhân với chiều cao và chiều rộng khác nhau. Điều này thường xảy ra trong phân tích hình ảnh tín hiệu. Nếu chúng ta biết rằng chúng ta muốn quét hình ảnh của một tín hiệu, của một âm thanh, thì chúng ta có thể muốn chọn một hạt nhân kích thước 5 * 1 chẳng hạn.
Cuối cùng, bạn sẽ nhận thấy rằng tất cả các kích thước đều được xác định bởi một số lẻ. Việc xác định kích thước nhân chẵn cũng được chấp nhận. Trong thực tế, điều này hiếm khi được thực hiện. Thông thường, một nhân kích thước lẻ được chọn vì có sự đối xứng xung quanh một pixel trung tâm.
Vì tất cả các tham số (cổ điển) có thể huấn luyện của một lớp tích chập đều nằm trong các hạt nhân, nên số lượng các tham số tăng tuyến tính với kích thước của các hạt nhân. Thời gian tính toán cũng thay đổi tương ứng.
Những bước tiến
Các nhân, theo mặc định, di chuyển từ trái sang phải, từ dưới lên trên từ pixel này sang pixel khác. Nhưng chuyển động này cũng có thể được thay đổi. Thường được sử dụng để giảm mẫu cho kênh đầu ra. Ví dụ: với các bước là (1, 3), bộ lọc được chuyển từ 3 sang 3 theo chiều ngang và từ 1 sang 1 theo chiều dọc. Điều này tạo ra các kênh đầu ra được lấy mẫu xuống 3 theo chiều ngang.
Hình dạng nguồn vào : ( 3, 9, 9 ) – Hình dạng đầu ra : ( 2, 7, 3 ) – K : ( 3, 3 ) – P. : ( 0, 0 ) – S : ( 1, 3 ) – D : ( 1, 1 ) – G : 1
Các bước tiến không tác động ảnh hưởng đến số lượng tham số nhưng thời hạn thống kê giám sát, một cách hài hòa và hợp lý, giảm tuyến tính với những bước .
Lưu ý rằng những đường cong trong biểu đồ Tham số giống nhau
Đệm lót
Phần đệm xác định số lượng pixel được thêm vào các cạnh của các kênh đầu vào trước khi lọc tích chập của chúng. Thông thường, các pixel đệm được đặt bằng không. Kênh đầu vào được mở rộng .
Hình dạng nguồn vào : ( 2, 7, 7 ) – Hình dạng đầu ra : ( 1, 7, 7 ) – K : ( 3, 3 ) – P. : ( 1, 1 ) – S : ( 1, 1 ) – D : ( 1, 1 ) – G : 1
Điều này rất hữu ích khi bạn muốn kích thước của các kênh đầu ra bằng kích thước của các kênh đầu vào. Để làm cho nó đơn giản, khi hạt nhân là 3 * 3 thì kích thước kênh đầu ra giảm một bên. Để khắc phục vấn đề này, chúng ta có thể sử dụng padding của 1.
Do đó, phần đệm không tác động ảnh hưởng đến số lượng thông số kỹ thuật nhưng tạo ra thời hạn thống kê giám sát bổ trợ tỷ suất với kích cỡ của phần đệm. Nhưng nói chung, phần đệm thường đủ nhỏ so với size của kênh nguồn vào để không tác động ảnh hưởng đến thời hạn đo lường và thống kê .
Lưu ý rằng những đường cong trong biểu đồ Tham số giống nhau
Sự giãn nở
Theo một cách nào đó, độ giãn nở là chiều rộng của lõi. Theo mặc định bằng 1, nó tương ứng với độ lệch giữa mỗi pixel của hạt nhân trên kênh đầu vào trong quá trình tích chập .
Hình dạng nguồn vào : ( 2, 7, 7 ) – Hình dạng đầu ra : ( 1, 1, 5 ) – K : ( 3, 3 ) – P. : ( 1, 1 ) – S : ( 1, 1 ) – D : ( 4, 2 ) – G : 1
Tôi đã phóng đại một chút trên GIF của mình, nhưng nếu chúng ta lấy ví dụ về sự giãn nở của (4, 2) thì trường tiếp nhận của hạt nhân trên kênh đầu vào được mở rộng thêm 4 * (3 -1) = 8 theo chiều dọc và 2 * (3–1) = 4 theo chiều ngang (đối với nhân 3 x 3).
Cũng giống như padding, co và giãn không tác động ảnh hưởng đến số lượng những tham số và tác động ảnh hưởng rất hạn chế đến thời hạn thống kê giám sát .
Lưu ý rằng những đường cong trong biểu đồ Tham số giống nhau
Các nhóm
Nhóm có thể rất hữu ích trong các trường hợp cụ thể. Ví dụ: nếu chúng ta có một số nguồn dữ liệu được ghép nối. Khi không cần thiết phải đối xử họ phụ thuộc vào nhau. Các kênh đầu vào có thể được nhóm lại và xử lý độc lập. Cuối cùng, các kênh đầu ra được nối ở cuối.
Nếu có 2 kênh đầu vào và 4 kênh đầu ra với 2 nhóm. Sau đó, điều này giống như việc chia những kênh đầu vào thành hai nhóm ( mỗi nhóm có 1 kênh nguồn vào ) và làm cho nó đi qua một lớp tích chập với một nửa số kênh đầu ra. Các kênh đầu ra sau đó được nối với nhau .
Hình dạng nguồn vào : ( 2, 7, 7 ) – Hình dạng đầu ra : ( 4, 5, 5 ) – K : ( 3, 3 ) – P. : ( 2, 2 ) – S : ( 2, 2 ) – D : ( 1, 1 ) – G : 2
Điều quan trọng cần lưu ý là hai điều. Thứ nhất, số lượng nhóm phải phân chia hoàn hảo số lượng kênh đầu vào và số lượng kênh đầu ra ( ước số chung ). Thứ hai, các nhân được chia sẻ với mỗi nhóm.
Do đó, số lượng các tham số được chia cho số lượng nhóm. Liên quan đến thời gian tính toán với Pytorch, thuật toán được tối ưu hóa cho các nhóm và do đó sẽ giảm thời gian tính toán. Tuy nhiên, cũng cần lưu ý rằng phải tổng hợp với thời gian tính toán cho việc hình thành nhóm và nối các kênh đầu ra.
Kích thước kênh đầu ra
Với kiến thức về tổng thể những đối số, size của những kênh đầu ra hoàn toàn có thể được thống kê giám sát từ size của những kênh nguồn vào .
Cảm ơn bạn đã đọc ! 💋
Hãy cho tôi biết nếu bạn quan tâm đến loại bài viết này ✏️
Hãy xem tại sao bạn lại quan trọng với tôi như vậy 💚❔
Nguồn
Hướng dẫn học sâu, Y. LeCun
Tài liệu torch.nn, Pytorch
Mạng thần kinh quy đổi, cs231n
Xem thêm: Tên miền (Domain) là gì? Hosting là gì?
Lớp Convolutions, Keras
Tất cả những hình ảnh là tự chế
Tất cả các bài kiểm tra thời gian tính toán đều được thực hiện với Pytorch, trên GPU của tôi (GeForce GTX 960M) và có sẵn trên kho lưu trữ GitHub này nếu bạn muốn tự chạy chúng hoặc thực hiện các bài kiểm tra thay thế.
Source: https://swing.com.vn
Category: Wiki