Tập tành tìm hiểu Thuật toán Support Vector Machine – SVM

SVM là gì?

SVM (Support Vector Machine) là một thuật toán học máy có giám sát được sử dụng rất phổ biến ngày nay trong các bài toán phân lớp (classification) hay hồi qui (Regression).

SVM được đề xuất bởi Vladimir N. Vapnik và các đồng nhiệp của ông vào năm 1963 tại Nga và sau đó trở nên phổ biến trong những năm 90 nhờ ứng dụng giải quyết các bài toán phi tuyến tính (nonlinear) bằng phương pháp Kernel Trick.

SVM hay SVMs?

Khi đọc các tài liệu về SVM các bạn thường thấy SVM và SVMs đều được nhắc đến vậy chúng khác nhau thế nào. Thực chất SVM và SVMs là một. Người ta dùng SVMs là vì muốn nói đến hai loại của thuật toán của SVM:

  • SVM: dùng cho các bài toán phân lớp
  • SVR (Support Vector Regression): dùng cho các bài toán hồi quy

Theo kinh nghiệm của mình thấy thì việc ứng dụng SVM để giải quyết các bài toán thực tế thường cho kết quả cao so với các thuật toán ML khác đặc biệt là các bài toán phân loại liên quan đến xử lý văn bản. Có lẽ chính vì vậy mà SVM có một nền tảng toán học và lý thuyết khá phức tạp. Trong bài này mình chỉ giới thiệu một cách tổng quan về cách thức hoạt động của SVM còn về các khía cạch toán học khác mình sẽ giải thích kỹ hơn ở một bài khác.

Để hiểu được một cách đầy đủ về SVM trong các bài toán thực tế chúng ta cần nắm được các bài toán con của SVM: linear, hard-margin, soft-margin, non-linear, binary-class và multi-class. Mình sẽ giải thích rõ từng vấn đề này.

SVM làm việc như thế nào?

Ý tưởng của SVM là tìm một siêu phẳng (hyper lane) để phân tách các điểm dữ liệu. Siêu phẳng này sẽ chia không gian thành các miền khác nhau và mỗi miền sẽ chứa một loại giữ liệu.

Siêu phẳng được biểu diễn bằng hàm số < W.X > = b ( W và X là các vector <W.X> là tích vô  ) Hay W^{T} = b ( W^{T} là ma trận chuyễn vị)

Vấn đề là có rất nhiều siêu phẳng, chúng ta phải chon cái nào để tối ưu nhất ?

Cách chọn siêu phẳng tối ưu:

Giả sử chúng ta phải phân loại tập dữ liệu các lớp dương  (màu xanh) nhãn là 1 và các dữ liệu lớp âm (màu đỏ) nhãn là -1 (tập dữ liệu có thể phân tách tuyến tính).

Siêu phẳng phân tách hai lớp giữ liệu H0 thỏa mã <W.X> + b =0. Siêu phẳng này tạo ra hai nữa không gian (half space) dữ liệu:
Không gian các dữ liệu lớp âm Xi thỏa mãn <W.Xi> + b \leqslant -1  và không gian dữ liệu lớp dương Xj thỏa mãn <W.Xj> + b \geqslant 1 

Tiếp theo ta chọn hai siêu phẳng lề H1 đi qua điểm thuộc lớp âm và H2 đi qua điểm thuộc lớp dương đều song song với H0

  • H1:  <W.X> + b =-1
  • H2:  <W.X> + b =1

Khoảng cách từ H1 đến H0 là d-

Khoảng cách từ H2 đến H0 là d+

m = d- + d+ được gọi là mức lề

Siêu phẳng tối ưu mà chúng ta cần chọn là siêu phẳng phân tách có lề lớn nhất. Lý thuyết học máy đã chỉ ra rằng một siêu phẳng như vậy sẽ cực tiểu hóa giới hạn lỗi mắc phải.

Tính m (margin) như thế nào ?

Khoảng cách từ một điểm Xk đến siêu phẳng H0 là: |<W.Xk>+ b|||W||  Trong đó ||W|| là độ dài của vector W: ||W|| = <W.W> = w12 +w22 + ...wn2  

Khoảng cách từ một điểm Xi nằm trên H1 đến H0    d- = |<W.Xi>+ b|||W|| = 1||W|| 
Khoảng cách từ một điểm Xj nằm trên H2 đến H0    d+ = |<W.Xj>+ b|||W|| = 1||W|| 
Từ đó ta có thể tính được mức lề   m = d- + d+ = 2||W|| 

Giờ thì bạn đã hiểu vì sao các điểm nằm trên hai siêu phẳng H1 và H2 được gọi là các Support Vector.

Vậy việc training trong giải thuật SVM tương được với bài toán cực tiểu hóa có ràng buộc sau đây :

Cực tiểu hóa :  <W.W>2 

Với điều kiện: <W.Xi> + b  -1if yi = -1 (1)<W.Xi> + b  1 if yi = 1 (2)
Nhân hai vế bất đẳng thức của (1) và (2) với yi ta được điều kiện thu gọn yi.(<W.Xi>)  1 i = 1..n

Bài toán tương đương với

Minimize: ||W||

Subject to yi.(<W.Xi>)  1 i = 1..n (3)

Với điều kiện này, đây chính là bài toán hard-margin của SVM

Việc giải bài toán trên liên quan đến một số lý thuyết toán học tương đối phức tạp như điều kiện Karush-Kuhn-Tucker, hàm đối ngẫu Lagrange, Convex optimization … Mình sẽ không nói ở bài này.

Việc xác định siêu phẳng H0 được giả sử trong điều kiện lý tưởng tập dữ liệu có thể phân tách tuyến tính, tìm được hai siêu phẳng lề H1 và H2 mà không có điểm dữ liệu nào nằm giữa chúng. Vậy trong trường hợp tập dữ liệu có nhiều điểm gây nhiễu, các điểm này không thỏa mãn điều kiện (3), bài toán không tìm được lời giải.

Đối với các trường hợp này chúng ta cần nới lỏng các điều kiện lề bằng việc sử dụng các biến slack εi  0

<W.Xi> + b  -1 + εi if yi = -1

<W.Xi> + b  1 - εi if yi = -1

Bài toán trong trường hợp này trở thành:

Minimize||W|| + Ci = 1nεi
Subject toyi .(<W.Xi>)  1 - εi, i = 1..nεi 0,                                  i = 1..n 

Trong đó C là tham số xác định mức độ phạt của (penalty degree) đối với các lỗi (đây là mà một tham số khá quan trọng mà các bạn cần phải tối ưu trong quá trình huấn luyện SVM)
Đây chính là bài toán Soft-margin của SVM.

Một vấn đề cuối cùng mà mình muốn nhắc đến trong bài này là đối với các bài toán có không gian dữ liệu là phi tuyến tính (non-linear) chúng ta không thể tìm được một siêu phẳng H_{0}  thỏa mãn bài toán.

Để giải quyết bài toán trong trường hợp này chúng ra cần biểu diễn (ánh xạ ) dữ liệu từ không gian ban đầu X sang không gian F bằng một hàm ánh xạ phi tuyến:

ϕ: X Fx  ϕ(x)

Trong không gian F tập dữ liệu có thể phân tách tuyến tính. Nhưng nãy sinh một vẫn đề lớn đó là trong không gian mới này số chiều của giữ liệu tăng lên rất nhiều so với không gian ban đầu làm cho chi phí tính toán vô cùng tốn kém.  Rất may trong bài toán SVM người ta đã tìm ra một cách không cần phải tính ϕ(x), ϕ(z) và hàm ánh xạ ϕ mà vẫn tính được <ϕ(x).ϕ(z)>.  Phương pháp này gọi là Kernel Trick

K(x,z) = <ϕ(x).ϕ(z)> K(x,z) là một hàm nhân (Kernel functions)

Một số hàm nhân thường dùng:

  • Polynomial: K(x,z) = (<x,z> + ϕ)d
  • Gaussian RBF: K(x,z) = e||x - z||22δ; δ >0
  • Sigmoidal: tan(β <x, z >-λ) = 11 + e-(ϕ<x,z> - λ); β,λ R

Tóm lại: trong bài này mình trình bày các khái niệm, ý tưởng và cách hoạt động cơ bản của giải thuật SVM để các bạn có thể hiểu rõ hơn và là bước đệm (:D) để tìm hiểu sâu hơn về nền tảng toán học của nó . Một số địa chỉ để các bạn có thể tìm hiểu thêm về SVM:

  • svm-tutorial.com
  • machinelearningcoban.com
Fivestar: 
Average: 3.7 (11 votes)