Ứng dụng mạng nơ ron trong điều khiển

February 16, 2017 | Author: Hoai Pham Hong | Category: N/A
Share Embed Donate


Short Description

Download Ứng dụng mạng nơ ron trong điều khiển...

Description

Ứng dụng mạng nơ ron trong điều khiển Trong bài này tôi xin trao đổi một số chủ đề tản mạn về mạng nơ ron và ứng dụng trong điều khiển. Hiện nay có nhiều sách và tài liệu bằng tiếng Anh viết về lý thuyết mạng nơ ron, nhưng có lẽ sách và tài tiếng Việt còn khá ít. Các bạn có thể tìm đọc tóm tắt lý thuyết mạng nơ ron trong mục 10.3 Hệ thống điều khiển mạng nơ ron, Chương 10 Thiết kế hệ thống điều khiển thông minh trong cuốn Công nghệ điều khiển tiên tiến của tác giả Roland S. Burns. Muốn thiết kế được hệ điều khiển dùng mạng nơ ron, trước hết chúng ta cần hiểu được nguyên lý của mạng nơ ron. Chúng ta hãy xét một mạng nơ ron đơn giản gồm ba lớp: lớp vào (input layer) có 2 nơ ron, lớp ẩn (hidden layer) có 3 nơ ron và lớp ra (output layer) có một nơ ron như được minh họa trong hình sau (xem thêm Ví dụ 10.4 trong 10.3 Hệ thống điều khiển mạng nơ ron):

Hình 1: Mạng nơ ron có ba lớp

Giả thiết rằng mạng nơ ron này được huấn luyện dùng thuật toán lan truyền ngược (BPA). Tín hiệu vào và lần lượt có giá trị 0.2 và 0.6 và đầu ra mong muốn = 1. Các trọng lượng ( ) và sai lệch ( ) được cho như sau: Lớp ẩn (l=1):

Lớp ra (l=2):

Sử dụng MATLAB (không dùng Neural Network Toolbox), hãy tính đầu ra và từ đó tính các giá trị mới cho các trọng lượng và sai lệch. Giả thiết là tốc độ học tập là = 0.5 và hàm kích hoạt sigmoid có dạng sau:

--Giải-Lan

truyền

thẳng

Lớp ẩn (l = 1): Tổng nơ ron đơn:

hoặc: (1)

Các hàm kích hoạt sigmoid (j = 1 to 3):

và (2)

Lớp đầu ra (l = 2): (3)

(4)

Nhập các giá trị vào các phương trình (1) và (2):

Nhập các giá trị vào phương trình (3) và (4): (5)

Lan

truyền

ngược

Lớp đầu ra (l = 2): Sử dụng phương trình sau:

Vì j = 1 nên: (6)

Quy

tắc

đen

ta:

Trọng lượng và sai lệch mới cho lớp đầu ra: (7)

Lớp ẩn (l = 1): Sử dụng phương trình sau:

Để minh họa phương trình này, nếu có hai nơ ron trong lớp (l + 1), nghĩa là lớp đầu ra, thì những giá trị cho lớp (l + 1) đã có thể được tính. Vì vậy, đối với lớp l (lớp ẩn), những giá trị

và là:

j

=

1:

j

=

2:

j

=

3:

Tuy nhiên, vì trong ví dụ này chỉ có một nơ ron đơn trong lớp (l + 1), l

. Do vậy những giá trị cho lớp là:

j = 1:

j = 2: (8)

j = 3:



vậy,

sử

dụng

quy

tắc

đen

ta,

số

gia

trọng

lượng

cho

lớp

ẩn

là:

Trọng lượng mới và sai lệch mới cho lớp ẩn bây giờ trở thành: (9)

Từ các tính toán trên, chúng ta có thể sử dụng các lệnh MATLAB để tính các trọng lượng và sai lệch cho các lớp như sau: matlab code 1. 2. % Vidu01.m 3. 4. x = [0.2;0.6]; 5. Wi = [1.0 1.5;0.5 2.0;2.5 3.0]; 6. bhj = [1.0;-0.5;1.5]; 7. Wj = [3.0 2.0 1.0]; 8. boj = -4; 9. dj = 1; 10. eta = 0.5; % learning rate 11. 12. % Calculate yj and new values for the weights and bias, assuming that 13. % learning rate eta = 0.5 14. % Forward propagation: 15. %L = 1; 16. 17. s = Wi*x + bhj 18. 19. y = 1./(1+exp(-s)) 20.

21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.

s1 = Wj*y+boj y1 = 1./(1+exp(-s1)) % Back propagation del=y1*(1-y1)*(dj-y1) % Delta rule: xx = [1;y] delw = eta*del*xx newWj = Wj+delw(2:4)' newboj = boj+delw(1) % Hidden layer delh = (y.*(1-y)).*(newWj'*del) newxx = [1;x] % Using the delta rul, the weight increments for hidden layer % are calculated by: Delhw = eta*delh*newxx' % New weights and biases for the hidden layer: newWi = Wi+[Delhw(2,:)' Delhw(3,:)'] newbhj = bhj + Delhw(1,:)'

Kết quả tính trọng lượng và sai lệch cho lớp ẩn là: matlab code 1. 2. newWi = 3. 1.0110 4. 0.5022 5. 2.5066 6. 7. newbhj = 8. 1.0075 9. -0.4985 10. 1.5045 11.

1.5006 2.0001 3.0003

--Chú ý:-- Chương trình MATLAB ở trên chỉ minh họa các bước tính cho mô hình mạng nơ ron cụ thể ở trên. Để lập chương trình cho một mạng nơ ron tổng quát chúng ta cần phải lập các hàm cần thiết cho thuật toán mạng nơ ron. Nếu sử dụng Neural Network Toolbox trong MATLAB chúng ta có các công cụ để lập các chương trình mô phỏng mạng nơ ron. Nếu bạn có Neural Network Toolbox hãy dùng lệnh sau xem chi tiết về hộp công cụ này của MATLAB:

matlab code 1. 2. >> help nnet 3.

Qua ví dụ này, chúng ta có thể tóm tắt thuật toán mạng nơ ron sử dụng thuật lan truyền ngược như sau: --Bước 1-- Tổng nơ ron đơn: (10)

--Bước 2-- Hàm kích hoạt sigmoid: (11)

--Bước 3-- Quy tắc đen ta: (12)

--Bước 4-- Trọng lượng mới: (13)

--Bước 5-- Lớp đầu ra: (14)

(15)

--Bước 6-- Các lớp khác: (16)

Quá trình tiếp diễn cho đến khi thỏa mãn một điều kiện nào đó, ví dụ (theo Burns, 2001): (i) chỉ số đặc tính J đạt tới giá trị thấp chấp nhận được (ii) một số đếm lặp cực đại (số các epochs) được vượt quá

(iii) một chu kỳ (khoảng, period) thời gian huấn luyện (rèn luyện) được vượt quá. Đối với (ii) hoặc (iii) có thể định vị được các điểm cực tiểu cục bộ. Theo những điều kiện này thì BPA có thể sẽ tái bắt đầu, và nếu lại không thành công, có thể cần một tập hợp rèn luyện (training) mới. Các hàm kích hoạt (activation functions) có thể sử dụng là: 1. Giới hạn cứng (hard limiting) (bậc thang đơn vị, unit step) 2. Tuyến tính (linear) (tăng đều, ramp) 3. Tang hyperbolic (hyperbolic tangent) 4. Sigmoid hoặc log-sigmoid

Ứng

mạng



ron

trong

điều

khiển

Bây giờ chúng ta hãy thử làm thêm hai bài tập đơn giản sau (trích từ cuốn Công nghệ điều khiển tiên tiến ở trên). ==Bài tập 1== Một mạng nơ ron có cấu trúc như trong sau. Giả thiết rằng tất cả các hàm kích hoạt là sigmoids, tính các giá trị và khi các đầu vào là: (a) (b)

, ,

Hình 1: Cấu trúc mạng nơ ron cho Bài tập 1

khi

trọng

lượng



sai

lệch

là:

Lớp ,

ẩn

Lớp

ra

, --Trả (a) (b)

lời-, ,

--Giải-Có nhiều cách biểu diễn mạng nơ ron. Để giải bài tập này tôi thử vẽ lại mô hình mạng nơ ron như trong hình sau có thể sẽ thấy dễ hiểu hơn:

Hình 2: Mạng nơ ron có hai lớp: hai đầu vào, lớp 1 (ẩn) có 3 nơ ron, lớp 2 (ra) có hai nơ ron

Trong hình: là véc tơ đầu vào, là ma trận trọng lượng lớp 1 (ẩn), là véc tơ sai lệch lớp 1 (ẩn), các hàm kích hoạt lớp 1 (ẩn), là véc tơ đầu ra của lớp 1 (ẩn) và cũng là đầu vào của lớp 2 (ra), ma trận trọng lượng lớp 2 (ra), véc tơ sai lệch lớp 2 (ra), các hàm kích hoạt lớp 2 (ra) và là véc tơ đầu ra của lớp 2 (ra). Bài tập này chính là tính giá trị đầu ra cho mạng nơ ron truyền thẳng. Sử dụng công thức ở trên cho hai lớp, chúng ta tính như sau: matlab code 1.

2. % Baitap01.m 3. 4. %x = [0.3;0.5]; 5. x = [0.9;0.1] 6. W1 = [1.0 2;3 3;2 1]; 7. b1 = [2.0;-2;1]; 8. W2 = [-3 -2 1;1 2 3]; 9. b2 = [3;-3]; 10. % desired outputs and learning rate: 11. %d = [0;1]; 12. %eta = 0.5; 13. 14. % Forward propagation: 15. 16. s1 = W1*x + b1 17. 18. y1 = 1./(1+exp(-s1)) 19. 20. s2 = W2*y1+b2 21. 22. y2 = 1./(1+exp(-s2)) 23.

kết

quả

a) tín hiệu vào là: matlab code 1. 2. x 3.

= [0.3;0.5];

thì matlab code 1. 2. y2 = 3. 0.4502 4. 0.8623 5.

b) tín hiệu vào là: matlab code 1.

tính

được:

2. x 3.

= [0.9;0.1];

thì matlab code 1. 2. y2 = 3. 0.4049 4. 0.9057 5.

Chúng ta đã có kết quả giống với đáp số. Đến đây chúng ta hãy nghĩ thêm nếu bây giờ đặt mạng nơ ron này vào làm một phần tử của một hệ thống nào đó và tín hiệu đầu vào liên tục (là một chuỗi) thì chúng ta sẽ cần phải lập chương trình như thế nào? Bài tập sau sẽ minh họa thuật toán lan truyền ngược cho mạng nơ ron trong Bài tập 1. ==Bài tập 2== Trong Bài tập 1(b), nếu các giá trị mục tiêu cho đầu ra là , và , tính các giá trị mới cho trọng lượng và sai lệch sử dụng thuật toán lan truyền ngược. Giả thiết rằng tốc độ học tập 0.5 không có số hạng động lượng. lời-ra:

--Trả Lớp , , Lớp

ẩn: ,



, Các bạn hãy sử dụng máy tính tay (calculator) và giấy nháp để giải hai bài tập trên và sau đó dùng MATLAB cho ra cùng kết quả thì tôi tin rằng các bạn đã hiểu được mạng nơ ron. Và sau khi đã hiểu được mạng nơ ron ở trên, các bạn hãy làm tiếp bài tập sau (Bài tập 3) hơi phức tạp hơn một chút. Làm bài tập sau là trang bị thêm hành trang để tiến tới thiết kế một bộ điều khiển mạng nơ ron đơn giản cho một đối tượng nào đó. --Giải (BT2)-Để cập nhật các ma trận trọng lượng và sai lệch thuật bằng thuật toán lan truyền ngược người ta có thể sử dụng một phương pháp tối ưu (ví dụ sai số bình phương nhỏ nhất). Thuật lan truyền ngược dùng để huấn luyện mạng nơ ron, nói nôm na là điều chỉnh các ma trận trọng lượng và sai lệch trong các lớp. Thuật toán lan truyền (sử dụng phương pháp sai số bình phương nhỏ nhất, hay theo Burns (2001) là phương pháp tối ưu hóa gradient giảm (gradient-descent optimization method), thông qua Quy tắc Delta với tốc độ học tập và hàm kích hoạt sigmoid) được minh họa trong hình sau:

Hình 3: Minh họa thuật toán lan truyền ngược cho mạng nơ ron

Sơ đồ khối biểu diễn tương đương như sau:

Hình 4: Minh họa thuật toán lan truyền ngược cho mạng nơ ron

Các bước tính toán như sau: matlab code

1. 2. % Baitap02.m 3. 4. %x = [0.3;0.5]; 5. x = [0.9;0.1]; 6. W1 = [1.0 2;3 3;2 1]; 7. b1 = [2.0;-2;1]; 8. W2 = [-3 -2 1;1 2 3]; 9. b2 = [3;-3]; 10. % desired outputs and learning rate: 11. d = [0;1]; 12. eta = 0.5; 13. 14. % Forward propagation: 15. 16. s1 = W1*x + b1 17. 18. y1 = 1./(1+exp(-s1)) 19. 20. s2 = W2*y1+b2 21. 22. y2 = 1./(1+exp(-s2)) 23. 24. % Back propagation algorithm: 25. % Output layer: 26. e = y2.*(1-y2).*(d-y2) 27. Dw2 = (eta.*e)*y1' 28. W2new = W2+Dw2 29. Db2 = (eta.*e).*[1;1] 30. b2new = Db2+b2 31. 32. % Hidden layer: 33. e1 = (y1.*(1-y1)).*(W2new'*e) 34. Dw1=(eta.*e1)*x' 35. W1new = W1+Dw1 36. Db1 = (eta.*e1).*[1;1;1] 37. b1new = Db1+b1 38.

với đầu vào (trường hợp (b) trong Bài tập 1): matlab code 1. 2. x 3.

thu --Lớp Sai số:

= [0.9;0.1];

được

kết ra

quả: (2):--

matlab code 1. 2. e = 3. -0.0976 4. 0.0080 5.

Ma trận trọng lượng và sai lệch mới của lớp ra: matlab code 1. 2. W2new = 3. -3.0467 4. 1.0039 5. 6. b2new = 7. 2.9512 8. -2.9960 9.

-2.0357 2.0029

0.9538 3.0038

ẩn

--Lớp Sai số: matlab code 1. 2. e1 = 3. 0.0126 4. 0.0422 5. -0.0034 6.

Ma trận trọng lượng và sai lệch mới của lớp ẩn: matlab code 1. 2. W1new = 3. 1.0057 4. 3.0190 5. 1.9985 6. 7. b1new = 8. 2.0063 9. -1.9789 10. 0.9983 11.

2.0006 3.0021 0.9998

(1):--

Chú ý: Kết quả cho lớp ẩn hơi khác so với đáp số (Burns 2001) một chút, tôi nghĩ có thể do phép làm tròn, nếu do nguyên nhân khác thì chưa tìm ra! Bây giờ các bạn hãy hình dung mạng nơ ron trong hai bài tập này nhận các tín hiệu vào liên tục chúng ta sẽ có một mạng nơ ron được huấn luyện để nó thực hiện một nhiệm vụ thỏa mãn một yêu cầu nào đó... và cho đến đây, tôi tin chắc các bạn ít nhất đã có chút khái niệm về ý tưởng của mạng nơ ron nhân tạo! Bạn hãy tiếp tục làm thêm Bài tập số 3 hơi phức tạp hơn ở dưới, và sau đó hãy thử ứng dụng thiết kế một bộ điều khiển sử dụng mạng nơ ron xem sao. Các bạn có Hộp công cụ mạng nơ ron (Neural Networks Toolbox, NNT) trong MATLAB hãy thử dùng và kiểm tra kết quả của hai bài tập trên xem sao. Bạn có thể đọc được Hướng dẫn sử dụng NNT có trong hệ thống trợ giúp trực tuyến (online help) của MATLAB hoặc ở đây. ==Bài tập 3== Cho một mạng nơ ron gồm ba lớp: lớp vào, lớp ẩn và lớp ra. Lớp vào có 5 nơ ron, lớp ẩn có 10 nơ ron và lớp ra có 2 nơ ron như trong hình sau.

Hình 1: Mạng nơ ron có ba lớp cho Bài tập 3

Số nơ ron lớp Số nơ ron lớp Số nơ ron lớp Tổng số kiểu mẫu tín Hàm kích hoạt f(s) Chỉ số đặc tính (performance index) (tổng bình phương sai số):

vào ẩn ra hiệu là

= = = vào hàm

=

5 10 2 32 sigmoid

được

đánh

giá

thỏa

mãn

điều

kiện

J

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF