GP và ứng dụng GP để giải bài toán phân lớp

Một phần của tài liệu Luận văn thạc sĩ Khoa học máy tính: Bài toán phân lớp không cân đối cho dữ liệu giáo dục (Trang 37 - 53)

Chương 2. CƠ SỞ LÝ THUYẾT

2.2 Giải thuật tiến hóa trong phân lớp

2.2.2 GP và ứng dụng GP để giải bài toán phân lớp

Tuy giải quyết được nhiều bài toán khó, nhưng các GA không giải quyết được một trong những công việc có tính thách thức nhất trong khoa học máy tính, đó là làm cho máy tính giải được các bài toán mà không cần lập trình tường minh cho nó. GP tuy bị coi là một biến thể của GA, nhưng được phát minh ra chính là để giải quyết công việc này. Những hoạt động nghiên cứu về GP khởi đầu từ những năm 1980, song vì nó đòi hỏi thời gian tính toán nhiều nên chỉ được dùng để giải những bài toán đơn giản.

Nhưng kể từ đầu thập kỷ 1990, nhờ sự tăng trưởng vượt bậc năng lực xử lý của các CPU mà các lĩnh vực ứng dụng của GP đã được mở rộng rất nhiều, thu được những kết quả cạnh tranh được với con người trong nhiều lĩnh vực như mô phỏng dựa trên cơ sở dữ liệu, thiết kế điện tử, chơi game, sắp xếp, tìm kiếm, và nhiều thứ khác nữa.

Mặc dù GP đã được áp dụng thành công để giải những bài toán trong nhiều lĩnh vực khác nhau, việc phát triển một lý thuyết GP đã được xem là khá khó khăn, ngay cả trong suốt thập kỷ 1990. Mãi đến đầu những năm 2000, lý thuyết về GP mới được hình thành, tiêu biểu là trong tài liệu [25], và GP đã phát triển cực nhanh kể từ đó. Các yếu tố chính giúp cho sự thành công được chấp nhận rộng rãi trong giới học thuật cũng như trong công nghiệp của GP có thể được tóm lược như sau ([27]):

 Hầu như mọi bài toán trong trí tuệ nhân tạo, học máy, các hệ thống thích

nghi, và học tự động đều có thể được viết lại như một cuộc tìm kiếm các chương trình máy tính;

 GP cung cấp một phương pháp để kiểm soát thành công việc tìm kiếm trong không gian các chương trình máy tính.

Sau đây là những bước chính cần tiến hành để dùng GP giải bất kỳ bài toán nào:

Biểu diễn cá thể

Biểu diễn cá thể là phương pháp để xây dựng lời giải cho bài toán mong muốn.

Đây cũng có thể được gọi là cấu trúc dữ liệu được dùng để xác định đặc điểm một cá thể. Cách biểu diễn cá thể là khác biệt chính giữa các GA và GP. Trong GP, cá thể được biểu diễn bằng những cấu trúc cấp bậc có độ dài biến thiên gọi là các “chương trình”, thường có dạng cây. Trong GP, hình thù, kích thước và độ phức tạp về cấu trúc

của lời giải không bị giới hạn trước, và do lời giải đa dạng nên các phép toán di truyền

cũng đa dạng, đó chính là tính linh hoạt (flexibility) của GP. Đó vừa là ưu điểm vừa là nhược điểm. Nó là ưu điểm so với các GA bởi vì nhờ thế mà ta có thể biểu diễn được những cấu trúc phức tạp, có khả năng thực hiện không chỉ các toán tử toán học và toán

tử luận lý mà cả sự lặp, sự đệ quy và rẽ nhánh có điều kiện. Mặt khác, cách biểu diễn như vậy khiến không gian tìm kiếm trở thành vô hạn, đòi hỏi không chỉ năng lực tính toán lớn mà cả những kỹ thuật thông minh và thích nghi hơn so với các GA.

Các cách biểu diễn cá thể được dùng trong GP đại khái có thể được chia ra thành những loại sau đây:

Binary-Tree Based GP: Đây là cách biểu diễn thường được sử dụng nhất

trong GP, trong đó các nút nội (internal node) là các hàm (function hay

operator), còn các nút lá (leaf node) là các ký hiệu kết thúc (terminal symbol).

Các cây cũng có thể được biểu diễn như những câu lệnh LISP trong đó dữ liệu và mã chương trình liên quan chặt chẽ với nhau, mặc dù người ta cũng có thể dùng những kiểu biểu diễn bằng các ký hiệu tiền tố hoặc dựa trên con trỏ trong một số ngôn ngữ khác. Trong trường hợp này, mỗi cá thể chương trình (phenotype) phải được thi hành bằng cách dùng những dữ liệu cấu tạo nên genotype của cá thể đó. Tất cả các cặp dữ liệu đều được thi hành dựa trên các

cá thể và cho ra những giá trị được dùng để tính toán độ chính xác hoặc sai số tương ứng, tượng trưng cho độ khỏe mạnh (fitness) của cây.

Constrained Syntax GP: Thay vì dùng những cây nhị phân đơn giản như trên,

người ta dùng những cây cú pháp trong đó có những hàm phức tạp (ví dụ như

“if” có nhiều hơn hai đối). Trong những cây như vậy, cần phải đặt một số ràng buộc lên những phép toán di truyền để sau khi các phép toán đó được thực hiện, tính hợp lệ (validity) của cây vẫn được duy trì.

Cellular GP: Trong loại GP này (còn gọi là Indirect GP), các cây biểu diễn

các chương trình mà gián tiếp tạo ra những cấu trúc thứ hai, thường là một cấu trúc đồ thị, giống như các mạng nơ-rôn hoặc petrinet4. Người ta cũng dùng một

4 Petrinet (hoặc Petri net, hoặc place/transition net, hoặc P/T net) là một trong vài ngôn ngữ mô hình hóa toán học để mô tả các hệ phân tán. Mỗi petrinet là một đồ thị lưỡng phân (bipartite) có hướng, trong đó các nút biểu diễn các chuyển tiếp (transition, tức những sự kiện có thể xảy ra, được ký hiệu bằng các vạch đậm) và các vị trí (place,

dạng Cellular GP có sửa đổi một chút, gọi là Edge Encoding GP, để biểu diễn các cấu trúc đồ thị phẳng và đơn giản.

Linear GP: Một cấu trúc biểu diễn cá thể GP quan trọng khác là danh sách các

câu lệnh ngôn ngữ máy. Linear GP và kỹ thuật tính toán tiến hóa văn phạm (Grammatical evolution) trong GP sử dụng kiểu biểu diễn này.

Graph based GP: Là một trong những cấu trúc biểu diễn cá thể phức tạp nhất.

Loại cấu trúc này thường được dùng để biểu diễn và tiến hóa các mạng nơ-rôn, automata hoặc petrinet.

Grammar based GP: Đây là một kiểu biểu diễn cá thể khác, trong đó người ta

định nghĩa một tập các luật sinh (production rule) để dùng trong việc tạo ra các thành viên của quần thể.

Các kiểu biểu diễn bằng cây được dùng phổ biến hơn nhiều so với các kiểu biểu diễn còn lại [31]. Trong các cách biểu diễn bằng cây, tập hợp các ký hiệu dành cho các nút nội được gọi là tập hàm (function set), còn tập hợp các ký hiệu dành cho các nút lá được gọi là tập kết thúc (terminal set). Cả tập hàm lẫn tập kết thúc đều phải chứa

những ký hiệu thích hợp cho bài toán mục tiêu. Tập hàm có thể chứa các toán tử số học, toán tử luận lý, các hàm toán học, v.v…; trong khi tập kết thúc có thể chứa các biến (tức các thuộc tính) của bài toán và các giá trị của các biến ấy. Tập hợp bao gồm các ký hiệu hàm lẫn các ký hiệu kết thúc của một cách biểu diễn được gọi là primitive

set (tạm dịch: tập phần tử cơ bản).

Cụ thể hơn, cần chú ý những sự kiện chủ chốt sau đây trong ngữ cảnh GP dựa trên cấu trúc cây:

_ Các nút trong cây là nút hàm hoặc là ký hiệu kết thúc;

_ Các nút kết thúc được đánh giá trực tiếp, tức là chúng có các giá trị mà có

thể tính toán được ngay lập tức;

tức các điều kiện, được ký hiệu bằng các đường tròn). Các cung có hướng (được ký hiệu bằng các mũi tên) mô tả những vị trí nào là tiền điều kiện (precondition) hoặc hậu điều kiện (postcondition) mà các chuyển tiếp xảy ra.

