+3

Linear Regession with One Variable

Linear Regession (Hồi quy tuyến tính) là một trong những thuật toán Machine Learning cơ bản nhất. Đây là một thuật toán Supervised Learning, đôi khi nó còn được gọi là Linear Fitting hoặc Linear Least Square.

Model Representation

Trong bài này, chúng ta sẽ xét mô hình cơ bản của hồi quy tuyến tính. Cho một căn nhà với bộ dữ liệu training gồm có diện tích và giá trị của căn nhà đấy. Chúng ta sẽ cần dự đoán với một căn nhà có diện tích bất kì thì giá căn nhà đó sẽ là bao nhiêu.

Diện tích (feet2)(feet^2) (x)(x) Giá trị (y)(y)
2104 460
1534 315
1416 232
852 178
... ...

Ở đây chúng ta sẽ có:

  • m=47m=47 là số lượng training example.
  • xx là dữ liệu đầu vào hay đặc điểm, tính chất của căn nhà.
  • yy là dữ liệu đầu ra hay đặc điểm tính chất mà ta cần (giá trị căn nhà).

Để thống nhất ký hiệu về sau, chúng ta sử dụng x(i)x^{(i)} là biến nhập vào (diện tích căn nhà trong ví dụ này), y(i)y^{(i)} là biến output (giá trị căn nhà). Với mỗi cặp (x(i),y(i))(x^{(i)},y^{(i)}) là một cặp "training example". Lượng dữ liệu data chúng ta dùng để train là một list mm training examples. (x(i),y(i));i=1,2,...m(x^{(i)},y^{(i)}); i = 1,2,...m là một training set. XX là không gian vecto xx trong ví dụ này, YY là không gian vecto output. Trong ví dụ này X=Y=RX=Y=\mathbb{R}

Để thể hiện rõ Supervised Learning, mục tiêu chúng ta là khi được cho bộ training set, tạo một hàm h:XYh: X \rightarrow Y để dự đoán giá trị của yy. Thuật toán được thể hiện như sau:

Khi đầu ra yy là một giá trị liên tục, như diện tích ngôi nhà, chúng ta gọi bài toán đó là hồi quy. Khi đầu ra yy chỉ nhận một vài giá trị rời rạc (ví dụ khi được cho diện tích một căn nhà hoặc căn hộ chung cư, ta sẽ cần dự đoán xem là nhà riêng hay chung cư) được gọi là bài toán phân loại.

Cost Function

Cost Function hay còn được gọi là Loss Function, là hàm chi phí của hàm h(x)h(x). Hàm h(x)h(x) là một hàm tuyến tính theo xx, dùng để dự đoán giá trị đầu ra yy: h(x)=θ0+θ1xh(x)=\theta_{0}+\theta_{1}x.

Giá trị dự đoán sẽ có thể có sai số, ta biểu diễn: y^=h(x)y\hat{y} = h(x) \approx y . Ở đây, yy là giá trị thực, y^\hat{y} là giá trị dự đoán.

Mục tiêu của ta là tìm θ0,θ1\theta_{0},\theta_{1} sao cho tổng giá trị h(xi)yih(x_{i})-y_{i} với i=1,...,mi=1,...,m là gần 00 nhất. Ta sẽ có hàm chi phí J(θ1,θ2)J(\theta_{1},\theta_{2}) như sau:

J(θ1,θ2)=12mi=1m(h(xi)yi)2\displaystyle J(\theta_{1},\theta_{2})=\frac{1}{2m}\sum_{i=1}^m(h(x_{i})-y_{i})^2

  • Câu hỏi thứ nhất là tại sao lại là (h(xi)yi)2(h(x_{i})-y_{i})^2 mà không phải h(xi)yi\left | h(x_{i})-y_{i} \right |. Lý do là hàm trị tuyệt đối thì không có đạo hàm ở 00 😄

  • Câu hỏi thứ hai là giá trị 12\displaystyle\frac{1}{2} ở đâu ra? Giá trị 12\displaystyle\frac{1}{2} là để thuận tiện cho việc tính toán, khi đạo hàm bình phương thì sẽ mất 12\displaystyle\frac{1}{2} 😄

Gradient Descent

Giờ chúng ta đã có hàm ước tính hh và cách để đánh giá độ chính xác của nó với bộ data được nhận. Công việc tiếp theo là tìm các tham số trong hàm hh đó. Vì vậy, chúng ta cần đến Gradient Descent.

Mô hình chung

