3.2 Mơ hình dự báo sử dụng mạng nơron
3.2.3 Lựa chọn mạng
Toolbox Neural Networks trong Matlab hỗ trợ rất mạnh trong mơ phỏng và tính tốn liên quan đến mạng nơron do mạng nơron cĩ thể mơ phỏng các mơ hình phi tuyến tương đối dễ dàng mà khơng biết nhiều hàm truyền đối tượng đĩ. Mạng nơron cĩ tính học theo, ví dụ: người huấn luyện mạng cĩ thể thu thập đầy đủ các dữ liệu đặc trưng cho các ng vào của mạng và các mối quan hệ giữa các ng vào đĩ với các ng ra của mạng thơng qua các lớp ẩn, các trọng số cập nhật, ngưỡng. Kết quả của mạng nơron phụ thuộc rất nhiều vào kinh nhiệm của chuyên gia trong việc chọn mạng gì, số nơron trong mỗi lớp ẩn như thế nào...
Lan truyền ngược thực hiện dựa trên quy luật học Widrow Hoff. Tổng quát cho mạng đa lớp và các hàm truyền phi tuyến khác. Các vector ng vào và các vector ng ra tương ứng sẽ được huấn luyện cho tới khi mạng xấp xỉ một hàm liên kết các ng vào với các vector ng ra.
Mạng lan truyền ngược chuẩn sử dụng thuật tốn giảm độ dốc tương tự như trong quy luận sử lý Widrow Hoff. Trong đĩ, các trọng số của mạng được dịch chuyển theo chiều ngược lại độ dốc của hàm biểu diễn. Mạng đã huấn luyện riêng cho phép đưa ra các kết quả khi dùng các ng vào mà nĩ chưa từng được học. Thơng thường một ng vào mới sẽ cĩ ng ra tương tự với ng ra chính xác của ng vào trước đĩ đã đượ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 ng vào khác nhau của mạng chưa được huấn luyện. Đây chính là tính nổi bật nhất của mạng nơron so với các phương pháp khác.
Cách huấn luyện một mạng tổng quát gồm 4 bước: Đồng bộ các dữ liệu huấn luyện vào ra.
Tạo các đối tượng mạng. Huấn luyện mạng.
Mơ phỏng mạng tương ứng với các ng vào
1. Mạng truyền thẳng
Các mạng feedforward thường cĩ một hay nhiều lớp ẩn. Các nơron trong các mạng lớp ẩn với 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 các vector ng vào và ng ra. Lớp tuyến tính ở ng ra cho phép mạng tạo ra giá trị nằm trong khoảng [-1,1]. Mặt khác, nếu muốn ép buộc ng ra (0,1) thì khi đĩ ng ra nên sử dụng hàm truyền sigmoid (như logsig).
Hình 3.9: Mơ hình mạng truyền thẳng 1 lớp cĩ S nơron, cĩ R ng vào.
Mạng này cĩ thể dùng như hàm tính tốn tổng quát gần đúng. Nĩ cĩ thể xấp xỉ bất cứ hàm nào với một số lượng hữu hạn các điểm gián đoạn bất kỳ.
Các nơron đầu vào thực chất khơng phải các nơron theo đúng nghĩa, bởi lẽ chúng khơng thực hiện bất kỳ một tính tốn nào trên dữ liệu vào, đơn giản nĩ chỉ tiếp nhận các dữ liệu vào và chuyển cho các lớp kế tiếp. Các nơron ở lớp ẩn và lớp ra mới thực sự thực hiện các tính tốn, kết quả được định dạng bởi hàm đầu ra (hàm chuyển). Cụm từ “truyền thẳng” (feedforward) (khơng phải là trái nghĩa của lan truyền ngược) liên quan đến một thực tế là tất cả các nơron chỉ cĩ thể được kết nối với nhau theo một hướng: tới một hay nhiều các nơron khác trong lớp kế tiếp (loại trừ các nơron ở lớp ra).
Hình 3.10: Mơ hình mạng truyền thẳng nhiều lớp ẩn
Trong đĩ: P: vector đầu vào (vector cột); Wi: Ma trận trọng số của các nơron lớp thứ i; (Si
xRi: S hàng (nơron) - R cột (số đầu vào)); bi: Vector độ lệch (bias) của lớp thứ i (Six1: cho S nơron); ni: net input (Six1); fi: Hàm chuyển (hàm kích hoạt); ai: net output (Six1); : Hàm tổng thơng thường.
Mỗi liên kết gắn với một trọng số, trọng số này được thêm vào trong q trình tín hiệu đi qua liên kết đĩ. Các trọng số cĩ thể dương, thể hiện trạng thái kích thích, hay âm, thể hiện trạng thái kiềm chế. Mỗi nơron tính tốn mức kích hoạt của chúng bằng cách cộng tổng các đầu vào và đưa ra hàm chuyển. Một khi đầu ra của tất cả các nơron trong một lớp mạng cụ thể đã thực hiện xong tính tốn thì lớp kế tiếp cĩ thể bắt đầu thực hiện tính tốn của mình bởi vì đầu ra của lớp hiện tại tạo ra đầu vào của lớp kế tiếp. Khi tất cả các nơron đã thực hiện tính tốn thì kết quả được trả lại bởi các noron đầu ra. Tuy nhiên, cĩ thể là chưa đúng yêu cầu, khi đĩ một thuật tốn huấn luyện cần được áp dụng để điều chỉnh các tham số của mạng.
Trong hình trên, số nơron ở lớp thứ nhất và lớp thứ hai tương ứng là S1 và S2, ma trận trọng số đối với các lớp tương ứng là W1 và W2; cĩ thể thấy sự liên kết giữa các lớp mạng thể hiện trong hình vẽ: ở lớp thứ 2, vector đầu vào chính là net output của lớp thứ nhất.
Tương tự, nếu thêm vào các lớp khác nữa vào trong cấu trúc này thì lớp mạng cuối cùng thường là lớp cho ra kết quả của tồn bộ mạng, lớp đĩ gọi là lớp ra (Output Layer). Mạng cĩ nhiều lớp cĩ khả năng tốt hơn là các mạng chỉ cĩ một lớp, chẳng hạn như mạng hai lớp với lớp thứ nhất sử dụng hàm sigmoid và lớp thứ hai
dùng hàm đồng nhất cĩ thể áp dụng để xấp xỉ các hàm tốn học khá tốt, trong khi các mạng chỉ cĩ một lớp thì khơng cĩ khả năng này.
Xét trường hợp mạng cĩ hai lớp như hình: 3.10, cơng thức tính tốn cho đầu ra như sau: a2
= f2(W2(f1(W1P + b1)) + b2) (3.43)
2. Khởi tạo mạng
Bước đầu tiên trong huấn luyện mạng tiến lũy là tạo đối tượng mạng. Hàm newff cho phép tạo mạng một mạng feedforward. Nĩ yêu cầu 4 ng vào và trả ra đối tượng mạng. Ng vào thứ nhất là là R với 2 ma trận các giá trị max min của mỗi biến thành phần vector ng vào. Ng vào thứ hai là một mảng chứa kích thước của mỗi lớp. Ng vào thứ 3 là một mảng cell chứa tên của hàm truyền được dùng trong mỗi lớp, ng vào cuối cùng chứa tên của phương pháp huấn luyện mạng được sử dụng.
Hàm trên tạo mạng 2 ng vào với ng vào đầu tiên của mạng [-1,2], ng vào thứ hai của mạng [0,5] và cĩ hai lớp ẩn. Trong đĩ, lớp ẩn thứ nhất cĩ 3 nơron cĩ hàm truyền tansig, lớp ẩn cịn lại cĩ 1 nơron cĩ hàm truyền tuyến tính purelin. Thuật tốn huấn luyện mạng này là gradient descent(traingd).
3. Khởi tạo các trọng số
Trước khi huấn luyện mạng tiến lũy, các trọng số W và ngưỡng b phải được khởi tạo. Hàm newff sẽ tự động khởi tạo các trọng số này nhưng chúng ta vẫn phải khởi tạo lại chúng. Dùng lệnh init để khởi tạo các trọng số W và ngưỡng b.
Phương pháp cụ thể khởi tạo giá trị mạng phụ thuộc vào thơng số mạng như net.initFcn và net>Lay{I .initFcn. Thơng số net.initFcn sử dụng xác định hàm khởi tạo trên tồn mạng. Hàm mặc định cho mạng tiến lũy là inilay cho phép mỗi lớp sử dụng hàm khởi tạo riêng của nĩ. Với cách cài đặt này, thơng số net.Lay{I .initFcn xác định phương pháp khởi tạo cho mỗi lớp.
Đối với mạng tiến lũy cĩ 2 phương pháp khởi tạo lớp khác nhau, thường 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ố W và ngưỡng b. Với mạng tiến lũy, giá trị khởi tạo của trọng số thường dùng hàm rands cho giá trị ngẫu nhiên nằm trong khoảng [-1,1].
Hàm initnw thường sử dụng với hàm truyền sigmoid. Phương pháp này dựa trên Widrow tạo giá trị trọng số và ngưỡng ban đầu cho một lớp trong vủng hoạt động của lớp nơron lớp đĩ với mọi giá trị ng vào. Ưu điểm của phương pháp này là ít nơron bị thừa và thời gian huấn luyện nhanh hơn.
Hàm khởi tạo init thường được hàm newff gọi, do đĩ mạng tự động khởi tạo lại các giá trị mặc định. Tuy nhiên, người huấn luyện cĩ thể khởi tạo lại các thơng số này.
3.2.4. Thuật tốn huấn luyện mạng theo giải thuật lan truyền ngƣợc cho dự báo sử dụng mạng nơron nhân tạo
Huấn luyện mạng học các dữ liệu bằng cách lần lượt đưa các mẫu vào cùng với những giá trị mong muốn. Mục tiêu của việc huấn luyện mạng đĩ là tìm ra tập các trọng số cho ta giá trị nhỏ nhất tồn cục của hàm lỗi.
Sự lan truyền ngược (back propagation) cĩ thể huấn luyện mạng feedforward với nhiều hàm truyền khác nhau. Khái niệm back propagation 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 cách để tối ưu hĩa khác nhau. Cĩ nhiều thuật tốn huấn luyện back propagation khác nhau, chúng khác nhau về cách tính tốn, dung lượng bộ nhớ và khơng cĩ thuật tốn nào là tốt nhất đối với mọi trường hợp. Cĩ 4 thuật tốn huấn luyện, Matlab khuyến dùng trong mơ hình dự báo: Lenvenberg-Marquardt (trainlm), Bayesian (trainbr), Scaled Conjugatem Gradient (trainscg) và Resillient Backpropagation (trainrp).
1. Thuật tốn huấn luyện Lenvenberg – Marquardt (trainlm)
Giống như phương pháp Quasi-Newton, giải thuật Levenberg – Marquardt được thiết kế để đạt đặc tính hội tụ 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=JT
J và gradient được tính là: g = JTe.
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à vector sai số mạng. Ma trận Jacobian được tính bằng kỹ thuật back propagation 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:
J J I J e
x
xk1 k T 1 T (3.44)
Khi = 0, đây là phương pháp Newton. Khi 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 tố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ố).
Trở ngại chính của thuật tố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. 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: 1 2 1 1 2 2 2 1 J J J J J J J J J J H T T T T T (3.45)
Do đĩ, ma trận đầy đủ khơng phải tính một lần. net.trainFcn = 'trainlm'
[net,tr] = train(net,...)
Trainlm là một hàm huấn luyện mạng mà cập nhật giá trị trọng số và ngưỡng theo giải thuật tối ưu Levenberg-Marquardt.
net.trainFcn = 'trainlm' thiết lập mạng đặc tính trainFcn [net,tr] = train(net,...) huấn luyện mạng với trainlm.
Các thơng số mặc định
net.trainParam.epochs 1000 Số chu kỳ huấn luyện tối đa
net.trainParam.goal 0 Giá trị mục tiêu cài đặt
net.trainParam.max_fail 6 Các lỗi xác nhận tối đa net.trainParam.min_grad 1e-7 Độ dốc kết quả sai số
net.trainParam.mu 0.001 Tốc độ
net.trainParam.mu_dec 0.1 Giảm trọng số
net.trainParam.mu_max 1e10 Thay đổi trọng số tối đa
net.trainParam.show 25 Hiển thị thơng số
net.trainParam.showCommandLine false Tạo ra dịng lệnh suất net.trainParam.showWindow true Hiện giao diện huấn luyện net.trainParam.time inf Thời gian tối đa để huấn luyện
2. Thuật tốn huấn luyện Bayesian (trainbr)
Thuật tốn Bayes dựa trên định lý Bayes được phát biểu như sau:
(3.46)
Theo tính chất độc lập điều kiện:
(3.47)
Trong đĩ: P(CiX)là xác suất thuộc phân lớp i khi biết trước mẫu X; P(Ci) xác suất là phân lớp i; P(xkCi) xác suất thuộc tính thứ k mang giá trị xk khi đã biết X thuộc phân lớp i.
Các bước thực hiện thuật tốn Bayes:
Bước 1: Huấn luyện Bayes (dựa vào tập dữ liệu), tính P(Ci) và P(xkCi). Bước 2: Phân lớp Xnew = (x1,x2,.....xn), tính xác suất thuộc từng phân lớp khi đã biết trước Xnew. Xnew được gán vào lớp cĩ xác suất lớn nhất theo cơng thức:
(3.48)
Trainbr là một hàm huấn luyện mạng, cho phép cập nhật các giá trị trọng số và ngưỡng. Giảm thiểu sự kết hợp của các lỗi bình phương và trọng số và sau đĩ xác định sự kết hợp chính xác để tạo ra một mạng nơron cĩ tính khái qt tốt. Q trình này được gọi là quy tắc Bayes.
net.trainFcn = 'trainbr' : Thiết lập mạng
Các thơng số mặc định
net.trainParam.epochs 1000 Số chu kỳ huấn luyện tối đa net.trainParam.goal 0 Giá trị mục tiêu cài đặt
net.trainParam.mu 0.005 Tốc độ
net.trainParam.mu_dec 0.1 Giảm trọng số
net.trainParam.mu_inc 10 Độ tăng trọng số
net.trainParam.mu_max 1e10 Thay đổi trọng số tối đa net.trainParam.max_fail 0 Các lỗi xác nhận tối đa net.trainParam.min_grad 1e-7 Độ dốc kết quả sai số
net.trainParam.show 25 Hiển thị thơng số
net.trainParam.showCommandLine false Tạo ra dịng lệnh suất net.trainParam.showWindow true Hiện giao diện huấn luyện net.trainParam.time inf Thời gian tối đa để đào tạo
3. Thuật tốn huấn luyện Scaled Conjugate Gradient (trainscg)
Trong mỗi thuật tốn conjugate gradient đều yêu cầu hướng tìm ở mỗi vịng lặp. Hướng tìm này tính tốn rất phức tạp vì u cầu mạng nơron phải đáp ứng với tất cả ng vào huấn luyện, được tính tốn nhiều lần ở mỗi bước tìm kiếm. Thuật tốn Scaled Conjugate Gradient được phát triển bởi Moller và được thiết kế để giảm thời gian tính tốn ở mỗi bước tìm kiếm. Thuật tốn này rất phức tạp để diễn tả trong một vài dịng, tuy nhiên ý tưởng cơ bản là kết hợp phương pháp tiếp cận khu vực độc quyền (The model-trust region approach) bằng cách sử dụng thuật tốn Levenberg-Marquardt kết hợp với thuật tốn Conjugate Gradient.
Trainscg là hàm huấn luyện mạng, hàm này cập nhật giá trị trọng số và ngưỡng các giá trị theo phương pháp liên hiệp.
net.trainFcn = 'trainscg' : thiết lập mạng. [net,tr] = train(net,...) : huấn luyện mạng.
Các thơng số mặc định
net.trainParam.epochs 1000 Số chu kỳ huấn luyện tối đa
net.trainParam.show 25 Hiển thị thơng số
net.trainParam.showCommandLine false Tạo ra dịng lệnh
net.trainParam.showWindow true Hiện giao diện huấn luyện net.trainParam.goal 0 Giá trị mục tiêu cài đặt
net.trainParam.time inf Thời gian tối đa để huấn luyện net.trainParam.min_grad 1e-5 Độ dốc kết quả sai số
net.trainParam.max_fail 6 các lỗi xác nhận tối đa
net.trainParam.sigma 5.0e-5 Xác định sự thay đổi trong trọng số cho xấp xỉ hàm bậc hai
net.trainParam.lambda 5.0e-7 Thơng số để điều chỉnh các tính khơng r ràng của ma trận Hess
4. Thuật tốn huấn luyện Resilient backpropagation (trainrp)
Hàm trainrp là hàm huấn luyện mạng cho phép cập nhật trọng số và trọng ngưỡng theo giải thuật resilient backpropagation algorithm (Rprop). Hàm trainrp cĩ thuật tốn huấn luyện chế độ batch đơn giản, cĩ độ hội tụ nhanh hơn nhiều so với hàm trainlm, ít tốn bộ nhớ và được lựa chọn nhiều.
Các mạng đa lớp thường sử dụng hàm truyền sigmoid trong các lớp ẩn. C hàm này gọi là hàm nén (squashing functions), vì chúng nén số liệu ng vào vơ hạn thành số liệu ng ra hữu hạn. Các 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ì độ dốc (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 tốn huấn luyện phục hồi mạng Resident Backpropagation (Rprop) là loại bỏ các nhược điểm 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ệ số delta_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ố delta_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 (Rprop algorithm).
Trainrp là một hàm huấn luyện mạng, hàm này cập nhật giá trị trọng số và