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
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:
- 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.pdf