Làm thế nào để khởi tạo các phần tử của ma trận bộ lọc?


24

Tôi đang cố gắng hiểu rõ hơn về mạng nơ ron tích chập bằng cách viết mã Python không phụ thuộc vào các thư viện (như Convnet hoặc TensorFlow) và tôi bị mắc kẹt trong tài liệu về cách chọn giá trị cho ma trận hạt nhân, khi thực hiện tích chập trên một hình ảnh.

Tôi đang cố gắng hiểu các chi tiết triển khai trong bước giữa các bản đồ đặc trưng trong hình ảnh bên dưới hiển thị các lớp của CNN.

Các lớp mạng thần kinh chuyển đổi

Theo sơ đồ này:

Truyền tải một hình ảnh

Hạt nhân ma trận hạt nhân "bước" qua hình ảnh, tạo ra một bản đồ đặc trưng, ​​trong đó mỗi pixel là tổng của tất cả các sản phẩm có yếu tố giữa mỗi trọng lượng của hạt nhân (hoặc ma trận bộ lọc) và giá trị pixel tương ứng của hình ảnh đầu vào.

Câu hỏi của tôi là: làm thế nào để chúng tôi khởi tạo trọng số của ma trận kernel (hoặc bộ lọc)?

Trong phần trình diễn ở trên, chúng chỉ đơn giản là 1 và 0, nhưng tôi cho rằng điều này được đơn giản hóa từ lợi ích của sơ đồ.

Là những trọng lượng được đào tạo trong một số bước tiền xử lý? Hoặc được lựa chọn rõ ràng bởi người dùng?

Câu trả lời:


19

Người ta thường khởi tạo một mạng từ một phân phối ngẫu nhiên, thường có nghĩa là không và một số chăm sóc được thực hiện liên quan đến việc chọn phương sai của nó. Ngày nay với những tiến bộ trong kỹ thuật tối ưu hóa (SGD + Động lượng trong số các phương pháp khác) và phi tuyến kích hoạt (kích hoạt giống ReLU và ReLU cho phép cung cấp tín hiệu gradient tốt hơn, ngay cả trong các mạng sâu hơn), người ta có thể thực sự huấn luyện trạng thái của phép chập nghệ thuật mạng lưới thần kinh từ một khởi tạo ngẫu nhiên.

