12/08/2018, 17:53

Machine Learning cho người mới bắt đầu (Part 2)

Xin chào các bạn, trong phần 1 của series Machine Learning cho người mới bắt đầu , mình đã giới thiệu tới các bạn những khái niệm cơ bản nhất để có thể bắt đầu với Machine Learning . Trong phần 2 này, mình sẽ đi sâu vào 2 mô hình Machine Learning rất phổ biến trong bài toán học giám sát ...

Xin chào các bạn, trong phần 1 của series Machine Learning cho người mới bắt đầu, mình đã giới thiệu tới các bạn những khái niệm cơ bản nhất để có thể bắt đầu với Machine Learning. Trong phần 2 này, mình sẽ đi sâu vào 2 mô hình Machine Learning rất phổ biến trong bài toán học giám sát (supervised learning) đó là: linear regression, logistic regression. Đúng với cái tên của nó, linear regression model là mô hình được áp dụng để giải quyết loại bài toán hổi quy tuyến tính (regression problem), logistic regression model là mô hình được áp dụng trong bài toán phân loại (classification problem).

Trong bài viết này, mình sẽ trình bày chi tiết về mặt lý thuyết của cả hai mô hình trên nên sẽ có rất nhiều phần liên quan tới các phép toán về ma trận, đạo hàm của hàm số. Để có thể chuẩn bị kiến thức nền tảng tốt nhất trước khi bắt đầu, các bạn nên ôn tập lại kiến thức về đại số tuyến tính cũng như giải tích cơ bản.

Trước khi bắt đầu, có một vài kí hiệu mình sẽ sử dụng nhiều trong suốt bài viết này mình cần các bạn nắm rõ:

  • mmm: là số lượng ví dụ training mà ta có
  • nnn: là số chiều (feature) của dữ liệu training
  • XXX là dữ liệu training đầu vào (training input) có kích thước m×nm imes nm×n
  • YYY là đầu ra cần dự đoán (training output) có kích thước m×1m imes 1m×1

Giả sử bài toán đặt ra là dự đoán tuổi thọ của 1 người dựa trên năm sinh, chiều cao, và cân nặng; như vậy số chiều của dữ liệu n=3n = 3n=3. Sau quá trình thu thập dữ liệu, ta có được thông tin về năm sinh, chiều cao, cân nặng và tuổi thọ của 150 người, như vậy m=150m=150m=150XXX có kích thước 150× imes× 3, YYY có kích thước 150 × imes× 1. Mỗi 1 hàng của ma trận XXX là 1 vector chứa thông tin về năm sinh, chiều cao, cân nặng: xix^{i}xi = [năm sinh, chiều cao, cân nặng], tương tự mỗi hàng của ma trận YYY chứa thông tin về tuổi thọ tương ứng của 1 người thuộc XXX.

Trong mô hình tuyến tính hồi quy, giả sử tao có m training examples với n features (ở đây ra sẽ giả sử m = 1000 và n = 5), ta sẽ định nghĩa 1 hàm học: h(x)=θ0+θ1x1+θ2x2+...+θnxn h(x) = heta_0 + heta_1x_1 + heta_2x_2 + ... + heta_nx_nh(x)=θ0+θ1x1+θ2x2+...+θnxn, và mục tiêu của chúng ta là tìm ra các tham số θ0,θ1,...,θn heta_0, heta_1, ... , heta_n θ0,θ1,...,θn để sao cho h(x) h(x) h(x) có giá trị gần sát với đầu ra output chuẩn nhất. Như đã đề cập ở trên, dữ liệu training mà chúng ta có là 1000 mẫu nên để có thể tính toán một cách nhanh nhất ta không nên tính h(x) h(x) h(x) cho từng mẫu training mà nên sử dụng vectorization để có thể tính h(x) h(x) h(x) cho toàn bộ tập dữ liệu.

X=[x01x11x21...xn1x02x12x22...xn2⋮⋱⋱⋱⋮x0mx1mx2m...xnm] X = egin{bmatrix} x_0^1& x_1^1 & x_2^1 & ... & x_n^1 x_0^2& x_1^2 & x_2^2 & ... & x_n^2 vdots & ddots & ddots&ddots&vdots & x_0^m& x_1^m & x_2^m & ... & x_n^m end{bmatrix}X=x01x02x0mx11x12x1mx21x22x2m.........xn1xn2xnmθ=[θ0θ1⋮θn] heta = egin{bmatrix} heta_0 heta_1 vdots heta_n end{bmatrix} θ=θ0θ1θn.

Do đó hàm h(x) h(x) h(x) có thể được viết lại thành dạng ngắn gọn hơn: h(x)=θTX h(x) = heta^TX h(x)=θTX, lưu ý rằng giá trị x0i=0 x_0^i = 0 x0i=0 với mọi 1⩽i⩽m 1 leqslant i leqslant m 1im hay nói cách khác giá trị x0i x_0^i x0i được đưa vào chỉ để hai ma trận X X Xθ heta θ có kích thước phù hợp để có thể nhân được với nhau. Ma trận 1000x6 nhân với ma trận 6x1 sẽ tạo ra ma trận h(x) h(x) h(x) có kích thước 1000x1.

Cost function là hàm được định nghĩa nhằm tính toán được độ chính xác của thuật toán. Cost function trong bài toán regression được định nghĩa là sai số giữa bình phương giá trị output chuẩn và giá trị output do thuật toán dự đoán. Ví dụ, output chuẩn là y=1.4 y = 1.4 y=1.4 trong ki giá trị dự đoán h(x)=1.8 h(x) = 1.8 h(x)=1.8 thì cost function J J J được tính như sau: J=(y−h(x))2=(1.4−1.8)2=0.16 J = (y - h(x))^2 = (1.4 - 1.8)^2 = 0.16J=(yh(x))2=(1.41.8)2=0.16. Trên thực tế, ta cần tính giá trị J J J cho toàn bộ tập dữ liệu training gồm m=1000 m = 1000 m=1000 mẫu:

J(θ)=12m∑(h(xi)−yi)2 J( heta) = frac 1 {2m}sum(h(x^{i}) - y^i)^2 J(θ)=2m1(h(xi)yi)2 với 1⩽i⩽m 1leqslant i leqslant m 1im

Để có thể tìm ra ma trận θ heta θ sao cho cost function J J J có giá trị thấp nhất ta cần sử dụng thuật toán Gradient Descent. Giải thuật Gradient Descent cũng không có gì phức tạp, ta sẽ lặp lại việc tính θ cho đến khi giá trị J J J đạt một ngưỡng mà ta có thể chấp nhận được. Quá trình học có thể dừng lại bất cứ lúc nào mà chúng ta muốn, ta có thể dừng khi J⩽10−4 J leqslant 10^{-4} J104 hoặc nếu ta muốn thuật toán có độ chính xác cao hơn thì ta có thể dừng khi J⩽10−8 J leqslant 10^{-8} J108. Việc dừng quá trình học lại hoàn toàn do bạn kiểm soát. Một cách tổng quát thì giải thuật Gradient Descent có công thức như sau:

θj=θj−α1m∑(h(xi)−yi)xji heta_j = heta_j - alpha frac 1 m sum(h(x^{i}) - y^i)x_j^iθj=θjαm1

0