Luận án Thuật toán tìm kiếm tối ưu toàn cục trong quá trình luyện mạng Nơron bằng thuật toán vượt khe có sự kết hợp với giải thuật di truyền

MỤC LỤC

MỞ ĐẦU . 7

CHƢƠNG 1 : MẠNG NƠRON VÀ QUÁ TRÌNH HỌC CỦA MẠNG NƠRON . 12

1.1. Giới thiệu về mạng nơron và quá trình học của mạng nơron . 12

1.1.1. Mạng nơron và các phƣơng pháp học . 12

1.1.2. Đánh giá các nhân tố của quá trình học . 13

1.1.2.1. Khởi tạo các trọng số . 13

1.1.2.2. Bước học α . 13

1.1.2.3. Hằng số quán tính . 14

1.2. Nhận dạng hệ thống sử dụng mạng nơron . 14

1.2.1. Nhận dạng hệ thống . 14

1.2.2. Nhận dạng hệ thống sử dụng mạng nơron . 16

1.3. Mặt lỗi đặc biệt khi luyện mạng nơron . 19

1.3.1. Mặt lỗi đặc biệt khi luyện mạng nơron . 19

1.3.2. Ví dụ về bài toán dẫn đến mặt lỗi đặc biệt . 20

1.4. Mô phỏng quá trình luyện mạng nơron khi sử dụng Toolbox của Matlab 22

1.4.1. Ví dụ với mạng nơron có mặt lỗi bình thƣờng . 22

1.4.2. Ví dụ với mạng nơron có mặt lỗi đặc biệt . 25

1.5. Tổng quan về tình hình nghiên cứu trong và ngoài nƣớc 26

1.5.1. Điểm qua một số công trình nghiên cứu về mạng nơron và ứng dụng . 26

1.5.2. Các công trình trong và ngoài nƣớc nghiên cứu về thuật toán học của mạng nơron . 31

1.5.3. Bàn luận . 37

1.6. Kết luận chƣơng 1 . 38

CHƢƠNG 2: THUẬT TOÁN VƢỢT KHE TRONG QUÁ TRÌNH LUYỆN MẠNG NƠRON

. 40

2.1. Thuật toán vƣợt khe . 40

2.1.1. Đặt vấn đề . 40

2.1.2. Tính hội tụ và điều kiện tối ƣu . 41

2.1.3. Thuật toán vƣợt khe . 46

2.1.3.1. Giới thiệu . 47

2.1.3.2. Nguyên lý vượt khe . 48

2.1.3.3. Xác định bước vượt khe . 51

2.1.3.4. Ví dụ . 54

2.2 Ứng dụng thuật toán vƣợt khe trong quá trình luyện mạng nơron . 56

2.3 Minh họa thuật toán . 58

2.3.1. Công tác chuẩn bị . 58

2.3.1.1. Điều chỉnh trọng số lớp ra . 59

2.3.1.2. Điều chỉnh trọng số lớp ẩn . 60

2.3.2. Cấu trúc mạng . 62

2.3.3. Các thƣ viện và hàm mạng . 64

2.3.3.1. Thư viện . 64

2.3.3.2. Hàm khởi tạo trọng số . 66

2.3.3.3. Thủ tục tính bước học vượt khe . 67

2.3.3.4. Thủ tục huấn luyện mạng, HUANLUYENVUOTKHE() . 69

2.3.4. Kết quả chạy chƣơng trình và so sánh . 69

2.3.4.1. Chạy chương trình . 69

2.3.4.2. So sánh các phương án . 73

2.4. Kết luận chƣơng 2 . 76

CHƢƠNG 3: ĐỀ XUẤT MÔ HÌNH KẾT HỢP THUẬT DI TRUYỀN VÀ THUẬT

TOÁN VƢỢT KHE ĐỂ CẢI TIẾN QUÁ TRÌNH HỌC CỦA MẠNG NƠRON MLP

CÓ MẶT LỖI ĐẶC BIỆT . 77

3.1. Đặt vấn đề . 77

3.1.1. Khảo sát độ hội tụ của quá trình luyện mạng nơron bằng kỹ thuật lan truyền ngƣợc

nguyên thủy với các bộ khởi tạo trọng số ban đầu khác nhau . 77

3.1.2. Khảo sát độ hội tụ của quá trình luyện mạng nơron có mặt lỗi đặc biệt bằng kỹ thuật lan

