5. Bố cục của luận văn
2.2. HUẤN LUYỆN VÀ XÂY DỰNG MẠNG NƠRON
2.2.1. Các phương pháp học
Khái niệm: Học là quá trình thay đổi hành vi của các vật theo một cách nào đó làm cho chúng có thể thực hiện tốt hơn trong tương lai.
Một mạng nơron được huyấn luyện sao cho với một tập các vector đầu vào X, mạng có khả năng tạo ra tập các vector đầu ra mong muốn Y của nó. Tập X được sử dụng cho huấn luyện mạng được gọi là tập huấn luyện (training set). Các phần tử x thuộc X được gọi là các mẫu huấn luyện
(training example). Quá trình huấn luyện bản chất là sự thay đổi các trọng số liên kết của mạng. Trong quá trình này, các trọng số của mạng sẽ hội tụ dần tới các giá trị sao cho với mỗi vector đầu vào x từ tập huấn luyện, mạng sẽ cho ra vector đầu ra y như mong muốn
Có ba phương pháp học phổ biến là học có giám sát (supervised
learning), học không giám sát (unsupervised learning) và học tăng cường
(Reinforcement learning):
♦ Học có giám sát: Là quá trình học có sự tham gia giám sát của một “thầy giáo”. Cũng giống như việc ta dạy một em nhỏ các chữ số. Ta đưa ra một số “1” và bảo với em đó rằng đây là số “1”. Việc này được thực hiện trên tất cả các mẫu chữ cái. Sau đó khi kiểm tra ta sẽ đưa ra một chữ số bất kì (có thể viết hơi khác đi) và hỏi em đó đây là chữ gì?
Với học có giám sát, tập mẫu huấn luyện được cho dưới dạng D = {(x,t) | (x,t) [IRN x RK]}, trong đó: x = (x1, x2, ..., xN) là vector đặc trưng N chiều của mẫu huấn luyện và t = (t1, t2, ..., tK) là vector mục tiêu K chiều tương ứng, nhiệm vụ của thuật toán là phải thiết lập được một cách tính toán trên mạng như thế nào đó để sao cho với mỗi vector đặc trưng đầu vào thì sai số giữa giá trị đầu ra thực sự của mạng và giá trị mục tiêu tương ứng là nhỏ nhất. Chẳng hạn mạng có thể học để xấp xỉ một hàm t = f(x) biểu diễn mối quan hệ trên tập các mẫu huấn luyện (x, t).
Như vậy với học có giám sát, số lớp cần phân loại đã được biết trước. Nhiệm vụ của thuật toán là phải xác định được một cách thức phân lớp sao cho với mỗi vector đầu vào sẽ được phân loại chính xác vào lớp của nó.
♦ Học không giám sát: Là việc học không cần có bất kỳ một sự giám sát nào.
Trong bài toán học không giám sát, tập dữ liệu huấn luyện được cho dưới dạng: D = {(x1, x2, ..., xN)}, với (x1, x2, ..., xN) là vector đặc trưng của mẫu huấn luyện. Nhiệm vụ của thuật toán là phải phân chia tập dữ liệu D thành các nhóm con, mỗi nhóm chứa các vector đầu vào có đặc trưng giống nhau.
Như vậy với học không giám sát, số lớp phân loại chưa được biết trước, và tùy theo tiêu chuẩn đánh giá độ tương tự giữa các mẫu mà ta có thể có các lớp phân loại khác nhau.
♦ Học tăng cường: đôi khi còn được gọi là học thưởng-phạt (reward-penalty learning), là sự tổ hợp của cả hai mô hình trên. Phương pháp này cụ thể như sau: với vector đầu vào, quan sát vector đầu ra do mạng tính được. Nếu kết quả được xem là “tốt” thì mạng sẽ được thưởng theo nghĩa tăng các trọng số kết nối lên; ngược lại mạng sẽ bị phạt, các trọng số kết nối không thích hợp sẽ được giảm xuống. Do đó học tăng cường là học theo nhà phê bình (critic), ngược với học có giám sát là học theo thầy giáo (teacher).
2.2.2. Học có giám sát trong các mạng nơron
Học có giám sát có thể được xem như việc xấp xỉ một ánh xạ: X→ Y, trong đó X là tập các vấn đề và Y là tập các lời giải tương ứng cho vấn đề đó. Các mẫu (x, y) với x = (x1, x2, . . ., xn) X, y = (yl, y2, . . ., ym)Y được cho
trước. Học có giám sát trong các mạng nơron thường được thực hiện theo các bước sau:
♦ Bước 1: Xây dựng cấu trúc thích hợp cho mạng nơron, chẳng hạn có (n + 1) nơron vào (n nơron cho biến vào và 1 nơron cho ngưỡng x0), m nơron đầu ra, và khởi tạo các trọng số liên kết của mạng.
♦ Bước 2: Đưa một vector x trong tập mẫu huấn luyện X vào mạng
♦ Bước 4: So sánh vector đầu ra mong muốn y (là kết quả được cho trong tập huấn luyện) với vector đầu ra o do mạng tạo ra; nếu có thể thì đánh giá lỗi.
♦ Bước 5: Hiệu chỉnh các trọng số liên kết theo một cách nào đó sao cho ở lần tiếp theo khi đưa vector x vào mạng, vector đầu ra o sẽ giống với y hơn.
♦ Bước 6: Nếu cần, lặp lại các bước từ 2 đến 5 cho tới khi mạng đạt tới trạng thái hội tụ. Việc đánh giá lỗi có thể thực hiện theo nhiều cách, cách dùng nhiều nhất là sử dụng lỗi tức thời: Err = (o - y), hoặc Err = |o - y|; lỗi trung bình bình phương (MSE: mean-square error): Err = (o- y)2/2;
Có hai loại lỗi trong đánh giá một mạng nơron. Thứ nhất, gọi là lỗi rõ ràng (apparent error), đánh giá khả năng xấp xỉ các mẫu huấn luyện của một mạng đã được huấn luyện. Thứ hai, gọi là lỗi kiểm tra (test error), đánh giá
khả năng tổng quá hóa của một mạng đã được huấn luyện, tức khả năng phản ứng với các vector đầu vào mới. Để đánh giá lỗi kiểm tra chúng ta phải biết đầu ra mong muốn cho các mẫu kiểm tra.
Thuật toán tổng quát ở trên cho học có giám sát trong các mạng nơron có nhiều cài đặt khác nhau, sự khác nhau chủ yếu là cách các trọng số liên kết được thay đổi trong suốt thời gian học. Trong đó tiêu biểu nhất là thuật toán lan truyền ngược.
2.2.3 Thuật toán lan truyền ngược
Ta sử dụng một số kí hiệu sau: - j: nơron thứ j (hay nút thứ j)
- Xj: vector đầu vào của nút thứ j - Wj: vector trọng số của nút thứ j - xji: đầu vào của nút thứ j từ nút thứ i
- wji: trọng số trên xji
- oj: đầu ra của nút thứ j
- tj: đầu ra mong muốn của nút thứ j
- Downstream(j): Tập tất cả các nút nhận đầu ra của nút thứ j làm một giá trị đầu vào.
- η: tốc độ học
- f: hàm truyền với f(x) = 1 / (1 + e-x)
Thuật toán lan truyền ngược được mô tả như sau:
Input:
- Mạng feed-forward với ni đầu vào, nh nút ẩn và no đầu ra. - Hệ số học η
- Tập dữ liệu huấn luyện D = {là vector đầu vào, là vector đầu ra mong muốn}.
Output: Các vector trọng số
Thuật toán:
Bước 1: Khởi tạo trọng số bởi các giá trị ngẫu nhiên nhỏ.
Bước 2: Lặp lại cho tới khi thỏa mãn điều kiện kết thúc. Với mỗi mẫu, thực hiện các bước sau:
- Tính đầu ra oj cho mỗi nút j:
oj = f(d – bj) với d = Σxjiwji
- Với mỗi nút k thuộc tầng ra, tính δk theo công thức:
δk = (tk – ok)(1 – ok)ok
- Với mỗi nút h thuộc tầng ẩn, tính δh theo công thức:
δh = oh(1 – oh) Σδkwkh với k Downstream(j)
- Cập nhật: wji = wji + Δwji
Trong đó Δwji = ηδkxji
2.2.4. Các vấn đề trong xây dựng mạng MLP
a. Kích thước mẫu
Không có nguyên tắc nào hướng dẫn kích thước mẫu phải là bao nhiêu đối với một bài toán cho trước. Hai yếu tố quan trọng ảnh hưởng đến kích thước mẫu:
♦ Dạng hàm đích: khi hàm đích càng phức tạp thì kích thước mẫu cần tăng.
♦ Nhiễu: khi dữ liệu bị nhiễu (thông tin sai hoặc thiếu thông tin) kích thước mẫu cần tăng.
Đối với mạng truyền thẳng (feedforward), cho hàm đích có độ phức tạp nhất định, kèm một lượng nhiễu nhất định thì độ chính xác của mô hình luôn có một giới hạn nhất định. Có thể cần tập mẫu vô hạn để đạt đến giới hạn chính xác. Nói cách khác độ chính xác của mô hình là hàm theo kích thước tập mẫu. Khi kích thước mẫu tăng, độ chính xác sẽ được cải thiện - lúc đầu nhanh, nhưng chậm dần khi tiến đến giới hạn.
Dạng tổng quát của mối liên hệ giữa sai số và kích thước mẫu như sau:
Hình 2.9. Mối liên hệ giữa sai số và kích thước mẫu
Trong thực hành thường gặp phải 2 vấn đề sau:
♦ Đối với hầu hết bài toán thực tế, mẫu bị ràng buộc chặt chẽ với dữ liệu có sẵn. Ta thường không có được số lượng mẫu mong muốn.
♦ Kích thước mẫu cũng có thể bị giới hạn bởi bộ nhớ hoặc khả năng lưu trữ của máy tính. Nếu tất cả các dữ liệu đồng thời được giữ trong bộ nhớ suốt thời gian luyện, kích thước bộ nhớ máy tính sẽ bị chiếm dụng nghiêm trọng.
Nếu lưu trữ trên đĩa sẽ cho phép dùng mẫu lớn hơn nhưng thao tác đọc đĩa từ thế hệ này sang thế hệ khác khiến cho tiến trình chậm đi rất nhiều.
Việc tăng kích thước mẫu không làm tăng thời gian luyện. Những tập mẫu lớn hơn sẽ yêu cầu ít thế hệ luyện hơn. Nếu ta tăng gấp đôi kích thước của mẫu, mỗi thế hệ luyện sẽ tốn thời gian khoảng gấp đôi, nhưng số thế hệ cần luyện sẽ giảm đi một nửa. Điều này có nghĩa là kích thước mẫu (cũng có nghĩa là độ chính xác của mô hình) không bị giới hạn bởi thời gian luyện.
Luật cơ bản là sử dụng mẫu lớn nhất có thể sao cho đủ khả năng lưu trữ trong bộ nhớ trong (nếu lưu trữ đồng thời) hoặc trên đĩa từ (nếu đủ thời gian đọc từ đĩa).
b. Mẫu con
Trong xây dựng mô hình cần chia tập mẫu thành 2 tập con: một để xây dựng mô hình gọi là tập huấn luyện (training set), và một để kiểm nghiệm mô hình gọi là tập kiểm tra (test set). Thông thường dùng 2/3 mẫu cho huấn luyện và 1/3 cho kiểm tra. Điều này là để tránh tình trạng quá khớp (overfitting).
c. Sự phân tầng mẫu
Nếu ta tổ chức mẫu sao cho mỗi mẫu trong quần thể đều có cơ hội như nhau thì tập mẫu được gọi là tập mẫu đại diện. Tuy nhiên khi ta xây dựng một mạng để xác định xem một mẫu thuộc một lớp hay thuộc một loại nào thì điều ta mong muốn là các lớp có cùng ảnh hưởng lên mạng, để đạt được điều này ta có thể sử dụng mẫu phân tầng. Xét ví dụ sau:
nguồn dữ liệu của ta có 100.000 ký tự mà mỗi ký tự được kèm theo một mã cho biết nó là chữ cái nào. Chữ cái xuất hiện thường xuyên nhất là e, nó xuất hiện 11.668 lần chiếm khoảng 12%; chữ cái xuất hiện ít nhất là chữ z, chỉ có 50 lần chiếm 0,05%.
Trước hết do giới hạn của bộ nhớ máy tính, giả sử bộ nhớ chỉ có thể xử lý được 1300 mẫu. Ta tạo hai dạng tập mẫu: tập mẫu đại diện và tập mẫu phân tầng. Với tập mẫu đại diện, chữ e sẽ xuất hiện 152 lần (11,67% của 1300) trong khi đó chữ z chỉ xuất hiện một lần (0,05% của 1300). Ngược lại ta có thể tạo tập mẫu phân tầng để mỗi chữ có 50 mẫu. Ta thấy rằng nếu chỉ có thể dùng 1300 mẫu thì tập mẫu phân tầng sẽ tạo ra mô hình tốt hơn. Việc tăng số mẫu của z từ 1 lên 50 sẽ cải thiện rất nhiều độ chính xác của z, trong khi nếu giảm số mẫu của e từ 152 xuống 50 sẽ chỉ giảm chút ít độ chính xác của e.
Bây giờ giả sử ta dùng máy tính khác có bộ nhớ đủ để xử lý một lượng mẫu gấp 10 lần, như vậy số mẫu sẽ tăng lên 13000. Rõ ràng việc tăng kích thước mẫu sẽ giúp cho mô hình chính xác hơn. Tuy nhiên ta không thể dùng tập mẫu phân tầng như trên nữa vì lúc này ta sẽ cần tới 500 mẫu cho chữ z trong khi ta chỉ có 50 mẫu trong nguồn dữ liệu. Để giải quyết điều này ta tạo tập mẫu như sau: tập mẫu gồm tất cả các chữ hiếm với số lần xuất hiện của nó và kèm thêm thông tin về chữ có nhiều mẫu nhất. Chẳng hạn ta tạo tập mẫu có 50 mẫu của chữ z (đó là tất cả) và 700 mẫu của chữ e (có nhiều mẫu nhất). Như vậy trong tập mẫu của ta, chữ e có nhiều hơn chữ z 14 lần. Nếu ta muốn các chữ z cũng có nhiều ảnh hưởng như các chữ e, khi học chữ z ta cho chúng trọng số lớn hơn 14 lần. Để làm được điều này ta có thể can thiệp chút ít vào quá trình lan truyền ngược trên mạng. Khi mẫu học là chữ z, ta thêm vào 14 lần đạo hàm, nhưng khi mẫu là chữ e ta chỉ thêm vào 1 lần đạo hàm. Ở cuối thế hệ, khi cập nhật các trọng số, mỗi chữ z sẽ có ảnh hưởng hơn mỗi chữ e là 14 lần, và tất cả các chữ z gộp lại sẽ có bằng có ảnh hưởng bằng tất
cả các chữ e.
d. Chọn biến: Dựa vào dữ liệu có sẵn có, khả năng thu thập dự liệu, ý
kiến chuyên gia trong nghiên cứu của tôi, tôi sử dụng số liệu của nghiên cứu trước và dữ liệu săn có.
2.2.4.2 Xác định các tham số cho mạng
a. Chọn hàm truyền
Không phải bất kỳ hàm truyền nào cũng cho kết quả như mong muốn. Để trả lời cho câu hỏi «hàm truyền như thế nào được coi là tốt ? » là điều không hề đơn giản. Có một số quy tắc khi chọn hàm truyền như sau:
♦ Không dùng hàm truyền tuyến tính ở tầng ẩn. Vì nếu dùng hàm truyền tuyến tính ở tầng ẩn thì sẽ làm mất vai trò của tầng ẩn đó: Xét tầng ẩn thứ i:
Tổng trọng số ni = wiai-1 + bi ai = f(ni) = wf ni +bf (hàm truyền tuyến tính) Khi đó: tổng trọng số tại tầng thứ (i + 1) ni+1 = wi+ai + bi+1 = wi+1[wf ni +bf] + bi+1 = wi+1 [wf(wiai-1 + bi) + bf] + bi+1 = Wai-1 + b
Như vậy ni+1 = Wai-1 + b, và tầng i đã không còn giá trị nữa.
♦ Chọn các hàm truyền sao cho kiến trúc mạng nơron là đối xứng (tức là với đầu vào ngẫu nhiên thì đầu ra có phân bố đối xứng). Nếu một mạng nơron không đối xứng thì giá trị đầu ra sẽ lệch sang một bên, không phân tán lên toàn bộ miền giá trị của output. Điều này có thể làm cho mạng rơi vào trạng thái bão hòa, không thoát ra được.
Trong thực tế người ta thường sử dụng các hàm truyền dạng – S. Một hàm s(u) được gọi là hàm truyền dạng – S nếu nó thỏa mãn 3 tính chất sau:
s(u) ≤ C2 với mọi u.
– s(u) là hàm đơn điệu tăng: giá trị của s(u) luôn tăng khi u tăng. Do tính chất thứ nhất, s(u) bị chặn, nên s(u) sẽ tiệm cận tới giá trị cận trên khi u dần tới dương vô cùng, và tiệm cận giá trị cận dưới khi u dần tới âm vô cùng.
– s(u) là hàm khả vi: tức là s(u) liên tục và có đạo hàm trên toàn trục số. Một hàm truyền dạng - S điển hình và được áp dụng rộng rãi là hàm Sigmoid.
b. Xác định số nơron tầng ẩn
Câu hỏi chọn số lượng noron trong tầng ẩn của một mạng MLP thế nào là khó, nó phụ thuộc vào bài toán cụ thể và vào kinh nghiệm của nhà thiết kế mạng. Nếu tập dữ liệu huấn luyện được chia thành các nhóm với các đặc tính tương tự nhau thì số lượng các nhóm này có thể được sử dụng để chọn số lượng nơron ẩn. Trong trường hợp dữ liệu huấn luyện nằm rải rác và không chứa các đặc tính chung, số lượng kết nối có thể gần bằng với số lượng các mẫu huấn luyện để mạng có thể hội tụ. Có nhiều đề nghị cho việc chọn số lượng nơron tầng ẩn h trong một mạng MLP. Chẳng hạn h phải thỏa mãn h>(p-1)/(n+2), trong đó p là số lượng mẫu huấn luyện và n là số lượng đầu vào của mạng. Càng nhiều nút ẩn trong mạng, thì càng nhiều đặc tính của dữ liệu huấn luyện sẽ được mạng nắm bắt, nhưng thời gian học sẽ càng tăng.
c. Khởi tạo trọng số
Trọng thường được khởi tạo bằng phương pháp thử sai, nó mang tính chất kinh nghiệm và phụ thuộc vào từng bài toán. Việc định nghĩ thế nào là một bộ trọng tốt cũng không hề đơn giản. Một số quy tắc khi khởi tạo trọng: