HOMEWORK môn học TRÍ TUỆ NHÂN TẠO TRONG ĐIỀU KHIỂN (AI) ĐH Bách Khoa ĐHQGTPHCM của thầy Phạm Việt Cường. Homework gồm 19 bài được thực hiện trong xuyên suốt quá trình học môn Trí tuệ nhân tạo trong điều khiển. Các bài được trình bày bao gồm đầy đủ cơ sở lý thuyết, thuật toán, code và kết quả của giải thuật
TRƯỜNG ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆN – ĐIỆN TỬ HOMEWORK TRÍ TUỆ NHÂN TẠO TRONG ĐIỀU KHIỂN GVHD: Thầy Phạm Việt Cường HỌC KỲ 221, NĂM HỌC 2022-2023 TP HỒ CHÍ MINH, THÁNG 12 NĂM 2022 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG MỤC LỤC HW Write a program implementing perceptron learning algorithm Lý thuyết Mô huấn luyện Perceptron Python HW Compare mean squared error and mean absolute error 13 HW Write a program implementing feature nomalization Find and demonstrate a real world example 14 I Công thức Feature Normalize 14 Feature Scaling 14 Mean Normalize 15 Trả kết 16 II Áp dụng vào ví dụ thức tế 16 Load data 16 Normalize data 17 Train data 17 Predict kết 17 HW Write a program implementing linear regression algorithm solving a freely chosen problem 19 Chương trình linear regression 19 Chuẩn bị liệu 19 Chọn phương pháp phù hợp 19 Chọn mơ hình 19 Kiểm tra chất lượng điều chỉnh mơ hình trang bị 20 HW I II Write a program implementing linear regression algorithm solving a freely chosen problem 26 Chương trình 26 Kết 27 Với số k nhỏ 27 Với số k lớn 28 HW I II Write a program inplementing k-means clustering algorithm solving a freely chosen problem 30 Chương trình 30 Kết 32 Dữ liệu chia thành nhóm 32 Tiếp tục với liệu khác 33 III HW Giải toán thực tế 36 Write a programe implementing K++ algorithm (centroid initialization only) 38 Lý thuyết 38 Viết chương trình ví dụ minh họa Python 39 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG HW I SVM, soft margin SVM, kernel SVM 46 Support Vector Machine 46 II Soft SVM 48 III Kernel SVM 55 Chương trình 55 Chương trình hồn chỉnh 57 Kết thực 58 HW Write a programe implementing Q learning algorithm solving a freely chosen problem (except the problem used as example in the lecture) 66 I Các bước thực 66 HW 10 I Gradient Descent 69 Lý thuyết 69 -dL/dW (the mean vector for batch and mini batch) is the direction of the steepest descent for batch gradient descent but that's not true for stochastic/mini batch gradient descent Why not? 69 Why is stochastic gradient descent better than batch gradient descent at avoiding local minimum? 69 Why is mini batch gradient descent the best among the three? 70 II Thực tính tốn 70 Tính tốn lí thuyết 70 Thực code matlab 73 2.1 Thực theo dE/dw 73 2.2 Numerical Derivative 75 2.3 Thực so sánh cách 76 HW 11 Write a program implementing gradient descent method Consider at least two non-convex twovariable functions f(x,y), multiple initial points and various learning rates 78 I Ví dụ 78 Chọn hàm 78 Tiến hành thực Gradient descent 78 Kết thực 79 II Ví dụ 81 Chọn hàm 81 Tiến hành thực Gradient descent 82 Kết thực 83 HW 12 Why local connectivity & shared weights? 85 HW 13 How many parameters (weights and biases) are there in AlexNet? 89 I II Tổng quan 89 Tính tốn thơng số AlexNet 89 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG Với lớp Convolutional 89 Với lớp Fully – connected đầu vào đầu Convolutional layer 91 Đối với lớp Fully-connected đầu vào Fully-connected 91 Tổng tham số AlexNet 91 HW 14 Compute top-1 & top-5 error rates for AlexNet and two other models Use at least classes with minimum 20 images per class 92 AlexNet 93 Sử dụng Squeezenet 96 Sử dụng Inceptionv3 99 HW 15 I Evaluate the performance of AlexNet using images with various aspect ratios 102 Phân loại AlexNet 102 Lật ảnh 103 Tỉ lệ khung hình thay đổi 103 Đặc điểm nhận dạng thay đổi 104 Trích xuất đặc trưng dùng AlexNet 105 II HW 16 I AlexNet transfer learning, at least classes with minimum 20 images per class 107 LÝ THUYẾT 107 Transfer learning 107 Lợi ích 107 Hạn chế 107 II THỰC HIỆN TRANSFER LEARNING TRÊN MATLAB 107 Tạo tập liệu 107 Tiến hành cấu trúc model 108 Kết train 109 Tiến hành thực tập test 109 Code 112 HW 17 RNN training by GA: language model - character level for one word (hello) and three words (e.g hello, green, start) Investigate the effect of changing hidden state h's size 114 I Yêu cầu 114 II Model hello 114 III Model Hello green start 116 Kích thước Ht 3x1 116 Kích thước ht x 118 Size ma trận ht 15x1 119 HW 18 For classification problems, why we use one-hot encoding instead of one output (e.g encoding classes as 1, 2, 3, 4) or binary encoding (e.g encoding classes as 00, 01, 10, 11)? 121 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG I Lý thuyết 121 Categorical Data 121 Encoding Categorical Data 121 2.1 Integer Encoding 121 2.2 One – Hot Encoding 122 II Thực hành 123 Ví dụ 123 OneHot Encoder Transform 124 HW 19 In LSTM, which part corresponds to long term memory and which part relates to short term memory? Why is the former able to deal with the long term dependency problem? 128 HW 20 I LSTM training by GA Similar to Hw 17 130 Yêu cầu 130 II Model hello 130 III Model Hello green start 134 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG HW Write a program implementing perceptron learning algorithm Lý thuyết Perceptron thuật toán Classification cho trường hợp đơn giản nhất: có class hoạt động trường hợp cụ thể Bài toán Perceptron phát biểu sau: Cho class gán nhãn, tìm đường thẳng cho toàn điểm thuộc class nằm phía, tồn điểm thuộc class nằm phía cịn lại đường thẳng Với giả định tồn đường thẳng Giả sử ta có tập liệu X1 X2 gán nhãn theo thứ tự “green” “red” Mô huấn luyện Perceptron Python Đọc liệu từ file CSV biểu diễn đồ thị def Read_Data(): df = pd.read_csv('D:\HCMUT\AI\HW\PLA.csv') plt.plot(df['X1'][1:12], df['X2'][1:12], 'go', color='green') plt.plot(df['X1'][12:], df['X2'][12:], 'gs', color='red') plt.xlabel('X1') # label x plt.ylabel('X2') # label y plt.show() return df BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG Hàm Read_Data(): trả df để lưu liệu Kết sau plot Tiến hành Perceptron Learning Algorithm Khởi tạo mảng X =[], thêm vào liệu cột X1, X2 X có dạng: [ [1, X1, X2] ] def PLA(data): X = [] for i in range(0, 22): X.append([1, data['X1'][i], data['X2'][i]]) Tạo W = [0, 0, 0] W = np.zeros(len(X[0])) Chọn miền hội tụ 400 Và tiến hành giải thuật PLA for i in range(400): for i in range(len(X)): if data['Class'][i] == and (W @ np.array(X[i])) < 0: W += X[i] if data['Class'][i] == and (W @ np.array(X[i])) >= 0: BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG W -= X[i] print("W =", W) sampleX = np.linspace(min(data['X1']) - 3, max(data['X1']) + 3, int((max(data['X1']) - min(data['X1']))*100)) sampleY = (-W[0] - W[1]*sampleX)/W[2] plt.plot(sampleX, sampleY, color='black') plt.plot(data['X1'][1:12], data['X2'][1:12], 'go', color='green') plt.plot(data['X1'][12:], data['X2'][12:], 'gs', color='red') plt.xlabel('X1') # label x plt.ylabel('X2') # label y plt.show() return W Sau in hình giá trị W vẽ đường phân tách class Kết sau chạy Và W = [128 -9 -11] Dùng Perceptron để phân loại điểm liệu Tạo điểm chưa phân loại hàm random biểu diễn hình tam giác BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG x_test = [] for i in range(5): x_test.append([1, random.randint(0, 11), random.randint(0, 11)]) plt.plot(x_test[i][1], x_test[i][2], 'b^', color='black') Kết Hàm phân loại for i in range(len(x_test)): if W @ np.array(x_test[i]) < 0: plt.plot(x_test[i][1], x_test[i][2], 'b^', color='red') else: plt.plot(x_test[i][1], x_test[i][2], 'b^', color='green') circle1 = plt.Circle((x_test[i][1], x_test[i][2]), 2, color='black', fill = False) plt.gcf().gca().add_artist(circle1) Kết sau phân loại BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG Full code from os import X_OK import numpy as np import matplotlib.pyplot as plt import pandas as pd import random #Input def Read_Data(): df = pd.read_csv('D:\HCMUT\AI\HW\PLA.csv') plt.plot(df['X1'][1:12], df['X2'][1:12], 'go', color='green') plt.plot(df['X1'][12:], df['X2'][12:], 'gs', color='red') plt.xlabel('X1') # label x plt.ylabel('X2') # label y plt.show() return df #Perceptron Learning Algorithm def PLA(data): X = [] for i in range(0, 22): X.append([1, data['X1'][i], data['X2'][i]]) 10 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG from pandas import read_csv # define the location of the dataset url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/breastcancer.csv" # load the dataset dataset = read_csv(url, header=None) # retrieve the array of data data = dataset.values # separate into input and output columns X = data[:, :-1].astype(str) y = data[:, -1].astype(str) # one hot encode input variables onehot_encoder = OneHotEncoder(sparse=False) X = onehot_encoder.fit_transform(X) # ordinal encode target variable label_encoder = LabelEncoder() y = label_encoder.fit_transform(y) # summarize the transformed data print('Input', X.shape) print(X[:5, :]) Kết biến đổi thu Sau biến đổi, số biến liệu tăng từ lên 43 (Mỗi biến gồm nhiều phân loại khác nhau) Mỗi phân loại định nghĩa bit nhị phân (0 1) Cuối cùng, đánh giá hiệu suất mô hình ML thực phương pháp One Hot Encoding tập liệu Breast Cancer 125 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG # evaluate logistic regression on the breast cancer dataset with an onehot encoding from numpy import mean from numpy import std from pandas import read_csv from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.preprocessing import LabelEncoder from sklearn.preprocessing import OneHotEncoder from sklearn.metrics import accuracy_score # define the location of the dataset url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/breastcancer.csv" # load the dataset dataset = read_csv(url, header=None) # retrieve the array of data data = dataset.values # separate into input and output columns X = data[:, :-1].astype(str) y = data[:, -1].astype(str) # split the dataset into train and test sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=1) # one-hot encode input variables onehot_encoder = OneHotEncoder() onehot_encoder.fit(X_train) X_train = onehot_encoder.transform(X_train) X_test = onehot_encoder.transform(X_test) # ordinal encode target variable label_encoder = LabelEncoder() label_encoder.fit(y_train) y_train = label_encoder.transform(y_train) 126 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG y_test = label_encoder.transform(y_test) # define the model model = LogisticRegression() # fit on the training set model.fit(X_train, y_train) # predict on test set yhat = model.predict(X_test) # evaluate predictions accuracy = accuracy_score(y_test, yhat) print('Accuracy: %.2f' % (accuracy*100)) Và kết kiểm chứng Đây kết tương đối tốt tập liệu “Breast Cancer” này; khoảng cho phép [68% : 73%]! 127 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG HW 19 In LSTM, which part corresponds to long term memory and which part relates to short term memory? Why is the former able to deal with the long term dependency problem? LSTM: Là phiên hiệu chỉnh mạng nơ ron RNN, giúp dễ dàng ghi nhớ liệu khứ nhớ RNN LSTM Khi mạng RNN hoạt động, thơng tin trước ghi nhớ sử dụng lại để xử lý cho đầu vào Tuy nhiên RNN lại ghi nhớ thông tin bước có khoảng cách xa trước Nên phần tử chuỗi đầu vào nhiều ảnh hưởng đến kết tính tốn dự đoán phần tử cho chuỗi đầu cho bước sau Và LSTM khác phục điều cách kết nối phản hồi LSTM bổ sung thêm trạng thái bên tế bào cổng sòng lọc thông tin đầu vào đầu cho tế bào Tại bước, gate nhận giá trị đầu vào x giá trị h có từ đầu memory cell trước i: Input gate: kiểm soát input Hàm sigmoid định giá trị cho qua Vecto thông tin sau qua nhân với bị triệt tiêu nhân với thơgn tin giữ lại f: Forget gate: cổng định bỏ lượng thông tin đến từ trạng thái trước o: Output gate: điều chỉnh lượng thơng tin ngồi lượng thơng tin truyền tới trạng thái 128 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG ht: nhớ mạng nhằm tổng hợp thơng tin hidden state trước gt: tính tốn dựa vào đầu vào xt trạng thái trước ht-1 Tính hồn tồn tương tự input gate i, thay dùng sigmoid ta dùng Kết hợp điều với để cập nhật trạng thái Short term memory LSTM giống với RNN htvà gt ct: nhớ LSTM cách tổng hợp nhớ trước lọc sau qua qua cổng f cộng với trạng thái ẩn g lọc cổng vào i Cell state mang thông tin quan trọng truyền xa dùng cần Long term memory ct – nhớ LSTM 129 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG HW 20 LSTM training by GA Similar to Hw 17 I Yêu cầu Train mơ hình RNN GA với đầu vào đầu sau Input x Kí tự Output y Kí tự [1000] H [0100] e [0100] e [0010] l [0010] l [0010] l [ 0 0] l [0001] o Ta tạo model: model với yêu cầu cho từ hello, model cho yêu cầu với chuỗi từ hello green start II Model hello Đầu tiên, ta viết function Forward để tính sigma, ht, ct yt từ đầu vào w, x, h(t - 1) c(t-1) Ta có cơng thức sau Ta chọn size ht 3x1 ct 3x1 Theo cơng thức trên, ta tìm kích cỡ ma trận sau : Wf(3,7), bf(3,1) , Wi(3,7), bi(3,1), Wc(3,7), bc(3,1), Wo(3,7), bo(3,1), why(4,3) by(4,1) 130 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG Từ kích cỡ ma trận vừa tính ra, ta viết hàm Forward model sau 131 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG Sau có hàm Forward, ta tiến hành viết đầu vào đầu tương ứng để tính giá trị yt, ht,ct giá trị hàm Loss Hàm Loss tính theo Cross Entropy hàm kích hoạt hàm Sau có giá trị target_y từ đầu vào yt vừa tính ra, ta tìm giá trị Loss Dùng thuật tốn tối ưu hóa GA để tìm vector w cho Loss tối ưu Loss hàm phụ thuộc vào 112 trọng số w Ta kết sau 132 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG Sau có giá trị w, ta tính ngược lại yt so sánh với target y để kiểm tra Khi đó, ta tìm ma trận đầu yt giá trị Loss sau Nhận xét: Trong trường hợp này, model hoạt động tốt đầu yt khớp hoàn toàn với target_y Trong trường hợp này, khả hoạt động RNN LSTM giống Ta tiếp tục với model Hello green start 133 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG III Model Hello green start Ở đây, ta có kí tự sau: h, e, l o, g, r, n, s, t, a, , Ta mã hóa đầu vào thành vector có 10 phần tử, đó, bảng Input Output viết sau Đối với trường hợp 1, đầu hello Input x Kí tự Output y Kí tự [1 0 0 0 0 ] h [0 0 0 0 0] e [0 0 0 0 0 ] e [0 0 0 0 ] l [0 0 0 0 ] l [0 0 0 0 ] l [0 0 0 0 ] l [0 0 0 0 0 ] o Đối với trường hợp 2, đầu green Input x Kí tự Output y Kí tự [0 0 0 0 ] g [0 0 0 0 0 ] r [0 0 0 0 0 ] r [0 0 0 0 0 ] e [0 0 0 0 0 ] e [0 0 0 0 0 ] e [0 0 0 0 0 ] e [0 0 0 0 ] n Đối với trường hợp 3, đầu start Input x Kí tự Output y Kí tự [0 0 0 0 0 ] s [0 0 0 0 ] t [0 0 0 0 ] t [0 0 0 0 0 ] a [0 0 0 0 0 ] a [0 0 0 0 0 ] r [0 0 0 0 0 ] r [0 0 0 0 ] t 134 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG Làm tương tự trên, ta viết lại hàm Forward với size ma trận ht ct x Theo công thức LSTM, ta tìm kích cỡ ma trận sau : Wf(3,13), bf(3,1) , Wi(3,13), bi(3,1), Wc(3,13), bc(3,1), Wo(3,13), bo(3,1), why(10,3) by(10,1) Ta viết lại hàm forward sau 135 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG Hàm loss tính tổng loss trường hợp đầu vào 136 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG Tương tự trên, ta dùng thuật tốn tối ưu hóa GA để tìm vector w cho Loss tối ưu Loss hàm phụ thuộc vào 208 trọng số w Sau chạy thuật toán GA, ta tìm w giá trị hàm loss sau sau 137 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG Sau chạy thuật toán GA, ta nhận thấy giá trị Loss xấp xỉ với Ta quan sát giá trị yt so sánh với target_y đặt Sau quan sát giá trị yt, ta thấy chung khớp hoàn toàn với target_y đặt Model hoạt động tốt với kích cỡ ct ht 3x1 138 BÀI TẬP VỀ NHÀ – THẦY PHẠM VIỆT CƯỜNG Nhận xét Trong trường hợp bình thường không phức tạp, RNN LSTM hoạt động giống Thông thường, thông số mạng LSTM nhiều RNN Trong model hello green start, LSTM giải tốt với kích cỡ ht ct 3x1 RNN phải tăng kích cỡ ht 7x1 giải Ở mạng RNN, theo lí thuyết thơng tin mang từ layer trước đến layer sau thực tế mang qua số lượng layer định Do đó, model học đặc điểm tính chất từ trạng thái gần Trong đó, LSTM hồn tồn có thơng tin từ trạng thái trước xa, điều mà RNN không làm 139 ... THẦY PHẠM VIỆT CƯỜNG W -= X[i] print("W =", W) sampleX = np.linspace(min(data[''X1'']) - 3, max(data[''X1'']) + 3, int((max(data[''X1'']) - min(data[''X1'']))*100)) sampleY = (-W[0] - W[1]*sampleX)/W[2]... np.array(X[i])) >= 0: W -= X[i] print("W =", W) sampleX = np.linspace(min(data[''X1'']) - 3, max(data[''X1'']) + 3, int((max(data[''X1'']) - min(data[''X1'']))*100)) sampleY = (-W[0] - W[1]*sampleX)/W[2]... Convolutional layer 91 Đối với lớp Fully-connected đầu vào Fully-connected 91 Tổng tham số AlexNet 91 HW 14 Compute top-1 & top-5 error rates for AlexNet and two other models