Connect with us

Gradient Descent là gì?

AI 101

Gradient Descent là gì?

mm

Gradient Descent là gì?

Nếu bạn đã đọc về cách đào tạo mạng nơ-ron, bạn gần như chắc chắn đã gặp thuật ngữ “gradient descent” trước. Gradient descent là phương pháp chính để tối ưu hóa hiệu suất của mạng nơ-ron, giảm tỷ lệ lỗi của mạng. Tuy nhiên, gradient descent có thể hơi khó hiểu đối với những người mới bắt đầu với học máy, và bài viết này sẽ cố gắng cung cấp cho bạn một sự hiểu biết cơ bản về cách gradient descent hoạt động.

Gradient descent là một thuật toán tối ưu hóa. Nó được sử dụng để cải thiện hiệu suất của mạng nơ-ron bằng cách điều chỉnh các tham số của mạng sao cho sự khác biệt giữa dự đoán của mạng và giá trị thực tế / dự kiến của mạng (được gọi là lỗi) là nhỏ nhất có thể. Gradient descent lấy các giá trị ban đầu của các tham số và sử dụng các phép toán dựa trên tính toán để điều chỉnh giá trị của chúng theo hướng giá trị sẽ làm cho mạng chính xác nhất có thể. Bạn không cần biết nhiều về tính toán để hiểu cách gradient descent hoạt động, nhưng bạn cần có sự hiểu biết về gradient.

Gradient là gì?

Giả sử có một đồ thị đại diện cho lượng lỗi mà mạng nơ-ron tạo ra. Đáy của đồ thị đại diện cho điểm có lỗi thấp nhất trong khi đỉnh của đồ thị là nơi lỗi cao nhất. Chúng ta muốn di chuyển từ đỉnh của đồ thị xuống đáy. Gradient chỉ là một cách để lượng hóa mối quan hệ giữa lỗi và trọng số của mạng nơ-ron. Mối quan hệ giữa hai thứ này có thể được biểu diễn dưới dạng độ dốc, với trọng số không chính xác tạo ra nhiều lỗi hơn. Độ dốc của độ dốc / gradient đại diện cho tốc độ mô hình học.

Một độ dốc lớn hơn có nghĩa là giảm lỗi lớn và mô hình học nhanh, trong khi nếu độ dốc bằng không, mô hình đang trên một cao nguyên và không học. Chúng ta có thể di chuyển xuống độ dốc hướng tới lỗi ít hơn bằng cách tính toán một gradient, một hướng di chuyển (thay đổi trong các tham số của mạng) cho mô hình của chúng tôi.

Hãy chuyển đổi ẩn dụ một chút và tưởng tượng một loạt các ngọn đồi và thung lũng. Chúng ta muốn đến đáy của ngọn đồi và tìm phần của thung lũng đại diện cho điểm mất thấp nhất. Khi chúng ta bắt đầu ở đỉnh của ngọn đồi, chúng ta có thể thực hiện các bước lớn xuống ngọn đồi và tự tin rằng chúng ta đang hướng tới điểm thấp nhất trong thung lũng.

Tuy nhiên, khi chúng ta đến gần điểm thấp nhất trong thung lũng, các bước của chúng ta sẽ cần phải nhỏ hơn, hoặc chúng ta có thể vượt quá điểm thực sự thấp nhất và kết thúc ở phía bên kia. Tương tự, khi điều chỉnh trọng số của mạng, các điều chỉnh có thể thực sự đưa mạng xa hơn khỏi điểm mất thấp nhất và do đó các điều chỉnh phải nhỏ hơn theo thời gian. Trong bối cảnh xuống ngọn đồi hướng tới điểm mất thấp nhất, gradient là một vectơ / hướng dẫn chi tiết đường chúng ta nên đi và kích thước bước chúng ta nên thực hiện.

Bây giờ chúng ta biết rằng gradient là hướng dẫn cho chúng ta biết hướng di chuyển (các hệ số nào nên được cập nhật) và kích thước bước chúng ta nên thực hiện (các hệ số nên được cập nhật bao nhiêu), chúng ta có thể khám phá cách tính toán gradient.

Tính toán Gradient & Gradient Descent

Gradient descent bắt đầu từ một điểm có mất cao và thông qua nhiều lần lặp lại, thực hiện các bước theo hướng mất thấp nhất, nhằm tìm cấu hình trọng số tối ưu. Ảnh: Роман Сузи qua Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

Để thực hiện gradient descent, trước tiên chúng ta phải tính toán gradient. Để tính toán gradient, chúng ta cần biết hàm mất / chi phí. Chúng ta sẽ sử dụng hàm chi phí để xác định đạo hàm. Trong tính toán, đạo hàm chỉ đề cập đến độ dốc của một hàm tại một điểm nhất định, vì vậy chúng ta基本 chỉ tính toán độ dốc của ngọn đồi dựa trên hàm mất. Chúng ta xác định mất bằng cách chạy các hệ số qua hàm mất. Nếu chúng ta biểu diễn hàm mất dưới dạng “f”, thì chúng ta có thể tuyên bố rằng phương trình để tính toán mất như sau (chúng ta chỉ chạy các hệ số qua hàm chi phí đã chọn):

