BÁO CÁO MÁY HỌC BÁO CÁO CUỐI KỲ SVTH: PHẠM TRÍ NHÂN MSSV: 16141359 Khoá: 16 Ngành: Công nghệ kỹ thuật Điện tử - Truyền thông Tp. Hồ Chí Minh, tháng 11 năm 2019 2 MỤC LỤC MỤC LỤC .............................................................................................................2 BÀI 1: MẠNG NEURAL.....................................................................................3 BÀI 2: ĐÁNH GIÁ HỆ THỐNG PHÂN LỚP...................................................8 BÀI 3: PHƯƠNG PHÁP PCA...........................................................................13 BÀI 4: NHẬN DIỆN ẢNH BẰNG CNN...........................................................17 BÀI 5: REINFORCEMENT Q-LEARNING...................................................21
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA ĐÀ O TẠO CHẤT LƯỢNG CAO BÁO CÁO MÁY HỌC BÁO CÁO CUỐI KỲ SVTH: PHẠM TRÍ NHÂN MSSV: 16141359 Khố: 16 Ngành: Cơng nghệ kỹ thuật Điện tử - Truyền thơng Tp Hồ Chí Minh, tháng 11 năm 2019 MỤC LỤC MỤC LỤC BÀI 1: MẠNG NEURAL BÀI 2: ĐÁNH GIÁ HỆ THỐNG PHÂN LỚP BÀI 3: PHƯƠNG PHÁP PCA 13 BÀI 4: NHẬN DIỆN ẢNH BẰNG CNN 17 BÀI 5: REINFORCEMENT Q-LEARNING 21 BÀI 1: MẠNG NEURAL Vấn đề: Cần nhận biết loại hoa mạng neural dựa theo đặc trưng loại hoa đó, dựa theo cấu trúc mạng neural viết chương trình cho máy tính nhận biết phân loại loại hoa Mạng nơ-ron nhân tạo (Neural Network - NN) mơ hình lập trình đẹp lấy cảm hứng từ mạng nơ-ron thần kinh Kết hợp với kĩ thuật học sâu (Deep Learning - DL), NN trở thành công cụ mạnh mẽ mang lại hiệu tốt cho nhiều tốn khó nhận dạng ảnh, giọng nói hay xử lý ngơn ngữ tự nhiên Kiến trúc chung mạng nơron nhân tạo (NN) gồm thành phần là: Input Layer, Hidden Layer Output Layer Một mạng NN có kiểu tầng: Tầng vào (input layer): Là tầng bên trái mạng thể cho đầu vào mạng Tầng (output layer): Là tầng bên phải mạng thể cho đầu mạng Tầng ẩn (hidden layer): Là tầng nằm tầng vào tầng thể cho việc suy luận logic mạng Trong đó, lớp ẩn (Hidden Layer) gồm Nơron nhận liệu input từ Nơron lớp (Layer) trước chuyển đổi input cho lớp xử lý Trong NN có nhiều lớp ẩn Hình Mơ mạng Neural Trong Processing Elements (PE) NN gọi Nơron, Nơron nhận liệu vào (Inputs) xử lý chúng cho kết (Output) Kết xử lý Nơron làm Input cho Nơron khác - Q trình xử lý thơng tin NN: Hình Sơ đồ khối trình xử lý thông tin mạng Neural + Inputs (dữ liệu vào): Mỗi Input tương ứng với thuộc tính (attribute) liệu (patterns) + Output (kết quả): Kết NN giải pháp cho vấn đề + Connection Weights (Trọng số liên kết) : Đây thành phần quan trọng NN, thể mức độ quan trọng (độ mạnh) liệu đầu vào q trình xử lý thơng tin (quá trình chuyển đổi liệu từ Layer sang layer khác) Quá trình học (Learning Processing) NN thực trình điều chỉnh trọng số (Weight) input data để có kết mong muốn + Summation Function (Hàm tổng): Tính tổng trọng số tất input đưa vào Nơron (phần tử xử lý PE) Hàm tổng Nơron n input tính theo cơng thức sau: + Transfer Function (Hàm chuyển đổi): Hàm tổng (Summation Function) Nơron cho biết khả kích hoạt (Activation) Nơron cịn gọi kích hoạt bên (internal activation) Các Nơron sinh output khơng NN (nói cách khác output Nơron chuyển đến layer tiếp mạng Nơron không) Mối quan hệ Internal Activation kết (output) thể hàm chuyển đổi (Transfer Function) Hình Mối quan hệ việc kích hoạt từ bên kết ngõ Việc lựa chọn Transfer Function có tác động lớn đến kết NN Hàm chuyển đổi phi tuyến sử dụng phổ biến NN sigmoid (logical activation) function YT = 1/(1 + e-Y) Trong : YT: Hàm chuyển đổi Y: Hàm tổng Kết Sigmoid Function thuộc khoảng [0,1] nên cịn gọi hàm chuẩn hóa (Normalized Function) Kết xử lý Nơron (Output) lớn, transfer function sử dụng để xử lý output trước chuyển đến layer Đôi thay sử dụng Transfer Function người ta sử dụng giá trị ngưỡng (Threshold value) để kiểm soát output Nơron layer trước chuyển output đến Layer Nếu output nơron nhỏ giá trị ngưỡng khơng chuyển đến Layer Phương pháp: Cần xác định số lớp mạng: Ở ta sử dụng mô hình neural có lớp vào lớp ẩn lớp ngõ Tại lớp vào bao gồm nút tương đương với đặc trưng loại hoa Tại lớp ẩn bao gồm nút Riêng lớp ngõ cần nhận biết loại hoa nên ta cần nút Lấy tham số tượng trưng cho đặc trưng loại hoa lệnh: x1=xlsread('inis_flower.xls','sheet1','B1:B70'); x2=xlsread('inis_flower.xls','sheet1','C1:C70'); d1=xlsread('inis_flower.xls','sheet1','G1:G70'); Sau đó, cần tạo trọng số random điều chỉnh tốc độ học cho chương trình lệnh: w10 = rand(2,2); w21 = rand(1,2); eta=0.01; mse=1; ite=0; e=[]; Tìm ngõ vào lớp ẩn cơng thức: net11=w10(1,1)*x1(p)+w10(1,2)*x2(p); net12=w10(2,1)*x1(p)+w10(2,2)*x2(p); Tìm ngõ lớp ẩn cơng thức: x11=sigf(net11); x12=sigf(net12); Tìm ngõ vào lớp cơng thức: net21=w21(1)*x11+w21(2)*x12; Tìm ngõ lớp cơng thức: o1=sigf(net21); Tiếp theo cần cập nhật lại trọng số lớp ngõ ra: dw21(1)=eta*(d1(p)-o1)*o1*(1-o1)*x11; dw21(2)=eta*(d1(p)-o1)*o1*(1-o1)*x12; w21=w21+dw21; Sau cần cập nhật lại trọng số lớp ngõ vào lớp ẩn: dw10(1,1)=eta*(d1(p)-o1)*o1*(1-o1)*w21(1)*x11*(1-x11)*x1(p); dw10(1,2)=eta*(d1(p)-o1)*o1*(1-o1)*w21(1)*x11*(1-x11)*x2(p); dw10(2,1)=eta*(d1(p)-o1)*o1*(1-o1)*w21(2)*x12*(1-x12)*x1(p); dw10(2,2)=eta*(d1(p)-o1)*o1*(1-o1)*w21(2)*x12*(1-x12)*x2(p); w10=w10+dw10; e(p)= abs(o1-d1(p)); Cuối sau training cho máy học đến kết độ xác trả đạt giá trị 0.01 (độ xác tối thiểu cần để nhận biết loại hoa độ chênh lệch đặc trưng hay tham số hoa có độ chênh lệch 0.1) thực chạy code testing để xem kết việc training có cho kết hay không dựa theo số liệu người dùng chọn: x1=5.2; x2=2.7; Kết quả: Inis Flower Versicolor! e = 87.3143 acc = 12.6857 BÀI 2: ĐÁNH GIÁ HỆ THỐNG PHÂN LỚP Vấn đề: Sau xây dựng mơ hình đó, ta cần phải xét đến viếc đánh giá mơ hình so với mơ hình tương tự khác có hoạt động Những điều quan tâm đến mơ hình khả hoạt động có xác, có nhanh hay ổn định hay khơng Có nhiều phương pháp để đánh giá mơ hình Ví dụ Accuracy, Confusion Matrix, ROC curve, Area Under the Curve, Precision and Recall, F1 score, Top R error, etc.,… Trong báo cáo xem xét chạy mô vấn đề liên quan đến Accuracy Confusion Matrix Đây phương pháp đơn giản để đánh giá hệ thống phân lớp Accuracy đơn giản tính tỉ lệ số điểm dự đoán tổng số điểm tập liệu kiểm thử Trong ví dụ này, ta đếm có điểm liệu dự đoán tổng số 10 điểm Vậy ta kết luận độ xác mơ hình 0.6 (hay 60%) Để ý toán với class, nên độ xác nhỏ khoảng 1/3, tất điểm dự đoán thuộc vào class from future import print_function import numpy as np def acc(y_true, y_pred): correct = np.sum(y_true == y_pred) return float(correct)/y_true.shape[0] y_true = np.array([0, 0, 0, 0, 1, 1, 1, 2, 2, 2]) y_pred = np.array([0, 1, 0, 2, 1, 1, 0, 2, 1, 2]) print('accuracy = ', acc(y_true, y_pred)) accuracy = 0.6 Và cách tính thư viên: from sklearn.metrics import accuracy_score print('accuracy = ',accuracy_score(y_true, y_pred)) accuracy = 0.6 Cách tính sử dụng accuracy cho biết phần trăm lượng liệu phân loại mà không cụ thể loại phân loại nào, lớp phân loại nhiều nhất, liệu thuộc lớp thường bị phân loại nhầm vào lớp khác Để đánh giá giá trị này, sử dụng ma trận gọi confusion matrix Về bản, confusion matrix thể có điểm liệu thực thuộc vào class, dự đoán rơi vào class Để hiểu rõ hơn, xem bảng đây: Total: 10 | Predicted | Predicted | Predicted | | as: | as: | as: | -| -| -| -| True: | | | | -| -| -| -| True: | | | | -| -| -| -| True: | | | | 10 -| -| -| -| - Có tổng cộng 10 điểm liệu Chúng ta xét ma trận tạo giá trị vùng 3x3 trung tâm bảng Ma trận thu được gọi confusion matrix Nó ma trận vng với kích thước chiều số lượng lớp liệu Giá trị hàng thứ i, cột thứ j số lượng điểm lẽ thuộc vào class i lại dự đoán thuộc vào class j Như vậy, nhìn vào hàng thứ (0), ta thấy số bốn điểm thực thuộc lớp 0, có hai điểm phân loại đúng, hai điểm lại bị phân loại nhầm vào lớp lớp Chú ý: Có số tài liệu định nghĩa ngược lại, tức giá trị cột thứ i, hàng thứ j số lượng điểm lẽ thuộc vào class i lại dự đốn thuộc vào class j Khi ta confusion matrix ma trận chuyển vị confusion matrix cách làm Tôi chọn cách cách thư viện sklearn sử dụng Chúng ta suy tổng phần tử tồn ma trận số điểm tập kiểm thử Các phần tử đường chéo ma trận số điểm phân loại lớp liệu Từ suy accuracy tổng phần tử đường chéo chia cho tổng phần tử tồn ma trận Đoạn code mơ tả cách tính confusion matrix: 11 def my_confusion_matrix(y_true, y_pred): 12 N = np.unique(y_true).shape[0] # number of classes 13 cm = np.zeros((N, N)) 14 for n in range(y_true.shape[0]): 15 16 cm[y_true[n], y_pred[n]] += return cm 17 18 cnf_matrix = my_confusion_matrix(y_true, y_pred) 19 print('Confusion matrix:') 20 print(cnf_matrix) 21 print('\nAccuracy:', np.diagonal(cnf_matrix).sum()/cnf_matrix.sum()) 22 23 Confusion matrix: 24 [[ 1.] 25 [ 0.] 26 [ 2.]] 27 28 Accuracy: 0.6 Cách biểu diễn confusion matrix gọi unnormalized confusion matrix, tức ma confusion matrix chưa chuẩn hố Để có nhìn rõ hơn, ta dùng normalized confuion matrix, tức confusion matrix chuẩn hố Để có normalized confusion matrix, ta lấy hàng unnormalized confusion matrix chia cho tổng phần tử hàng Như vậy, ta có nhận xét tổng phần tử hàng normalized confusion matrix Điều thường không cột Dưới cách tính normalized confusion matrix: 29 normalized_confusion_matrix = cnf_matrix/cnf_matrix.sum(axis = 1, keepd ims = True) 30 print('\nConfusion matrix (with normalizatrion:)') 31 print(normalized_confusion_matrix) 32 Confusion matrix (with normalizatrion:) 33 [[ 0.5 0.25 0.25 ] 0.66666667 ] 34 [ 0.33333333 35 [ 0.0.33333333 0.66666667]] Và cách tính sử dụng thư viện: 36 from sklearn.metrics import confusion_matrix 37 cnf_matrix = confusion_matrix(y_true, y_pred) 38 print('Confusion matrix:') 39 print(cnf_matrix) 40 Confusion matrix: 41 [[2 1] 10 42 [1 0] 43 [0 2]] Phương pháp: Hình Minh hoạ unnormalized confusion matrix normalized confusion matrix Với toán với nhiều lớp liệu, cách biểu diễn màu hữu ích Các màu đậm thể giá trị cao Một mơ hình tốt cho confusion matrix có phần tử đường chéo có giá trị lớn, phần tử cịn lại có giá trị nhỏ Nói cách khác, biểu diễn màu sắc, đường chéo có màu đậm so với phần cịn lại tốt Từ hai hình ta thấy confusion matrix chuẩn hố mang nhiều thơng tin Sự khác thấy ô bên trái Lớp liệu phân loại khơng thực tốt unnormalized confusion matrix, có màu đậm hai cịn lại đường chéo Kết quả: 11 12 BÀI 3: PHƯƠNG PHÁP PCA Vấn đề: PCA (Principle Components Analysic) thuật toán dưoc sử dụng để tạo änh từ ảnh ban đầu Anh có kích thước nhỏ nhiều so với ảnh ban dầu vân mang dặc trưng ảnh cần nhận dạng PCA không cấn quan tâm đến việc tìm đặc điểm cụ thể thực thể cần nhận dạng mối quan hệ đặc điểm Tất chi tiết thể ảnh dược tạo từ PCA Về bàn chất, PCA tìm khơng gian theo hướng biến thiên mạnh tập hợp vector không gian cho trước Trong không gian mới, người ta hi vọng việc phân loại mang lại kết tốt so với không gian ban đầu Phương pháp: Cấu trúc hệ thống nhận dạng mặt người thể sau: Hình Cấu trúc tổng quát hệ thống nhận dạng khuôn mặt người Face detection (Phát khuôn mặt): Ảnh đầu vào ảnh chứa đối tượng gồm nhiều người, với gương mặt chinh diện tương đối chinh diện để hệ thống phát Sau phát ví trí kích thước nhiều khn mặt, khn hình chứa mặt cắt để tiến hanh trình tiền xử lý Preprocessing (Tiền xử lý): Khối tiền xử lý xử lý khuôn ảnh chứa mặt,chuẩn hóa kích thước ảnh sở liệu ảnh cần nhận dạng kích thước định trước, làm giảm nhiễu, điều chỉnh độ sáng tối làm tăng chất lượng ảnh thuận tiện cho q trình trích thuộc tính đc chinh xác dễ dàng 13 Feature extraction (Trích chọn đặc trưng): Tìm đặc trưng ảnh mặt, từ đặc trưng hình thành vector đặc trưng,các vector sử dụng để đối sánh giống ảnh mặt cần tìm ảnh mặt CSDL Recognition (Nhận dạng): Bước thực việc so sánh cáccvector đặc trưng để chọn độ tương tự ảnh cần tìm ảnh CSDL 14 Kết quả: Ta thấy sai số nhỏ 0,000993s với tốc độ học nhanh Ngoài ra, cần học 250 xong 15 Đây kết trả nhận diện Khi không nằm tập tin học cho kết khơng xác định 16 BÀI 4: NHẬN DIỆN ẢNH BẰNG CNN Vấn đề: Convolutional Neural Networks (CNN) mô hình deep learning phổ biến có ảnh hưởng nhiều cộng đồng Computer Vision CNN dùng trong nhiều toán nhân dạng ảnh, phân tích video, ảnh MRI, cho lĩnh vự xử lý ngôn ngữ tự nhiên,và hầu hết giải tốt toán Phương pháp: Chúng ta tạo tệp hình ảnh đối tượng cụ thể cho máy tự động qt xem tất tệp hình ảnh Từ đó, máy tính chọn hình ảnh để học phân tích đặc điểm hình ảnh hình dạng, độ sáng, … Ta sử dụng mạng CNN với thông số sau Hàm model = Sequential(): để nói cho keras ta xếp layer lên để tạo model Ví dụ input -> CONV -> POOL -> CONV -> POOL -> FLATTEN -> FC -> OUTPUT Lớp Convolutional với 32 kernel, với kích thước 3*3, sử dụng hàm kích hoạt relu Thêm hàm Convolutional với thông số tương tự Hàm MaxPooling2D với kích thước hàm pool 2*2 Hàm Dropout với xác suất 25% Hai Lớp Convolutional với 64 kernel, với kích thước 3*3, sử dụng hàm kích hoạt relu Hàm Flatten dùng để chuyển tensor sang vector Kết quả: Tập liệu gồm: loại trái có tổng cộng 2301 hình ảnh lấy 576 hình dùng để train cho hệ thống Tập test liệu gồm: 25 hình ảnh Các thơng số sử dụng mơ hình gồm: sai số training (train_loss), độ xác (train_acc), giá trị sai số (val_loss), giá trị xác (val_acc) Số chu kỳ học: 10 lần Tốc độ học: 0.001s [INFO] evaluating network precision recall f1-score support Apple Red Yellow 1.00 1.00 1.00 136 Banana 1.00 1.00 1.00 94 Carambula 1.00 1.00 1.00 97 Kaki 1.00 1.00 1.00 95 Walnut 1.00 1.00 1.00 154 accuracy 1.00 576 macro avg 1.00 1.00 1.00 576 weighted avg 1.00 1.00 1.00 576 Nhận xét: 17 Độ xác cao với thơng số xác 99,74% Giá trị xác đạt mức Giá trị sai số training xong 1.5780e-05 cho thấy giá trị sai số nhỏ Kết quả: 18 Tốc độ nhận biết nhanh 0.005~0.008 giây cho hình Nhận biết hết hình trái Banana, Kaki, Walnut 19 Các trái lại nhận biết sai trái Chestnut không nhận hình nào, trái apple red yellow nhận biết hình Tăng chu kỳ học học tăng chu kỳ học dẫn đến học sai lần thứ 18, hệ thống kh6ong học Hệ thống cho độ xác cao cho chạy tập test thử khơng nhận biết so với kết train cho thấy hệ thống chưa đủ tin cậy việc học nhận biết hình ảnh, với loại trái có kiểu dáng hình dạng gần hệ thống dễ nhận biết sai Hệ thống cho độ xác cao cho chạy tập test thử khơng nhận biết so với kết train cho thấy hệ thống chưa đủ tin cậy việc học nhận biết hình ảnh, với loại trái có kiểu dáng hình dạng gần hệ thống dễ nhận biết sai 20 BÀI 5: REINFORCEMENT Q-LEARNING Vấn đề: Liên quan đến RL khơng thể khơng nói đến lĩnh vực game robot Học tăng cường (Reinforcement Learning-RL) ba kiểu học máy bên cạnh học giám sát (Supervised Learning) học không giám sát (Unsupervised Learning) Bản chất RL trial-and-error, nghĩa thử thử lại rút kinh nghiệm sau lần thử Gần đây, RL đạt thành tựu đáng kể thuật toán DeepMind (AlphaGo, AlphaZero, AlphaStar, ) chiến thắng áp đảo tuyển thủ giới trò chơi mà người nghĩ máy móc khơng vượt mặt cờ vây hay StarCraft Nói robot, RL hỗ trợ nhiều lĩnh vực Ví dụ, robot biết đường khỏi mê cung với đường nhanh RL phương pháp tốt để dạy cho robot Lại nói RL gồm khái niệm chính: Agent, Environment, State, Action, Reward, Episode, Policy Phương pháp: Để dễ hiểu hơn, lấy ví dụ robot tìm đường hình dưới: Nhiệm vụ robot - Agent - đến đích màu xanh, tránh phạt màu đỏ ô xám chướng ngại vật không phép vào Agent tương tác với Environment Actions trái/ phải/ lên/ xuống Sau action, environment trả lại cho agent State (ở ví dụ vị trí robot) Reward tương ứng với state (+1 vào xanh, -1 vào ô đỏ ô trắng) Khi agent đến ô xanh đỏ trò chơi kết thúc; loạt tương tác agent environment từ thời điểm bắt đầu đến lúc gọi Episode Trong episode, agent cố gắng chọn actions tối ưu để 21 tối đa hóa reward nhận sau episode Cách mà agent chọn actions Policy; ví dụ: "đi ngẫu nhiên", "đi men theo rìa" "hướng đích" Có thể thấy policy có policy policy kia; mục đích RL tìm policy tốt Hình mô tả tương tác Agent - Environment: Công thức tính Q: Q(state, action) = R(state,action) + Gamma*Max[Q(next state, all actions)] Trong báo cáo sử dụng code để tìm đường cho ong người có tìm đến ngược lại để ong khỏi khói người Kết quả: Người tìm tới ong: 22 [[0 64 [51 [0 64 [0 [0 [0 64 [0 [0 [0, 1, 2, 7] 80 80 0 80 Ong trốn khỏi người: [[0 64 [51 80 [0 64 [0 80 [0 0 [0 64 [0 0 [0 80 [7, 2, 3] 0 64 0 0 0 0 0 41 0 51 0 51 51 0 0 0 41 0 0.] 0.] 100.] 0.] 0.] 0.] 0.] 100.]] 0 100 100 0 0 0 0 41 0 51 0 51 51 0 0 0 41 0 0.] 0.] 64.] 0.] 0.] 0.] 0.] 0.]] 23 24 ... dw10 (1, 1)=eta*(d1(p)-o1)*o1* (1- o1)*w 21( 1)*x 11* (1- x 11) *x1(p); dw10 (1, 2)=eta*(d1(p)-o1)*o1* (1- o1)*w 21( 1)*x 11* (1- x 11) *x2(p); dw10(2 ,1) =eta*(d1(p)-o1)*o1* (1- o1)*w 21( 2)*x12* (1- x12)*x1(p); dw10(2,2)=eta*(d1(p)-o1)*o1* (1- o1)*w 21( 2)*x12* (1- x12)*x2(p); w10=w10+dw10;... dw 21( 1)=eta*(d1(p)-o1)*o1* (1- o1)*x 11; dw 21( 2)=eta*(d1(p)-o1)*o1* (1- o1)*x12; w 21= w 21+ dw 21; Sau cần cập nhật lại trọng số lớp ngõ vào lớp ẩn: dw10 (1, 1)=eta*(d1(p)-o1)*o1* (1- o1)*w 21( 1)*x 11* (1- x 11) *x1(p);... độ học cho chương trình lệnh: w10 = rand(2,2); w 21 = rand (1, 2); eta=0. 01; mse =1; ite=0; e=[]; Tìm ngõ vào lớp ẩn cơng thức: net 11= w10 (1, 1)*x1(p)+w10 (1, 2)*x2(p); net12=w10(2 ,1) *x1(p)+w10(2,2)*x2(p);