Tải bản đầy đủ (.pdf) (65 trang)

Nghiên cứu phương pháp máy véc tơ hỗ trợ với lề mềm và ứng dụng phân lớp dữ liệu tuyến tính có nhiễu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.04 MB, 65 trang )

ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG

SAVADY Sathaphone

Nghiên cứu phương pháp Máy véc tơ hỗ trợ với lề mềm
và ứng dụng phân lớp dữ liệu tuyến tính có nhiễu

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

THÁI NGUYÊN - 2019

Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN




ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG

SAVADY Sathaphone

Nghiên cứu phương pháp Máy véc tơ hỗ trợ với lề mềm
và ứng dụng phân lớp dữ liệu tuyến tính có nhiễu

Chuyên ngành: Khoa học máy tính
Mã số: 8480101

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

Người hướng dẫn khoa học: TS. Đàm Thanh Phương



THÁI NGUYÊN - 2019

Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN




LỜI CAM ĐOAN
Tôi xin cam đoan: Luận văn thạc sỹ chuyên ngành Khoa học máy tính, tên
đề tài “Nghiên cứu phương pháp Máy véc tơ hỗ trợ với lề mềm và ứng dụng
phân lớp dữ liệu tuyến tính có nhiễu” là công trình nghiên cứu, tìm hiểu và
trình bày do tôi thực hiện dưới sự hướng dẫn khoa học của TS. Đàm Thanh
Phương, Trường Đại học Công nghệ Thông tin và Truyền thông - Đại học
Thái Nguyên.
Kết quả tìm hiểu, nghiên cứu trong luận văn là hoàn toàn trung thực,
không vi phạm bất cứ điều gì trong luật sở hữu trí tuệ và pháp luật Việt
Nam. Nếu sai, tôi hoàn toàn chịu trách nhiệm trước pháp luật.
Tất cả các tài liệu, bài báo, khóa luận, công cụ phần mềm của các tác giả
khác được sử dụng lại trong luận văn này đều được chỉ dẫn tường minh về
tác giả và đều có trong danh mục tài liệu tham khảo.

Thái Nguyên, ngày 18 tháng 7 năm 2019
Tác giả luận văn
SAVADY Sathaphone

i


LỜI CẢM ƠN

Tác giả xin chân thành cảm ơn TS Đàm Thanh Phương, trường Đại học
Công nghệ thông tin và truyền thông - Đại học Thái Nguyên, là giáo viên
hướng dẫn khoa học đã hướng dẫn tác giả hoàn thành luận văn này, xin được
cảm ơn các thầy, cô giáo trường Đại học công nghệ thông tin và truyền thông
nơi tác giả theo học và hoàn thành chương trình cao học đã nhiệt tình giảng
dạy và giúp đỡ.
Xin cảm ơn nơi tác giả công tác đã tạo mọi điều kiện thuận lợi để tác giả
hoàn thành chương trình học tập.
Và cuối cùng xin cảm ơn gia đình, bạn bè, đồng nghiệp đã động viên, giúp
đỡ tác giả trong suốt thời gian học tập, nghiên cứu và hoàn thành luận văn
này.
Xin chân thành cảm ơn.
Thái Nguyên, ngày 18 tháng 7 năm 2019
Tác giả luận văn
SAVADY Sathaphone

ii


DANH SÁCH HÌNH VẼ
2.1

Các mặt phân cách hai lớp tuyến tính . . . . . . . . . . . . . . . 26

2.2

Lề của hai lớp không bằng nhau. . . . . . . . . . . . . . . . . . . 26

2.3


Lề của hai lớp bằng nhau, nhưng chọn phương án có lề rộng hơn. 26

2.4

Phân tích bài toán SVM . . . . . . . . . . . . . . . . . . . . . . 27

2.5

Các điểm gần mặt phân cách nhất của hai classes được khoanh tròn.28

2.6

Soft margin SVM khi có nhiễu, SVM sẽ không hoạt động hiệu quả.33

2.7

Soft margin SVM khi dữ liệu gần linearly separable, SVM
thuần sẽ không hoạt động hiệu quả. . . . . . . . . . . . . . . . . 34

2.8

Mô tả sự được và mất khi chọn lề. . . . . . . . . . . . . . . . . . 36

2.9

Hàm hinge loss

3.1

Minh họa nghiệm tìm đc bởi SVM . . . . . . . . . . . . . . . . . 47


3.2

Dữ liệu tuyến tính có nhiễu . . . . . . . . . . . . . . . . . . . . . 49

3.3

Đường phân chia tìm được bởi sklearn . . . . . . . . . . . . . . . 52

3.4

Đường phân chia tìm được bởi hinge loss . . . . . . . . . . . . . 52

3.5

Đường phân chia tìm được bởi đối ngẫu. Các kết quả là như nhau 52

3.6

Nghiệm tìm bằng sklearn, C =0.1. . . . . . . . . . . . . . . . . . 53

3.7

Nghiệm tìm bằng sklearn, C=1 . . . . . . . . . . . . . . . . . . . 53

3.8

Nghiệm khi C=10 . . . . . . . . . . . . . . . . . . . . . . . . . . 53

3.9


Ảnh hưởng của C lên nghiệm, C=100. . . . . . . . . . . . . . . . 54

. . . . . . . . . . . . . . . . . . . . . . . . . . . 42

iii


DANH MỤC KÝ HIỆU,
TỪ VIẾT TẮT

iv


R

Tập hợp số thực.

Z

Tập hợp số nguyên.

C

Tập hợp số phức.

Rn

Không gian Euclide n chiều.


||.||

Chuẩn Euclide.
Suport vector machine - máy véc tơ hỗ

SVM
trợ
Soft SVM

Máy véc tơ hỗ trợ với lề mềm.

Argmin

Bài toán tối ưu tham số.

Duality

Tính chất đối ngẫu, đối ngẫu

Lagrangian

Đối ngẫu Lagrange

Strong duality Tính chất đối ngẫu mạnh
Weak duality

Tính chất đối ngẫu yếu

KKT


Karush Kuhn Tucker - Điều kiện KKT

det(A)

Định thức của ma trận A.

AT

Chuyển vị của ma trận A.

AH

Hermitian của ma trận A.

A

F

Frobenius norm của ma trận A

diag(A)

Đường chéo chính của ma trận A

trace(A)

trace của ma trận A

sng(x)


Hàm xác định dấu.

∂f
∂x

∇x f

Đạo hàm của hàm số f theo biến số

x∈R
Gradient (đạo hàm ) của hàm số f
theo véc tơ x.

v


MỤC LỤC
Lời cam đoan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

i

Lời cảm ơn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ii

Danh sách hình vẽ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ii

Danh mục ký hiệu, từ viết tắt . . . . . . . . . . . . . . . . . . . . . . .


v

Mở đầu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1

Chương 1. MỘT SỐ KIẾN THỨC CHUẨN BỊ. . . . . . . . . . . . . . . . . .

4

1.1. Tổng quan về ngôn ngữ Python . . . . . . . . . . . . . . . . . . . . . . . . .

4

1.2. Giới thiệu về học máy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7

1.3. Một số kiến thức toán học bổ trợ . . . . . . . . . . . . . . . . . . . . . .

11

Chương 2. PHƯƠNG PHÁP MÁY VÉC TƠ HỖ TRỢ SVM . . .

25

2.1. Bài toán phân lớp SVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25


2.2. Bài toán SVM với lề mềm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

Chương 3. ỨNG DỤNG VÀ LẬP TRÌNH MÔ PHỎNG . . . . . . .

46

3.1. Lập trình tìm nghiệm cho SVM . . . . . . . . . . . . . . . . . . . . . . . .

46

3.2. Lập trình tìm nghiệm cho Soft SVM . . . . . . . . . . . . . . . . . . .

48

Kết luận chung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

55

Tài liệu tham khảo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

55

vi


MỞ ĐẦU
Những năm gần đây, AI - Artificial Intelligence (Trí Tuệ Nhân Tạo), và cụ

thể hơn là Machine Learning (Học Máy hoặc Máy Học) nổi lên như một bằng
chứng của cuộc cách mạng công nghiệp lần thứ tư (1 - động cơ hơi nước, 2 năng lượng điện, 3 - công nghệ thông tin). Trí Tuệ Nhân Tạo đang len lỏi vào
mọi lĩnh vực trong đời sống mà có thể chúng ta không nhận ra. Xe tự hành
của Google và Tesla, hệ thống tự tag khuôn mặt trong ảnh của Facebook,
trợ lý ảo Siri của Apple, hệ thống gợi ý sản phẩm của Amazon, hệ thống gợi
ý phim của Netflix, máy chơi cờ vây AlphaGo của Google DeepMind, . . . ,
chỉ là một vài trong vô vàn những ứng dụng của AI/Machine Learning. [7]
Machine Learning là một tập con của AI. Theo định nghĩa của Wikipedia,
Machine learning is the subfield of computer science that “gives computers
the ability to learn without being explicitly programmed”. Nói đơn giản,
Machine Learning là một lĩnh vực nhỏ của Khoa Học Máy Tính, nó có khả
năng tự học hỏi dựa trên dữ liệu đưa vào mà không cần phải được lập trình
cụ thể. [1]
Phân lớp và hồi quy là hai trong số các thuật toán học máy có giám sát
có nhiều ứng dụng trong thực tế. Bài toán phân lớp tuyến tính cơ bản yêu
cầu xây dựng một classifier từ dữ liệu training để khi có điểm dữ liệu mới ta
có thể dự đoán được nhãn của nó. Giả sử rằng có hai class khác nhau được
mô tả bởi các điểm trong không gian nhiều chiều, hai classes này linearly
separable, tức tồn tại một siêu phẳng phân chia chính xác hai classes đó.
Hãy tìm một siêu mặt phẳng phân chia hai classes đó, tức tất cả các điểm
thuộc một class nằm về cùng một phía của siêu mặt phẳng đó và ngược phía
với toàn bộ các điểm thuộc class còn lại.
Chúng ta đã biết rằng, thuật toán PLA có thể làm được việc này nhưng
nó có thể cho chúng ta vô số nghiệm. Câu hỏi đặt ra là: trong vô số các mặt
1


phân chia đó, đâu là mặt phân chia tốt nhất theo một tiêu chuẩn nào đó?
Chúng ta cần một đường phân chia sao cho khoảng cách từ điểm gần nhất
của mỗi class tới đường phân chia là như nhau, như thế thì mới công bằng.

Khoảng cách như nhau này được gọi là margin (lề). Ngoài ra, việc margin
rộng hơn sẽ mang lại hiệu ứng phân lớp tốt hơn vì sự phân chia giữa hai
classes là rạch ròi hơn. Việc này là một điểm khá quan trọng giúp Support
Vector Machine mang lại kết quả phân loại tốt hơn so với Neural Network
với 1 layer, tức Perceptron Learning Algorithm.[1], [2]
Bài toán tối ưu trong Support Vector Machine (SVM) chính là bài toán
đi tìm đường phân chia sao cho margin là lớn nhất. Đây cũng là lý do vì sao
SVM còn được gọi là Maximum Margin Classifier. [7]
Tuy nhiên ngay cả SVM với lề cứng cũng sẽ không giải quyết được một số
bài toán phân lớp có nhiễu, việc nghiên cứu SVM với lề mềm sẽ giải quyết
tốt hơn trường hợp này.
Nội dung của luận văn gồm 3 chương:
Chương 1. Các kiến thức cơ sở
Chương này trình bày các kiến thức chuẩn bị cho việc nghiên cứu.
1.1 Giới thiệu về học máy
1.2 Giới thiệu về ngôn ngữ lập trình Python
1.3 Các kiến thức cơ sở về Đại số tuyến tính
Chương 2. Phương pháp máy véc tơ hỗ trợ SVM
Nội dung chương 2 tập trung vào vấn đề nghiên cứu các phương pháp máy
véc tơ hỗ trợ, cụ thể như sau:
2.1 Xây dựng bài toán tối ưu cho SVM
2.2 Bài toán đối ngẫu cho SVM
2.3 Bài toán đối ngẫu Lagrange.
2.4 Bài toán tối ưu không ràng buộc cho Soft SVM.
Chương 3. Ứng dụng và lập trình mô phỏng
Sau khi nắm rõ các nội dung trong chương 2, chương 3 trình bày một số ví
2


dụ minh họa ứng dụng và lập trình:

3.1 Lập trình tìm nghiệm cho SVM
3.2 Lập trình tìm nghiệm cho Soft SVM

Phần kết luận: Tóm tắt các kết quả đã đạt được và thảo luận hướng phát
triển tiếp theo của đề tài.
Mặc dù đã cố gắng song luận văn không tránh khỏi nhiều sai sót. Em xin
các thầy cô và bạn bè góp ý để luận văn được hoàn thiện hơn. Em xin chân
thành cảm ơn.

3


CHƯƠNG 1
MỘT SỐ KIẾN THỨC CHUẨN BỊ
Chương này trình bày các kiến thức cơ sở về Đại số tuyến tính; Giới thiệu
về học máy. Đây là những kiến thức giúp cho việc hiểu và ứng dụng của các
chương sau.
1.1. Tổng quan về ngôn ngữ Python
1.1.1.

Tổng quan

Python là một ngôn ngữ lập trình hướng đối tượng rất thông dụng dùng
để viết các tiện ích hệ thống và các đoạn mã trên Internet. Nó cũng được sử
dụng như ngôn ngữ kết dính đóng vai trò tích hợp C và C++. Được tạo ra
bởi Guido van Rossum tại Amsterdam năm 1990. Python hoàn toàn tạo kiểu
động và dùng cơ chế cấp phát bộ nhớ tự động. Python được phát triển trong
một dự án mã mở, do tổ chức phi lợi nhuận Python Software Foundation
quản lý. Phiên bản mới nhất của Python hiện tại (thời điểm viết bài) là bản
3.4.x.

Python là ngôn ngữ có hình thức khá đơn giản và rõ ràng, do đó tạo nên
sự dễ dàng tiếp cânh cho những lập trình viên mới bắt đầu.
Ban đầu, Python được phát triển để chạy trên nền Unix. Nhưng rồi theo
thời gian, nó đã "bành trướng" sang mọi hệ điều hành từ MS-DOS đến Mac
OS, OS/2, Windows, Linux và các hệ điều hành khác thuộc họ Unix. Mặc
dù sự phát triển của Python có sự đóng góp của rất nhiều cá nhân, nhưng
Guido van Rossum hiện nay vẫn là tác giả chủ yếu của Python. Ông giữ vai
trò chủ chốt trong việc quyết định hướng phát triển của Python.
Kiến thức tham khảo về Python được tham khảo từ tài liệu [8], [9].
1.1.2.

Một số tính chất

• Python is Interpreted: Nhờ chức năng thông dịch mà trình thông dịch
(Interpreter) của Python có thể xử lý lệnh tại thời điểm chạy chương
trình (runtime). Nhờ đó mà ta không cần biên dịch chương trình trước
4


khi thực hiện nó (tương tự như Perl và PHP).

• Python is Interactive: Tính năng tương tác của Python giúp ta có thể
tương tác trực tiếp với trình thông dịch của nó ngay tại dấu nhắc lệnh.
Cụ thể: Ta có thể thực hiện lệnh một cách trực tiếp tại dấu nhắc của
Python.

• Python is Object-Oriented: Python hỗ trợ mạnh cho phong cách lập
trình hướng đối tương và kỹ thuật lập trình gói mã trong đối tượng.

• Python is a Beginner’s Language: Mặc dầu Python được xem là ngôn

ngữ lập trình dành cho những ai mới làm quen với việc lập trình trên
máy tính, nhưng nó hỗ trợ mạnh cho việc phát triển nhiều loại ứng dụng
khác nhau, từ các chương trình xử lý văn bản đơn giản đến các ứng dụng
web, đến các chương trình game,. . .
1.1.3.

Tính năng

Ngôn ngữ lập trình đơn giản, dễ học: Python có cú pháp rất đơn giản, rõ
ràng. Nó dễ đọc và viết hơn rất nhiều khi so sánh với những ngôn ngữ lập
trình khác như C++, Java. Python làm cho việc lập trình trở nên thú vị,
cho phép tập trung vào những giải pháp chứ không phải cú pháp.
Miễn phí, mã nguồn mở: Ta có thể tự do sử dụng và phân phối Python,
thậm chí là dùng cho mục đích thương mại. Vì là mã nguồn mở, ta không
những có thể sử dụng các phần mềm, chương trình được viết trong Python
mà còn có thể thay đổi mã nguồn của nó. Python có một cộng đồng rộng
lớn, không ngừng cải thiện nó mỗi lần cập nhật.
Khả năng di chuyển: Các chương trình Python có thể di chuyển từ nền
tảng này sang nền tảng khác và chạy nó mà không có bất kỳ thay đổi nào.
Nó chạy liền mạch trên hầu hết tất cả các nền tảng như Windows, macOS,
Linux.
Khả năng mở rộng và có thể nhúng: Giả sử một ứng dụng đòi hỏi sự phức
tạp rất lớn, ta có thể dễ dàng kết hợp các phần code bằng C, C++ và những
5


ngôn ngữ khác (có thể gọi được từ C) vào code Python. Điều này sẽ cung cấp
cho ứng dụng của ta những tính năng tốt hơn cũng như khả năng scripting
mà những ngôn ngữ lập trình khác khó có thể làm được.
Ngôn ngữ thông dịch cấp cao: Không giống như C/C++, với Python, ta

không phải lo lắng những nhiệm vụ khó khăn như quản lý bộ nhớ, dọn dẹp
những dữ liệu vô nghĩa,... Khi chạy code Python, nó sẽ tự động chuyển đổi
code sang ngôn ngữ máy tính có thể hiểu. Ta không cần lo lắng về bất kỳ
hoạt động ở cấp thấp nào.
Thư viện tiêu chuẩn lớn để giải quyết những tác vụ phổ biến: Python có
một số lượng lớn thư viện tiêu chuẩn giúp cho công việc lập trình của ta trở
nên dễ thở hơn rất nhiều, đơn giản vì không phải tự viết tất cả code. Ví dụ:
Ta cần kết nối cơ sở dữ liệu MySQL trên Web server? Ta có thể nhập thư
viện MySQLdb và sử dụng nó. Những thư viện này được kiểm tra kỹ lưỡng
và được sử dụng bởi hàng trăm người. Vì vậy, ta có thể chắc chắn rằng nó
sẽ không làm hỏng code hay ứng dụng của mình.
Hướng đối tượng: Mọi thứ trong Python đều là hướng đối tượng. Lập trình
hướng đối tượng (OOP) giúp giải quyết những vấn đề phức tạp một cách
trực quan. Với OOP, ta có thể phân chia những vấn đề phức tạp thành những
tập nhỏ hơn bằng cách tạo ra các đối tượng.
1.1.4.

Các lĩnh vực sử dụng lập trình python phổ biến

Lập trình ứng dụng web: ta có thể tạo web app có khả năng mở rộng
(scalable) được bằng cách sử dụng framework và CMS (Hệ thống quản trị
nội dung) được tích hợp trong Python. Vài nền tảng phổ biến để tạo web
app là: Django, Flask, Pyramid, Plone, Django CMS. Các trang như Mozilla,
Reddit, Instagram và PBS đều được viết bằng Python.
Khoa học và tính toán: Có nhiều thư viện trong Python cho khoa học và
tính toán số liệu, như SciPy và NumPy, được sử dụng cho những mục đích
chung chung trong tính toán. Và, có những thư viện cụ thể như: EarthPy cho
khoa học trái đất, AstroPy cho Thiên văn học,... Ngoài ra, Python còn được
6



sử dụng nhiều trong machine learning, khai thác dữ liệu và deep learning.
Tạo nguyên mẫu phần mềm: Python chậm hơn khi so sánh với các ngôn
ngữ được biên dịch như C++ và Java. Nó có thể không phải là lựa chọn tốt
nếu nguồn lực bị giới hạn và yêu cầu về hiệu quả là bắt buộc. Tuy nhiên,
Python là ngôn ngữ tuyệt vời để tạo những nguyên mẫu (bản chạy thử prototype). Ví dụ, ta có thể sử dụng Pygame (thư viện viết game) để tạo
nguyên mẫu game trước. Nếu thích nguyên mẫu đó có thể dùng C++ để viết
game thực sự.
Ngôn ngữ tốt để dạy lập trình: Python được nhiều công ty, trường học sử
dụng để dạy lập trình cho trẻ em và những người mới lần đầu học lập trình.
Bên cạnh những tính năng và khả năng tuyệt vời thì cú pháp đơn giản và dễ
sử dụng của nó là lý do chính cho việc này.
Đặc biệt trong lĩnh vực khoa học dữ liệu Python là ngôn ngữ được sử dụng
phổ biến nhất vì có nhiều thư viện hỗ trợ rất tốt cho Machine Learning và
Data Science:

• scipy, numpy cho tính toán khoa học với mảng nhiều chiều
• sklearn cho các thuật toán Machine Learning cơ bản
• tensorflow, pytorch, keras, theano, . . . cho các thuật toán Deep Learning
• pandas cho xử lý dữ liệu dạng bảng
1.2.

Giới thiệu về học máy

1.2.1.

Khái niệm học máy

Khái niệm học có nghĩa rộng giống như sự thông minh, bao gồm cả quá
trình và khó có một định nghĩa chính xác. Theo nghĩa tự điển, học là quá

