Đề tài Tìm hiểu về mạng nơron Kohonen (hay mạng nơron tự tổ chức – SOM)

Tài liệu Đề tài Tìm hiểu về mạng nơron Kohonen (hay mạng nơron tự tổ chức – SOM): MỤC LỤC CÁC HÌNH VẼ, BẢNG BIỂU TRONG LUẬN VĂN Hình 1.1 Một nơron sinh học 9 Hình 1.2. Sự liên kết các nơron 9 Hình 1.3 Mô hình một nơron nhân tạo 10 Hình 1.4 Đồ thị các dạng hàm kích hoạt 12 Hình 1.5 Mạng nơron ba lớp 13 Hình 1.6 Một số dạng mạng nơron 15 Hình 1.7 Cấu trúc của mạng Hopfield 17 Hình 1.8 Cấu trúc của BAM 18 Hình 1.9: Cấu trúc huấn luyện mạng nơron 20 Hình 1.10: Học có giám sát 21 Hình 1.12: Học không có giám sát 22 Hình 1.13: Sơ đồ cấu trúc chung của quá trình học 23 Hình 1.14: Mạng 3 lớp lan truyền ngược 24 Hình 2.1: Một dạng mạng nơron Kohonen 36 Hình 2.2: Sơ đồ khối biểu diễn huấn luyện mạng nơron Kohonen. 40 Hình 3.1:Mô hình chung trong nhận dạng chữ viết. 62 Hình 3.2: Sơ đồ huấn luyện mạng 62 Hình 3.4: Biểu diễn ký tự e theo ma trận 5x7 pixcel. 64 Hình 3.5: Biểu diễn ký tự e theo ma trận 5x7 bởi các giá trị 64 Hình3.6: Biểu diễn ký tự e ở vector đầu vào 64 Hình 3.7 Vẽ và gán ký tự 65 Hình 3.8 Kết quả mạng nơron Kohonen nhận dạng ký tự e và ký ...