_ Tất cả các nút hàm đều có các nút con mà phải được đánh giá trước, rồi các

giá trị đánh giá được của các nút con đó mới được dùng như dữ liệu nhập để đánh giá nút cha;

_ Nếu chuyển đổi sang kiểu biểu diễn chuỗi ký tự thì có lẽ cách tốt nhất là dùng cách ký hiệu tiền tố (prefix notation): Các nút hàm được viết trước các

nút con của chúng (có thể tùy chọn dùng các cặp dấu ngoặc đơn hoặc ngoặc móc để bao các nút con). Việc đánh giá được thực hiện theo kiểu đệ quy, depth-first, bắt đầu từ bên trái; vì thế các toán tử được đặt ở bên trái các toán

hạng của chúng. Trong trường hợp các hàm có số ngôi cố định (tức nếu số đối của hàm là cố định và biết trước), không cần có các dấu ngoặc đơn hoặc ngoặc móc.

Mô tả một cách hình thức hơn, lược đồ cấu trúc biểu diễn chương trình trong GP có thể được tóm lược như sau:

 Các biểu thức tượng trưng có thể được định nghĩa bằng cách dùng:

_ Một tập kết thúc T, và _ Một tập hàm F.

 Các định nghĩa đệ quy tổng quát sau đây được áp dụng:

_ Mọi t T đều là một biểu thức đúng,

_ f(e1, …, en) là một biểu thức đúng nếu f F, arity(f) = ne1, …, en đều là những biểu thức đúng,

_ Không có dạng biểu thức đúng nào khác.

 Nói chung, các biểu thức trong GP không có quy định kiểu chặt chẽ (tính

chất đóng: mọi f F có thể lấy bất kỳ g G nào làm đối cũng được). Tuy

nhiên điều này có thể không đúng trong một số trường hợp nhất định, trên những tập hàm và tập kết thúc được chọn sẵn.

Sau đây là một số ví dụ về các biểu thức trong GP. Chúng tôi dùng cách ký hiệu truyền thống cũng như cách ký hiệu tiền tố (không theo đúng hoàn toàn cách ký hiệu của LISP):

(a) IF (Y>X OR Y<4) THEN i:=(i+1), ELSE i:=0.

Ký hiệu tiền tố: IF (OR (> Y,X), < (Y,4), :=(i, +(i, 1)), :=(i,0)).

(b)

. Ký hiệu tiền tố: DIV(ADD(X,5), MULT(2,Y)).

Cách biểu diễn các chương trình (biểu thức) này theo cấu trúc cây có nhãn tại mỗi nút và có gốc được trình bày trong Hình 2.5 bên dưới:

Hình 2.5: Các chương trình ví dụ được biểu diễn dưới dạng cây có nhãn, có gốc.

Tạo quần thể ban đầu

Sự cách tân của GP nằm trong cách biểu diễn lời giải có kích thước biến thiên, đòi hỏi phải xây dựng quần thể ban đầu một cách hiệu quả, tính chất này khiến nó khác biệt với những giải thuật tiến hóa khác. Quần thể ban đầu bao gồm các cây được tạo ngẫu nhiên từ một tập phần tử cơ bản (primitive set), như trên vừa nói. Các nút nội của mỗi cây được chọn từ tập hàm, còn các nút lá được chọn từ tập kết thúc. Chỉ bằng một tập phần tử cơ bản như thế, GP cho phép tạo nên các cấu trúc lời giải rất đa dạng.

