Chương 7 CÁC KHÁI NIỆM CƠ BẢN VỀ MẠNG NƠ RON NHÂN TẠO 7.1. Cấu trúc và mô hình của mạng nơ ron Mạng nơ ron là sự tái tạo bằng kỹ thuật những chức năng của hệ thần kinh con người. Trong quá trình tái tạo không phải tất cả các chức năng của bộ não con người đều được tái tạo, mà chỉ có những chức năng cần thiết. Bên cạnh đó còn có những chức năng mới được tạo ra nhằm giải quyết một bài toán định trước. Mạng nơ ron bao gồm vô số các nơ ron được liên kết truyền thông với nhau trong mạng, hình 7.1 là một phần của mạng nơ ron bao gồm hai nơ ron. Nơ ron còn có thể liên kết với các nơ ron khác qua các rễ. Chính vì cách liên kết đa dạng như vậy nên mạng nơ ron có độ liên kết rất cao. Các rễ của nơ ron được chia làm hai loại: loại nhận thông tin từ nơ ron khác qua axon, ta gọi là rễ đầu vào và loại đưa thông tin qua axon tới nơ ron khác gọi là rễ đầu ra. Một nơ ron có thể có nhiều rễ đầu vào, nhưng chỉ có một rễ đầu ra như vậy có thể xem nơ ron như một mô hình nhiều đầu vào một đầu ra, (hình 7.2). Hình 7.1. Một mạng nơ ron đơn giản gồm hai nơ ron. Chiều thông tin Rễ đầu ra axon Axon được nối với rễ đầu vào của nơ ron 2 Rễ đầu ra của nơ ron 1 được nối với axon Nhân Nhân Hình 7.2. Mô hình của một nơ ron y x1 x2 . . . . xn Nơ ron Một tính chất rất cơ bản của mạng nơ ron sinh học là các đáp ứng theo kích thích có khả năng thay đổi theo thời gian. Các đáp ứng có thể tăng lên, giảm đi hoặc hoàn toàn biến mất. Qua các nhánh axon liên kết tế bào nơ ron này với các nơ ron khác, sự thay đổi trạng thái của một nơ ron cũng kéo theo sự thay đổi trạng thái của những nơ ron khác và do đó làm thay đổi toàn bộ mạng nơ ron. Việc thay đổi trạng thái của mạng nơ ron có thể thực hiện qua một quá trình “dạy” hoặc do khả năng “học” tự nhiên. Sự thay thế những tính chất này bằng một mô hình toán học tương đương được gọi là mạng nơ ron nhân tạo. Mạng nơ ron nhân tạo có thể được chế tạo bằng nhiều cách khác nhau vì vậy trong thực tế tồn tại rất nhiều kiểu mạng nơ ron nhân tạo. Mô hình nơ ron có m đầu vào x1, x2, ...xm và một đầu ra y (hình 7.3), mô hình này gồm có ba thành phần cơ bản: + Các kích thích đầu vào của tế bào nơ ron có thế năng tác động vào màng membran khác nhau được biểu diễn qua trọng lượng wi, i = 1, .., m tương ứng với cường độ kích thích của từng đầu vào. Các kích thích đầu vào được thực hiện qua một bộ tổng, đó là giá trị đo kích thích đầu vào tác động vào tế bào nơ ron. + Đầu ra của bộ tổng được đưa đến bộ đáp ứng a(.), bộ này không chỉ có chức năng tạo ra đáp ứng tức thời mà còn có khả năng lưu giữ các đáp ứng theo thời gian. Thành phần này hoạt động theo nguyên lý “ nhớ “ động. + Nơ ron bị kích thích trong thời gian thế năng của màng membran vượt quá ngưỡng. Quan hệ này được thực hiện nhờ hàm a(.), nó có chức năng của bộ tạo tín hiệu ngưỡng, xác định phụ thuộc của tín hiệu ra y vào các kích thích đầu vào. Cách thành lập nơ ron nhân tạo như vậy tạo ra một độ tự do trong thiết kế. Việc lựa chọn phép cộng tín hiệu đầu vào và đáp ứng a(.) sẽ cho ra các kiểu mạng nơ ron nhân tạo khác nhau và tương ứng là các mô hình mạng khác nhau. Theo hình 7.3 thì tín hiệu đầu ra yi là: ( ) ( ) ∑ = −=+ m j i tjxijwatiy 1 1 θ (7.1) Hình 7.3. Cấu trúc của một nơ ron. yi wim wi2 wi1 xm x2 x1 Đầu vào Đầu ra Các trọng số f(.) a(.) Σ θi trong đó hàm kích hoạt a(f) ở dạng hàm bước nhẩy: ( ) < ≥ = 00 01 fkhi fkhi fa (7.2) Như vậy yi chỉ có thể có 2 giá trị hoặc bằng 0, hoặc bằng 1. Các hàm f(.) thường được sử dụng ∑ = −== m j ij xijwinetif 1 θ (7.3) + Hàm bình phương (Quadratic function): ∑ = −= m j ij xijwif 1 2 θ (7.4) + Hàm hình cầu (Spherical function): ∑ = −−−= m j iij wjxif 1 2 2 θρ (7.5) trong đó ρ và wij là bán kính và tâm của hình cầu. + Hàm đa thức (Polynomial function): i k kx j jxkxjx m j m k ijk wif θ αα −++∑ = ∑ = = 1 1 (7.6) trong đó wijk là trọng số kết nối phần tử j và k đến phần tử i; αj và αk là các hệ số thực không đổi. ở đây θi là ngưỡng đặt vào phần tử nơ ron thứ i. Các hàm kích hoạt thường sử dụng: + Hàm bước nhẩy (Step function): ( ) < ≥ = 00 01 fif fif fa (7.7) + Hàm dấu (Hard limiter – threshold function): ( ) ( ) = 00 10 11 fif fiff fif fa , (7.9) + Hàm sigmoid đơn cực (Unipolar sigmoid function): ( ) fe fa λ−+ = 1 1 (7.10) + Hàm sigmoid lưỡng cực (Bipolar sigmoid function): ( ) 1 1 2 − −+ = fe fa λ trong đó λ > 0 (7.11) Hình 2.4 là đồ thị của các hàm nói trên 7.2. Phân loại cấu trúc mạng nơ ron 7.2.1. Mạng nơ ron 1 lớp: Hình 7.5, 7.6, 7.7 là một loại liên kết đặc thù của mạng nơ ron. Nơ ron có các mối liên hệ đến các nơ ron khác nhờ các trọng số. Một lớp nơ ron là một nhóm các nơ ron mà chúng đều có cùng các trọng số, nhận cùng số tín hiệu đầu vào đồng thời. Trong ma trận trọng số, các hàng thể hiện các nơ ron, mỗi hàng thứ j có thể đặt nhãn như một véc tơ wj của nơ ron thứ j gồm m trọng số wji. Các trọng số trong cùng một cột thứ j (j = 1, 2, ...., n) đồng thời cùng nhận một tín hiệu đầu vào xj: wj = [ wj1, wj2, ..., wjm ] (7.12) Tại cùng một thời điểm, véc tơ đầu vào: x = [ x1, x2, ..., xm ] (7.13) có thể là một nguồn bên ngoài đưa tới mạng. (d) (e) -1 1 1 1 f f f a a a a f a f (a) (b) (c) λ = 7 5 3 2 1.5 1 0.5 λ = 7 5 3 2 1.5 1 0.5 Hình 7.4. Các hàm kích hoạt: (a) hàm bước nhẩy; (b) hàm dấu; (c) hàm dốc; (d) hàm sigmoid đơn cực; (e) hàm sigmoid lưỡng cực. w1m w2m w21 wnm Hình 7.5. Mạng nơ ron 1 lớp. w11 y1 . . y2 .. x1 x2 Hình 7.6. Mạng nơ ron hồi quy y1 y2 x1 x2 Hình 7.7. Mạng nơ ron nhiều lớp. 7.2.2. Mạng nơ ron truyền thẳng nhiều lớp: Mạng nơ ron nhiều lớp (hình 7.7) có các lớp được phân chia thành 3 loại sau: - Lớp vào là lớp nơ ron đầu tiên nhận tín hiệu vào xi. Mỗi tín hiệu xi được đưa đến tất cả các nơ ron của lớp đầu vào, chúng được phân phối trên các trọng số đúng bằng số nơ ron của lớp này. Thông thường, các nơ ron đầu vào không làm biến đổi các tín hiệu vào xi, tức là chúng không có các trọng số hoặc không có các loại hàm chuyển đổi nào, chúng chỉ đóng vai trò phân phối các tín hiệu và không đóng vai trò sửa đổi chúng. - Lớp ẩn là lớp nơ ron dưới lớp vào, chúng không trực tiếp liên hệ với thế giới bên ngoài như các lớp nơ ron vào và ra. - Lớp ra là lớp nơ ron tạo các tín hiệu ra cuối cùng. 7.2.3 Mạng nơ ron hồi quy: Mạng nơ ron hồi quy còn được gọi là mạng phản hồi, là loại mạng tự liên kết thành các vòng và liên kết hồi quy giữa các nơ ron. Mạng nơ ron hồi quy có trọng số liên kết đối xứng như mạng Hopfield luôn hội tụ về trạng thái ổn định (hình 7.6). Mạng BAM thuộc nhóm mạng nơ ron hồi quy, gồm 2 lớp liên kết 2 chiều, không được gắn với tín hiệu vào-ra. Nghiên cứu mạng nơ ron hồi quy có trọng số liên kết không đối xứng sẽ gặp phức tạp nhiều hơn so với mạng truyền thẳng và mạng hồi quy đối xứng. Đặc điểm cấu trúc mạng nơ ron mà người ta quan tâm đến là: số lượng đầu vào, đầu ra, số lượng các lớp, số lượng nơ ron có trong mỗi lớp, trọng số liên kết trong mỗi lớp và giữa các lớp với nhau. Căn cứ vào yêu cầu của tín hiệu học, đối với mỗi cấu trúc mạng, mạng nơ ron cần được đánh giá lại giá trị của trọng số liên kết bằng cách thực hiện bài toán tối ưu thông qua các điều kiện thực hiện được gọi là luật học. Mỗi luật học chỉ phù hợp với từng dạng tín hiệu học và cũng chỉ phù hợp với từng kiểu cấu trúc mạng. Hình 2.5. Một số liên kết đặc thù của mạng nơ ron. y1 . yn x1 x2 . xm 7.3. Các luật học: Học tham số (Parameter Learning): là các tham số về trọng số cập nhật kết nối giữa các nơ ron. Học cấu trúc (Structure Learning): trọng tâm là sự biến đổi cấu trúc của mạng nơ ron gồm số lượng nút và các mẫu liên kết. Trong tài liệu nay chúng ta chỉ đề cập tới luật học tham số: Giả sử ma trận trọng số bao gồm tất cả các phần tử thích ứng của mạng nơ ron. Nhiệm vụ của việc học thông số là bằng cách nào đó, tìm được ma trận chính xác mong muốn từ ma trận giả thiết ban đầu với cấu trúc của mạng nơ ron có sẵn. Để làm được việc trên, mạng nơ ron sử dụng các trọng số điều chỉnh, với nhiều phương pháp học khác nhau có thể tính toán gần đúng ma trận W cần tìm đặc trưng cho mạng. Có 3 phương pháp học: - Học có giám sát (Supervised Learning): Là quá trình học có tín hiệu chỉ đạo bên ngoài d (hình 7.6). - Học không có giám sát (Unsupervised Learning): Là quá trình học không có tín hiệu chỉ đạo từ bên ngoài (hình 7.7). Dạng tổng quát của luật học trọng số của mạng nơ ron cho biết là gia số của véc tơ wi là ∆wi tỷ lệ với tín hiệu học r và tín hiệu đầu vào x(t): ∆wi(t) = η.r.x(t) (7.14) η là một số dương còn gọi là hằng số học, xác định tốc độ học, r là tín hiệu học, nó phụ thuộc : r = fr(wi, x, di). (7.15) Từ (7.14) ta thấy véc tơ trọng số wi = [wi1, wi2, ..., wim] T có số gia tỷ lệ với tín hiệu vào x và tín hiệu học r. Véc tơ trọng số ở thời điểm (t+1) được tính như sau: wi(t+1) = wi(t) + ηfr(wi(t), x(t), d(t)) x(t) (7.16) Phương trình liên quan đến sự biến đổi trọng số trong mạng nơ ron rời rạc và tương ứng với sự thay đổi trọng số trong mạng nơ ron liên tục theo biểu thức: ( ) ( )txr dt tidw ..η= (7.17) x e d y Mạng Nơron Bộ phát tín hiệu sai lệch Hình 7.6. Học có giám sát. x y MạngNơ ron Hình 7.7. Học không giám sát. Một số thuật toán học có giám sát và không giám sát được phát triển dựa vào luật cập nhật trọng số 7.17, sự khác biệt chính giữa các thuật toán học có giám sát và không giám sát này là tín hiệu học r sẽ được phát ra để cập nhật trọng số như thế nào. Luật Hebb là một ví dụ điển hình, với tiếp cận trọng số được điều chỉnh phù hợp với quan hệ trước –sau. Cụ thể luật học Hebb định nghĩa: i T i yxwar == )( (7.18) với a(.) là hàm kích hoạt. Tóm lại trong luật Hebb tín hiệu lỗi r đơn giản là đầu ra của nơ ron hiện thời. Theo công thức 1.17 ta có 1.19 ∆wi = η.a(wi Tx)x = η.yi.x (7.19) Từ đó các thành phần của của véc tơ trọng số wi được cập nhật như sau: ∆wij = η.a(wi Tx)xj = η.yi.xj i = 1,…,n; j = 1,…, m (7.20) Luật Hebb là luật học không giám sát cho mạng truyền thẳng, nó chỉ sử dụng các đầu vào và các đầu ra hiện thời để cập nhật trọng số. Trong luật học này các trọng số cần được khởi tạo ngẫu nhiên với giá trị xấp xỉ bằng không trước khi học Ví dụ: Xét mạng chỉ có một đơn vị xử lý như hình 7.3 với hàm kích hoạt là hàm dấu Sign(), Sign(x)=1 nếu x ≥ 0 và Sign(x)=-1 nếu x < 0/ Có 4 đầu vào x1, x2, x3, x4. Véc tơ trọng số w = (w1, w2, w3, w4). Giả sử ta huấn luyện cho mạng với 3 véc tơ mẫu sau: = 0 5.0 5.1 1 )1(x , − = 5.1 0 1 5.0 )2(x , − − − = 5.0 1 0 1 )3(x . Véc tơ trọng số được khởi tạo: − = 0 1 0 1 )1(w và hằng số học được cho là η=1. Theo luật Hebb ta có các bước kết quả sau: Bước 1: Đưa véc tơ mẫu x(1) được đưa vào để cập nhật véc tơ trọng số − = + − =+= 0 5.0 5.1 2 0 5.0 5.1 1 )5.0( 0 1 0 1 ))(( )1()1()1()1()2( SignxxwSignww T Bước 2: Đưa véc tơ mẫu x(2) được đưa vào để cập nhật véc tơ trọng số − = + − =+= 5.1 5.0 5.2 5.1 5.1 0 1 5.0 )5.0( 0 5.0 5.1 2 ))(( )2()2()2()2()3( SignxxwSignww T Bước 3: Đưa véc tơ mẫu x(3) được đưa vào để cập nhật véc tơ trọng số = − − − −+ − =+= 2 5.0 5.2 5.2 5.0 1 0 1 )75.0( 5.1 5.0 5.2 5.1 ))(( )3()3()3()3()4( SignxxwSignww T Có thể nhận thấy: 1)(()(( )2()4()1()4( == xwSignxwSign TT và 1)(( )3()4( −=xwSign T . 7.4. Mạng nơ ron truyền thẳng Trong phần này chúng ta sẽ nghiên cứu mạng một lớp và mạng nhiều lớp truyền thẳng với luật học có giám sát 7.4.1. Mạng Perceptron một lớp đơn Hình 7.8. Mạng perceptron đơn Hình 7.8 là một ví dụ về một mạng perceptron đơn. Cho các véc tơ mẫu đầu ra d(k) = [d1 (k), d2 (k), …, dn (k)]T tương ứng với các véc tơ mẫu đầu vào đầu vào là x(k) = [x1 (k), x2 (k), …, xm (k)]T, k = 1, …, p trong đó m là số đầu vào, n là số đầu ra, p là số cặp mẫu. Đầu ra thực tế theo cấu trúc: k i m j k jij kT i k i dxwaxway = == ∑ =1 )()( )( , i = 1, …, n; k = 1,…, p (7.21) với wi T = [wi1, xi2, …, wim] T là véc tơ trọng số liên kết với nơ ron thứ i và a(.) hàm dấu hoặc hàm sigmond Với đầu ra mong muốn di (k) có thể lấy các giá trị -1, +1. Khi đó công thức (7.21) trở thành: đầu ra thực tế đầu ra mong muốn y1 y2 yn e1 e2 en d1 d2 dn w11 w12 w1n x1 x2 xm-1 xm )()()( )( ki kT i k i dxwSigny == với i = 1, …, n; k = 1,…, p (7.22) Điều này cho thấy véc tơ trọng số wi của nơ ron thứ i phải được chọn sao cho tích vô hướng của mẫu x(k) và nó có giá trị giống như di (k). Siêu phẳng wTx = 0 chia tập dữ liệu thành 2 phần một phần gồm các dữ liệu có đầu ra mong muốn dương và một phần gồm các dữ liệu có đầu ra mong muốn âm. Như vậy perceptron đơn có khả năng phân lớp dữ liệu và thủ tục sau được dùng để huấn luyện để có thể tìm ra các trọng số của mạng, từ đó tìm ra mặt phẳng phân lớp, thủ tục này được xây dựng như sau: Xét luật học tổng quát (7.14) với tham số học: ii ydr −= (7.23) với )( xwSigny Tii = và di là đầu ra thực tế và đầu ra mong muốn của nơ ron thứ i. Giả sử di nhận các giá trị -1, +1, sử dụng (7.14) ta có ≠ =−=∆ otherwise dyifxd xxwsigndw iijij T iiij 0 2 )]([ η η với j = 1,…, m (7.24) Từ đây ta thấy trọng số chỉ được điều chỉnh khi đầu ra thực tế yi khác di. Các trọng số ban đầu được khởi tạo bất kỳ Mạng perception có khả năng phân lớp dữ liệu, ví dụ: Cho mạng perceptron đơn giản chỉ có một nơ ron, hình 7.10 Hình 7.10. Mạng perceptron đơn giản dùng cho bài toán phân lớp Không gian đầu vào gồm các giá trị: x(1) = 0.5, x(2) = 2, x(3) = -1, x(4) = -2 d(1)= d(3)= +1, d(2)= d(4)= -1 Như vậy các mẫu tương ứng được dùng để huấn luyện mạng là: − = 1 5.0)1(x , − = 1 2)2(x , − − = 1 1)3(x , − − = 1 1)4(x Để thuận tiện ta chọn η = 0.5 và khởi tạo véc tơ trọng số w = [-2, 1.5] Quá trình huấn luyện diễn ra như sau Bước 1: Khi x(1) được đưa vào, đầu ra thực tế và các trọng số được xác định như sau: w1 w2 x 1 y d d-y )1()1( 1 1 5.0 ]5.1,2[ dsigny ≠−= − −= , − =+= 5.0 5.1)1()1()2( xww Bước2: Khi x(2) được đưa vào, đầu ra thực tế và các trọng số được xác định như sau: )2()2( 1 1 1 ]5.0,5.1[ dsigny ≠+= − − −= , − =−= 5.1 5.0)2()2()3( xww Bước 3: Khi x(3) được đưa vào, đầu ra thực tế và các trọng số được xác định như sau: )3()3( 1 1 2 ]5.1,5.0[ dsigny ≠−= − −= , =+= 5.0 5.1)3()3()4( xww Bước 4: Cuối cùng khi x(4) được đưa vào, đầu ra thực tế và các trọng số được xác định như sau: )4()4( 1 1 2 ]5.0,5.1[ dsigny =−= − − = , )4()5( ww = Tiếp tục sử dụng các dữ liệu: x(5) = x(1), x(6) = x(2), x(7) = x(3), x(8) = x(4), đưa vào mạng và cập nhật lại trọng số ta thấy w(8) = w(7)= w(6)= w(4). Tóm lại w(4), là kết quả của bài toán, hình 7.11 cho thấy đường phân lớp được được xác định nhờ mạng nơ ron. Hình 7.11. Đường thẳng phân lớp được xác định nhờ mạng Chúng ta đã đề cập tới khả năng phân lớp của mạng perceptron, tuy nhiên khả năng này phụ thuộc vào tập mẫu, ví dụ: xét bài toán XOR cho bởi hình 7.12. Hình 7.12. Bài toán XOR x2 g(x)=1.5x1+0.5x2 x1 lớp 2 lớp 1 (0,0) (0,1) (1,1) Rõ ràng ở đây không thể tồn tại một đường thẳng chia tập dữ liệu thành 2 phần thoả điều kiện các phần tử ở phần 1 có đáp ứng bằng 1, và các phần tử ở phần 2 có đáp ứng bằng 0. Do đó ta không thể biểu diễn hàm XOR bằng một mạng perceptron đơn cùng với hàm kích hoạt tuyến tính. 7.4.2. Mạng truyền thẳng nhiều lớp MLP Mạng một lớp perceptron được dùng để phân lớp và xấp xỉ các hàm, tuy nhiên nó phụ thuộc vào dữ liệu mẫu của bài toán, bài toán XOR là một ví dụ (không có mạng perceptron tương ứng). Để giải quyết điều đó người ta đưa ra một cấu trúc mạng truyền thẳng nhiều lớp, ví dụ sau sẽ minh chứng điều đó: Xét bài toán XOR, với các mẫu đầu vào và đầu ra mong muốn = = 1, 0 0 )1()1( dx ; −= = 1, 1 0 )2()2( dx ; −= = 1, 0 1 )1()3( dx ; = = 1, 1 1 )2()4( dx Rõ ràng bốn mẫu vào này không thể phân chia tuyến tính trong không gian đầu vào. Để phân chia tập mẫu này ta phải sử dụng đến hai đường thẳng như hình 7.13(a): Hình 7.13. Mạng perceptron đa lớp cho bài toán XOR x1 - x2 +0.5 = 0 x1 - x2 -0.5 = 0 0.5 1 x1 x2 -0.5 0.5 1 -1 -1 1 x1 x2 -1 0.5 z1 z2 y -1 0.5 1 z1 z2 z1 - z2 -0.5 = 0 (a) (b) (c) Như vậy mỗi không gian con bao gồm các mẫu các mẫu của các lớp tương ứng của bài toán, hai đường thẳng được chọn là: x1 – x2 + 0.5 = 0 và x1 – x2 – 0.5 = 0 Ta sử dụng hai nơ ron để thực hiện việc trên, các đầu ra tương ứng của chúng là: z1 = Sign(x1 – x2 + 0.5) và z1 = Sign(x1 – x2 – 0.5) Các đơn vị này sẽ được đặt trong tầng ẩn của một mạng 3 lớp hình 7.13(c), chú ý lớp một chỉ tiếp nhận đầu vào chứ không đóng vai trò xử lý Như vậy các mẫu gốc sẽ có các ảnh tương ứng sau khi đi qua lớp ẩn này, các ảnh này là: = − = 1, 1 1 )1()1( dz ; −= − − = 1, 1 1 )1()2( dz ; −= = 1, 1 1 )1()3( dz ; = − = 1, 1 1 )1()4( dz ; Sự thay đổi của các mẫu huấn luyện trong không gian ảnh thể hiện trong hình 7.13(b), các mẫu x(1), x(4) trở nên trùng khớp trong không gian ảnh, nhờ đó có thể tiến hành quá trình phân lớp tuyến tính. Đường biên chia ba mẫu trên thành 2 lớp có thể chọn tuỳ ý, ví dụ z1 - z2 - 0.5 = 0. Đây chính là đầu vào của nơ ron ở tầng xuất, và đầu ra tương ứng là: y = Sign(z1 - z2 - 0.5) Cuối cùng ta có mạng nơ ron 3 lớp (hình 7.13(c)) để giải bài toán phân lớp XOR như đã đề cập. CHƯƠNG 8 CÁC GIẢI THUẬT HUẤN LUYỆN MẠNG NƠ RON Trong chương này tài liệu giới thiệu các phương pháp huấn luyện mạng nơ ron trong đó đề cập tới mạng nơ ron truyền thẳng nhiều lớp MLP và mạng RBF với thuật toán huấn luyện lan truyền ngược sai số 8.1.Mạng nơ ron MLP và thuật toán huấn luyện lan truyền ngược sai số Thuật toán học lan truyền ngược là một thuật toán trong lịch sử phát triển mạng nơ ron nhân tạo, thuật toán được ứng dụng cho mạng truyền thẳng nhiều lớp Mạng nơ ron sử dụng thuật toán huấn luyện lan truyền ngược lan truyền ngược được gọi là mạng BP (Back Propagation Network) Xét một mạng truyền thẳng ba lớp như hình 8.6 Hình 8.1. Mạng truyền thẳng ba lớp lan truyền ngược sai số Giả sử tập mẫu dùng để huấn luyện mạng gồm p mẫu {xk, dk}, k=1, 2,.., p thủ tục BP xây dựng một chuỗi p các hàm sai số ( ) ( )∑ = −=−= m j j k j kkk k yddyWE 1 22 2 1 2 1 , trong đó: m - số rơ ron đầu ra; jkd - thành phần thứ j của véc tơ ra mong muốn dk, j ky - thành phần thứ j của véc tơ ra ky do lan truyền đầu vào kx . Các hàm sai số này lần lượt được tối thiểu trong không gian các trọng số. Giá trị hàm sai số Ek đối với một mẫu được tính toán dựa trên giá trị các trọng số hiện tại. Các giá trị trọng số này sau đó được hiệu chỉnh và trở thành các giá trị trọng số hiện tại để tính giá trị hàm sai số tiếp theo Ek+1. y1 yi yn vqj x1 xj xm zq … … wiq … … Dễ nhận thấy, cách làm này có khả năng tạo ra sự dao động trong quá trình hiệu chỉnh các trọng số. Kết quả hiệu chỉnh hiện tại có thể làm hỏng kết quả hiệu chỉnh ở các lần trước đó. Giải pháp thay thế là xây dựng một hàm sai số duy nhất bằng cách tích luỹ các sai số ∑ = = n i k WEE 1 )( . Các trọng số của mạng nơ ron chỉ được hiệu chỉnh sau khi tất cả các véc tơ tín hiệu vào có trong tập mẫu được lan truyền qua mạng nơ ron. Quá trình huấn luyện tiến hành như sau: + Trước tiên ta xét lan truyền tín hiệu qua từng lớp mạng: lớp nhập, lớp ẩn và lớp xuất Giả sử tín hiệu đưa vào mạng nơ ron x = (x1, x2, …, xm) với m là số nơ ron trong lớp nhập, l là số nơ ron trong lớp ẩn và n là số nơ ron trong lớp xuất. Các nơ ron trong lớp nhập nhận và truyền tín hiệu sang lớp ẩn. Đầu vào các nơ ron (nút) trong lớp ẩn thứ nhất có dạng: ∑ = = m j jqjq xwnet 1 (8.1) Trong đó wqj là trọng số liên kết từ nút j của lớp nhập đến nút q của lớp ẩn. Đầu ra zq của lớp ẩn nhận được: )()( 1 ∑ = == m j jqjqq xwanetaz (8.2) Với )( qneta là hàm kích hoạt của các nơ ron trong lớp ẩn. Đầu vào của nút i ở lớp xuất sẽ nhận được: )( 1 11 ∑ ∑∑ = == == l q n j jqjiq l q qiqi xwawzwnet (8.3) Đầu ra của nút i ở lớp xuất nhận được ))(()( 11 ∑∑ == == m j jqj l q iqii xwawanetay (8.4) + Sau khi lan truyền thẳng tín hiệu qua mạng, sai số của tín hiệu ra sẽ được lan truyền ngược để điều chỉnh các trọng số, mục tiêu ở đây là cực tiểu sai số giữa tín hiệu ra y = (y1, y2,…, yn) của mạng nơ ron và tín hiệu mong muốn d = (d1, d2,…, dn), hàm mục tiêu có dạng: ∑ ∑∑ ∑ = == = −=−=−= n i l q qiqi n i n i iiii zwadnetadydwE 1 2 11 1 22 )( 2 1 )]([ 2 1 )( 2 1 )( (8.5) Theo phương pháp giảm gradient, trọng số liên kết giữa lớp ẩn và lớp xuất được điều chỉnh như sau: iq iq w E w ∂ ∂ −=∆ η (8.6) ở đây η là hệ số học của mạng nơ ron Sử dụng (8.3), (8.4) ta có: qoiqiii iq i i i i iq zznetaydw net net y y E w ηδηη =−= ∂ ∂ ∂ ∂ ∂ ∂ −=∆ ])][('][[ (8.7) trong đó oiδ là tín hiệu sai số, i là số thứ tự của nút i của lớp xuất, tín hiệu sai số được định nghĩa như sau: )]('][[ iii i i ii oi netaydnet y y E net E −= ∂ ∂ ∂ ∂ −= ∂ ∂ −=δ (8.8) với neti là tổng vào của nơ ron thứ i của lớp xuất và iii netnetaneta /)()(' ∂= Trọng số liên kết giữa lớp ẩn và lớp nhập cũng được điều chỉnh theo phương pháp giảm gradient, như sau: ∂ ∂ ∂ ∂ ∂ ∂ −= ∂ ∂ ∂ ∂ −= ∂ ∂ −=∆ qj q q q qqj q qqj qj v net net z z E v net net E v E v ηηη (8.9) Từ (7.29) ta thấy với mỗi thành phần sai số [di - yi], i = 1, 2, …, n là một hàm của zq và ta có: ∑ = −=∆ n i jqiqiiiqj xnetawnetaydv 1 )('])(')[(η (8.10) Sử dụng (7.32), (7.34) được viết lại như sau: jhq n i jqiqoiqj xxnetawv ηδδη∑ = ==∆ 1 )('][ (8.11) trong đó hqδ là tín hiệu lỗi của nơ ron thứ q ở tầng ẩn và được định nghĩa: ∑ = = ∂ ∂ ∂ ∂ −= ∂ ∂ −= n i iqoiq q q qq hq wnetanet z z E net E 1 )(' δδ (8.12) Khi hàm kích hoạt là hàm sigmoid các công thức (7.32), (7.36) trở thành: ])[1( 2 1 2 iiioi ydy −−=δ (8.13) ∑ = −= n i qioiqhq wz 1 2 )1( 2 1 δδ (8.14) Thuật toán có thể khái quát thông qua sơ đồ như sau: Y l=l+1 � � ���� End k = k + 1 s > p? N N Y N Y Start k = 1 l = 1 x=xk d=dk Lan truyền xuôi tính y theo x nhờ các công thức từ 7.25-7.28 y E Sau đây ta viết thuật toán, thuật toán này được viết cho một mạng truyền thẳng tổng quát có Q lớp (lưu ý trong phần trên mạng chỉ có 3 lớp). Algorithm BP: Back-propagation Learning Rule Xét mạng nơ ron với Q lớp lan truyền thẳng, q = 1, 2, …, Q và qneti và qyi là đầu vào và đầu ra của nơ ron thứ i trong lớp q tương ứng. Mạng có m nút nhập, n nút xuất. Gọi qwij là trọng số liên kết từ nơ ron j lớp q-1 đến nơ ron i lớp q. Input: Tập mẫu huấn luyện {(x(k), d(k))}, k = 1, 2, …, p Bước 0. (khởi tạo): chọn η > 0 và Emax (sai số lớn nhất), khởi tạo trọng số với giá trị ngẫu nhiên nhỏ. Đặt E = 0 và k = 1. Bước 1. (vòng luyện): sử dụng mẫu đầu vào thứ k cho lớp nhập (q = 1) qyi = 1yi = xi (k) Bước 2. (Lan truyền thẳng tín hiệu): lan truyền thẳng tín hiệu qua mạng theo công thức: ×== ∑ = − m j ij q ij q i q i q ywfnetay 1 1)( Bước 3. (Tính sai số đầu ra): tính sai số và tín hiệu sai số i Qδ cho lớp xuất: ( ) EydE n i i Qk i +−= ∑ = 2 1 )( 2 1 ( ) ( )iQiQkiiQ netayd 2)(2 1 −=δ Bước 4. (Lan truyền ngược sai số): lan truyền ngược sai số để điều chỉnh trọng số và tính tín hiệu sai số i q δ1− cho lớp trước. j q i q ij q yw 1−=∆ δη và ij qold ij qnew ij q www ∆+= ∑ = −−− = m j j q ji q i q i q wneta 1 111 )'( δδ với q = Q, Q-1, …, 2. Bước 5. (Lặp một chu kỳ): kiểm tra tập dữ liệu huấn luyện đã quay hết một vòng. Nếu k < p thì k = k+1 và quay lại bước 1; trường hợp khác về bước 6. Bước 6. (Kiểm tra tín hiệu sai số): kiểm tra tín hiệu sai số, nếu E < Emax thì kết thúc vòng luyện và đưa ra bộ trọng số cuối cùng; trường hợp khác cho E = 0, k = 1 và quay lại bước 1 tiến hành chu kỳ luyện mới. End BP Thuật toán trên là phương pháp huấn luyện gia tăng (incremental training) khi điều chỉnh trọng số, nghĩa là các trọng số được điều chỉnh ngay sau khi có một mẫu luyện. Một phương pháp khác là luyện dạng gói (batch training), ở đó các trọng số chỉ thay đổi sau khi đã có tất cả các mẫu luyện. Mạng nơ ron truyền thẳng có từ một lớp ẩn trở lên có thể xấp xỉ một hàm, trong [Hornik et al., 1989] đã phát biểu và chứng minh định lý dưới đây: Định lý: Mạng nơ ron truyền thẳng với các lớp ẩn sử dụng hàm kích hoạt nén, tuyến tính hoặc hàm đa thức mở rộng có thể xấp xỉ gần đúng một hàm bất kỳ với độ chính xác tuỳ ý miễn là có đủ số nơ ron ẩn. Hàm a: R→[0, 1] (hoặc [-1, 1]) là hàm nén nếu nó đồng biến và 1)(lim =∞→ λλ a , 0)(lim =−∞→ λλ a (hoặc –1) với λ là tham số của hàm Hàm kích hoạt sử dụng trong mạng Perceptron nhiều lớp là hàm sigmoid lưỡng cực: 1 1 2 =g(s) − + − se α , hoặc hàm sigmoid đơn cực se sg α−+ = 1 1 )( , đạo hàm của cả hai hàm này đều là: ))(1)(()(' sgsgsg −= . 8.2. Mạng BP xấp xỉ hàm từ tập mẫu cho trước Sau đây ta xây dựng và cài đặt mạng nơ ron truyền thẳng có 1 lớp ẩn dùng để xấp xỉ hàm XOR, từ tập mẫu cho trước: x(1,1)=1;x(2,1)=1;t(1,1)=1; x(1,2)=1;x(2,2)=0;t(1,2)=0; x(1,3)=0;x(2,3)=1;t(1,3)=0; x(1,4)=0;x(2,4)=0;t(1,4)=1; Chương trình được cài đặt trên Matlab với các m-file như sau Hàm ngưỡng (m-file: sigmoid.m) function out=sigmoid(uv) if (uv88) out= 1; else out= 1/(1+exp(-uv)); end; end; Hàm khởi tạo trọng số (m-file: initweights.m) function out=initweights() global ins; global outs; global examples global hids; global mu; global a; global b; for j=1:1:hids+1 for i=1:1:ins+1 a(i,j)=0.2*(rand(1)-0.5); end; end; for k=1:1:outs+1 for j=1:1:hids+1 if mod(j,2)==0 b(j,k)=1; else b(j,k)=-1; end; end; end; Hàm truyền thẳng (m-file: forward.m) function out=forward(n) global ins; global outs; global examples global hids; global mu; global a; global x; global t; global b; global y; global z; global t; for j=1:1:hids u=a(ins+1,j);%Trong nguong for i=1:1:ins u=u+a(i,j)*x(i,n);%Tong trong hoa lop nhap y(j)=sigmoid(u); end; end; s=0; for k=1:1:outs v=b(hids+1,k);%Trong nguong for j=1:1:hids v=v+b(j,k)*y(j);%Tong trong hoa lop an end; z(k)=sigmoid(v); s=s+abs((z(k)-t(k,n))); end; out= s; Hàm lan truyền ngược (m-file: back.m) function out=back(n) global hids; global outs; global ins; global z; global t; global z; global dOut global b; global x; global y; global dHid; global p; for i=1:1:hids+1 q(i)=0; end; for k=1:1:outs p(k)=(z(k)-t(k,n))*z(k)*(1-z(k)); dOut(hids+1,k)=dOut(hids+1,k)+p(k);%Trong nguong for j=1:1:hids %Trong lop an dOut(j,k)=dOut(j,k)+p(k)*y(j); q(j)=q(j)+p(k)*b(j,k); end; end; for j=1:1:hids q(j)=q(j)*y(j)*(1-y(j)); dHid(ins+1,j)=dHid(ins+1,j)+q(j); for i=1:1:ins dHid(i,j)=dHid(i,j)+q(j)*x(i,n); end; end; Hàm lan cập nhật trong số (m-file: changeweights.m) function out= changeweights() global ins;%So nut nhap global outs;%So nut xuat global hids;%So nut an global mu; global a;%Trong so lop an global b;%Trong so lop xuat global cHid;%Bien thien trong global cOut; global dHid;%Dao ham rieng global dOut; for j=1:1:hids for i=1:1:ins+1 a(i,j)=a(i,j)-mu*dHid(i,j); end; end; for k=1:1:outs for j=1:1:hids+1 b(j,k)=b(j,k)-mu*dOut(j,k); end; end; for i=1:1:ins+1 for j=1:1:hids+1 dHid(i,j)=0; end; end; for i=1:1:hids+1 for j=1:1:outs dOut(i,j)=0; end; end; Hàm huấn luyện (m-file: training.m) global ins;%So nut nhap global outs;%So nut xuat global examples;%So mau luyen global x; %Mang luu cac bien doc lap global t;%Mang luu cac bien phu thuoc global hids;%So nut an global mu;%Toc do hoc global a;%Trong so lop an global b;%Trong so lop xuat global cHid;%Bien thien trong global cOut; global dHid;%Dao ham rieng global dOut; global u;%Tong trong hoa cho nut an global y;%Ket xuat cua nut an global v;%Trong trong hoa nut xuat global z;%Ket xuat nut xuat global p; % deltaE/deltav ins=2;%So nut nhap outs=1;%So nut xuat examples=4;%So mau luyen hids=2;%So nut an mu=0.7;%Toc do hoc %Cac mau huan luyen x(1,1)=1;x(2,1)=1;t(1,1)=1; x(1,2)=1;x(2,2)=0;t(1,2)=0; x(1,3)=0;x(2,3)=1;t(1,3)=0; x(1,4)=0;x(2,4)=0;t(1,4)=1; for i=1:1:ins+1 for j=1:1:hids+1 dHid(i,j)=0; cHid(i,j)=0; end; end; for i=1:1:hids+1 for j=1:1:outs+1 dOut(i,j)=0; cOut(i,j)=0; end; end; initweights; h=0; while 1 s=0; for n=1:1:examples s=s+forward(n); back(n); end; fprintf('sai so=%f\n',s); if(s y(j)=sigmoid(u); end; end; s=0; for k=1:1:outs v=b(hids+1,k);%Trong nguong for j=1:1:hids v=v+b(j,k)*y(j);%Tong trong hoa lop an end; z(k)=sigmoid(v); end; out= z(1); % xor chỉ có 1 đầu ra Hàm xấp xỉ bài toán XOR (m-file: bpn_xor.m) global ins;%So nut nhap global outs;%So nut xuat global examples;%So mau luyen global x; %Mang luu cac bien doc lap global t;%Mang luu cac bien phu thuoc global hids;%So nut an global mu;%Toc do hoc global a;%Trong so lop an global b;%Trong so lop xuat global cHid;%Bien thien trong global cOut; global dHid;%Dao ham rieng global dOut; global u;%Tong trong hoa cho nut an global y;%Ket xuat cua nut an global v;%Trong trong hoa nut xuat global z;%Ket xuat nut xuat global p; % deltaE/deltav ins=2;%So nut nhap outs=1;%So nut xuat examples=4;%So mau luyen hids=2;%So nut an mu=0.7;%Toc do hoc x=0:0.1:1; y=0:0.1:1; [X,Y]=meshgrid(x,y); figure; l=0; for i=0:0.1:1, l=l+1; m=0; for j=0:0.1:1, m=m+1; x(1,5)=i; x(2,5)=j; Z(l,m)=forward1(5); end; end; mesh(X,Y,Z); grid on; box on; 8.3. Mạng nơ ron RBF(Radial Basic Function) Hình 8.2. Cấu trúc mạng nơ ron RBF. wnq wiq w1q zl zl-1 zq z2 z1 yn yi y1 xm xj x1 Sơ đồ cấu trúc của mạng nơ ron RBF như hình 8.2, trong đó xj là tín hiệu vào với i = 1,2,…,m ( còn gọi x là véc tơ đầu vào của mạng); yi là tín hiệu ra với j = 1,2,…,n; zq là số phần tử nơ ron lớp ẩn với q = 1, 2,…,l; wq là các trọng số kết nối giữa lớp ẩn và lớp đầu ra của mạng. Đặc điểm của cấu trúc mạng nơ ron RBF có cấu trúc khác với cấu trúc của mạng nơ ron lan truyền ngược Giá trị đầu ra tại mỗi nút của lớp ẩn của mạng nơ ron RBF thông thường là ở dạng hàm Gaussian và có dạng như sau: ( ) ( ) ( ) ∑∑ −− −− === k k k q q k k q qq mx mx xR xR xgz 2 2 2 2 2 exp 2 exp σ σ , trong đó mq là véc tơ tâm của hàm cơ sở thứ q, σq là bán kính (độ rộng) của hàm cơ sở thứ q. Giá trị đầu ra thứ i của mạng nơ ron RBF là yi: , 1 += ∑ = l q iqiqii zway θ trong đó ai(.) là hàm kích hoạt đầu ra của phần tử nơ ron thứ i, θi là giá trị ngưỡng (threshold) của phần tử nơ ron thứ i và thông thường lấy θi = 0. Như vậy dạng hàm kích hoạt đầu ra của phần tử nơ ron là dạng hàm tuyến tính. Như vậy mạng nơ ron RBF chỉ có một lớp ẩn q được kích hoạt và tương ứng với véc tơ trọng số wq = (w1q , w2q, …, wnq) T. Giá trị đầu ra tuyến tính thứ i của RBF được tính theo tổng của tích véc tơ trọng số wq với véc tơ giá trị đầu ra của lớp ẩn zq. Kể từ đây thì RBF mới giống như mạng nơ ron lan truyền thẳng. Giả sử tập mẫu vào ra để huấn luyện RBF là (xk, dk), k = 1, 2, …, p. Mangj nơ ron RBF được huấn luyện luật học lai: học không giám sát trong lớp đầu vào và lớp đầu ra. Các trọng số trong lớp đầu ra có thể được cập nhật một cách đơn giản bằng cách sử dụng luật học delta như sau: ( ) qziyidiqw −=∆ η (8.15) Tính tổng trung bình bình phương sai số tính cho p cặp mẫu vào ra của mạng, và huấn luyện mạng sao cho tổng trung bình bình phương sai số là nhỏ nhất. Tổng trung bình bình phương sai số được tính như sau: [ ]2 2 1 ∑∑ −= k i k iy k idiqwE 2 12 1 ∑∑ ∑ = −= k i l q k qziqw k id ∑∑ ∑ = −= k i l q kxqgiqw k id 2 12 1 (8.16) Tiếp theo cần phải xác định phạm vi của các tâm hàm cơ sở mq và các độ rộng của hàm cơ sở σq. Các tâm mq có thể tìm được bằng các luật học không giám sát giống như phương pháp lượng tử hoá véc tơ, các luật học cạnh tranh, hoặc luật học Kohonen đơn giản; đó là: ( )closestmxclosestm −=∆ η ở đây mclosest là tâm gần với véc tơ đầu vào x nhất và các tâm khác được giữ không đổi. Chúng ta cũng có thể sử dụng luật cạnh tranh Kohonen phụ thuộc vào tất cả các tâm với giá trị cập nhật được điều chỉnh theo mối quan hệ “khoảng cách” giữa một tâm mq và một đầu vào véc tơ x. Theo đó, mỗi lần thu được phạm vi các tâm mq, các độ rộng (phương sai) có thể xác định được bằng cách giảm thiểu sai số theo σq sau: ( ) 2 1 1 2 22 1 ∑ = ∑ = − − = l q l r q rmqm rmqRE γσ trong đó γ là tham số thể hiện phần chồng chéo lên nhau của các hàm cơ sở. Ảnh hưởng của việc giảm thiểu này là hàm tại các nút phải đảm bảo chắc chắn là dạng hàm trơn, phép nội suy dựa trên các miền của không gian đầu vào. Trên thực tế, các độ rộng σq thường được xác định bằng phương pháp giống như ý nghĩa khoảng cách, có liên hệ gần gũi nhất với tâm m. Đơn giản nhất là: γ σ closest mqm q − = ở đây mclosest là véc tơ gần mq nhất. RBF có thể chọn là mạng nơ ron 2 lớp trong nhiều ứng dụng xử lý tín hiệu, nhận dạng mẫu, và xấp xỉ hàm. RBF cũng có thể được huấn luyện bằng luật học lan truyền ngược sai số và trở thành mạng học giám sát hoàn hảo. Khi đó cần tối thiểu hoá hàm tổng trung bình bình phương sai số (4.4). Giá trị đầu ra của mạng trong suốt quá trình huấn luyện vẫn được tính theo biểu thức (4.3). Sai số đầu ra chính là giá trị độ lệch giữa đầu ra thực tế của mạng và đầu ra mong muốn, sau đó lan truyền ngược tới lớp vào để cập nhật các tâm và các độ rộng của các hàm cơ sở của chúng. Theo đó để thay đổi luật, luật học giám sát cho RBF như sau: ( ) ( ) ( )∑∑ ∂ ∂ −=∆ ∂ ∂ −=∆−=∆ i q i iiq i q i iimqqiiwiq y yd m y ydmzydw σ ησηη σ,, Với cách này thì cả tâm và độ rộng của các hàm cơ sở đều thay đổi động. Với RBF khi huấn luyện theo thuật toán lan truyền ngược không thấy nhanh hơn rõ ràng so với mạng nơ ron lan truyền ngược. Ngoài ra, sẽ là ngẫu nhiên các chiều rộng của các hàm Gaussian học là lớn và mất vị trí mong muốn trong RBF, có nghĩa là khi đó mạng bị mất thông tin. Sau đây là thuật toán huấn luyện RBF được sử dụng trong tài liệu, trong pha 2 của thuật toán ta vẫn sử dụng kỹ thuật lan truyền ngược sai số để huấn luyện mạng: Pha 1: Xác định các tâm và độ rộng hàm cơ sở: mq ← x(q), q = 1,2,.., p; 2 1 1 21 −← ∑ = r i qiq mmr σ , q = 1,2,.., p; trong đó mi, i = 1,2,.., r là các láng riềng gần nhất với tâm mq Pha 2: Xác định các trọng số của mạng. Bước 1. Chọn tốc độ học η, chọn sai số cực đại Emax Bước 2. Đặt giá trị đầu E ← 0; k ← 1; Gán giá trị ngẫu nhiên cho các trọng số wiq(k); Bước 3. Tính toán Tính đầu ra của mạng với tín hiệu vào là x(k): q qmkx q ekz σ2 )( 2 )( − − ← , q =1,2,.., p; ∑ = ← p q qiqi kzkwky 1 )()()( , i = 1,2,.., n; Cập nhật trọng số lớp ra của mạng: )())()(()()1( kzkykdkwkw qiiiqiq −+←+ η ; Tính sai số tích luỹ: ∑ = −+← n i ii kykdEE 1 2))()(( 2 1 ; Bước 4. Lặp một chu kỳ: Kiểm tra tập dữ liệu huấn luyện đã quay hết một vòng. - Nếu k < p thì k ← k+1 và quay lại bước 3; - Trường hợp khác về bước 5; Bước 5. Kiểm tra tín hiệu sai số: - Nếu E < Emax thì kết thúc vòng luyện và đưa ra bộ trọng số cuối cùng; - Trường hợp khác cho E ← 0, k ← 1 và quay lại bước 3 tiến hành chu kỳ luyện mới. Mạng nơ ron RBF được ứng dụng nhiều trong nhiều lĩnh vực, trong đó có xấp xỉ và nội suy hàm. Trong [21] đã khẳng định mạng nơ ron RBF là một mô hình tốt để xấp xỉ các hàm phi tuyến. 8.4. Mạng RBF xấp xỉ tập mẫu cho trước global xn; global yn; global hh; global r; %So lang rieng global m;%so mau huan luyen global ins; global outs; global w; r=1; m=4;%so mau, so tam mang ins=3;% so dau vao outs=2;%so dau ra alpha=0.1; esl=0.001; %Tap mau huan luyen xn(1,1)=1;xn(1,2)=2;xn(1,3)=3; zn(1,1)=-1;zn(1,2)=1; xn(2,1)=-1;xn(2,2)=-2;xn(2,3)=-3; zn(2,1)=1;zn(2,2)=-1; xn(3,1)=-1;xn(3,2)=2;xn(3,3)=-3; zn(3,1)=0;zn(3,2)=0; xn(4,1)=-2;xn(4,2)=-1;xn(4,3)=1; zn(4,1)=-1;zn(4,2)=0; for i=1:1:m %duyet m mau for j=1:1:m %xet m tam mang u=0; for k=1:1:ins u= u+(xn(i,k)-xn(j,k))*(xn(i,k)-xn(j,k)); end; hh(i,j)= exp(-u/(sma(j,r)*sma(j,r)));% dau ra cua no ron an j ung voi mau i %fprintf('%f ',hh(i,j)); end; %fprintf('\n'); end; for i=1:1:m % m tam mang for k=1:1:outs %outs dau ra w(i,k)=0; end; end; l=1; while 1 for k=1:1:outs %tinh cac gia tri dau ra for i=1:1:m zz(i,k)=0; for j=1:1:m zz(i,k)=zz(i,k)+w(j,k)*hh(i,j); end; end; end; for i=1:1:m dta=0; for k=1:1:outs for j=1:1:m dta=dta+hh(i,j)*(zn(j,k)-zz(j,k)); end; w(i,k)=w(i,k)+alpha*dta; zz(i,k)=0; for j=1:1:m zz(i,k)=zz(i,k)+w(j,k)*hh(i,j); end; end; end; E=0; for i=1:1:m for k=1:1:outs E=E+(zn(i,k)-zz(i,k))*(zn(i,k)-zz(i,k)); end; end; E=E/2; fprintf('\n%f',E); if (E for k=1:1:outs zz(1,k)=0; for j=1:1:m zz(1,k)=zz(1,k)+w(j,k)*hh(1,j); end; fprintf('ket qua=%f',zz(1,k)); end; %%%%%%%%%%%%%%%%%%%%% function out=sma(i,r) global m; global d; global xn; global yn; global ins; global outs; for k=1:1:m d(k)=0; for j=1:1:ins d(k)=d(k)+(xn(i,j)-xn(k,j))*(xn(i,j)-xn(k,j)); end; end; for k=1:1:m-1 for l=k+1:1:m if (d(k)>d(l)) tg=d(k); d(k)=d(l); d(l)=tg; end end end tg=0; for k=1:1:r+1 tg=tg+ d(k); end tg=sqrt(tg); tg=tg/r; if tg==0 tg=0.00000001; end; out= tg;