+6

[Basic Machine Learning] Part 1 - Linear Regression + Gradient Descent Explained - Series Study ML with me

Chào mừng các bạn tới series tự học Machine Learning cùng mình. Mình tên là Khang và mình đang trong quá trình ôn tập kiến thức máy học. Mục đích của mình viết series này để chia sẻ kiến thức cơ bản về máy học (ML). Trong quá trình viết bài này, mình có thường sử dụng những từ ngữ chuyên ngành bằng tiếng anh, mình mong các bạn bỏ qua. Ngoài ra, sau khi các bạn đọc bài thì có thắc mắc hay phát hiện mình có sai sót gì thì có thể comment lại ở dưới giúp mình, mình sẽ cố gắng dành thời gian giải đáp.

Trong phần 1 (Part 1) này, mình sẽ giới thiệu sơ qua về kiến thức Linear Regression và cách mình optimize Cost function bằng cách dùng Gradient Descent.

1. Machine Learning overview

Let's get started. Vậy thì machine learning là gì ? Machine learning (Máy học) là một nhánh của AI (artificial intelligence) để tập trung vào việc sử dụng data và thuật toán của máy cho việc bắt chước con người trong việc học và cải thiện accuracy . Machine learning được dùng trong nhiều lĩnh vực như:

  • Ngân hàng (Fraud Detection)
  • Kinh Doanh (Stock prediction)

Phần trên này mình chỉ lược sơ qua lại kiến thức overview của Machine Learning. Còn bây giờ mình sẽ vô trọng tâm của bài hôm nay.

2. Linear Regression

Tổng quát + Ví dụ

Linear Regression chỉ là 1 công thức f(x) = ax + b bình thường trong toán học của mình với 1 giá trị của x sẽ đưa ra 1 giá trị của y. Thế nhưng, trong thực tế, có rất nhiều dữ liệu (x, y) khi ta cho x vào phương trình f(x) = ax + b, thì giá trị f(x) khác với giá trị y của dữ liệu. Đây là 1 bài toán của Supervised Learning.

Ví dụ thực tế: Ta có phương trình f(x) = 1 + 3x và 2 dữ liệu giá trị (x, y): A(1, 4) và B(2, 5) Lúc ta thế A vào phương trình, ta có f(1) = 1 + 3 * 1 = 4 = y => A là điểm nằm trên đường thẳng của f(x).

Thế nhưng, khi chúng ta thế B vào phương trình trên, ta có f(2) = 1 + 3 * 2 = 7 != y (y = 5). Từ đây, ta thấy được là B không nằm trên đường thẳng của function f(x)f(x), tương đương với việc function f(x)f(x) có sai số trong việc predict giá trị của điểm B với giá trị xBx_B.

Tương tự như vậy, nếu ta có rất nhiễu dữ liệu giá trị (x, y) thì ta sẽ plot được 1 line graph dưới đây.

Trong đó:

  • line (đường màu đỏ) là function f(x)
  • Các chấm là dữ liệu của x và y

Qua đó, ta nhận biết được đường màu đỏ (f(x)) có thể được gọi là 1 machine learning model.

Ví dụ ở trên chỉ biểu diễn 1 function của f(x) với giá trị của y phụ thuộc vào 1 giá trị của x. Trong trường hợp f(x) là 1 function có nhiều biến x1,x2,x3,....,xnx_1, x_2, x_3, .... , x_n

Ví dụ: Trong bài toán House Prediction như hình ở dưới

Ta thấy rằng Price phụ thuộc vào rất nhiều yếu tố như: số phòng ngủ, số nhà tắm, diện tích, etc...

Những yếu tố đó là x1,x2,x3,....,xnx_1, x_2, x_3, .... , x_n.

Từ đó, ta có công thức tổng quát của Linear Regression trong Machine Learning là:

h(x) = Θ0+Θ1x1+Θ2x2+...+Θnxn\Theta _0 + \Theta _1 * x_1 + \Theta _2 * x_2 + ... + \Theta _n * x_n

Trong đó:

  • x1>xnx_1 -> x_n : là các giá trị tương ứng với các cột trong data
  • Θ0>Θn\Theta _0 -> \Theta _n: trọng số (weights) của những giá trị tương ứng với các cột (weight càng cao thì ảnh hưởng của cột đó càng lớn)

Cách đo độ sai số của Linear Regression (Measure Performance)

Để đo lường độ sai số của function trong việc predict các giá trị y dựa trên nhiều biến x, ta có 1 function khác gọi là Loss Function Loss Function: L(ypredicted,yactual)=1/2(h(x)yactual)2L(y_{predicted}, y_{actual}) = 1/2 * (h(x) - y_{actual}) ^ 2. Loss function này ta tính cho từng data point.

Ví dụ:

Ta có predicted function: h(x)=ax+bh(x) = ax + b với a = 2 và b = 3 : h(x)=2x+3h(x) = 2x + 3 và data point là A(2,5)A(2, 5) với x = 2 và y = 5.

Khi thế giá trị x vào predicted function, ta có: h(x)=22+3=7h(x) = 2 * 2 + 3 = 7 khác với giá trị yactual=5y_{actual} = 5

Từ đó, ta tính được Loss Function của function h(x)h(x) tại điểm A(2,5)A(2, 5) là:

L(ypredicted,yactual)=1/2(75)2=1/24=2L(y_{predicted}, y_{actual}) = 1/2 * ( 7 - 5) ^ 2 = 1/2 * 4 = 2


Thế nên, để tính Loss Function cho toàn bộ training set (toàn bộ data point có được), Cost Function sẽ được dùng để tính tổng quát performance cho h(x)h(x).

Cost Function : J(θ0>θm)=(1/n)Σi=0n(h(xi)yactual)2J(θ_0 -> θ_m) = (1/n) * \Sigma_{i=0}^{n} (h(x^{i}) - y_{actual}) ^ 2

Trong đó:

  • i: data thứ i (hàng thứ mấy)
  • n: tổng data (tổng hàng row)
  • h(xi)h(x^i) : giá trị dự đoán (predicted value)
  • m: tổng các cột (features)

Để function h(xi)h(x^i) dự đoán được tốt nhất, chúng ta phải tìm Θ\Theta (weight) của h(x)h(x) sao cho Cost Function có giá trị là minimum .

Gradient Descent

Có rất nhiều cách để minimize 1 function nói chung và Cost Function nói riêng. Nhưng trong bài này, mình chỉ đề cập tới Gradient Descent.

Hình bên dưới mình sẽ plot 1 graph function:

image.png Click here to see image

Tổng quát, thường thường thì 1 Cost Function sẽ được assume là convex function (hàm lõm) (có trường hợp không convex, nhưng mình không đề cập trong bài này). Để tìm được giá trị minimum của Cost Function, chúng ta cần phải tới (hay hội tụ) tại điểm local minimum (trong trường hợp h(x)h(x) có 1 local minimum, mình lấy ví dụ đơn giản cho mấy bạn dễ hiểu, còn nhiều trường hợp khác có multiple local minima, mình sẽ nói ở những bài sau) của convex function.

image.pngClick here to see the motion detail

Gradient Descent tận dùng việc đạo hàm (derivatives) tại điểm bắt đầu để xác định được hướng cho bước tiếp theo (những dấu chấm đen di chuyển trên màu đỏ parabol - hình bên trái). Khi càng gần về local minimum, sự khác biệt của vị trí (giá trị) của Cost Function trước và sau khi thay đổi sẽ càng nhỏ. Khi tới được local minimum, thì đạo hàm tại đó sẽ bằng 0 đồng nghĩa với việc chúng ta đã thành công minimize được Loss Function. Nhìn hình bên phải, ta thấy đường line (function f(x)) di chuyển khi chấm đen (hình bên phải) di chuyển về phía local minimum. Từ đó ta thấy được có sự thay đổi của Θ\Theta ở f(x). Sau khi minimize được Loss Function, ta sẽ có giá trị của Θ\Theta. Khi đó, ta gán giá trị của Θ\Theta vào phương trình f(x) ban đầu để thực hiện việc dự đoán (Prediction).

Ở đây, mình sẽ nói các bước dùng Gradient Descent để minimize cost:

  • Bước 1: Ngẫu nhiên đặt giá trị của $\Theta. ( Θ0\Theta_{0} - > Θm\Theta_{m} với m là tổng số features trong dataset).
  • Bước 2: Thay đổi Θj\Theta_{j} ( 0 <= j <= m)
    • Θj<Θj(old)α\Theta_{j} <- - \Theta_{j (old)} - \alpha δJ(Θ0>Θm)δΘj\frac{\delta J(\Theta_{0} -> \Theta_{m})}{\delta \Theta_{j}}
    • Tiếp tục chạy bước 2 cho đến khi thoả mãn 2 điều kiện này:
      • Thoả mãn điều kiện số iteration yêu cầu (được người dùng điền vào).
      • Khi Θj\Theta_{j}Θj(old)\Theta_{j (old)} có sự khác biệt cực kì nhỏ.

Trong đó:

  • Θj(old)\Theta_{j (old)} : là giá trị cũ
  • Θj\Theta_{j} : là giá trị mới được update
  • α\alpha: là learning rate
  • δJ(Θ0>Θm)δΘj\frac{\delta J(\Theta_{0} -> \Theta_{m})}{\delta \Theta_{j}}: đạo hàm của Cost Function

Chú ý: Learning rate α\alpha

Ta chú ý trong việc chọn α\alpha learning rate (nhìn hình bên dưới để dễ hình dung):

  • Nếu α\alpha quá nhỏ, thì quá trình hội tụ tại điểm local minimum rất là lâu.
  • Nếu α\alpha quá lớn, thì quá trình hội tụ tại điểm local minimum sẽ bị overshooting (nhảy qua lại, thậm chí có trường hợp không về lại được local minimum - phân kì).

image.pngClick here to see image

3. Tổng kết

Vậy là chúng ta mới làm quen với Linear Regression và cách dùng Gradient Descent để tăng performance của Linear Regression model. Trong bài này, chúng ta cần hiểu kĩ cách hoạt động của Linear Regression model hoạt động như thế nào và cách để tăng accuracy của model. Gradient descent đã tận dụng được đạo hàm trong toán học để giúp cho quá trình hội tụ nhanh hơn. Bên cạnh đó, việc lựa chọn Learning rate α\alpha cũng ảnh hưởng đến kết quả của việc tìm được local minimum trong Cost Function đơn giản.

Đây là bài viết đầu tiên của mình, nếu có còn sai sót thì mong các bạn bỏ qua và comment phía dưới giúp mình để mình có thể ra được những bài chất lượng hơn trong tương lai gần. Đương nhiên là mình sẽ tiếp tục Series Study ML with me để giúp các bạn cũng như bản thân mình củng cố kiến thức Machine Learning. Mình cám ơn các bạn đã theo dõi mình tới tận đây. Peace out !


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí