Tải bản đầy đủ (.doc) (24 trang)

BÀI tập NHÓM học PHẦN TRÍ TUỆ NHÂN tạo đề tài GIỚI THIỆU về máy học

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.82 MB, 24 trang )

TRƯỜNG ĐẠI HỌC NHA TRANG

KHOA CÔNG NGHỆ THÔNG TIN
---------------------*---------------------

BÀI TẬP NHÓM
HỌC PHẦN TRÍ TUỆ NHÂN TẠO
Đề tài:

GIỚI THIỆU VỀ MÁY HỌC
Giảng viên hướng dẫn:
Bùi Đức Dương
Học viên thực hiện:
Lớp: 52CNTT
ĐÀO ĐỨC LINH
HUỲNH MINH TRÍ
TRẦN ĐỨC TRỌNG
Năm 2012

1


MỤC LỤC
(Đánh tự động)

2


LỜI GIỚI THIỆU
(Trong đó có nội dung giới thiệu công việc của từng thành viên)


3


DANH MỤC CÁC BẢNG
(Đánh tự động)

DANH MỤC CÁC HÌNH
(Đánh tự động)

4


CHƯƠNG I
TỔNG QUAN VỀ HỆ HỌC
I.
KHÁI NIỆM VỀ HỌC
1. Đặt vấn đề
Từ trước, chúng ta đã biết có thể xây dựng được một hệ thống tri thức. Một trong
những cách có thể làm là xây dựng chúng bằng tay, tức là bằng công tác thủ công.
Song trên thực tế, điều này nhiều khi gây ra mât thời gian, thậm chí còn có thể chứa
sai sót và thường chúng ta chỉ có thể làm trong những phạm vi rất hạn hẹp. Hay nói
một cách khác, chúng ta sẽ gặp rất nhiều khó khăn trong việc xây dựng hệ thống tri
thức theo cách này.
Chẳng hạn bạn là những người có kiến thức về một hay một vài, thậm chí là nhiều
đối tượng khác nhau (thường có mối liên hệ với nhau) về một lĩnh vực nào đó. Nhưng
trong nhiều trường hợp, khi chúng ta tìm ra được một sự mô tả thỏa đáng về một bài
toán, một vấn đề nào đấy, khi đó chúng ta có thể “học” chúng qua các ví dụ.
2. Học là gì?
Theo nhiều chuyên gia, nhiều nhà nghiên cứu thì khái niệm “học” mang rất nhiều
nghĩa khác nhau, mặc dù điều này đôi khi không tạo ra sự sai lệch đáng kể. Ở đây,

theo cách thông thường, ta có hiểu “học” qua các mô tả sau:
- Việc ghi nhớ một vài sự kiện, đối tượng, hay quan hệ nào đấy.
- Việc học các sự thật thông qua các quan sát và khám phá.
- Việc phát triển các kĩ năng nhận thức thông qua thực hành, luyện tập.
- Việc tổ chức các tri thức mới thành các dạng tổng quát và hiệu quả.
Chuyên gia trong lĩnh vực Trí tuệ nhân tạo và trong lĩnh vực Kinh Tế, Herb Simon,
đã đưa ra một định nghĩa như sau:
“Học có nghĩa là những thay đổi trong hệ thống một cách thích hợp sao cho hệ thống
có thể làm các thao tác như đã làm trước đó một cách ngày càng hiệu quả hơn trong
những lần kế tiếp.”
Định nghĩa này thì không hoàn toàn chính xác nhưng phần nào nó cũng cho ta thấy ý
tưởng chung rằng hệ học cần phải yêu cầu một số thông tin từ các ví dụ của một bài
toán và rồi thực hiện chúng tốt hơn lần sau.
Một trong những kiểu học thông dụng nhất là thu thập thông tin từ quá khứ và hiện
tại để rồi đưa ra những phán đoán về một điều gì đấy trong tương lai. Để đơn giản ta
có thể xem ví dụ sau:
- Mẩu bánh mì thứ nhất cung cấp chất dinh dưỡng khi ta ăn nó.
- Mẩu bánh mì thứ hai cung cấp chất dinh dưỡng khi ta ăn nó.
- Mẩu bánh mì thứ ba cung cấp chất dinh dưỡng khi ta ăn nó.
- Mẩu bánh mì thứ tư cung cấp chất dinh dưỡng khi ta ăn nó.
- …
- Do đó, mọi mẩu bánh mì đề cung cấp chất dinh dưỡng khi ta ăn nó.
Đây là một ví dụ khá thú vị và dễ hiểu mà David Hume đã đưa ra. Cũng vậy, ta có
thể hình dung điều này qua nhiều ví dụ khác, chẳng hạn như: Hôm qua, mặt trời mọc
hướng Đông, hôm trước nữa cũng thế. Lịch sử cũng ghi nhận rằng mặt trời luôn luôn

5


mọc hướng Đông. Thế thì ta có thể đưa ra phán đoán là mặt trời sẽ mọc ở hướng Đông

vào ngày mai.
II.
PHÂN LOẠI CÁCH HỌC
1. Học có giám sát
Học có giám sát là kiểu học và cũng là bài toán học thông dụng nhất.
Ví dụ chúng ta được cung cấp dữ liệu về cân nặng và chiều dài của một số con cá hồi
và một số con cá ngừ đại dương. Công việc của hệ học theo kiểu quan sát là phải tìm
ra quy luật về mối quan hệ giữa cân nặng và chiều dài của một con cá để rồi từ đó có
thể phán đoán về một con cá hồi hay một con cá ngừ đại dương.
2. Phân nhóm
Phân nhóm cũng là một dạng khá thông dụng. Ý tưởng chung là khi ta được cung cấp
một số mô tả về một tập hợp các cá thể riêng biệt (như động vật, các vì sao, đồ vật hay
các văn bản,…) bằng một tập các đặc điểm (cân nặng, chiều cao, màu sắc,…), chúng
ta sẽ phải phân chia chúng ra thành một số nhóm.
3. Học trau dồi
Một bài toán khác khá quen thuộc với phần lớn chúng ta là học trau dồi, hay học kĩ
năng. Trong bài toán học trau dồi có đôi phần khác so với bài toán quan sát là không
ai có thể nói cho ta biết một cách chính xác rằng chúng ta phải làm gì. Nội dung chính
của bài toán này là phải tương tác với thế giới bên ngoài qua quan sát, đưa ra hành
động, từ đó chúng ta sẽ nhận được kết quả tốt, chẳng hạn phần thưởng, hoặc gặp phải
hậu quả xấu, chẳng hạn bị phạt vì lý do gì đó.
Trong phần tiếp theo chúng ta sẽ tập trung nghiên cứu vào bài toán quan sát.
III. NỘI DUNG VIỆC HỌC
1. Quá trình học
Chúng ta có thể hiểu với nhau việc học là cố gắng tìm ra một hàm có thể nhận được
từ một tập dữ liệu đầu vào và đầu ra. Định nghĩa này dường như có vẻ khá hẹp, song
nó chứa đựng hầu hết các trường hợp tương tự như ở đây.
Một cách hiểu đơn giản, nó giống như ta học cách phát âm các từ ngữ từ các kí tự và
các âm tiết mà con người sáng tạo ra, hay nhận ra các kí tự viết tay từ một hình có
chứa các chữ viết, hay rộng ra hơn là chẩn đoán các chứng bệnh từ việc thu thập các

kết quả trong các phòng thí nghiệm y học.
Bài toán học cách tìm ra một hàm thì không hề đơn giản chút nào. Chúng ta có thể
hình dung có ít nhất ba vấn đề quan trọng: ghi nhớ, trung bình hóa, tổng quát hóa.
Ví dụ mà chúng ta sẽ tìm hiểu ngay sau đây nói về việc một người hàng xóm mà bạn
biết sẽ đi là vào ngày mai bằng phương tiện gì, lái xe hay đi bộ?
Đầu tiên giả sử ta có bảng số liệu sau:

6


Với bảng dữ liệu trên thì câu hỏi đặt ra là người hàng xóm sẽ đi làm bằng phương tiện
gì nếu đó là một ngày thứ Hai, trời có tuyết với nhiệt độ 19 độ, cô ấy vận một bộ trang
phục thông thường và sẽ không có ý định mua sắm. Dễ thấy ở đây đã từng có một
ngày như thế trong quá khứ và người hàng xóm đã sử dụng xe hơi để đi. Rõ ràng đây
chỉ là một sự ghi nhớ đơn thuần một hành động, sự kiện đã xảy ra trong quá khứ, bây
giờ các điều kiện mô tả hội tụ trở lại thì chúng ta vận dụng điều đó để đưa ra phán
đoán rằng cô ấy sẽ đi bằng xe hơi.
Thế điều gì sẽ xảy ra nếu trường hợp mà ta xét tìm lại khá giống với khối dữ liệu mà
ta thu thập về các ngày trước, như sau đây chẳng hạn:

Trong bảng này, dữ liệu các cột nhiệt độ, thời tiết, thứ trong tuần, có đi mua sắm hay
không và trang phục đều giống nhau, nhưng lại khác nhau ở việc lựa chọn phương tiện
đi. Chú ý rằng có hai ngày mà cô ấy lái xe, còn lại năm trường hợp kia là đi bộ. Vậy
thì hẳn ta sẽ đưa ra kết luận là trong ngày ta đang xét, cô ấy sẽ đi bộ, với xác suất dựa
trên quá khứ là 5/7. Hãy nhớ là việc dựa hoàn toàn trên xác suất không phải là nội
dung chính mà ta nghiên cứu trong bài luận này vì tồn tại rất nhiều lý thuyết khó và
phức tạp về xác suất thông kê để có thể hiểu sau về lĩnh vực toán học này. Ta sẽ không
đề cập nhiều đến nó.
Đôi khi chúng ta phải đối mặt với một vấn đề là một dữ kiện nào đấy mà ta xét lại
gần giống với một trường hợp đã xảy ra trong quá khứ mà không phải giống hoàn

toàn, lúc này có lẽ ta sẽ phải chọn trường hợp gần giống đó để làm câu trả lời. Như
trong bảng sau, ngày đang xét giống với dữ liệu của dòng thứ tư, chỉ khác nhiệt độ, tức
là 21 độ thay vì 20 độ như ta đang cần tìm.

7


Thế còn đối với bảng dữ liệu sau thì sao? Ngày mà ta đang xét là một ngày thứ Hai
có mưa, nhiệt độ 58 độ, người hàng xóm không đi mua sắm và mặc bộ trang phục như
thông thường (tức là không quá trang trọng).

Không có một câu trả lời hiển nhiên nào có thể đưa ra, hay thậm chí dễ suy đoán như
các trường hợp bên trên. Khi đó buộc chúng ta phải lập luận, phải tổng quát hóa các
trường hợp của bài toán, tương tự như:
- Những khi trời mưa thì cô ấy đi bộ, thế thì hôm nay cô ấy sẽ đi bộ.
- Hôm nay cô ấy sẽ lái xe vì hôm nay là thứ Hai, và cô ấy thì luôn luôn đi xe hơi vào
thứ Hai.
- Cô ấy sẽ lái xe vì cô ấy luôn làm như thế khi mặc một bộ quần áo trang trọng, hoặc
nếu nhiệt độ trên 90 hoặc dưới 20.
Trong phần sau ta sẽ tìm hiểu các phương thức mô tả không gian dữ liệu của bài toán.
2. Mô tả bài toán
Hãy tưởng tượng rằng chúng ta phải tìm một mối liên kết giữa x và y trong một
không gian các điểm dữ liệu, chúng có đầu ra là các điểm màu đỏ và các điểm màu
đen.