trình thu nhận kiến thức, kỹ năng do người khác truyền lại hoặc đọc đi, đọc
lại, nghiềm ngẫm ghi nhớ ( học thuộc lòng). Rộng hơn, học bao gồm cả quá
trình đúc rút tri thức từ các quan sát, trải nghiệm thực tiễn.
Học máy ( machine learning) mang hai nghĩa thông dụng:

7


1. sử dụng máy tính để khám phá tri thức từ dữ liệu,
2. sự học trong máy (tác tử: agent). Về phương diện công nghệ, học máy
là một lĩnh vực của trí tuệ nhân tạo, trong đó nghiên cứu các kỹ thuật
xây dựng và phát triển các chương trình máy tính có thể thích nghi và
“học” từ các dữ liệu mẫu hoặc kinh nghiệm.
Đến nay, đã có nhiều định nghĩa khái niệm này, tuy nhiên khó có một định
nghĩa thỏa đáng được mọi người thừa nhận. Định nghĩa sau phát triển từ
định nghĩa của T. Mitchell cho ta cách nhìn toán học của một chương trình
học khi nghiên cứu, thiết kế.
Định nghĩa 1.2.1. Một chương trình máy tính được gọi là học từ dữ liệu,
kinh nghiệm E đối với lớp nhiệm vụ T và độ đo mức thực hiện P nếu việc
thực hiện các nhiệm vụ T của nó khi đo bằng P được cải tiến nhờ dữ liệu
hoặc kinh nghiệm E . [1].
Theo định nghĩa này, người ta cần tối ưu hóa độ đo thực hiện P dựa trên
phân tích dữ liệu, kinh nghiệm E để tìm cách thực hiện nhiệm vụ T tốt nhất.
Ví dụ 1: Phân tích dữ liệu bán lẻ của siêu thị
Hằng ngày các siêu thị bán ra một lượng lớn những mặt hàng phong phú
và lưu lại các hóa đơn thanh toán(bản sao giỏ hàng). Từ các dữ liệu bán lẻ
có được, ta có thể phân tích các giỏ hàng để tiên đoán được một khách hàng
mua mặt hàng A thì sẽ mua mặt hàng B với xác suất bao nhiêu? Nếu xác
suất này là lớn thì ta nên xếp các mặt hàng này gần nhau, như thế tiện cho
khách hàng và lượng hàng bán được cũng tăng lên so với việc để khách hàng

phải tìm kiếm khắp nơi. Rộng hơn, nếu có mô hình phân tích tốt, ta cũng
có thể dự đoán được lượng hàng cần đáp ứng trong thời gian tới, xu thế sở
thích của khách hàng, trên cơ sở đó có được quyết sách thích ứng. Trong ví
dụ này T là dự báo, E là dữ liệu bán lẻ lưu trữ và P là độ chính xác của kết
quả dự báo.
Ví dụ 2: Đối sánh vân tay
8


Bài toán đối sánh vân tay bắt nguồn từ hai bài toán truy nguyên và xác
thực vân tay. Trong bài toán truy nguyên, người ta phải đối sánh một ảnh
vân tay thu được khi điều tra với các ảnh vân tay trong kho lưu trữ để xác
định xem có vân tay nào trong kho lưu trữ là do cùng một ngón tay lăn ra
với ảnh điều tra không. Trong bài toán xác thực, người ta cần xác minh ảnh
vân tay đăng nhập ( ta cũng sẽ gọi là điều tra) có đúng là cùng ngón sinh ra
với ảnh đã đăng kí hay không? Cả hai bài toán này được đưa về bài toán đối
sánh cặp ảnh vân tay điều tra với ảnh lưu trữ để trả lời xem chúng cùng hay
khác ngón sinh ra. Để xây dựng chương trình đối sánh vân tay, người ta cần
một tập dữ liệu bao gồm các cặp ảnh do cùng ngón và khác ngón sinh ra.
Dựa trên tập dữ liệu này, một thuật toán được áp dụng để xây dựng chương
trình.
Ví dụ 3: Tìm đường đi ngắn nhất cho robot
Một mạng lưới gồm n trạm hoạt động tự động, khoảng cách giữa chúng
khác nhau, một robot cần đi kiểm tra các trạm này một lần. Giả sử Robot
ghi nhớ được các trạm đã qua và độ dài đường đi giữa chúng, biết được các
tramh cần kiểm tra tiếp. Khi đó qua từng trạm nó sẽ tìm đường đi tới trạm
tiếp theo. Nếu có chiến lược học tốt, càng ngày robot sẽ tìm được đường đi
ngắn hơn, thậm chí là tối ưu. Trong trường hợp này P và E tương ứng là độ
dài và các đường đi kiểm tra đã tìm được, T là đường đi kiểm tra.
1.2.2.


Tại sao cần nghiên cứu học máy?

Sự thâm nhập mạnh mẽ của công nghệ thông tin tinh tế, xã hội công nghệ
tri thức phát triển và tạo nên nhu cầu ứng dụng rộng rãi. Sau đây là một số
phạm vi nghiên cứu, ứng dụng điển hình:

• Xây dựng các hệ nhận dạng mẫu dùng cho các thiết bị nghe nhìn cho
robot và trong lĩnh vực tự động hóa, nhận dạng chữ viết tay, chuyển đổi
các bài nói thành văn bản, phân tích ảnh tự động...