truyền ngƣợc kết hợp thuật toán vƣợt khe với các bộ khởi tạo trọng số ban đầu khác nhau 80

3.2. Đề xuất mô hình kết hợp giải thuật di truyền và thuật toán vƣợt khe trong quá

trình luyện mạng nơron . 83

3.2.1. Đặt vấn đề . 83

3.2.2. Thuật toán . . 87

3.3. Áp dụng mô hình kết hợp giải thuật di truyền và thuật toán vƣợt khe trong quá

trình luyện mạng nơron vào bài toán nhận dạng . 91

3.4. Kết luận chƣơng 3 . 94

KẾT LUẬN CHUNG VÀ ĐỀ XUẤT HƢỚNG NGHIÊN CỨU . 95

CÁC CÔNG TRÌNH ĐÃ CÔNG BỐ . 99

TÀI LIỆU THAM KHẢO . 100

PHỤ LỤC 1 . 106

pdf144 trang | Chuyên mục: MATLAB | Chia sẻ: dkS00TYs | Lượt xem: 1551 | Lượt tải: 2download
Tóm tắt nội dung Luận án Thuật toán tìm kiếm tối ưu toàn cục trong quá trình luyện mạng Nơron bằng thuật toán vượt khe có sự kết hợp với giải thuật di truyền, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
LAI MANG!"); 
 KHOITAOMANG(); 
 //Luyen mang 
 do 
 { 
 TINHTOANBUOCHOC(); 
 BUOCLAP(); 
 HAMMUCTIEU(); 
 l = 1; 
 for(t=0;t<SLMHL;t++) 
 { 
 PATR[t] = ECM[t] < EPSILON; 
 l = l && (PATR[t]); 
 } 
 SOBUOCLAP++; 
 RESET++; 
 if(RESET>3000)break; 
 if(SOBUOCLAP>BLTD) 
 { 
 HTHL=0; 
 printf("\nQUA TRINH HUAN LUYEN MANG THAT BAI! \n"); 
 printf("\nDE NGHI HUAN LUYEN LAI! \n"); 
 break; 
 } 
 }while(!l);//while(!l && !kbhit()); 
 if(RESET>3000) 
 } 
 if(SOBUOCLAP<BLTD) 
 { 
 HTHL=1; 
 printf("\n\nMANG DA DUOC HUAN LUYEN XONG SAU: "); 
 printf("%ld",RESET); 
 printf(" BUOC LAP!\n\n"); 
 } 
} 
/*-----------------------------------------------------------------------
- 
 Ten Thu tuc: HUANLUYENVUOTKHE 
 Mo ta: HUAN LUYEN MANG DE TB-BINH PHUONG SAI SO DAU RA NHO HON 
EPSILON CHO TRUOC 
 BUOC HOC DUOC TINH THEO NGUYEN LY VUOT KHE 
 Cac dau vao: KHONG CO 
 Gia tri tra ve: KHONG CO 
------------------------------------------------------------------------
*/ 
void HUANLUYENVUOTKHE() 
{ 
 int t,l; 
 printf("\n\nDANG HUAN LUYEN MANG THEO BUOC VUOT KHE...\n"); 
START: 
 if(RES==0){ 
 printf("\nKHOI DONG VA HUAN LUYEN LAI MANG!"); 
 } 
 KHOITAOMANG(); 
 TOCDOHOCZERO(); 
 TINHBUOCHOCVUOTKHE(); 
 //Luyen mang 
Luận án Tiến sĩ Kỹ thuật 2013 
 139 
 do 
 { 
 TINHBUOCHOCVUOTKHE(); 
 BUOCLAP(); 
 HAMMUCTIEU(); 
 l = 1; 
 for(t=0;t<SLMHL;t++) 
 { 
 PATR[t] = ECM[t] < EPSILON; 
 l = l && (PATR[t]); 
 } 
 SOBUOCLAP++; 
 RESET++; 
 // printf("lan lap thu %d\n",RESET); 
 if(RESET>100)break; 
 if(SOBUOCLAP>BLTD) 
 { 
 HTHL=0; 
 printf("\nQUA TRINH HUAN LUYEN MANG THAT BAI! \n"); 
 printf("\nDE NGHI HUAN LUYEN LAI! \n"); 
 break; 
 } 
 }while(!l);//while(!l && !kbhit()); 
 if(RESET>100) 
 { 
 RES=0; 
 goto START; 
 } 
 if(SOBUOCLAP<BLTD) 
 { 
 HTHL=1; 
 printf("\n\nMANG DA DUOC HUAN LUYEN XONG SAU: "); 
 printf("%ld",RESET); 
 printf(" BUOC LAP!\n\n"); 
 } 
} 
/*-----------------------------------------------------------------------
- 
 Ten Thu tuc: DAPUNGDAURA 
 Mo ta: TINH CAC DAU RA LOP AN, y, VA DAU RA LOP RA, z, TU DAU 
VAO LOPA VAO, x. 
 Cac dau vao: VEC-TO DAU VAO x[i] 
 Gia tri tra ve: KHONG CO 
------------------------------------------------------------------------
*/ 
void DAPUNGDAURA(int afer[]) 
{ 
 int i,j; 
 float totin; 
 for(i=0;i<SLNRLV;i++) 
 x[i] = (float)afer[i]; 
 for(j=0;j<SLNRLA;j++) 
 { 
 totin = 0; 
 for(i=0;i<SLNRLV;i++) 
 totin = totin + x[i]*MTTSLA[i][j]; 
Luận án Tiến sĩ Kỹ thuật 2013 
 140 
 y[j] = SIGMF(totin); 
 } 
 for(j=0;j<SLNRLR;j++) 
 { 
 totin = 0; 
 for(i=0;i<SLNRLA;i++) 
 totin = totin + y[i]*MTTSLR[i][j]; 
 z[j] = SIGMF(totin); 
 } 
} 
/*----------------------------------------------------------------------- 
 Ten Ham: TB_BINHPHUONGSAISO 
 Mo ta: TINH BINH PHUONG SAI SO DAU RA CUA MANG THEO VEC-TO DAU 
RA VA VEC-TO DICH 
 Cac dau vao: 1. VEC-TO DAU RA MONG MUON DRMM[i], 
 2. VEC-TO DAU RA CU LOP RA z[i], 
 3. SO LUONG NO-RON CUA LAOP DAU RA, SLNRLR 
 Gia tri tra ve: TRUNG BINH BINH PHUONG SAI SO DAU RA CUA LOP RA 
------------------------------------------------------------------------
*/ 
float TB_BINHPHUONGSAISO(int a[],float b[],int SIZE) 
{ 
 int i; 
 float e=0; 
 for(i=0;i<SIZE;i++) 
 e = e + ((float)a[i] - b[i])*(a[i] - b[i]); 
 e = 0.5 * e; 
 return e; 
} 
/*-----------------------------------------------------------------------
- 
 Ten Thu tuc: SAISODAURA 
 Mo ta: TINH SAI SO DAU RA CUA MANG THEO VEC-TO DAU RA VA VEC-TO 
DICH 
 1. VEC-TO DAU RA MONG MUON DRMM[i], 
 2. VEC-TO DAU RA CU LOP RA z[i], 
 Cac dau vao: SO THU TU MAU 
 Gia tri tra ve: KHONG CO 
------------------------------------------------------------------------
*/ 
void SAISODAURA(int i) 
{ 
 int j; 
 for(j=0;j<SLNRLR;j++) 
 SSLR[j] = 0; 
 for(j=0;j<SLNRLR;j++) 
 SSLR[j] = z[j] - (float)DRMM[i][j]; 
} 
/*----------------------------------------------------------------------- 
 Ten Thu tuc: SAISOLOPAN 
 Mo ta: TINH SAI SO DAU RA CUA LOP AN THEO SAI SO LOP RA VA DAO 
HAM CUA SIGMF 
 Cac dau vao: KHONG CO 
 Gia tri tra ve: KHONG CO 
-----------------------------------------------------------------------*/ 
Luận án Tiến sĩ Kỹ thuật 2013 
 141 