doc68 trang | Chia sẻ: hunglv | Lượt xem: 1360 | Lượt tải: 1download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Tìm hiểu về mạng nơron Kohonen (hay mạng nơron tự tổ chức – SOM), để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
MỤC LỤC CÁC HÌNH VẼ, BẢNG BIỂU TRONG LUẬN VĂN Hình 1.1 Một nơron sinh học 9 Hình 1.2. Sự liên kết các nơron 9 Hình 1.3 Mô hình một nơron nhân tạo 10 Hình 1.4 Đồ thị các dạng hàm kích hoạt 12 Hình 1.5 Mạng nơron ba lớp 13 Hình 1.6 Một số dạng mạng nơron 15 Hình 1.7 Cấu trúc của mạng Hopfield 17 Hình 1.8 Cấu trúc của BAM 18 Hình 1.9: Cấu trúc huấn luyện mạng nơron 20 Hình 1.10: Học có giám sát 21 Hình 1.12: Học không có giám sát 22 Hình 1.13: Sơ đồ cấu trúc chung của quá trình học 23 Hình 1.14: Mạng 3 lớp lan truyền ngược 24 Hình 2.1: Một dạng mạng nơron Kohonen 36 Hình 2.2: Sơ đồ khối biểu diễn huấn luyện mạng nơron Kohonen. 40 Hình 3.1:Mô hình chung trong nhận dạng chữ viết. 62 Hình 3.2: Sơ đồ huấn luyện mạng 62 Hình 3.4: Biểu diễn ký tự e theo ma trận 5x7 pixcel. 64 Hình 3.5: Biểu diễn ký tự e theo ma trận 5x7 bởi các giá trị 64 Hình3.6: Biểu diễn ký tự e ở vector đầu vào 64 Hình 3.7 Vẽ và gán ký tự 65 Hình 3.8 Kết quả mạng nơron Kohonen nhận dạng ký tự e và ký tự c 65 Hình 3.9 Đưa chữ ký vào mạng và gán tên 65 Hình 3.10 Kết quả mạng nơron Kohonen nhận dạng chữ ký 66 THUẬT NGỮ TIẾNG ANH ANN Mạng nơron cần huấn luyện BAM Mạng BAM (Bidirectional Associative Memory) SOM Mạng nơron tự tổ chức (Self Organizing Maps) PE Phần tử xử lý (Processing Element) OCR Nhận dạng ký tự quang (optical character recognition) Lời cảm ơn Chúng ta đều biết rằng, bộ não con người là một sản phẩm hoàn hảo của tạo hóa, nó có khả năng tư duy và sáng tạo. Hiện nay, con người đang nghiên cứu phương thức hoạt động của bộ não, sau đó áp dụng cho những công nghệ hiện đại. Để tiếp cận khả năng học, người ta đưa ra mô hình mạng nơron gồm các nơron liên kết với nhau thành mạng phỏng theo cấu trúc mạng thần kinh của con người. Mỗi nơron riêng lẻ có khả năng xử lý thông tin yếu, nhưng khi chúng được ghép với nhau thành mạng, thì khả năng xử lý thông tin sẽ mạnh hơn rất nhiều. Mỗi cấu trúc mạng đều có một ưu điểm đặc thù, chúng cho ta một công cụ mạnh trong các lĩnh vực kỹ thuật điều khiển và kỹ thuật thông tin. Một mạng nơron nhân tạo là tập hợp một số lớn các phần tử xử lý (các nút hay các khối), thường được tổ chức song song và được cấu hình theo kiến trúc đệ quy. Cách ứng sử trên mạng nơron nhân tạo giống như bộ não con người, nó chứng tỏ khả năng học, nhớ lại, và tổng quát hóa từ dữ liệu huấn luyện. Mạng nơron nhân tạo là công cụ tốt trong việc giải quyết các bài toán như: hợp và 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 dữ liệu,...Nó thay thế hiệu quả các công cụ tính toán truyền thống để giải quyết các bài toán này. Nhận dạng là một lĩnh vực đóng vai trò quan trọng trong khoa học kỹ thuật. Trong hầu hết các vấn đề kỹ thuật ngày nay, ta đều phải xác định, nhận dạng được các mô hình và đối tượng liên quan, để từ đó tìm ra giải pháp. Nhận dạng mô hình là bài toán rất quan trong trong lý thuyết hệ thống. Lý do đơn giản là vì không thể phân tích, tổng hợp hệ thống khi không có mô hình toán học mô tả hệ thống. Trong quá trình xây dựng mô hình hệ thống trên phương diện lý thuyết, người ta thường không khảo sát được mọi ảnh hưởng của môi trường đến tính động học của hệ thống, cũng như những tác động qua lại bên trong hệ thống một cách chính xác tuyệt đối. Rất nhiều yếu tố đã bị bỏ qua, hoặc chỉ được xem xét đến như là một tác động ngẫu nhiên. Bởi vậy, nếu nói một cách chặt chẽ thì những hiểu biết lý thuyết ban đầu về hệ thống, mới chỉ có thể giúp ta khoanh được lớp các mô hình thích hợp. Để có thể có được một mô hình cụ thể có chất lượng phù hợp với bài cụ thể toán đặt ra trong lớp các mô hình thích hợp đó, thì phải sử dụng phương pháp nhận dạng. Còn bài toán nhận dạng, phân tích phân cụm dữ liệu, là các bài toán rất hay gặp trong thực tế, khi chúng ta nhìn thấy một vật gì đó, thì câu hỏi thường trực của mỗi người là; vật đó có máy loại, và nó thuộc loại nào trong các loại có thể có. Để giải quyết các bài toán nhận dạng, người ta đã đưa vào các cách tiếp cận khác nhau, mỗi phương pháp tiếp cận trong những bài toán cụ thể đều có những ưu, nhược điểm riêng. Phương pháp ứng dụng mạng nơron trong nhận dạng là một cách tiếp cận mới và hiện đại. Nó có thể là công cụ rất mạnh để giải quyết các bài toán trong lĩnh vực này. Nội dung của đề tài đi vào tìm hiểu và xây dựng các phần tử nơron cơ bản, xem xét và nghiên cứu cấu trúc một mạng nơron, giới thiệu về mạng nơron nhiều lớp với thuật toán lan truyền ngược. Trọng tâm của đề tài đi vào tìm hiểu về mạng nơron Kohonen (hay mạng nơron tự tổ chức – SOM). Đề tài gồm ba chương Chương 1, trình bày cấu trúc một phần tử nơron cơ bản, các cấu trúc mạng nơron nhân tạo thường gặp, thuật toán học, phân tích ưu nhược điểm của chúng, và giới thiệu về thuật toán lan truyền ngược. Chương 2, tìm hiểu mạng nơron Kohonen. Chương 3, nhận dạng ký tự quang sử dụng mạng nơron Kohonen. Cuối cùng em xin cảm ơn các thày cô giáo, đặc biệt là PGS.TSKH Bùi Công Cường đã tận tình chỉ dẫn cho em trong suốt thời gian làm đề tài. Xin cảm ơn các bạn cùng lớp đã tạo điều kiện cho tôi được học tập và nghiên cứu trong môi trường tốt. Hà nội, tháng 12 năm 2009. Chương 1. Giới thiệu về mạng nơron nhân tạo Học máy là một ngành khoa học nghiên cứu các thuật toán cho phép máy tính có thể học được các khái niệm. Phân loại: Có hai loại phương pháp học máy chính Phương pháp quy nạp: Máy học/phân biệt các khái niệm dựa trên dữ liệu đã thu thập được trước đó. Phương pháp này cho phép tận dụng được nguồn dữ liệu rất nhiều và sẵn có. Phương pháp suy diễn: Máy học/phân biệt các khái niệm dựa vào các luật. Phương pháp này cho phép tận dụng được các kiến thức chuyên ngành để hỗ trợ máy tính. Hiện nay, các thuật toán đều cố gắng tận dụng được ưu điểm của hai phương pháp này. Các ngành khoa học liên quan: Lý thuyết thống kê: các kết quả trong xác suất thống kê là tiền đề cho rất nhiều phương pháp học máy. Đặc biệt, lý thuyết thống kê cho phép ước lượng sai số của các phương pháp học máy. Các phương pháp tính: các thuật toán học máy thường sử dụng các tính toán số thực/số nguyên trên dữ liệu rất lớn. Trong đó, các bài toán như: tối ưu có/không ràng buộc, giải phương trình tuyến tính v.v… được sử dụng rất phổ biến. Khoa học máy tính: là cơ sở để thiết kế các thuật toán, đồng thời đánh giá thời gian chạy, bộ nhớ của các thuật toán học máy. Ứng dụng: Học máy có ứng dụng rộng khắp trong các ngành khoa học/sản xuất, đặc biệt những ngành cần phân tích khối lượng dữ liệu khổng lồ. Một số ứng dụng thường thấy như: Xử lý ngôn ngữ tự nhiên: xử lý văn bản, giao tiếp người – máy, … Nhận dạng: nhận dạng tiếng nói, chữ viết tay, vân tay, thị giác máy (Computer Vision) … Tìm kiếm Chẩn đoán trong y tế: phân tích ảnh X-quang, các hệ chuyên gia chẩn đoán tự động. Tin sinh học: phân loại chuỗi gene, quá trình hình thành gene/protein Vật lý: phân tích ảnh thiên văn, tác động giữa các hạt … Phát hiện gian lận tài chính (financial fraud): gian lận thẻ tỉn dụng Phân tích thị trường chứng khoán (stock market analysis) Chơi trò chơi: tự động chơi cờ, hành động của các nhân vật ảo Rôbốt: là tổng hợp của rất nhiều ngành khoa học, trong đó học máy tạo nên hệ thần kinh/bộ não của người máy. Các nhóm giải thuật học máy: Học có giám sát, học không giám sát, học nửa giám sát, học tăng cường,… 1.1 Cấu trúc và mô hình mạng nơron 1.1.1 Mô hình một nơron sinh học Phần tử xử lý cơ bản của một mạng nơron sinh học là một nơron, phần tử này có thể chia làm bốn thành phần cơ bản như sau: dendrites, soma, axon, và synapses. Dendrites: là phần nhận tín hiệu đầu vào. Soma: là hạt nhân. Axon: là phần dẫn ra tín hiệu xử lý. Synapses: là đường tín hiệu điện hóa giao tiếp giữa các nơron. Kiến trúc cơ sở này của bộ não con người có một vài đặc tính chung. Một cách tổng quát, thì một nơron sinh học nhận đầu vào từ các nguồn khác nhau, kết hợp chúng tại với nhau, thực thi tổ hợp phi tuyến chúng để cho ra kết quả cuối cùng ở đầu ra. Hình 1.1 chỉ ra mối quan hệ giữa bốn phần tử của một nơron sinh học. Hình 1.1 Một nơron sinh học Một nơron sinh học chỉ có một số chức năng cơ bản như vậy, ta nhận thấy khả năng xử lý thông tin của nó là rất yếu. Để có được khả năng xử lý thông tin hoàn hảo như bộ não con người, thì các nơron phải kết hợp và trao đổi thông tin với nhau. Ta hình dung sơ đồ liên kết, và trao đổi thông tin giữa hai nơron như hình 1.2. Hình 1.2. Sự liên kết các nơron 1.1.2 Cấu trúc và mô hình của một nơron nhân tạo Mô hình toán học của mạng nơron sinh học được đề xuất bởi McCulloch và Pitts, thường được gọi là nơron M-P, ngoài ra nó còn được gọi là phần tử xử lý và được ký hiệu là PE (Processing Element). Mô hình nơron có m đầu vào x1, x2, ..., xm, và một đầu ra yi như sau: Hình 1.3 Mô hình một nơron nhân tạo Giải thích các thành phần cơ bản: Tập các đầu vào: Là các tín hiệu vào của nơron, các tín hiệu này thường được đưa vào dưới dạng một vector m chiều. Tập các liên kết (các trọng số): Mỗi liên kết được thể hiện bởi một trọng số (thường được gọi là trọng số liên kết). Trọng số liên kết giữa tín hiệu vào thứ j cho nơron i thường được ký hiệu là wij. Thông thường các trọng số này được khởi tạo ngẫu nhiên ở thời điểm khởi tạo mạng và được cập nhật liên tục trong quá trình học mạng. Bộ tổng (Hàm tổng): Thường dùng để tính tổng của tích các đầu vào với trọng số liên kết của nó. Ngưỡng: Ngưỡng này thường được đưa vào như một thành phần của hàm truyền. Hàm truyền: Hàm này dùng để giới hạn phạm vi đầu ra của mỗi nơron. Nó nhận đầu vào là kết quả của hàm tổng và ngưỡng đã cho. Thông thường, phạm vi đầu ra của mỗi nơron được giới hạn trong đoạn [0,1] hoặc [-1,1]. Các hàm truyền rất đa dạng, có thể là các hàm tuyến tính hoặc phi tuyến. Việc lựa chọn hàm truyền tùy thuộc vào từng bài toán và kinh nghiệm của người thiết kế mạng. Đầu ra: Là tín hiệu đầu ra của một nơron, với mỗi nơron sẽ có tối đa một đầu ra. Về mặt toán học, cấu trúc của một nơron i được mô tả bằng cặp biểu thức sau: và trong đó: x1, x2, …xm là các tín hiệu đầu vào, còn wi1, wi2,…,wim là các trọng số kết nối của nơron thứ i, neti là hàm tổng, f là hàm truyền, là một ngưỡng, yi là tín hiệu đầu ra của nơron. Như vậy, tương tự như nơron sinh học, nơron nhân tạo cũng nhận các tín hiệu đầu vào, xử lý (nhân các tín hiệu này với trọng số liên kết, tính tổng các tích thu được rồi gửi kết quả đến hàm truyền), và cho một tín hiệu đầu ra (là kết quả của hàm truyền). Hàm truyền có thể có các dạng sau: Hàm bước (1.6) Hàm giới hạn chặt (hay còn gọi là hàm bước) (1.7) Hàm bậc thang (1.8) Hàm ngưỡng đơn cực với λ>0 (1.9) Hàm ngưỡng hai cực với λ>0 (1.10) Đồ thị các dạng hàm truyền được biểu diễn như sau: Hình 1.4 Đồ thị các dạng hàm truyền 1.2 Cấu tạo và phương thức làm việc của mạng nơron Dựa trên những phương pháp xây dựng nơron đã trình bày ở mục trên, ta có thể hình dung mạng nơron như là một hệ truyền đạt và xử lý tín hiệu. Đặc tính truyền đạt của nơron phần lớn là đặc tính truyền đạt tĩnh. Khi liên kết các đầu vào/ra của nhiều nơron với nhau, ta thu được một mạng nơron, việc ghép nối các nơron trong mạng với nhau có thể là theo một nguyên tắc bất kỳ. Vì mạng nơron là một hệ truyền đạt và xử lý tín hiệu, nên có thể phân biệt các loại nơron khác nhau, các nơron có đầu vào nhận thông tin từ môi trường bên ngoài khác với các nơron có đầu vào được nối với các nơron khác trong mạng, chúng được phân biệt với nhau qua vector hàm trọng số ở đầu vào w. Nguyên lý cấu tạo của mạng nơron bao gồm nhiều lớp, mỗi lớp bao gồm nhiều nơron có cùng chức năng trong mạng. Hình 1.5 là mô hình hoạt động của một mạng nơron 3 lớp với 8 phần tử nơron. Mạng có ba đầu vào là x1, x2, x3 và hai đầu ra y1, y2. Các tín hiệu đầu vào được đưa đến 3 nơron đầu vào, 3 nơron này làm thành lớp đầu vào của mạng. Các nơron trong lớp này được gọi là nơron đầu vào. Đầu ra của các nơron này được đưa đến đầu vào của 3 nơron tiếp theo, 3 nơron này không trực tiếp tiếp xúc với môi trường bên ngoài mà làm thành lớp ẩn, hay còn gọi là lớp trung gian. Các nơron trong lớp này có tên là nơron nội hay nơron ẩn. Đầu ra của các nơron này được đưa đến 2 nơron đưa tín hiệu ra môi trường bên ngoài. Các nơron trong lớp đầu ra này được gọi là nơron đầu ra. Hình 1.5 Mạng nơron ba lớp Mạng nơron được xây dựng như trên là mạng gồm 3 lớp mắc nối tiếp nhau đi từ đầu vào đến đầu ra. Trong mạng không tồn tại bất kỳ một mạch hồi tiếp nào. Một mạng nơron có cấu trúc như vậy gọi là mạng một hướng hay mạng truyền thẳng một hướng (Feed forward network), và có cấu trúc mạng ghép nối hoàn toàn (vì bất cứ một nơron nào trong mạng cũng được nối với một hoặc vài nơron khác). Mạng nơron bao gồm một hay nhiều lớp trung gian được gọi là mạng Multilayer Perceptrons) (MLP-Network). Mạng nơron khi mới được hình thành thì chưa có tri thức, tri thức của mạng sẽ được hình thành dần dần sau một quá trình học. Mạng nơron được học bằng cách đưa vào những kích thích, và mạng hình thành những đáp ứng tương ứng, những đáp ứng tương ứng phù hợp với từng loại kích thích sẽ được lưu trữ. Giai đoạn này được gọi là giai đoạn học của mạng. Khi đã hình thành tri thức mạng, mạng có thể giải quyết các vấn đề một cách đúng đắn. Đó có thể là vấn đề ứng dụng rất khác nhau, được giải quyết chủ yếu dựa trên sự tổ chức hợp nhất giữa các thông tin đầu vào của mạng và các đáp ứng đầu ra. Nếu nhiệm vụ của một mạng là hoàn chỉnh hoặc hiệu chỉnh các thông tin thu được không đầy đủ hoặc bị tác động của nhiễu. Mạng nơron kiểu này được ứng dụng trong lĩnh vực hoàn thiện mẫu, trong đó có một ứng dụng cụ thể là nhận dạng chữ viết. Nhiệm vụ tổng quát của một mạng nơron là lưu giữ động các thông tin. Dạng thông tin lưu giữ này chính là quan hệ giữa các thông tin đầu vào và các đáp ứng đầu ra tương ứng, để khi có một kích thích bất kỳ tác động vào mạng, mạng có khả năng suy diễn và đưa ra một đáp ứng phù hợp. Đây chính là chức năng nhận dạng theo mẫu của mạng nơron. Để thực hiện chức năng này, mạng nơron đóng vai trò như một bộ phận tổ chức các nhóm thông tin đầu vào, và tương ứng với mỗi nhóm là một đáp ứng đầu ra phù hợp. Như vậy, một nhóm bao gồm một loại thông tin đầu vào và một đáp ứng đầu ra. Các nhóm có thể được hình thành trong quá trình học, và cũng có thể không hình thành trong quá trình học. Hình 1.6 là một số liên kết đặc thù của mạng nơron. Nơron được vẽ là các vòng tròn xem như một tế bào thần kinh, chúng có các mối liên hệ đến các nơron khác nhờ các trọng số liên kết. Tập hợp các trọng số liên kết này sẽ lập thành các ma trận trọng số tương ứng. 1.2.1 Mạng nơron một lớp Mỗi một nơron có thể phối hợp với các nơron khác tạo thành một lớp các trọng số. Mạng một lớp truyền thẳng như hình 1.6a. Một lớp nơron là một nhóm các nơron mà chúng đều có cùng trọng số, nhận cùng một tín hiệu đầu vào đồng thời. Trong ma trận trọng số, các hàng là thể hiện nơron, hàng thứ j có thể đặt nhãn như một vector 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] Tại cùng một thời điểm, vector đầu vào x = [x1, x2,..., xn] có thể là một nguồn bên ngoài là cảm biến hoặc thiết bị đo lường đưa tới mạng. (a) Mạng truyền thẳng một lớp (b) Mạng hồi tiếp một lớp (c) Mạng truyền thẳng nhiều lớp (d) Mạng nơron hồi quy Hình 1.6 Một số dạng mạng nơron 1.2.2 Mạng nơron truyền thẳng nhiều lớp Mạng nơron nhiều lớp (Hình 1.6.c) có các lớp được phân chia thành 3 loại sau đây: Lớp vào là lớp nơron đầu tiên nhận tín hiệu vào xi (i = 1, 2, ..., n). Mỗi tín hiệu xi được đưa đến tất cả các nơron của lớp đầu vào. 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. Lớp ẩn là lớp nơron sau 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/ra. Lớp ra là lớp nơron tạo ra các tín hiệu ra cuối cùng. 1.2.3 Mạng nơron phản hồi Mạng nơron phản hồi là mạng mà đầu ra của mỗi nơron được quay trở lại nối với đầu vào của các nơron cùng lớp được gọi là mạng Laeral như hình 1.6b 1.2.4 Mạng nơron hồi quy Mạng nơron phản hồi có thể thực hiện đóng vòng được gọi là mạng nơron hồi quy như hình 1.6d. Mạng nơron hồi quy có trọng số liên kết đối xứng như mạng Hopfield, mạng luôn hội tụ về trạng thái ổn định (Hình 1.6.b). 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 mà có trọng số liên kết không đối xứng, thì sẽ gặp phải vấn đề phức tạp nhiều hơn so với mạng truyền thẳng và mạng hồi quy có trọng số liên kết đối xứng. 1.2.5 Mạng Hopfield Mạng Hopfield là mạng phản hồi một lớp, được chỉ ra trong hình 1.6.b. Cấu trúc chi tiết của nó được thể hiện trong hình 1.7. Khi hoạt động với tín hiệu rời rạc, nó được gọi là mạng Hopfield rời rạc, và cấu trúc của nó cũng được gọi là mạng hồi quy. Hình 1.7 Cấu trúc của mạng Hopfield Như mạng Hopfield đã vẽ ở trên, ta thấy nút có một đầu vào bên ngoài xj và một giá trị ngưỡng (j = 1,2,...n). Một điều quan trọng cần nói ở đây là mỗi nút không có đường phản hồi về chính nó. Nút đầu ra thứ j được nối tới mỗi đầu vào của nút khác qua trọng số wij, với ij, (i = 1,2,...,n), hay nói cách khác wii = 0, (với i = 1,2,...,n). Một điều quan trọng nữa là trọng số của mạng Hopfield là đối xứng, tức là wij = wji, (với i,j = 1,2,...,n). Khi đó, luật cập nhật cho mỗi nút mạng là như sau: i = 1,2,...,n (1.11) Luật cập nhật trên được tính toán trong cách thức không đồng bộ. Điều này có nghĩa là, với một thời gian cho trước, chỉ có một nút mạng cập nhật được đầu ra của nó. Sự cập nhật tiếp theo trên một nút sẽ sử dụng chính những đầu ra đã được cập nhật. Nói cách khác, dưới hình thức hoạt động không đồng bộ của mạng, mỗi đầu ra được cập nhật độc lập. Có sự khác biệt giữa luật cập nhật đồng bộ và luật cập nhật không đồng bộ. Với luật cập nhật không đồng bộ thì sẽ chỉ có một trạng thái cân bằng của hệ (với giá trị đầu đã được xác định trước). Trong khi đó, với luật cập nhật đồng bộ thì có thể làm mạng hội tụ ở mỗi điểm cố định hoặc một vòng giới hạn. 1.2.6 Mạng BAM Mạng BAM bao gồm hai lớp và được xem như là trường hợp mở rộng của mạng Hopfield. Ở đây ta chỉ xét mạng rời rạc, vì nó đơn giản và dễ hiểu. Hình 1.8 Cấu trúc của BAM Khi mạng nơron được tích cực với giá trị đầu vào của vector tại đầu vào của một lớp, mạng sẽ có hai mẫu trạng thái ổn định, với mỗi mẫu tại đầu ra của nó là một lớp. Tính động học của mạng thể hiện dưới dạng tác động qua lại giữa hai lớp. Cụ thể hơn, giả sử một vector đầu vào x được cung cấp cho đầu vào của lớp nơron y. Đầu vào được xử lý và truyền tới đầu ra của lớp y như sau: y’ = a(wx) ; ; với i = 1,2,...,n (1.12) Ở đó a(.) là hàm truyền, vector y’ bây giờ lại nuôi trở lại lớp nơron X và tạo nên đầu ra như sau: x’ = a(wTy’); ; với j = 1,2,...,m (1.13) Sau đó x’ nuôi trở lại đầu vào của lớp y và tạo ra hàm y’’ theo phương trình (1.12). Quá trình này cứ tiếp tục, bao gồm các bước như sau: y(1) = a(wx(0)) (truyền thẳng lần thứ nhất) x(2) = a(w(T)y(1)) (truyền ngược lần thứ nhất) y(3) = a(wx(2)) (truyền thẳng lần thứ hai) x(4) = a(w(T)y(3)) (truyền ngược lần thứ hai) (1.14) y(k-1) = a(wx(k-2)) (truyền thẳng lần thứ k/2) x(k) = a(w(T)y(k-1)) (truyền ngược lần thứ k/2) Chú ý rằng trạng thái cập nhật trong phương trình (1.14) là đồng bộ theo phương trình (1.12) và (1.13). Trạng thái cập nhật cũng có thể không đồng bộ theo phương trình (1.12) và (1.13) với các nút i, j được chọn tự do. Người ta đã chỉ ra rằng, hệ thống ổn định cho cả hai chế độ đồng bộ và không đồng bộ. Tuy nhiên, chế độ đồng bộ sẽ làm cho hệ thống hội tụ nhanh hơn nhiều. 1.3 Các luật học Thông thường, mạng nơron được điều chỉnh hoặc được huấn luyện để hướng các đầu vào riêng biệt đến đích ở đầu ra. Cấu trúc huấn luyện mạng được chỉ ra ở hình dưới. Ở đây, hàm trọng số của mạng được điều chỉnh trên cơ sở so sánh đầu ra với đích mong muốn (taget), cho tới khi đầu ra của mạng phù hợp với đích. Những cặp vào/đích (input/taget) được dùng để giám sát cho sự huấn luyện mạng. ANN Trọng số wi So sánh Đích Dữ liệu vào Điều chỉnh Hình 1.9: Cấu trúc huấn luyện mạng nơron Để có được một số cặp vào/ra, ở đó mỗi giá trị vào được gửi đến mạng và giá trị ra tương ứng được thực hiện bằng mạng là sự xem xét và so sánh với giá trị mong muốn. Bình thường, nó sẽ tồn tại một sai số vì giá trị mong muốn không hoàn toàn phù hợp với giá trị thực. Sau mỗi lần chạy, ta có tổng bình phương của tất cả các sai số. Sai số này được sử dụng để xác định các hàm trọng số mới. Sau mỗi lần chạy, hàm trọng số của mạng được sửa đổi với đặc tính tốt hơn tương ứng với đặc tính mong muốn. Từng cặp giá trị vào/ra phải được kiểm tra và trọng số được điều chỉnh một vài lần. Sự thay đổi các hàm trọng số của mạng sẽ được dừng lại, nếu tổng các bình phương sai số nhỏ hơn một giá trị đặt trước, hoặc đã chạy đủ một số lần chạy xác định (trong trường hợp này, mạng có thể không thoả mãn yêu cầu đặt ra do sai lệch còn cao). Có hai kiểu học: Học tham số: 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: trọng tâm là sự biến đổi cấu trúc của các mạng nơron gồm số lượng nút và các loại liên kết. 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 tham số là tìm ra đượ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 điều này thì mạng nơron phải 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. Sau đây là 3 phương pháp học: 1.3.1 Học có giám sát Học có giám sát: là quá trình học có tín hiệu chỉ đạo bên ngoài d (Hình 1.10). Trong học có giám sát, thì tại mỗi thời điểm khi đầu vào được cung cấp tới mạng nơron, phản ứng đầu ra mong muốn d tương ứng của hệ thống được đưa ra. Ở hình (1.10), khi mỗi đầu vào x(k) được đặt vào mạng, đầu ra mong muốn tương ứng d(k) cũng được cung cấp tới mạng. Hiệu giữa đầu ra thực y(k) và đầu ra mong muốn d(k) được đo trong máy phát tín hiệu lỗi. Máy này sẽ tạo ra tín hiệu lỗi cho mạng để hiệu chỉnh các trọng số của mạng, và với các hiệu chỉnh này thì đầu ra thực sẽ tiến sát với đầu ra mong muốn. Hình 1.10: Học có giám sát 1.3.2 Học củng cố Tín hiệu chủ đạo d có thể lấy từ môi trường bên ngoài, nhưng tín hiệu này không được đầy đủ, mà chỉ có một vài bit đại diện có tính chất kiểm tra quá trình tốt hay xấu. Học củng cố cũng là một dạng của học có giám sát, bởi vì mạng vẫn nhận một số tín hiệu từ bên ngoài. Nhưng tín hiệu phản hồi chỉ mang tính chất đánh giá hơn là mạng tính chất chỉ dẫn. Nó cho biết mức độ tốt hay xấu của một đầu ra đặc biệt. Tín hiệu củng cố bên ngoài thường được xử lý bằng máy phát tín hiệu đánh giá để tạo ra nhiều hơn nữa các thông tin tín hiệu đánh giá, sau đó dùng để điều chỉnh các trọng số với mục đích đạt được tín hiệu đánh giá tốt hơn. 1.3.3 Học không có giám sát Hình 1.11: Học không có giám sát Trong phần học không có giám sát, sẽ không có thầy hướng dẫn, tức là không có tín hiệu d cung cấp tới mạch phản hồi. Điều này cho thấy, ta sẽ không biết đầu ra đạt giá trị gì. Với loại này, thì các nơron tự xoay xở với các dữ liệu mẫu mà nó có được, chứ không có “thầy” gợi ý cần luyện theo hướng nào. Mạng phải tự khám phá mẫu, đặc tính, sự tương quan hay loại đầu vào. Trong khi khám phá những đặc tính này, tham số của mạng sẽ bị thay đổi. Quá trình này được gọi là tự tổ chức. Một ví dụ điển hình là quá trình phân loại đối tượng không có thầy, những lớp thích hợp được hình thành bằng cách khám phá sự tương tự và không tương tự trong số các đối tượng. Hình (1.12) mô tả cấu trúc chung của quá trình học của ba phương pháp học đã nêu ở trên. Trong tín hiệu vào xj (j = 1,2,...,m), có thể được lấy từ đầu ra của các nơron khác hoặc có thể được lấy ra từ bên ngoài. Trọng số của nơron thứ i được thay đổi tùy theo tín hiệu ở đầu vào mà nó thu nhận giá trị đầu ra của nó. Dạng tổng quát của luật học trọng số của mạng nơron cho biết số gia của vector wi là tỉ lệ với tín hiệu học r và tín hiệu đầu vào x(t). (t) = (1.15) là một số dương và được gọi là hằng số học dùng để xác định tốc độ học, r là tín hiệu học và phụ thuộc: (1.16) Hình 1.12: Sơ đồ cấu trúc chung của quá trình học Từ hình (1.12) ta thấy, vector 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. Vector 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). (1.17) 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 sau: (1.18) Vấn đề quan trọng trong việc phân biệt luật học cập nhật trọng số có giám sát hay không có giám sát, hoặc học củng cố là tín hiệu học r. Như vậy, đối với tín hiệu học r thì nó làm thế nào để thay đổi hoặc cập nhật trọng số trong mạng nơron. Mạng nơron nhân tạo có các tính chất sau: Là hệ phi tuyến Là hệ xử lý song song Là hệ học và thích nghi: Mạng được luyện từ số liệu quá khứ, có khả năng tự chỉnh đầu vào khi số liệu đầu vào bị mất. Là hệ nhiều biến, nhiều đầu vào, nhiều đầu ra (MISO), rất tiện dùng khi điều khiển đối tượng có nhiều biến số. 1.4 Thuật toán lan truyền ngược Thuật toán lan truyền ngược được ứng dụng để giải các bài toán điều khiển các hệ phi tuyến phức tạp và bất ổn định. Lan truyền ngược là một phương pháp cho phép xác định tập trọng số tốt nhất của mạng để giải một bài toán đã cho. Việc áp dụng phương pháp lan truyền ngược là một quá trình lặp đi lặp lại nhiều lần hai tiến trình chính: lan truyền tiến để thực hiện ánh xạ và lan truyền ngược sai số để cập nhật các trọng số. Các trọng số của mạng là các hệ số của mô hình. Phương pháp giảm gradient được dùng để cập nhật những hệ số này sao cho giảm thiểu được sai số của mô hình. Xét lớp mạng 3 lớp như hình (1.14) Hình 1.14: Mạng 3 lớp lan truyền ngược Thuật toán: Đầu tiên ta cho lan truyền thẳng suốt trong mạng, qua các phần tử nơron và được tiếp tục với các hàm kích hoạt của phần tử nơron. Các mạng được nghiên cứu cùng với thuật toán học lan truyền ngược được gọi là mạng lan truyền ngược. Huấn luyện các cặp vào/ra. {(x(k), d(k))}, k = 1,2,...,p Thuật toán cung cấp một thủ tục cho việc thay đổi các vector trọng số trong mạng, đầu ra của mạng được lan truyền ngược trở lại lớp đầu vào cho đúng các mẫu. Cơ sở cho việc cập nhật các trọng số là phương pháp độ dốc Gradient. Với cặp vào ra (x(k), d(k)), thuật toán lan truyền ngược thực hiện các bước như sau: Đầu tiên, mẫu x(k) được lan truyền từ lớp đầu vào qua các lớp ẩn đi đến lớp đầu ra có kết quả là y(k). Sau đó, sai số giữa y(k) và d(k) được lan truyền ngược trở lại từ lớp đầu ra tới lớp đầu vào để cập nhật trọng số. Hình (1.14) diễn giải thuật toán lan truyền ngược. Kết quả có thể mở rộng sang mạng nơron nhiều lớp. Trên hình (1.14) có m phần tử nơron đầu vào, l phần tử nơron ở lớp ẩn, và n phần tử nơron ở lớp đầu ra. Đường nét liền diễn tả lan truyền thẳng của các tín hiệu, đường nét đứt diên tả lan truyền ngược của các sai số. Đầu tiên huấn luyện vào cặp vào/ra ký hiệu (x,d) để cho đơn giản ta bỏ chỉ số k. Khi một mẫu đầu vào x được đưa vào thì các phần tử trong mạng sẽ được tính như sau: Đầu vào phần tử q của lớp ẩn sẽ được tính theo phương trình: (1.19) Phương trình đầu ra của q sẽ là: ) (1.20) Đầu vào phần tử thứ i của lớp đầu ra sẽ là: (1.21) Phương trình đầu ra của phần tử nowron thứ i sẽ là: (1.22) Các chỉ số trên được tính toán cho sự lan truyền tiến của các tín hiệu đầu vào xuyên suốt qua các lớp mạng nơron. Trước khi ta đề cập đến các tín hiệu sai số của sự lan truyền ngược, ta sẽ định nghĩa một hàm mục tiêu như sau: (1.23) Sau đó, theo phương pháp độ dốc Gradient, các trọng số nối giữa lớp ẩn và lớp đầu ra được cập nhật bởi , và nó được tính theo công thức sau: (1.24) Sử dụng các công thức (1.21-1.23) và thay đổi luật với , ta có: (1.25) Trong đó, là tín hiệu sai số, chỉ số dưới thứ hai là điểm thứ i trong lớp đầu ra. Sai số tín hiệu được định nghĩa bởi: (1.26) Trong đó, neti là đầu vào của phần tử nơron thứ i trong lớp đầu ra và . Bây giờ ta phải tính đầu ra zq của lớp ẩn: Với trọng số nối giữa đầu vào và các lớp ẩn, ta sử dụng thay đổi luật cùng phương pháp độ dốc Gradient, ta cập nhật trọng số để kết nối giữa phần tử thứ j của lớp đầu vào với phần tử thứ q của lớp ẩn. Khi đó: (1.27) Từ công thức (1.23), thì mỗi sai số [di-yi], với i=1,2,...,n là một hàm của zq. Đánh giá thay đổi luật ta có: (1.28) Sử dụng công thức (1.26), ta có thể viết lại công thức (1.28) như sau: (1.29) Ở đây, là sai số tín hiệu của phần tử thứ q của lớp ẩn và được định nghĩa như dưới đây: (1.30) Trong đó, netq là đầu vào phần tử thứ q của lớp ẩn. Tín hiệu sai số của một phần tử trong lớp ẩn khác so với tín hiệu sai số của một phần tử trong lớp đầu ra, như đã được chỉ ra trong công thức (1.30) và (1.26). Do có sự khác nhau này, nên các thủ tục cập nhật các trọng số trên được gọi là luật học delta tổng quát. Chúng ta xem xét công thức (1.30), sai số tín hiệu của phần tử lớp ẩn q có thể được xác định trong các mẫu của các tín hiệu sai số của các phần tử ở lớp ra thứ i (yi) cung ứng. Các hệ số là các trọng số được sử dụng cho lan truyền thẳng, nhưng ở đây chúng truyền các tín hiệu sai số () ngược trở lại, đó chính là các đường nét đứt trong hình (1.13). Điều này đã chứng tỏ được đặc điểm quan trọng của thuật toán lan truyền ngược – luật cập nhật cục bộ, đây chính là tính toán trọng số thay đổi dựa vào sự kết nối, và chúng ta chỉ cần giá trị ở hai đầu của kết nối này. Sự đạo hàm ở trên có thể dễ dàng mở rộng cho mạng có nhiều hơn một lớp ẩn, bằng cách sử dụng chuỗi luật liên tiếp. Trong trường hợp chung, với số lớp tùy ý, thì sự lan truyền ngược được cập nhật luật ở dạng sau: (1.31) Ở đây, (output-i) và (input-j) quy vào hai đầu của sự kết nối từ phần tử thứ j tới phần tử thứ i, xj là đầu vào cuối cùng kích hoạt từ một phần tử lớp ẩn, hoặc từ một đầu vào bên ngoài. Ngoài ra, là tín hiệu học được định nghĩa bởi công thức (1.26) với đầu ra hoặc lớp cuối cùng của các trọng số kết nối, và được định nghĩa bởi công thức (1.30) cho tất cả các lớp khác. Khi hàm sigmoid lưỡng cực được sử dụng làm hàm kích hoạt, đồng thời sử dụng (1.26) và (1.30) ta có hàm y được xác định như sau: Khi đó ta có: (1.32) (1.33) Thuật toán lan truyền ngược Xem xét một mạng với Q lớp lan truyền ngược, q=1,2,...,Q; với qneti và qyi lần lượt là đầu vào và đầu ra của khối trong lớp thứ q. Mạng có m nơron đầu vào, l nơron ở lớp ẩn, và n nơron đầu ra. Với qwij là trọng số nối từ q-1wj đến qyi. Đầu vào: các cặp huấn luyện {x(k), d(k) | k=1,2,...,p}, ở đó giá trị đầu vào của phần tử cuối cùng bằng -1, tức là . Bước 0 (Đặt giá trị ban đầu) Lựa chọn bước tính (Hằng số học) 0<η<1 và Emax (sai số lớn nhất cho phép). Chọn các trọng số ban đầu nối từ phần tử thứ j của lớp (q – 1) đến phần tử thứ i của lớp q là qwij có giá trị nhỏ và ngẫu nhiên. Cho sai số E = 0 và k = 1. Bước 1 (Vòng lặp huấn luyện) Áp dụng mẫu vào thứ k, cho lớp đầu vào q=1. Khi đó ta có: qyi = 1yi = xi(k) cho tất cả các i = 1,2,3,…,m. (1.34) Bước 2 (Lan truyền thẳng) Lan truyền tín hiệu thẳng xuyên suốt mạng sử dụng công thức (1.35) cho mỗi i và q cho tới khi các đầu ra của lớp đầu ra Qyi được thực hiện. (1.35) Bước 3 (Đo lường sai số đầu ra) Tính toán giá trị sai lệch và tín hiệu sai lệch cho lớp đầu ra như sau: ; (1.36) (1.37) Trong đó: là tín hiệu sai lệch của nơron thứ i cho lớp ra Q; là đạo hàm của hàm truyền a(.) theo tổng trọng số của phần tử i của lớp đầu ra là . Bước 4 (lan truyền ngược sai số) Các sai số lan truyền ngược với mục đích để cập nhật các trọng số và tính toán các tín hiệu sai lệch cho các lớp xử lý: ; (1.38) ; với q=Q,Q-1,...,2 (1.39) Trong đó: là sai lệch tại thời điểm tính của giá trị trọng số liên kết cập nhật mới và cũ, liên kết từ phần tử thứ j của lớp q-1 đến phần tử i của lớp q. là giá trị trọng số liên kết cập nhật mới từ phần tử thứ j của lớp (q-1) đến phần tử i của lớp q. là giá trị trọng số liên kết cũ từ phần tử thứ j của lớp (q-1) đến phần tử i của lớp q. là tín hiệu ra của phần tử j của lớp (q-1). Bước 5 (Sau mỗi vòng lặp) Kiểm tra xem đã lặp hết các giá trị mẫu huấn luyện chưa, nếu chưa quay vòng hết (tức là k<p) tăng k=k+1, và nhảy tới bước 1, ngược lại (tức k=p) thì chuyển sang bước 6. Bước 6 (Kiểm tra tổng sai số) Kiểm tra sự khác nhau giữa tổng sai số và sai số cho phép: Nếu tổng sai số nhỏ hơn sai số cho phép (tức là E<Emax) thì kết thúc quá trình huấn luyện, và ghi lại các giá trị trọng số cuối cùng. Trái lại, thì lại gán E=0, k=1 và bắt đầu một quá trình huấn luyện mới bằng cách nhảy tới bước 1. 1.5 Kết luận Trong chương này, chúng ta tìm hiểu một mạng nơron và thuật toán lan truyền ngược. Quá trình học của mạng truyền thẳng chỉ ra một phương thức để mạng nơron nhận dạng một mẫu, nó giống như quá trình học của lan truyền ngược, đó là mô tả một quá trình mạng nơron sẽ được huấn luyện. Một mạng nơron truyền thẳng là một mạng mà ở đó các nơron chỉ được kết nối tới một lớp tiếp theo. Không có kết nối giữa các nơron với các lớp trước hoặc với chính nơron đó. Thêm vào đó, các nơron sẽ không kết nối tới các nơron quá xa ở lớp tiếp theo. Một mẫu được xử lý bởi sự truyền thẳng, độ lệch và các trọng số kết nối sẽ được áp dụng. Các mạng nơron được huấn luyện bằng cách sử dụng thuật toán lan truyền ngược. Thuật toán lan truyền ngược là một dạng huấn luyện có giám sát. Mạng nơron được đưa vào dữ liệu huấn luyện cho cho ra kết quả, các kết quả này được so sánh với các kết quả được mong đợi. Sự khác nhau giữa các kết quả thực tế và các kết quả mong đợi sẽ có một mức sai số nào đó. Để giảm thiểu sai số này, người ta tiến hành sử dụng thuật toán lan truyền ngược để điều chỉnh các trọng số và độ lệch của mạng. Đây là cách mà sai số được giảm đáng kể. Trong chương tiếp theo, chúng ta sẽ tìm hiều về mạng nơron Kohonen. Sự khác nhau quan trọng nhất giữa mạng nơron Kohonen và mạng nơron lan truyền ngược là phương thức huấn luyện. Phương thức lan truyền ngược sử dụng phương thức huấn luyện có giám sát. Còn mạng nơron Kohonen sử dụng phương thức huấn luyện không giám sát. Chương 2. Tìm hiểu mạng nơron Kohonen 2.1 Giới thiệu Trong các kiểu khác nhau của mạng nơron, mạng nơron Kohonen giống với mạng nơron sinh học hơn cả về cấu tạo lẫn cơ chế học. Mạng nơron nhân tạo này lần đầu tiên được giới thiệu bởi Kohonen vào năm 1982, nó được biết đến như là ánh xạ đặc trưng tự tổ chức (SOM). Ánh xạ tự tổ chức của Kohonen còn được biết đến là một trong những mô hình khá đơn giản của mạng nơron, và người ta thường gọi đó là mạng nơron Kohonen. Mạng nơron Kohonen (hay nơron tự tổ chức) mô hình hóa cách hoạt động bộ não của con người, mặc dù nó khá đơn giản. Chúng ta có thể nhận được một số ý tưởng cách bộ não lưu trữ hình ảnh và cách nó nhận dạng các hình ảnh. Cách xử lý thông tin các mạng nơron khác thường chỉ quan tâm đến giá trị và dấu hiệu của thông tin đầu vào, chưa quan tâm khai thác các mối liên hệ có tính chất cấu trúc trong lân cận của các vùng dữ liệu mẫu, hay toàn thể không gian. Nhưng trong mạng nơron Kohonen đã quan tâm đến các yếu tố này. Tự tổ chức trong mạng nơron là một trong những chủ đề cuốn hút trong mạng nơron. Một mạng nơron như vậy có thể được luyện để tìm ra các quy luật và các tương quan, các giá trị nhập vào và dự đoán các kết quả tiếp theo. Các nơron của mạng thông qua quá trình luyện cạnh tranh để nhận ra một nhóm các đối tượng đầu vào tương đương nhau. Mục đích chính của việc luyện trong mạng nơron Kohonen là nhận dạng một nhóm các vector đầu vào cùng loại. Trong phần tiếp theo, chúng ta có thể chỉ ra hình ảnh được lưu trữ và nhận dạng với mạng nơron Kohonen. Việc thi hành mạng nơron Kohonen có thể được thay thế bởi một thuật toán tương ứng mà dễ dàng thi hành, và luôn luôn được sử dụng trong các ứng dụng của mạng nơron Kohonen. Chúng ta gọi thuật toán đó là thuật toán mạng nơron tự tổ chức (Kohonen, 1988) hay ánh xạ tự tổ chức SOM. Ý tưởng đáng chú ý của thuật toán này là ánh xạ các đặc trưng topo tự tổ chức nhằm bảo toàn trật tự sắp xếp các mẫu trong không gian biểu diễn nhiều chiều sang một không gian mới với các mảng nơron có số chiều nhỏ hơn, thường là hai chiều. Đây là một phép chiếu phi tuyến đem lại một “ánh xạ đặc trưng” hai chiều, nó có thể được sử dụng trong việc phát hiện và phân tích những đặc trưng trong không gian đầu vào. Ta hiểu điều này như là bảo toàn cấu trúc các đặc trưng. Trong mạng nơron Kohonen, các vector tín hiệu đầu vào gần nhau sẽ được ánh xạ sang các nơron lân cận trong mạng. Kỹ thuật SOM đã được áp dụng thành công trong một số lĩnh vực như nhận dạng, phân cụm dữ liệu, dự đoán chuỗi và khai phá dữ liệu,... Mẫu được nhận dạng có thể là ảnh, âm thanh hoặc văn bản,... Có thể xem SOM là một lớp điển hình, nhưng rất đơn giản của các mạng nơron Kohonen. 2.2 Mạng nơron Kohonen Mạng luyện không không có thầy hướng dẫn, là một kiểu luyện mà ở đó các nơron tự xoay xở với các dữ liệu mẫu mà nó có được chứ không có “Ông thầy” gợi ý cần luyện theo hướng nào. Tự mình khám phá những quan hệ đang được quan tâm, ví dụ về các dạng ( patterns), các đặc trưng (features ) từ dữ liệu vào (input data) sau đó chuyển thành cái ra (outputs). Như vậy thực chất : đó là các mạng tự tổ chức (hay mạng nơron Kohonen) . Định nghĩa: Mạng noron Kohonen là mạng có khả năng sử dụng những kinh nghiệm của quá khứ để thích ứng với những biến đổi của môi trường (không dự báo trước). Loại mạng này thuộc nhóm hệ học, thích nghi không cần có tín hiệu chỉ đạo từ bên ngoài. Trong phần này chúng ta sẽ trình bày một số quy trình luyện tham số của luyện không có thày như sau: Mô hình Mạng có n nơron PEi , i=1,2,..., n. Cái ra của chúng là , i=1,...,n. Có m tín hiệu vào {x1, x2,..., xm},wij là trọng số liên kết từ xj với PEi . Gọi s(x), s(y) là hàm chuyển tín hiệu, giả thiết đó là hàm đơn điệu không giảm liên tục như dạng hàm Sigmoid. Phương thức biến đổi trọng số được gọi là luật luyện Hebb, quy tắc luyện đơn giản theo dạng Hebb cho bởi phương trình : (2.40) Bây giờ ta xét một số trường hợp riêng: - Quy tắc luyện cạnh tranh (Competitive Learning Rule – Grossberg 1969, Rumelhart 1986) (2.41) ở đây (2.42) - Nếu dùng ta thu được : Quy tắc luyện cạnh tranh tuyến tính (the Linear competitive learning rule) (2.43) Trường hợp riêng quan trọng là quy tắc “ thắng lấy tất cả - the winner-take-all learning rule “ của Kohonen , giải thích để hiểu qua bài toán phân cụm tập mẫu thành n cụm , với n đã cho. Kí hiệu , α là hệ số học. Tại mỗi vòng lặp k, quy tắc luyện gồm 2 bước : 1/ Bước tìm cái khớp nhất (matching) – tìm nơron tạm gọi là nơron thắng (theo nghĩa gần mẫu nhất), sử dụng công thức sau: , (2.44) (Phương pháp tính tích vô hướng). 2/ Tính toán sai số và điều chỉnh trọng số Ký hiệu ej là sai số ở cột thứ j, wij là biểu diễn cho cột thứ j của ma trận trọng số w, sai số này được tính theo công thức sau: ej = ||x-wij|| (2.45) Nếu tổng sai số chưa nằm dưới mức cho phép, ta điều chỉnh trọng số theo công thức: với k =1,…,m (2.46) Khi một mẫu được đưa tới một mạng Kohonen, những nơron được chọn là nơron thắng (winner) (nơron thích hợp nhất theo nghĩa mà ta đặt ra). Nơron thắng này là dữ liệu đầu ra từ mạng Kohonen. Thông thường, các nơron thắng này tương ứng với các nhóm trong dữ liệu đưa vào mạng Kohonen. Mạng Kohonen được huấn luyện trong một chế độ không có giám sát. Sử dụng mạng Kohonen này, dữ liệu có thể được phân loại thành từng cụm. Chúng ta sẽ xem xét mạng Kohonen qua quá trình huấn luyện. 2.2.1 Mạng nơron Kohonen nhận dạng Ta sẽ xem việc huấn luyện mạng nơron Kohonen như thế nào để nhận dạng đúng các mẫu mà ta mong muốn. Chúng ta bắt đầu bằng cách xem xét cấu trúc của mạng nơron Kohonen. 2.2.2 Cấu trúc của mạng nơron Kohonen Mạng nơron Kohonen chỉ bao gồm một lớp dữ liệu đầu vào và một lớp dữ liệu đầu ra của các nơron và nó không chứa lớp ẩn. Lớp dữ liệu đầu vào đối với mạng nơron Kohonen là các nơron đầu vào. Các nơron đầu vào này tạo thành mẫu dữ liệu đầu vào của mạng. Đối với mạng nơron Kohonen, ta nên chọn dữ liệu đầu vào chuẩn hóa trong khoảng giữa -1 và 1. Khi thực thi mẫu dữ liệu đầu vào, mạng sẽ tạo ra các nơron đầu ra. Lớp đầu ra của mạng nơron Kohonen rất khác với lớp đầu ra của mạng nơron truyền thẳng. Đối với mạng truyền thẳng, nếu chúng ta có một mạng nơron với 5 nơron đầu ra, chúng sẽ có thể cho kết quả bao gồm 5 giá trị. Còn trong mạng nơron Kohonen chỉ có một nơron đầu ra cho ra một giá trị. Giá trị duy nhất này có thể là đúng hoặc sai. Dữ liệu đầu ra từ mạng nơron Kohonen thường là các chỉ số của nơron (Ví dụ nơron số 5,…). Cấu trúc đặc trưng của mạng nơron Kohonen được chỉ ra trong hình 2.1. Hình 2.1: Một dạng mạng nơron Kohonen Bây giờ, chúng ta xem xét mạng nơron Kohonen xử lý thông tin như thế nào. Để kiểm tra quá trình này, chúng ta xem xét một ví dụ sau: Ví dụ Chúng ta sẽ xém xét một mạng nơron Kohonen đơn giản. Mạng này sẽ chỉ có 2 nơron đầu vào, và 2 nơron đầu ra. Dữ liệu đầu vào được cho là 2 nơron được chỉ ra trong bảng 2.1 và các trọng số kết nối giữa các nơron trong bảng 2.2. Bảng 2.1 Bảng 2.2 Sử dụng các giá trị này, chúng ta xem xét nơron có thể thắng và cung cấp dữ liệu đầu ra. Chúng ta bắt đầu bằng cách chuẩn hóa dữ liệu đầu vào. 2.2.3 Chuẩn hóa dữ liệu đầu vào Mạng nơron Kohonen đòi hỏi dữ liệu đầu vào phải được chuẩn hóa. Yêu cầu của mạng nơron Kohonen là dữ liệu đầu vào của nó phải được phân hoạch trên miền xác định giữa -1 và 1. Mỗi dữ liệu đầu vào nên sử dụng hoàn toàn miền xác định, vì nếu các nơron đầu vào chỉ sử dụng các số giữa 0 và 1, thì thành quả của mạng nơron sẽ không cao (bị tổn thất). Để chuẩn hóa dữ liệu đầu vào, chúng ta sẽ tính toán độ dài vector (vector length) của các dữ liệu đầu vào, hoặc vector đầu vào. Trong trường hợp này độ dài vector sẽ là: (0.5 * 0.5) + (0.75 * 0.75) = 0.8125. Vậy trường hợp trên sẽ có độ dài vector là 0.8125. Sử dụng độ dài này, chúng ta có thể xác định được hệ số chuẩn hóa. Hệ số chuẩn hóa là số nghịch đảo của căn bậc hai độ dài vector đầu vào. Trong trường hợp trên thì hệ số chuẩn hóa là: Tính toán giá trị trên cho kết quả hệ số chuẩn hóa là 1.1094. Hệ số chuẩn hóa này sẽ sử dụng cho bước tiếp theo, đó là tính toán đầu ra cho nơron. 2.2.4 Tính toán dữ liệu đầu ra của nơron Để tính toán dữ liệu đầu ra, vector dữ liệu đầu vào và các trọng số kế nối nơron đều phải được xem xét. Thứ nhất, tính tích vô hướng của hai vector vector đầu vào và vector các trọng số liên kết. Để tính toán tích vô hướng giữa hai vector này, ta thực hiện như sau. Ta bắt đầu tính toán cho nơron thức nhất. Thuật toán Kohonen cho việc lấy tích vô hướng hai vector của vector đầu vào và vector trọng số được tính như sau: Phép tính toán trên "dot product" cho kết quả là 0.395. Tính toán này sẽ được thực hiện cho nơron đầu ra đầu tiên, và nó sẽ được thực hiện như vậy đối với mỗi nơron đầu ra tiếp theo. Bây giờ, dữ liệu đầu ra này phải được chuẩn hóa bằng nhân kết quả của "dot product" trên (0.395) với hệ số chuẩn hóa là 1.1094, và cho kết quả là 0.438213. Dữ liệu đầu ra đã được tính toán và chuẩn hóa, nó được ánh xạ tới một số lưỡng cực?. 2.2.5 Ánh xạ lưỡng cực Khi tạo bản đồ lưỡng cực, số 0 sẽ là -1, và các số còn lại là 1. Tức là tạo bản đồ lưỡng cực từ [-1,1] tới [0,1]. Ví dụ, để biến đổi chuỗi 0101 về số lưỡng cực ta làm như sau: Do dữ liệu đầu vào được chuẩn hóa trong khoảng [-1,1] nên ta phải thực hiện chuẩn hóa tương tự đối với nơron đầu ra. Để lập được bản đồ, ta cộng thêm 1 vào kết quả rồi lấy ½ kết quả đó. Theo kết quả trên có kết quả đầu ra là 0.438213, và kết quả trong dữ liệu đầu ra cuối cùng là : (0.438213+1)/2 = 0.7191065. Giá trị 0.7191065 là dữ liệu đầu ra của nơron đầu tiên. Giá trị này sẽ được so sánh với các dữ liệu đầu ra của nơron khác. Bằng cách so sánh các giá trị này, chúng ta có thể xác định được nơron “ thắng”. 2.2.6 Chọn nơron thắng Nếu chúng ta muốn xác định được một nơron đầu ra thắng, chúng ta phải tính toán giá trị cho nơron đầu ra thứ hai. Bây giờ, chúng ta sẽ xem nhanh quá trình tính toán cho nơron đầu ra thứ hai. Nơron dữ liệu đầu ra thứ hai sẽ sử dụng hệ số chuẩn hóa giống như đã sử dụng để tính toán cho nơron đầu ra đầu tiên. Theo trên ta có hệ số chuẩn hóa là 1.1094. Chúng ta áp dụng phương pháp tính tích vô hướng cho trọng số của nơron đầu ra thứ hai và vector dữ liệu đầu vào, chúng ta sẽ nhận được một giá trị là : |0.5 0.75|*|0.3 0.4| = (0.5*0.75)+(0.3*0.4) = 0.45. Giá trị này được nhân với hệ số chuẩn hóa 1.1094, chúng ta nhận được kết quả là 0.49923. Bây giờ chúng ta đã có giá trị đầu ra cho mỗi nơron. Nơron đầu tiên có giá trị đầu ra là 0.7191065 và nơron thứ hai có một giá trị đầu ra là 0.49923. Để chọn nơron thắng, chúng ta chọn giá trị của dữ liệu đầu ra là lớn nhất. Trong trường hợp này thì nơron thắng là nơron đầu ra đầu tiên với giá trị đầu ra là 0.7191065. Như vậy ta đã xác định được giá trị đầu ra của mạng nơron Kohonen. Ta thấy các trọng số giữa nơron đầu vào và nơron đầu ra xác định dữ liệu đầu ra. Trong phần sau, chúng ta sẽ điều chỉnh các trọng số này để nó cung cấp dữ liệu đầu ra phù hợp với cái mà ta mong muốn. 2.2.7 Quá trình học của mạng Kohonen Toàn bộ quá trình huấn luyện cho một mạng nơron Kohonen cần phải lặp lại qua vài công đoạn. Nếu sai số đã tính toán của mạng nơron Kohonen ở mức thấp hơn mức có thể chấp nhận được thì sẽ hoàn tất quá trình huấn luyện. Để tính toán tỉ lệ sai số cho mạng nơron Kohonen, ta sẽ điều chỉnh các trọng số cho mỗi công đoạn. Quá trình huấn luyện cho mạng nơron Kohonen là luyện cạnh tranh nên mỗi tập huấn luyện sẽ có một nơron thắng. Nơron thắng này sẽ có trọng số được điều chỉnh sao cho ngay lập tức nó sẽ tác động trở lại mạnh mẽ hơn trong dữ liệu đầu vào ở lần tiếp theo. Sự khác nhau giữa các nơron thắng sẽ dẫn tới sự khác nhau giữa các mẫu đầu vào tiếp theo. Chúng ta xem xét toàn bộ quá trình liên quan đến việc huấn luyện mạng nơron Kohonen. Các bước được tóm tắt trong hình 2.2. Từ hình 2.2 ta thấy, mạng nơron Kohonen được huấn luyện bởi các công đoạn tuần hoàn cho đến khi một trong hai vấn đề sau xảy ra: Nếu tính toán các sai số ở mức thấp hơn mức có thể chấp nhận được thì nhiệm vụ của chu kỳ sẽ hoàn thành quá trình huấn luyện. Nếu tất cả các tỉ lệ sai số chỉ thay đổi bởi đa số cận biên, thì chu kỳ riêng lẻ này sẽ bị loại bỏm và các trọng số lại được khởi tạo lại với các giá trị ngẫu nhiên, đông thời một chu kỳ huấn luyện mới lại bắt đầu. Chu kỳ huấn luyện này sẽ tiếp tục chu kỳ huấn luyện trước và nó sẽ phân tích các công đoạn để đưa ra kết quả; hoặc là chu kỳ bị loại bỏ hoặc tạo ra một tập các trọng số đó mà có mức sai số có thể chấp nhận được. Dừng Bắt đầu Khởi tạo ngẫu nhiên ma trận trọng số Tính toán sai số Kiểm tra sai số xem có ở mức chấp nhận được không? Thực hiện huấn luyện, điều chỉnh trọng số dựa vào nơron thắng Tính toán lại tỉ lệ sai số, ghi lại những giá trị đã được cải thiện Cải thiện tỉ lệ sai số là tầm thường? Ma trận trọng số này đã tốt nhất chưa? Nếu có ma trận trọng số tốt hơn của ma trận trọng số tốt nhất? Gán ma trận trọng số này thành ma trận trọng số tốt nhất Đã quá số chu kỳ xác định? Yes No Yes Yes No No No No Yes Yes Hình 2.2: Sơ đồ khối biểu diễn huấn luyện mạng nơron Kohonen. 2.2.8 Tỉ lệ (tốc độ) học Tham số học là một hằng và nó là một số nhỏ hơn 1, ở trên ký hiệu là α. Thông thường, ta đặt cho tham số học một giá trị từ 0.4 đến 0.5, nếu tỉ lệ học lớn thì quá trình huấn luyện nhanh hơn. Tuy nhiên, việc đặt cho tỉ lệ học một giá trị quá lớn có thể sẽ làm cho mạng không bao giờ hội tụ. Điều này làm thay đổi các vector trọng số sẽ quá lớn gây ảnh hưởng tới việc phân loại các mẫu nên ta chỉ cần chọn tỉ lệ học vừa đủ, và sử dụng nó để điều chỉnh các trọng số của các nơron. Trong phần tiếp theo, chúng ta sẽ xem các trọng số này được điều chỉnh sử dụng tham số học như thế nào. 2.2.9 Điều chỉnh các trọng số (cập nhật trọng số) Một công đoạn xuất hiện khi dữ liệu huấn luyện được đưa vào mạng nơron Kohonen, và các trọng số được điều chỉnh dựa trên các kết quả của dữ liệu huấn luyện. Sự điều chỉnh các trọng số sẽ làm cho mạng có thuận lợi hơn ngay sau khi nó được đưa trở lại mạng. Ma trận trọng số cuối cùng được sử dụng sẽ là ma trận tốt nhất được xác định từ mỗi chu kỳ. Bây giờ, chúng ta sẽ xem xét các trọng số này được thay đổi như thế nào. Phương pháp cho việc tính toán thay đổi các trọng số sử dụng phương trình sau: (2.48) Biến x là vector huấn luyện được đưa vào mạng. Biến wt là trọng số của nơron thắng, và biến wt+1 là trọng số mới, α là hệ số học. 2.2.10 Tính toán sai số Khi mạng huấn luyện không giám sát bao giờ cũng có sai số, đó là sự khác nhau giữa kết quả mong đợi và kết quả thực tế của mạng nơron. Sai số mà chúng ta tính toán là những cái mà không đúng giữa kết quả mong đợi và kết quả thực tế. ej = ||x-wj|| Mục đích của mạng nơron Kohonen là phân loại dữ liệu đầu vào vào trong các tập khác nhau, cho nên sai số của mạng nơron Kohonen phải được đo lường. Sai số này sẽ được tính toán trong quá trình huấn luyện mạng. 2.3. Thực thi mạng nơron Kohonen Có vài lớp có thể được sử dụng cùng nhau để tạo ra một mạng nơron Kohonen. Chương sau ta sẽ chỉ ra cách để xây dựng một ứng dụng dựa trên mạng nơron Kohonen, đó là ứng dụng nhận dạng ký tự quang (cụ thể là nhận dạng chữ viết tay). Các lớp được mô tả như sau: · KohonenNetwork – Thực thi các phương thức thuộc về mạng nơron Kohonen. Đây là nơi mà mạng nơron Kohonen được huấn luyện và lấy các mẫu. · Network – Chứa đựng các phương pháp không thuộc về mạng nơron Kohonen. Các lớp này chứa các phương pháp để tính toán tích vô hướng, và chiều dài vector. · NeuralReportable – Một giao diện đơn giản cho phép mạng nơron Kohonen trả về thông tin tiến bộ sau khi mạng nơron được huấn luyện. · TrainingSet – Một tập huấn luyện chứa đối tượng, đó là có thể chứa các mảng của các lần huấn luyện riêng lẻ. Tập huấn luyện có thể chứa cả các phần tử dữ liệu đầu vào và dữ liệu đầu ra. Các lớp này hoạt động cùng nhau để cung cấp các chức năng cho mạng Kohonen. Trước tiên, ta xem việc thực thi mạng nơron truyền thẳng xem chúng hoạt động như thế nào. 2.3.1 Thực thi mạng nơron truyền thẳng Khi thực thi mạng nơron truyền thẳng, dữ liệu được truyền đến đối tượng “synapse”. Phương thức run chạy một vòng lặp luôn luôn đợi mẫu dữ liệu mới và sau đó chuyển chúng thành dữ liệu đầu ra, danh sách 2.1 chỉ ra phương thức run hoạt động để nhớ mẫu của lớp Layer. Danh sách 2.1: Phương thức Layer.run public void run() { while ( running ) { int dimI = getRows(); int dimO = getDimension(); // Nhớ mẫu inps = new double[dimI]; this.fireFwdGet(); if ( m_pattern != null ) { forward(inps); m_pattern.setArray(outs); fireFwdPut(m_pattern); } if ( step != -1 ) // Kiểm tra nếu bước tiếp theo đang được học m_learning = monitor.isLearningCicle(step); else // Dừng mạng running = false; //Nếu ((m_learning) && (m_batch != 1)) if ( (m_learning) && (running) ) { // Học gradientInps = new double[dimO]; fireRevGet(); backward(gradientInps); m_pattern = new Pattern(gradientOuts); m_pattern.setCount(step); fireRevPut(m_pattern); } } // Kết thúc while (running = false) myThread = null; } Phương thức fireFwdPut được gọi để truyền mẫu vào trong “synapse” đầu ra. forward(inps); m_pattern.setArray(outs); fireFwdPut(m_pattern); Khi các phương thức “forward” và “fireFwdPut” được gọi, có ba biến liên quan đó là: · Các trọng số kết nối · Độ lệch trọng số · Hàm ngưỡng Phương thức đầu tiên được gọi là phương thức fireFwdGet. Công việc chính của phương thức này là nhận mẫu từ “synapse” đầu vào, và đợi cho đến khi không có mẫu nào được đưa vào. Lớp dữ liệu đầu vào chỉ nhận các giá trị {0,1} của mẫu để nhớ. Sau đó, lớp đầu vào sẽ áp dụng hàm ngưỡng, đưa chúng đến lớp tiếp theo. Chúng ta sử dụng kiểu hàm sigmoid trong lớp dữ liệu đầu vào, thực thi hàm sigmoid qua lớp SigmoidLayer. Danh sách 2.2 chỉ ra phương thức SigmoidLayer.forward(). Danh sách 2.2: Phương thức SigmoidLayer.forward public void forward(double[] pattern) { int x; double in; int n = getRows(); try { for ( x = 0; x < n; ++x ) { in = pattern[x] + bias.value[x][0]; outs[x] = 1 / (1 + Math.exp(-in)); } } catch ( Exception aioobe ) { aioobe.printStackTrace(); } } Từ danh sách 2.2 ta thấy, phương thức SigmoidLayer.layer() áp dụng hàm sigmoid cho mỗi nơron trong lớp này. Hàm sigmoid đã được đề cập ở trên. Phương thức Layer.run đã xử lý dữ liệu đầu vào bằng cách sử dụng hàm ngưỡng sigmoid, lớp này sẵn sàng đưa mẫu tới lớp kế tiếp. Khi mẫu được đưa vào lớp tiếp theo, thì các trọng số thích hợp được cập nhật. Bây giờ, phương thức Layer.run áp dụng hàm ngưỡng cho mỗi giá trị nơron, lớp phải truyền mẫu lên trên synapse. Synapse này áp các trọng số kết nối và gửi mẫu tới lớp tiếp theo, chúng được thể hiện ở phương thức fireFwdPut(). Phương thức fireFwdPut được chỉ ra trong danh sách 2.3. Danh sách 2.3: Phương thức Layer.fireFwdPut protected void fireFwdPut(Pattern pattern) { if ( aOutputPatternListener == null ) { return; }; int currentSize = aOutputPatternListener.size(); OutputPatternListener tempListener = null; for ( int index = 0; index < currentSize; index++ ){ tempListener = (OutputPatternListener)aOutputPatternListener.elementAt(index); if ( tempListener != null ) { tempListener.fwdPut((Pattern)pattern.clone()); }; }; } Phương thức Layer.fireFwdPut chịu hai trách nhiệm. Thứ nhất, nó áp các trọng số kết nối giữa các nơron ở lớp hiện thời cho các nơron ở lớp tiếp theo. Thứ hai, nó chuyển mẫu này đến synapse. Phương thức này chuyển mẫu đến synapse bằng cách gọi phương thức Synapse.fireFwdPut. Phương thức Synapse.fireFwdPut được chỉ ra trong danh sách 2.4. Danh sách 2.4: Phương thức Synapse.fireFwdPut public synchronized void fwdPut(Pattern pattern) { if ( isEnabled() ) { count = pattern.getCount(); while ( items > 0 ) { try { wait(); } catch ( InterruptedException e ) { //e.printStackTrace(); return; } } m_pattern = pattern; inps = (double[])pattern.getArray(); forward(inps); ++items; notifyAll(); } } Khi vòng lặp chờ hoàn thành synapse, nó sẽ xử lý dữ liệu đầu vào, và sau đó truyền mẫu tới lớp tiếp theo. Việc xử lý chỉ là synapse sẽ thực hiện trên mẫu để áp độ lệch. Theo các quy trình của phương thức Synapse.fwdPut, nó sẽ sao chép mẫu mà nó đã truyền vào biến lớp m_pattern. m_pattern = pattern; Mảng mẫu sau đó được sao chép tới một mảng hai giá trị để xử lý. inps = (double[])pattern.getArray(); Sau đó, mảng mẫu hai giá trị được truyền vào phương thức forward. Trong tất cả các lớp, phương thức forward luôn luôn được sử dụng để áp độ lệch. forward(inps); Khi độ lệch đã được áp, mẫu được sẵn sàng được xử lý ở lớp tiếp theo. Có nhiều loại synapse được tạo để có thể xử lý độ lệch theo các cách khác nhau. Bây giờ, chúng ta sẽ xem xét phương thức FullSynapse.forward áp dụng độ lệch được chỉ ra trong danh sánh 2.5. Danh sách 2.5: Phương thức FullSynapse.forward public void forward(double[] pattern) { int x; double in; int n = getRows(); try { for ( x = 0; x < n; ++x ) { in = pattern[x] + bias.value[x][0]; outs[x] = 1 / (1 + Math.exp(-in)); } } catch ( Exception aioobe ) { aioobe.printStackTrace(); } } Ta có thể thấy độ lệch được áp cho mỗi phần tử của mẫu, và mẫu sẽ được thêm vào một độ lệch. Giá trị nghịch đảo của tổng này sẽ được trả về phương thức calling để được truyền tới lớp tiếp theo. Các quá trình này sẽ được lặp lại cho mỗi lớp của mạng nơron. Sau đây ta xem chúng sẽ thực thi lan truyền ngược trở lại như thế nào. 2.3.2 Thực thi lan truyền ngược Khi mạng nơron huấn luyện, nó được đưa vào với các tập huấn luyện. Sau đó, kết quả thu được từ mạng nơron sẽ được so sánh với kết quả trước đó. Phần được thêm vào để làm cho dữ liệu đầu ra hiện tại phù hợp với dữ liệu đầu ra trước đó được gọi là sai số. Có vài cách để giảm hàm sai số này về mức tối thiểu . Phổ biến nhất là sử dụng phương thức giảm theo gradient. Thuật toán để ước lượng đạo hàm của hàm sai số được biết đến như là thuật toán lan truyền ngược, đó là nó lan truyền các sai số này ngược lại trong mạng. Trong thực tế, phương thức lan truyền ngược hoạt động bằng cách; đầu tiên nó chạy một chương trình nhận dạng đối với dữ liệu huấn luyện để thu được một ma trận trọng số, và sau đó điều chỉnh các trọng số và độ lệch để cải thiện sai số. Ở trên ta thấy rằng phương thức Layer.run được chỉ ra trong danh dách 5.1, chịu trách nhiệm cung cấp dữ liệu huấn luyện cho mạng nơron. Nó sẽ được chạy đối với từng tập huấn luyện, và dữ liệu huấn luyện sẽ được chạy lặp đi lặp lại cho đến khi sai số của mạng nơron nằm trong mức cho phép. Phương thức Synapse.revPut sẽ gọi phương thức Synapse.backward để điều chỉnh các độ lệch cần thiết của nơron bất kỳ. Hoạt động của phương thức Synapse.backward được chỉ ra trong danh sách 2.6. Danh sách 2.6: Phương thức Synapse.backward protected void backward(double[] pattern) { int x; int y; double s, dw; int m_rows = getInputDimension(); int m_cols = getOutputDimension(); // Điều chỉnh các trọng số for ( x=0; x < m_rows; ++x ) { double absv; s = 0; for ( y=0; y < m_cols; ++y ) { s += pattern[y] * array.value[x][y]; if ( getMomentum() < 0 ) { if ( pattern[y] < 0 ) absv = -pattern[y]; else absv = pattern[y]; dw = getLearningRate() * pattern[y] * inps[x] + absv * array.delta[x][y]; } else dw = getLearningRate() * pattern[y] * inps[x] + getMomentum() * array.delta[x][y]; array.value[x][y] += dw; array.delta[x][y] = dw; } bouts[x] = s; } } 2.3.3 Các tập huấn luyện Để huấn luyện mạng nơron Kohonen thì các tập huấn luyện phải được cung cấp. Dữ liệu huấn luyện này sẽ được lưu trữ trong lớp TrainingSet, lớp này được thiết kế để nó là một lớp chứa đựng dữ liệu. Lớp TrainingSet quản lý hai biến mảng độ dài của đầu vào và đầu ra. Trong lớp TrainingSet, nó lưu trữ các biến và cách sử dụng chúng được tóm tắt như sau: • inputCount - Số lượng các phần tử đầu vào sẽ có cho từng mẫu huấn luyện. • outputCount - Số lượng các phần tử đầu ra sẽ có cho từng mẫu huấn luyện. • input[][] - Các mẫu đầu vào huấn luyện. • output[][] - Các mẫu đầu ra huấn luyện. • trainingSetCount - Số lượng mẫu huấn luyện. Do quá trình hoạt động của mạng nơron Kohonen là không có giám sát, chỉ có các phần tử dữ liệu đầu vào được cung cấp, nên đối tượng TrainingSet được xây dựng để huấn luyện cho ra dữ liệu đầu ra, nó sẽ được chuyển tới đối tượng KohonenNetwork để huấn luyện trong lần tiếp theo. 2.3.4 Báo cáo tiến trình Để chuẩn bị các tập huấn luyện và thu nhận tình trạng thông tin từ quá trình huấn luyện, ta phải hiểu rõ các lớp mạng Kohonen hoạt động như thế nào. Chúng ta sẽ bắt đầu bằng việc xem xét lớp mạng cơ sở. 2.3.4.1 Lớp mạng cơ sở Bây giờ chúng ta sẽ xem xét lớp Network. Lớp này là lớp cơ sở cho lớp KohonenNetwork, nó là lớp cuối cùng cung cấp cho mạng nơron Kohonen. Việc tính toán chiều dài một vector là một phần quan trọng của mạng nơron Kohonen. Lớp Network chứa một phương thức để tính toán độ dài vector của vector đã cho, và nó được biểu diễn dưới dạng mảng. Phương thức này được chỉ ra trong danh sách 2.7. Danh sách 2.7: Tính độ dài của một vector (Network.java) /** * @Tham số v vector * @Kết quả trả về độ dài vector. */ static double vectorLength( double v[] ) { double rtn = 0.0 ; for ( int i=0;i<v.length;i++ ) rtn += v[i] * v[i]; return rtn; } Một chức năng quan trong khác được cung cấp bởi lớp cơ sở Network là chức năng tính toán tích vô hướng. Lớp Network của mạng Kohonen dùng phương thức này để tính toán dữ liệu đầu ra của mạng nơron. Phương thức tính tích vô hướng được chỉ ra trong danh sách 2.8. Danh sách 2.8: Tính toán tích vô hướng (Network.java) /** * @Tham số vec1 là vector thứ nhất * @Tham số vec2 là vector còn lại * @Kết quả trả về là tích vô hướng. */ double dotProduct(double vec1[] , double vec2[] ) { int k,v; double rtn; rtn = 0.0; k = vec1.length; v = 0; while ( (k--)>0 ) { rtn += vec1[v] * vec2[v]; v++; } return rtn; } Đầu tiên, các trọng số giữa nơron được khởi tạo với các giá trị ngẫu nhiên. Sau đó các giá trị ngẫu nhiên này được huấn luyện để cho ra các kết quả tốt hơn. Tại thời điểm bắt đầu của mỗi chu kỳ huấn luyện, các trọng số cũng được khởi tạo với các giá trị ngẫu nhiên. Lớp Network cung cấp một phương thức để thực thi vấn đề này. Danh sách 2.9 chỉ ra phương thức để sinh các trọng số ngẫu nhiên. Danh sách 2.9: Khởi tạo các trọng số ngẫu nhiên (Network.java) /** * @Tham số weight là một ma trận trọng số. */ void randomizeWeights( double weight[][] ) { double r ; int temp = (int)(3.464101615 / (2. * Math.random() )); for ( int y=0;y<weight.length;y++ ) { for ( int x=0;x<weight[0].length;x++ ) { r = (double) random.nextInt(Integer.MAX_VALUE) + (double) random.nextInt(Integer.MAX_VALUE) - (double) random.nextInt(Integer.MAX_VALUE) - (double) random.nextInt(Integer.MAX_VALUE) ; weight[y][x] = temp * r ; } } } } 2.3.4.2 Lớp KohonenNetwork Chúng ta sẽ xem xét lớp KohonenNetwork. Lớp này là lớp thực thi mạng nơron Kohonen. Lớp KohonenNetwork có một số tính chất được chỉ ra trong danh sách 2.10. Danh sách 2.10: Các tính chất của lớp KohonenNetwork public class KohonenNetwork extends Network { double outputWeights[][]; protected int learnMethod = 1; protected double learnRate = 0.5; protected double quitError = 0.1; protected int retries = 10000; protected double reduction = .99; protected NeuralReportable owner; public boolean halt = false; protected TrainingSet train; Các tính chất được mô tả như sau: halt – Thiết lập này là xác thực hủy bỏ quá trình huấn luyện. learnMethod – Tỷ lệ học, đặt bằng 1. learnRate – Tỷ lệ học ban đầu. outputWeights[][] – Các trọng số của các nơron đầu ra dựa trên đầu vào. owner – Lớp owner, lớp này thực thi giao diện NeuralReportable. quitError – Khi tỷ lệ sai số đạt đến mức nhỏ hơn 10% thì dừng huấn luyện. reduction – Lượng giảm tỷ lệ học ban đầu (learnRate) bởi mỗi công đoạn. retries - Tổng số chu kỳ cho phép, nó đặt một mức trần (a ceiling) số lượng các chu kỳ huấn luyện có thể xảy ra. train – Tập huấn luyện. Để cho mạng nơron Kohonen hoạt động tốt, ta không chỉ chuẩn hóa vector đầu vào, mà ta còn phải chuẩn hóa cả ma trận trọng số. Danh sách 2.13 chỉ ra một phương thức để chuẩn hóa các dữ liệu đầu vào để đưa tới mạng nơron Kohonen, và danh sách 2.14 chỉ ra sự chuẩn hóa ma trận trọng số. Danh sách 2.13: Chuẩn hó dữ liệu đầu vào (KohonenNetwork.java) /** * @Tham số input là mẫu dữ liệu vào * @Tham số normfac là nhân tố chuẩn hóa * @Tham số synth là giá trị đầu vào cuối cùng */ void normalizeInput( final double input[] , double normfac[] , double synth[] ) { double length, d ; length = vectorLength ( input ) ; // Điều chỉnh trong trường hợp độ dài quá nhỏ if ( length < 1.E-30 ) length = 1.E-30 ; normfac[0] = 1.0 / Math.sqrt ( length ) ; synth[0] = 0.0 ; } Danh sách 2.14: Chuẩn hóa trọng số (KohonenNetwork.java) /** * @Tham số w là các trọng số đầu vào */ void normalizeWeight( double w[] ) { int i ; double len ; len = vectorLength ( w ) ; // Điều chỉnh trong trường hợp độ dài quá nhỏ if ( len < 1.E-30 ) len = 1.E-30 ; len = 1.0 / Math.sqrt ( len ) ; for ( i=0 ; i<inputNeuronCount ; i++ ) w[i] *= len ; w[inputNeuronCount] = 0; } Bây giờ ta kiểm tra phương thức thử mẫu, được sử dụng để đưa mẫu dữ liệu đầu vào tới mạng nơron Kohonen. Phương pháp này được gọi là phương pháp thử “trial”, được chỉ ra trong danh sách 2.15. Danh sách 2.15: Thử mẫu vào (KohonenNetwork.java) /** * Phương thức này có thể được sử dụng khi đưa một mẫu tới mạng. * Thường thường, nó hay dùng để gọi nơron thắng * @Tham số input là mẫu vào. */ void trial ( double input[] ) { int i ; double normfac[]=new double[1], synth[]=new double[1], optr[]; normalizeInput(input,normfac,synth) ; for ( i=0 ; i<outputNeuronCount; i++ ) { optr = outputWeights[i]; output[i] = dotProduct( input , optr ) * normfac[0] + synth[0] * optr[inputNeuronCount] ; // Tạo bản đồ lưỡng cực mới (từ -1,1 tới 0,1) output[i] = 0.5 * (output[i] + 1.0) ; // Tính toán làm tròn if ( output[i] > 1.0 ) output[i] = 1.0 ; if ( output[i] < 0.0 ) output[i] = 0.0 ; } } Vậy quá trình tính toán giá trị cho mỗi nơron đầu ra được tính toán bằng cách lấy tích vô hướng đã được chuẩn hóa của dữ liệu đầu vào và các trọng số. Do dữ liệu đầu ra cuối cùng có thể lớn hơn 1 hoặc nhỏ hơn 0, ta phải đưa nó về khoảng [0,1]. Để đưa dữ liệu đầu ra về khoảng [0,1] thì các kết quả nhỏ hơn 0 thì ta đưa nó về 0, và các kết quả lớn hơn 1 được đưa về 1. Dữ liệu đầu ra cuối cùng của mỗi nơron được lưu trữ trong mảng dữ liệu đầu ra. Chúng ta chỉ quan tâm đến nơron thắng vì chúng được đưa lại vào mẫu để huấn luyện. Danh sách 2.16 chỉ ra phương thức để đưa một mẫu dữ liệu đầu vào tới mạng Kohonen, và thu nhận nơron thắng. Phương thức này chính là phương thức dùng để phận loại mẫu trong mạng Kohonen. Danh sách 2.16: Đưa ra một mẫu vào và thu nhận nơron thắng /** * @Tham số input là mẫu vào * @Tham số normfac là nhân tố chuẩn hóa * @Tham số synth là giả đầu vào cuối cùng – (synthetic last input) * @Kết quả trả về là số nơron thắng. */ public int winner(double input[] ,double normfac[] ,double synth[]) { int i, win=0; double biggest, optr[]; normalizeInput( input , normfac , synth ) ; // Chuẩn hóa dữ liệu đầu vào biggest = -1.E30; for ( i=0 ; i<outputNeuronCount; i++ ) { optr = outputWeights[i]; output[i] = dotProduct (input , optr ) * normfac[0] + synth[0] * optr[inputNeuronCount] ; // Tạo bản đồ lưỡng cực mới (từ -1,1 tới 0,1) output[i] = 0.5 * (output[i] + 1.0) ; if ( output[i] > biggest ) { biggest = output[i] ; win = i ; } // account for rounding if ( output[i] > 1.0 ) output[i] = 1.0 ; if ( output[i] < 0.0 ) output[i] = 0.0 ; } return win ; } Phương thức này sẽ thường xuyên được sử dụng khi ta muốn đưa một mẫu tới một mạng nơron để phân loại. Còn phương thức “thử” mà chúng ta vừa xem xét ở trên chỉ được sử dụng trong khi huấn luyện mạng. Khi huấn luyện, chúng ta quan tâm đến dữ liệu đầu ra hiện tại của mỗi nơron. Trái lại, khi phân loại mẫu thì chúng ta chỉ quan tâm đến nơron thắng. Phương thức winner lặp qua mỗi nơron đầu ra và tính toán dữ liệu đầu ra cho mỗi nơron riêng biệt. Trong quá trình lặp này thì các chỉ số của nơron được lưu lại. Chỉ số này là của nơron có giá trị đầu ra cao nhất. Nơron có chỉ số cao nhất được gọi là nơron thắng. Nơron thắng này được trả về tập mẫu để tiếp tục tham gia vào quá trình huấn luyện. Bây giờ chúng ta bắt đầu xem xét quá trình huấn luyện. Phương thức training được chỉ ra trong danh sách 2.17. Danh sách 2.17: Huấn luyện mạng nơron (KohonenNetwork.java) /** * @exception java.lang.RuntimeException */ public void learn () throws RuntimeException { int i, key, tset,iter,n_retry,nwts; int won[],winners ; double work[],correc[][],rate,best_err,dptr[]; double bigerr[] = new double[1] ; double bigcorr[] = new double[1]; KohonenNetwork bestnet; // Preserve best here totalError = 1.0 ; bestnet = new KohonenNetwork(inputNeuronCount,outputNeuronCount,owner) ; won = new int[outputNeuronCount]; correc = new double[outputNeuronCount][inputNeuronCount+1]; if ( learnMethod==0 ) work = new double[inputNeuronCount+1]; else work = null ; rate = learnRate; initialize () ; best_err = 1.e30 ; // Vòng lặp chính: n_retry = 0 ; for ( iter=0 ; ; iter++ ) { evaluateErrors ( rate , learnMethod , won , bigerr , correc , work ) ; totalError = bigerr[0] ; if ( totalError < best_err ) { best_err = totalError ; copyWeights ( bestnet , this ) ; } winners = 0 ; for ( i=0;i<won.length;i++ ) if ( won[i]!=0 ) winners++; if ( bigerr[0] < quitError ) break ; if ( (winners < outputNeuronCount) && (winners < train.getTrainingSetCount()) ) { forceWin ( won ) ; continue ; } adjustWeights ( rate , learnMethod , won , bigcorr, correc ) ; owner.update(n_retry,totalError,best_err); if ( halt ) { owner.update(n_retry,totalError,best_err); break; } Thread.yield(); if ( bigcorr[0] < 1E-5 ) { if ( ++n_retry > retries ) break ; initialize () ; iter = -1 ; rate = learnRate ; continue ; } if ( rate > 0.01 ) rate *= reduction ; } // Hoàn thành copyWeights( this , bestnet ) ; for ( i=0 ; i<outputNeuronCount ; i++ ) normalizeWeight ( outputWeights[i] ) ; halt = true; n_retry++; owner.update(n_retry,totalError,best_err); } Phương thức training bắt đầu bằng việc khởi tạo các ma trận trọng số với các giá trị ngẫu nhiên và điều chỉnh các giá trị trọng yếu khác. Khi khởi tạo xong, vòng lặp chính đưa các mẫu huấn luyện tới mạng nơron và tính toán các sai số dựa trên các kết quả thu được từ mạng nơron. Khi kết thúc vòng lặp chính, xác định được nơron thắng, và nó sẽ tiếp tục huấn luyện để thúc đẩy hợp nhất các khả năng của nó trong quá trình nhận dạng mẫu riêng biệt, đồng thời cho ra một ma trận trọng số tốt hơn. Điều này được xác định bằng cách tính toán sự cải tiến sai số giữa công đoạn hiện tại và công đoạn trước. Nếu sự cải tiến không đáng kể thì chu kỳ huấn luyện này coi như hoàn thành, và lại bắt đầu một chu kỳ mới. Vì chu kỳ huấn luyện cực nhanh nên chúng ta chỉ theo dõi chu kỳ có tỷ lệ sai số tốt nhất. Khi chúng ta tìm thấy một ma trận trọng số có sai số nằm dưới mức sai số cho phép, thì sự huấn luyện được hoàn thành. Ngược lại, thì chúng ta sẽ lấy ma trận tốt nhất đã được xác định ở chu kỳ trước. Bây giờ, chúng ta sẽ bắt đầu xem xét xem các sai số được ước lượng như thế nào. Danh sách 2.18 chỉ ra ước lượng các sai số. Danh sách 2.18: Ước lượng các sai số (KohonenNetwork.java) /** * Phương thức này dùng trong quá trình học. Nó dùng để ước lượng các trọng số dựa vào tập huấn luyện. * @Tham số rate là tỉ lệ học * @Tham số learn_method là dùng phương thức method(0=additive, 1=subtractive) * @Tham số won là quản lý số lần nơron thắng * @Tham số bigerr là trả về sai số * @Tham số correc là trả về mảng hiệu chỉnh * @Tham số work là phạm vi hoạt động * @exception java.lang.RuntimeException */ */ void evaluateErrors ( double rate , int learn_method , int won[], double bigerr[] , double correc[][] , double work[]) throws RuntimeException { int best, size,tset ; double dptr[], normfac[] = new double[1]; double synth[]=new double[1], cptr[], wptr[], length, diff ; // Hiệu chỉnh và đặt lại số lần thắng for ( int y=0;y<correc.length;y++ ) { for ( int x=0;x<correc[0].length;x++ ) { correc[y][x]=0; } } for ( int i=0;i<won.length;i++ ) won[i]=0; bigerr[0] = 0.0 ; // Lặp qua tất cả các tập huấn luyện để xác định giá trị hiệu chỉnh for ( tset=0 ; tset<train.getTrainingSetCount(); tset++ ) { dptr = train.getInputSet(tset); best = winner ( dptr , normfac , synth ) ; won[best]++; wptr = outputWeights[best]; cptr = correc[best]; length = 0.0 ; for ( int i=0 ; i<inputNeuronCo the unt ; i++ ) { diff = dptr[i] * normfac[0] - wptr[i] ; length += diff * diff ; if ( learn_method!=0 ) cptr[i] += diff ; else work[i] = rate * dptr[i] * normfac[0] + wptr[i] ; } diff = synth[0] - wptr[inputNeuronCount] ; length += diff * diff ; if ( learn_method!=0 ) cptr[inputNeuronCount] += diff ; else work[inputNeuronCount] = rate * synth[0] + wptr[inputNeuronCount] ; if ( length > bigerr[0] ) bigerr[0] = length ; if ( learn_method==0 ) { normalizeWeight( work ) ; for ( int i=0 ; i<=inputNeuronCount ; i++ ) cptr[i] += work[i] - wptr[i] ; } } bigerr[0] = Math.sqrt ( bigerr[0] ) ; } Mạng được huấn luyện và tạo ra một mảng hiệu chỉnh chứa biến hiệu chỉnh được tạo bởi phương thức adjustWeights. Sau khi nhân tố hiệu chỉnh được tính toán, thì các trọng số phải được điều chỉnh. Danh sách 2.19 chỉ ra việc điều chỉnh các trọng số. Danh sách 2.19: Hiệu chỉnh các trọng số (KohonenNetwork.java) /** * Phương thức này được gọi vào cuối mỗi lần huấn luyện, và nó điều chỉnh các trọng số dựa vào lần thử trước. * @Tham số rate là tỉ lệ học * @Tham số learn_method sử dụng phương pháp method(0=additive, 1=subtractive) * @Tham số won quản lý số lần mỗi nơron thắng * @Tham số bigcorr dùng để quản lý sai số * @Tham số correc dùng để quản lý mảng hiệu chỉnh */ void adjustWeights ( double rate , int learn_method , int won[] , double bigcorr[], double correc[][] ) { double corr, cptr[], wptr[], length, f ; bigcorr[0] = 0.0 ; for ( int i=0 ; i<outputNeuronCount ; i++ ) { if ( won[i]==0 ) continue ; wptr = outputWeights[i]; cptr = correc[i]; f = 1.0 / (double) won[i] ; if ( learn_method!=0 ) f *= rate ; length = 0.0 ; for ( int j=0 ; j<=inputNeuronCount ; j++ ) { corr = f * cptr[j] ; wptr[j] += corr ; length += corr * corr ; } if ( length > bigcorr[0] ) bigcorr[0] = length ; } // Tính toán nhân tố hiệu chỉnh bigcorr[0] = Math.sqrt ( bigcorr[0] ) / rate ; } 2.4 Kết luận Trong chương này, chúng ta đã tìm hiểu về mạng nơron Kohonen. Mạng nơron Kohonen khác với mạng lan truyền ngược ở vài điểm. Mạng nơron Kohonen là luyện không giám sát. Điều này có nghĩa rằng, mạng nơron Kohonen được cho dữ liệu đầu vào nhưng không biết trước được “cái ra”. Sau đó, trong khi huấn luyện thì mạng nơron Kohonen bắt đầu vẽ lên bản đồ của mỗi nơron trong mẫu huấn luyện, mẫu này bao gồm các nơron đầu ra. Một mạng nơron Kohonen chỉ bao gồm hai lớp. Mạng được đưa vào một mẫu dữ liệu đầu vào và coi đây là lớp dữ liệu vào. Mẫu dữ liệu đầu vào này phải được chuẩn hóa thành các giá trị nằm trong khoảng [-1,1]. Dữ liệu đầu ra từ mạng nơron này là nơron đầu ra thắng riêng lẻ. Các nơron đầu ra có thể được đưa lại vào trong các nhóm, tương ứng với các nhóm mà mạng nơron Kohonen đã phân loại đối với đầu vào. Sự huấn luyện một mạng nơron Kohonen khác đáng kể so với thuật toán lan truyền ngược đã được giới thiệu. Để huấn luyện một mạng nơron Kohonen, chúng ta phải đưa vào cho nó các phần tử huấn luyện và xem nơron đầu ra là nơron thắng. Để cho các nơron thắng thì các trọng số của nơron thắng này được sửa đổi sao cho nó sẽ hoạt động cao hơn trên mẫu. Cũng có trường hợp có thể có một hoặc vài nơron không bao giờ thắng. Như vậy, sẽ có các nơron có trọng số chết được đưa đến mạng nơron. Điều này sẽ gây cho mạng làm việc quá tải khi nhận dạng, và thường thất bại khi giá trị trên các nơron đầu ra ngang nhau. Trong chương tiếp theo chúng ta sẽ áp dụng mạng nơron Kohonen vào ứng dụng thực tế, đó là ứng dụng nhận dạng ký tự quang (cụ thể là chữ viết tay bằng chuột và chữ ký đưa và dưới dạng ảnh). Chương 3. Nhận dạng ký tự quang sử dụng mạng nơron Kohonen Nhận dạng luôn là một phần quan trọng và thú vị trong các ứng dụng tin học hiện nay. Nhận dạng chữ viết cũng như nhận dạng nói chung là dùng thuật toán để tìm ra các đặc điểm riêng của từng cá thể trong quần thể mà chúng ta phải nhận dạng. Đối với nhận dạng ký tự quang thì với mỗi dữ liệu nhập vào (có thể là ký tự viết bằng chuột hay chữ ký được scan), ta sẽ phải tìm ra được đầu ra tương ứng với nó. Máy Scanner là một loại máy scan phẳng (Flatbed Scanner) dùng để scan những tài liệu đơn lẻ như văn bản, hình ảnh, thẻ, CMND… 3.1 Giới thiệu chung Trong chương trước, ta đã tìm hiểu về mạng nơron Kohonen. Ta đã biết rằng, một mạng nơron Kohonen có thể được sử dụng để phân loại các mẫu vào trong các nhóm khác nhau. Trong chương này, chúng ta sẽ xem xét kỹ hơn một ứng dụng riêng biệt của mạng nơron Kohonen. Đó là, mạng nơron Kohonen sẽ được áp dụng để nhận dạng ký tự quang, cụ thể là chữ viết tay bằng chuột hoặc chữ ký được scan. Các chương trình nhận dạng quang cũng có khả năng đọc văn bản in. Văn bản này có thể là văn bản được quét từ tài liệu, hoặc văn bản viết tay đó là vẽ bằng thiết bị cầm tay,… Trong chương này, chúng ta sẽ phát triển một ví dụ, đó là nó có thể được huấn luyện để nhận dạng chữ viết tay của con người. Trong đó: Tiền xử lý: là quá trình chuẩn hóa dữ liệu đầu vào. Trích chọn đặc trưng: là quá trình tìm ra các thông tin hữu ích và đặc trưng nhất cho mẫu đầu vào để sử dụng trong quá trình nhận dạng. Hình 3.1:Mô hình chung trong nhận dạng chữ viết. Nhận dạng: là quá trình sử dụng một mô hình nhận dạng cụ thể và một thuật toán cụ thể để trả lời mẫu đầu vào là ký tự nào. Hậu xử lý: là quá trình xử lý kết quả cho phù hợp với từng ứng dụng cụ thể. 3.2 Huấn luyện mạng Hình 3.2: Sơ đồ huấn luyện mạng Trong đó: Data: là tập dữ liệu ban đầu. Training Set: là tập dữ liệu huấn luyện. Test Set: là tập dữ liệu kiểm tra. ANN: là mạng nơron cần huấn luyện. Model: là mô hình tạo ra sau khi huấn luyện mạng với tập dữ liệu huấn luyện. Evaluator: là phần đánh giá chất lượng mô hình, thường lấy tỉ lệ phân loại đúng trên tập kiểm tra làm tiêu chí đánh giá. Huấn luyện mạng với tập dữ liệu huấn luyện, kiểm tra mô hình thu được trên tập dữ liệu kiểm tra. Chừng nào sai số trên tập kiểm tra còn giảm xuống được thì ta tiếp tục huấn luyện lại trên tập dữ liệu huấn luyện. Khi nào sai số trên tập kiểm tra không giảm được nữa thì dừng. 3.3 Thử nghiệm sử dụng mạng nơron Kohonen để nhận dạng ký tự quang Ứng dụng nhận dạng quang sẽ hiển thị một giao diện người-máy bằng đồ họa đơn giản, đó là sẽ cho phép ta huấn luyện và sử dụng mạng nơron. Như đã nói, chương trình này không trực tiếp đọc để nhận dạng các ký tự mà nó phải được huấn luyện từ các ký tự được đưa vào bằng việc vẽ trực tiếp bằng chuột, hoặc đưa vào dưới dạng ảnh được scan, trước khi nó có thể nhận dạng dữ liệu đầu vào. Các file huấn luyện ký tự được lưu trữ trong quyển từ điển mẫu. Dữ liệu ta đưa vào phải được tải mẫu trước khi chúng được nhận dạng. Ký tự (ảnh) được tải mẫu bằng cách; đưa ký tự (ảnh) vào trong một lưới nhỏ 5x7 pixel. Khi ta tải mẫu ký tự (ảnh), một khung hình chữ nhật được vẽ quanh ký tự (ảnh). Khung này gọi là khung cắt xén. Mục đích của khung cắt xén là cắt ra khoảng trắng không cần thiết cho ký tự (ảnh). Vì vậy, ta có thể vẽ ký tự (lấy ảnh) ở vị trí bất kỳ trong khu vực vẽ, thì chương trình vẫn nhận dạng được ký tự (ảnh). Theo cách phân chia trên thì mạng có 5x7=35 nơron đầu vào. Số nơron đầu ra được chọn cho mạng nơron Kohonen được sử dụng trong chương trình này tương ứng với số ký tự (ảnh) có trong tập mẫu. Nếu có 26 ký tự (ảnh) trong tập mẫu, thì sẽ có 26 nơron đầu ra. Thử nghiệm chương trình với tập mẫu nhỏ (khoảng 150 mẫu) thì độ chính xác khoảng 80%. * Huấn luyện mạng nơron: Mỗi kết nối nơron được gán một trọng số. Để xác định tổng số các kết nối, ta cần phải nhân số nơron đầu vào và số các nơron đầu ra. Nếu một mạng nơron với 26 nơron đầu ra và 35 nơron đầu vào sẽ có kết quả là 910 trọng số kết nối. Quá trình huấn luyện là quá trình điều chỉnh các trọng số để thu được ma trận trọng số mà ta mong muốn. Do đầu vào của mảng là 35 nơron nên các nơron này là nơron “thắng", nó được lưu giữ với số nguyên "tốt nhất" đó chính là số 1. Hình minh họa phía dưới. Hình 3.4: Biểu diễn ký tự e theo ma trận 5x7 pixcel. Hình 3.5: Biểu diễn ký tự e theo ma trận 5x7 bởi các giá trị Hình3.6: Biểu diễn ký tự e ở vector đầu vào Ta bắt đầu khởi tạo ma trận trọng số bằng cách lựa chọn ngẫu nhiên. Sau khi khởi tạo ma trận thì quá trình luyện sẽ bắt đầu. Ban đầu, ma trận trong số được đánh giá để xác định xem những gì hiện tại của nó là sai số (lỗi) cấp. Sai số này được xác định bởi việc huấn luyện đầu vào như thế nào (các ký tự mà ta tạo ra) để đưa ra các nơron đầu ra. Nếu sai số tính toán ở mức dưới 10% thì quá trình đã hoàn thành. Sau đây là một số kết quả thu được trong quá trình chạy thử nghiệm chương trình. a. Chọn vẽ trực tiếp, tải mẫu và gán ký tự cho mẫu (hình 3.7) Hình 3.7 Vẽ và gán ký tự Hình 3.8 Kết quả mạng nơron Kohonen nhận dạng ký tự e và ký tự c f. Chọn ảnh, lấy chữ ký (hình 3.9) Hình 3.9 Đưa chữ ký vào mạng và gán tên Hình 3.10 Kết quả mạng nơron Kohonen nhận dạng chữ ký 3.4 Trường hợp ngoại lệ Chương trình được trình bầy ở đây chỉ có khả năng trong nhận dạng các ký tự riêng biệt. Khi chạy chương trình, ta thấy có vấn đề xảy ra. Ví dụ như: chương trình khó có thể xác định để phận biệt giữa chư “o” thường và chữ “O” hoa, hay chữ số 0 (số không). Vậy ta thấy, giữa các ký tự này thì không thể vận dụng bằng mạng nơron Kohonen. 3.5 Kết luận Trong chương này, chỉ ra một ứng dụng thực tế của mạng nơron Kohonen. Tiêu điểm của chương này là tạo ra một ứng dụng nhỏ đó là khả năng nhận dạng chữ viết tay. Các ký tự (chữ ký được scan) được người sử dụng đưa vào với độ phân giải cao. Để biểu diễn được tới mạng nơron, ta giảm bớt độ phân giải này bằng cách sử dụng kỹ thuật cắt xén và tải mẫu, ký tự (chữ ký) được chuyển sang một ảnh thứ hai với độ phân giải thấp hơn nhiều. Khi ảnh được đưa vào, nó phải được cắt xén để loại bỏ các khoảng trắng. Vì thế nó không phụ thuộc vào vị trí và cỡ viết của ký tự (ảnh). Sự tải mẫu là quá trình đưa ảnh có độ phân giải cao được chuyển đổi về ảnh có độ phân giải thấp hơn. Mỗi pixel trong ký tự (chữ ký) tải mẫu được ấn định cho một mầu trung bình của vùng tương ứng trong ảnh có độ phân giải cao. Kết quả ảnh tải mẫu sau đó được đưa tới tập huấn luyện hoặc tới quá trình nhớ của mạng nơron Kohonen. Mạng nơron Kohonen được sử dụng trong ví dụ này có số nơron đầu vào bằng số pixel của ký tự (hình ảnh) được tải mẫu, và số nơron đầu ra bằng số ký tự mà ta tạo trong tập mẫu. KẾT LUẬN Kiến thức đã tìm hiểu được Nắm được kiến thức cơ bản của mạng nơron nhân tạo và mạng nơron Kohonen. Nắm đượcquy trình chung trong việc xây dựng hệ thống nhận dạng chữ viết. Sử dụng phương pháp tính tích vô hướng hai vector để tìm nơron thắng. Đưa ra phương pháp trích chọn đặc trưng cho nhận dạng ký tự quang (cụ thể là chữ viết tay bằng chuột và chữ ký đưa và dưới dạng ảnh). Phát triển thành công phần mềm nhận dạng ký tự quang (cụ thể là chữ viết tay bằng chuột và chữ ký đưa vào dưới dạng ảnh). Chương trình ứng dụng mới đang bước đầu thử nghiệm, và độ chính xác trên tập mẫu (150 mẫu) khoảng 80%. Hướng phát triển nghiên cứu Luận văn có thể phát triển cho nhận dạng văn bản viết tay. Tuy nhiên để làm được điều này phải là cả một quá trình tìm hiểu và nghiên cứu lâu dài. Do thời gian có hạn nên luận văn mới chỉ trình bày ở mức độ đơn giản đó là nhận dạng chữ ký và từng ký tự riêng biệt. Tự đánh giá Mặc dù em đã cố gắng để hoàn thiện đề tài, nhưng chắc chắn không thể tránh được những thiếu sót, em rất mong nhận được sự chỉ bảo và giúp đỡ của các thầy cô giáo, cùng với sự góp ý kiến của những ai quan tâm. Tài tham khảo 1. Teuvo Kohonen,Self-Organizing Maps, Third Edition, Springer, Heidelberg, 2001 2. V. Rao and H. Rao, C++ Neural Networks and Fuzzy Logic, Second Edition, MIS Press, NewYork, 1995

Các file đính kèm theo tài liệu này:

  • docLuan_van_Kohonen.doc