• Tạo ra các chương trình máy tính có thể hoạt động thích nghi với môi
trường thay đổi hay thực hiện các nhiệm vụ mà ban đầu chưa xác định
9


rõ, chẳng hạn, hệ lái tự động ( máy bay, ô tô, tàu thủy,...) , trò chơi hay
các điều khiển robot đa năng.

• Khám phá tri thức từ dữ liệu đặc biệt là các cơ sở dữ liệu lớn, để trợ
giúp ra quyết định. Chẳng hạn, phân tích thị trường, chẩn đoán bệnh
của bệnh nhân và xác định phương án điều trị nhờ phân tích các bệnh
án lưu trữ...
1.2.3.

Một số lĩnh vực liên quan

Trong mấy chục năm qua, các nghiên cứu khoa học và ứng dụng của học
máy phát triển nhanh, kết hợp các tiến bộ của nhiều lĩnh vực khác. Sau đây
là các lĩnh vực góp phần quan trọng cho nghiên cứu học máy:


• Lý thuyết xác suất và thống kê: Là tiền thân của lĩnh vực học máy, trong
đó, cho phép suy luận (inference) từ quan sát cụ thể để có kết luận khái
quát nhờ thành tựu của giải tích ngẫu nhiên.

• Mô hình thần kinh sinh học. Việc nghiên cứu cơ chế hoạt động, xử lý
phi tuyến và cấu tạo hệ thần kinh sinh học nói chung cho phép tạo nên
các mô hình và thuật toán phỏng sinh học, đặc biệt là các mạng nơron.

• Lý thuyết độ phức tạp tính toán. Cho phép ước lượng độ phức tạp của
các nhiệm vụ học đo qua các ví dụ đào tạo, só lỗi và các thủ tục tính
toán...

• Lý thuyết điều khiển thích nghi. Các thủ tục học để điều khiển quá trình
nhằm tối ưu hóa mục đích định trước hay học cách đoán các trạng thái
tiếp theo của quá trìh điều khiển...

• Tâm lý học: Cho phép mô phỏng các đáp ứng thực tế của con người, xây
dựng các mô hình xử lý hiệu quả, chẳng hạn, học tăng cường.

• Các mô hình tiến hóa. Việc nghiên cứu các mô hình tiến hóa cho phép
chúng ta đưa ra các thuật toán học mô phỏng tự nhiên như: Thuật toán

10


di truyền (GA), tối ưu đàn kiến (ACO), tối ưu bầy đàn( PSO), hệ miễn
dịch nhân tạo ( AIS) ...
1.2.4.


Các bài toán học thiết lập đúng đắn

Bài toán học được cho là thiết lập đúng khi thực sự có thể cải tiến được

P qua kinh nghiệm E . Thông thường mô hình toán học để xây dựng thuật
toán cho một bài toán học đòi hỏi phải đúng đắn theo Hadamard. Trong các
bài toán thực tế,Hadamard cho rằng một mô hình toán học ứng dụng được
xem là thiết lập đúng đắn (well-posed problem) nếu nó có các tính chất:
1. Luôn tồn tại lời giải
2. Chỉ có duy nhất một lời giải
3. Khi các điều kiện ban đầu thay đổi ít thì lời giải cũng thay đổi ít
Tuy nhiên, trong nhiều bài toán, điều kiện duy nhất một lời giải nhiều khi
khó đáp ứng trong trường hợp đó người ta hay dùng phương pháp chính quy
hóa (hiệu chỉnh hàm mục tiêu) để bài toán trở nên thiết lập đúng đắn.
Bài toán học phải được xác định đúng đắn dựa trên việc xác định rõ nhiệm
vụ cụ thể, độ đo việc thực hiện và nguồn dữ liệu, kinh nghiệm.
Phương pháp thông dụng nhất để đưa ra thuật toán cho các bài toán học
là xây dựng một mô hình toán học phụ thuộc các tham số và dùng dữ liệu
hoặc kinh nghiệm đã có thể xác định giá trị thích hợp cho các tham số này.
[7]

1.3.

Một số kiến thức toán học bổ trợ

Các kiến thức toán học bổ trợ được tham khảo từ [7] và [10].
1.3.1.

Phép nhân hai ma trận


Cho hai ma trận A ∈ Rm×n , B ∈ Rn×p , tích của hai ma trận được ký hiệu
là C = AB ∈ Rm×p , trong đó phần tử ở hàng i cột j của ma trận C được

11


tính bởi
n

aik bkj , ∀1 ≤ i ≤ m, 1 ≤ j ≤ p

cij =

(1.3.1)

k=1

Điều kiện để nhân hai ma trận là số cột của ma trận thứ nhất phải bằng số
hàng của ma trận thứ hai. Trong định nghĩa trên, chúng đều bằng n.
Tính chất.
1. Phép nhân ma trận không có tính chất giao hoán. Thông thường AB =

BA, thậm chí không tồn tại vì không thỏa mãn điều kiện nhân.
2. Phép nhân ma trận có tính chất kết hợp ABC = (AB)C = A(BC)
3. Phép nhân ma trận có tính chất phân phối đối với phép cộng. A(B+C) =

AB + AC
4. Chuyển vị của một tích thì bằng tích các chuyển vị theo thứ tự ngược
lại. Tương tự cho Hermitian của một tích.


(AB)T = BT AT ;

(AB)H = BH AH

Theo định nghĩa trên, bằng cách coi véc tơ là trường hợp đặc biệt của ma
trận, tích vô hướng của hai véc tơ (inner product) x, y ∈ Rn được định nghĩa