Trong trường hợp này chúng ta có thể đơn giản tìm ra một đường để chia đôi miền dữ
liệu ra, cụ thể ở đây là một đường thằng.

8



Trong trường hợp các điểm dữ liệu phân bố như sau đây thì không thể dùng một
đường thẳng được:

Lúc này thì ta dùng một đường cong để chia miền dữ liệu:

Còn trong trường hợp các điểm dữ liệu phân bố có sự đan xen vào nhau (nghĩa là
không thể dùng một đường thằng, và cũng không thể dùng một đường cong có độ uốn
thấp) thì ta làm thế nào, như trong ví dụ sau:

9


Có hai câu trả lời được đặt ra, một là dùng một đường cong với độ uốn cao để không
phải bỏ sót bất cứ điểm dữ liệu nào:

Câu trả lời thứ hai là dùng một đường thẳng để chia miền và bỏ qua sự quan tâm đến
một số điểm dữ liệu không nằm trong đúng miền của nó:

Theo cách này thì xảy ra lỗi ở một số điểm dữ liệu, song nó đã chia không gian dữ
liệu một cách tương đối chấp nhận được.
Có rất nhiều cách để làm điều này, tức là có rất nhiều thuật toán cho việc mô tả và
giải quyết bài toán học, song ở đây ta sẽ giới thiệu một số các thuật toán, đó là thuật
toán “người láng giềng gần nhất”, cây quyết định, mạng nơ ron.
Trước hết là thuật toán “người láng giềng gần nhất”. Thuật toán rất đơn giản, đó là
tìm một điểm mà gần nhất với điểm câu hỏi của ta.

10



Trong không gian điểm như trên, điểm gần nhất với điểm câu hỏi của ta là một điểm
màu đỏ. Vậy, điểm mà ta cần tìm sẽ có màu đỏ.
Thứ hai là cây quyết định. Đây là một phương pháp rất được ưa chuộng. Trong cây
quyết định, mỗi nút là một câu hỏi và mỗi cung là một câu trả lời.

Bằng việc sử dụng cây quyết định, ta có thể tìm ra được một đường dẫn từ nút gốc
đến các nút lá, tức là lần lượt hỏi những câu hỏi rồi trả lời chúng theo như đầu vào mà
bài toán cung cấp, khi đến nút lá, ta sẽ có câu trả lời muốn tìm, ở đây là tìm ra người
hàng xóm sẽ đi làm bằng xe hơi hay đi bộ.

Thứ ba, ta sẽ nói về mạng nơ ron. Hẳn là đã nhiều người trong chúng ta đã từng nghe
ít nhất một lần về mạng nơ ron, đó là một dạng biểu diễn các giả thuyết phức tạp trong
một không gian đa chiều liên tục. Mạng nơ ron là một tổ hợp gồm nhiều đơn vị tính
toán nhỏ kết hợp lại với nhau. Nó được gọi là mạng nơ ron vì đơn giản nó cho ta một
hình ảnh tương đối gần giống với hệ thống thần kinh nằm trong bộ não dù không chính
xác lắm. Ta hãy xem hình ảnh chung sau đây:

11


Trong một mạng nơ ron, các đơn vị tính toán thực hiện những công việc tính toán
đơn giản để mà kết nối các giá trị của chúng với các trọng số của các cung. Quá trình
học sẽ là làm sao để điều chỉnh các trọng số của các cung, từ đó xử lí lỗi trong mạng
nơ ron.
Cho đến tận ngày nay, các phương pháp máy học đã khá thành công và đang trở
thành lĩnh vực được nhiều người nghiên cứu cũng như đã đạt được một số thành tựu
trong nhiều ngành nghề như:
- Đánh giá mức nợ tín dụng.
- Tìm ra các chi tiết gian dối trong tín dụng.
- Thu thập, phân nhóm các hình ảnh phục vụ nghiên cứu thiên văn.

- …
Trong phần sau, ta sẽ nghiên cứu về bài toán quan sát và các thuật toán cụ thể trong
việc giải quyết bài toán này.
CHƯƠNG II
NGHIÊN CỨU VỀ BÀI TOÁN QUAN SÁT
I.
KHÁI QUÁT VỀ BÀI TOÁN QUAN SÁT
1. Cấu trúc bài toán
Để có thể nghiên cứu và phân tích bài toán quan sát, trước hết ta hãy sơ lược về cấu
trúc của bài toán này.
Một bài toán quan sát được cấu thành từ một số thành phần. Thành phần thứ nhất là
dữ liệu (hay còn được gọi là tập huấn luyện). Dữ liệu, tức là D, là một tập hợp bao
gồm m cặp đầu vào – đầu ra. Chúng ta sẽ viết thành tố thứ i của tập dữ liệu là x i, yi.
Trong ngữ cảnh của bài toán chạy đua, một xi sẽ là một véc-tơ của dữ liệu, mỗi một
trong số chúng tương ứng với một đặc điểm của dữ liệu, và một yi là một giá trị đầu ra
(đi hoặc lái xe). Ta có dữ liệu được đưa ra:

{

D = x 1 , y 1 , x 2 , y 2 ,..., x m , y m

}

output

Mỗi xi là một véc-tơ của tập n giá trị. Chúng ta sẽ viết xij cho đặc điểm thứ j của cặp
đầu vào – đầu ra thứ i. Chúng ta cũng sẽ quan tâm đến nhiều loại đặc điểm khác nhau.

12



Thông thường, chúng ta nghĩ rằng các đặc điểm này chỉ có thể mang giá trị 0 hoặc 1.
Nhưng trên thực tế, nhiều khi chúng lại có thể mang giá trị từ một tập rời rạc như
“tuyết”, “mưa”, “không” chẳng hạn. Thậm chí trong nhiều trường hợp chúng nhận giá
trị thực, như nhiệt độ, độ ẩm, cân nặng hay chiều cao.
Tương tự như thế, giá trị đầu ra, yi, có thể là kiểu đúng/sai (hay boolean như trong
nhiều ngôn ngữ lập trình), phần tử của một tập rời rạc hoặc một giá trị thực.
Khi yi là kiểu boolean, hoặc một phần tử của một tập rời rạc, thì ta gọi là bài toán
phân lớp. Khi nó nhận giá trị thực thì gọi là bài toán hồi quy.
Nên chú ý rằng, mục tiêu chính của bài toán là tìm ra một giả thuyết, gọi là h, để có
thể mô tả tốt được mối quan hệ giữa các giá trị đầu vào và các giá trị đầu ra. Ta gọi H
là tập hợp các giả thuyết có thể có để mà ta lựa chọn từ việc sử dụng thuật toán học.
Để mô tả điều này, ta có thể sử dụng một cây quyết định với các nút, hoặc một đường
trong không gian hai chiều, hoặc một mạng nơ ron.
Bây giờ chúng ta có thể gói gọn bài toán như sau: ta có một hợp dữ liệu và một tập
hợp các giả thuyết có thể. Yêu cầu bài toán của chúng ta là chọn ra được một giả
thuyết “tốt nhất”. Trong phần sau, chúng ta cần phải tìm hiểu nghĩa thật sự của từ “tốt
nhất”.
2. Khái niệm về sự “tốt nhất”
Có hai điều kiện rất quan trọng về sự tốt nhất. Đó là:
- Giả thuyết phải làm tốt việc mô tả dữ liệu.
- Giả thuyết không nên quá phức tạp.
Nói về việc mô tả dữ liệu, ý tưởng chung là với một giả thuyết h thì tại mọi điểm i thì
phải thỏa mãn h(xi) = yi. Tuy nhiên trên thực tế nghiên cứu số liệu thì không phải lúc
nào thực hiện được điều này mà đôi khi chỉ có thể thỏa mãn ở phần lớn dữ liệu ở một
mức độ trung bình nào đấy.
Rõ ràng ở đây sẽ xảy ra các trường mà đẳng thức trên không thỏa, lúc đó gọi ra lỗi.
Để đo mức độ lỗi của một giả thuyết thì người ta dùng dạng E(h,D), chẳng hạn bằng
số điểm không thỏa mãn đẳng thức trên.
Nói đến yếu tố thứ hai, tức là độ phức tạp của giả thuyết, người ta có thể dùng một

cây quyết định với số nút của nó, hay một đường trong mặt phẳng tọa độ với độ phức
tạp được biểu thị bằng độ uốn của nó. Ở đây ta kí hiệu độ phức tạp của giả thuyết h
trong tập H là C(h).
Nhưng tại sao chúng ta lại quan tâm đến độ phức tạp này? Chúng ta thường có cảm
giác những giả thuyết ở mức trung bình và đơn giản thì là tốt nhất.
Như vậy, với một tập dữ liệu D, một lớp giả thuyết H, một hàm đo độ tốt (hay mức
lỗi) của giả thuyết E và một thước đo độ phức tạp C thì công việc chính của chúng ta
sẽ là làm sao để tối thiểu được giá trị của biểu thức E(h,D) + α*C(h), trong đó α là hệ
số mà ta có thể thay đổi trong quá trình nghiên cứu các giả thuyết. Dĩ nhiên là một
cách tổng quát thì ta khó lòng làm điều này một cách hiệu quả, song chúng ta sẽ phải
cố gắng để đạt được mức xấp xỉ tốt.
Thế thì làm thế nào để ta có thể tối thiểu hóa được giá trị của biểu thức E(h,D) +
α*C(h). Một số trường hợp ta có thể tìm ra h tối ưu một cách trực tiếp hay tìm kiếm từ
việc nghiên cứu một mạng nơ ron.

13


3. Nhắc lại về các phép toán logic
Trong phần này, để làm tiền đề cho việc nghiên cứu bài toán quan sát thì chúng ta sẽ
sơ lược lại những nét chính về các phép toán logic, tức là các phép toán liên quan đến
các giá trị nhị phân.
Thông thường chúng ta sử dụng hai kí tự cho việc biễu diễn hai giá trị đúng và sai là
1 và 0. Khi đó:
- Phép toán “và” hay “hội” thể hiện giá trị đúng khi cả hai cùng đúng.
- Phép toán “hoặc” hay “tuyển” thể hiện giá trị sai khi cả hai cùng sai.
- Dấu trừ - ở phía trước kí tự thể hiện giá trị ngược lại.
II.
NGHIÊN CỨU BÀI TOÁN QUAN SÁT
1. Mở đầu

Chúng ta hãy cùng nhau bắt đầu với một bài toán đơn giản có các đặc điểm trong
đầu vào là kiểu boolean và đầu ra cũng sẽ là kiểu boolean. Lớp giả thuyết của chúng ta
sẽ phải liên kết các đặc điểm đầu vào trong một biểu thức logic để có thể cho ra các
đầu ra đúng như dữ liệu đã cho.
Ở đây chúng ta có một tập dữ liệu gồm 4 đặc điểm f1, f2, f3, và f4 và một cột dữ liệu y
tương ứng với các bộ giá trị x1, x2, x3, x4 được cho dưới dạng bảng như sau:
f1
0
1
1
0
1
0