Các thuộc tính chính như sau:

  • Tại sao ngẫu nhiên? Tại sao không khởi tạo tất cả chúng thành 0? Một khái niệm quan trọng ở đây được gọi là phá vỡ đối xứng . Nếu tất cả các tế bào thần kinh có cùng trọng lượng, chúng sẽ tạo ra cùng một đầu ra và chúng ta sẽ không học các tính năng khác nhau. Chúng tôi sẽ không tìm hiểu các tính năng khác nhau vì trong bước backpropagation, tất cả các cập nhật trọng lượng sẽ hoàn toàn giống nhau. Vì vậy, bắt đầu với một phân phối ngẫu nhiên cho phép chúng ta khởi tạo các nơ-ron khác nhau (với xác suất rất cao) và cho phép chúng ta tìm hiểu một hệ thống phân cấp tính năng phong phú và đa dạng.

  • Tại sao có nghĩa là không? Một thực tế phổ biến trong học máy là tập trung vào không hoặc bình thường hóa dữ liệu đầu vào, sao cho các tính năng đầu vào thô (đối với dữ liệu hình ảnh sẽ là pixel) trung bình bằng không.

    Chúng tôi không tập trung vào dữ liệu của mình và chúng tôi sẽ khởi tạo ngẫu nhiên các trọng số của mạng (ma trận như bạn đã đề cập đến chúng). Chúng ta nên chọn loại phân phối nào? Việc phân phối dữ liệu đầu vào vào mạng của chúng tôi có nghĩa là không vì chúng tôi không tập trung. Nói rằng chúng tôi cũng khởi tạo các thuật ngữ thiên vị của chúng tôi bằng không. Khi chúng tôi khởi tạo việc đào tạo mạng lưới của mình, chúng tôi không có lý do gì để ưu tiên một nơ ron khác vì tất cả chúng đều ngẫu nhiên. Một thực tế là khởi tạo ngẫu nhiên các trọng số của chúng tôi theo cách mà tất cả chúng đều có đầu ra kích hoạt bằng 0 trong kỳ vọng. Bằng cách này, không một nơ-ron nào được ưu tiên "kích hoạt" (có giá trị đầu ra dương) hơn bất kỳ nơ-ron nào khác trong khi đồng thời phá vỡ tính đối xứng do khởi tạo ngẫu nhiên. Một cách đơn giản để thực hiện điều này là chọn phân phối trung bình bằng không.

  • Làm thế nào để chúng ta chọn phương sai? Bạn không muốn chọn phương sai quá lớn, ngay cả khi nó có nghĩa là không. Các giá trị cực đoan trong một trọng số lưới sâu có thể dẫn đến kết quả đầu ra kích hoạt tăng theo cấp số nhân và vấn đề này có thể kết hợp với độ sâu của mạng. Điều này có thể tàn phá việc đào tạo mạng lưới của chúng tôi. Bạn cũng không muốn chọn nó quá nhỏ vì điều này có thể làm chậm quá trình học vì chúng ta đang tính toán các giá trị gradient rất nhỏ. Vì vậy, có một sự cân bằng ở đây, đặc biệt là khi nói đến các mạng sâu hơn vì chúng ta không muốn sự lan truyền về phía trước hoặc phía sau của mình tăng theo cấp số nhân theo chiều sâu.

    Có hai sơ đồ khởi tạo trọng lượng rất phổ biến: Đồng phục Glorot ( Hiểu về khó khăn trong việc đào tạo mạng lưới thần kinh tiếp liệu sâu ) và Trình khởi tạo bình thường He (Đi sâu vào chỉnh lưu: Vượt qua hiệu suất ở cấp độ con người trong phân loại ImageNet ).

    Cả hai đều được xây dựng với mục đích đào tạo các mạng lưới sâu với nguyên tắc cốt lõi sau đây (trích dẫn từ bài viết Delving Deeper vào Rectifier):

    "Một phương pháp khởi tạo thích hợp nên tránh làm giảm hoặc phóng đại cường độ của tín hiệu đầu vào theo cấp số nhân."

    Nói một cách đơn giản, hai sơ đồ khởi tạo này khởi tạo phương sai của mỗi lớp để phân phối đầu ra của mỗi nơron là như nhau. Mục 2.2 của Delving Deep to Rectifier cung cấp một phân tích chuyên sâu.

Lưu ý cuối cùng: đôi khi bạn cũng sẽ thấy mọi người sử dụng Gaussian với độ lệch chuẩn bằng 0,005 hoặc 0,01 hoặc một số độ lệch chuẩn "nhỏ" khác, trên tất cả các lớp. Những lần khác, bạn sẽ thấy mọi người nghịch ngợm với các phương sai bằng tay, về cơ bản thực hiện xác nhận chéo để tìm một cấu hình hoạt động tốt nhất.


1
Nhưng còn hình dạng "X" (được tạo bởi 1) của bộ lọc màu vàng trong GIF ở trên thì sao? Tôi hiểu đây là những gì tôi muốn sử dụng để phát hiện hình dạng "X" ở bất cứ đâu trong ảnh, nhưng làm thế nào để tôi biết rằng "X" là hình dạng tôi muốn? Tôi có ấn tượng rằng hình dạng bộ lọc được học tự động, nhưng tôi không biết làm thế nào. Có lẽ đây cũng là câu hỏi của OP?
Felipe Almeida

2

Tôi không thể bình luận vì danh tiếng thấp và vì vậy tôi viết thư này để trả lời câu hỏi của Felipe Almeida. Sau câu trả lời hoàn hảo của Indie AI, không còn gì để nói thêm. Nếu bạn muốn phát hiện các hình dạng cụ thể (như X), bạn có thể xác định trước một bộ lọc cụ thể, như trường hợp phát hiện cạnh. Nhưng đây là vẻ đẹp của học sâu, có rất nhiều lớp, rất nhiều bộ lọc và rất nhiều lần lặp mà các bộ lọc học gần như mọi hình dạng đối tượng cần thiết trên chính nó. Vì vậy, về mặt lý thuyết, nếu có X được phát hiện, một trong các bộ lọc sẽ học cách phát hiện X (dưới dạng bộ lọc màu vàng)

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.