n
T

T

x y=y x=

x i yi

(1.3.2)

i=1

Chú ý, xH y = yH x

H

= yH x. Chúng bằng nhau khi và chỉ khi chúng là

các số thực. Nếu tích vô hướng của hai véc tơ khác không mà bằng không
thì chúng vuông góc với nhau.

xH x ≥ 0, ∀x ∈ Cn vì tích của một số phức với liên hợp của nó luôn là một

số không âm.
Phép nhân của một ma trận với một véc tơ là một véc tơ với là véc tơ
hàng thứ của

12


Ngoài ra, một phép nhân khác được gọi là Hadamard (hay element - wise)
hay được sử dụng trong học máy. Tích Hadamard của hai ma trận cùng kích
thước A, B ∈ Rm×n
1.3.2.

Ma trận đơn vị và ma trận nghịch đảo

1.3.2.1.

Ma trận đơn vị

Đường chéo chính của ma trận là tập hợp các điểm có chỉ số hàng và cột
như nhau. Cụ thể, nếu A ∈ Rm×n thì đường chéo chính của A bao gồm

{a11 , a22 , . . . , app }, trong đó p = min{m, n}.
Một ma trận đơn vị bậc n là một ma trận đặc biệt trong Rn×n với các
phần tử trên đường chéo chính bằng 1, các phần tử còn lại bằng 0. Ma trận
đơn vị thường ký hiệu là I (Identity matrix). Nếu cần phân biệt rõ ma trận
đơn vị cấp n, ta ký hiệu In cho ma trận đơn vị bậc n. Ví dụ các ma trận đơn
vị bậc 3, bậc 4.





1 0 0



I3 =  0 1 0

0 0 1




,


1 0


0 1
I4 = 

0 0

0 0

0 0






0 0


1 0

0 1

(1.3.3)

Nếu A ∈ Rm×n , B ∈ Rn×m và In là ma trận đơn vị bậc n, ta có AI =

A,

IB = B. Với mọi véc tơ x ∈ Rn , ta có In x = x.

1.3.2.2.

Ma trận nghịch đảo

Cho một ma trận vuông A ∈ Rn×n , nếu tồn tại ma trận vuông B ∈ Rn×n
sao cho AB = In , thì ta nói A là khả nghịch (invertible, nonsingular hoặc
nondegenerate) và B được gọi là ma trận nghịch đảo (inverse matrix) của

mathbf A. Nếu không tồn tại ma trận B thỏa mãn điều kiện trên, ta nói
rằng ma trận A không khả nghịch (singular hoặc degenerate).
Nếu A là khả nghịch, ta ký hiệu ma trận nghịch đảo của nó là A−1 . Ta có

A−1 A = AA−1 = I


13

(1.3.4)


Ma trận nghịch đảo thường được sử dụng để giải hệ phương trình tuyến
tính. Giả sử rằng A ∈ Rn×n là một ma trận khả nghịch và một véc tơ bất
kỳ b ∈ Rn . Khi đó phương trình:

Ax = b

(1.3.5)

có nghiệm duy nhất là x = A−1 b. Thật vậy, nhân bên trái cả hai phương
trình với A−1 , ta có Ax = b ⇔ A−1 Ax = A−1 b ⇔ x = A−1 b.
Khi A không khả nghịch hay không vuông, phương trình tuyến tính có
thể không có nghiệm hoặc vô số nghiệm.
Quy tắc tính ma trận nghịch đảo của ma trận tích: (AB)−1 = B−1 A−1 .
1.3.3.

Hạng của ma trận

Hạng của ma trận A được định nghĩa là số lượng lớn nhất các cột độc lập
tuyến tính, ký hiệu là rank(A)
Các tính chất:
1. Một ma trận có hạng bằng 0 khi và chỉ khi nó là ma trận 0.
2. rank(A) = rank AT
3. Nếu A ∈ Rm×n , thì rank(A) ≤ min(m, n)
4. rank(AB) ≤ min(rank(A), rank(B))
5. rank(A + B) ≤ rank(A) + rank(B).

6. Bất đẳng thức Sylvester về hạng: Nếu A ∈ Rm×n , B ∈ Rn×k , thì

rank(A) + rank(B) − n ≤ rank(AB)
Các điều kiện dưới đây là tương đương, với A ∈ Rn×n
1. A là một ma trận khả nghịch
2. det(A) = 0
3. Các cột của A tạo thành một cơ sở trong không gian n chiều
4. rank(A) = n
14


1.3.4.

Hệ trực chuẩn, ma trận trực giao

1.3.4.1.

Định nghĩa

Một hệ cơ sở {u1 , u2 , . . . , um ∈ Rm } được gọi là trực giao (orthogonal) nếu
mỗi véc tơ là khác 0 và tích của hai véc tơ khác nhau bất kỳ bằng 0:

ui = 0;

uTi uj = 0∀1 ≤ i = j ≤ m

(1.3.6)

Một hệ cơ sở {u1 , u2 , . . . , um ∈ Rm } được gọi là trực chuẩn (orthonormal)
nếu nó là hệ trực giao và độ dài Euclidean của mỗi véc tơ bằng 1:



1, i = j
T
ui uj =

0, i = j

(1.3.7)

Gọi U = [u1 , u2 , . . . , um ] với {u1 , u2 , . . . , um ∈ Rm } là trực chuẩn, từ (1.3.7)
có thể suy ra

UUT = UT U = I

