HỌC VIỆN KỸ THUẬT QUÂN SỰ
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO MÔN HỌC
TRÍ TUỆ NHÂN TẠO
Giáo viên hướng dẫn: Ngô Hữu Phúc
HÀ NỘI 3/2010
Học viện kỹ thuật quân sự - khoa CNTT
Báo cáo môn trí tuệ nhân tạo
Đề tài:
xây dựng chương trình sử dụng Radial basis functions networks để
tìm đường phân lớp 2 tập điểm trên không gian
Sinh Viên: Nguyễn Minh Tiến – Tin 5a
Giáo viên: Ngô Hữu Phúc
I /Giới thiệu chung
1/ Giới thiệu về bài toán
Bài toán được mô tả là có các tập điểm trên không gian 2 chiều, mỗi điểm mang
nhãn 1 hoặc -1, hãy xây dựng chương trình sử dụng dụng Radial basis functions
networks để tìm đường phân lớp 2 tập điểm nói trên
Để giải quyết vấn đề của bài toán này chúng ta có thể dùng nhiều
phương pháp khác nhau như hàm tuyến tính (hoặc affine), máy phân lớp
sử dụng véctơ hỗ trợ (Support Vector Machines – SVM). Và một trong những
cách khá phổ biến là sử dụng mạng các hàm cơ sở dạng bán kính (Radial
Basis Functions network – RBF) do mạng hàm cơ sở bán kính có khá nhiều ưu
điểm so với các phương pháp khác:
1. Hàm phân lớp tuyến tính đơn thuần (Perceptron) không thể phân lớp trong
một số trường hợp. Ví dụ như hàm XOR:
2. Khả năng nhớ các mẫu học: nếu đầu vào của hàm phân lớp “gần giống”
với một mẫu học đã biết trước đó thì kết quả phân lớp cũng phải “gần
giống” kết quả phân lớp đã được học.
3. Ý tưởng phân lớp trên không gian có nhiều chiều hơn: có nhiều ví dụ cho
thấy, khi được ánh xạ lên không gian nhiều chiều hơn lúc đầu, bài toán
phân lớp trở nên dễ dàng hơn.
2/ Giới thiệu về Hàm bán kính (Radial function)
Hàm bán kính là hàm chỉ phụ thuộc vào khoảng cách từ đối số x đến một điểm c
(gọi là tâm) cho trước
Với
1 số hàm bán kính
Hàm Gaussian:
Hàm đa thức:
Hàm khoảng cách:
Mạng hàm cơ sở bán kính (RBF): Giả sử ta có D tâm khi đó mạng
hàm cơ sở bán kính là tổ hợp tuyến tính của các hàm bán kính tại các tâm này
Nhận xét:
1. Mạng hàm cơ sở bán kính đã tạo ra ánh xạ
2. Kết quả của mạng là
vì vậy, đây là hàm tuyến tính phân lớp dữ liệu trên không gian
3. Mạng RBF còn có thể dùng để xấp xỉ hàm số nếu ta trực tiếp dùng đầu ra
II / Giới thiệu chương trình
Chương trình được viết bằng ngôn ngữ VB.Net với các thành phần cơ bản như
sau
Trong đó: Form 1: form main chính của chương trình
Form 2: Sử dụng để test kết quả của ma trận trọng số mới tạo ra
Class Matran: Lưu các phương thức của ma trận như nghịch đảo, nhân
Class Toado: Các thuộc tính về tọa độ của 1 điểm bào gồm TdoX và TdoY
Sau khi khởi động chương trình chúng ta có thể đánh dấu các điểm huấn luyện
trên canvas chính sử dụng chuột trái (tạo ra màu đỏ mang giá trị 1) hoặc phải
(tạo ra màu xanh mang giá trị -1)
Hoặc có thể lấy mặc định 4 điểm XOR
Sau khi bấm nút Train, chương trình sẽ tạo ra ma trận trọng số W có thể sử dụng
để phân lớp các tập điểm
Sau khi đã có ma trận trọng số W, chúng ta có thể sử dụng nút test để kiểm tra 1
điểm bất kỳ sẽ thuộc về phần tập điểm nào
III/ Thuật toán
Chương trình sẽ sử dụng hàm
Với tâm là tất cả các điểm huấn luyện
*/ Khi khởi chạy chương trình sẽ tạo ra
Public mangx(50) As toado
Dim mangy(50, 1) As Double
Mangx kiểu toado sẽ lưu vị trí của các điểm huấn luyện
Mangy kiểu double sẽ lưu giá trị của điểm huấn luyện tương ứng, mảng y này
thực chất chỉ cần là mảng 1 chiều kiểu int (do chỉ có giá trị 1 hoặc -1) nhưng để
dễ dàng thao tác khi nhân ma trận nên e để là mảng 2 chiều kiểu double
*/ Khi bắt đầu huấn luyện chương trình
Ví dụ chúng ta sử dụng hàm XOR
Với khi đó ma trận là
Thế W mới tìm được vào hàm F(x)
Dim i, j As Integer
'tao ra mang phi voi phi(r) = exp (-r binh)
For i = 0 To (sodiem - 1)
For j = 0 To (sodiem - 1)
mangphi(i, j) = Math.Exp(-(tinhkhoangcach(mangx(i),
mangx(j)) * (tinhkhoangcach(mangx(i), mangx(j)))))
Next
Next
nghichdaophi = matran.Inv(mangphi)
W = matran.Multiply(nghichdaophi, mangy)
TextBox1.Text = ""
For i = 0 To sodiem - 1
thapphan = Format$(W(i, 0), "0.000")
TextBox1.Text += thapphan + vbCrLf
'vbcrlf la de xuong dong thoi
Next
Sau bước này chúng ta đã có ma trận trọng số W dạng n hàng 1 cột và được thể
hiện ra trong textbox 1
Sau khi đã có ma trận trọng số W chúng ta có thể test lại ma trận mới tạo ra này
với 1 số điểm bất kỳ
'tao ra mang phi voi phi(r) = exp (-r binh)
For i = 0 To (Form1.sodiem - 1)
j = Form1.tinhkhoangcach(test, Form1.mangx(i))
khoangcach(i, 0) = Math.Exp(-(j * j))
Next
For i = 0 To Form1.sodiem - 1
chuyenviW(0, i) = Form1.W(i, 0)
Next
For i = 0 To Form1.sodiem - 1
ketqua += chuyenviW(0, i) * khoangcach(i, 0)
Next
If ketqua < 0 Then
ketqua = -1
MsgBox("điểm test có giá trị -1 (Blue)")
Else
ketqua = 1
MsgBox("điểm test có giá trị 1 (Red)")
End If
Sau khi điểm test được nhập vào thông qua form 2, chương trình sẽ tính khoảng
cách từ điểm test này đến các tâm của mạng, các giá trị này sẽ được lưu vào 1
ma trận khoangcach có n hàng 1 cột
Ma trận W sau khi chuyển vị có 1 hàng n cột nhân với ma trận khoảng cách n
hàng 1 cột sẽ tạo ra 1 số thực, số thực này được hardlim để xem sẽ thuộc về phần
phân lớp nào
IV/ 1 số nhược điểm
Do thời gian và khả năng có hạn, chương trình không thể tránh khỏi có 1 số
nhược điểm khá lớn như sau:
- Chương trình không tính được số tâm tối ưu cho mạng mà sẽ sử dụng hết
tất cả các điểm huấn luyện được cho để làm tâm (Nếu tìm số tâm sẽ có
tình trạng mảng phi khi tạo ra sẽ không vuông, không nghịch đảo được,
khi đó sẽ phải áp dụng phương pháp giả nghịch đảo (pseudo-inverse) hoặc
biến đổi gauss khá phức tạp)
- Chưa thể áp dụng ma trận trọng số W để vẽ ra 1 đường thẳng hoặc siêu
phẳng trên thực tế để đáp ứng được yêu cầu phân lớp
- Chương trình còn chưa tối ưu, giao diện còn xấu
V/ Tài liệu tham khảo
- Giáo trình trí tuệ nhân tạo _ Thầy Ngô Hữu Phúc _ HVKTQS
- Trang web Wikipedia
- Trang web />- Giáo trình Pattern Recognition with Neural Networks in C++
- 1 số tài liệu khác trên internet