Việc tạo quần thể ban đầu đóng một vai trò quan trọng trong sự thành công của bất kỳ giải thuật tiến hóa nào. Quần thể ban đầu tệ hại có thể làm cho bất kỳ giải thuật tốt nào cũng có thể bị mắc kẹt trong các cực trị cục bộ nào đó, còn quần thể ban đầu tốt có thể khiến hầu hết các giải thuật làm việc tốt và hiệu quả. Sau đây là vài kỹ thuật tạo quần thể ban đầu trong GP dựa trên cây:

Phương pháp Full: Phương pháp này tạo ra các cây đầy đủ (full) cho đến độ

sâu quy định trước. Mỗi cây được tạo ra bằng cách chọn các nút từ tập hàm cho đến khi đạt độ sâu cho phép, sau độ sâu đó thì chỉ được chọn các nút từ tập kết thúc. Phương pháp này buộc tất cả các cây đều phải đầy đủ.

Phương pháp Grow: Phương pháp này chọn ngẫu nhiên các nút từ tập hàm

hoặc tập kết thúc rồi tạo ra các cây ngẫu nhiên cho đến khi đạt độ sâu tối đa – 1, sau đó thì chỉ được chọn các nút kết thúc để bảo đảm không vượt quá độ sâu

tối đa. Những cây được tạo ra bằng phương pháp này có cấu trúc rất đa dạng do được tự do lựa chọn nút.

Phương pháp Ramped Half and Half: Koza trong [27] đã đề xuất một sự kết

hợp của các phương pháp Full và Grow để khắc phục những nhược điểm của cả hai. Phương pháp này tạo ra một dãy các độ sâu tối đa tăng dần (tức tạo một

độ dốc – ramp), và ở mỗi độ sâu tối đa đó, tạo ra ngẫu nhiên các cây bằng cách

dùng phương pháp Full hoặc Grow. Kiểu tạo quần thể ban đầu này sinh ra những cây đa dạng và rậm rạp hơn, do đó đã được áp dụng rộng rãi.

Một số phương pháp khác để khởi tạo quần thể cây là Ramped Uniform Initialization [34] và PCT2 Initialization [35].

Lựa chọn các cá thể cha mẹ để sinh sản

Các phép toán di truyền được áp dụng trên những cá thể được lựa chọn riêng cho các phép toán đó. Các cá thể này được lựa chọn bằng cách dùng một cơ chế lựa chọn đặc biệt nào đó. Một số cơ chế lựa chọn cha mẹ như vậy được trình bày bên dưới:

Fitness-Proportionate Selection: Đôi khi còn được gọi là Proportional

Selection hoặc Roulette Wheel Selection. Giải thuật di truyền chuẩn (SGA) đã sử dụng phương pháp lựa chọn này. Đối với GP dựa trên cây, các cây sẽ có xác suất lựa chọn dựa trên fitness của chúng. Xác suất lựa chọn của cá thể thứ i

trong một quần thể kích thước N được tính như sau:

pi =

(2.1)

trong đó fifj lần lượt là fitness của cá thể thứ i và thứ j. Vì thế, nếu mỗi cá

thể của quần thể được biểu diễn bằng một không gian tỷ lệ với fitness của nó trên một bánh xe roulette, thì khi ta quay bánh xe đó, các cá thể sẽ được chọn theo nguyên tắc lấy mẫu ngẫu nhiên có đặt lại chỗ cũ (random sampling with replacement).

Tournament Selection: Trong kiểu lựa chọn này, một cuộc đấu loại được tổ

chức giữa k cá thể được chọn ngẫu nhiên từ quần thể. Kết quả của cuộc đấu

loại là kẻ thắng trận hoặc thành viên tốt nhất sẽ được chọn. Kích cỡ (k) của vòng đấu loại quyết định có bao nhiêu thành viên ngẫu nhiên được chọn để đấu loại. Nó cũng quyết định áp lực lựa chọn (selective pressure): vòng đấu loại càng lớn thì những cá thể có fitness tốt hơn sẽ càng ưu tiên được chọn.

Linear-rank Selection: Đôi khi còn được gọi là Betters Selection hoặc Rank

Selection. Trong kiểu lựa chọn này, các cá thể của quần thể được sắp hạng (rank) theo fitness của chúng, rồi việc lựa chọn sẽ theo nguyên tắc cá thể có hạng cao nhất có xác suất được chọn gấp một bội số lần so với cá thể có hạng thấp nhất. Như vậy kiểu lựa chọn này cũng gần giống như Fitness-

Proportionate Selection, chỉ khác là xác suất lựa chọn tỷ lệ với fitness tương đối thay vì với fitness tuyệt đối. Nói cách khác, đối với kiểu chọn lựa này thì cá thể hạng 1 có fitness lớn hơn cá thể hạng 2 đến mười lần hay chỉ 0.001%

cũng không có gì khác biệt. Trong cả hai trường hợp đó, các xác suất lựa chọn

cũng giống nhau; yếu tố đáng quan tâm chỉ là thứ hạng tương đối đối với các cá thể khác. Linear-Rank Selection có khuynh hướng sẽ tránh được sự hội tụ sớm nhờ việc làm giảm áp lực lựa chọn do những khác biệt lớn trong fitness xảy ra trong những thế hệ đầu của cuộc tiến hóa. Ngược lại, trong những thế hệ sau, do việc khuếch đại những khác biệt nhỏ nên áp lực lựa chọn sẽ được gia tăng so với các sách lược lựa chọn khác.

Random Selection: Trong kiểu lựa chọn này, các cá thể cha mẹ chỉ được lựa

chọn theo kiểu lấy mẫu ngẫu nhiên. Mặc dù đơn giản, nhưng kiểu lựa chọn này đôi khi vẫn được áp dụng.

Ngoài ra, vài cơ chế chọn lựa khác cũng được đề cập cho GP như Sigma- Scaling Selection, Truncation Selection, Stochastic Universal Sampling, v.v...

Các phép toán di truyền

Các phép toán di truyền phổ biến nhất để tiến hóa các chương trình trong GP là

lai ghép (crossover), biến dị (mutation) và sao chép (reproduction). Vì trong GP các cá

thể thường được biểu diễn bằng cây, nên các phép toán này liên quan đến các cây con trong các cá thể. Các phép toán này sẽ được lần lượt trình bày tóm lược như sau:

Crossover: Phép toán lai ghép làm việc bằng cách chọn hai cá thể cha mẹ từ

quần thể. Hai cây con ngẫu nhiên được chọn từ mỗi cha mẹ ấy rồi được hoán đổi để tạo ra một hoặc hai cá thể con. Những thông tin khác cũng được khai thác trong khi thực hiện phép toán này, chẳng hạn thông tin liên quan đến kích cỡ [32], độ sâu [45], vị trí [46] hoặc tính đồng nhất [32] của các cây con.

Mutation: Phép toán biến dị được dùng trong GP thuộc về một trong ba kiểu:

_ Biến dị điểm (point mutation): một nút duy nhất trong cây cha được chọn

rồi được thay thế bằng một nút được sinh ngẫu nhiên có cùng kiểu. Ví dụ:

một nút hàm được thay bằng một nút hàm có cùng số ngôi, còn một nút kết thúc được thay bằng một nút kết thúc được chọn ngẫu nhiên nào đó.

Một phần của tài liệu Luận văn thạc sĩ Khoa học máy tính: Bài toán phân lớp không cân đối cho dữ liệu giáo dục (Trang 37 - 53)

Tải bản đầy đủ (PDF)

(131 trang)