f2
1
0
1
0
0
1

f3
1
1
1
1
0
1


f4
0
1
0
1
1
1

y
0
1
0
1
0
1

Chúng ta thử nói về giả thuyết f1^ f3, nó trả về giá trị của biểu thức này trong ví dụ 2
và 3 là 1 nhưng đối với các bộ dữ liệu còn lại là 0.
Dễ thấy với biểu thức f1^ f3 thì chỉ có ba bộ dữ liệu là thỏa, còn ba bộ dữ liệu kia thì
không.
f1
0
1
1
0
1
0

f2
1

0
1
0
0
1

f3
1
1
1
1
0
1

f4
0
1
0
1
1
1

y
0
1
0
1
0
1


Như vậy thì mức độ lỗi của giả thuyết f1^ f3 trong ví dụ này là 3. Thêm nữa, do có hai
đặc điểm được đề cập trong biểu thức là f1 và f3 nên giả thuyết này có độ phức tạp là 2.

14


Không mấy khó khăn khi chúng nghiên cứu ví dụ này vì khối lượng các bộ dữ liệu thì
ít mà số lượng các đặc điểm cũng không nhiều, do đó ta có thể tiến hành một cách thủ
công. Tuy nhiên với khối lượng bộ dữ liệu lớn, số đặc điểm nhiều thì rõ ràng việc làm
này dường như là không thể. Vậy thì ta không thể trông chờ vào các kiến thức lớn mà
ta đã được học cho tới bây giờ. Thay vào đó, ta hãy “tham lam” một chút.
Nghĩa là ban đầu, ta cứ cho là giả thuyết là đúng, những lỗi được gọi là các ví dụ phủ
định. Ở mỗi bước thì ta sẽ cố gắng thêm vào biểu thức logic các đặc điểm sao cho
ngày càng loại ra được nhiều ví dụ phủ định (mà không khai trừ ví dụ khẳng định). Ta
sẽ nghiên cứu rõ quá trình này hơn trong phần sau.
2. Ví dụ cụ thể với thuật toán thứ nhất
Ta sẽ lấy lại dữ liệu của phần 1, tức là bảng sau cho phần này:
f1
0
1
1
0
1
0

f2
1
0
1
0

0
1

f3
1
1
1
1
0
1

f4
0
1
0
1
1
1

y
0
1
0
1
0
1

Sau đây là thuật toán thứ nhất (thuật toán CNF - conjuntive normal form – hình
thức liên kết) để giải quyết bài toán tìm giả thuyết tốt nhất cho một bộ dữ liệu,
được viết dưới dạng mã giả:

Begin
N = các ví dụ phủ định trong tập D
h = True
Loop until N rỗng
For mỗi đặc điểm j không có giá trị 0 trong các ví
dụ khằng định
nj := số lượng các ví dụ trong N mà fj = 0
j* := j sao cho nj là lớn nhất
h := h ^ fj*
N := N – các ví dụ trong N mà có fj = 0
If không có đặc điểm nào được tìm thấy, trả về fail
End;
Trong suốt vòng lặp trên, ta sẽ quan tâm đến các đặc điểm mà nó không loại ra bất
kì một ví dụ khẳng định nào. Sau đó chúng ta sẽ lấy những đặc điểm này nối vào
trong h, đồng thời loại các ví dụ phủ định đã bị khai trừ này ra khỏi N.
Để hiểu rõ hơn ta hãy cùng nhau xem xét kĩ thuật toán trên được ứng dụng như
thế nào trong bảng dữ liệu đã cho.

15


-

-

Đầu tiên chúng ta thấy trong bảng dữ liệu có 3 ví dụ phủ định là x1, x3, x5. Vậy
ta có N={ x1, x3, x5}, và bắt đầu bằng h=True.
Bây giờ chúng ta quan tâm đến các ví dụ mà không loại ra bất kì ví dụ khẳng
định nào, có nghĩa là tại các bộ có y=1 thì các đặc điểm này cho giá trị là 1. Đó
là đặc điểm f3 và f4. Trong cột đặc điểm f3 có một giá trị 0 và trong cột đặc điểm

f4 có hai giá trị 0. Khi đó, f3 loại ra một ví dụ phủ định, còn f4 loại ra hai ví dụ
phủ định nên n3=1 và n4=2.
n4 lớn nhất trong hai số n3 và n4 nên ta chọn n4 vào h, đồng thời loại x1 và x3 ra
khỏi N. N={x5}, h= f4.
Vì N vẫn còn khác rỗng nên ta tiếp tục lặp thêm một lần nữa, lần này không xét
x1 và x3 đã bị loại.
f1
0
1
1
0
1
0

f2
1
0
1
0
0
1

f3
1
1
1
1
0
1


f4
0
1
0
1
1
1

y
0
1
0
1
0
1

Ta lại tìm các đặc điểm mà không loại ra bất kì ví dụ khẳng định nào, đó lại tiếp tục
là f3 và f4. Nhưng lúc này giá trị của các n đã thay đổi, tức là n3=1 và n4=0. Lúc này ta
lại chọn n3 vì nó lớn hơn.
- Bây giờ f3 đã loại luôn ví dụ phủ định cuối cùng là x5, tức là N={}, và h=f4^f3.
Thuật toán kết thúc.
f1
f2
f3
f4
y
0
1
1
0