void SAISOLOPAN() 
{ 
 int i,j; 
 for(i=0;i<SLNRLA;i++) 
 SSLA[i] = 0; 
 for(i=0;i<SLNRLA;i++) 
 for(j=0;j<SLNRLR;j++) 
 SSLA[i] = SSLA[i] + MTTSLR[i][j]*z[j]*(1-z[j])*SSLR[j]; 
} 
/*------------------------------------------------------------------- 
 Ten Thu tuc: DIEUCHINHTRONGSO 
 Mo ta: CAP NHAT MA TRAN TRONG SO LOP AN VA LOP RA 
 Cac dau vao: SO THU TU MAU 
 Gia tri tra ve: KHONG CO 
----------------------------------------------------------------------*/ 
void DIEUCHINHTRONGSO(int k) 
{ 
 int i,j; 
 float temp; 
 SAISODAURA(k); 
 SAISOLOPAN(); 
 for(i=0;i<SLNRLA;i++) 
 { 
 for(j=0;j<SLNRLR;j++) 
 { 
 temp = -TOCDOHOC*y[i]*z[j]*(1-z[j])*SSLR[j]; 
 MTTSLR[i][j] = MTTSLR[i][j] + temp + 
QUANTINH*BTMTTSLR[i][j]; 
 BTMTTSLR[i][j] = temp; 
 } 
 } 
 for(i=0;i<SLNRLV;i++) 
 { 
 for(j=0;j<SLNRLA;j++) 
 { 
 temp = -TOCDOHOC*x[i]*y[j]*(1-y[j])*SSLA[j]; 
 MTTSLA[i][j] = MTTSLA[i][j] + temp + 
QUANTINH*BTMTTSLA[i][j]; 
 BTMTTSLA[i][j] = temp; 
 } 
 } 
} 
/*---------------------------------------------------------------------- 
 Ten Thu tuc: HAMMUCTIEU 
 Mo ta: TINH BINH PHUONG SAI SO DAU RA CUA MANG THEO VEC-TO DAU 
RA VA VEC-TO DICH 
 Cac dau vao: KHONG CO 
 Gia tri tra ve: KHONG CO 
---------------------------------------------------------------------*/ 
void HAMMUCTIEU() 
{ 
 int i; 
Luận án Tiến sĩ Kỹ thuật 2013 
 142 
 for(i=0;i<SLMHL;i++) 
 { 
 DAPUNGDAURA(TAPHUANLUYEN[i]); 
 ECM[i]=TB_BINHPHUONGSAISO(DRMM[i],z,SLNRLR); 
 } 
} 
/*---------------------------------------------------------------------- 
 Ten Thu tuc: KIEMTRAMANG 
 Mo ta: NGUOI SU DUNG NHAP MA TRAN DAU VAO, TINH TOAN DAP UNG 
DAU RA CUA MANG 
 Cac dau vao: KHONG CO 
 Gia tri tra ve: KHONG CO 
------------------------------------------------------------------------
*/ 
void KIEMTRAMANG() 
{ 
 int i,j,t,ind; 
 float temp; 
 float tempz1[SLNRLR]; 
 float tempz2[3]; 
 ind=0; 
 for(;;) 
 { 
 printf("\n\nXIN MOI DUA VEC-TO DAU VAO DE KIEM TRA 
MANG\n\n"); 
 for(i=0;i<7;i++) 
 { 
 for(j=0;j<5;j++) 
 scanf("%d",&MTDVKT[j*7+i]); 
 printf("\n"); 
 } 
 printf("\n\nDAP UNG DAU RA CUA MANG:\n"); 
 DAPUNGDAURA(MTDVKT); 
 for(i=0;i<SLNRLR;i++) 
 printf("\nNO-RON %d, Z = %f",i,z[i]); 
 for(i=0;i<SLNRLR;i++) 
 tempz1[i]=z[i]; 
 printf("\n\nBA DAU RA CO DAP UNG CAO NHAT UNG VOI VEC-TO DAU 
VAO:\n"); 
 for(t=0;t<3;t++) 
 { 
 temp=0; 
 ind=0; 
 for(i=0;i<SLNRLR;i++) 
 if(temp<=tempz1[i]) 
 { 
 temp=tempz1[i]; 
 ind=i; 
 } 
 tempz2[t]=temp; 
 printf("\nDAU RA THU %d LA %3.0f%%",ind, 
tempz2[t]*100); 
 tempz1[ind]=0; 
 } 
 temp=z[0]; 
 ind=0; 
Luận án Tiến sĩ Kỹ thuật 2013 
 143 
 for(i=0;i<SLNRLR;i++) 
 if(temp<=z[i]) 
 { 
 temp=z[i]; 
 ind=i; 
 } 
 printf("\n\nKET LUAN CUA MANG NO-RON:\n"); 
 printf("\nVEC-TO DAU VAO MANG LA MA CUA KY TU: 
%d",ind); 
 } 
} 
/*---------------------------------------------------------------------- 
 Ten Thu tuc: MATRANTRONGSOLOPAN 
 Mo ta: IN MA TRAN TRONG SO LOP AN RA MAN HINH 
 Cac dau vao: KHONG CO 
 Gia tri tra ve: KHONG CO 
------------------------------------------------------------------------
*/ 
void MATRANTRONGSOLOPAN() 
{ 
 int i,j; 
 printf("\n\nMA TRAN TRONG SO LOP AN MTTSLA[slnrlv][slnrla]:\n\n"); 
 for(i=0;i<SLNRLV;i++) 
 { 
 for(j=0;j<SLNRLA;j++) 
 { 
 if(MTTSLA[i][j]>=0) 
 printf("+%f ",MTTSLA[i][j]); 
 else 
 printf("%f ",MTTSLA[i][j]); 
 } 
 printf("\n"); 
 } 
} 
/*---------------------------------------------------------------------- 
 Ten Thu tuc: MATRANTRONGSOLOPRA 
 Mo ta: IN MA TRAN TRONG SO LOP RA RA MAN HINH 
 Cac dau vao: KHONG CO 
 Gia tri tra ve: KHONG CO 
---------------------------------------------------------------------*/ 
void MATRANTRONGSOLOPRA() 
{ 
 int i,j; 
 printf("\n\nMA TRAN TRONG SO LOP RA MTTSLR[slnrla][slnrlr]:\n\n"); 
 for(j=0;j<SLNRLR;j++) 
 { 
 for(i=0;i<SLNRLA;i++) 
 { 
 if(MTTSLR[i][j]>=0) 
 printf("+%f ",MTTSLR[i][j]); 
 else 
 printf("%f ",MTTSLR[i][j]); 
 } 
 printf("\n"); 
 } 
} 
Luận án Tiến sĩ Kỹ thuật 2013 
 144 
/******************************* HAM CHINH ***********************/ 
void main(int argc,char *argv[]) 
{ 
 int read; 
 char c; 
 KHOITAOMANG(); 
 printf("*******************************************\n\n"); 
 printf("* CHUONG TRINH HUAN LUYEN MANG NO-RON *\n\n"); 
 printf("* BUOC HOC TINH THEO NGUYEN LY VUOT KHE *\n\n"); 
 printf("*******************************************\n\n"); 
/* 
 printf("/Vao\\ /~~~~Lop an~~~~\\ /~~~~~Lop ra~~~~~\\\n"); 
 printf(" -- ------- ---- --------- ---- \n"); 
 printf("| | | | | |Y | | | | Z\n"); 
 printf("|X |->| W11 |->| f1 |->| W21 |->| f2 |-->\n"); 
 printf("| | | (35x5)| | | | (5x10) | | |\n"); 
 printf("| | | | | | | | | |\n"); 
 printf(" -- ------- ---- --------- ---- \n"); 
 printf("\\35/ \\__Y=f1(W11.X)__/ \\__Z=f1(W11.X)___/ \n\n"); 
 printf(" f=sigm(net) \n\n"); 
 printf("\nSU DUNG MANG: TRUOC KHI HOC, t, SAU KHI HOC, s.\n"); 
 SDM = getchar(); 
 if(SDM=='t') 
 KIEMTRAMANG();// SU DUNG MANG TRUOC KHI HUAN LUYEN 
 else if(SDM=='s') 
 { 
 printf("\n\nLUA CHON LOAI BUOC HOC\n"); 
 printf("\nCO DINH: c, GIAM DAN: g, NGUYEN LY VUOT KHE: 
v\n\n"); 
 c = getchar(); 
 } 
 LCBH = getchar(); 
 switch(LCBH) 
 { 
 case 'c': 
 HUANLUYENCODINH(); 
 break; 
 case 'g': 
 HUANLUYENGIAMDAN(); 
 break; 
 case 'v': 
 HUANLUYENVUOTKHE(); 
 break; 
 } 
 */ 
 HUANLUYENVUOTKHE(); 
 if(HTHL==1)//NEU MANG DA DUOC HUAN LUYEN XONG 
 { 
 MATRANTRONGSOLOPAN(); 
 MATRANTRONGSOLOPRA(); 
// KIEMTRAMANG(); 
 } 
} 

File đính kèm:

  • pdfLuận án Thuật toán tìm kiếm tối ưu toàn cục trong quá trình luyện mạng Nơron bằng thuật toán vượt khe có sự kết hợp với giải thuật di truyền.pdf
Tài liệu liên quan