Tưởng tượng rằng chúng ta biểu diễn hàm cần tìm hh "based on its fields θ0\theta_{0} and θ1\theta_{1}" (Đoạn này không biết diễn ta bằng tiếng việt như nào 😅 nôm na là dựa trên mặt phẳng tạo bởi θ0\theta_{0}θ1\theta_{1} khi chúng chạy trên R\mathbb{R}).

Hình biểu diễn

Chúng ta đạt được mục tiêu khi hàm chi phí đạt đến giá trị nhỏ nhất.

Cách thực hiện là đạo hàm hàm chi phí như ở toán cao cấp để tìm cực trị. Ở đây, chúng ta tiếp cận việc tìm nghiệm của đạo hàm theo một hướng mới. Thuật toán Gradient Descent sẽ như sau:

repeat until convergence:

θj:=θjαJ(θ0,θ1)θj\theta_{j} := \theta_{j} - \alpha\frac{\partial{J(\theta_{0},\theta_{1})}}{\partial{\theta_{j}}} where j=0j=0 and j=1j=1

Với nhiều θ0,θ1,θ2...\theta_{0}, \theta_{1}, \theta_{2} ... ta phải update đồng thời chúng. Trình tự đúng như sau:

với α\alpha là "Learning Rate". Learning Rate còn được gọi là Step Size, là một tham số để ta kiểm soát việc xác định giá trị tiếp theo của θ\theta. Hầu hết lập trình viên dành thời gian để tinh chỉnh Learning Rate. Nếu Learning Rate quá nhỏ, thuật toán sẽ tốn nhiều thời gian, nếu Learning Rate quá lớn, nó có thể sẽ bỏ qua điểm cực trị. Quan sát hình minh họa sau đây:

  • Learning Rate quá nhỏ:

  • Learning Rate quá lớn:

  • Learning Rate hợp lý:

Tham khảo Machine Learning Crash Course

Với việc chọn Learning Rate hợp lý, ta sẽ dùng thuật toán để tìm được điểm cực tiểu:

Cụ thể hàm chi phí (Cost Function) của ví dụ trên

Nhìn vào hàm chi phí, ta thấy nó là tổng của các bình phương của một tổng nên không thể âm được, giá trị nhỏ nhất sẽ gần 00 nhất.

J(θ0,θ1)θj=J(θ1,θ2)θj=θj12mi=1m(h(xi)yi)2=θj12mi=1m(θ0+θ1xiyi)2\frac{\partial{J(\theta_{0},\theta_{1})}}{\partial{\theta_{j}}}=\frac{\partial{J(\theta_{1},\theta_{2})}}{\partial{\theta_{j}}}=\frac{\partial{}}{\partial{\theta_{j}}}\frac{1}{2m}\sum_{i=1}^m(h(x_{i})-y_{i})^2=\frac{\partial{}}{\partial{\theta_{j}}}\frac{1}{2m}\sum_{i=1}^m(\theta_{0}+\theta_{1}x_{i}-y_{i})^2

J(θ0,θ1)θ1=1mi=1m(θ0+θ1xiyi)\frac{\partial{J(\theta_{0},\theta_{1})}}{\partial{\theta_{1}}}=\frac{1}{m}\sum_{i=1}^m(\theta_{0}+\theta_{1}x_{i}-y_{i})

J(θ0,θ1)θ1=1mi=1m(θ0+θ1xiyi)xi\frac{\partial{J(\theta_{0},\theta_{1})}}{\partial{\theta_{1}}}=\frac{1}{m}\sum_{i=1}^m(\theta_{0}+\theta_{1}x_{i}-y_{i})x_{i}

Gradient Descent Algorithm

repeat until convergence:

θ0:=θ0α1mi=1m(θ0+θ1xiyi)\theta_{0} := \theta_{0} - \alpha\frac{1}{m}\sum_{i=1}^m(\theta_{0}+\theta_{1}x_{i}-y_{i})

θ0:=θ0α1mi=1m(θ0+θ1xiyi)xi\theta_{0} := \theta_{0} - \alpha\frac{1}{m}\sum_{i=1}^m(\theta_{0}+\theta_{1}x_{i}-y_{i})x_{i}

update θ1\theta{1} and θ2\theta{2} simultaneously

Sau khi tìm được θ1\theta{1}θ2\theta{2} tối ưu, ta tìm được hàm h(x)h(x) là một đường tuyến tính để dự đoán giá trị của yy

(còn tiếp)

Bài viết là quá trình ghi lại khi tham gia khóa học Machine Learning của thầy Andrew Ng và tham khảo tài liệu từ blog Machine Learning cơ bản.


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í