Xử lý kích thước lô nhỏ trong đào tạo SGD


7

Tôi đang cố gắng đào tạo một mô hình lớn (mạng sâu sử dụng caffe) bằng cách sử dụng gốc dốc ngẫu nhiên (SGD).
Vấn đề là tôi bị hạn chế bởi dung lượng bộ nhớ GPU của mình và do đó không thể xử lý các lô nhỏ lớn cho mỗi ước tính độ dốc ngẫu nhiên.

Làm thế nào tôi có thể vượt qua sự bất ổn này trong đào tạo của tôi?

Một suy nghĩ tôi đã có là sử dụng động lượng và đặt nó thành một giá trị cao hơn giá trị mặc định thường được đặt thành. Đây có phải là một chiến lược hợp lệ?


Đối với những người tình cờ sử dụng Caffe , có thể rất thú vị khi biết rằng caffe đã thực hiện tích lũy gradient trên các lô nhỏ (như được đề xuất bởi Indie Al ). Bạn chỉ cần xác định iter_sizetrong 'solver.prototxt'.

Điều này cũng có thể được thực hiện trong pytorch . Xem bài này chẳng hạn.


Xin đừng đăng chéo. Chọn trang web mà bạn muốn đăng và xóa các chủ đề khác.
gung - Phục hồi Monica

@gung hiện tại, tôi không nhận được phản hồi trên cả hai trang web. Khi tôi nhận được phản hồi trên bất kỳ trang web nào, tôi sẽ xóa khỏi trang khác.
Shai

@gung nhận được một xung ở đây, tôi đã xóa câu hỏi ban đầu cho SO.
Shai

Câu trả lời:


4

Với một lô nhỏ, tôi tin rằng hướng đi xuống của SGD trở thành một ước tính rất ồn ào về hướng gốc "thực sự" (nghĩa là nếu chúng ta đánh giá nó trên toàn bộ tập huấn luyện). Với một lô nhỏ, tôi không chắc việc tăng động lượng sẽ giúp được bao nhiêu vì nó sẽ tích lũy động lượng theo các hướng rất ồn. Nhưng tôi có thể sai, có thể vấn đề tối ưu hóa của bạn đã được đặt ra đủ để điều này có thể hoạt động.

Nếu bạn không nhắm đến kết quả "hiện đại", một tùy chọn bạn có cho dữ liệu hình ảnh tự nhiên là thay đổi kích thước hình ảnh. Tôi thực sự nghĩ rằng modulo theo đuổi hiệu suất đo điểm chuẩn ưu tú, hình ảnh tự nhiên có nhiều đặc tính bất biến tỷ lệ và rất nhiều tính năng ngữ nghĩa của chúng khá mạnh mẽ dưới các phép biến đổi tỷ lệ hợp lý. Điều này sẽ làm giảm bớt một số bộ nhớ GPU và cho phép bạn tăng kích thước theo đợt và các hướng đi xuống SGD của bạn sẽ là ước tính tốt hơn về các hướng đi xuống.

Nếu bạn đang xử lý một hàm mất mát có thể tách rời như khả năng ghi nhật ký âm, chúng ta có thể khai thác thực tế rằng độ dốc của một lô lớn chỉ là tổng / trung bình của độ dốc của các lô con cấu thành của nó. Ví dụ: nếu lô số của chúng tôi là , chúng tôi có thể tính toán độ dốc của siêu khối bằng cách lặp qua các lô như bình thường, tính toán từng độ dốc của lô, nhưng thay vì cập nhật các trọng số, chúng tôi lưu trữ từng độ dốc thành tổng hoặc trung bình. Nếu chúng ta trung bình một cách thích hợp, chúng ta sẽ tính toán độ dốc chính xác cho siêu lô có kích thước . Sau đó chúng tôi thực hiện cập nhật trọng lượng sau mỗi đợt -th đã được xử lý.BBKBKK

Chúng tôi sẽ tính toán chính xác các gradient của lô bằng cách tuần tự hóa tính toán như mô tả ở trên. Có tối thiểu tính toán hoặc chi phí bộ nhớ tối thiểu, người ta chỉ cần sửa đổi trình lặp lặp nhỏ để bao gồm tuần tự hóa siêu lô và bộ đệm gradient.BK


Tôi đã thu nhỏ lại bất cứ đầu vào nào tôi có thể mở rộng ... Bây giờ giảm xuống kích thước lô nhỏ ...
Shai

Cảm ơn bạn vì câu trả lời. Vấn đề là tôi thực sự nhắm đến việc lấy ý kiến ​​chuyên gia về khả năng của động lượng để hoạt động như một thành phần "giảm nhiễu độ dốc"
Shai

Ah tôi hiểu rồi, tôi đã cập nhật câu trả lời của mình để đề xuất một khả năng khác rồi. Tôi đã không thử nó, nhưng có lẽ nó có thể làm việc cho bạn? Hy vọng nó sẽ giúp, ngay cả khi tìm ra những gì không hoạt động.
Indie AI

đó là một cách tiếp cận thú vị, nhưng trong nhiều trường hợp, bạn cần thông tin "chuyển tiếp" để tính toán độ dốc "lùi". Do đó, bạn cần "chuyển tiếp" tất cả các lô nhỏ mà bạn muốn lấy trung bình để ước tính độ dốc - điều này không khả thi về thời gian đào tạo - Tôi sẽ chuyển sang CPU và có cùng tốc độ với các lô lớn hơn .
Shai

1
Được rồi, nó có ý nghĩa hơn bây giờ. Mặc dù nghe có vẻ giống như tăng động lượng ... Xem đoạn cuối ở đây : "[đà] xác định số lần lặp lại của các gradient trước được kết hợp vào bản cập nhật hiện tại"
Shai

0

Gần đây tôi tình cờ thấy một công việc thú vị:

Samuel L. Smith, Pieter-Jan Kindermans, Chris Ying, Quốc V. Le, Đừng phân rã tỷ lệ học tập, tăng quy mô hàng loạt (ICLR 2018).

Công trình này cho thấy một liên kết trực tiếp giữa kích thước lô và tỷ lệ học tập. Cụ thể, giảm tỷ lệ học tập có tác dụng tương tự như tăng quy mô lô và ngược lại.
Đưa ra kết luận của họ đến mức cực đoan, người ta có thể xem xét giảm quy mô lô và bù cho nó bằng cách tăng tỷ lệ học tập.
Tôi chưa thực sự thử nó, mặc dù.

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.