Máy ảnh, tốc độ phân rã học tập SGD hoạt động như thế nào?


23

Nếu bạn xem tài liệu http://keras.io/optimulators/, có một tham số trong SGD cho sự phân rã. Tôi biết điều này làm giảm tỷ lệ học tập theo thời gian. Tuy nhiên, tôi không thể tìm ra cách nó hoạt động chính xác. Đây có phải là một giá trị được nhân với tỷ lệ học tập như lr = lr * (1 - decay) là theo cấp số nhân? Ngoài ra làm thế nào tôi có thể thấy tốc độ học tập mà mô hình của tôi đang sử dụng? Khi tôi in model.optimizer.lr.get_value()sau khi chạy vừa vặn trong một vài epoch, nó sẽ trả lại tốc độ học ban đầu mặc dù tôi đã phân rã.

Ngoài ra, tôi phải đặt nesterov = True để sử dụng động lượng hoặc chỉ có hai loại động lượng khác nhau mà tôi có thể sử dụng. Ví dụ, có một điểm để làm điều nàysgd = SGD(lr = 0.1, decay = 1e-6, momentum = 0.9, nesterov = False)

Câu trả lời:


24

Tài liệu mà bạn đang đề cập bao gồm một tham chiếu đến nguồn Python (chỉ cần nhấp vào [Source]liên kết ở vị trí thích hợp), có thể được sử dụng để trả lời câu hỏi của bạn. Đây là dòng có liên quan nhất, cho thấy cách decaysửa đổi tỷ lệ học tập:

lr = self.lr * (1. / (1. + self.decay * self.iterations))

Các nesterovtùy chọn không nhất thiết phải được thiết lập để True cho đà được sử dụng; nó dẫn đến động lượng được sử dụng theo một cách khác, như một lần nữa có thể được nhìn thấy từ nguồn:

v = self.momentum * m - lr * g  # velocity

if self.nesterov:
    new_p = p + self.momentum * v - lr * g
else:
    new_p = p + v

1
self.iterationsđề cập đến số lượng các bước SGD riêng lẻ, không phải số lượng kỷ nguyên, gian lận?
guillefix
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.