Giả sử rằng chúng ta đang có một mạng nơron được thành từ các thành phần được mô tả trên hình vẽ, gồm ba lớp: một lớp vào, một lớp ẩn và một lớp ra; InputSynapse để đọc các dữ liệu học, TeacherSynapse dùng để tính lổi phát sinh sau một chu trình lan truyền qua mạng. Một đối tượng Monitor để điều khiển toàn bộ tiến trình học của mạng. Như đã nêu trên tất cả các đối tượng đều có tham chiếu đến đối tượng Monitor để lấy thông tin và trạng thái của mạng.
52 trang |
Chia sẻ: oanh_nt | Lượt xem: 1634 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đề tài Nghiên cứu về mạng nơron, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Thông thường hàm sai số là tổng bình phương lỗi (SSE – Sum Squared Error).
Khái niệm cần biết thêm là mặt phẳng sai số. Mỗi trọng số và ngưỡng trong tổng số N trọng số và ngưỡng được xem là một chiều trong không gian. Chiều thứ (N + 1) là sai số mạng. Đối với bất kỳ cấu hình trọng số nào, lỗi cũng có thể vẽ ở chiều thứ (N+1), tạo thành mặt phẳng lỗi. Đối tượng của việc huấn luyện mạng là tìm điểm thấp nhất trong mặt phẳng nhiều chiều này.
Trong mạng tuyến tính có hàm sai số SSE, mặt phẳng sai số là parapol, nghĩa là có một giá trị nhỏ nhất. Do đó chúng dễ dàng xác định giá trị cực tiểu. Chúng ta không thể xác định được vị trí giá trị nhỏ nhất của mặt phẳng sai số, và vì thế huấn luyện mạng mạng nơron nhân tạo cần phải phân tích tỉ mĩ mặt phẳng sai số. Từ cấu hình ngẫu nhiên các trọng số và ngưỡng ban đầu (nghĩa là điểm ngẫu nhiên trên mặt phẳng sai số) các thuật toán huấn luyện tìm kiếm đến giá trị nhỏ nhất. Thông thường, việc tìm kiếm dựa trên gradient (độ dốc) trên mặt phẳng sai số tại điểm hiện tại, và sau đó sẽ di chuyển xuống giá trị nhỏ hơn. Do đó có nhiều khả năng thuật toán dừng ở điểm thấp là điểm giá trị cực tiểu cục bộ (nhưng dù sao cũng hy vọng là giá trị nhỏ nhất).
6.2. Thuật toán backpropagation.
Các ví dụ phổ biến nhất về thuật toán huấn luyện mạng nơron nhân tạo là backpropagation. Các thuật toán bậc hai hiện đại như conjugate gradient descent và Levenberg – Marquardt cơ bản nhanh hơn trong nhiều vấn đề, nhưng backpropagation vẫn có một số ưu điểm trong một vài trường hợp khác, và là thuật toán dễ hiểu nhất.
Trong backpropagation, vector gradient của mặt phẳng sai số được tính toán. Vector này chỉ ra đường giảm dốc nhất và vị trí hiện tại, vì thế chúng ta biết rằng nếu chúng ta di chuyển dọc theo nó một “khoảng ngắn”, cuối cùng chúng ta sẽ đạt được giá trị nhỏ nhất. Khó khăn ở đây là quyết định độ lớn của từng bước di chuyển.
Bước lớn có thể hội tụ nhanh hơn, nhưng có thể vượt quá điểm cần đến hay đi ra khỏi vùng có cực tiểu (nếu mặt phẳng sai số bị lệch tâm). Ngược lại, bước quá nhỏ có thể đi đến đúng hướng nhưng chúng ta cần phải thực hiện phép lặp nhiều lần. Trong thực tiễn, kích thước bước tỷ lệ với độ dốc và hằng số đặc biệt: tốc độ học. Giá trị chính xác tốc độ học phụ thuộc vào từng ứng dụng cụ thể, và thường được chọn qua thực tiễn.
Thuật toán thường có thêm khái niệm momentum. Momentum sẽ thúc đẩy di chuyển đi theo theo một hướng xác định nếu sau khi qua nhiều bước đi cùng một hướng, thuật toán sẽ di chuyển nhanh hơn, đưa đến khả năng thoát khỏi vùng giá trị cực tiểu cục bộ và cũng có thể di chuyển nhanh chóng qua vùng bằng phẳng.
Thuật toán do đó xử lý lặp đi lặp lại, sau một số epoch. Ở mỗi epoch, các trường hợp huấn luyện sẽ được đưa ra xem xét trong mạng, các ngõ ra thực và mong muốn được so sánh và tính toán lỗi. Lỗi này kết hợp với gradent mặt phẳng sai số, sử dụng để điều chỉnh trọng số và sau đó quá trình xử lý lặp lại. Cấu hình mạng ban đầu là ngẫu nhiên, và huấn luyện chỉ dừng lại khi số vòng lặp epoch tối đa cho phép xảy ra hay khi sai số đạt được ở một mức cho phép, hoặc khi sai số không tăng nữa.
6.3. Học quá mức và tổng quát hóa
Một vấn đề mà các kỹ thuật trên không thực sự cực tiểu sai số là khi chúng ta đưa một trường hợp mới vào mạng. Nói cách khác, thuộc tính mong muốn nhất của mạng là khả năng tổng quát hóa các trường hợp mới. Thực ra, mạng được huấn luyện cực tiểu hóa sai số dựa trên tập huấn luyện, tập này không hoàn hảo và hữu hạn, rõ ràng sẽ không đúng khi cực tiểu sai số trên mặt phẳng sai số thực – mặt phẳng sai số của mô hình cơ sở và chưa biết.
Sự phân biệt ở đây chính là học quá mức hay khít quá mức. Cách dễ nhất để minh họa khái niệm này là việc dò theo đồ thị đường cong đa thức hơn là minh họa bằng mạng nơron nhân tạo nhưng ý nghĩa thì giống nhau.
Đa thức là phương trình có các hệ số và lũy thừa hằng số.
Ví dụ: y = 2x + 3
y= 3x2 + 4x + 1
Các đa thức khác nhau có đồ thị khác nhau, với bậc lớn hơn (và do đó có nhiều số hạng hơn) sẽ có đồ thị phức tạp hơn. Với một tập dữ liệu cho trước, chúng ta muốn tìm ra đa thức biểu diễn dữ liệu này. Dữ liệu có thể có nhiễu, vì thế chúng ta không cần thiết tìm ra phương trình đúng nhất cho tất cả các điểm. Đa thức bậc thấp hơn sẽ không thể đủ chính xác với tất cả các điểm, trong khi đó đa thức bậc cao hơn chính xác tất cả các dữ liệu sẽ rất phức tạp, đa thức này sẽ có đồ thị không đúng với hàm cơ sở.
Mạng nơron nhân tạo cũng có vấn đề như vậy. Mạng có càng nhiều trọng số thì hàm càng phức tạp và do đó sẽ rơi vào tình trạng khít quá mức. Mạng có ít trọng số hơn sẽ không đủ khả năng để mô phỏng hàm cơ sở. Ví dụ như mạng không có các lớp ẩn chỉ mô phỏng hàm truyền tuyến tính đơn giản.
Vậy chúng ta sẽ chọn lựa độ phức tạp của mạng đúng như thế nào? Mạng lớn hơn sẽ hầu như luôn luôn có được sai số nhỏ hơn, nhưng điều này có thể là khít quá mức hơn là một mô hình tốt.
Câu trả lời là sử dụng xác nhận mức giao. Vài mẫu huấn luyện được lưu lại và không thực sự dùng cho huấn luyện trong thuật toán backpropagation. Để thay thế, những mẫu này được sử dụng để kiểm tra độc lập trong quá trình của thuật toán. Như vậy hiệu suất ban đầu của mạng luôn luôn bằng nhau ở những tập huấn luyện và xác minh lại. Trong quá trình huấn luyện, sai số huấn luyện tự nhiên giảm xuống, và cho phép huấn luyện cực tiểu hóa hàm sai số thực, sai số xác minh cũng giảm xuống. Tuy nhiên, nếu sai số xác minh không giảm, hay bắt đầu tăng lên, điều này có nghĩa là mạng bắt đầu khít quá mức dữ liệu, và huấn luyện nên dừng lại (có thể cài đặt mạng nơron nhân tạo tự động dừng lại khi bắt đầu học quá mức). Trường hợp khít quá mức xảy ra trong quá trình xử lý huấn luyện gọi là học quá mức. Trong trường hợp này, chúng ta nên giảm số nơron ẩn hay/và lớp ẩn vì mạng quá mạnh đối với vấn đề này. Ngược lại, nếu mạng không đủ mạnh để mô phỏng hàm cơ sở, học quá mức không có khả năng xảy ra, cũng như sai số huấn luyện hay xác minh lại không rơi vào mức bão hòa.
Những vấn đề liên quan đến cực tiểu cục bộ, và những quyết định sử dụng quá kích thước của mạng, nghĩa là chúng ta phải chạy thử trên nhiều mạng khác nhau, có thể huấn luyện mỗi mạng vài lần (để tránh rơi vào trường hợp cực tiểu cục bộ sai số) và quan sát hiệu suất từng mạng. Điều quan trọng là quan sát sai số xác minh. Tuy nhiên, nên nhớ rằng nên mô phỏng mạng đơn giản hơn là mạng phức tạp, chúng ta cũng thể chọn mạng nhỏ hơn là mạng lớn có khả năng cải thiện sai số xác minh không đáng kể.
Vấn đề đối với kỹ thuật này về việc thí nghiệm lặp đi lặp lại là tập xác minh không thực sự đóng vai trò chọn lựa mạng, nghĩa là nó chỉ là một phần trong quá trình huấn luyện. Độ tin cậy của nó chỉ ở mức độ vừa phải – khi số lần thí nghiệm đủ, chúng ta có khả năng rơi vào trường hợp mạng thực hiện tốt trên tập xác minh. Để thêm độ tin cậy hiệu suất của mô hình cuối cùng thì trong thực tế thường sử dụng thêm một tập thứ ba – là tập kiểm tra. Mô hình cuối cùng được kiểm tra với tập dữ liệu kiểm tra để đảm bảo rằng kết quả của tập xác minh và huấn luyện là thật.
Tóm lại, việc thiết kế mạng (khi các biến ngõ vào đã được chọn) gồm các bước sau:
Chọn cấu hình ban đầu (thường một lớp ẩn có số nơron ẩn bằng nửa tổng số nơron ngõ vào và ngõ ra).
Thực hiện lặp đi lặp lại số thí nghiệm của mỗi cấu hình, giữ lại mạng tốt nhất (thường dựa trên sai số xác minh). Thí nghiệm nhiều lần trên mỗi cấu hình mạng để tránh rơi vào sai số cục bộ.
Trong mỗi lần thí nghiệm, nếu xảy ra việc học chưa đủ (mạng không đạt được mức hiệu suất chấp nhận) thì thử tăng số nơron trong lớp ẩn. Nếu không hiệu quả, thì thêm một lớp ẩn.
Nếu xảy ra học quá mức (sai số xác minh bắt đầu tăng lên) thử bỏ bớt một vài nơron ẩn (và có thể bỏ lớp ẩn).
6.4. Chọn lựa dữ liệu
Các bước mô tả trên đều dựa trên một giả định, đó là dữ liệu huấn luyện, xác minh và kiểm tra phải đại diện cho mô hình cơ sở (hơn nữa, ba tập này phải độc lập). Nếu dữ liệu huấn luyện không đặc trưng thì giá trị mô hình chỉ là một sự dàn xếp, xấu nhất có thể không sử dụng được.
Tương lai không phải là quá khứ. Dữ liệu huấn luyện đặc trưng cho những gì đã xảy ra. Nếu môi trường thay đổi, mối quan hệ nơron trong mạng không còn phù hợp nữa.
Tất cả các trường hợp phải được khái quát. Mạng nơron nhân tạo chỉ có thể học từ những mẫu được đưa vào. Do đó mạng nơron nhân tạo không thể có một quyết định đúng khi nơron chưa được huấn luyện.
Mạng chỉ có thể học theo cách dễ nhất mà nó có thể.
mỗi epoch tốt hơn). Backpropagation có tính chất tốt như nhau nếu dữ liệu rất ít.
CHƯƠNG 2: MÔ HÌNH MẠNG NƠRON NHÂN TẠO
Mô hình mạng Nơron tổng quát có dạng như sau:
Ngày nay mạng Nơron có thể giải quyết nhiều vấn đề phức tạp đối với con người, áp dụng trong nhiều lĩnh vực như nhận dạng, định dạng, phân loại, xử lý tín hiệu, hình ảnh v.v…
1. Mô hình nơron và cấu trúc mạng
1.1. Mô hình nơron
Cấu trúc một Nơron
Ngõ vào một nơron có thể là đại lượng vô hướng hoặc có hướng, đại lượng này được nhân với trọng số tương ứng để đưa vào nơron, hoặc có thể cộng thêm ngưỡng (bias), thường bằng 1. Dưới đây là mô hình một nơron với ngõ vào vô hướng p không có ngưỡng b (hình bên trái) và có ngưỡng b (hình bên phải). Ngõ vào vô hướng p được nhân với trọng số vô hướng w tạo thành wp, đối số wp (hình bên trái) qua hàm truyền f cho kết quả đầu ra là vô hướng a = f(wp). Hình bên phải là nơron có ngưỡng b, giá trị b được cộng với wp rồi qua hàm truyền f cho kết quả đầu ra là vô hướng a = f(wp+b). Có thể điều chỉnh những thông số của nơron như trọng số và ngưỡng (w và b) để đạt được yêu cầu mong muốn nghĩa là “huấn luyện” mạng.
Hàm truyền
Có rất nhiều hàm truyền áp dụng trong mạng nơron nhân tạo, trong đó ba hàm thường sử dụng nhất là Hard Limit, Linear, Log-Sigmoid.
Tổng quát với một hàm truyền có đầu vào là một hoặc một nhóm vector thì đầu ra là
a = f ( p * w + b ).
Với a: đầu ra
p: đầu vào
w: trọng số
b: ngưỡng
f: hàm truyền
Vậy một ngõ vào với các hàm truyền khác nhau sẽ cho các kết quả khác nhau. Để có giải pháp tối ưu thì cần phải có kinh nghiệm sử dụng các hàm truyền hoặc phải tốn một khoảng thời gian để thử nghiệm hàm truyền.
Nơron với Vector nhập
Một nơron được cho trên hình vẽ sau với vector nhập p = [p1 , p2 , ……pR ], trọng số W = w1,1, w1,2,……w1,R, ngưỡng b và hàm truyền f . Tổng đối số và ngưỡng tạo ở ngõ ra n là
n = w1,1p1 + w1,2,p2 + ……w1,R pR + b
hay n = W*p + b
Nếu có nhiều nơron thì cách biểu diễn trên không hiệu quả, do đó có thể định nghĩa một lớp gồm nhiều nơron như sau.
1.2. Cấu trúc mạng
Hai hay nhiều nơron kết hợp thành một lớp, và một mạng riêng biệt có thể chứa một hay nhiều lớp nơron.
Một lớp nơron
Trong hình dưới mô tả một lớp nơron với: R: số phần tử của vectơ đầu vào
S: số nơron trong lớp
a: vector ngõ ra của lớp nơron
Ma trận trọng số W:
Một lớp mạng được vẽ gọn như sau:
Mạng nhiều lớp nơron
Mạng có nhiều lớp, mỗi lớp có một ma trận W, một ngưỡng b và một vectơ ngõ ra a. Thông thường giá trị ra của một lớp là giá trị vào của lớp tiếp theo. Mỗi lớp trong mạng đảm nhiệm vai trò khác nhau, lớp cho kết quả ở đầu ra của mạng được gọi là lớp ngõ ra _ output layer, tất cả các lớp còn lại được gọi là lớp ẩn _ hidden layers. Mạng đa lớp có khả năng xử lý rất lớn. Chẳng hạn như một mạng có hai lớp, lớp thứ nhất là sigmoid, lớp thứ hai là linear có thể được huấn luyện đến một hàm gần đúng với một số kết nối cố định.
2. Cấu trúc dữ liệu
Cấu trúc định dạng của dữ liệu vào ảnh hưởng đến việc mô phỏng của mạng. Có hai loại mạng static network và dynamic network. Hai kiểu vector đầu vào cơ bản là kiểu xảy ra đồng thời (concurrently) và kiểu xảy ra liên tục theo thời gian (sequentially).
Kiểu đầu vào xảy ra đồng thời được mô phỏng trong mạng tĩnh (không có hồi tiếp hoặc trễ), thứ tự của các vector đầu vào không quan trọng và chúng không ảnh hưởng lẫn nhau.
Kiểu đầu vào xảy ra liên tục được mô phỏng trong mạng dynamic. Thứ tự các giá trị đầu vào rất quan trọng. Trong trường hợp này, giá trị đầu ra thu được là do giá trị vào hiện tại và giá trị vào trước đó. Nếu thay đổi thứ tự của dữ liệu vào thì sẽ làm thay đổi dữ liệu ra.
3. Kiểu huấn luyện
Trong phần này mô tả hai kiểu huấn luyện khác nhau.
Incremental training: trọng số và ngưỡng của mạng được cập nhập mỗi khi có dữ liệu vào mạng. Kiểu này ứng dụng trong cả hai mạng tĩnh và động, tuy nhiên thường dùng trong mạng động nhiều hơn, như là những bộ lọc thích ứng.
Batch training: trọng số và ngưỡng của mạng chỉ được cập nhập sau khi tất cả dữ liệu đã vào mạng, dùng trong cả hai mạng tĩnh và động.
4. Kết luận
Đầu vào của một nơron gồm ngưỡng b và tổng các trọng số vào. Ngõ ra của nơron phụ thuộc vào đầu vào và hàm truyền.
Nơron đơn rất ít sử dụng. Tuy nhiên một vài nơron có thể kết hợp thành một lớp hay nhiều lớp thì khả năng xử lý cao hơn. Vấn đề đơn giản có thể trình bày bằng một lớp đơn. Tuy nhiên, nó không giải quyết được nhiều vấn đề phức tạp. Mạng đa lớp feedforward có khả năng giải quyết lớn hơn.
Cấu trúc một mạng có thể mô tả bằng số lớp, số nơron trong một lớp, hàm truyền của mỗi lớp và kết nối giữa các lớp. Tùy thuộc vấn đề mạng cần giải quyết mà có cấu trúc khác nhau.
Nếu một ánh xạ tuyến tính cần mô tả nên sử dụng nơron tuyến tính. Tuy nhiên, mạng tuyến tính không thể thực hiện bất cứ tính toán phi tuyến nào. Sử dụng hàm truyền phi tuyến để tạo cho mạng có khả năng thực hiện mối quan hệ phi tuyến giữa đầu vào và đầu ra. Mạng có ngưỡng b có thể mô tả mối quan hệ giữa đầu vào và đầu ra dễ dàng hơn mạng không có ngưỡng b. Ví dụ một nơron không có ngưỡng sẽ luôn tạo ra ngõ vào zero cho hàm truyền (khi tất cả ngõ vào nơron là zero). Tuy nhiên một nơron với ngưỡng có thể học để tạo ra một ngõ nhập cho bất kỳ hàm truyền
CHƯƠNG 3: BACKPROPAGATION
Backpropagation thực hiện dựa trên quy luật học Widrow–Hoff tổng quát hóa cho mạng đa lớp và các hàm truyền phi tuyến khác nhau. Mạng có ngưỡng, một lớp sigmoid và một lớp tuyến tính ngõ ra có thể mô phỏng bất kì hàm nào với số mẫu rời rạc hữu hạn.
Thuật toán Backpropagation chuẩn là gradient descent, chính là quy luật học Widrow–Hoff. Khái niệm Backpropagation mô tả cách tính gradient trong mạng đa lớp phi tuyến. Thuật toán cơ bản có một số thay đổi dựa trên các kỹ thuật tối ưu hóa chuẩn như là các phương pháp “conjugate gradient” và “Newton”.
Mạng Backpropagation được huấn luyện chính xác sẽ cho đáp ứng hợp lý khi đưa ngõ vào chưa từng được huấn luyện. Thông thường tín hiệu mới vào có ngõ ra tương tự với ngõ ra chính xác của tín hiệu vào đã được huấn luyện giống với ngõ vào mới này. Do tính chất tổng quát hóa này, ta có thể huấn luyện mạng dựa trên các cặp vào/ra đại diện mà vẫn cho kết quả tốt đối với các tín hiệu chưa được huấn luyện.
1. Tổng quát
1.1. Cấu trúc
Phần này sẽ trình bày cách thiết kế mạng thường sử dụng với thuật toán Backpropagation _ mạng feedforward đa lớp.
1.1.1. Mô hình nơron ( tansig, logsig, purelin )
Nơron cơ bản có R ngõ vào, mỗi ngõ vào có trọng số tương ứng là W. Tổng của các ngõ vào có trọng số và ngưỡng tạo nên tín hiệu vào của hàm truyền f. Nơron có thể sử dụng nhiều loại hàm truyền khác nhau để tạo ra tín hiệu ngõ ra.
Mạng đa lớp thường sử dụng hàm truyền log_sigmoid.
Hàm truyền logsig tạo giá trị ngõ ra giữa 0 và 1 khi ngõ vào biến thiên từ -: đến +:. Hơn nữa, mạng đa lớp cũng có thể sử dụng hàm truyền tansig.
Nếu lớp cuối cùng của mạng đa lớp có các nơron sigmoid thì ngõ ra của mạng giới hạn trong một vùng nhỏ. Nếu sử dụng nơron tuyến tính thì ngõ ra của mạng có thể lấy bất kỳ giá trị nào.
1.1.2. Mạng feedforward
Mạng một lớp gồm các nơron logsig có hai ngõ vào như sau:
Mạng này thường có một hay nhiều lớp ẩn gồm các nơron sigmoid, lớp ngõ ra thường gồm các nơron tuyến tính. Các nơron trong các lớp ẩn có hàm truyền phi tuyến cho phép mạng học các mối quan hệ tuyến tính và phi tuyến giữa vector ngõ vào và ngõ ra. Lớp ngõ ra tuyến tính cho phép mạng tạo giá trị ra khoảng (-1,1).
Mặt khác nếu muốn ép buộc ngõ ra của mạng (ví dụ giữa 0 và 1) thì lớp ngõ ra nên sử dụng hàm truyền sigmoid (ví dụ logsig).
Hàm tạo mạng (newff)
Bước đầu tiên huấn luyện mạng feedfoward là tạo đối tượng mạng. Hàm newff tạo mạng feedforward.
Ví dụ:
Net= newff ( [-1 2; 0 5],[3 1],{‘tarsig’,’purelin’},’traingd’) ;
Hàm trên tạo mạng hai ngõ vào, hai lớp có hàm truyền là tansig và purelin, dùng thuật toán gradient descent.
Hàm khởi động các trọng số:
Trước khi huấn luyện mạng feedforward, trọng số và ngưỡng phải được khởi tạo. Dùng lệnh init để tạo giá trị đầu cho trọng số và ngưỡng.
Ví du ï: net = init (net)
Kỹ thuật cụ thể sử dụng khởi tạo giá trị mạng phụ thuộc vào các thông số mạng như net.initFcn và net.Layer{I}.initFcn. Thông số net.initFcn sử dụng xác định hàm khởi động trên toàn mạng. Hàm mặc định cho mạng feedforward là initlay, cho phép mỗi lớp sử dụng hàm khởi động riêng của nó. Với cách cài đặt này, thông số net.layers{i}.initFcn xác định phương pháp khởi động cho mỗi lớp.
Đối với mạng feedforward có 2 phương pháp khởi động lớp khác nhau, thường được sử dụng là initwb và initnw. Hàm initwb tạo giá trị khởi động trở về giá trị cũ đã khởi động của từng trọng số và ngưỡng. Đối với mạng feedforward giá trị khởi động của trọng số thường dùng hàm rand cho giá trị ngẫu nhiên giữa (-1,1). Cách này thường sử dụng khi hàm truyền lớp là tuyến tính. Hàm initnw thường sử dụng với mạng feedforward có hàm truyền sigmoid. Phương pháp này dựa trên kỹ thuật Nguyễn và Widrow, tạo giá trị trọng số và ngưỡng ban đầu cho một lớp trong vùng họat động của nơron lớp đó với mọi không gian ngõ vào. Phương pháp này có nhiều ưu điểm như: ít nơron bị thừa và công việc huấn luyện nhanh.
Hàm khởi động init thường được hàm newff gọi, do đó mạng tự động khởi tạo các giá trị mặc định. Tuy nhiên người sử dụng nếu muốn có thể khởi tạo lại trọng số và ngưỡng.
Ví dụ:net.layer{1}.initFcn = ‘initwb’;
net.inputWeights {1,1}.initFcn = ‘rands’;
net.biases{1,1}.initFcn = ‘rands’;
net.biases{2,1}.initFcn = ‘rands’;
net.init(net);
1.2. Huấn luyện mạng
Khi trọng số và ngưỡng của mạng đã được khởi tạo, mạng đã sẵn sàng huấn luyện. Cách thức huấn luyện yêu cầu một tập các mẫu chỉ cách thức hoạt động của mạng gồm các cặp ngõ vào và ngõ ra. Hàm hiệu suất mặc định của mạng feedforward là trung bình bình phương sai số.
Thuật toán Backpropagation
Có nhiều thuật toán Backpropagation khác nhau. Cách thực hiện đơn giản nhất là cập nhật trọng số và ngưỡng trực tiếp sao cho hàm hiệu suất giảm nhanh nhất _ gradient có giá trị âm. Mỗi vòng lặp thuật toán được viết lại như sau:
xk+1 = xk - akgk
Với xk: vector trọng số và ngưỡng hiện tại.
gk: gradient hiện tại.
k : tốc độ học.
Có hai cách thực hiện gradient descent là chế độ incremental và chế độ batch. Trong chế độ incremental, gradient được tính và cập nhật trọng số sau mỗi ngõ vào đưa vào mạng. Trong chế độ batch, tất cả các ngõ vào đưa vào mạng trước khi cập nhật trọng số.
Huấn luyện incremental (ADAPT)
Trong chế độ incremental, việc huấn luyện mạng sử dụng hàm adapt. Có nhiều thông số phải được thiết lập để hướng dẫn huấn luyện ở chế độ incremental. Đầu tiên, hàm net.adaptFcn xác định sử dụng loại hàm huấn luyện. Giá trị mặc định là hàm adaptwb. Thông số xác định hàm học là net.biases{i,j}.learnFcn, net.inputWeight{I,j}.learnFcn và net.layerweights{i,j}.learnFcn. Cuối cùng là thông số xác định số lần huấn luyện net.adaptParam.passes.
Hàm gradient descent (LEARNGD)
Đối với thuật toán giảm gradient nhanh nhất, trọng số và ngưỡng di chuyển theo hướng gradient âm của hàm hiệu suất. Với thuật toán này, hàm học là learngd. Hàm learngd có một thông số học là tốc độ học lr. Tốc độ học càng lớn, thì bước nhảy càng lớn. Nếu tốc độ học quá lớn, thuật toán sẽ không ổn định. Nếu tốc độ học quá nhỏ, thuật toán sẽ hội tụ lâu.
Hàm gradient descent có quán tính (LEARNGD)
Bổ sung cho hàm learngd hội tụ nhanh hơn, mạng feedforward có thể sử dụng thuật toán learndm _ giảm dốc nhất có quán tính. Quán tính cho phép mạng đáp ứng không chỉ với gradient cục bộ, mà còn theo hướng mới của mặt phẳng sai số. Hoạt động giống bộ lọc thông thấp, moment cho phép mạng bỏ qua các biểu hiện nhỏ trên mặt phẳng sai số.
Moment thay đổi trọng số bằng tổng một phần sự thay đổi trọng số cuối cùng và sự thay đổi mới nhất theo quy luật học backpropagation. Biên độ ảnh hưởng của độ thay đổi trọng số cuối cùng cho phép có là trung bình bằng một hằng số moment, là số giữa (0,1). Khi moment bằng 0, trọng số thay đổi theo gradient. Khi moment bằng 1, trọng số thay đổi dựa trên sự thay đổi trọng số cũ và bỏ qua giá trị gradient.
Huấn luyện batch (TRAIN)
Ở chế độ này sử dụng hàm train, các trọng số và ngưỡng được cập nhật chỉ sau khi toàn bộ tập huấn luyện đã đi qua mạng. Gradient của mỗi mẫu huấn luyện được cộng dồn để xác định độ thay đổi của trọng số và ngưỡng.
Batch gradient descent (TRAINGD)
Tương đương với hàm learngd trong chế độ này là traingd, thực hiện hàm huấn luyện giảm dốc nhất chuẩn. Trọng số và ngưỡng được cập nhật theo chiều hướng gradient âm của hàm hiệu suất.
Có bảy thông số huấn luyện đối với hàm traingd là epochs, show, goal, time, min_grad, max_fail và lr.
Batch gradient descent với momentum (TRAINGDM)
Thuật toán này tương đương với learngdm nhưng có hai điểm khác biệt. Thứ nhất, gradient được tính bằng cách lấy tổng các gradient trong mỗi mẫu huấn luyện, trọng số và ngưỡng chỉ được cập nhật sau khi tất cả các mẫu huấn luyện đi qua mạng.
Thứ hai, nếu hàm hiệu suất mới với số vòng lặp cho trước vượt quá hàm hiệu suất của vòng lặp trước đó hơn max-perf-inc thì trọng số và ngưỡng mới sẽ bị hủy bỏ, hệ số moment cho bằng 0.
2. Huấn luyện nhanh
Phần trên chúng ta đã trình bày hai thuật toán huấn luyện backpropagation: gradient descent và gradient descent có quán tính. Hai phương pháp này ứng dụng trong thực tế khá chậm. Chúng ta sẽ khảo sát nhiều thuật toán có hiệu suất cao hội tụ nhanh từ 10 đến 100 lần so với các thuật toán đã khảo sát ở trên.
Các giải thuật nhanh chia làm 2 loại chính:
Loại thứ nhất sử dụng kỹ thuật thử là kỹ thuật được mở rộng từ việc phân tích hiệu suất của thuật toán giảm dốc nhất chuẩn. Kỹ thuật này gồm giải thuật backpropagation tốc độ học thay đổi có hàm huấn luyện traingda; và giải thuật phục hồi mạng backpropagation với hàm huấn luyện trainrp.
Loại thứ hai sử dụng kỹ thuật tối ưu hóa số chuẩn. Loại này có ba kỹ thuật tối ưu hóa số dùng để huấn luyện mạng Neural Networks: conjugate gradient (traincgf, traincgb, traincgp, trainscg), quasi _ Newton (trainbfg, trainoss) và Levenberg _ Marquardt (trainlm).
2.1. Giải thuật tốc độ học thay đổi (TRAINDA,TRAINDX)
Trong giải thuật giảm dốc nhất chuẩn, tốc độ học được giữ cố định trong suốt thời gian huấn luyện. Hiệu suất giải thuật này rất nhạy với sự thay đổi của tốc độ học. Nếu tốc độ học quá lớn giải thuật sẽ bị dao động và không ổn định. Nếu tốc độ học quá nhỏ giải thuật sẽ tốn nhiều thời gian để hội tụ. Trong thực tế khó xác định tốc độ học tối ưu và tốc độ học tối ưu thay đổi trong suốt quá trình xử lý huấn luyện, khi giải thuật di chuyển trên mặt phẳng hiệu suất.
Hiệu suất của giải thuật giảm dốc nhất sẽ tăng nếu chúng ta cho phép tốc độ học thay đổi trong suốt quá trình xử lý huấn luyện. Tốc độ học thích ứng sẽ cố gắng giữ bước nhảy càng lớn càng tốt mà vẫn giữ việc học ổn định. Tốc độ học sẽ tương ứng với độ phức tạp của mặt phẳng sai số cục bộ. Tốc độ học thích ứng yêu cầu có một vài thay đổi trong xử lý huấn luyện khi gọi hàm traingd. Đầu tiên ngõ ra của mạng và sai số sẽ được tính. Ở mỗi epoch trọng số và ngưỡng mới được tính dựa trên tốc độ học hiện tại. Ngõ ra và sai số mới sau đó mới được tính.
Khi có quán tính, nếu tỉ số sai số mới và sai số cũ lớn hơn max-perf-inc (thường bàng 1,04) thì trọng số và ngưỡng mới sẽ bị hủy. Lúc này tốc độ học sẽ giảm (thường nhân với tỉ lệ lr_dec = 0,7 ). Ngược lại trọng số, ngưỡng mới v.v.. sẽ được giữ. Nếu sai số mới nhỏ hơn sai số cũ thì tốc độ học tăng (thường nhân với tỉ lệ lr_inc = 1,05).
Thủ tục này làm tăng tốc độ học, nhưng chỉ mở rộng đối với mạng học không làm tăng sai số lớn. Vì thế, tốc độ học gần tối ưu sẽ đạt được trong một vùng cục bộ. Khi tốc độ học lớn hơn có thể làm cho việc học ổn định thì tốc độ học sẽ tăng.
2.2. Giải thuật phục hồi mạng backpropagation (TRAINRP)
Mạng đa lớp thường sử dụng hàm truyền sigmoid trong các lớp ẩn. Những hàm này gọi là hàm nén, vì chúng nén vùng ngõ vào vô hạn thành vùng ngõ ra hữu hạn. Hàm sigmoid có đặc tính là độ dốc của hàm đạt zero khi ngõ vào có giá trị lớn. Đây chính là vấn đề được đề cập khi sử dụng giải thuật độ dốc lớn nhất để huấn luyện mạng đa lớp dùng hàm sigmoid, vì gradient có thể có biên độ rất nhỏ, và do đó trọng số và ngưỡng chỉ thay đổi nhỏ, cho dù trọng số và ngưỡng ở rất xa giá trị tối ưu.
Mục đích của thuật toán huấn luyện phục hồi mạng backpropagation là loại bỏ các hậu quả này về biên độ của các đạo hàm riêng phần. Chỉ sử dụng dấu của đạo hàm để xác định hướng cập nhật trọng số; biên độ của đạo hàm không ảnh hưởng đến việc cập nhật trọng số. Độ thay đổi trọng số dựa trên giá trị cập nhật riêng lẻ. Giá trị cập nhật của mỗi trọng số và ngưỡng tăng bởi hệ del-inc khi đạo hàm của hàm hiệu suất tại những trong số tức thời cùng dấu với 2 lần lặp tiếp theo. Giá trị cập nhật sẽ giảm bởi hệ số del-dec khi đạo hàm ứng với trọng số hiện tại đổi dấu so với lần lặp trước đó. Nếu đạo hàm bằng không thì giá trị cập nhật giữ nguyên. Khi trọng số dao động thì sự thay đổi trọng số sẽ giảm, nếu trọng số tiếp tục thay đổi trên cùng một hướng sau nhiều vòng lặp thì biên độ thay đổi trọng số sẽ giảm.
Phương pháp này thường nhanh hơn giải thuật giảm độ dốc nhất chuẩn.
2.3. Giải thuật conjugate_ gradient
Giải thuật backpropagation cơ bản điều chỉnh trọng số theo hướng giảm dốc nhất. Đây là hướng mà hàm hiệu suất sẽ giảm nhanh nhất. Mặc dù hàm giảm nhanh theo hướng gradient nhưng không có nghĩa hội tụ nhanh. Trong các giải thuật conjugate gradient sẽ tìm dọc theo hướng liên hợp, thông thường tạo ra độ hội tụ nhanh hơn hướng giảm dốc nhất. Có bốn phương pháp khác nhau về giải thuật conjugate gradient.
Trong hầu hết các giải thuật huấn luyện đã được trình bày, tốc độ học dùng để xác định độ dài cập nhật trọng số (kích thước nấc). Hầu hết các giải thuật conjugate gradient, kích thước nấc sẽ thay đổi sau mỗi vòng lặp. Giải thuật sẽ tìm dọc theo hướng gradient liên hợp để xác định kích thước nấc cực tiểu hóa hàm hiệu suất.
2.3.1 Giải thuật cập nhật Fletcher-Reeves (TRAINCGF)
Tất cả các giải thuật gradient liên hợp đều bắt đầu bằng việc định hướng giảm dốc nhất ở vòng lặp đầu tiên (gradient âm).
p0 = -g0
Một định hướng sau đó sẽ được thực hiện để xác định khoảng cách tối ưu di chuyển dọc theo hướng tìm hiện tại.
xk+1 = xk + akpk
Hướng tìm kiếm tiếp theo được xác định bằng cách lấy liên hợp hướng trước đó. Thủ tục tổng quát để xác định hướng tìm mới là kết hợp hướng giảm dốc nhất mới với hướng tìm trước đó.
pk = -gk + bkpk-1
Ta phân biệt các giải thuật conjugate gradient dựa trên cách tính bk. Đối với phương pháp Fletcher-Reeves, bk được tính như sau :
2.3.2. Giải thuật cập nhật Polak – Ribiére (TRAIN CGP)
Đây là một phương pháp khác của giải thuật conjugate gradient. Tương tự như phương pháp Flecher - Reeves, hướng tìm ở mỗi vòng lặp được xác định bởi:
pk = -gk + bkpk-1
với
2.3.3. Giải thuậât khởi động lại Powell – Beale (TRAINCGB)
Đối với các giải thuật conjugate gradient, hướng tìm sẽ được khởi động lại sau mỗi chu kỳ. Điểm khởi động chuẩn xuất hiện khi số chu kỳ bằng thông số của mạng. Phương pháp Powell –Beale sẽ làm tăng hiệu suất huấn luyện, khởi động lại về giá trị âm gradient nếu giá trị trực giao giữa gradient cũ và mới còn lại rất nhỏ, nghĩa là thỏa điều kiện.
2.3.4. Giải thuật Scaled Conjugate Gradient (TRAINSCG)
Trong mỗi thuật toán conjugate gradient đều yêu cầu hướng tìm ở mỗi vòng lặp. Việc tìm này rất phức tạp vì yêu cầu mạng đáp ứng cho tất cả ngõ vào huấn luyện và được tính nhiều lần trong mỗi vòng lặp. Thuật toán Scaled Conjugate Gradient tránh sự phức tạp này.
2.4. Các thuật toán quasi – newton
2.4.1 Giải thuật BFGS (TRAINBFG)
Phương pháp Newton là một phương pháp thay thế phương pháp conjugate gradient cho độ hội tụ nhanh. Bước cơ bản của phương pháp Newton là:
xk+1 = xk – A-1k gk
với Ak là ma trận Hessian (đạo hàm cấp 2) của hàm hiệu suất tại giá trị hiện tại của trọng số và ngưỡng. Tuy nhiên phương pháp này khó tính ma trận Hessian đối với mạng feedforward. Có nhiều thuật toán dựa trên phương pháp Newton, nhưng không cần tính đạo hàm cấp 2, gọi là phương pháp Quasi – Newton. Phương pháp này cập nhật ma trận Hessian gần đúng mỗi vòng lặp thuật toán. Việc cập nhật được tính là một hàm của gradient.
Giải thuật BFGS yêu cầu tính nhiều hơn trong mỗi vòng lặp và lưu trữ nhiều hơn so với phương pháp conjugate gradient, và thường hội tụ sau một ít vòng lặp. Đối với các mạng lớn, tốt hơn ta nên dùng giải thuật backpropagation hay conjugate gradient. Tuy nhiên, đối với mạng nhỏ thì trainbfg hoạt động rất có hiệu quả.
2.4.2. Giải thuậât One Step Secant (TRAINOSS)
Trong khi giải thuật BFGS yêu cầu lưu trữ và tính toán nhiều hơn so với phương pháp conjugate gradient, thì phương pháp One Step Secant yêu cầu lưu trữ và tính toán ít hơn. Giải thuật này như là cầu nối giữa giải thuật conjugate gradient và quasi – Newton. Giải thuật này không lưu toàn bộ ma trận Hessian, phương pháp này giả thiết ở mỗi vòng lặp ma trận Hessian trước đó là ma trận đồng nhất. Do đó phương pháp này có ưu diểm là hướng tìm mới được tính mà không cần tính ma trận ngược.
2.4.3. Giải thuật Levenberg – Marquardt (TRAINLM)
Giống như phương pháp Quasi-Newton, giải thuật Levenberg – Marquardt được thiết kế để đạt được tốc độ bậc 2 mà không phải tính ma trận Hessian. Khi hàm hiệu suất có dạng là tổng bình phương thì ma trận Hessian được tính là: H = JTJ và gradient được tính là: g = JT e.
Và J là ma trận Jacobian là đạo hàm bậc nhất sai số mạng tại điểm trọng số và ngưỡng hiện tại, và e là vertor sai số mạng. Ma trận Jacobian được tính bằng kỹ thuật backpropagation chuẩn nên ít phức tạp hơn tính ma trận Hessian.
Giải thuật Levenberg_Marquardt sử dụng phép gần đúng này với ma trận Hessian trong phương pháp Newton:
Khi m = 0, đây là phương pháp Newton. Khi m lớn, phương pháp này trở thành gradient descent với kích thước nấc nhỏ. Phương pháp Newton nhanh hơn và chính xác hơn. Thuật toán này khá nhanh để huấn luyện mạng feedforward kích thước nhỏ (có thể lên đến vài trăm trọng số).
2.5. Giải thuật Levenberg_Marquardt giảm bộ nhớ (TRAINLM)
Trở ngại chính của thuật toán Levenberg_Marquardt là yêu cầu lưu trữ nhiều ma trận kích thước khá lớn. Kích thước của ma trận Jacobian là Q x n với Q là số mẫu huấn luyện và n là số trọng số và ngưỡng của mạng. Giải thuật giảm bộ nhớ đề nghị ma trận không phải tính và lưu toàn bộ. Ví dụ, nếu ta chia ma trận Jacobian thành hai ma trận con, chúng ta có thể tính ma trận Hessian tương ứng như sau:
Do đó ma trận đầy đủ không phải tính một lần.
3. So sánh bộ nhớ và tốc độ
Đối với cùng một vấn đề, chúng ta khó xác định giải thuật huấn luyện nào là nhanh hơn. Điều này phụ thuộc vào nhiều yếu tố như độ phức tạp của vấn đề, số điểm dữ liệu huấn luyện, số trọng số, ngưỡng trong mạng, và sai số cần đạt. Tổng quát, nếu mạng có vài trăm trọng số thì thuật toán Levenberg_Marquardt sẽ hội tụ nhanh nhất. Thứ nhì là phương pháp Quasi_Newton đối với mạng có kích thước trung bình. Thuật toán BFGS yêu cầu lưu ma trận Hessian nhưng thường nhanh hơn thuật toán conjugate gradient. Trong các thuật toán conjugate gradient, thủ tục Powell-Beale yêu cầu lưu trữ lớn nhưng thường hội tụ nhanh nhất. Thuật toán Rprop và Scaled Conjugate gradient không yêu cầu định hướng tìm và lưu trữ ít nhưng nhanh và hữu ích cho các vấn đề lớn. Thuật toán tốc độ học thay đổi thường chậm hơn nhiều so với những phương pháp khác và có cùng khoảng yêu cầu lưu trữ như Rprop, nhưng vẫn hữu dụng trong vài vấn đề. Trong một vài trường hợp chúng ta cần có độ hội tụ chậm hơn.
Do đó, trong hầu hết các trường hợp, trước tiên chúng ta nên dùng giải thuật Levenberg _Marquardt. Nếu giải thuật này không đủ bộ nhớ, thì thử dùng giải thuật BFGS, hay một trong các phương pháp conjugate gradient. Giải thuật Rprop thì cũng rất nhanh và cần ít bộ nhớ.
4. Cải thiện tính tổng quát hoá
Một trong những vấn đề thường xảy ra trong suốt quá trình huấn luyện mạng là quá khít. Sai số trong tập huấn luyện được kéo xuống rất bé, nhưng khi đưa dữ liệu mới vào thì mạng lại tạo sai số lớn. Mạng có nhớ được các mẫu huấn luyện, nhưng mạng không học được tính tổng quát hóa trường hợp mới.
Hình dưới cho thấy đáp ứng của mạng 1 – 20 - 1 huấn luyện lần theo hàm sin. Rõ ràng mạng này quá khít với dữ liệu và không tổng quát hóa tốt.
Một phương pháp cải thiện tính tổng quát hóa của mạng là sử dụng mạng với số nơron vừa đủ. Mạng càng lớn hàm càng phức tạp, phù hợp cho vấn đề lớn hơn. Nếu chúng ta sử dụng mạng đủ bé, mạng sẽ không đủ khả năng quá khít dữ liệu.
Vấn đề là chúng ta không biết được độ lớn của mạng là bao nhiêu. Có hai phương cải thiện tính tổng quát hóa là regularization và early stopping.
4.1. Regularization
Phương pháp này hoạt động dựa trên hàm hiệu suất đã được sửa đổi, thường chọn hàm tổng bình phương sai số mạng.
4.1.1. Hàm hiệu suất sửa đổi
Hàm hiệu suất thông thường sử dụng trong mạng Neural Networks là trung bình tổng bình phương sai số mạng
Nếu chúng ta thêm thành phần trung bình tổng bình phương các trọng số và ngưỡng của mạng thì tính tổng quát hóa sẽ tăng lên.
msereg =mse +( 1 -) msw
với là tỷ số hiệu suất và
sử dụng hàm hiệu suất sẽ cho số trọng số và ngưỡng nhỏ hơn, và sẽ làm cho mạng đáp ứng phẳng hơn, không quá khít.
Chúng ta rất khó xác định giá trị tối ưu của thông số tỷ số hiệu suất. Nếu thông số này quá lớn sẽ gây ra quá khít. Nếu thông số này quá nhỏ, mạng sẽ không đủ khít với dữ liệu huấn luyện.
4.1.2. Tự động tổng quát hóa.
Chúng ta rất muốn các thông số tổng quát hóa tối ưu tự động cài đặt. Một kỹ thuật cho vấn đề này là khung làm việc Bayesian của David Mackay. Trong khung làm việc này, trọng số và ngưỡng của mạng giả thiết là các biến ngẫu nhiên với phân bố cụ thể. Các thông số chuẩn hóa chưa hết phương sai ứng với hàm phân bố này. Chúng ta sẽ ước lượng các thông số này bằng kỹ thuật thống kê.
Trong Neural Networks, để mạng tự động tổng quát hóa các thông số, ta dùng hàm trainbr. Hình dưới cho thấy đáp ứng của mạng 1-20-1 không quá khít dữ liệu, và do đó mạng sẽ tổng quát hóa tốt các dữ liệu mới vào. Nếu sử dụng mạng lớn hơn, mạng cũng sẽ không bao giờ quá khít dữ liệu.
4.2. Early Stopping
Trong kỹ thuật này, dữ liệu chia thành ba tập con. Tập thứ nhất là tập huấn luyện, dùng để tính gradient và cập nhật trọng số, ngưỡng của mạng. Tập thứ hai là tập phê chuẩn. Sai số trên tập này được giám sát trong suốt quá trình huấn luyện. Sai số phê chuẩn thường giảm trong giai đoạn đầu huấn luyện. Tuy nhiên khi mạng bắt đầu quá khít dữ liệu, sai số trên tập phê chuẩn thường bắt đầu tăng. Khi sai số phê chuẩn tăng sau một số vòng lặp, huấn luyện sẽ ngừng, trọng số và ngưỡng ở cực tiểu sai số phê chuẩn sẽ được trả lại.
Sai số tập kiểm tra không sử dụng trong quá trình huấn luyện, nhưng sử dụng để so sánh giữa các mô hình khác nhau.
Early Stopping có thể sử dụng trên bất kỳ hàm huấn luyện nào.
5. Kết luận
Backpropagation có thể huấn luyện mạng feedforward với nhiều hàm truyền khác nhau. Khái niệm backpropagation dựa trên quá trình xử lý bằng cách lấy đạo hàm của sai số mạng. Quá trình xử lý này sử dụng nhiều chiến lược tối ưu hóa khác nhau.
Cấu trúc mạng đa lớp không bị bài toán ép buộc hoàn toàn. Số ngõ vào mạng do bài toán qui định cũng như số nơron trong lớp ngõ ra. Tuy nhiên số lớp ẩn và kích thước của các lớp do người thiết kế chọn.
Mạng hai lớp có hàm truyền sigmoid/ linear có thể biểu diễn bất kỳ hàm nào nếu lớp sigmoid có đủ nơron.
Có nhiều thuật toán huấn luyện backpropagation khác nhau. Chúng khác nhau về cách tính toán, dung lượng bộ nhớ và không có thuật toán nào là tốt nhất đối với mọi trường hợp.
HÀM
MÔ TẢ
Traingd
Gradient descent cơ bản. Đáp ứng chậm, sử dụng trong chế độ incremental.
Traingdm
Gradient descent có quán tính. Thường nhanh hơn traingd, có thể sử dụng trong chế độ nấc.
Traingdx
Tốc độ học thay đổi. Huấn luyện nhanh hơn traingd nhưng chỉ có thể sử dụng trong chế độ batch.
Trainrp
Resillient backpropagation. Đây là thuật toán huấn luyện chế độ batch đơn giản, có độ hội tụ nhanh và ít tốn bộ nhớ.
Traincgf
Thuật toán conjugate gradient Fletcher – Reeves. Ít tốn bộ nhớ nhất trong các thuật toán conjugate gradient.
Traincgp
Thuật toán conjugate gradient Polak –Ribiére. Yêu cầu bộ nhớ nhiều hơn traincgf, đối với một số bài toán có độ hội tụ nhanh.
Traincgb
Thuật toán conjugate gradient Powell – Beale. Yêu cầu bộ nhớ lớn hơn traincgp, tốc độ hội tụ nhanh hơn.
Trainscg
Thuật toán Scaled Conjugate Gradient. Đây là thuật toán conjugate gradient duy nhất không yêu cầu định hướng tìm.
Trainbfg
Phương pháp quasi – Newton BFGS. Yêu cầu lưu trữ ma trận Hessian và có nhiều phép tính hơn các thuật toán conjugate gradient trong mỗi vòng lặp, nhưng thường hội tụ sau một vài phép lặp.
Trainoss
Phương pháp one step secant. Đây là phương pháp kết hợp giữa phương pháp conjugate gradient và phương pháp quasi – Newton.
Trainlm
Thuật toán Levenberg - Marquardt. Thuật toán huấn luyện nhanh đối với mạng có kích thước vừa phải, có tính chất giảm bộ nhớ khi tập huấn luyện lớn.
Trainbr
Thuật toán chuẩn tổng quát hóa Bayesian. Là giải thuật huấn luyện Levenberg - Marquardt được sửa đổi, tạo ra mạng tốt hơn, giảm sự phức tạp để mạng hội tụ.
CHƯƠNG 4: GIỚI THIỆU VỀ JOONE
1. Giới thiệu chung
Xuất phát từ ý tưởng xây dựng một framework để tạo ra một cách tiếp cận mới trong việc ứng dụng mạng nơron nhân tạo. Tác giả Paolo Marrone đã và đang phát triển JOONE - Java Object Oriented Neural Engine - một bộ máy thiết kế, đào tạo và ứng dụng mạng nơron nhân tạo xây dựng trên ngôn ngữ lập trình hướng đối tượng Java. Đây là một dự án phần mềm mở của cộng đồng mã nguồn mở SourceForce do Paolo Marrone đứng đầu.
JOONE là một bộ Java framework để xây dựng và chạy các ứng dụng trí tuệ nhân tạo dựa trên mạng nơron. Các ứng dụng của JOONE có thể được xây dựng trên một máy đơn, được đào tạo trên môi trường phân tán và chạy trên bất kỳ thiết bị nào (thiết bị cầm tay, máy tính để bàn...).
Tất cả các thành phần (components) của JOONE đều được thiết kế theo các tiêu chí: tính thống nhất, tính đa luồng (multithreading), tính tham số (parameterization), tính chia đoạn (serialization). Tất cả các tiêu chí này nhằm đảm bảo sự ổn định, sự mở rộng và cuối cùng đạt đến những đặc tính chuẩn của ngành trí tuệ nhân tạo.
Các ứng dụng trên JOONE được xây dựng dựa tren các thành phần (components) dễ dàng kết nối, thuận tiện sử dụng và ổn định. Các thành phần này có thể được phát triển có thể được phát triển lên và cũng có thể sử dụng chúng bởi các chuyên gia trí tuệ nhân tạo để thiết kế ra các mạng nơron thích ứng.
Trên thực tế vẫn tồn tại vấn đề lớn cần giải quyết đó là cần tìm ra một mạng nơron phù hợp nhất cho một vấn đề cụ thể mà không bị rơi vào các cực tiểu địa phương (local minima) và cuối cùng cấn tìm ra một kiến trúc mạng tốt nhất. JOONE có thể đơn giản hoá việc khởi tạo mạng lúc ban đầu và đào tạo một mạng được thiết kế theo phương thức có chỉ đạo hoặc không chỉ đạo.
JOONE còn là một bộ máy có khả năng dễ dàng đào tạo một cách phân tán và dễ dàng sử dụng từ xa bởi những người sử dụng. Đây là một ý tưởng lớn đang được các lập trình viên tham gia vào dự án nguồn mở này đang thực thi. Có thể lấy một ví dụ như một công ty bảo hiểm đang đào tạo một mạng nơron nhân tạo về vấn đề ước lượng rủi ro theo các trường hợp đã xãy ra, đồng thời nó có khả năng truy cập từ xa để lấy các thông tin dự báo từ các thiết bị không dây như điện thoại di động, PDA để sử dụng nó. Điều đó là hoàn toàn có thể khi công nghệ Java hoàn toàn hỗ trợ lập trình không dây (mobile computing and wireless computing) và JOONE được thiết kế trên nền Java, được thiết kế gọn nhẹ, theo module để có thể thực hiện ý tưởng đó.
2. Cấu trúc bên trong của JOONE
2.1. Khái niệm cơ bản
Một mạng nơron nhân tạo (neural network) được xây dựng từ các lớp nơron (layers), chúng được kết nối với nhau bởi các dây thần kinh (synapses). Tuỳ thuộc vào sự kế nối này thì có một số loại kiến trúc mạng được hình thành như: mạng tiến, mạng trở lại ....
Trong phần này chúng ta chỉ quan tâm đến mạng truyền tiến (Feed Forward Nueral Network – FFNN), các loại mạng khác sẽ tương tự được thiết kế. Trong mạng tiến mỗi lớp có chứa một số lượng nơron, trong đó các nơron có cùng đặc tính về hàm truyền (transfer function) tỉ lệ học (learning rate)... Mạng nơron được thành lập từ các lớp nơron này, không bắt buộc chúng phải đồng nhất cùng loại.
Mỗi lớp xử lý các tín hiệu vào của nó, áp dụng hàm truyền và gửi tín hiệu đã xử lý ra thông qua các dây thần kinh đầu ra đến các lớp kế tiếp. Cứ như vậy mạng nơron có thể xử lý một vectơ nhận từ lớp vào, xử lý rồi chuyển tín hiệu ra ở lớp cuối.
2.2. Quy tắc truyền tín hiệu
Để đảm bảo chắc chắn bất kỳ kiến trúc mạng nơron nào được yêu cầu cũng có thể được thiết kế trên JOONE, các phương thức truyền các tín hiệu trên mạng nơron đảm bảo thông suốt, liên tục, và tiến hành xử lý song song, không cần đến sự điều khiển tập trung. Mỗi lớp nơron xây dựng thừa kế từ Interface Runnable của Java, vì vậy mỗi lớp nơron là một luồng xử lý riêng độc lập với các lớp nơron khác. Những tuần tự xử lý của một lớp bao gồm: nhận tín hiệu vào, áp dụng hàm truyền cho tín hiệu nhận được, và chuyển tín hiệu đó ra các dây thần kin ra. Các lớp tiếp nhận được tín hiệu có tín hiệu chuyển đến sẽ bắt đầu xử lý và cứ tiếp tục như vậy, xử lý cho đến lớp cuối cùng. Tiến trình xử lý này được mô tả theo hình sau:
Trong đó mỗi nơron N có những thông số sau:
XN : Tín hiệu vào của nơron = (I1 * WN1) + (I2 * WN2) + .... + (Ip * WNp)
YN : Tín hiệu ra từ nơron = f(XN)
F(X) : Hàm truyền tuỳ thuộc vào loại của nơron.
Quy tắc truyền tín hiệu đồng thời được sử dụng trong mạng lan truyền ngược sai số từ lớp ra cho đến lớp vào trong giai đoạn học của mạng, nó cho phép các trọng số và ngưỡng của mỗi nơron được thay đổi theo một thuật toán học được chọn trước.
Tóm lại, mỗi lớp nơron có hay nhiệm vụ, một là xử lý tín hiệu từ đầu vào chuyến sang đầu ra và xử lý các tín hiệu lỗi được truyền ngược từ đầu ra ngược về đầu vào. Để đạt được mục tiêu này mỗi một lớp nơron có hai quy tắc truyền tín hiệu ngược nhau, một trong quá trình truyền tin thuận, một trong quá trình học để điều chỉnh các trọng số và ngướng (weight and bias), chúng được mô tả trong hình sau:
Các thành phần của JOONE (bao gồm cả các lớp nơron và dây thần kinh) phải được xây dựng trước các quy tác truyền tín hiệu này để điều chỉnh các trọng số và ngưỡng của các nơron cho phù hợp trong quá trình học.
Chúng được đảm bảo trên nguyên tắc mỗi lớp nơron chạy trên một một luồng xử lý độc lập của nó, đây là các thành phần hoạt động duy nhất trong bộ máy chính của JOONE. Có thể mô tả các luồng xử lý theo hình vẽ sau:
Như vậy để xây dựng một mạng nơron chỉ đơn thuần là kết nối các lớp với nhau thông qua các dây thần kinh theo yêu cầu và các lớp sẽ chạy theo quy tắc trên. Nhân xét về đặc tính của JOONE mang lại như sau:
Bộ máy linh hoạt: chúng ta có thể xây dựng mạng bằng cách đơn giản kết nối các lớp nơron với nhau bằng các dây thần kinh mà không cần quan tâm các tín hiệu được xử lý như thế nào bên trong.
Bộ máy có tính mở rộng: Do các lớp nơron được xử lý bởi các luồng độc lập nên muốn bộ máy chạy nhanh chúng ta hãy thêm số CPU cho máy tính, mỗi luồng xử lý sẽ chạy trên mỗi CPU khác nhau, nâng cao hiệu quả tính toán.
Bộ máy gần với hiện thực: Trên lý thuyết chúng ta có thể nhận xét bộ máy hoàn toàn không xa với bộ nảo con người trong đó mỗi nơron hoạt động độc lập với các nơron khác.
2.3. Các loại lớp nơron của JOONE
Các lớp nơron là các thành phần của mạng nơron, chúng được thành lập từ các nơron có cùng đặc tính. Thành phần này chuyển các tín hiệu véctơ từ các dây thần kinh vào, áp dụng hàm chuyển và chuyển tín hiệu sang dây thần kinh ra. Lớp nơron được thể qua lớp Layer trong Java và các dây thần kinh được thể hiện qua lớp Synapse. Các lớp nơron là các thành phần tự chủ trong mạng nơron, chúng có các luồng xử lý riêng và độc lập.
Các loại lớp nơron được mạng tên cung loại với loại nơron, chúng khác nhau bởi hàm truyền trong các nơron. Trong JOONE có các loại lớp nơron được xây dựng sẵn, chúng ta hoàn toàn có thể phát triển thêm các lớp nơron với các hàm truyền mới, sau đây là một số lớp nơron thường dùng:
Tên lớp
Hàm truyền
Mô tả
Lớp tuyến tính
(Linear Layer)
y = b . x
Là lớp đơn giản nhất, sử dụng hàm tuyến tính với hệ số b. Nếu b =1 thì tín hiệu đầu ra bằng tín hiệu vào nơron. Thường được sử dụng trong lớp vào.
Lớp Xích-ma
(Sigmoid Layer)
Lớp sử dụng hàm truyền xích-ma, thường được sử dụng trong lớp ẩn, biễu diễn rất tốt các hàm phi tuyến trong mạng nơron nhân tạo.
Lớp tang hyperbol
(Tanh Layer)
Tương tự như lớp xích-ma, hàm truyền tang hyperbol được áp dụng để hạn chế ngưỡng ra trong khoảng từ -1 đến 1.
Lớp Logarit
(Logarithmic Layer)
Lớp này áp dụng hàm truyền là hàm logarit vì vậy giá trị ra không giống hai hàm trên, nó nằm trong khoảng 0 đến +¥.
Lớp trễ
(Delay Layer)
YN = x(t-N)
với 0 < N < taps
2.4. Các loại dây thần kinh
Lớp Synapse trong Java biễu diễn các dây thần kinh trong mạng nơron kết nối các lớp nơron với nhau, cho phép truyền các tín hiệu thuận chiều và ngược chiều giữa hai lớp nơron kế tiếp nhau trong mạng.
Trong JOONE các lớp Synapse đồng thời là các bộ nhớ của các của mạng, chúng ghi nhớ lại các trọng số đối với từng dây thần kinh kết nối với mỗi nơron. Các loại lớp synapse khác nhau chính ở mô hình kết nối và từ đó có cấu trúc lưu trữ phù hợp.
Ngoài ra cũng cần chú ý, các dây thần kinh là điểm kết nối giữa các lớp nơron, giữa các luồng xữ lý độc lập vì vậy đây cũng là nơi dùng chung các dữ liệu , để tránh xảy ra xung đột khi các tiến trình xử lý khác nhau cần có những cơ chế đồng bộ hoá việc lấy thông tin ở các lớp này.
Các loại dây thần kinh thường dùng trong JOONE:
Loại Synapse
Hình biễu diễn
Mô tả
Nối trực tiếp
(Direct Synapse)
Kết nối một - một giữa các nơron của hai lớp
Hai lớp nơron phải cùng số nơron.
Nối hoàn toàn
(Full Synapse)
Kết hai nốt bất kỳ của hai lớp nơron với nhau. Đây là kiểu kết nối thường được sử dụng nhất.
Không bắt buộc cùng số nơron giữa hai lớp.
Nối Kohonen
(Kohonen Synapse)
Một loại kết nối đặc biệt được sử dụng trong việc xây dựng mạng nơron đạo tạo không chỉ đạo.
Nối Sanger
(Sanger Synapse)
Được sử dụng trong mạng nơron đào tạo không chỉ đạo.
Nối làm trễ
(Delayed Synapse)
Có các kết nối giống kết nối hoàn toàn nhưng trên mỗi kết nối sử dụng một bộ làm trễ FIR.
2.5. Monitor : điểm điều khiển trung tâm của mạng nơron
Mạng nơron không thể thiếu một bộ phân trung tâm để điều khiển mọi tiến trình học, tiến trình xử lý của các lớp nơron cũng như các dây thần kinh kết nối chúng. Đồng thời điểm điểu khiển trung tâm này cũng là nơi thay đổi các tham số phù hợp cho quá trình đào tạo và xử lý của mạng ví dụ như hệ số học, mômen học, chu kỳ học....
Mỗi thành phần của mạng nơron (lớp nơron và dây thần kinh kết nối) đều có chứa một tham chiếu đến đối tượng điều khiển duy nhất Monitor. Chúng có thể lấy các thông tin về tham số của quá trinh học cũng như trạng thái hoạt động từ đối tượng Monitor này. Hình sau biễu diễn quan hệ này:
Theo sự điều khiển của người dùng, có thể thay đối các giá trị tham số của đối tượng Monitor và các thành phần khác trong mạng sẽ nhận sự thay đổi này để xử lý. Đồng thời monitor cũng là nơi theo dõi và điều khiển mọi hoạt động của mạng nơron.
3. Tiến trình xử lý trong mạng nơron
Chúng ta sẽ xem xét việc quản lý các sự kiện bên trong mạng khi đạt đến lần đào tạo cuối cùng trong mạng nơron:
Giả sử rằng chúng ta đang có một mạng nơron được thành từ các thành phần được mô tả trên hình vẽ, gồm ba lớp: một lớp vào, một lớp ẩn và một lớp ra; InputSynapse để đọc các dữ liệu học, TeacherSynapse dùng để tính lổi phát sinh sau một chu trình lan truyền qua mạng. Một đối tượng Monitor để điều khiển toàn bộ tiến trình học của mạng. Như đã nêu trên tất cả các đối tượng đều có tham chiếu đến đối tượng Monitor để lấy thông tin và trạng thái của mạng.
Theo tuần tự của nhãn trên hình vẽ chúng ta thấy tiến trình học của mạng được xử lý như sau:
Lớp nơron vào gọi phương thức fwdGet() của đối tượng InputSynapse
Đối tượng InputSynapse sẽ gọi phương thức nextStep() của đối tượng Monitor để hỏi sự cho phép tiếp tục một chu kỳ mới hay không.
Đối tượng Monitor sẽ phát sinh một sự kiện netStopped() (để các đối tượng ngoài biết trạng thái)
Đối tượng Monitor trả về giá trị false trong hàm nextStep() cho biết kết thúc chu kỳ.
InputSynapse sẽ tạo ra một véctơ đánh dấu kết thúc và chuyển vào lớp nơron vào. Véctơ đánh dấu kết thức chứa giá trị đếm thứ tự chu kỳ bằng -1.
Các lớp nơron khi nhận được véctơ đánh dấu kết thúc này sẽ chuyễn véctơ này sang lớp nơron kế tiếp và đặt luồng xử lý của minh ở trạng thái dừng.
4. Biểu đồ lớp của JOONE
Nhân của JOONE được thành lập từ một số lượng nhỏ các Interface trong Java, sau đây là một số lớp tiêu biểu để cấu thành nên các thành phần cơ bản trong mạng nơron:
Tất cả các lớp đều thừa kế Interface java.io.Serializable vì vậy các mạng nơron khi thiết kế trên JOONE đều có thể ghi vào dữ liệu và có thể truyền qua mạng một cách dễ dàng. Hai thành phần cơ bản của nhân JOONE là lớp Layer và lớp Synapse.
PHỤ LỤC TÀI LIỆU THAM KHẢO
Trí tuệ nhân tạo - Mạng Nơron – Phương pháp và ứng dụng – Ts Nguyễn Đình Thúc – NXB Giáo dục năm 2000
Luận văn tốt nghiệp cao học ngành công nghệ thông tin: Tích hợp giải thuật di truyền với thủ thuật học của mạng nơron lan truyền ngược của sai số - Trần Ngọc Hà – GVHD: Ts Nguyễn Thanh Thuỷ. Năm 1998.
Luận văn tốt nghiệp cao học ngành quản trị kinh doanh: Dự báo nhu cầu điện năng tỉnh Ninh Bình giai đoạn 2001 – 2010. Đoàn Văn Bình – GVHD: Ts Đàm Xuân Hiệp, TS Nguyễn Thanh Thuỷ. Năm 2001.
Neural Networks for chemists – J. Zupan, J.Gasteiger. 1993.
JOONE Core Engine – Developer guide. Paolo Marrone. www.joone.org. 2002
JOONE – Java Object Oriented Neural Engine – The Complete Guide. www.jooneworld.com 2003.
Các file đính kèm theo tài liệu này:
- DAN376.doc