1. Trang chủ
  2. » Công Nghệ Thông Tin

Mạng nơ ron và ứng dụng nhận dạng chữ ký số

43 1K 5

Đ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

Thông tin cơ bản

Định dạng
Số trang 43
Dung lượng 2,25 MB

Nội dung

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG _ TIỂU LUẬN MÔN HỌC Đề tài: TÌM HIỂU Ý TƯỞNG, THUẬT TOÁN VÀ ỨNG DỤNG CỦA MẠNG NEURAL ÁP DỤNG VÀO BÀI TOÁN NHẬN DẠNG CHỮ SỐ VIẾT TAY - Giảng viên hướng dẫn : TS Lê Thanh Hương - Học viên thực - Môn học : : - Mã học phần : IT6050 - Chuyên ngành : Công nghệ thông tin Phạm Việt Hưng (CA150110) Đoàn Vũ Giang (CA150108) Võ Thị Hường(CA150111) Hồ Thị Lợi (CA150114) Trí tuệ nhân tạo nâng cao - Hà Nội: 8/2016 - MỤC LỤC - IT6050: Trí tuệ nhân tạo nâng cao - - IT6050: Trí tuệ nhân tạo nâng cao - DANH MỤC HÌNH ẢNH - IT6050: Trí tuệ nhân tạo nâng cao - BẢNG PHÂN CÔNG CÔNG VIỆC STT Công việc Thực Tìm hiểu chung yêu cầu, định hướng tiểu luận Cả nhóm Leader - Phân công nhiệm vụ Phạm Việt Hưng Tìm hiểu tổng quan ý tưởng, thuật toán ứng Võ Thị Hường dụng mạng Neural vào nhận dạng chữ số viết Đoàn Vũ Giang tay Hồ Thị Lợi Tìm hiểu tổng quan mạng Neural, mô hình Đoàn Vũ Giang mạng Neural nhiều lớp học có giám sát Tìm hiểu ứng dụng mạng Neural nhận dạng chữ Võ Thị Hường số viết -Bài toán mạng Neural Tìm hiểu ứng dụng mạng Neural nhận dạng chữ Hồ Thị Lợi số viết -Thuật toán lan truyền ngược sai số Cài đặt thử nghiệm Phạm Việt Hưng Tổng hợp báo cáo (.doc) Cả nhóm Báo cáo + Nộp tiểu luận Cả nhóm - IT6050: Trí tuệ nhân tạo nâng cao LỜI NÓI ĐẦU Chúng ta biết rằng, não người sản phẩm hoàn hảo tạo hóa, có khả tư sáng tạo Hiện nay, người nghiên cứu phương thức hoạt động não, sau áp dụng cho công nghệ đại Để tiếp cận khả học, người ta đưa mô hình mạng Neural gồm Neural liên kết với thành mạng theo cấu trúc mạng thần kinh người Mỗi Neural riêng lẻ có khả xử lý thông tin yếu, chúng ghép với thành mạng, khả xử lý thông tin mạnh nhiều Mỗi cấu trúc mạng có ưu điểm đặc thù, chúng cho ta công cụ mạnh lĩnh vực kỹ thuật điều khiển kỹ thuật thông tin Một mạng Neural nhân tạo tập hợp số lớn phần tử xử lý (các nút hay khối), thường tổ chức song song cấu hình theo kiến trúc đệ quy Cách ứng sử mạng Neural nhân tạo giống não người, chứng tỏ khả học, nhớ lại, tổng quát hóa từ liệu huấn luyện Mạng Neural nhân tạo công cụ tốt việc giải toán như: hợp phân lớp đối tượng, xấp xỉ hàm, tối ưu hóa, định lượng vector, phân cụm liệu, Nó thay hiệu công cụ tính toán truyền thống để giải toán Nhận dạng lĩnh vực đóng vai trò quan trọng khoa học kỹ thuật Trong hầu hết vấn đề kỹ thuật ngày nay, ta phải xác định, nhận dạng mô hình đối tượng liên quan, để từ tìm giải pháp Để giải toán nhận dạng, người ta đưa vào cách tiếp cận khác nhau, phương pháp tiếp cận toán cụ thể có ưu, nhược điểm riêng Phương pháp ứng dụng mạng Neural (trí tuệ nhân tạo) nhận dạng cách tiếp cận đại Nó công cụ mạnh để giải toán lĩnh vực Nhóm thực tập lớn chúng em xin mạnh dạn lựa chọn đề tài “Tìm hiểu ý tưởng, thuật toán ứng dụng mạng Neural; áp dụng toán nhận dạng chữ số viết tay” với mong muốn tìm hiểu sâu lĩnh vực trí tuệ nhân tạo - IT6050: Trí tuệ nhân tạo nâng cao I TỔNG QUAN VỀ MẠNG NEURAL I.1 Lịch sử phát triển mạng Neural Các nghiên cứu não người tiến hành từ hàng nghìn năm Cùng với phát triển khoa học kĩ thuật đặc biệt tiến ngành điện tử đại, việc người bắt đầu nghiên cứu Neural nhân tạo hoàn toàn tự nhiên.Có thể tính từ nghiên cứu William (1890) tâm lý học với liên kết noron thần kinh Sự kiện đánh dấu đời mạng Neural nhân tạo diễn vào năm 1943 nhà thần kinh học Warren McCulloch nhà toán học Walter Pitts viết báo mô tả cách thức Neural hoạt động Họ tiến hành xây dựng mạng Neural đơn giản mạch điện Các Neural họ xem thiết bị nhị phân với ngưỡng cố định Kết mô hình hàm logic đơn giản chẳng hạn “ a OR b” hay “a AND b” [6] Tiếp bước nghiên cứu này, năm 1949 Donald Hebb cho xuất sách Organization of Behavior Cuốn sách Neural nhân tạo trở lên hiệu sau lần chúng sử dụng Những tiến máy tính đầu năm 1950 giúp cho việc mô hình hóa nguyên lý lý thuyết liên quan tới cách thức người suy nghĩ trở thành thực Nathanial Rochester sau nhiều năm làm việc phòng thí nghiệm nghiên cứu IBM có nỗ lực để mô mạng Neural Trong thời kì tính toán truyền thống đạt thành công rực rỡ nghiên cứu Neural giai đoạn sơ khai Mặc dù người ủng hộ triết lý “thinking machines” (các máy biết suy nghĩ) tiếp tục bảo vệ cho lập trường Năm 1956 dự án Dartmouth nghiên cứu trí tuệ nhân tạo (Artificial Intelligence) mở thời kỳ phát triển lĩnh vực trí tuệ nhân tạo lẫn mạng Neural Tác động tích cực thúc đẩy quan tâm nhà khoa học trí tuệ nhân tạo trình xử lý mức đơn giản mạng Neural não người Những năm dự án Dartmouth, John von Neumann đề xuất việc mô Neural đơn giản cách sử dụng rơle điện áp đèn chân không Nhà sinh học chuyên nghiên cứu Neural Frank Rosenblatt bắt đầu nghiên cứu Perceptron năm 1958 Sau thời gian nghiên cứu Perceptron cài đặt phần cứng máy tính xem mạng Neural lâu đời sử dụng đến ngày Perceptron tầng hữu ích việc - IT6050: Trí tuệ nhân tạo nâng cao phân loại tập đầu vào có giá trị liên tục vào hai lớp Perceptron tính tổng có trọng số đầu vào, trừ tổng cho ngưỡng cho hai giá trị mong muốn Tuy nhiên Perceptron nhiều hạn chế, hạn chế sách Perceptron Marvin Minsky Seymour Papert MIT (Massachurehs Insritute of Technology) viết năm 1969 chứng minh không dùng cho hàm logic phức Năm 1959, Bernard Widrow Marcian Hoff thuộc trường đại học Stanford xây dựng mô hình ADALINE ( ADAptive LINear Elements) MADALINE (Multiple ADAptive LINear Elements) Các mô hình sử dụng quy tắc học Least-Mean-Squares ( LMS : Tối thiểu bình phương trung bình) MADALINE mạng Neural áp dụng để giải toán thực tế Nó lọc thích ứng có khả loại bỏ tín hiệu dội lại đường dây điện thoại Ngày mạng Neural sử dụng ứng dụng thương mại Năm 1973 Von der Marlsburg: đưa trình học cạnh tranh self – organization Năm 1974 Paul Werbos phát triển ứng dụng phương pháp học lan truyền ngược ( back-propagation) Tuy nhiên phải vài năm phương pháp trở lên phổ biến Các mạng lan truyền ngược biết đến nhiều áp dụng rộng dãi nhất ngày Sợ đến lúc máy móc làm việc người Những lo lắng khiến người ta bắt đầu phản đối nghiên cứu mạng Neural Thời kì tạm lắng kéo dài đến năm 1981 Có thể tính vào khoảng đầu thập niên 80 Những đóng góp lớn cho mạng Neural giai đoạn phải kể đến Grossberg, Kohonen, Rumelhart Hopfield Kohonen mạng SOM (Self Organizing Map), Grossberg mạng ART (Adaptive Resonance Theory) Trong đóng góp lớn Hopfield gồm hai mạng phản hồi: Mạng rời rạc năm 1982 mạng liên tục năm 1984 Đặc biệt, ông dự kiến nhiều khả tính toán lớn mạng mà Neural khả Năm 1982 báo gửi tới viện khoa học quốc gia, John Hopfield phân tích toán học rõ ràng, mạch lạc, ông cách thức mạng Neural làm việc công việc chúng thực Cống hiến Hopfield không giá trị nghiên cứu khoa học mà thúc đẩy trở lại nghiên cứu mạng Neural Cảm nhận Hopfield Rumelhart, Hinton Williams đề xuất thuật toán sai số truyền ngược tiếng để huấn luyện mạng Neural nhiều lớp nhằm giải toán mà mạng khác không thực Nhiều ứng dụng mạnh mẽ mạng Neural đời với mạng theo kiểu máy Boltzmann mạng Neocognition Fukushima - IT6050: Trí tuệ nhân tạo nâng cao Cũng thời gian này, hội nghị với tham gia Hoa Kỳ Nhật Bản bàn việc hợp tác/cạnh tranh lĩnh vực mạng Neural tổ chức Kyoto, Nhật Bản Sau hội nghị, Nhật Bản công bố nỗ lực họ việc tạo máy tính hệ thứ Tiếp nhận điều đó, tạp chí định kỳ Hoa Kỳ bày tỏ lo lắng nước nhà bị tụt hậu lĩnh vực Vì thế, sau đó, Hoa Kỳ nhanh chóng huy động quĩ tài trợ cho nghiên cứu ứng dụng mạng Neural Năm 1985, viện vật lý Hoa Kỳ bắt đầu tổ chức họp hàng năm mạng Neural ứng dụng tin học (Neural Networks for Computing) Năm 1987, hội thảo quốc tế mạng Neural Viện kỹ sư điện điện tử IEEE (Institute of Electrical and Electronic Engineer) thu hút 1800 người tham gia Tính từ năm 1987 đến nay, hàng năm giới mở hội nghị toàn cầu chuyên ngành Neural IJCNN (International Joit Conference on Neural Networks) Ngày nay, không dừng lại mức nghiên cứu lý thuyết, nghiên cứu ứng dụng mạng Neural để giải toán thực tế diễn khắp nơi Các ứng dụng mạng Neural đời ngày nhiều ngày hoàn thiện Điển hình ứng dụng: xử lý ngôn ngữ (Language Processing), nhận dạng ký tự (Character Recognition), nhận dạng tiếng nói (Voice Recognition), nhận dạng mẫu (Pattern Recognition), xử lý tín hiệu (Signal Processing), Lọc liệu (Data Filtering),… I.2 I.2.1 Khái niệm mạng neural Neural sinh học Hình Mạng neural sinh học - IT6050: Trí tuệ nhân tạo nâng cao Do nhu cầu ngày cao việc giải vấn đề phức tạp chất người không muốn lòng với mà muốn vươn tới cao hơn, hoàn thiện hơn, thuật ngữ “mạng Neural” “mạng Neural nhân tạo” “xử lý song song phân tán” đời Các thuật ngữ nói đến ngành kỹ thuật đòi hỏi kiến thức từ nhiều ngành khoa học khác toán học, vật lý học, hóa học, sinh vật học, tâm lý học, thần kinh học,… Tất nhằm tạo máy tính hoạt động giống “bộ não” Các mạng Neural nhân tạo mô dựa theo não người Cho nên, trước trình bày mạng Neural nhân tạo phần sau, xin trình bày sơ lược não sau: Chức năng, tổ chức hoạt động não người a Chức Bộ não người có chức quan trọng đời sống người Bộ não gần kiểm soát hầu hết hành vi người, từ hoạt động bắp đơn giản đến hành động phức tạp học tập, nhớ, suy luận, tư duy, sáng tạo,… b Tổ chức Bộ não người hình thành từ liên kết khoảng 10 11 phân tử (tế bào), có khoảng 1010 phần tử Neural, số lại khoảng 9*10 10 phần tử tế bào thần kinh đệm Các tế bào thần kinh đệm có nhiệm vụ phục vụ hỗ trợ cho Neural Thông thường, não trung bình cân nặng khoảng pound tích 90 inches3 Cấu tạo chi tiết não đến người ta chưa thực biết rõ Tuy vậy, đại thể cấu tạo não phân chia thành nhiều vùng khác Mỗi vùng kiểm soát hay nhiều hoạt động người Bộ não có cấu trúc nhiều lớp Lớp bên thường thấy nếp nhăn, lớp có cấu tạo phúc tạp Đây nơi kiểm soát phát sinh hành động phức tạp nghe, nhìn, tư duy,… c Hoạt động Mặc dù Neural (có thể xem phần tử xử lý hay phần tử tính) có tốc độ chậm so với tốc độ cổng logic silicon vi chip 10 -3 giây so với 10-10 giây, Neural liên kết với khoảng 10 Neural khác, cho nên, hoạt - IT6050: Trí tuệ nhân tạo nâng cao động não hoạt động cách tổng lực đạt hiệu cao Nói cách khác phần tử não hoạt động cách song song tương tác tinh vi phức tạp Hiệu hoạt động thường cao, vấn đề phức tạp Bảng 1.1 So sánh khả làm việc não máy tính Máy tính Bộ não người Đơn vị tính toán Bộ xử lý trung tâm với 105 Mạng 1011Neural mạch logic sở Bộ nhớ 109 bit RAM 1011Neural 1010 bit nhớ với 1014 khớp nối thần kinh Thời gian xử lý 10-8 giây 10-3 giây Thông lượng 109 bit/giây 1014 bit/giây Cập nhật thông tin 105 bit/giây 1014 Neural/giây Tóm lại, não có chức quan trọng đời sống người Cấu tạo não phức tạp, tinh vi tạo thành từ mạng Neural có hàng chục tỉ tế bào với mức độ liên kết Neural cao Hơn nữa, não chia thành vùng lớp khác Bộ não hoạt động dựa chế hoạt động song song Neural tạo nên não Lý thuyết mạng Neural nhân tạo, hay gọi tắt “mạng Neural”, xây dựng xuất phát từ thực tế não người luôn thực tính toán cách hoàn toàn khác so với máy tính số Có thể coi não máy tính hay hệ thống xử lý thông tin song song, phi tuyến phức tạp Nó có khả tự tổ chức phận cấu thành nó, tế bào thần kinh (Neural) hay khớp nối thần kinh (synapse), nhằm thực số tính toán nhận dạng mẫu điều khiển vận động nhanh nhiều lần máy tính nhanh Sự mô não người mạng Neural dựa sở số tính chất đặc thù rút từ nghiên cứu thần kinh sinh học Neural(sinh học) Neural phần tử tạo nên não Cấu tạo hoạt động Neural sau: 10 - IT6050: Trí tuệ nhân tạo nâng cao Trực giác đằng sau thuật toán lan truyền ngược sau Cho mẫu huấn luyện (x, y), trước tiên ta vận hành “bước chạy chuyển tiếp” để tính tất kích hoạt thống qua xuyên suất hệ thống mạng, bao gồm giá trị đầu giả thiết Sau đó, điểm nút i lớp l, ta tính “số hạng lỗi” nhằm xem điểm nút “chịu trách nhiệm” mức cho lỗi đầu ta Đối với điểm nút đầu ra, ta tính trực tiếp độ lệch kích hoạt mạng giá trị mục tiêu thực, dùng để xác định nllà lớp đầu ra) Với đơn vị ẩn, ta tính số hạn lỗi đầu nút dùng truyền ngược: (với lớp dựa trung bình đối trọng làm đầu vào Cụ thể, thuật toán lan Thực bước chạy cấp trước (feedforward pass), tính toán kích hoạt cho lớp L2, L3 lớp đầu Lnl Đối với đơn vị i lớp nl (lớp đầu ra), thiết lập Vì với Nên điểm nút i lớp l, thiết lập Tính đạo hàm phần mong muốn theo công thức sau: Thuật toán sau viết: Thực bước chạy cấp trước, tính toàn tác nhân kích hoạt cho lớp L2, L3 lớp đầu Lnl cách sử dụng phương trình xác định bước lan truyền tịnh tiến Đối với lớp đầu (lớp nl) thiết lập 29 - IT6050: Trí tuệ nhân tạo nâng cao - Đối với , thiết lập Tính toán đạo hàm mong muốn: Lưu ý vận dụng: bước 3, ta cần tính cho giá trị i Ta cho f (z) hàm kích hoạt sigma, ta có lưu trữ cách xa khỏi bước nhảy tịnh tiến xuyên suất hệ thống mạng Như vậy, cách sử dụng cách thể mà ta làm việc cho f’(z), ta tính toán theo công thức: Sau cùng, ta mô tả toàn thuật toán hạ bậc gradrient Trong mã giải (pseudo-code), ma trận (trong chiều W(l)) Lưu ý phép biểu diễn này, phải “ nhân ma trận, đặc biệt không ) Ta áp dụng bước lặp phuong pháp gradient sau: thiết lập (ma trận/véc-tơ 0) cho tất l Đối với i = đến m Dùng thuật lan truyền ngược để tính Thiết lập Thiết lập Cập nhật thông số: 30 - IT6050: Trí tuệ nhân tạo nâng cao - Để huấn luyện mạng Neural, ta thực lặp lại bước phương phápgradientđể hạn chế hàm giá trị J (W, b) ta III ỨNG DỤNG MẠNG NEURAL NHẬN DẠNG CHỮ SỐ VIẾT TAY III.1 Bài toán mạng Neural III.1.1 Mô hình hóa liệu Trước tiên, thực lấy mẫu xuống ảnh ký tự cách ánh xạ ký tự vào lưới có kích thước ma trận chiều hàm displayData Hình 14 Ví dụ tập Dataset Giả sử có 5000 mẫu cần huấn luyện mà mẫu 20 pixel ảnh dạng 20 pixel ảnh màu xám chữ số Mỗi pixel thể số thực thể cường độ màu xám vị trí Lưới pixel 20x20 trải thành vecto 400 chiều Mỗi mẫu huấn luyện hình thành hàng ma trận liệu X Vậy biểu diễn tương ứng với 5000 mẫu huấn luyện 400 ma trận X, vị trí mà hàng mẫu cho hình ảnh kí tự viết tay 31 - IT6050: Trí tuệ nhân tạo nâng cao Phần thứ liệu mẫu vector Y 5000 chiều chứa nhãn liệu Để làm tương thích với mục Octave/MATLAB, số 0, ta lập đồ với số thành giá trị 10 Do đó, số gán cho số 10, số từ đến gán đến theo trật tự tự nhiên III.1.2 Mô hình biểu diễn Lưới Neural thể hình bao gồm lớp- lớp đầu vào, lớp ẩn lớp đầu Nhắc lại rằng, liệu đầu vào giá trị pixel ảnh số Vì hình ảnh có kích thước 20x20 nên cho 400 lớp đầu vào (không tính đơn vị sai lệch đầu cộng 1) liệu huấn luyện nạp vào biến số X Y Bộ thông số mạng (Θ(1) , Θ(2) ) sếp theo cặp Chúng lưu trữ tải lên Theta1 and Theta2 Các thông số có kích thước cho mạng Neural với 25 đơn vị lớp thứ 10 đơn vị đầu (theo loại 10 chữ số) % Load saved matrices from file load('ex4weights.mat'); % The matrices Theta1 and Theta2 will now be in your workspace % Theta1 has size 25 x 401 % Theta2 has size 10 x 26 Hình 15 Mô hình mạng Neural III.1.3 Feedforward hàm chi phí Bây ta tính hàm chi phí gradient cho mạng Neural Nhắc lại hàm chi phí mạng Neural (không quy tắc) 32 - IT6050: Trí tuệ nhân tạo nâng cao - (i) Vị trí hθ (x ) mã hóa hình 15 K= 10 (3) (i) tổng số dán nhãn có khả Chú ý hθ (x )k = a độ lệch (giá trị đầu ra) đơn vị đầu thứ k Những nhãn gốc (biến y) 1, 2, 10 dùng cho mục đích huấn luyện mạng Neural , ta cần mã hóa lại nhãn vecto bao gồm giá trị Ví dụ x (i) hình ảnh số sau y (i) (sử dụng hàm chi phí) vector 10 chiều với y5 = 1, thành phần khác Thực phép tính feedforward kiểm soát h θ (x(i) )cho ví dụ i tổng cho phí tất ví dụ Code nên làm việc cho tập liệu kích thước với số lượng nhãn (có thể giả định luôn có K ≥ nhãn) III.1.4 Hàm chi phí với Regularization Hàm định giá cho mạng Neural với Regularization đây: Có thể giả định mạng Neural có lớp- lớp đầu vào, lớp ẩn lớp đầu Tuy nhiên, chương trình hoạt động cho số lượng đơn vị đầu vào, đơn vị ẩn đơn vị đầu Liệt kê cách rõ ràng số cho Θ (1) Θ (2), lưu ý chương trình bạn cần công việc chung với Θ (1) Θ (2) với kích thước 33 - IT6050: Trí tuệ nhân tạo nâng cao Chú ý hợp thức điều khoản để tương ứng với phần ưu tiên Đối với ma trận Theta1 Theta2, hồi đáp cột thứ ma trận III.2 Thuật toán lan (Backpropagation) truyền ngược sai số Phần thực thuật toán lan truyền ngược sai số để tính gradient cho hàm chi phí mạng Neural Sau ta huấn luyện mạng Neural cách cực tiểu hóa hàm chi phí J(Θ) Trước tiên, ta thực thuật toán lan truyền ngược để tính gradient cho tham số mạng Neural (chưa thức) Sau tính tham số cho mẫu đại diện, ta thực tính toán gradient cho toàn mạng Neural chuẩn III.2.1 Hàm Sigmoid gradient Gradient hàm Sigmoid tính toán theo công thức sau: Trong đó: sigmoid(z) = g(z) = - Với giá trị z lớn (cả giá trị dương giá trị âm), gradient tiệm cận dần tới Với z = 0, gradient sấp xỉ 0,25 III.2.2 Khởi tạo ngẫu nhiên (Random initialization) Khi thực huấn luyện mạng Neural việc khởi tạo ngẫu nhiên tham số quan trọng Mục đích việc khởi tạo ngẫu nhiên để chọn ngẫu nhiên giá trị Θ khoảng xác định đủ nhỏ để việc huấn luyện mạng Neural hiệu 34 - IT6050: Trí tuệ nhân tạo nâng cao III.2.3 Hàm lan truyền ngược (Backpropagation) Hình 16 Cập nhật lan truyền ngược Thuật toán lan truyền ngược mô tả sau: Giả sử cho ví dụ huấn luyện (x(t),y(t)) - - Trước tiên, ta sử dụng dạng tổng quát mạng Neural truyền thẳng nhiều lớp để tính toán giá trị khởi tạo toàn mạng (bao gồm đầu ra) hΘ(x) Khi đó, đầu lớp trở thành đầu vào lớp Sau đó, với j node lớp l ta cần tính toán độ lệch δj(l) Với node đầu ra, ta cần đo độ lệch kết tính toán kết đầu mục tiêu Sử dụng hàm δj(3) (từ lớp thứ trở coi lớp đầu ra) Với nút ta tính δj(l)dự trung bình trọng số độ lệch node lớp (l + 1) Cụ thể với ví dụ hình 16, ta sử dụng vòng lặp for t = 1:m (m số lớp mạng) thực bước từ 1-4 vòng lặp đó, lớp thứ t thực lặp lại tính toán mẫu huấn luyện thứ t (x(t),y(t)) Bước số chia gradient tích lũy cho m để gradient hàm chi phí mạng Neural - - Bước 1: Thiết lập giá trị đầu vào lớp (a(1)) huấn luyện lớp thứ t với giá trị x(t) Thực lan truyền thẳng để tính giá trị (z(2),a(2),z(3),a(3)) lớp lớp Bước 2: Với giá trị đầu k lớp thứ (lớp đầu ra), thiết lập giá trị: , 35 - IT6050: Trí tuệ nhân tạo nâng cao Với yk ∈ {0,1} cho biết ví dụ huấn luyện thuộc lớp k (yk = 1), - không thuộc lớp k (yk = 0) Bước 3: Để tìm lớp ẩn layer l = 2, thiết lập: Bước 4: Gradient tính công thức sau Có thể bỏ qua giá trị ∆(l) = ∆(l) + δ(l+1)(a(l))T Bước 5: Tính gradient (chưa thức) cho hàm chi phí mạng Neural cách chia gradient tổng (tích lũy) cho số lớp mạng (m) III.2.4 Regularized Neural Networks Sau chạy thành công thuật toán lan truyền ngược, ta bổ sung quy tắc / luật cho gradient Lưu ý, luật thêm vào sau tính toán gradients lan truyền ngược Đặc biệt, sau tính toán với thuật toán lan truyền ngược Sau bạn implemeted thành công thuật toán lan truyền ngược, bạn thêm quy tắc để gradient Để giải thích cho quy tắc, bạn thêm khoản bổ sung sau tính toán gradient sử dụng lan truyền ngược, ta bổ sung quy tắc công thức sau: với j = với j ≥ Lưu ý, ta không nên “luật hóa” cột Θ(l) Hơn nữa, tham số số từ Như vậy, ta có: i đánh số 1, j đánh III.2.5 Học tham số với fmin Sau thực thi thành công việc tính toán gradient hàm chi phí, ta sử dụng hàm fmin để học (huấn luyện) tham số 36 - IT6050: Trí tuệ nhân tạo nâng cao Sau hoàn thành trình huấn luyện, ta tính độ xác (%) việc huấn luyện theo lớp Nếu tính toán tốt, ta nhận kết báo cáo xác đến 95,3% (trong có khoảng 1% phụ thuộc vào giá trị khởi tạo ngẫu nhiên) Nên thực việc huấn luyện nhiều lần để đạt độ xác cao Ví dụ: thiết lập MaxIter đến 400 thay đổi tham số λ Nếu thiết lập hợp lý tham số huấn luyện hợp lý, ta nhanh chóng tìm mạng Neural phù hợp với tập huấn luyện III.3 Chương trình thử nghiệm import numpy as np from scipy.io import loadmat data = loadmat('data.mat') print data X = data['X'] y = data['y'] print X.shape, y.shape from sklearn.preprocessing import OneHotEncoder encoder = OneHotEncoder(sparse=False) y_onehot = encoder.fit_transform(y) print y_onehot.shape def sigmoid(z): return / (1 + np.exp(-z)) def forward_propagate(X, theta1, theta2): m = X.shape[0] a1 = np.insert(X, 0, values=np.ones(m), axis=1) z2 = a1 * theta1.T a2 = np.insert(sigmoid(z2), 0, values=np.ones(m), axis=1) z3 = a2 * theta2.T h = sigmoid(z3) return a1, z2, a2, z3, h def cost(params, input_size, hidden_size, num_labels, X, y, learning_rate): m = X.shape[0] X = np.matrix(X) y = np.matrix(y) # reshape the parameter array into parameter matrices for each layer theta1 = np.matrix(np.reshape(params[:hidden_size * (input_size + 1)], (hidden_size, (input_size + 1)))) theta2 = np.matrix(np.reshape(params[hidden_size * (input_size + 1):], (num_labels, (hidden_size + 1)))) # run the feed-forward pass a1, z2, a2, z3, h = forward_propagate(X, theta1, theta2) 37 - IT6050: Trí tuệ nhân tạo nâng cao - # compute the cost J = for i in range(m): first_term = np.multiply(-y[i, :], np.log(h[i, :])) second_term = np.multiply((1 - y[i, :]), np.log(1 - h[i, :])) J += np.sum(first_term - second_term) J = J / m # add the cost regularization term J += (float(learning_rate) / (2 * m)) * (np.sum(np.power(theta1[:, 1:], 2)) + np.sum(np.power(theta2[:, 1:], 2))) return J # initial setup input_size = 400 hidden_size = 25 num_labels = 10 learning_rate = # randomly initialize a parameter array of the size of the full network's parameters params = (np.random.random(size=hidden_size * (input_size + 1) + num_labels * (hidden_size + 1)) - 0.5) * 0.25 m = X.shape[0] X = np.matrix(X) y = np.matrix(y) # unravel the parameter array into parameter matrices for each layer theta1 = np.matrix(np.reshape(params[:hidden_size * (input_size + 1)], (hidden_size, (input_size + 1)))) theta2 = np.matrix(np.reshape(params[hidden_size * (input_size + 1):], (num_labels, (hidden_size + 1)))) print theta1.shape, theta2.shape a1, z2, a2, z3, h = forward_propagate(X, theta1, theta2) print a1.shape, z2.shape, a2.shape, z3.shape, h.shape print cost(params, input_size, hidden_size, num_labels, X, y_onehot, learning_rate) def sigmoid_gradient(z): return np.multiply(sigmoid(z), (1 - sigmoid(z))) def backprop(params, input_size, hidden_size, num_labels, X, y, learning_rate): m = X.shape[0] X = np.matrix(X) y = np.matrix(y) # reshape the parameter array into parameter matrices for each layer theta1 = np.matrix(np.reshape(params[:hidden_size * (input_size + 1)], (hidden_size, (input_size + 1)))) theta2 = np.matrix(np.reshape(params[hidden_size * (input_size + 1):], (num_labels, (hidden_size + 1)))) 38 - IT6050: Trí tuệ nhân tạo nâng cao - # run the feed-forward pass a1, z2, a2, z3, h = forward_propagate(X, theta1, theta2) # initializations J = delta1 = np.zeros(theta1.shape) delta2 = np.zeros(theta2.shape) # (25, 401) # (10, 26) # compute the cost for i in range(m): first_term = np.multiply(-y[i, :], np.log(h[i, :])) second_term = np.multiply((1 - y[i, :]), np.log(1 - h[i, :])) J += np.sum(first_term - second_term) J = J / m # add the cost regularization term J += (float(learning_rate) / (2 * m)) * (np.sum(np.power(theta1[:, 1:], 2)) + np.sum(np.power(theta2[:, 1:], 2))) # perform backpropagation for t in range(m): a1t = a1[t, :] # (1, 401) z2t = z2[t, :] # (1, 25) a2t = a2[t, :] # (1, 26) ht = h[t, :] # (1, 10) yt = y[t, :] # (1, 10) d3t = ht - yt # (1, 10) z2t = np.insert(z2t, 0, values=np.ones(1)) # (1, 26) d2t = np.multiply((theta2.T * d3t.T).T, sigmoid_gradient(z2t)) # (1, 26) delta1 = delta1 + (d2t[:, 1:]).T * a1t delta2 = delta2 + d3t.T * a2t delta1 = delta1 / m delta2 = delta2 / m # add the gradient regularization term delta1[:, 1:] = delta1[:, 1:] + (theta1[:, 1:] * learning_rate) / m delta2[:, 1:] = delta2[:, 1:] + (theta2[:, 1:] * learning_rate) / m # unravel the gradient matrices into a single array grad = np.concatenate((np.ravel(delta1), np.ravel(delta2))) return J, grad J, grad = backprop(params, input_size, hidden_size, num_labels, X, y_onehot, learning_rate) print J, grad.shape from scipy.optimize import minimize # minimize the objective function fmin = minimize(fun=backprop, x0=params, args=(input_size, hidden_size, num_labels, X, y_onehot, learning_rate), method='TNC', jac=True, options={'maxiter': 250}) 39 - IT6050: Trí tuệ nhân tạo nâng cao print fmin X = np.matrix(X) theta1 = np.matrix(np.reshape(fmin.x[:hidden_size * (input_size + 1)], (hidden_size, (input_size + 1)))) theta2 = np.matrix(np.reshape(fmin.x[hidden_size * (input_size + 1):], (num_labels, (hidden_size + 1)))) a1, z2, a2, z3, h = forward_propagate(X, theta1, theta2) y_pred = np.array(np.argmax(h, axis=1) + 1) print y_pred correct = [1 if a == b else for (a, b) in zip(y_pred, y)] accuracy = (sum(map(int, correct)) / float(len(correct))) print 'accuracy = {0}%'.format(accuracy * 100) 40 - IT6050: Trí tuệ nhân tạo nâng cao - LỜI CẢM ƠN Môn học Trí tuệ nhân tạo (nâng cao) mang đến cho chúng em kiến thức mạng Neural nhân tạo, phương pháp học máy khả tuyệt vời người hệ thống máy tính Qua trình thực đề tài, phần chúng em hiểu thêm mô hình mạng Neural, phương pháp huấn luyện mạng Neural, cách suy diễn mạng Neural nào… Tuy nhiên, kiến thức hạn chế nên đề tài chúng em dừng lại mức nghiên cứu tìm hiểu Chúng em xin chân thành gửi tới cô giáo TS Lê Thanh Hương lời cảm ơn sâu sắc Cô tận tình giảng dạy cung cấp cho chúng em kiến thức tài liệu cần thiết để chúng em hoàn thành tiểu luận 41 - IT6050: Trí tuệ nhân tạo nâng cao - TÀI LIỆU THAM KHẢO Bài giảng môn học “Trí tuệ nhân tạo nâng cao” – TS Lê Thanh Hương Bài giảng môn học "Học máy" - TS Thân Quang Khoát Machine Learning - Andrew Ng http://ufldl.stanford.edu/tutorial/supervised/MultiLayerNeuralNetworks/ https://github.com/jdwittenauer/ipython-notebooks Python for Data Analysis - Wes McKinney 42 - IT6050: Trí tuệ nhân tạo nâng cao - NHẬN XÉT CỦA GIÁO VIÊN ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… 43

Ngày đăng: 29/08/2016, 09:36

TỪ KHÓA LIÊN QUAN

w