Hướng dẫn gradient descent with momentum python - dốc xuống với con trăn động lượng
Cập nhật lần cuối vào ngày 12 tháng 10 năm 2021 Show
Độ dốc gốc là một thuật toán tối ưu hóa theo độ dốc âm của hàm mục tiêu để xác định vị trí tối thiểu của hàm. is an optimization algorithm that follows the negative gradient of an objective function in order to locate the minimum of the function. Một vấn đề với độ dốc giảm dần là nó có thể nảy xung quanh không gian tìm kiếm về các vấn đề tối ưu hóa có một lượng lớn độ cong hoặc độ dốc ồn, và nó có thể bị mắc kẹt trong các điểm phẳng trong không gian tìm kiếm không có độ dốc. Động lượng là một phần mở rộng cho thuật toán tối ưu hóa giảm độ dốc cho phép tìm kiếm xây dựng quán tính theo hướng trong không gian tìm kiếm và khắc phục các dao động của độ dốc ồn ào và bờ biển trên các điểm phẳng của không gian tìm kiếm. is an extension to the gradient descent optimization algorithm that allows the search to build inertia in a direction in the search space and overcome the oscillations of noisy gradients and coast across flat spots of the search space. Trong hướng dẫn này, bạn sẽ khám phá ra độ dốc giảm dần với thuật toán động lượng. Sau khi hoàn thành hướng dẫn này, bạn sẽ biết:
Kick bắt đầu dự án của bạn với Tối ưu hóa cuốn sách mới của tôi để học máy, bao gồm các hướng dẫn từng bước và các tệp mã nguồn Python cho tất cả các ví dụ. with my new book Optimization for Machine Learning, including step-by-step tutorials and the Python source code files for all examples. Bắt đầu nào.Độ dốc hạ xuống với động lực từ Scratchphoto của Chris Barnes, một số quyền được bảo lưu. Tổng quan hướng dẫnHướng dẫn này được chia thành ba phần; họ đang:
Xuống dốcQuán tính Độ dốc hạ xuống với động lượng
Tối ưu hóa giảm dần độ dốc Trực quan hóa tối ưu hóa giảm dần độ dốc Tối ưu hóa giảm dần độ dốc với động lượng
Độ dốc gốc là một thuật toán tối ưu hóa. Về mặt kỹ thuật, nó được gọi là thuật toán tối ưu hóa bậc một vì nó sử dụng rõ ràng đạo hàm bậc nhất của hàm mục tiêu đích. Các phương pháp đặt hàng đầu tiên dựa vào thông tin gradient để giúp chỉ đạo tìm kiếm tối thiểu - Trang 69, Thuật toán để tối ưu hóa, 2019. Đạo hàm bậc nhất, hoặc đơn giản là đạo hàm của người Viking, là tốc độ thay đổi hoặc độ dốc của hàm đích tại một điểm cụ thể, ví dụ: cho một đầu vào cụ thể. Nếu hàm đích có nhiều biến đầu vào, nó được gọi là hàm đa biến và các biến đầu vào có thể được coi là một vectơ. Đổi lại, đạo hàm của hàm mục tiêu đa biến cũng có thể được coi là một vectơ và được gọi chung là gradient.
Đạo hàm hoặc các điểm gradient theo hướng đi lên dốc nhất của hàm mục tiêu cho một đầu vào cụ thể.
Thuật toán gốc độ dốc yêu cầu một hàm đích đang được tối ưu hóa và hàm phái sinh cho hàm mục tiêu. Hàm mục tiêu f () trả về điểm cho một tập hợp các đầu vào nhất định và hàm dẫn xuất f '() đưa ra đạo hàm của hàm đích cho một tập hợp đầu vào nhất định. Thuật toán gốc gradient yêu cầu điểm bắt đầu (x) trong vấn đề, chẳng hạn như một điểm được chọn ngẫu nhiên trong không gian đầu vào. Bạn muốn bắt đầu với các thuật toán tối ưu hóa?Tham gia khóa học gặp sự cố email 7 ngày miễn phí của tôi ngay bây giờ (với mã mẫu). Nhấp để đăng ký và cũng nhận được phiên bản Ebook PDF miễn phí của khóa học. Quán tínhĐộng lượng là một phần mở rộng cho thuật toán tối ưu hóa độ dốc độ dốc, thường được gọi là độ dốc độ dốc với động lượng.gradient descent with momentum. Nó được thiết kế để tăng tốc quá trình tối ưu hóa, ví dụ: Giảm số lượng đánh giá chức năng cần thiết để đạt đến tối ưu hoặc để cải thiện khả năng của thuật toán tối ưu hóa, ví dụ: dẫn đến một kết quả cuối cùng tốt hơn. Một vấn đề với thuật toán giảm độ dốc là sự tiến triển của tìm kiếm có thể nảy xung quanh không gian tìm kiếm dựa trên độ dốc. Ví dụ, tìm kiếm có thể tiến xuống dốc về phía cực tiểu, nhưng trong quá trình tiến triển này, nó có thể di chuyển theo một hướng khác, thậm chí lên dốc, tùy thuộc vào độ dốc của các điểm cụ thể (bộ tham số) gặp phải trong quá trình tìm kiếm. Điều này có thể làm chậm tiến trình của tìm kiếm, đặc biệt là đối với những vấn đề tối ưu hóa trong đó xu hướng hoặc hình dạng rộng hơn của không gian tìm kiếm hữu ích hơn so với độ dốc cụ thể trên đường đi. Một cách tiếp cận cho vấn đề này là thêm lịch sử vào phương trình cập nhật tham số dựa trên độ dốc gặp trong các bản cập nhật trước đó. Thay đổi này dựa trên phép ẩn dụ của động lượng từ vật lý nơi gia tốc theo hướng có thể được tích lũy từ các bản cập nhật trong quá khứ.
- Trang 296, Học sâu, 2016. Động lượng liên quan đến việc thêm một siêu nhân bổ sung kiểm soát lượng lịch sử (động lượng) để đưa vào phương trình cập nhật, tức là bước đến một điểm mới trong không gian tìm kiếm. Giá trị của siêu đồng tính được xác định trong phạm vi 0,0 đến 1,0 và thường có giá trị gần 1,0, chẳng hạn như 0,8, 0,9 hoặc 0,99. Một động lượng là 0,0 giống như giảm độ dốc mà không có động lượng. Đầu tiên, hãy để phá vỡ phương trình cập nhật giảm độ dốc xuống thành hai phần: tính toán thay đổi vị trí và cập nhật vị trí cũ lên vị trí mới. Sự thay đổi trong các tham số được tính là độ dốc cho điểm được chia tỷ lệ theo kích thước bước.
Vị trí mới được tính bằng cách trừ đi sự thay đổi từ điểm hiện tại
Động lượng liên quan đến việc duy trì sự thay đổi trong vị trí và sử dụng nó trong tính toán tiếp theo về sự thay đổi vị trí. Nếu chúng ta nghĩ về các bản cập nhật theo thời gian, thì bản cập nhật tại lần lặp hiện tại hoặc thời gian (t) sẽ thêm thay đổi được sử dụng vào thời điểm trước (T-1) được tính theo tính năng
Bản cập nhật cho vị trí sau đó được thực hiện như trước.
Sự thay đổi trong vị trí tích lũy cường độ và hướng thay đổi đối với các lần lặp của tìm kiếm, tỷ lệ với kích thước của siêu đồng tính động lượng. Ví dụ: một động lượng lớn (ví dụ: 0,9) sẽ có nghĩa là bản cập nhật bị ảnh hưởng mạnh mẽ bởi bản cập nhật trước đó, trong khi động lượng khiêm tốn (0,2) sẽ có nghĩa là rất ít ảnh hưởng.
- Trang 296, Học sâu, 2016. Động lượng liên quan đến việc thêm một siêu nhân bổ sung kiểm soát lượng lịch sử (động lượng) để đưa vào phương trình cập nhật, tức là bước đến một điểm mới trong không gian tìm kiếm. Giá trị của siêu đồng tính được xác định trong phạm vi 0,0 đến 1,0 và thường có giá trị gần 1,0, chẳng hạn như 0,8, 0,9 hoặc 0,99. Một động lượng là 0,0 giống như giảm độ dốc mà không có động lượng.
Sự thay đổi trong các tham số được tính là độ dốc cho điểm được chia tỷ lệ theo kích thước bước. Change_x = Step_Size * f '(x)
- Trang 296, Học sâu, 2016. Động lượng liên quan đến việc thêm một siêu nhân bổ sung kiểm soát lượng lịch sử (động lượng) để đưa vào phương trình cập nhật, tức là bước đến một điểm mới trong không gian tìm kiếm. Giá trị của siêu đồng tính được xác định trong phạm vi 0,0 đến 1,0 và thường có giá trị gần 1,0, chẳng hạn như 0,8, 0,9 hoặc 0,99. Một động lượng là 0,0 giống như giảm độ dốc mà không có động lượng. Đầu tiên, hãy để phá vỡ phương trình cập nhật giảm độ dốc xuống thành hai phần: tính toán thay đổi vị trí và cập nhật vị trí cũ lên vị trí mới. Bây giờ chúng ta đã quen thuộc với động lực là gì, hãy để Lôi nhìn vào một ví dụ hoạt động. Độ dốc hạ xuống với động lượngTrong phần này, trước tiên chúng tôi sẽ thực hiện thuật toán tối ưu hóa độ dốc độ dốc, sau đó cập nhật nó để sử dụng động lượng và so sánh kết quả. Vấn đề kiểm tra một chiềuĐầu tiên, hãy để xác định một chức năng tối ưu hóa. Chúng tôi sẽ sử dụng hàm một chiều đơn giản, bình phương đầu vào và xác định phạm vi đầu vào hợp lệ từ -1.0 đến 1.0. Hàm mục tiêu () bên dưới thực hiện hàm này.
Sau đó, chúng ta có thể lấy mẫu tất cả các đầu vào trong phạm vi và tính toán giá trị hàm mục tiêu cho mỗi.
Cuối cùng, chúng ta có thể tạo một biểu đồ dòng của các đầu vào (trục x) so với các giá trị hàm mục tiêu (trục y) để có trực giác cho hình dạng của hàm mục tiêu mà chúng ta sẽ tìm kiếm.
# Tính toán mục tiêu
# Tính toán mục tiêu Cuối cùng, chúng ta có thể tạo một biểu đồ dòng của các đầu vào (trục x) so với các giá trị hàm mục tiêu (trục y) để có trực giác cho hình dạng của hàm mục tiêu mà chúng ta sẽ tìm kiếm. # Tạo một biểu đồ dòng đầu vào so với kết quả # Hiển thị cốt truyệnVí dụ dưới đây gắn kết điều này lại với nhau và cung cấp một ví dụ về việc vẽ hàm thử nghiệm một chiều. # lô chức năng đơn giản từ nhập khẩu Numpy Arange
Biểu đồ dòng của hàm một chiều đơn giản Tối ưu hóa giảm dần độ dốc Tiếp theo, chúng ta có thể áp dụng thuật toán gốc gradient cho vấn đề.
# Tạo điểm ban đầu # Chạy độ dốc độ dốc # Tính độ dốc
# Tạo một biểu đồ dòng đầu vào so với kết quả
Chạy ví dụ bắt đầu với một điểm ngẫu nhiên trong không gian tìm kiếm, sau đó áp dụng thuật toán giảm độ dốc, báo cáo hiệu suất trên đường đi. Lưu ý: Kết quả của bạn có thể khác nhau với tính chất ngẫu nhiên của thuật toán hoặc quy trình đánh giá, hoặc sự khác biệt về độ chính xác số. Xem xét chạy ví dụ một vài lần và so sánh kết quả trung bình.: Your results may vary given the stochastic nature of the algorithm or evaluation procedure, or differences in numerical precision. Consider running the example a few times and compare the average outcome. Trong trường hợp này, chúng ta có thể thấy rằng thuật toán tìm thấy một giải pháp tốt sau khoảng 27 lần lặp, với đánh giá hàm khoảng 0,0. Lưu ý tối ưu cho hàm này là F (0,0) = 0,0. Chúng tôi hy vọng rằng độ dốc độ dốc với động lượng sẽ tăng tốc quy trình tối ưu hóa và tìm một giải pháp được đánh giá tương tự trong ít lần lặp hơn.
Trực quan hóa tối ưu hóa giảm dần độ dốcTiếp theo, chúng ta có thể hình dung tiến trình tìm kiếm trên một biểu đồ của hàm đích. Đầu tiên, chúng ta có thể cập nhật hàm gradient_descent () để lưu trữ tất cả các giải pháp và điểm số của chúng được tìm thấy trong quá trình tối ưu hóa dưới dạng danh sách và trả lại chúng ở cuối tìm kiếm thay vì giải pháp tốt nhất được tìm thấy.
# Hạt trình tạo số ngẫu nhiên giả giả
in ('f (%s) =%f'%(tốt nhất, điểm))
in ('f (%s) =%f'%(tốt nhất, điểm))
# Xác định kích thước bước
Chạy ví dụ thực hiện tìm kiếm giảm độ dốc trên hàm mục tiêu như trước đây, ngoại trừ trong trường hợp này, mỗi điểm được tìm thấy trong quá trình tìm kiếm được vẽ. Lưu ý: Kết quả của bạn có thể khác nhau với tính chất ngẫu nhiên của thuật toán hoặc quy trình đánh giá, hoặc sự khác biệt về độ chính xác số. Xem xét chạy ví dụ một vài lần và so sánh kết quả trung bình.: Your results may vary given the stochastic nature of the algorithm or evaluation procedure, or differences in numerical precision. Consider running the example a few times and compare the average outcome. Trong trường hợp này, chúng ta có thể thấy rằng việc tìm kiếm bắt đầu hơn một nửa phần bên phải của chức năng và bước xuống dốc xuống đáy lưu vực. Chúng ta có thể thấy rằng trong các phần của hàm mục tiêu với đường cong lớn hơn, đạo hàm (gradient) lớn hơn và lần lượt, các bước lớn hơn được thực hiện. Tương tự, độ dốc nhỏ hơn khi chúng ta tiến gần hơn với Optima, và đến lượt nó, các bước nhỏ hơn được thực hiện. Điều này nhấn mạnh rằng kích thước bước được sử dụng làm yếu tố tỷ lệ trên độ lớn của độ dốc (độ cong) của hàm mục tiêu. Biểu đồ về tiến trình giảm độ dốc trên hàm mục tiêu một chiều Tối ưu hóa giảm dần độ dốc với động lượngTiếp theo, chúng ta có thể cập nhật thuật toán tối ưu hóa độ dốc độ dốc để sử dụng động lượng. Điều này có thể đạt được bằng cách cập nhật hàm gradient_descent () để lấy một đối số động lượng trên mạng xác định lượng động lượng được sử dụng trong quá trình tìm kiếm. Sự thay đổi được thực hiện đối với giải pháp phải được ghi nhớ từ lần lặp trước của vòng lặp, với giá trị ban đầu là 0,0.
Sau đó, chúng ta có thể chia thủ tục cập nhật vào đầu tiên tính toán độ dốc, sau đó tính toán thay đổi thành giải pháp, tính toán vị trí của giải pháp mới, sau đó lưu thay đổi cho lần lặp tiếp theo.
# Đánh giá điểm ứng cử viên
# Hạt trình tạo số ngẫu nhiên giả giả # Xác định phạm vi cho đầu vào
# Tính cập nhật
Chạy ví dụ bắt đầu với một điểm ngẫu nhiên trong không gian tìm kiếm, sau đó áp dụng thuật toán giảm độ dốc với động lượng, báo cáo hiệu suất trên đường đi. Lưu ý: Kết quả của bạn có thể khác nhau với tính chất ngẫu nhiên của thuật toán hoặc quy trình đánh giá, hoặc sự khác biệt về độ chính xác số. Xem xét chạy ví dụ một vài lần và so sánh kết quả trung bình.: Your results may vary given the stochastic nature of the algorithm or evaluation procedure, or differences in numerical precision. Consider running the example a few times and compare the average outcome. Trong trường hợp này, chúng ta có thể thấy rằng thuật toán tìm thấy một giải pháp tốt sau khoảng 13 lần lặp, với đánh giá hàm khoảng 0,0. Đúng như dự đoán, điều này nhanh hơn (ít lặp hơn) so với độ dốc độ dốc mà không có động lực, sử dụng cùng một điểm bắt đầu và kích thước bước mất 27 lần lặp.
Trực quan hóa tối ưu hóa giảm độ dốc với động lượngCuối cùng, chúng ta có thể hình dung tiến trình của thuật toán tối ưu hóa giảm độ dốc với động lượng. Ví dụ hoàn chỉnh được liệt kê dưới đây.
Chạy ví dụ thực hiện tìm kiếm giảm độ dốc với động lượng trên hàm mục tiêu như trước đây, ngoại trừ trong trường hợp này, mỗi điểm được tìm thấy trong quá trình tìm kiếm được vẽ. Lưu ý: Kết quả của bạn có thể khác nhau với tính chất ngẫu nhiên của thuật toán hoặc quy trình đánh giá, hoặc sự khác biệt về độ chính xác số. Xem xét chạy ví dụ một vài lần và so sánh kết quả trung bình.: Your results may vary given the stochastic nature of the algorithm or evaluation procedure, or differences in numerical precision. Consider running the example a few times and compare the average outcome. Trong trường hợp này, nếu chúng ta so sánh cốt truyện với cốt truyện được tạo trước đây cho hiệu suất của độ dốc độ dốc (không có động lượng), chúng ta có thể thấy rằng tìm kiếm thực sự đạt đến tối ưu trong ít bước hơn, được ghi nhận với ít chấm đỏ khác biệt trên đường dẫn đến đường dẫn đến đáy của lưu vực. Biểu đồ tiến trình của độ dốc giảm dần với động lượng trên hàm mục tiêu một chiều Là một phần mở rộng, hãy thử các giá trị khác nhau cho động lượng, chẳng hạn như 0,8 và xem lại biểu đồ kết quả. Hãy cho tôi biết những gì bạn khám phá trong các ý kiến dưới đây. Đọc thêmPhần này cung cấp nhiều tài nguyên hơn về chủ đề nếu bạn đang muốn đi sâu hơn. Sách
API
Bài viết
Bản tóm tắtTrong hướng dẫn này, bạn đã phát hiện ra độ dốc gốc với thuật toán động lượng. Cụ thể, bạn đã học được:
Bạn có câu hỏi nào không? Đặt câu hỏi của bạn trong các ý kiến dưới đây và tôi sẽ cố gắng hết sức để trả lời. Nhận một xử lý các thuật toán tối ưu hóa hiện đại!Phát triển sự hiểu biết của bạn về tối ưu hóa... Chỉ với một vài dòng mã Python Khám phá cách trong ebook mới của tôi: Tối ưu hóa cho việc học máy Nó cung cấp các hướng dẫn tự học với mã làm việc đầy đủ trên: giảm độ dốc, thuật toán di truyền, leo đồi, phù hợp với đường cong, RMSProp, Adam, và nhiều hơn nữa ...self-study tutorials with full working code on: Mang các thuật toán tối ưu hóa hiện đại cho các dự án học máy của bạn |