0
1
0
1
1
1
1
1
1
0
0
0
0
1
1
1
1
0
0
1
0
0
1
1
1
1
3. Ví dụ cụ thể với thuật toán thứ hai
Bây giờ nếu như dữ liệu chỉ thay đổi một giá trị y từ 0 thành 1 thì vấn đề sẽ ra sao?
Nếu chúng ta áp dụng thuật toán vừa rồi thì sẽ xuất hiện tình huống là tập N vẫn còn
phần tử trong khi không còn đặc điểm nào mà không loại ra ví dụ khẳng định. Khi đó

chúng ta bị mắc kẹt vào vòng lặp này.
f1
0
1
1

16

f2
1
0
1

f3
1
1
1

f4
0
1
0

y
0
1
1


0

1
0

0
0
1

1
0
1

1
1
1

1
0
1

Để giải quyết vấn đề này, chúng ta có thể nghĩ rằng các ví dụ khẳng định có thể được
chia vào các khu vực theo cách coi các phép liên kết hội chỉ là một phần của một biểu
thức logic. Theo ý nghĩ này ta có hình thức DNF (disjuntive normal form – hình thức
phân chia phép liên kết hội), tức là có dạng giống như:
(A và B và C) hoặc (D và E) hay ( A ∧ B ∧ C ) ∨ ( D ∧ E )
Với bảng dữ liệu trên thì ta xem xét biểu thức ( f 3 ∧ f 4 ) ∨ ( f1 ∧ f 2 ) . Việc tìm kiếm
biểu thức này trong một không gian dữ liệu lớn hơn sẽ phức tạp hơn rất nhiều, do đó ta
sẽ đề ra một thuật toán mới để giải quyết bài toán trên.
Ta gọi một biểu thức liên kết là “phủ” lên một ví dụ nếu mọi đặc điểm trong biểu
thức liên kết đó thì có giá trị true trong ví dụ.
Đây là thuật toán thứ hai được viết bằng mã giả:

Begin
P = tập hợp tất cả các ví dụ khẳng định
h = False
Loop until P rỗng
r = True
N = tập hợp tất cả các ví dụ phủ định
Loop until N rỗng
If tất cả các đặc điểm đều nằm
trong r thì trả về fail
Else, chọn một đặc điểm fj thêm vào r
r = r ^ fj
N = N – các ví dụ trong N mà fj = 0
h := h ∨ r
Phủ := các ví dụ trong P mà phủ r
If tập Phủ rỗng thì trả về fail
Else P := P – Phủ
End;
Trước khi đi vào áp dụng thuật toán trên thì ta phải xem xét một chút về giá trị
Heuristic của việc chọn ra đặc điểm nào sẽ là đặc điểm tiếp theo ta cho vào r. Công
thức có dạng: v j =

n +j

max(n −j ,0.001)

Trong đó:
n +j là số ví dụ khẳng định chưa hề bị phủ trước đó, bây giờ bị phủ bởi r^f j
n −j là số ví dụ phủ định chưa hề bị loại ra, bây giờ bị phủ bởi r^fj

17



Bây giờ ta sẽ áp dụng thuật toán trên cho ví dụ mới mà ta vừa nêu.
- Ban đầu, ta có h=false và tập các ví dụ đúng là P= {x2, x3, x4, x6}. Hãy nhớ rằng
khi chúng ta tính giá trị vj thì ta chỉ quan tâm đến các ví dụ khẳng định và phủ
dịnh chưa bị phủ mà thôi.
- Ta có: r= True, N= { x1, x5}. Tính các giá trị v1=2/1, v2=2/1, v3=3/1, v4=4/1.
- Ta chọn f3 vì nó có vj lớn nhất. r=f3, N={ x1}. Lại tiếp tục tính các giá trị v1=2/0,
v2=2/1, v4=3/0.
- Lúc này r=f3^f4, N={}. Thêm r vào h
- Ta có: h= f3^f4, P={ x3}. Quay lại r= True, N= { x1, x5}. Các giá trị vj lần lượt là
v1=1/1, v2=1/1, v3=1/1, v4=0/1.
- Khi này, r=f1, N={ x1}. Tiếp tục v2=1/0, v3=1/0, v4=0/1 thì r= f1^f2, N={}.
Cuối cùng thì P={} và h= ( f 3 ∧ f 4 ) ∨ ( f1 ∧ f 2 ) . Thuật toán kết thúc.
Như vậy, trong chương vừa qua, ta đã hiểu được về cấu trúc bài toán quan sát cũng
như cách giải quyết chúng. Ở chương tiếp theo, ta sẽ nói về việc thuật toán trên sẽ hoạt
động như thế nào, xử lí ra sao với số liệu trong thế giới thực.
CHƯƠNG III
ĐÁNH GIÁ HOẠT ĐỘNG CỦA CÁC THUẬT TOÁN
TRONG KHÔNG GIAN DỮ LIỆU THỰC TẾ
I.
ĐẶT VẤN ĐỀ
Trong các phần trước, ta đã nói về các thuật toán và việc tìm ra các giả thuyết dựa
trên các thuật toán đó. Khi một giả thuyết được tìm ra, hiển nhiên chúng ta sẽ rất muốn
biết nó sẽ hoạt động như thế nào trong thế giới thực. Đương nhiên chúng ta không thể
đem giả thuyết đó để đi thử nghiệm ở tất cả mọi trường hợp trong thực tế mà chỉ có thể
thử nghiệm trong môi trường nơi mà các dữ liệu được sản sinh ra dùng để huấn luyện
cho bài toán học mà ta xét.
Chỉ có một cách duy nhất để biết giả thuyết đó tốt như thế nào, ta sẽ phải dùng một
tập dữ liệu được gọi là “tập kiểm chứng” hay “tập kiểm định”. Dữ liệu trong tập kiểm

