Có thể đào tạo một mạng lưới thần kinh tăng dần?


23

Tôi muốn đào tạo một mạng lưới thần kinh nơi các lớp đầu ra không (tất cả) được xác định từ đầu. Ngày càng có nhiều lớp sẽ được giới thiệu sau dựa trên dữ liệu đến. Điều này có nghĩa là, mỗi khi tôi giới thiệu một lớp mới, tôi sẽ cần phải đào tạo lại NN.

Làm thế nào tôi có thể đào tạo một NN tăng dần, nghĩa là, mà không quên thông tin đã thu được trước đó trong các giai đoạn đào tạo trước đó?

Câu trả lời:


10

Tôi muốn thêm vào những gì đã được nói rằng câu hỏi của bạn chạm đến một khái niệm quan trọng trong học máy gọi là học chuyển . Trong thực tế, rất ít người huấn luyện toàn bộ mạng chập từ đầu (với khởi tạo ngẫu nhiên), vì nó tốn thời gian và tương đối hiếm khi có một bộ dữ liệu có kích thước đủ.

ConvNets hiện đại mất 2-3 tuần để đào tạo trên nhiều GPU trên ImageNet. Vì vậy, người ta thường thấy mọi người phát hành các điểm kiểm tra ConvNet cuối cùng của họ vì lợi ích của những người khác có thể sử dụng các mạng để tinh chỉnh. Ví dụ: thư viện Caffe có Sở thú mô hình nơi mọi người chia sẻ trọng lượng mạng của họ.

Khi bạn cần một ConvNet để nhận dạng hình ảnh, bất kể miền ứng dụng của bạn là gì, bạn nên xem xét việc lấy một mạng hiện có, ví dụ VGGNet là một lựa chọn phổ biến.

Có một số điều cần lưu ý khi thực hiện học chuyển :

  • Các ràng buộc từ các mô hình trước. Lưu ý rằng nếu bạn muốn sử dụng một mạng được xử lý trước, bạn có thể bị hạn chế một chút về mặt kiến ​​trúc mà bạn có thể sử dụng cho tập dữ liệu mới của mình. Ví dụ: bạn không thể tự ý lấy ra các lớp Conv từ mạng được sàng lọc trước. Tuy nhiên, một số thay đổi rất đơn giản: do chia sẻ tham số, bạn có thể dễ dàng chạy một mạng được xử lý trước trên các hình ảnh có kích thước không gian khác nhau. Điều này thể hiện rõ ràng trong trường hợp các lớp Conv / Pool vì chức năng chuyển tiếp của chúng không phụ thuộc vào kích thước không gian của khối lượng đầu vào (miễn là các bước tiến phù hợp với điều chỉnh).

  • Tỷ lệ học tập. Thông thường sử dụng tỷ lệ học tập nhỏ hơn cho các trọng số ConvNet đang được tinh chỉnh, so với các trọng số (được khởi tạo ngẫu nhiên) cho trình phân loại tuyến tính mới tính toán điểm số của tập dữ liệu mới của bạn. Điều này là do chúng tôi hy vọng rằng các trọng số ConvNet tương đối tốt, vì vậy chúng tôi không muốn làm biến dạng chúng quá nhanh và quá nhiều (đặc biệt là trong khi Trình phân loại tuyến tính mới ở trên chúng đang được đào tạo từ khởi tạo ngẫu nhiên).

Tham khảo thêm nếu bạn quan tâm đến chủ đề này: Làm thế nào các tính năng có thể chuyển đổi trong các mạng thần kinh sâu?


Học chuyển không phải là cách duy nhất để thực hiện học tăng dần.
nbro

7

Đây là một cách bạn có thể làm điều đó.

Sau khi đào tạo mạng của bạn, bạn có thể lưu trọng lượng của nó vào đĩa. Điều này cho phép bạn tải trọng lượng này khi có dữ liệu mới và tiếp tục đào tạo khá nhiều từ nơi đào tạo cuối cùng của bạn. Tuy nhiên, vì dữ liệu mới này có thể đi kèm với các lớp bổ sung, giờ đây bạn thực hiện đào tạo trước hoặc tinh chỉnh trên mạng với các trọng số đã lưu trước đó. Điều duy nhất bạn phải làm, tại thời điểm này, là làm cho (các) lớp cuối cùng chứa các lớp mới đã được giới thiệu với sự xuất hiện của tập dữ liệu mới của bạn, quan trọng nhất là bao gồm các lớp bổ sung (ví dụ: nếu lớp cuối cùng của bạn ban đầu có 10 lớp và bây giờ bạn đã tìm thấy thêm 2 lớp nữa, như là một phần của quá trình đào tạo trước / tinh chỉnh của bạn, bạn thay thế nó bằng 12 lớp). Tóm lại, lặp lại vòng tròn này:

Nói lại


nếu bạn chỉ chứa các lớp mới ở lớp cuối cùng (lớp đào tạo + lớp mới) thì mô hình không thể phù hợp vì chúng tôi muốn đào tạo với các lớp mới (chỉ) và mô hình mong đợi một mảng có hình dạng (đào tạo + mới các lớp học, ).
Joel Carneiro
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.