BÁO CÁO BÀI TẬP LỚN XÂY DỰNG MẠNG MULTI-LAYER PERCEPTRON SỬ DỤNG NGÔN NGỮ LẬP TRÌNH C++ Giảng viên: ThS. Nguyễn Quỳnh Chi Sinh viên: Nguyễn Thế An B17DCCN002 Đào Hoàng Mai B17DCCN411 Nguyễn Thành Long B17DCCN396 Nguyễn Hữu Long B17DCCN395 Phùng Hà My B17DCCN431 Hà Nội, 06/2021 LỜI NÓI ĐẦU Trong cuộc cách mạng công nghiệp 4.0 hiện nay, yếu tố quyết định thành công trong mọi lĩnh vực luôn gắn với dữ liệu và việc khai thác dữ liệu hiệu quả. Dữ liệu ngày càng trở nên dồi dào, phong phú đã đem lại lợi ích to lớn cho các doanh nghiệp và ý nghĩa lớn lao cho những nhà khoa học nghiên cứu dữ liệu. Tuy nhiên, điều đó cũng đem đến cho công cuộc khám phá ra những thông tin tiềm ẩn bên trong chúng những thách thức mới. Lúc này, các mạng thần kinh nhân tạo được lấy cảm hứng từ bộ não sinh học đã chứng minh được sự hữu ích của mình khi đạt được những kết quả vượt trội trong các bài toán cốt lõi của khai phá dữ liệu như phân loại dữ liệu, nhận dạng ảnh, nhận dạng giọng nói, v.v. Trong đó, Multi-layer Perceptron là một mạng thần kinh nhân tạo tuy đơn giản nhưng rất hiệu quả và có ý nghĩa trong các bài toán thực tế. Từ những kiến thức của môn học “Kho dữ liệu và khai phá dữ liệu”, cùng với những thông tin học hỏi từ Internet, chúng em đã tìm hiểu và quyết định chọn đề tài “Xây dựng Multi-layer Perceptron sử dụng ngôn ngữ lập trình C++” là đề tài cho bài tập lớn của nhóm. Mô hình đã được kiểm nghiệm với 3 tập dữ liệu khác nhau và so sánh với framework Tensorflow để kiểm chứng độ chính xác.
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KHOA CƠNG NGHỆ THÔNG TIN I —————*————— BÁO CÁO BÀI TẬP LỚN XÂY DỰNG MẠNG MULTI-LAYER PERCEPTRON SỬ DỤNG NGÔN NGỮ LẬP TRÌNH C++ Giảng viên: ThS Nguyễn Quỳnh Chi Sinh viên: Nguyễn Thế An Đào Hoàng Mai Nguyễn Thành Long Nguyễn Hữu Long Phùng Hà My Hà Nội, 06/2021 B17DCCN002 B17DCCN411 B17DCCN396 B17DCCN395 B17DCCN431 LỜI NÓI ĐẦU Trong cách mạng công nghiệp 4.0 nay, yếu tố định thành công lĩnh vực gắn với liệu việc khai thác liệu hiệu Dữ liệu ngày trở nên dồi dào, phong phú đem lại lợi ích to lớn cho doanh nghiệp ý nghĩa lớn lao cho nhà khoa học nghiên cứu liệu Tuy nhiên, điều đem đến cho công khám phá thông tin tiềm ẩn bên chúng thách thức Lúc này, mạng thần kinh nhân tạo lấy cảm hứng từ não sinh học chứng minh hữu ích đạt kết vượt trội toán cốt lõi khai phá liệu phân loại liệu, nhận dạng ảnh, nhận dạng giọng nói, v.v Trong đó, Multi-layer Perceptron mạng thần kinh nhân tạo đơn giản hiệu có ý nghĩa tốn thực tế Từ kiến thức mơn học “Kho liệu khai phá liệu”, với thông tin học hỏi từ Internet, chúng em tìm hiểu định chọn đề tài “Xây dựng Multi-layer Perceptron sử dụng ngơn ngữ lập trình C++” đề tài cho tập lớn nhóm Mơ hình kiểm nghiệm với tập liệu khác so sánh với framework Tensorflow để kiểm chứng độ xác Chúng em xin bày tỏ biết ơn sâu sắc tới Nguyễn Quỳnh Chi, giảng viên môn “Kho liệu Khai phá liệu”, hướng dẫn, dạy tận tình cho chúng em nhiều học quý giá tìm tịi, tự học hỏi chủ động học tập Thông qua môn học cô báo cáo này, chúng em khơng tìm hiểu thêm kiến thức mà đào sâu củng cố kiến thức có, nâng cao khả làm việc nhóm để đạt hiệu cao Trong suốt trình học tập tìm hiểu, cố gắng kiến thức kinh nghiệm non nớt nên báo cáo cịn nhiều thiếu sót hạn chế Vì chúng em mong góp ý để báo cáo chúng em hoàn thiện Chúng em xin chân thành cảm ơn cơ! Mục lục LỜI NĨI ĐẦU TỔNG QUAN 1.1 Tổng quan toán phân loại 1.2 Mạng thần kinh nhân tạo 1.2.1 Tổng quan mạng thần kinh nhân tạo 1.2.2 Mạng Multi-layer Perceptron MULTI-LAYER PERCEPTRON 2.1 Các ký hiệu khái niệm 2.1.1 Layer - Lớp 2.1.2 Unit - Đơn vị 2.1.3 Weights Biases 2.1.4 Activation Function - Hàm kích hoạt 2.1.5 Loss Function - Hàm mát 11 2.2 Học MLP 12 2.2.1 Feedforward - Lan truyền thẳng 12 2.2.2 Backpropagation - Lan truyền ngược 12 i LẬP TRÌNH VÀ MÃ NGUỒN 3.1 Lập trình 16 3.2 Mã nguồn C++ 18 3.2.1 3.3 15 Định nghĩa hàm 18 Mã nguồn Python 20 KIỂM NGHIỆM 4.1 4.2 22 Bộ liệu 23 4.1.1 Optical Recognition of Handwritten Digits Dataset 23 4.1.2 Spambase Dataset 24 4.1.3 Mushroom Dataset 25 Kết 26 4.2.1 Kết 27 4.2.2 Phân tích kết đánh giá 29 ii Chương TỔNG QUAN Trong chương 1, báo cáo giới thiệu tốn phân loại, tốn điển hình khai phá liệu, đồng thời trình bày tổng quan mạng thần kinh nhân tạo thông qua phần: • Tổng quan toán phân loại • Mạng thần kinh nhân tạo 1.1 Tổng quan toán phân loại Phân loại (classification) dạng thuật toán dự đoán lớp đối tượng liệu cho với đầu giá trị rời rạc Các lớp gọi mục tiêu, nhãn danh mục Thuật toán thường gọi phân loại nhị phân (binary classification) với nhiệm vụ phân loại có lớp, phân loại nhiều lớp (multi-class classification) với tốn có từ lớp phân loại trở lên Phân loại thuật tốn nằm nhóm thuật tốn học có giám sát, nghĩa liệu sử dụng trình huấn luyện gán sẵn nhãn Thuật tốn có nhiệm vụ xấp xỉ hay mơ hình ánh xạ (f ) từ biến đầu vào x đến biến đầu rời rạc y việc sử dụng liệu huấn luyện biết trước đầu (hay lớp/ nhãn) Sau đó, q trình thử nghiệm, mơ hình nhận biết nhãn điểm liệu chưa biết Một ví dụ điển hình cho loại thuật tốn toán phát thư rác cho nhà cung cấp dịch vụ email Khi đó, đầu vào toán thư điện tử (bao gồm nội dung, tiêu đề, tài khoản người gửi, v.v) đầu hai lớp “tích cực” lớp “tiêu cực” Lớp “tích cực” nghĩa thư điện tử đầu vào thư rác ngược lại với lớp “tiêu cực” Đây toán phân loại nhị phân (binary classification) có hai lớp “thư rác” “khơng phải thư rác” Thuật tốn phân loại thuật toán quan trọng, ứng dụng rộng rãi khai phá liệu có khả tự động phân loại liệu vào nhóm khác nhau, đặc biệt với liệu lớn, mà khơng cần lập trình cụ thể Việc phân loại liệu giúp cho q trình trích xuất thơng tin từ điểm liệu thuộc nhóm khác trở nên dễ dàng hiệu Có tương đối nhiều thuật tốn thuộc lớp thuật tốn phân loại, kể đến điển Kmean, Naive Baysian Network, Support Vector Machines, Decision Tree, Neural Network, Trong thực tế, người ta thường sử dụng thuật tốn thuộc họ Neural Network chúng có khả phân loại xác vượt trội so với thuật toán cổ điển 1.2 Mạng thần kinh nhân tạo 1.2.1 Tổng quan mạng thần kinh nhân tạo Mạng thần kinh nhân tạo (ANN) [11], thường gọi đơn giản mạng neural (NN), hệ thống tính tốn lấy cảm hứng từ mạng neuron sinh học cấu thành não động vật Trong hình 1.1 ta thấy tế bào thần kinh sinh học nhận nhiều tín hiệu đầu vào cho tín hiệu đầu Hình 1.1: Một neuron thần kinh não sinh học Các neuron thần kinh nhân tạo có chế nhận truyền thông tin tương tự vậy, thể hình 1.2 Hình 1.2: Một neuron nhân tạo - hay perceptron Như vậy, dựa ý tưởng não, ANN tập hợp đơn vị nút kết nối với gọi tế bào thần kinh nhân tạo hay perceptron, mơ hình hóa cấu trúc mạng lưới thần kinh não sinh học Mỗi kết nối, giống khớp thần kinh não động vật, truyền tín hiệu từ tế bào thần kinh đến tế bào thần kinh khác Một tế bào thần kinh nhân tạo nhận tín hiệu sau xử lý phát tín hiệu cho tế bào thần kinh kết nối với “Tín hiệu” vào kết nối số thực đầu nơ-ron tính số hàm phi tuyến tổng đầu vào Các kết nối thường kèm trọng số, có nhiệm vụ làm tăng giảm cường độ tín hiệu, điều chỉnh trình học tập Tế bào thần kinh có ngưỡng cho tín hiệu gửi tín hiệu tổng hợp vượt qua ngưỡng Các mạng thần kinh nhân tạo cịn biến thể thành nhiều dạng khác nhau, ví dụ Multi-layer Perceptron (mạng neural nhiều lớp), Convolutional Neural Network (mạng neural tích chập) [8] - thường sử dụng với liệu dạng ảnh, Recurrent Neural Network (mạng neural hồi quy) [6] - thường áp dụng cho liệu dạng chuỗi văn bản, video, âm thanh, v.v 1.2.2 Mạng Multi-layer Perceptron Multi-layer Perceptron (MLP) mô hình mạng nơ-ron tạo từ liên kết perceptron chia làm nhiều nhóm, nhóm tương ứng với lớp Các mạng MLP đơi cịn gọi “vanilla” neural network, đặc biệt mạng có lớp ẩn Một MLP bao gồm ba loại lớp: lớp đầu vào, lớp ẩn lớp đầu Ngoại trừ nút đầu vào, nút neuron sử dụng hàm kích hoạt phi tuyến MLP sử dụng kỹ thuật học tập có giám sát gọi backpropagation để đào tạo Đặc điểm có nhiều lớp sử dụng hàm kích hoạt phi tuyến tính giúp MLP phân biệt với perceptron tuyến tính Cũng vậy, MLP phân biệt lớp liệu khơng thể phân tách tuyến tính Hình 1.3 ví dụ cho mạng MLP có input layer (lớp đầu vào), output layer (lớp đầu ra) nhiều hidden layers (lớp ẩn) Hình 1.3: Một ví dụ mạng Multi-layer Perceptron Hiện nay, với cú pháp đơn giản có nhiều framework hỗ trợ, Python ngơn ngữ sử dụng nhiều lĩnh vực học máy khai phá liệu Tuy nhiên, so với thư viện sử dụng ngôn ngữ Python, C++ sở hữu điểm mạnh rõ ràng ngôn ngữ nhập tĩnh, đoạn mã khơng có lỗi nhập xuất thời gian chạy, đoạn mã nhỏ gọn có thời gian chạy nhanh hơn, cho phép hiệu suất tính tốn cao so với thuật tốn thực hồn tồn Python MATLAB [3] Vì vậy, báo cáo này, chúng em xây dựng mơ hình mạng Multi-layer Perceptron sử dụng ngơn ngữ C++ để giải tốn phân loại với liệu khác Ở phần tiếp theo, báo cáo trình bày chi tiết sở lý thuyết mạng MLP chương 2, q trình xây dựng mơ hình mã nguồn C++ chương 3, đồng thời sử dụng phương pháp định lượng để kiểm nghiệm lại đoạn mã nhóm lập trình liệu khác chương Chương MULTI-LAYER PERCEPTRON Trong chương 2, báo cáo vào trình bày chi tiết sở lý thuyết mạng Multi-layer Perceptron (MLP) [10] qua phần chính: • Các ký hiệu khái niệm • Học MLP • thuộc tính thực tiếp số lượng ký tự Char email / tống số ký tự email • thuộc tính thực: độ dài trung bình chuỗi chữ in hoa khơng gián đoạn • thuộc tính nguyên: độ dài chuỗi chữ in hoa dài khơng bị gián đoạn • thuộc tính nguyên: tổng số chữ in hoa e-mail • Ví dụ: [0,0.64,0.64,0,0.32,0,0,0,0, ,0,0.778,0,0,3.756,61,278,1] Hình 4.2: Phân phối liệu Spambase dataset 4.1.3 Mushroom Dataset Mushroom Dataset3 liệu theo miền cụ thể (domain-specific) cho nhiệm vụ phân loại nấm Bộ liệu bao gồm ghi 23 https://archive.ics.uci.edu/ml/datasets/mushroom 25 loài nấm mang thuộc hai lớp “ăn được” “độc” Các ghi có chứa 21 loại thuộc tính nấm dựa quan sát nhà nghiên cứu nấm, bao gồm hình dạng mũ nấm, bề mặt mũ nấm, kích thước mang nấm, mơi trường sống, v.v Mỗi giá trị thuộc tính đại diện chữ khác nhau, ví dụ môi trường sống đại diện chữ g (grass - cỏ), l (leaves - cây), w (waste - rác), d (woods - gỗ), v.v Hình 4.3 thống kê số lượng điểm liệu tập nhỏ, tổng cộng có tất 8124 ghi, có 4208 nấm ăn 3916 nấm độc Do mạng thần kinh nhân tạo nhận đầu vào liệu dạng số (numerical data), chúng em chuyển thuộc tính nấm thành one-hot vector Hình 4.3: Phân phối liệu Mushroom Dataset 4.2 Kết Trong báo cáo này, chúng em sử dụng độ đo Accuracy F1 để đánh giá độ xác mơ hình mạng neural Hai độ đo 26 tính tốn theo hai cơng thức 4.1 4.4 Acc = N CP N (4.1) N CP “Number of Correct Prediction” - số điểm liệu dự đốn đúng, cịn N tổng số điểm liệu dự đoán Recall = R = TP TP + FN TP P recision = P = TP + FP ∗ Recall ∗ P recision F1 = Recall + P recision (4.2) (4.3) (4.4) với TP, TN, FP, FN viết tắt True Positive (nhãn Positive dự đoán đúng), True Negative (nhãn Negative dự đoán đúng), False Positive (nhãn Positive bị dự đoán sai) False Negative (nhãn Negative bị dự đốn sai) Với tốn phân loại có nhiều lớp, chúng em sử dụng độ đo Macro F1 [7], tính trung bình F1 lớp công thức sau: M acroF1 = C C F1i = i C C i ∗ Pi ∗ Ri Pi + Ri (4.5) đó, C số lượng lớp tốn, F1i độ đo F − tính cho lớp thứ i, tương tự với Pi Ri 4.2.1 Kết Chúng em sử dụng mơ hình mạng MLP với ba hidden layers, số unit layer cài đặt 512 - 128 - 32 Ngoài ra, siêu tham số khác chúng em tinh chỉnh sử dụng grid-search trình bày bảng 4.2 Từ bây giờ, để tiện cho việc trình bày, chúng em gọi mơ hình MLP lập trình ngôn ngữ C++ vắn tắt MLP C++ tương tự với mơ hình MLP Python 27 Siêu tham số Giá trị cài đặt Learning-rate 0.01 Batch-size 64 Epoch 50 Learning-rate decay value 0.1 Learning-rate decay epoch 15 Bảng 4.2: Các siêu tham số sử dụng mơ hình MLP Bảng 4.3 trình bày kết mơ hình MLP C++ kiểm nghiệm liệu khác so sánh với mơ hình MLP Python Có thể thấy kết mơ hình mà chúng em lập trình C++ so với mơ hình sử dụng framework khơng có q nhiều khác biệt: độ đo có sai khác xấp xỉ 0.1 Có hai số ba liệu có kết báo cáo MLP Python cao MLP C++ Spambase ORHD, chênh lệch cao Spambase với độ đo F1 MLP Python cao xấp xỉ 0.15 so với MLP C++ Đối với liệu Mushroom, MLP C++ MLP Python đạt độ xác tuyệt đối thử nghiệm với liệu nấm Đồng thời, hai mơ hình MLP cho kết tốt với liệu nấm với accuracy F1 đạt 1.00 tỏ bối rối liệu spam email đạt kết tập liệu Bộ liệu ORHD Spambase Mushroom Ngôn ngữ Accuracy F1 C++ 0.9574 0.9569 Python 0.9730 0.9726 C++ 0.6764 0.5835 Python 0.7394 0.7114 C++ 1.0000 1.0000 Python 1.0000 1.0000 Bảng 4.3: Kết kiểm nghiệm mơ hình C++ Python với liệu 28 4.2.2 Phân tích kết đánh giá Để giải thích cho kết thu trên, lý chúng em đưa mơ hình MLP có độ nhạy cảm cao với liệu đầu vào Đối với tập liệu ORHD tập liệu Mushroom, liệu đầu vào có giá trị nên mơ hình dễ dàng học ảnh hưởng giá trị đầu vào trình lan truyền thẳng tương đương nhau, khơng có đặc trưng có khả ảnh hưởng lớn đến đầu mạng Trong đó, liệu Spambase, giá trị đầu vào có dạng số thực tập giá trị có phương sai lớn, mơ hình MLP lúc gặp nhiều khó khăn vấn đề khái quát hóa phân phối liệu so với hai tập liệu cịn lại Việc hai mạng MLP lập trình hai ngơn ngữ khác cho kết xác tối đa liệu Mushroom giải thích tập liệu tương đối đơn giản Sau sâu vào phân tích liệu sử dụng phương pháp thống kê, chúng em nhận thấy có vài thuộc tính tập liệu ảnh hưởng đến kết dự đoán mơ hình hồn tồn có rút quy tắc để phân loại nấm Ví dụ như, nấm có mùi (Odor) mùi hạnh nhân (Almond) mùi hồi (Anise) nấm ăn được, lại loại nấm độc Hay nấm khơng có mùi có bào tử (spore) màu xanh/ trắng nấm độc Vì vậy, khơng có ngạc nhiên hai mơ hình tỏ thơng thái trước nhiệm vụ phân loại nấm Với liệu Spambase, lý giá trị đầu vào, chúng em thấy lý ảnh hưởng đáng kể đến kết kỹ thuật trích rút đặc trưng ban đầu liệu không giữ nhiều thơng tin có ý nghĩa mặt phân phối thống kê Như trình bày phần 4.1.2, 48 thuộc tính thực ghi thống kê tỉ lệ xuất từ ngẫu nhiên nằm từ điển Một văn có từ cho biết lượng thơng tin lớn, có từ khơng Lúc này, ngẫu nhiên làm thông tin quan trọng email việc bỏ qua từ quan trọng, dễ thấy 48 thuộc tính ban đầu nhận giá trị 29 (thống kê từ khơng có văn bản) Hơn nữa, để thực hiểu ngữ nghĩa đoạn văn, cần ngữ cảnh, từ giống đặt vào ngữ cảnh khác mang ý nghĩa hồn tồn khác Vì vậy, đặc trưng thống kê số lượng trích rút ghi liệu Spambase không đem lại nhiều ý nghĩa Tuy nhiên, liệu công bố từ năm 1998 nên nỗ lực nhà nghiên cứu xử lý ngôn ngữ tự nhiên nhằm mục đích ngày giúp máy móc thực thấu hiểu ngôn ngữ người Chúng em trực quan hóa so sánh q trình hội tụ hàm loss tập train tập valid hai mô hình MLP C++ MLP Python Theo đó, với Mushroom ORHD, hai hàm loss giảm đặn tương đối giống Điều cho thấy mơ hình MLP C++ mà chúng em lập trình khớp với lý thuyết giống với mơ hình sử dụng framework Trong đó, q trình hội tụ hàm loss Spambase MLP Python có dao động tương đối lớn MLP C++ ổn định độ giảm lại nhỏ Điều củng cố cho lý giải chúng em đặc điểm liệu 30 Hình 4.4: Sự hội tụ hàm loss tập ORHD tập Train tập Valid 31 Hình 4.5: Sự hội tụ hàm loss tập Spambase tập Train tập Valid 32 Hình 4.6: Sự hội tụ hàm loss tập Mushroom tập Train tập Valid Chúng em sử dụng confusion map để đánh giá kết giai đoạn thử nghiệm mơ hình hình 4.7 4.8, 4.9 Qua biểu đồ mà chúng em cung cấp, thấy mơ hình lập trình C++ 33 cho đồ thị giống với mơ hình lập trình Python Nhưng dễ thấy rằng, hội tụ hàm mát MLP C++ không ổn định mơ hình lập trình sử dụng Python Lý cho việc thuật toán tối ưu chúng em lập trình C++ mơ cách đơn giản thuật tốn Gradient Descent Cịn Python, cụ thể framework Tensorflow 2.0, nghiên cứu triển khai thuật toán Gradient Descent ổn định phương pháp decay hay momentum Hơn hàm tính tốn ma trận tối ưu ổn định so với phiên triển khai C++ chúng em 34 Hình 4.7: Confusion matrix tập ORHD C++ Python 35 Hình 4.8: Confusion matrix tập Spambase C++ Python 36 Hình 4.9: Confusion matrix tập Mushroom C++ Python 37 Tài liệu tham khảo [1] ABADI, M., BARHAM, P., CHEN, J., CHEN, Z., DAVIS, A., DEAN, J., DEVIN, M., GHEMAWAT, S., IRVING, G., ISARD, M., ET AL Tensor- flow: A system for large-scale machine learning In 12th {USENIX} symposium on operating systems design and implementation ({OSDI} 16) (2016), pp 265–283 [2] AGARAP, A F Deep learning using rectified linear units (relu) arXiv preprint arXiv:1803.08375 (2018) [3] BARGIACCHI, E., ROIJERS, D M., AND NOWÉ, A Ai-toolbox: A c++ library for reinforcement learning and planning (with python bindings) Journal of Machine Learning Research 21, 102 (2020), 1–12 [4] BISHOP, C M Pattern recognition and machine learning Springer, 2006 [5] KRIZHEVSKY, A., SUTSKEVER, I., AND HINTON, G E Imagenet classification with deep convolutional neural networks Advances in neural information processing systems 25 (2012), 1097–1105 [6] MEDSKER, L R., AND JAIN, L Recurrent neural networks Design and Applications (2001) [7] OPITZ, J., AND BURST, S Macro f1 and macro f1 arXiv preprint arXiv:1911.03347 (2019) [8] O’SHEA, K., AND NASH, R An introduction to convolutional neural networks arXiv preprint arXiv:1511.08458 (2015) 38 [9] TALATHI, S S., AND VARTAK, A Improving performance of re- current neural network with relu nonlinearity arXiv preprint arXiv:1511.03771 (2015) [10] TIỆP, VŨ HỮU Machine learning Nhà xuất Khoa học Kỹ thuật (2018) [11] YEGNANARAYANA, B Artificial neural networks PHI Learning Pvt Ltd., 2009 [12] ZHANG, Y.-D., PAN, C., SUN, J., AND TANG, C Multiple sclerosis identification by convolutional neural network with dropout and parametric relu Journal of computational science 28 (2018), 1–10 39 ... Chương LẬP TRÌNH VÀ MÃ NGUỒN Trong chương 3, chúng em trình bày kỹ thuật lập trình chuyên sâu để xây dựng mạng thần kinh nhân tạo MLP sử dụng ngôn ngữ lập trình C++ mã nguồn thành phần mạng qua... xây dựng mơ hình mạng Multi- layer Perceptron sử dụng ngơn ngữ C++ để giải toán phân loại với liệu khác Ở phần tiếp theo, báo cáo trình bày chi tiết sở lý thuyết mạng MLP chương 2, trình xây dựng. .. nguồn thành phần mạng qua phần: • Lập trình • Mã nguồn C++ • Mã nguồn Python 15 3.1 Lập trình Cấu trúc dự án xây dựng mơ hình mạng neural MLP sử dụng ngôn ngữ C++ chúng em bao gồm phần sau: •