chứng phải không được sử dụng trong việc huấn luyện. Khi kiểm thử giả thuyết trên
tập kiểm chứng thì ta sẽ tính được phần trăm mức độ lỗi của nó, nên tập này còn được
gọi là “tập kiểm tra lỗi”.
Theo thông thường, chúng ta không thể nói một giả thuyết nào đấy là tốt hay xấu nếu
chỉ kiểm định trên một tập dữ liệu đơn thuần. Nếu có nhiều dữ liệu,ta có thể chia
chúng ra thành các nhóm, dùng một nửa trong số chúng để huấn luyện giả thuyết mới
và dùng nửa còn lại để đánh giá giả thuyết đó. Song không phải lúc nào ta cũng có thể
thu thập đủ dữ liệu để làm điều này.
Chính vì lẽ đó, ta sẽ tìm hiểu một số giải pháp nhằm đánh giá chất lượng của giả
thuyết mà ta vừa tìm ra.
II.
ĐÁNH GIÁ HOẠT ĐỘNG CỦA CÁC THUẬT TOÁN ĐÃ NÊU
TRONG KHÔNG GIAN DỮ LIỆU THỰC TẾ
1. Một số giải pháp cho việc đánh giá thuật toán
Có một giải pháp được gọi là kiểm chứng chéo. Chúng ta sẽ chia dữ liệu ra thành một
số phần, chẳng hạn ở đây ta dùng 10 phần, trong đó, 9 phần đầu dùng để huấn luyện
giả thuyết, còn phần còn lại để đánh giá thuật toán. Mở rộng ra, với một tập dữ liệu, ta

18


sẽ chia nó ra thành n phần rồi dùng n-1 phần để huấn luyện giả thuyết, sau đó lấy phần
thứ n để kiểm định thuật toán có tốt không.
Ngoài ra, người ta cũng có thể sử dụng một đồ thị đường cong để kiểm định thuật
toán. Trục x thể hiện lượng dữ liệu, còn trục y thể hiện số lỗi trong tổng số thể tập
kiểm định. Ví dụ trong miền 1000 đặc điểm, đường cong sau đây là kết quả kiểm định
giả thuyết f 344 ∧ f 991 ∨ f103 ∧ f 775 :

Một điều đáng ngạc nhiên là theo cách này ta có thể chỉ cần một phần rất nhỏ của
toàn bộ không gian để tìm ra giả thiết chính xác.

Thế còn đối với hàm mục tiêu sau thì sao, nó khá phức tạp:
( f 1 ∧ f 2 ∧ f 3 ∧ f 4 ) ∨ ( f 5 ∧ f 6 ∧ f 7 ∧ f 8 ) ∨ ( f 9 ∧ f10 ∧ f11 ∧ f12 ) ∨

( f 13 ∧ f 14 ∧ f 15 ∧ f 16 ) ∨ ( f17 ∧ f18 ∧ f19 ∧ f 20 ) ∨ ( f 21 ∧ f 22 ∧ f 23 ∧ f 24 )

Khi đó ta sẽ có đồ thị sau:

Khi chúng ta chỉ có một ít dữ liệu thì sẽ có nhiều hàm đúng với dữ liệu đó, song làm
thế nào thuật toán của ta có thể lựa chọn được? Nó cố gắng chọn một câu trả lời đơn
giản, khi đó ta gọi là thuật toán “bias” – thiên lệch về hướng đơn giản.
Nếu có quá nhiều giả thuyết phức tạp mà chúng lại đồng ý với dữ liệu thì buộc chúng
ta phải có một số thông tin cũng như kiến thức về miền của dữ liệu đó.
2. Cải tiến thuật toán DNF
Trong lĩnh vực máy học có một định lý thường được nhắc đến là định lý “No Free
Luch” với nội dung là “bất cứ giả thuyết nào đồng ý với dữ liệu của bạn thì cũng tốt
với các dữ liệu khác”. Vấn đề sẽ khá phức tạp nếu dữ liệu của chúng ta có vấn đề, mà
trong thuật ngữ chuyên ngành gọi là “noisy data”, tức là biến y gần như độc lập với tất

19


cả các biến x dẫn đến tình trạng gây ra nhiều quyết định khác nhau trong cùng một ngữ
cảnh.
Khi đó chúng ta có thể phải chấp nhận việc tồn tại các lỗi trong tập huấn luyện, và
làm việc với thuật toán gần DNF, nghĩa là:
- Không đòi hỏi giả thuyết phải phủ lên tất cả các ví dụ.
- Không đòi hỏi mỗi luật phải loại bỏ tất cả các ví dụ phủ định.
Từ đó, ta có sự cải tiến, đó là thuật toán DNF cho bài toán học với dữ liệu có tính
“noisy”. Sau đây là mã giả của thuật toán này:
P := tập hợp các ví dụ khẳng định

h := False
np := epsilon * số lượng các ví dụ trong P
nn := epsilon * số lượng các ví dụ trong N
Loop until P có ít hơn np phần tử
r = True
N = tập hợp các ví dụ phủ định
Repeat until N có ít hơn nn phần tử
Chọn một đặc điểm fj cho vào r
r := r ^ fj
N := N – các ví dụ trong N mà fj = 0
h := h ^ r
P := P – các phần tử trong P mà được phủ bởi r
Ngoài ra, chúng ta cũng có thể thêm một số điều kiện để dừng cả hai vòng lặp như:
P := tập hợp các ví dụ khẳng định
h := False
np := epsilon * số lượng các ví dụ trong P
nn := epsilon * số lượng các ví dụ trong N
Loop until P có ít hơn np phần tử hoặc không thể tiếp tục
r = True
N = tập hợp các ví dụ phủ định
Repeat until N có ít hơn nn phần tử
hoặc không thể tiếp tục
Chọn một đặc điểm fj cho vào r
r := r ^ fj
N := N – các ví dụ trong N mà fj = 0
h := h ^ r
P := P – các phần tử trong P mà được phủ bởi r
Tức là, nếu không có đặc điểm nào có thể được thêm vào để loại bớt các phần tử
trong N thì vòng lặp trong phải dừng. Nếu vòng lặp trong không thể tìm ra thêm luật
để loại bỏ bớt các phần tử trong P thì vòng lặp ngoài phải dừng.