Mất = f(hệ số)

Sau đó, chúng ta tính toán đạo hàm, hoặc xác định độ dốc. Việc lấy đạo hàm của mất sẽ cho chúng ta biết hướng lên hoặc xuống độ dốc, bằng cách cung cấp cho chúng ta dấu phù hợp để điều chỉnh hệ số của chúng tôi. Chúng ta sẽ biểu diễn hướng phù hợp dưới dạng “delta”.

delta = đạo_hàm(mất)

Chúng ta đã xác định hướng xuống phía điểm mất thấp nhất. Điều này có nghĩa chúng ta có thể cập nhật các hệ số trong các tham số của mạng nơ-ron và hy vọng giảm mất. Chúng ta sẽ cập nhật các hệ số dựa trên các hệ số trước đó trừ đi sự thay đổi phù hợp trong giá trị như được xác định bởi hướng (delta) và một đối số kiểm soát độ lớn của sự thay đổi (kích thước bước của chúng tôi). Đối số kiểm soát kích thước của cập nhật được gọi là “tốc độ học” và chúng ta sẽ biểu diễn nó dưới dạng “alpha”.

hệ số = hệ số – (alpha * delta)

Sau đó, chúng ta chỉ lặp lại quá trình này cho đến khi mạng hội tụ xung quanh điểm mất thấp nhất, điều này nên gần bằng không.

Điều quan trọng là phải chọn giá trị phù hợp cho tốc độ học (alpha). Giá trị tốc độ học được chọn phải không quá nhỏ hoặc quá lớn. Hãy nhớ rằng khi chúng ta tiếp cận điểm mất thấp nhất, các bước của chúng ta phải trở nên nhỏ hơn, hoặc chúng ta có thể vượt quá điểm thực sự thấp nhất và kết thúc ở phía bên kia. Điểm mất nhỏ nhất là nhỏ và nếu tốc độ thay đổi của chúng ta quá lớn, lỗi có thể tăng lại. Nếu kích thước bước quá lớn, hiệu suất của mạng sẽ tiếp tục nhảy xung quanh điểm mất thấp nhất, vượt quá nó ở một bên và sau đó bên kia. Nếu điều này xảy ra, mạng sẽ không bao giờ hội tụ đến cấu hình trọng số tối ưu.

Ngược lại, nếu tốc độ học quá nhỏ, mạng có thể mất một lượng thời gian rất dài để hội tụ đến trọng số tối ưu.

Loại Gradient Descent

Bây giờ chúng ta hiểu cách gradient descent hoạt động chung, hãy xem một số loại gradient descent khác.

Gradient Descent theo lô: Hình thức gradient descent này chạy qua tất cả các mẫu đào tạo trước khi cập nhật hệ số. Loại gradient descent này có khả năng là hình thức gradient descent hiệu quả nhất về mặt tính toán, vì trọng số chỉ được cập nhật một lần sau khi toàn bộ lô đã được xử lý, có nghĩa là có ít cập nhật hơn. Tuy nhiên, nếu tập dữ liệu chứa một số lượng lớn mẫu đào tạo, thì gradient descent theo lô có thể làm cho quá trình đào tạo mất nhiều thời gian.

Gradient Descent ngẫu nhiên: Trong Gradient Descent ngẫu nhiên, chỉ một mẫu đào tạo được xử lý cho mỗi lần lặp lại của gradient descent và cập nhật tham số. Điều này xảy ra cho mỗi mẫu đào tạo. Vì chỉ một mẫu đào tạo được xử lý trước khi các tham số được cập nhật, nó có xu hướng hội tụ nhanh hơn Gradient Descent theo lô, vì cập nhật được thực hiện sớm hơn. Tuy nhiên, vì quá trình phải được thực hiện trên mọi mục trong tập đào tạo, nó có thể mất rất nhiều thời gian để hoàn thành nếu tập dữ liệu lớn, vì vậy sử dụng một trong những loại gradient descent khác được ưu tiên.

Gradient Descent theo lô nhỏ: Gradient Descent theo lô nhỏ hoạt động bằng cách chia toàn bộ tập dữ liệu đào tạo thành các phần nhỏ. Nó tạo ra các lô nhỏ hơn được chạy qua mạng, và khi lô nhỏ đã được sử dụng để tính toán lỗi, hệ số được cập nhật. Gradient Descent theo lô nhỏ tìm ra điểm trung gian giữa Gradient Descent ngẫu nhiên và Gradient Descent theo lô. Mô hình được cập nhật thường xuyên hơn so với trường hợp của Gradient Descent theo lô, điều này có nghĩa là hội tụ nhanh hơn và mạnh mẽ hơn vào các tham số tối ưu của mô hình. Nó cũng hiệu quả hơn về mặt tính toán so với Gradient Descent ngẫu nhiên

Blogger và lập trình viên với chuyên môn về Machine Learning Deep Learning topics. Daniel hy vọng giúp đỡ người khác sử dụng sức mạnh của AI cho lợi ích xã hội.