(1.3.8)

trong đó I là ma trận đơn vị bậc n. Nếu một ma trận thỏa mãn điều kiện
(1.3.8), ta gọi nó là ma trận trực giao (orthogonal matrix). Không có định
nghĩa cho ma trận trực chuẩn.
Nếu một ma trận vuông phức U thỏa mãn UUH = UH U = I, ta nói rằng

U là một ma trận Unitary.
1.3.4.2.

Tính chất của ma trận trực giao

1. U−1 = UT : Nghịch đảo của một ma trận trực giao chính là ma trận
chuyển vị của nó.
2. Nếu U là ma trận trực giao thì chuyển vị của nó UT cũng là ma trận

trực giao.
3. Định thức của ma trận trực giao bằng 1 hoặc −1.
4. Ma trận trực giao thể hiện cho phép xoay một véc tơ. Giả sử có hai véc
tơ x, y ∈ Rm và một ma trận trực giao U ∈ Rm×m . Dùng ma trận này

15


để xoay hai véc tơ trên ta được Ux, Uy. Tích vô hướng của hai véc tơ
mới này là

(Ux)T (Uy) = xT UT Uy = xT y

(1.3.9)

Như vậy, phép xoay không làm thay đổi tích vô hướng của hai véc tơ.

ˆ ∈ Rm×r , r < m là một ma trận con của ma trận trực giao U
5. Giả sử U
ˆ TU
ˆ = Ir
được tạo bởi r cột của U, ta sẽ có U
1.3.5.

Trị riêng và véc tơ riêng

1.3.5.1.

Định nghĩa


Cho một ma trận vuông A ∈ Rn×n , một véc tơ x ∈ Rn (x = 0) và một số
vô hướng (có thể thực hoặc phức) λ. Nếu Ax = λx, thì ta nói λ và x là một
cặp giá trị riêng, véc tơ riêng (eigenvalue, eigenvector) của ma trận A
Từ định nghĩa ta cũng có, (A − λI)x = 0, tức là x nằm trong không gian
Null của A − λI. Vì x = 0, nên A − λI là ma trận không khả nghịch. Vậy

det(A − λI) = 0, hay λ là nghiệm của phương trình det(A − tI) = 0. Định
thức này là một đa thức bậc n của t, gọi là đa thức đặc trưng (characteristic
polynomial) của A, ký hiệu là pA (t). Tập hợp tất cả các giá trị riêng của một
ma trận còn gọi là phổ (spectrum) của ma trận đó.
1.3.5.2.

Tính chất

1. Nếu x là một véc tơ riêng của A ứng với giá trị riêng λ thì với mọi

k ∈ R, k = 0, kx cũng là một véc tơ riêng của A ứng với giá trị riêng đó.
Nếu x1 , x2 là hai véc tơ riêng ứng với cùng một giá trị riêng λ thì tổng của
chúng cũng là một véc tơ riêng ứng với giá trị riêng đó. Từ đó suy ra tập
các véc tơ riêng ứng với một giá trị riêng của ma trận vuông tạo thành
một không gian véc tơ con, được gọi là không gian riêng (eigenspace )
ứng với giá trị riêng đó.
2. Mọi ma trận vuông bậc n đều có n giá trị riêng (kể cả lặp, phức).
3. Tích của tất cả các giá trị riêng của ma trận bằng định thức, tổng của
16


tất cả các giá trị riêng của ma trận bằng tổng các phần tử trên đường
chéo của ma trận.
4. Phổ của ma trận bằng phổ của ma trận chuyển vị của nó.

5. Nếu A, B là các ma trận vuông, cùng bậc thì pAB (t) = pBA (t). Điều
này có nghĩa là, mặc dù tích của hai ma trận không có tính chất giao
hoán, đa thức đặc trưng của AB và BA là như nhau, hay phổ của hai
tích này là trùng nhau.
6. Ma trận đối xứng (tổng quát là Hermitian), tất cả các giá trị riêng của
nó đều là các số thực.
7. Nếu (λ, x) là một cặp giá trị riêng, véc tơ riêng của ma trận khả nghịch
1
A, thì
, x là một cặp giá trị riêng, véc tơ riêng của A−1 .
λ
1.3.6.

Chéo hóa ma trận

Giả sử x1 , . . . , xn = 0 là các véc tơ riêng của một ma trận vuông A ứng
với các giá trị riêng λ1 , . . . , λn của nó.
Đặt Λ = diag (λ1 , λ2 , . . . , λn ) và X = [x1 , x2 , . . . , xn ] ta sẽ có AX = XΛ.
Hơn nữa, nếu các giá trị riêng x1 , . . . , xn là độc lập tuyến tính, ma trận X
là một ma trận khả nghịch. Khi đó ta có thể viết A dưới dạng tích của ba
ma trận

A = XΛX−1

(1.3.10)

Các véc tơ riêng xi thường được chọn sao cho xTi xi = 1. Cách biểu diễn một
ma trận như (1.3.10) được gọi là eigendecomposition vì nó tách ra thành tích
của các ma trận đặc biệt dựa trên véc tơ riêng và trị riêng. Ma trận các giá
trị riêng Λ là một ma trận đường chéo. Vì vậy cách khai triển này cũng có

tên gọi là chéo hóa ma trận.
Tính chất:
1. Khái niệm chéo hóa ma trận chỉ áp dụng với ma trận vuông. Vì không
có định nghĩa giá trị riêng, véc tơ riêng cho ma trận không vuông.
17


×