Nghiên cứu về mô hình thống kê học sâu và ứng dụng trong nhận dạng chữ viết tay hạn chế

79 227 0
Nghiên cứu về mô hình thống kê học sâu và ứng dụng trong nhận dạng chữ viết tay hạn chế

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG MAI VĂN THỦY NGHIÊN CỨU VỀ MƠ HÌNH THỐNG KÊ HỌC SÂU VÀ ỨNG DỤNG TRONG NHẬN DẠNG CHỮ VIẾT TAY HẠN CHẾ LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH THÁI NGUYÊN - 2015 ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG MAI VĂN THỦY NGHIÊN CỨU VỀ MÔ HÌNH THỐNG KÊ HỌC SÂU VÀ ỨNG DỤNG TRONG NHẬN DẠNG CHỮ VIẾT TAY HẠN CHẾ Chuyên ngành : Khoa Học Máy Tính Mã số : 60 48 01 LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH NGƯỜI HƯỚNG DẪN KHOA HỌC TS Vũ Tất Thắng THÁI NGUYÊN - 2015 LỜI CAM ĐOAN Tôi cam đoan công trình nghiên cứu riêng tơi Các số liệu, kết nêu luận văn trung thực chưa cơng bố cơng trình khác Qua xin chân thành cảm ơn tồn thể thầy khoa đào tạo sau đại học Trường Đại học Công nghệ Thông tin Truyền thông – Đại học Thái Nguyên, người trực tiếp giảng dạy, truyền đạt cho kiến thức chuyên môn phương pháp làm việc khoa học Đặc biệt, xin chân thành cảm ơn TS Vũ Tất Thắng, tận tình hướng dẫn để tơi hồn thành luận văn Tơi xin gửi lời cảm ơn tới gia đình bạn bè giúp đỡ, động viên tạo điều kiện cho trình làm luận văn Tác giả luận văn Mai Văn Thủy Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/ MỤC LỤC LỜI CAM ĐOAN i MỤC iv MỤC HÌNH ẢNH LỤC DANH vi DANH MỤC BẢNG BIỂU .vii LỜI MỞ ĐẦU Chương 1: GIỚI THIỆU ĐỀ TÀI 1.1 Giới thiệu toán nhận dạng 1.1.1 Các giai đoạn phát triển 1.1.2 Tình hình nghiên cứu nước 1.1.3 Tình hình nghiên cứu nước ngồi 1.2 Các bước xử lý cho tốn nhận dạng hồn chỉnh 1.3 Kết luận chương Chương 2: MƠ HÌNH SVM VÀ MƠ HÌNH THỐNG KÊ HỌC SÂU 2.1 Tổng quan mơ hình SVM (Support Vector Machine) 2.1.1 Cơ sở lý thuyết 2.1.1.1 Giới thiệu toán phân lớp nhị phân 2.1.1.2 Máy SVM tuyến tính 10 2.1.1.3 Máy SVM phi tuyến 17 2.1.2 Các thuật toán huấn luyện SVM 19 2.1.2.1 Thuật toán chặt khúc 19 2.1.2.2 Thuật toán phân rã 19 2.1.2.3 Thuật toán cực tiểu 20 2.2 Cơ sở lý thuyết mơ hình thống kê học sâu 23 2.2.1 Một số lý thuyết mạng Neuron 23 2.2.1.1 Giới thiệu mạng Neuron 23 2.2.1.2 Cấu trúc hoạt động mạng Neuron 23 Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/ 2.2.1.3 Q trình huấn luyện mạng thuật tốn học mạng 28 Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/ 2.2.2 Hopfield Network 31 2.2.2.1 Cấu trúc mạng Hopfield 31 2.2.2.2 Mạng Hopfield rời rạc 33 2.2.2.3 Mạng Hopfield liên tục 34 2.2.3 Boltzmann Machines 36 2.2.4 Restricted Boltzmann Machines 39 2.2.3 Thuật toán lan truyền ngược 40 2.3 Kết luận chương 42 Chương 3: KẾT QUẢ THỰC NGHIỆM VÀ ĐÁNH GIÁ 43 3.1 Môi trường thực nghiệm 43 3.2 Dữ liệu thực nghiệm 43 3.3 Kết thực nghiệm với mơ hình SVM 44 3.4 Huấn luyện mơ hình kết thực nghiệm với mơ hình thống kê học sâu 45 3.4.1 Huấn luyện mơ hình 45 3.4.1.1 Cấu trúc mơ hình 45 3.4.1.2 Phương pháp huấn luyện quy trình nhận dạng 47 3.4.2 Giao diện chương trình 48 3.4.3 Kết thực nghiệm 49 3.5 Đánh giá kết thực nghiệm hai mơ hình 50 3.6 Kết luận chương 51 KẾT LUẬN CHUNG 52 TÀI LIỆU THAM KHẢO 54 PHỤ LỤC: HUẤN LUYỆN MƠ HÌNH 56 Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/ DANH MỤC HÌNH ẢNH Hình 1-1: Các bước nhận dạng chữ viết tay Hình 2-1: Các siêu phẳng H , H phân cách hai lớp Hình 2-2: Siêu phẳng tách tuyến tính 10 Hình 2-3: Khơng thể phân hoạch tập mẫu siêu phẳng 13 Hình 2-4: Một mặt phân chia phi tuyến trở thành siêu phẳng không gian lớn 17 Hình 2-5: Cấu trúc neuron 24 Hình 2-6: Cấu trúc chung mạng neuron 26 Hình 2-7: Cấu trúc mạng Hopfield 31 Hình 2-8: Đồ thị hàm satlins 32 Hình 2-9: Mạng Hopfield liên tục sử dụng mạch điện tử 35 Hình 2-10: Một Boltzmann Machine với nút ẩn 36 Hình 2-11: Một RBM đơn giản với hidden units visible units 39 Hình 3-2: Giao diện chương trình nhận dạng chữ viết tay hạn chế 48 Hình 3-3: Chương trình nhận dạng ảnh 48 Hình 3-4: Nhận dạng thống kê nhiều ảnh 49 Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/ vii DANH MỤC BẢNG BIỂU Bảng 2-1: Các hàm truyền 27 Bảng 3-1: Kết thực nghiệm mơ hình SVM tập liệu MNIST Tuyển Sinh 44 Bảng 3-2: Kết thực nghiệm mơ hình SVM tập liệu MNIST 44 Bảng 3-3: Kết thực nghiệm mơ hình SVM tập liệu Tuyển Sinh 45 Bảng 3-4: Kết thực nghiệm tập liệu MNIST Tuyển Sinh 49 Bảng 3-5: Kết thực nghiệm tập liệu Tuyển sinh 50 Bảng 3-6: Bảng so sánh kết hai mơ hình 50 LỜI MỞ ĐẦU Nhận dạng chữ viết tay tốn khó lớp tốn nhận dạng chữ, thu hút nhiều quan tâm nghiên cứu nhà khoa học Đặc biệt vài thập niên gần đây, thúc đẩy q trình tin học hóa lĩnh vực, ứng dụng nhận dạng chữ có nhiều ý nghĩa sử dụng cho toán thực tế Cũng nhiều toán nhận dạng tiếng nói, hình ảnh… khác, độ xác hệ thống tiếp tục cần phải cải thiện nhằm vươn tới khả nhận dạng giống người Tuy nhiên, với tốn nhận dạng chữ viết tay vấn đề trở nên phức tạp nhiều so với tốn nhận dạng chữ in thơng thường vấn đề sau [3]:  Với chữ viết tay khơng thể có khái niệm font chữ, kích cỡ chữ Các kí tự văn chữ viết tay thường có kích thước khác Thậm chí, kí tự văn người viết nhiều có độ rộng, hẹp, cao, thấp khác nhau, Với người viết khác chữ viết có độ nghiêng khác (chữ nghiêng nhiều/ít, chữ nghiêng trái/phải )  Các kí tự từ văn chữ viết tay hầu hết người viết thường bị dính khó xác định phân cách chúng  Các văn chữ viết tay có trường hợp dính dòng (dòng bị dính chồng lên dòng trên) Trong năm gần đây, mơ hình mạng Neuron theo hướng học sâu cho thấy kết tốt nhiều tốn khác nhau, có nhận dạng chữ Xuất phát từ yêu cầu thực tế, cần có nghiên cứu vấn đề Chính học viên chọn đề tài “Nghiên cứu mơ hình thống kê học sâu ứng dụng nhận dạng chữ viết tay hạn chế” làm luận văn tốt nghiệp với mong muốn phần áp dụng vào toán thực tế Bài toán đặt phải giải yêu cầu sau: Nhận dạng ký tự từ ảnh đầu vào Tiến hành nhận dạng kí tự đơn lẻ sử dụng mạng Neuron nhân tạo theo phương pháp học sâu Restricted Boltzmann machine (RBM)  ánh giá kết so sánh với mơ hình Support Vector Machine Đ Với yêu cầu đặt trên, cấu trúc luận văn bao gồm nội dung sau đây: Chương 1:Tổng quan đề tài Giới thiệu tốn nhận dạng chữ viết tay, tình hình nghiên cứu ngồi nước, quy trình chung để giải tốn phương pháp điển hình việc huấn luyện nhận dạng, phạm vi đề tài Chương 2: Mơ hình SVM mơ hình thống kê học sâu Trình bày sở lý thuyết mơ hình SVM (Support Vector Machine) huấn luyện toán nhận dạng chữ viết tay Cơ sở lý thuyết mơ hình thống kê học sâu: Hopfield network, Boltzmann Machines, Restricted Boltzmann Machines thuật toán lan truyền ngược Chương 3: Kết thực nghiệm đánh giá Trình bày kết thực nghiệm hai mơ hình SVM mơ hình thống kê học sâu, đưa kết đánh giá nhận dạng chữ viết tay hạn chế mơ hình SVM mơ hình thống kê học sâu Hình 3-3: Nhận dạng thống kê nhiều ảnh 3.4.3 Kết thực nghiệm Với việc sử dụng môi trường thực nghiệm liệu thực nghiệm học viên rút số kết luận sau: Bảng 3-4: Kết thực nghiệm tập liệu MNIST Tuyển Sinh Các thông số Bộ liệu MNIST Bộ liệu Tuyển Sinh 60.000 60.000 Chưa xác định 5433 < 24 < 24 Thời gian nhận dạng Chưa xác định < phút Tỉ lệ nhận dạng Chưa xác định 99.48 % Số mẫu học Số mẫu nhận dạng Thời gian học Bảng 3-5: Kết thực nghiệm tập liệu Tuyển sinh Chữ số Số mẫu Số mẫu nhận dạng Độ xác (%) 1281 1279 99,8439 861 854 99,1870 338 335 99,1124 747 735 98,3936 337 337 100 287 286 99,6516 438 435 99,3135 661 661 100 238 238 100 295 295 100 3.5 Đánh giá kết thực nghiệm hai mơ hình Bảng 3-6: Bảng so sánh kết hai mơ hình Các thông số Số mẫu học Số mẫu nhận dạng Thời gian học Thời gian nhận dạng Tỉ lệ nhận dạng SVM Deep Learning MNIST Tuyển sinh MNIST Tuyển Sinh 60.000 60.000 60.000 60.000 10.000 10.000 >30 > 30 > phút > phút 95.21 % 94.88 % Chưa xác định < 24 Chưa xác định Chưa xác định 5433 < 24 < phút 99.48 % Từ kết thu hai mơ hình SVM (Support Vector Machine) mơ hình thống kê học sâu (Deep Learning), thấy mô hình Deep Learning mơ hình mẻ, nước giới Qua trình xây dựng chương trình thực nghiệm thấy rằng, mơ hình cho kết tốt so với mơ hình Support Vector Machine 3.6 Kết luận chương Trong chương nêu kết thực nghiệm hai mơ hình Suport Vector Machine (SVM) mơ hình thống kê học sâu (mơ hình sử dụng mạng neuron nhân tạo theo phương pháp học sâu) Nhìn chung, kết thực nghiệm ta thấy việc sử dụng mơ hình thống kê học sâu cho kết tốt so với số phương pháp trước đây, mà cụ thể mơ hình SVM KẾT LUẬN CHUNG Các kết đạt chưa đạt Qua thời gian nghiên cứu luận văn, học viên nhận thấy đạt kết sau đây: - Đề tài đưa giải pháp cho việc nhận dạng chữ viết tay hạn chế, cụ thể sử dụng mô hình thống kê học sâu Ngồi ra, luận văn trình bày phần mơ hình SVM (Support Vector Machine) cho việc nhận dạng chữ viết tay, sử dụng số thư viện mã nguồn mở Hai mơ hình sử dụng liệu để đưa kết so sánh đánh giá - Việc áp dụng mơ hình thống kê học sâu cho kết tương đối tốt, với mô hình kết thu liệu chữ viết tay Tuyển Sinh 99,48%, tốt xấp xỉ khoảng 5% so với mơ hình SVM (94,88%) - Bài toán giải tốt lớp toán nhận dạng toán nhận dạng tổng thể, bước quan trọng toán nhận dạng hoàn chỉnh Ngoài điều bật nêu trên, luận văn số điểm hạn chế định: - Bài toán dừng lại việc nhận dạng kí tự đơn lẻ mà chưa thể nhận dạng kí tự liền nét với - Việc xử lý ảnh nhiễu chưa thật tốt, nhận dạng xảy sai sót gặp phải ảnh có chất lượng Hướng nghiên cứu phát triển - Trong thời gian tới, học viên nghiên cứu sâu mơ hình thống kê học sâu để nhằm nâng cao thêm chất lượng mơ hình nhận dạng, đồng thời thu thập thêm liệu cho lớp kí tự khác - Mở rộng thêm lớp kí tự, nhằm giải tốn lớn nhận dạng kí tự viết tay khác, khơng hạn chế riêng cho kí tự từ  - Ngoài ra, để nâng cao thêm cho việc nhận dạng, học viên mở rộng thêm lớp chữ mà phân tách thành ký tự đơn lẻ - Nghiên cứu xây dựng tốn nhận dạng hồn chỉnh, bổ sung thêm phần phân tích cú pháp phân tích ngữ nghĩa câu để lựa chọn xác kết trả mạng TÀI LIỆU THAM KHẢO Tiếng Việt [1] Đỗ Thanh Nghị, Phạm Nguyên Khang (2013) Nhận dạng kí tự số viết tay giải thuật máy học Tạp chí khoa học Trường Đại học Cần Thơ [2] Lê Minh Hoàng, phương pháp nhận dạng văn tiếng Việt Luận văn thạc sỹ, Đại học Quốc gia Hà Nội [3] Nguyễn Thị Thanh Tân, Nhận dạng chữ viết tay hạn chế dựa mơ hình mạng neuron kết hợp với thống kê ngữ cảnh Luận văn thạc sỹ, Đại học Quốc gia Hà Nội [4] Phạm ThịHoàng Nhung, Hà Quang Thụy (2007).Nghiên cứu, sử dụng mạng neuron nhân tạo dự báo lưu lượng nước đến hồ Hồ Bình trước 10 ngày Hội thảo Quốc gia Một số vấn đề chọn lọc Công nghệ thông tin Truyền thông, lần thứ X, Đại Lải, Vĩnh Phúc, 9/2007 Tiếng Anh [5] Baret O and Simon J.C (1992) Cursiver Words Recognition From Pixels to Fuatures III Frontiers in Handwriting Recognition, tr.1-2 [6] Behnk S., Pfister M and Rojas R., (2000) Recognition of Handwitten ZIP Codes in a Real-World Non-Standard-Letter Sorting System Kluwer Academic Publishers, tr.95-115 [7] Fujasaki T., Beigi H.S.M, Tappert C.C, Ukelson M and Wolf C.G (1992) Online recognition of unconstrained handprinting: a stroke-based system and it evaluation From Pixels to Fuatures III Frontiers in Handwriting Recognition, tr.1-3 [8] Hoai Vu Pham (2013), Hopfield networks and Boltzmann Machines By http://phvu.net/ [9] Hoai Vu Pham (2013), Model definition and training of RBMs By http://phvu.net/ [10] Hoai Vu Pham (2013), Contrastive Divergence By http://phvu.net/ [11] LISA lab Deep Learning 0.1 documentation By http://www.deeplearning.net/tutorial/contents.html [12] Michael Nielsen (2014).Using neural nets to recognize handwritten digits By http://neuralnetworksanddeeplearning.com/chap1.html [13] Ruslan Salakhutdinov and Geoff Hinton, Training a deep autoencoder or a classifier on MNIST digits PHỤ LỤC: HUẤN LUYỆN MƠ HÌNH Restricted Boltzmann Machine (RBM) RBM.m epsilonw = 0.1; % Learning rate for weights epsilonvb = 0.1; % Learning rate for biases of visible units epsilonhb = 0.1; % Learning rate for biases of hidden units weightcost = 0.0002; initialmomentum = 0.5; finalmomentum = 0.9; [numcases numdims numbatches]=size (batchdata); if restart ==1, restart=0; epoch=1; % Initializing symmetric weights and biases vishid = 0.1*randn (numdims, numhid); hidbiases = zeros (1,numhid); visbiases = zeros (1,numdims); poshidprobs = zeros (numcases,numhid); neghidprobs = zeros (numcases,numhid); posprods = zeros (numdims,numhid); negprods = zeros (numdims,numhid); vishidinc = zeros (numdims,numhid); hidbiasinc = zeros (1,numhid); visbiasinc = zeros (1,numdims); batchposhidprobs=zeros (numcases,numhid,numbatches); end for epoch = epoch:maxepoch, fprintf (1,'epoch %d\r',epoch); errsum=0; for batch = 1:numbatches, fprintf (1,'epoch %d batch %d\r',epoch,batch); %%%%%%%%% START POSITIVE PHASE %%%%%%%%%%%%%%%%%%% data = batchdata (:,:,batch); poshidprobs = 1./ (1 + exp (-data*vishid - repmat (hidbiases,numcases,1))); batchposhidprobs (:,:,batch)=poshidprobs; posprods = data' * poshidprobs; poshidact = sum (poshidprobs); posvisact = sum (data); %%%%%%%%% END OF POSITIVE PHASE %%%%%%%%%%%%%%%%%% poshidstates = poshidprobs > rand (numcases,numhid); %%%%%%%%% START NEGATIVE PHASE %%%%%%%%%%%%%%%%%%%%% negdata = 1./ (1 + exp (-poshidstates*vishid' - repmat (visbiases,numcases,1))); neghidprobs = 1./ (1 + exp (-negdata*vishid - repmat (hidbiases,numcases,1))); negprods = negdata'*neghidprobs; neghidact = sum (neghidprobs); negvisact = sum (negdata); %%%%%%%%% END OF NEGATIVE PHASE %%%%%%%%%%%%%%%%%% err= sum (sum ( (data-negdata).^2 )); errsum = err + errsum; if epoch>5, momentum=finalmomentum; else momentum=initialmomentum; end; %%%%%%%%% UPDATE WEIGHTS AND BIASES %%%%%%%%%%%%%%%%% vishidinc = momentum*vishidinc + epsilonw* ( (posprods-negprods)/numcases - weightcost*vishid); visbiasinc = momentum*visbiasinc + (epsilonvb/numcases)* (posvisact-negvisact); hidbiasinc = momentum*hidbiasinc + (epsilonhb/numcases)* (poshidact-neghidact); vishid = vishid + vishidinc; visbiases = visbiases + visbiasinc; hidbiases = hidbiases + hidbiasinc; %%%%%%%%%%%%%%%% END OF UPDATES %%%%%%%%%%%%%%%%% end fprintf (1, 'epoch %4i error %6.1f \n', epoch, errsum); end; Thuật toán lan truyền ngược Backpropclassify.m maxepoch=200; fprintf (1,'\nTraining discriminative model on MNIST by minimizing cross entropy error \n'); fprintf (1,'60 batches of 1000 cases each \n'); load mnistvhclassify load mnisthpclassify load mnisthp2classify makebatches; [numcases numdims numbatches]=size (batchdata); N=numcases; %%% PREINITIALIZE WEIGHTS OF THE DISCRIMINATIVE MODEL%%%%%%%% w1=[vishid; hidrecbiases]; w2=[hidpen; penrecbiases]; w3=[hidpen2; penrecbiases2]; w_class = 0.1*randn (size (w3,2)+1,10); %%%%%%%%% END OF PREINITIALIZATIO OF WEIGHTS %%%%%%%%%%%%% l1=size (w1,1)-1; l2=size (w2,1)-1; l3=size (w3,1)-1; l4=size (w_class,1)-1; l5=10; test_err=[]; train_err=[]; for epoch = 1:maxepoch %%%%%%%% COMPUTE TRAINING MISCLASSIFICATION ERROR %%%%%%%%% err_cr=0; counter=0; [numcases numdims numbatches]=size (batchdata); N=numcases; for batch = 1:numbatches data = [batchdata (:,:,batch)]; target = [batchtargets (:,:,batch)]; data = [data ones (N,1)]; w1probs = 1./ (1 + exp (-data*w1)); w1probs = [w1probs ones (N,1)]; w2probs = 1./ (1 + exp (-w1probs*w2)); w2probs = [w2probs ones (N,1)]; w3probs = 1./ (1 + exp (-w2probs*w3)); w3probs = [w3probs ones (N,1)]; targetout = exp (w3probs*w_class); targetout = targetout./repmat (sum (targetout,2),1,10); [I J]=max (targetout,[],2); [I1 J1]=max (target,[],2); counter=counter+length (find (J==J1)); err_cr = err_cr- sum (sum ( target (:,1:end).*log (targetout))) ; end train_err (epoch)= (numcases*numbatches-counter); train_crerr (epoch)=err_cr/numbatches; %%%%%% END OF COMPUTING TRAINING MISCLASSIFICATION ERROR %%% %%%% COMPUTE TEST MISCLASSIFICATION ERROR %%%%%%%%%%% err=0; err_cr=0; counter=0; [testnumcases testnumdims testnumbatches]=size (testbatchdata); N=testnumcases; for batch = 1:testnumbatches data = [testbatchdata (:,:,batch)]; target = [testbatchtargets (:,:,batch)]; data = [data ones (N,1)]; w1probs = 1./ (1 + exp (-data*w1)); w1probs = [w1probs ones (N,1)]; w2probs = 1./ (1 + exp (-w1probs*w2)); w2probs = [w2probs ones (N,1)]; w3probs = 1./ (1 + exp (-w2probs*w3)); w3probs = [w3probs ones (N,1)]; targetout = exp (w3probs*w_class); targetout = targetout./repmat (sum (targetout,2),1,10); [I J]=max (targetout,[],2); [I1 J1]=max (target,[],2); counter=counter+length (find (J==J1)); err_cr = err_cr- sum (sum ( target (:,1:end).*log (targetout))) ; end test_err (epoch)= (testnumcases*testnumbatches-counter); test_crerr (epoch)=err_cr/testnumbatches; fprintf (1,'Before epoch %d Train # misclassified: %d (from %d) Test # misclassified: %d (from %d) \t \t \n', epoch,train_err (epoch),numcases*numbatches,test_err (epoch),testnumcases*testnumbatches); %% END OF COMPUTING TEST MISCLASSIFICATION ERROR %%%%%% tt=0; for batch = 1:numbatches/10 fprintf (1,'epoch %d batch %d\r',epoch,batch); %%%% COMBINE 10 MINIBATCHES INTO LARGER MINIBATCH %%%%%%%% tt=tt+1; data=[]; targets=[]; for kk=1:10 data=[data batchdata (:,:, (tt-1)*10+kk)]; targets=[targets batchtargets (:,:, (tt-1)*10+kk)]; end %%% PERFORM CONJUGATE GRADIENT WITH LINESEARCHES %%%%%% max_iter=3; if epoch

Ngày đăng: 12/01/2019, 10:36

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan