Báo cáo bài tập lớn bộ môn thực tập cơ sở đề tài mô hình mạng neuron nhân tạo

31 1 0
Báo cáo bài tập lớn bộ môn thực tập cơ sở đề tài  mô hình mạng neuron nhân tạo

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Học viện cơng nghệ bưu viễn thơng Khoa cơng nghệ thông tin I - - Báo cáo Bài tập lớn Bộ môn: Thực tập sở Đề tài : Mơ hình mạng Neuron nhân tạo GV hướng dẫn: TS Nsguyễn Văn Thủy Sinh viên thực hiện: Phan Thiên Hưng MSV: B19DCCN329 Mục Lục I – Lý thuyết Neural Network vấn đề liên quan .3 Ý tưởng Neural Network .3 Mạng Neural nhân tạo .4 Thành phần mạng Neural nhân tạo Input layer Hidden layer Output layer Trọng số liên kết – Weights Hàm kích hoạt (activation functions) Hàm sigmoid Hàm Tanh 10 Rectified Linear Unit (ReLU function) 11 Thuật toán Gradient Descent 11 II – Quá trình học model 13 Feedforward 14 Backpropagation 15 III – Xây dựng model 16 Tiền xử lý liệu 16 Xây dựng hàm kích hoạt cho layer 17 Khởi tạo mơ hình giá trị ban đầu cho tham số mơ hình .17 Huấn luyện mơ hình với tập liệu Train_data 18 Tính giá trị đầu dự đốn 19 Tính Loss (độ sai lệch model) 19 Lặp lại trình fit model 20 Thử lại với tệp liệu Test_data 20 IV – Áp dụng với toán toán tử XOR 20 Phép toán XOR 20 Giải toán sử dụng mạng Neural nhân tạo 22 Input layer – hidden layer: 23 Hidden layer – Output 24 Tổng hợp mạng 25 Tạo liệu, fit model, tính tốn sai số thử nghiệm dự đốn mơ hình 26 Tài liệu tham khảo 29 I – Lý thuyết Neural Network vấn đề liên quan Ý tưởng Neural Network Neural tính từ neuron (nơ-ron), network cấu trúc đồ thị nên neural network (NN) hệ thống tính toán lấy cảm hứng từ hoạt động nơron hệ thần kinh Nơ- ron đơn vị cấu tạo hệ thống thần kinh phần quan trọng não Não gồm khoảng 10 triệu nơ-ron nơ-ron liên kết với 10.000 nơ-ron khác Ở nơ-ron có phần thân (soma) chứa nhân, tín hiệu đầu vào qua sợi nhánh (dendrites) tín hiệu đầu qua sợi trục (axon) kết nối với nơ-ron khác Hiểu đơn giản nơ-ron nhận liệu đầu vào qua sợi nhánh truyền liệu đầu qua sợi trục, đến sợi nhánh nơ-ron khác Mỗi nơ-ron nhận xung điện từ nơ-ron khác qua sợi nhánh Nếu xung điện đủ lớn để kích hoạt nơ-ron, tín hiệu qua sợi trục đến sợi nhánh nơ-ron khác Mạng Nơ-ron thần kinh Dựa theo cách hoạt động mạng Neuron thần kinh, mơ hình mạng Neuron nhân tạo (ANN) viết nhằm giải toán theo hướng học sâu (Deep learning), khắc phục số vấn đề nhớ thời gian Machine learning hay số tốn khó giải theo Machine learning Mạng Neural nhân tạo Neural network hay gọi Mạng nơ-ron nhân tạo mạng sử dụng mô hình tốn học phức tạp để xử lý thơng tin Trong mạng nơ-ron nhân tạo, loạt thuật toán sử dụng để xác định nhận mối quan hệ tập liệu Mỗi nút mạng tổng hợp từ tất nodes layer trước nó, đồng thời input để tổng hợp thành nodes layer sau thông qua hệ số Weight tương ứng Phần tổng hợp nút mạng nơron nhân tạo tổng trọng số đầu vào, cộng thêm với hệ số bias: m u=∑ wi xi +bias i=1 Trước đưa đến nơron đầu ra, tín hiệu tổng hợp đưa qua hàm kích hoạt (activation function) hay Transfer function Được ký hiệu toán học sau: y=f (u) Các hàm giới thiệu chi tiết phần sau Quá trình xử lý thông tin ANN Thành phần mạng Neural nhân tạo Kiến trúc chung mạng Neural nhân tạo gồm thành phần, chia thành lớp (layers): Input layer – lớp đầu vào, Hidden layer – lớp ẩn Output layer – lớp đầu Dữ liệu truyền qua lớp thống qua trọng số liên kết (Weights) hàm kích hoạt (activation functions) Mơ hình mạng Neural nhân tạo Input layer Mỗi node Input layer tương ứng với thuộc tính (attribute) liệu (data) Ví dụ ứng dụng ngân hàng xem xét có chấp nhận cho khách hàng vay tiền hay khơng Input thuộc tính khách hàng thu nhập, nghề nghiệp, tuổi, số con,…; dựa vào yếu tố bán kính, tuổi khối u… để kết luận trường hợp ung thư lành tính hay ác tính… Hidden layer Các hidden layer gồm nodes nhận liệu input từ nodes lớp (Layer) trước chuyển đổi input cho lớp xử lý Trong ANN khơng có có nhiều lớp ẩn Các tầng đóng vai trị logic, suy luận mạng Output layer Thể kết đầu mạng Kết ANN giải pháp cho vấn đề, ví dụ với toán xem xét chấp nhận cho khách hàng vay tiền hay khơng output yes (cho vay) no (không cho vay); kết luận cho việc khối u xét đầu vào có phải khối u lành tính hay ác tính? Trọng số liên kết – Weights Connection Weights (Trọng số liên kết): Đây thành phần quan trọng ANN, thể mức độ quan trọng (độ mạnh) liệu đầu vào trình xử lý thơng tin (q trình chuyển đổi liệu từ Layer sang layer khác) Quá trình học (Learning Processing) ANN thực trình điều chỉnh trọng số (Weight) input data để có kết mong muốn Thường ( k ) w ij kí hiệu layer k , nghĩa hệ số nối Hàm kích hoạt (activation functions) Trong mạng neural nhân tạo, hàm kích hoạt hàm ánh xạ đầu vào nút với đầu tương ứng Ta lấy tổng trọng số kết nối đến cho node layer truyền tổng trọng số cho hàm kích hoạt Hàm kích hoạt thực số loại hoạt động để biến đổi tổng thành số Phép biến đổi thường phép biến đổi phi tuyến tính node output = activation(weighted sum of inputs) Tại lại cần hàm kích hoạt phi tuyến? Một đặc điểm quan trọng hàm tuyến tính hợp hai hàm tuyến tính hàm tuyến tính Điều có nghĩa là, mạng neural sâu, có phép biến đổi tuyến tính giá trị liệu q trình chuyển tiếp, ánh xạ học mạng từ đầu vào đến đầu tuyến tính Thông thường, loại ánh xạ với mạng neural sâu phức tạp ánh xạ tuyến tính đơn giản Đây nơi hàm kích hoạt xuất Hầu hết hàm kích hoạt phi tuyến tính chúng chọn theo cách có chủ đích Việc có hàm kích hoạt phi tuyến tính cho phép mạng neural tính tốn chức phức tạp tùy ý Một số activation function bật thường sử dụng hàm Tanh, ReLU, Sigmoid Softmax Trong Sigmoid, Softmax sử dụng nơron đầu ra, tương ứng cho toàn phân loại (classification) hay hồi quy (regression) Các hàm kích hoạt (activation function) Sigmoid, Tanh ReLU dùng kết nối nơron với Trong số hàm kích hoạt trên, ReLU hàm kích hoạt thường sử dụng cả, tượng tiêu biến độ dốc (vanishing gradient) hàm kích hoạt (activation function) Sigmoid Tanh Hiện tượng tiêu biến độ dốc (vanishing gradient) xảy giá trị điểm bão hòa hàm số Tanh Sigmoid, lúc đạo hàm (derivative) trở nên nhỏ, hậu làm cho việc thay đổi trọng số (weight) trình huấn luyện (training) gần 0, việc huấn luyện (training) model gần khơng có tác dụng Với hàm kích hoạt (activation function) ReLU, giá trị dương giữ ngun giá trị, khơng cịn điểm bão hịa nữa, đạo hàm (derivative) ln có độ lớn đủ tốt cho việc huấn luyện (training) Đồ thị hàm Sigmoid hàm Tanh đạo hàm chúng Hàm sigmoid Sigmoid coi hàm sử dụng để làm trơn liệu hàm khả vi bị chặn Sigmoid hữu ích để chuyển đổi giá trị thành xác suất sử dụng để phân lớp nhị phân - binary classification Hàm Sigmoid ánh xạ liệu đầu vào thành giá trị khoảng [0;1] Có thể viết cơng thức tốn học sau: f (x )= −x 1+e Đồ thị hàm số biểu biểu diễn hình: Đồ thị hàm Sigmoid Đầu vào số thực âm nhỏ cho đầu tiệm cận với 0, ngược lại, đầu vào số thực dương lớn cho đầu số tiệm cận với Nếu coi điểm có tung độ 1/2 làm điểm phân chia điểm xa điểm phía bên trái có giá trị gần Ngược lại, điểm xa điểm phía phải có giá trị gần Đạo hàm hàm Sigmoid: e f ' (x )= Công thức đạo hàm đơn giản nên Sigmoid function sử dụng rộng rãi model Nhược điểm: giá trị tuyệt đối x lớn, giá trị Gradient tiệm cận đến 0, đồng nghĩa với việc hệ số xét model không cập nhật, điều dẫn đến tượng mạng khơng thể học tốt Hiện tượng gọi biến đạo hàm hay vanishing gradients (1+e Khi hàm f ( x , y ) hàm nhiều biến, ví dụ f ( x , y ) = x2+ y2 Đạo hàm f với biến ∂ f x kí hiệu ∂ x Q trình tính đạo hàm ngược lại với chiều Feedforward Với activation function, ta sử dụng đạo hàm để thực q trình Backpropagation Vì Loss function tính Weights Bias, nên muốn cải thiện độ xác (giảm giá trị mát) ta phải giảm độ sai lệch Weights Bias theo công thức chung thuật toán Gradient Descent: L=L- θ *dL W=W-θ *dW B=B- θ*dB Sau nhiều lần lặp lại trình với nhiều điểm liệu xét, model dần hoàn thiện (fit) trở nên xác III – Xây dựng model - Input layer: dataset - Các layers ẩn: layer ma trận ứng với feature dataset - Output layer: kết phép biến đổi label dòng dataset Tiền xử lý liệu Chuẩn bị data: chuẩn bị tệp liệu có nhãn chia thành phần: tập liệu dùng để huấn luyện mơ hình (Train_data) tập liệu để kiểm tra tính xác mơ hình (Test_data) - Chuyển đổi liệu đầu vào (thường features gồm ngôn ngữ tự nhiên) thành liệu mà máy đọc (thường dạng array) - Xây dựng hàm kích hoạt cho layer Tùy vào giá trị đầu layer dùng hàm kích hoạt tương ứng; Xây dựng cơng thức tính đạo hàm với activation function import numpy as np #build activation functions and derivative of per activation function #sigmoid def sigmoid(x): return 1/(1+np.exp(-x)) #derivative of sigmoid function def sigmoid_derivative(x): return x*(1-x) #tanh function def tanh(x): return np.tanh(x) #derivative of function def tanh_derivative(x): return 1-x**2 #ReLU function: def ReLU(x): return max(0,x); #derivative of ReLU function with x>0 always is Khởi tạo mơ hình giá trị ban đầu cho tham số mơ hình - Khởi tạo mơ hình Neural network với layers learning rate Gán giá trị ban đầu cho Weight Bias mơ hình class NeuralNetwork: def init (self,layers,theta): #layers[] is an array, per value is number of nodes on that layer #theta is learning rate self.layers=layers self.theta=theta #define Weights and bias is array self.W=[] self.b=[] # Create the first value for layers on model for i in range(0, len(layers)-1): w_ = np.random.randn(layers[i], layers[i+1]) b_ = np.zeros((layers[i+1], 1)) self.W.append(w_/layers[i]) self.b.append(b_) Huấn luyện mơ hình với tập liệu Train_data Với thông số đầu vào giá trị Weight, bias khởi tạo, thực q trình Feedforward tính tốn giá trị nodes hidden layers - Sau thực q trình Feedforward, tiếp tục với Backpropagation: Tính giá trị đạo hàm nodes đầu Weights bias; sau sử dụng thuật tốn Gradient Descent để cập nhật lại giá trị Weights bias - # Train model per eposch def fit_partial(self, x, y): A = [x] # feedforward out = A[-1] # keep the input layer values, caculate values of hidden layers and output for i in range(0, len(self.layers) - 1): out = sigmoid(np.dot(out, self.W[i]) + (self.b[i].T)) A.append(out) # backpropagation y = y.reshape(-1, 1) dA = [-(y/A[-1] - (1-y)/(1-A[-1]))] dW = [] db = [] #caculate derivative of per node on layers #this model I use sigmoid function, the others are same for i in reversed(range(0, len(self.layers)-1)): dw_ = np.dot((A[i]).T, dA[-1] * sigmoid_derivative(A[i+1])) db_ = (np.sum(dA[-1] * sigmoid_derivative(A[i+1]), 0)).reshape(-1,1) dA_ = np.dot(dA[-1] * sigmoid_derivative(A[i+1]), self.W[i].T) dW.append(dw_) db.append(db_) dA.append(dA_) # Reverse dW, db dW = dW[::-1] db = db[::-1] # Gradient descent : update values of Weights, bias for i in range(0, len(self.layers)-1): self.W[i] = self.W[i] - self.alpha * dW[i] self.b[i] = self.b[i] - self.alpha * db[i] Tính giá trị đầu dự đốn Sau có đầu vào thơng số mạng, ta hồn tồn tính giá trị đầu dự đoán liệu: - #predict y: output value def predict(self, X): for i in range(0, len(self.layers) - 1): X = sigmoid(np.dot(X, self.W[i]) + (self.b[i].T)) return X Tính Loss (độ sai lệch model) Hàm Loss tổng quát model độ chênh lệch giá trị đầu dự đoán giá trị đầu thực tế liệu Thông thường, hàm mát có dạng: n Loss= ∑ ( y− y^ ) i−1 với n số hàng tập liệu huấn luyện Trong đó, số 1/2 để đơn giản hóa biểu thức đạo hàm (khi đạo hàm bậc trở thành 1); Bình phương hiệu yy_predict để tránh tình trạng xuất giá trị âm # Loss caculate def calculate_loss(self, X, y): y_predict = self.predict(X) return np.sum((y_predict-y)**2)/2 Ngoài ra, với activation function tới output khác có hàm Loss riêng ứng với activation function Lặp lại trình fit model Trong trình huấn luyện mạng, thuật ngữ “epoch” dùng để mơ tả q trình tất input patterns training set đưa để huấn luyện mạng Nói cách khách epoch hoàn thành tất liệu training set đưa vào huấn luyện mạng Vì số lượng “epoch” xác định số lần mạng huấn luyện (hay số lần đưa tất liệu training set vào mạng) Có thể hiểu với bước thực epoch #fit model by loop action train the data epochs time def fit(self, X, y, epochs, verbose=10): for epoch in range(0, epochs): self.fit_partial(X, y) if epoch % verbose == 0: loss = self.calculate_loss(X, y) print("Epoch {}, loss {}".format(epoch, loss)) Thử lại với tệp liệu Test_data Sau xong bước 7, ta dự đoán đầu điểm liệu đầu vào cách sử dụng phương thức predict(x) Tổng hợp lại bước trên, ta có Model đơn giản Neural network Source code đầy đủ tại: https://colab.research.google.com/drive/1vSgpIowJl4bfv55sAqwZhk6bAAqqNcCk #scrollTo=CfAfTUlngAr3 IV – Áp dụng với toán toán tử XOR Phép toán XOR XOR phép toán với giá trị logic (0 1) , nhận đầu vào hai bit a b, cho đầu giá trị a!=b a=b a 0 Bảng giá trị chân lí phép tốn XOR Trong xử lí tín hiệu số số lĩnh vực liên quan, cổng logic XOR có dạng: Hình Biểu diễn hình tương đương: Hình Biểu diễn tốn tử XOR biểu đồ: Trong đó, chấm xanh mang giá trị chấm đỏ mang giá trị Theo biểu đồ, ta thấy khó có đường thằng phân chia liệu thành vùng riêng biệt, hay cơng thức tuyến tính biểu diễn liệu Vậy nên, với toán này, ta sử dụng Neural network, bổ xung vào mạng (vài) lớp ẩn để để giải toán cách dễ dàng Giải toán sử dụng mạng Neural nhân tạo Qua hình phần dễ dàng nhận thấy, toán tử (a XOR b) biểu diễn qua cổng : cổng NAND cổng OR Biểu thức: XOR(a,b) = AND (NAND(a,b) , OR(a,b)) So sánh sử dụng bảng giá trị chân lý: a b 0 1 1 Ta có: - Biểu đồ phép tốn NAND(a,b): XOR(a,b Với tốn tử NAND, ta phân chia miền liệu riêng biệt đường thẳng x+y-1,5=0 - Biểu đồ phép toán OR(a,b): Với tốn tử OR, ta phân chia miền liệu riêng biệt đường thẳng x+y-0,5=0 Với phép toán NAND OR, ta phân chia điểm liệu thành vùng riêng biệt, nên ta thêm phép tốn vào mạng, tạo thành node hidden layer Input layer – hidden layer: - Tới node NAND(a,b): miền liệu phân chia đường thẳng x+y-1,5=0 , liệu qua cổng NOT (NAND(a,b)=NOT(AND(a,b))) nên hệ số bị đổi dấu Suy hệ số Weight mạng [-1,-1] bias=1,5 - Tới node OR(a,b): miền liệu phân chia đường thẳng Suy hệ số Weight mạng [1,1] bias=-0,5 x+y-0,5=0 Hidden layer – Output - Biểu đồ phép toán AND(NAND(a,b),OR(a,b)): Với phép tốn trên, ta phân chia miền liệu riêng biệt đường thẳng x+y-1,5=0 - Tới output AND(NAND(a,b),OR(a,b)), miền liệu phân chia đường thẳng bias=-1,5 x+y-1,5=0 Suy hệ số Weight mạng [1,1] Tổng hợp mạng Tổng hợp Layer mạng từ phần trên, ta có mạng Neural hồn chỉnh cho toán toán tử XOR với hệ số Weights bias tương ứng Tạo liệu, fit model, tính tốn sai số thử nghiệm dự đốn mơ hình + Khởi tạo liệu input output cho model: input: mảng X = [[0,0],[0,1],[1,0],[1,1]] output: mảng y = [[0],[1],[1],[0]] kết tương ứng toán tử XOR với đầu vào X + - - Khai báo lớp Neural với mơ hình gồm input, output layer hidden layer với số node layer = [2,2,1] Chọn learning rate đoạn [0,05;1] Fit model: sử dụng phương thức NeuralNetwork.fit() với X y input output vừa tạo Chọn epochs đủ lớn để model xác khơng q lớn để chương trình chạy q lâu Thiết lập verbose để theo dõi chi tiết trình học model Thử dự đốn với số liệu (tự thiết tập tùy ý) #create data to train model X=np.array([[0,0],[0,1],[1,0],[1,1]]) y=np.array([[0],[1],[1],[0]]) #create model : nodes on input layer, hidden layer with nodes, outpu t layer #choose learning rate = about 0.05 to ANN=NeuralNetwork([2,2,1],theta=1) ANN.fit(X,y,epochs=100000,verbose=5000) print("Predict with data: ",ANN.predict([1,0])) Và kết sau chạy chương trình: Có thể nói model học tập thành công giá trị loss giảm dần sau lần lặp ¿1,2∗10−9 giá trị loss nhỏ ( nghiệm gần với giá trị thực tế ) sau 11s xử lý; Giá trị dự đoán thử Source code tại: https://colab.research.google.com/drive/1DpdJ9wmNlbI0p_X3CveyY-HAZ2dSG5R#scrollTo=giG3eXGHdPf- Tài liệu tham khảo Deep Learning in Python - Master Data Science and Machine Learning with ModernNeural Networks writte in Python, Theano, and TensorFlow - The LazyProgrammer (http://lazyprogrammer.me) [1] [2] Deep Learning - Nguyễn Thanh Tuấn NTTUAN8.COM Ứng dụng mạng nơron dự báo ARIMA – Phân tích xử lý liệu https://mindovermetal.org/ung-dung-mang-noron-trong-du-bao-1639986468 [3] [4] Machine Learning - https://machinelearningcoban.com [5] PYTHON DATA SCIENCE BOOK - Ivor Osborn link: XOR-Problem-in-Deep-Neural-Network https://colab.research.google.com/github/goodboychan/chans_jupyter/blob/main/ _notebooks/2020-09-16-01-XOR-Problem-in-Deep-Neural-Network.ipynb [6]

Ngày đăng: 08/05/2023, 17:50

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan