Gradient Descent: Cách Machine Learning học (Phần I)
Làm thế nào để một mô hình hồi quy tuyến tính xác định độ dốc và hệ số tối ưu? Bạn có thể đã nghe nói rằng nó chọn các giá trị làm giảm thiểu chức năng sai số của nó, nhưng nó thực hiện điều đó như thế nào?
Trong bài viết này, chúng tôi sẽ đề cập đến thuật toán chạy trong nhiều quy trình học máy, học sâu và tối ưu hóa chung của các hàm lồi– suy giảm độ dốc. Có thể hữu ích khi lần đầu tiên tìm hiểu các khái niệm ở dạng 2D và với một hàm đơn giản như parabola , nhưng các ví dụ trực quan bên dưới sẽ hữu ích!
Trực giác
Hãy tưởng tượng rằng thung lũng trong hình bên dưới là hàm mất mát của chúng ta, một số thước đo mức độ khác biệt của dự đoán của chúng ta so với giá trị thực. Chúng tôi mong muốn giảm thiểu chức năng để tạo ra mô hình tốt nhất (mô hình dự đoán càng gần với giá trị thực tế càng tốt).
Tối ưu hóa hàm mất mát tương tự như chạm đến đáy thung lũng!
Để hình dung điều này, tôi đã đặt các trục x, y và z = f(x, y) chồng lên hình ảnh của chúng ta để tượng trưng cho một số hàm mất mát f(x, y). Mũi tên biểu thị mục tiêu mà chúng ta đang cố gắng đạt tới: đáy của thung lũng, đạt được tại tọa độ (x, y) dẫn đến đầu ra f(x, y) nhỏ nhất.
Hiểu các vectơ Gradient
Theo logic, cách nhanh nhất để di chuyển lên hoặc xuống núi là men theo sườn núi.
Trong 2D, tốc độ thay đổi của một số lượng (chiều cao, trong trường hợp này) tại một điểm sẽ chỉ đơn giản là đạo hàm (hoặc hệ số góc tức thời) của y đối với x tại điểm đó. Đây sẽ là một vô hướng.
Ở chế độ 3D, bạn di chuyển theo 2 cách: ra trước (trục x trong hình này) HOẶC từ bên này sang bên kia (trục y). Đi theo độ dốc tự nhiên của ngọn núi yêu cầu chuyển động của bạn phải có cả hai thành phần x và y, giống như các vectơ được vẽ bên dưới.
Trong không gian 3D, tốc độ thay đổi chiều cao phải được tính riêng cho từng thành phần x và y:
- Bằng cách giữ y không đổi, chúng ta tìm tốc độ thay đổi độ cao đối với chỉ x tại một điểm thông qua ∂f/∂x, đạo hàm riêng đối với x
- Bằng cách giữ x không đổi, chúng ta tìm tốc độ thay đổi độ cao đối với chỉ y tại một điểm thông qua ∂f/∂y, đạo hàm riêng đối với y
Bây giờ, quay lại với những gì chúng tôi đang cố gắng tìm: đầu vào (x, y) tương ứng với z tối thiểu của đáy thung lũng. Chúng tôi luôn muốn thay đổi (x, y) để chúng tôi gần nhau hơn so với khi bắt đầu.
Cập nhật quy tắc
Sự khác biệt giữa (x,y) và z = f(x, y) ở đây rất quan trọng. Ví dụ: ở góc trên cùng bên trái của hình ảnh, cả tọa độ x và tọa độ y đều nhỏ hơn (x, y) tương ứng với mức tối thiểu. Chúng ta cần tăng cả x, y để giảm z.
- Tổng quát hóa, đối với một điểm cho trước (x, y) ở phía bên phải của hình, ngọn núi dốc lên– tốc độ thay đổi của f(x, y) là dương đối với z. Nếu chúng tôi đã thêm vectơ gradient này hướng từ mức tối thiểu đến (x, y) của chúng tôi, thì chúng tôi sẽ tăng z và đi lên khỏi mục tiêu của chúng tôi.
- Trường hợp tiếp theo này có thể khó hiểu hơn, nhưng nếu chúng ta lấy (x, y) ở vế trái, tốc độ thay đổi của f(x, y) đối với z là âm. Vectơ gradient này hướng về giá trị cực tiểu, nhưng việc thêm một vectơ âm vào (x, y) cũng giống như thêm một vectơ dương theo hướng ngược lại. Điều này cũng sẽ làm tăng z và có nghĩa là di chuyển lên trên khỏi mục tiêu của chúng ta.
Điều gì sẽ xảy ra nếu sau đó chúng ta đảo ngược hướng và di chuyển với độ dốc âm?
Ở phía bên trái của hình ảnh, các vectơ chuyển màu âm sẽ trở thành dương và tăng (x, y), tiến gần đến đáy. Ở bên phải, các vectơ gradient dương sẽ trở thành âm và giảm (x, y), đồng thời dịch chuyển về phía dưới. Quy tắc cập nhật của giảm dần độ dốc bắt nguồn từ khái niệm này:
x = x — a * ∂f/∂x được đánh giá tại (x, y)
y = y — a * ∂f/∂y được đánh giá tại (x, y)
Các phương trình này chỉ đơn giản nói rằng tại một điểm khởi tạo nhất định, chúng ta tính tốc độ thay đổi của f(x, y) chỉ đối với x và chỉ đối với y. Sau đó, chúng tôi chia tỷ lệ các phần này theo một số tỷ lệ học tập được ký hiệu là alpha (sẽ nói thêm về điều này sau) và trừ đi điểm hiện tại của chúng tôi (x, y).
Theo cách tương tự của chúng tôi, chúng tôi đo độ dốc của ngọn núi, chia tỷ lệ nó theo tốc độ học tập của chúng tôi và quay ngược lại vị trí của chúng tôi.
Tôi đặc biệt lưu ý rằng chúng ta phải tính cả hai đạo hàm riêng trước, thay vì tính ∂f/∂x và sửa đổi x rồi tìm ∂f/∂y. Nếu không, chúng tôi sẽ tìm tỷ lệ thay đổi thành phần cho 2 điểm khác nhau (theo độ dốc của núi ở 2 điểm khác nhau).
Và thế là xong! Chúng tôi đã trình bày tất cả những gì thuật toán giảm độ dốc 3D thực hiện: nó khởi tạo một điểm (x, y, f(x, y)), tính toán các phần tử, cập nhật đồng thời x và y để di chuyển theo hướng nhỏ nhất và lặp lại quá trình này cho đến khi hội tụ. Các mô hình khác nhau sẽ xác định sự hội tụ khác nhau: một số chỉ đơn giản là chạy 100 lần lặp lại, trong khi những mô hình khác tiếp tục cho đến khi một bản cập nhật tọa độ giảm f(x, y) ít hơn 0,001.
hội tụ
Như bạn có thể tưởng tượng dựa trên các điều kiện hội tụ đã nói ở trên, nơi chúng ta khởi tạo điểm đầu tiên có thể tạo ra sự khác biệt lớn trong kết quả mô hình.
- Ví dụ: chúng tôi có thể hội tụ đến mức tối thiểu cục bộ thay vì mức tối thiểu tuyệt đối nếu một sườn núi trong thung lũng gần với nơi chúng tôi bắt đầu. Vì lý do này, một số thuật toán sử dụng thử nghiệm đa khởi động, nghĩa là có nhiều điểm khởi tạo. Vì mục đích của thuật toán đơn giản của chúng tôi từ đầu, chúng tôi sẽ tránh phân tích các chức năng với một số mức tối thiểu cục bộ.
- Ngoài ra, nếu bạn khởi tạo ở rìa của thung lũng, có thể bạn sẽ không bao giờ đi đúng hướng với điểm cực tiểu và phân kỳ. Đối với thuật toán của chúng tôi, chúng tôi sẽ khởi tạo ở mức ước tính hợp lý cho mục tiêu của chúng tôi.
Tỷ lệ học tập quá nhỏ có nghĩa là mô hình sẽ mất nhiều thời gian hơn để hội tụ đến mục tiêu của chúng ta, tương tự như việc bò xuống núi bằng những bước nhỏ và chết vì đói.
Thuật toán cũng có khả năng hội tụ quá sớm. Nếu độ dốc tại điểm tức là nhỏ. độ dốc tăng dần, một số nhỏ nhân với một alpha nhỏ có thể không thay đổi được nhiều tọa độ và do mở rộng không thể thay đổi f(x, y) nhiều hơn 0,001 mà máy tính kiểm tra sự hội tụ.
Tỷ lệ học tập quá lớn sẽ không hiệu quả vì nó có thể khiến mô hình vượt qua mục tiêu. Bạn đang đi trên con đường dài, đi đi lại lại giữa hai bên thung lũng
Tốc độ học tập quá lớn thậm chí có thể khiến mô hình phân kỳ hoàn toàn, không bao giờ tìm được giải pháp cho mức tối thiểu. Hãy coi đây là việc bị lạc và hoàn toàn rời khỏi thung lũng.
Một thuật toán giảm độ dốc tốt sẽ đạt đến mức tối thiểu một cách trơn tru và hiệu quả, lý tưởng nhất là mức tối thiểu toàn cầu:
Phần kết luận
Để đưa tất cả những điều này trở lại các ứng dụng khoa học máy tính, các mô hình học máy tự đào tạo bằng cách điều chỉnh các tham số của chúng để giảm thiểu một số hàm mất mát đo lường lỗi dự đoán của chúng trên dữ liệu đào tạo. Tham số mô hình tốt hơn = dự đoán tốt hơn = đầu ra hàm mất mát nhỏ hơn và ít lỗi hơn.
Lấy ví dụ về hồi quy tuyến tính: chúng tôi đang tìm kiếm độ dốc hồi quy và hệ số chặn để giảm thiểu tổng bình phương phần dư:
Điều này giống như các ví dụ của chúng tôi ở trên, ngoại trừ thay vì một số hàm f(x, y) lấy một tọa độ vật lý trong thung lũng làm đầu vào của nó, hàm f(m, b) của chúng tôi tính tổng các phần dư bình phương từ các tham số của hồi quy đã cho - hàm của nó dốc và đánh chặn.
Trong Phần II , chúng ta sẽ kết hợp mọi thứ đã học với mã và cố gắng tự tối ưu hóa hồi quy tuyến tính!
Người giới thiệu
Tôi muốn cảm ơn các bài viết sau đã giúp tôi xây dựng sự hiểu biết về giảm dần độ dốc để kết hợp điều này lại với nhau!
Xuống dốc
![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































