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
Trang 1TRƯỜ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
Khoá: 16 Nga ̀nh: Công nghệ kỹ thuật Điện tử - Truyền thông
Tp Hồ Chí Minh, tháng 11 năm 2019
Trang 2MỤ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
Trang 3BÀI 1: MẠNG NEURAL
1 Vấn đề:
Cần nhận biết 2 loại hoa bằng mạng neural dựa theo 2 đặc trưng của loại hoa đó, dựa theo cấu trúc mạng neural viết chương trình sao cho máy tính có thể nhận biết được và phân loại 2 loại hoa đó
Mạng nơ-ron nhân tạo (Neural Network - NN) là một mô hình lập trình rất đẹp lấy cảm hứng từ mạng nơ-ron thần kinh Kết hợp với các kĩ thuật học sâu (Deep Learning - DL), NN đang trở thành một công cụ rất mạnh mẽ mang lại hiệu quả tốt nhất cho nhiều bài toán khó như nhận dạng ảnh, giọng nói hay xử lý ngôn ngữ tự nhiên Kiến trúc chung của một mạng nơron nhân tạo (NN) gồm 3 thành phần đó là: Input Layer, Hidden Layer và Output Layer
Hình 1 Mô phỏng mạng Neural
Trang 4Trong đó các Processing Elements (PE) của NN gọi là Nơron, mỗi
Nơron nhận các dữ liệu vào (Inputs) xử lý chúng và cho ra một kết quả (Output)
duy nhất Kết quả xử lý của một Nơron có thể làm Input cho các Nơron khác
- Quá trình xử lý thông tin của một NN:
Hình 2 Sơ đồ khối quá trình xử lý thông tin của một mạng Neural
+ Inputs (dữ liệu vào): Mỗi Input tương ứng với 1 thuộc tính (attribute) của
dữ liệu (patterns)
+ Output (kết quả): Kết quả của một NN là một giải pháp cho một vấn đề
+ Connection Weights (Trọng số liên kết) : Đây là thành phần rất quan trọng
của một NN, nó thể hiện mức độ quan trọng (độ mạnh) của dữ liệu đầu vào đối với
quá trình xử lý thông tin (quá trình chuyển đổi dữ liệu từ Layer này sang layer
khác) Quá trình học (Learning Processing) của NN thực ra là quá trình điều chỉnh
các trọng số (Weight) của các input data để có được kết quả mong muốn
+ Summation Function (Hàm tổng): Tính tổng trọng số của tất cả các input
được đưa vào mỗi Nơron (phần tử xử lý PE) Hàm tổng của một Nơron đối với n
input được tính theo công thức sau:
+ Transfer Function (Hàm chuyển đổi): Hàm tổng (Summation Function)
của một Nơron cho biết khả năng kích hoạt (Activation) của Nơron đó còn gọi là
kích hoạt bên trong (internal activation) Các Nơron này có thể sinh ra một output
hoặc không trong NN (nói cách khác rằng có thể output của 1 Nơron có thể được
chuyển đến layer tiếp trong mạng Nơron hoặc không) Mối quan hệ giữa Internal
Activation và kết quả (output) được thể hiện bằng hàm chuyển đổi (Transfer
Function)
Trang 5Hình 3 Mối quan hệ giữa việc kích hoạt từ bên trong và kết quả ngõ ra Việc lựa chọn Transfer Function có tác động lớn đến kết quả của NN Hàm chuyển đổi phi tuyến được sử dụng phổ biến trong NN là sigmoid (logical activation) function
2 Phương pháp:
Cần xác định số lớp của mạng:
Ở đây ta sử dụng mô hình neural có 1 lớp vào 1 lớp ẩn và 1 lớp ngõ ra
Tại lớp vào bao gồm 2 nút tương đương với 2 đặc trưng của loại hoa đó
Trang 6e(p)= abs(o1-d1(p));
Cuối cùng sau khi training cho máy học đến khi kết quả độ chính xác trả về đạt giá trị là 0.01 (độ chính xác tối thiểu cần để nhận biết đúng 2 loại hoa vì
độ chênh lệch giữa các đặc trưng hay các tham số của hoa có độ chênh lệch
là 0.1) rồi thực hiện chạy code testing để xem kết quả của việc training có cho ra kết quả đúng hay không dựa theo số liệu người dùng chọn:
x1=5.2;
x2=2.7;
3 Kết quả:
Trang 7Inis Flower Versicolor!
e = 87.3143 acc = 12.6857
Trang 8BÀI 2: ĐÁNH GIÁ HỆ THỐNG PHÂN LỚP
1 Vấn đề:
Sau khi xây dựng một mô hình nào đó, ta cần phải xét đến viếc đánh giá mô hình đó so với các mô hình tương tự khác có hoạt động như thế nào Những điều chúng ta quan tâm đến một mô hình đó là khả năng hoạt động có chính xác, có nhanh hay ổn định hay không
Có rất nhiều phương pháp để đánh giá một mô hình Ví dụ như Accuracy, Confusion Matrix, ROC curve, Area Under the Curve, Precision and Recall, F1 score, Top R error, etc.,… Trong bài báo cáo này chúng ta sẽ xem xét và chạy mô phỏng các vấn đề liên quan đến Accuracy và Confusion Matrix Đây là 2 phương pháp đơn giản nhất để đánh giá một hệ thống phân lớp
Accuracy đơn giản tính tỉ lệ giữa số điểm được dự đoán đúng và tổng số điểm trong tập dữ liệu kiểm thử
Trong ví dụ này, ta có thể đếm được có 6 điểm dữ liệu được dự đoán đúng trên tổng số 10 điểm Vậy ta kết luận độ chính xác của mô hình là 0.6 (hay 60%)
Để ý rằng đây là bài toán với chỉ 3 class, nên độ chính xác nhỏ nhất đã là khoảng 1/3, khi tất cả các điểm được dự đoán là thuộc vào một class nào đó
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à đây là cách tính bằng 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 như ở trên chỉ cho chúng ta biết được bao nhiêu phần trăm lượng dữ liệu được phân loại đúng mà không chỉ ra được cụ thể mỗi loại được phân loại như thế nào, lớp nào được phân loại đúng nhiều nhất, và dữ liệu thuộc lớp nào thường bị phân loại nhầm vào lớp khác Để có thể đánh giá được
các giá trị này, chúng ta sử dụng một ma trận được gọi là confusion matrix
Trang 9Về cơ bản, confusion matrix thể hiện có bao nhiêu điểm dữ liệu thực
sự thuộc vào một class, và được dự đoán là rơi vào một class Để hiểu rõ hơn, hãy
xem bảng dưới đây:
2 Total: 10 | Predicted | Predicted | Predicted |
3 | as: 0 | as: 1 | as: 2 |
Ma trận thu được được gọi là confusion matrix Nó là một ma trận vuông
với kích thước mỗi chiều bằng số lượng lớp dữ liệu Giá trị tại hàng thứ i, cột thứ j là số lượng điểm lẽ ra thuộc vào class i nhưng lại được dự đoán là thuộc vào class j Như vậy, nhìn vào hàng thứ nhất (0), ta có thể thấy được rằng trong số bốn điểm thực sự thuộc lớp 0, chỉ có hai điểm được phân loại đúng, hai điểm còn lại bị phân loại nhầm vào lớp 1 và lớp 2
Chú ý: Có một số tài liệu định nghĩa ngược lại, tức giá trị tại cột thứ i, hàng thứ j là số lượng điểm lẽ ra thuộc vào class i nhưng lại được dự đoán là thuộc vào class j Khi đó ta sẽ được confusion matrix là ma trận chuyển vị của confusion matrix như cách tôi đang làm Tôi chọn cách này vì đây chính là cách thư viện sklearn sử dụng
Chúng ta có thể suy ra ngay rằng tổng các phần tử trong toàn ma trận này chính là số điểm trong tập kiểm thử Các phần tử trên đường chéo của ma trận là
số điểm được phân loại đúng của mỗi lớp dữ liệu Từ đây có thể suy
ra accuracy chính bằng tổng các phần tử trên đường chéo chia cho tổng các phần
tử của toàn ma trận Đoạn code dưới đây mô tả cách tính confusion matrix:
12 N = np.unique(y_true).shape[ 0 ] # number of classes
Trang 1018 cnf_matrix = my_confusion_matrix(y_true, y_pred)
19 print( 'Confusion matrix:' )
ta có thể dùng normalized confuion matrix, tức confusion matrix được chuẩn hoá
Để có normalized confusion matrix, ta lấy mỗi hàng của unnormalized confusion matrix sẽ được chia cho tổng các phần tử trên hàng đó Như vậy, ta có nhận xét rằng tổng các phần tử trên một hàng của normalized confusion matrix luôn bằng 1 Điều này thường không đúng trên mỗi cột Dưới đây là cách tính normalized confusion matrix:
29 normalized_confusion_matrix = cnf_matrix/cnf_matrix.sum(axis = 1 , keepd ims = True)
30 print( \n Confusion matrix (with normalizatrion:)' )
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 1]
Trang 11đã chuẩn hoá mang nhiều thông tin hơn Sự khác nhau được thấy ở ô trên cùng bên trái Lớp dữ liệu 0 được phân loại không thực sự tốt nhưng trong unnormalized confusion matrix, nó vẫn có màu đậm như hai ô còn lại trên đường chéo chính
3 Kết quả:
Trang 13BÀI 3: PHƯƠNG PHÁP PCA
1 Vấn đề:
PCA (Principle Components Analysic) là một thuật toán dưoc sử dụng để tạo ra một änh mới từ ảnh ban đầu Anh mới này có kích thước nhỏ hơn nhiều so với ảnh ban dầu nhưng vân mang những dặc trưng cơ bản nhất của ảnh cần nhận dạng PCA không cấn quan tâm đến việc tìm ra các đặc điểm cụ thể của thực thể cần nhận dạng và mối quan hệ giữa các đặc điểm đó Tất cả các chi tiết đó đều được thể hiện ở ảnh mới dược tạo ra từ PCA Về bàn chất, PCA tìm ra một không gian mới theo hướng biến thiên mạnh nhất của một tập hợp các vector trong không gian cho trước Trong không gian mới, người ta hi vọng rằng việc phân loại sẽ mang lại kết quả tốt hơn so với không gian ban đầu
2 Phương pháp:
Cấu trúc của hệ thống nhận dạng mặt người được thể hiện như sau:
Hình 5 Cấu trúc tổng quát của hệ thống nhận dạng khuôn mặt người
Face detection (Phát hiện khuôn mặt):
Ảnh đầu vào là ảnh chứa đối tượng gồm một hoặc nhiều người, với gương mặt chinh diện hoặc tương đối chinh diện để hệ thống có thể phát hiện Sau khi phát hiện được ví trí và kích thước của một hoặc nhiều khuôn mặt, những khuôn hình chứa mặt sẽ được cắt ra để tiến hanh quá trình tiền xử lý
Preprocessing (Tiền xử lý):
Khối tiền xử lý sẽ xử lý những khuôn ảnh chứa mặt,chuẩn hóa kích thước ảnh trong cơ sở dữ liệu và ảnh cần nhận dạng cùng một 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 quá trình trích thuộc tính đc chinh xác và dễ dàng hơn
Trang 14Feature extraction (Trích chọn đặc trưng):
Tìm ra các đặc trưng chính của ảnh mặt, từ các đặc trưng này hình thành các vector đặc trưng,các vector này sẽ được sử dụng để đối sánh sự giống nhau giữa ảnh mặt cần tìm và ảnh mặt trong CSDL
Recognition (Nhận dạng):
Bước này thực hiện việc so sánh giữa cáccvector đặc trưng để chọn ra độ tương tự giữa ảnh cần tìm và ảnh trong CSDL
Trang 153 Kết quả:
Ta thấy sai số nhỏ nhất là 0,000993s với tốc độ học rất nhanh Ngoài ra, chỉ cần học 250 là xong
Trang 16Đây là kết quả trả về khi nhận diện đúng
Khi không nằm trong tập tin được học thì cho ra kết quả là không xác định
Trang 17BÀI 4: NHẬN DIỆN ẢNH BẰNG CNN
1 Vấn đề:
Convolutional Neural Networks (CNN) là một trong những mô hình deep learning phổ biến nhất và có ảnh hưởng nhiều nhất trong cộng đồng Computer Vision CNN được dùng trong trong nhiều bài toán như nhân dạng ảnh, phân tích video, ảnh MRI, hoặc cho bài các bài của lĩnh vự xử lý ngôn ngữ tự nhiên,và hầu hết đều giải quyết tốt các bài toán này
2 Phương pháp:
Chúng ta tạo ra các tệp hình ảnh về các đối tượng cụ thể sao đó cho máy tự động quét xem tất cả các tệp hình ảnh đó Từ đó, máy tính sẽ chọn ra hình ảnh để học và phân tích các đặc điểm của hình ảnh như hình dạng, độ sáng, …
Ta sử dụng mạng CNN với các thông số sau
Hàm model = Sequential(): để nói cho keras là ta sẽ xếp các layer lên nhau
để tạo model Ví dụ input -> CONV -> POOL -> CONV -> POOL -> FLATTEN -> FC -> OUTPUT
Lớp Convolutional đầu tiên với 32 kernel, với kích thước 3*3, sử dụng hàm kích hoạt relu
Thêm 1 hàm Convolutional với các 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 là 25%
Hai Lớp Convolutional tiếp theo 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
[INFO] evaluating network
precision recall f1-score support
Apple Red Yellow 2 1.00 1.00 1.00 136
Trang 18 Độ chính xác cao với thông số chính xác là 99,74%
Giá trị chính xác đều đạt mức 1
Giá trị sai số khi training xong là 1.5780e-05 cho thấy giá trị sai số rất nhỏ Kết quả:
Trang 19 Tốc độ nhận biết nhanh cứ mỗi 0.005~0.008 giây cho mỗi hình
Nhận biết đúng hết 5 hình trái Banana, Kaki, Walnut
Trang 20 Các trái còn lại đều nhận biết sai nhất là trái Chestnut là không nhận ra hình nào, trái apple red yellow nhận biết đúng 1 hình
Tăng chu kỳ học có thể học được đúng hơn nhưng tăng chu kỳ học có thể dẫn đến học sai như lần thứ 18, hệ thống kh6ong học được
Hệ thống tuy cho ra độ chính xác cao nhưng khi cho chạy tập test thử thì không nhận biết đúng so với kết quả train cho thấy hệ thống chưa đủ tin cậy trong việc học và nhận biết hình ảnh, với các loại trái cây có kiểu dáng và hình dạng gần như nhau thì hệ thống rất dễ nhận biết sai
Hệ thống tuy cho ra độ chính xác cao nhưng khi cho chạy tập test thử thì không nhận biết đúng so với kết quả train cho thấy hệ thống chưa đủ tin cậy trong việc học và nhận biết hình ảnh, với các loại trái cây có kiểu dáng và hình dạng gần như nhau thì hệ thống rất dễ nhận biết sai
Trang 21BÀI 5: REINFORCEMENT Q-LEARNING
1 Vấn đề:
Liên quan đến RL thì chúng ta không thể không nói đến lĩnh vực game và robot Học tăng cường (Reinforcement Learning-RL) là một trong ba kiểu học máy chính bên cạnh học giám sát (Supervised Learning) và học không giám sát (Unsupervised Learning) Bản chất của RL là trial-and-error, nghĩa là thử đi thử lại và rút ra kinh nghiệm sau mỗi lần thử như vậy Gần đây, RL đã đạt được những thành tựu đáng kể khi các thuật toán của DeepMind (AlphaGo, AlphaZero, AlphaStar, ) đã chiến thắng áp đảo các tuyển thủ thế giới trong những trò chơi
mà con người đã từng nghĩ rằng máy móc sẽ không bao giờ có thể vượt mặt như
cờ vây hay StarCraft
Nói về robot, thì RL hỗ trợ rất nhiều trong lĩnh vực này Ví dụ, để cho một chú robot có thể biết đường thoát khỏi một mê cung với con đường nhanh nhất thì
RL là phương pháp tốt nhất để dạy cho chú robot này Lại nói về RL thì gồm 7
khái niệm chính: Agent, Environment, State, Action, Reward, Episode, Policy
2 Phương pháp:
Để dễ hiểu hơn, mình sẽ lấy ví dụ về một con robot tìm đường như hình dưới:
Nhiệm vụ của con robot - Agent - là đi đến ô đích màu xanh, tránh ô phạt màu đỏ và ô xám là chướng ngại vật không được phép đi vào Agent tương tác với Environment bằng các Actions trái/ phải/ lên/ xuống Sau mỗi action, environment trả lại cho agent một State (ở ví dụ này là vị trí của robot)
và Reward tương ứng với state đó (+1 nếu đi vào xanh, -1 nếu đi vào ô đỏ và 0 nếu
ở ô trắng) Khi agent đến ô xanh hoặc đỏ trò chơi kết thúc; một loạt các tương tác giữa agent và environment từ thời điểm bắt đầu đến lúc này được gọi là một Episode Trong một episode, agent sẽ cố gắng chọn ra các actions tối ưu để
Trang 22tối đa hóa reward nhận được sau mỗi episode Cách mà agent chọn những actions
đó là Policy; ví dụ: "đi ngẫu nhiên", "đi men theo rìa" hoặc "hướng về ô đích" Có thể thấy policy cũng có policy này và policy kia; mục đích của RL là tìm ra policy tốt nhất Hình dưới đây mô tả tương tác giữa Agent - Environment: