1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

30 3 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 30
Dung lượng 894,19 KB

Nội dung

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 Ý tưởng Neural Network Mạng Neural nhân tạo 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 .6 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ự đoá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 tố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 x i +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 Q 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 tố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, nó thể mức độ quan trọng (độ mạnh) liệu đầu vào q 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 w(ijk) kí hiệu layer k , nghĩa hệ số nối từ node thứ i layer k-1 tới node thứ j 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 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ữ nguyên 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 )= 1+e−x Đồ thị hàm số biểu biểu diễn hình: hàm Sigmoid Đồ thị Đầ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: f ' (x )= e− x e−x = ∗ =f ( x )∗(1−f ( x )) (1+e−x )2 1+e−x 1+ e−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 Feedforward mạng Neural nhân tạo Backpropagation Sự lan truyền ngược (Backpropagation) chế thiết yếu mà mạng nơ-ron đào tạo Nó chế sử dụng để tinh chỉnh trọng số model mạng Neural nhân tạo, liên quan đến tỷ lệ lỗi tạo lần lặp trước Sự lan truyền ngược mạng nơ-ron truyền tải thông tin liên hệ thơng tin với lỗi mơ hình tạo thực dự đốn (q trình Feedforward) Phương pháp tìm cách giảm lỗi, cịn gọi hàm mát Ban đầu mạng nơ ron thiết kế, giá trị ngẫu nhiên gán dạng trọng số Ta không liệu giá trị trọng lượng định có xác phù hợp với mơ hình hay khơng Kết là, mơ hình xuất giá trị khác với đầu thực tế dự kiến, giá trị lỗi Để có kết đầu phù hợp với sai số tối thiểu, mơ hình cần đào tạo tập liệu thơng số thích hợp theo dõi tiến trình nó dự đốn Mạng nơron có mối quan hệ với lỗi, đó, tham số thay đổi, lỗi thay đổi theo Sự lan truyền ngược sử dụng kỹ thuật Gradient Descent để thay đổi tham số mơ hình Để áp dụng gradient descent ta cần tính đạo hàm hệ số W bias b với hàm loss function Khi hàm f ( x , y ) hàm nhiều biến, ví dụ f ( x , y ) = x 2+ y Đạo hàm f với biến x kí ∂f hiệu ∂ x Quá 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 tố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 tanh 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 1 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 trình Feedforward tính tốn giá trị nodes hidden layers - Sau thực 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 toá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ự đố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 )2 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 q 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 hồ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ự đố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 b XOR(a,b) 0 0 1 1 1 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 tố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, tố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 XOR(a,b ) NAND(a,b) OR(a,b) AND (NAND(a,b) , OR(a,b)) 0 0 1 1 1 1 1 1 0 Ta có: - Biểu đồ phép tốn NAND(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 toá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 x+y-0,5=0 Suy hệ số Weight mạng [1,1] bias=-0,5 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 x+y-1,5=0 Suy hệ số Weight mạng [1,1] bias=-1,5 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 tố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 : 2 nodes on input layer, 1 hidden layer with 2 nodes, outpu t layer #choose learning rate = about 0.05 to 1 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 −9 giá trị loss nhỏ ( ¿1,2∗10 ) sau 11s xử lý; Giá trị dự đoán thử nghiệm gần với giá trị thực tế Source code tại: https://colab.research.google.com/drive/1DpdJ9wmNlbI0p_X3CveyY-HAZ2dSG5R#scrollTo=giG3eXGHdPf- Tài liệu tham khảo [1] Deep Learning in Python - Master Data Science and Machine Learning with ModernNeural Networks writte in Python, Theano, and TensorFlow - The LazyProgrammer (http://lazyprogrammer.me) [2] Deep Learning - Nguyễn Thanh Tuấn NTTUAN8.COM [3] Ứ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 [4] Machine Learning - https://machinelearningcoban.com [5] PYTHON DATA SCIENCE BOOK - Ivor Osborn [6] 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

Ngày đăng: 25/04/2023, 20:00

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w