20


Vấn đề là trong thuật toán mới này xuất hiện biến mới là epsilon, cho ta biết về lỗi
của dữ liệu. Nếu epsilon càng lớn thì giả thuyết càng đơn giản và càng có mức lỗi
nhiều hơn. Nếu epsilon nhỏ và dữ liệu bị “noisy” thì thuật toán của chúng ta có thể bị
sai khi tìm ra giả thuyết chấp nhận được.
Hãy xem đồ thị sau cho ta thấy mối quan hệ giữa mức độ lỗi dữ liệu và giá trị của
epsilon, với 200 đầu vào và hàm mục tiêu là f 22 ∧ f 55 ∨ f 99 ∧ f 34 :

Cách biễu diễn được coi là tốt nhất là epsilon nhận giá trị từ 0 đến 1.
- Khi epsilon gần 0, mức độ lỗi lớn, được gọi là “high variance”, tức là nếu ta
dùng một tập dữ liệu “noisy” khác với cùng hàm mục tiêu như trên thì câu trả
lời ta nhận được sẽ rất khác.
- Khi epsilon bị tăng lên cao đến gần 1, việc xây dựng giả thuyết lại trở nên vô
cùng phức tạp, gần như không thể tìm ra câu trả lời đúng, trường hợp này gọi là
“high bias”.
Với đồ thị về độ phức tạp của giả thuyết cũng cho ta hình dung về sự ảnh hưởng của
epsilon đến bài toán:

Sự ảnh hưởng đó như sau:

21


-

Khi epsilon = 0 thì có nghĩa dữ liệu không có lỗi, song quá phức tạp để tìm câu
trả lời.

- Khi epsilon tăng dần đến 1 thì độ phức tạp giảm nhanh đến 1.
Vấn đề này gọi là bài toán thỏa hiệp bias/variance. Sau đây là một ví dụ về dữ liệu
“noisy”. Nếu ta dùng một đường thẳng để chia miền thì công việc sẽ đơn giản nhưng
tồn tại nhiều lỗi:

Còn nếu ta dùng một đường cong có độ uốn mạnh, ta sẽ giảm được nhiều lỗi song lại
phức tạp.

Bây giờ ta sẽ thêm nhiều điểm hơn vào không gian trên. Nếu dùng một đường thẳng
như cũ thì ta sẽ vẫn có được sự phân chia miền khá tốt như sau:

Trong khi đó nếu dùng một đường cong, ta lại phải thay đổi chúng đi rất nhiều:

22


Trường hợp kích thước tập huấn luyện tăng lên thì ta có thể cảm thấy tin tưởng trong
việc lựa chọn giả thuyết phức tạp như sau:

Một vấn đề được đặt ra là làm thế nào ta chọn được giá trị epsilon phù hợp. Khi đó,
hãy lấy một số giá trị epsilon rồi cho kiểm chứng chéo để ước tính mức độ lỗi cho
từng giá trị rồi chọn ra epsilon có gây mức lỗi thấp nhất. Lúc này coi như ta đã tìm ra
được giả thuyết tốt nhất có thể.
3. Kết luận chung về sự đánh giá thuật toán
Vậy thì có phải thuật toán lúc nào cũng tốt cho mọi trường hợp không. Có rất nhiều
miền dữ liệu trong thực tế có thể được mã hóa, với dạng chính là nhị phân, sau đây là
một số ví dụ:
- Bầu cử Quốc hội: mỗi ứng viên sẽ có một bản ghi, các đặc điểm sẽ chọn ra các
ứng viên thỏa mãn yêu cầu.
- Các liên kết trong gen: đâu vào là một véc tơ các phần tử lấy từ tập {A,C,G,T},

công việc là tìm ra điểm bắt đầu chuỗi mã, mỗi phần tử ta mã hóa bằng 2 bit
(hoặc 4 bit).
- Mua sắm: phán đoán xem người mua sắm có mua bia không, dựa trên các sản
phẩm anh ta mua trước đó. Mỗi việc mua được mã hóa bằng một đặc điểm, đặt
là 1 nếu anh ta có mua sản phẩm đó.
Chúng ta hãy cùng nhau xem xét về bài toán bầu cử Quốc hội. Có 15 đặc điểm được
đề cập để chạy thuật toán DNF cho 232 bản ghỉ, ứng với 232 ứng viên. Ta có đồ thị về
mức độ lỗi với việc lựa chọn các giá trị epsilon:

23


Đây là điểm thấp nhất trên đồ thị đã cho, lúc này mức lỗi ít nhất, song nó rất phức
tạp, thể hiện ở việc hàm mục tiêu chứa rất nhiều đặc điểm:

Còn đây là vị trí của điểm mà tại đó hàm mục tiêu lại khá đơn giản:

Kết luận lại một cách ngắn gọn thì chúng ta cần phải cân nhắc và nghiên cứu kĩ để có
thể chọn được giá trị phù hợp của epsilon, từ đó đạt được giả thuyết tốt từ thuật toán
đã nêu.

24



×