Đăng ký Đăng nhập
Trang chủ Xây dựng mạng multi layer perceptron sử dụng ngôn ngữ lập trình c++...

Tài liệu Xây dựng mạng multi layer perceptron sử dụng ngôn ngữ lập trình c++

.PDF
43
1
133

Mô tả:

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG KHOA CÔNG NGHỆ THÔNG TIN I —————*————— BÁO CÁO BÀI TẬP LỚN XÂY DỰNG MẠNG MULTI-LAYER PERCEPTRON SỬ DỤNG NGÔN NGỮ LẬP TRÌNH C++ Giảng viên: ThS. Nguyễn Quỳnh Chi Sinh viên: Nguyễn Thế An Đào Hoàng Mai Nguyễn Thành Long Nguyễn Hữu Long Phùng Hà My Hà Nội, 06/2021 B17DCCN002 B17DCCN411 B17DCCN396 B17DCCN395 B17DCCN431 LỜI NÓI ĐẦU Trong cuộc cách mạng công nghiệp 4.0 hiện nay, yếu tố quyết định thành công trong mọi lĩnh vực luôn gắn với dữ liệu và việc khai thác dữ liệu hiệu quả. Dữ liệu ngày càng trở nên dồi dào, phong phú đã đem lại lợi ích to lớn cho các doanh nghiệp và ý nghĩa lớn lao cho những nhà khoa học nghiên cứu dữ liệu. Tuy nhiên, điều đó cũng đem đến cho công cuộc khám phá ra những thông tin tiềm ẩn bên trong chúng những thách thức mới. Lúc này, các mạng thần kinh nhân tạo được lấy cảm hứng từ bộ não sinh học đã chứng minh được sự hữu ích của mình khi đạt được những kết quả vượt trội trong các bài toán cốt lõi của khai phá dữ liệu như phân loại dữ liệu, nhận dạng ảnh, nhận dạng giọng nói, v.v. Trong đó, Multi-layer Perceptron là một mạng thần kinh nhân tạo tuy đơn giản nhưng rất hiệu quả và có ý nghĩa trong các bài toán thực tế. Từ những kiến thức của môn học “Kho dữ liệu và khai phá dữ liệu”, cùng với những thông tin học hỏi từ Internet, chúng em đã tìm hiểu và quyết định chọn đề tài “Xây dựng Multi-layer Perceptron sử dụng ngôn ngữ lập trình C++” là đề tài cho bài tập lớn của nhóm. Mô hình đã được kiểm nghiệm với 3 tập dữ liệu khác nhau và so sánh với framework Tensorflow để kiểm chứng độ chính xác. Chúng em xin bày tỏ sự biết ơn sâu sắc của mình tới cô Nguyễn Quỳnh Chi, giảng viên môn “Kho dữ liệu và Khai phá dữ liệu”, đã hướng dẫn, chỉ dạy tận tình và cho chúng em rất nhiều các bài học quý giá về sự tìm tòi, tự học hỏi và chủ động trong học tập. Thông qua môn học của cô và báo cáo này, chúng em không chỉ tìm hiểu thêm được những kiến thức mới mà còn đào sâu hơn và củng cố các kiến thức đã có, nâng cao khả năng làm việc nhóm để đạt được hiệu quả cao. Trong suốt quá trình học tập và tìm hiểu, mặc dù đã cố gắng hết sức nhưng do kiến thức và kinh nghiệm còn non nớt nên báo cáo còn nhiều những thiếu sót và hạn chế. Vì vậy chúng em rất mong cô góp ý để báo cáo của chúng em được hoàn thiện hơn. Chúng em xin chân thành cảm ơn cô! Mục lục LỜI NÓI ĐẦU 1 2 TỔNG QUAN 1 1.1 Tổng quan về bài toán phân loại . . . . . . . . . . . . . . . . 2 1.2 Mạng thần kinh nhân tạo . . . . . . . . . . . . . . . . . . . . 3 1.2.1 Tổng quan về mạng thần kinh nhân tạo . . . . . . . 3 1.2.2 Mạng Multi-layer Perceptron . . . . . . . . . . . . . . . 4 MULTI-LAYER PERCEPTRON 6 2.1 Các ký hiệu và khái niệm . . . . . . . . . . . . . . . . . . . . 7 2.1.1 Layer - Lớp . . . . . . . . . . . . . . . . . . . . . . . . 7 2.1.2 Unit - Đơn vị . . . . . . . . . . . . . . . . . . . . . . . 7 2.1.3 Weights và Biases . . . . . . . . . . . . . . . . . . . . . 8 2.1.4 Activation Function - Hàm kích hoạt . . . . . . . . . 9 2.1.5 Loss Function - Hàm mất mát . . . . . . . . . . . . . 11 2.2 Học trong MLP . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.2.1 Feedforward - Lan truyền thẳng . . . . . . . . . . . . 12 2.2.2 Backpropagation - Lan truyền ngược . . . . . . . . . 12 i 3 LẬP TRÌNH VÀ MÃ NGUỒN 3.1 Lập trình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2 Mã nguồn C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.2.1 3.3 4 15 Định nghĩa các hàm . . . . . . . . . . . . . . . . . . . 18 Mã nguồn Python . . . . . . . . . . . . . . . . . . . . . . . . . 20 KIỂM NGHIỆM 4.1 4.2 22 Bộ dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.1.1 Optical Recognition of Handwritten Digits Dataset . 23 4.1.2 Spambase Dataset . . . . . . . . . . . . . . . . . . . . . 24 4.1.3 Mushroom Dataset . . . . . . . . . . . . . . . . . . . . . 25 Kết quả . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.2.1 Kết quả chính . . . . . . . . . . . . . . . . . . . . . . . 27 4.2.2 Phân tích kết quả và đánh giá . . . . . . . . . . . . . 29 ii Chương 1 TỔNG QUAN Trong chương 1, báo cáo sẽ giới thiệu về bài toán phân loại, một bài toán điển hình trong khai phá dữ liệu, đồng thời cũng trình bày tổng quan về mạng thần kinh nhân tạo thông qua các phần: • Tổng quan về bài toán phân loại • Mạng thần kinh nhân tạo 1 1.1 Tổng quan về bài toán phân loại Phân loại (classification) là một dạng thuật toán dự đoán lớp của các đối tượng dữ liệu đã cho với đầu ra là các giá trị rời rạc. Các lớp này đôi khi được gọi là mục tiêu, nhãn hoặc danh mục. Thuật toán này thường được gọi là phân loại nhị phân (binary classification) với nhiệm vụ phân loại chỉ có 2 lớp, và phân loại nhiều lớp (multi-class classification) với các bài toán có từ 3 lớp phân loại trở lên. Phân loại là một thuật toán nằm trong nhóm thuật toán học có giám sát, nghĩa là bộ dữ liệu được sử dụng trong quá trình huấn luyện được gán sẵn nhãn đúng. Thuật toán này có nhiệm vụ xấp xỉ hay mô hình một ánh xạ (f ) từ các biến đầu vào x đến các biến đầu ra rời rạc y bằng việc sử dụng một bộ dữ liệu huấn luyện đã biết trước đầu ra (hay lớp/ nhãn). Sau đó, trong quá trình thử nghiệm, mô hình có thể nhận biết được nhãn của các điểm dữ liệu chưa biết. Một ví dụ điển hình cho loại thuật toán này là bài toán phát hiện thư rác cho các nhà cung cấp dịch vụ email. Khi đó, đầu vào của bài toán là các thư điện tử (bao gồm nội dung, tiêu đề, tài khoản người gửi, v.v) và đầu ra là một trong hai lớp “tích cực” hoặc lớp “tiêu cực”. Lớp “tích cực” nghĩa là thư điện tử đầu vào là một thư rác và ngược lại với lớp “tiêu cực”. Đây là bài toán phân loại nhị phân (binary classification) vì chỉ có hai lớp là “thư rác” và “không phải thư rác”. Thuật toán phân loại là một thuật toán quan trọng, được ứng dụng rộng rãi trong khai phá dữ liệu do nó có khả năng tự động phân loại dữ liệu vào các nhóm khác nhau, đặc biệt là với các bộ dữ liệu lớn, mà không cần lập trình cụ thể. Việc phân loại dữ liệu sẽ giúp cho quá trình trích xuất các thông tin từ các điểm dữ liệu thuộc các nhóm khác nhau trở nên dễ dàng và hiệu quả hơn. Có tương đối nhiều các thuật toán thuộc lớp thuật toán phân loại, có thể kể đến điển hình như Kmean, Naive Baysian Network, Support Vector Machines, Decision Tree, Neural Network, ... Trong thực tế, người ta thường sử dụng các thuật toán thuộc họ Neural Network do chúng có khả năng phân loại chính xác vượt trội so với các thuật toán cổ điển. 2 1.2 Mạng thần kinh nhân tạo 1.2.1 Tổng quan về mạng thần kinh nhân tạo Mạng thần kinh nhân tạo (ANN) [11], thường được gọi đơn giản là mạng neural (NN), là các hệ thống tính toán được lấy cảm hứng từ các mạng neuron sinh học cấu thành não động vật. Trong hình 1.1 ta có thể thấy một tế bào thần kinh sinh học có thể nhận nhiều tín hiệu đầu vào và cho một tín hiệu đầu ra duy nhất. Hình 1.1: Một neuron thần kinh trong bộ não sinh học Các neuron thần kinh nhân tạo cũng có cơ chế nhận và truyền thông tin tương tự như vậy, được thể hiện trong hình 1.2. Hình 1.2: Một neuron nhân tạo - hay một perceptron 3 Như vậy, dựa trên ý tưởng về bộ não, ANN là một tập hợp các đơn vị hoặc nút kết nối với nhau được gọi là tế bào thần kinh nhân tạo hay perceptron, mô hình hóa các cấu trúc mạng lưới thần kinh trong bộ não sinh học. Mỗi kết nối, giống như khớp thần kinh trong não động vật, có thể truyền tín hiệu từ tế bào thần kinh này đến tế bào thần kinh khác. Một tế bào thần kinh nhân tạo nhận một tín hiệu sau đó xử lý nó và có thể phát tín hiệu cho các tế bào thần kinh kết nối với nó. “Tín hiệu” đi vào một kết nối là một số thực và đầu ra của mỗi nơ-ron được tính bằng một số hàm phi tuyến của tổng các đầu vào của nó. Các kết nối thường đi kèm các trọng số, có nhiệm vụ làm tăng hoặc giảm cường độ của tín hiệu, được điều chỉnh trong quá trình học tập. Tế bào thần kinh có thể có ngưỡng sao cho tín hiệu được gửi đi chỉ khi tín hiệu tổng hợp vượt qua ngưỡng đó. Các mạng thần kinh nhân tạo còn được biến thể thành nhiều dạng khác nhau, ví dụ như Multi-layer Perceptron (mạng neural nhiều lớp), Convolutional Neural Network (mạng neural tích chập) [8] - thường được sử dụng với các dữ liệu dạng ảnh, Recurrent Neural Network (mạng neural hồi quy) [6] - thường áp dụng cho các dữ liệu dạng chuỗi như văn bản, video, âm thanh, v.v. 1.2.2 Mạng Multi-layer Perceptron Multi-layer Perceptron (MLP) là một mô hình mạng nơ-ron được tạo ra từ sự liên kết của các perceptron chia làm nhiều nhóm, mỗi nhóm tương ứng với một lớp. Các mạng MLP đôi khi còn được gọi là “vanilla” neural network, đặc biệt là khi mạng này chỉ có một lớp ẩn duy nhất. Một MLP bao gồm ít nhất ba loại lớp: lớp đầu vào, lớp ẩn và lớp đầu ra. Ngoại trừ các nút đầu vào, mỗi nút là một neuron sử dụng hàm kích hoạt phi tuyến. MLP sử dụng một kỹ thuật học tập có giám sát được gọi là backpropagation để đào tạo. Đặc điểm có nhiều lớp và sử dụng hàm kích hoạt phi tuyến tính giúp MLP phân biệt với một perceptron tuyến tính. Cũng vì vậy, MLP có thể phân biệt các lớp dữ liệu không thể phân tách tuyến tính. Hình 1.3 là ví dụ cho một mạng MLP có một input layer (lớp đầu vào), một output layer (lớp đầu ra) 4 và nhiều hidden layers (lớp ẩn). Hình 1.3: Một ví dụ về mạng Multi-layer Perceptron Hiện nay, với cú pháp đơn giản và có nhiều framework hỗ trợ, Python đang là ngôn ngữ được sử dụng nhiều nhất trong lĩnh vực học máy và khai phá dữ liệu. Tuy nhiên, so với các thư viện sử dụng ngôn ngữ Python, C++ cũng sở hữu các điểm mạnh rõ ràng như là một ngôn ngữ được nhập tĩnh, vì vậy đoạn mã sẽ không có lỗi nhập xuất hiện trong thời gian chạy, các đoạn mã nhỏ gọn và có thời gian chạy nhanh hơn, cho phép hiệu suất tính toán cao so với các thuật toán được thực hiện hoàn toàn bằng Python hoặc MATLAB [3]. Vì vậy, trong báo cáo này, chúng em sẽ xây dựng một mô hình mạng Multi-layer Perceptron sử dụng ngôn ngữ C++ để giải quyết bài toán phân loại với các bộ dữ liệu khác nhau. Ở các phần tiếp theo, báo cáo sẽ trình bày chi tiết về cơ sở lý thuyết của mạng MLP trong chương 2, quá trình xây dựng mô hình và mã nguồn C++ trong chương 3, đồng thời cũng sử dụng các phương pháp định lượng để kiểm nghiệm lại các đoạn mã do nhóm lập trình trên các bộ dữ liệu khác nhau trong chương 4. 5 Chương 2 MULTI-LAYER PERCEPTRON Trong chương 2, báo cáo sẽ đi vào trình bày chi tiết cơ sở lý thuyết của mạng Multi-layer Perceptron (MLP) [10] qua các phần chính: • Các ký hiệu và khái niệm • Học trong MLP 6 2.1 Các ký hiệu và khái niệm 2.1.1 Layer - Lớp Ngoài input layer (lớp đầu vào) và output layer (lớp đầu ra), mạng MLP có thể có nhiều hidden layers (lớp ẩn) ở giữa. Các hidden layers trong mạng tính từ lớp đầu vào đến lớp đầu ra lần lượt được đánh thứ tự là lớp ẩn 1, lớp ẩn 2, ... Hình 2.1 là ví dụ cho một mạng MLP có một input layer , một output layer và hai hidden layers. Số lượng layer trong một MLP, được ký hiệu là L, được tính bằng số lớp ẩn cộng với một. Tức là khi đếm số lượng lớp của một mạng MLP, ta không tính lớp đầu vào. Trong hình 2.1, L = 3. Hình 2.1: Mạng perceptron nhiều tầng với 2 hidden layers 2.1.2 Unit - Đơn vị Trong hình 2.2, một node hình tròn màu cam trong một layer được gọi là một unit. Unit ở các input layer, hidden layers, và output layer được lần lượt gọi là input unit, hidden unit, và output unit. Trong đó, đầu vào của các hidden layer được ký hiệu bởi z , đầu ra của mỗi unit thường được kí hiệu là a (thể hiện activation, tức là giá trị của mỗi unit sau khi ta áp dụng activation function lên z ). Đầu ra của unit thứ 7 (l ) i trong layer thứ l được kí hiệu là ai . Giả sử thêm rằng số unit trong layer thứ l (không tính bias) là d(l) thì vector biểu diễn đầu ra của (l) layer thứ l được ký hiệu là a(l) ∈ Rd . Hình 2.2: Các ký hiệu sử dụng trong mạng Multi-layer Perceptron 2.1.3 Weights và Biases Các ký hiệu cho weight và bias của mạng MLP được ký hiệu như ở hình 2.2. Theo đó, có L ma trận trọng số cho một MLP có L layers. (l−1) Các ma trận này được ký hiệu là W(l) ∈ Rd đó W (l ) ×d(l) , l = 1, 2, ..., L trong thể hiện các kết nối từ layer thứ l − 1 tới layer thứ l (nếu ta (l ) coi input layer là layer thứ 0). Cụ thể hơn, phần từ wij thể hiện kết nối từ node thứ i của layer thứ (l − 1) tới node thứ j của layer thứ (l). (l) Các bias của layer thứ (l) được ký hiệu là b(l) ∈ Rd . Tập hợp các weight và bias lần lượt được ký hiệu là W và b. 8 2.1.4 Activation Function - Hàm kích hoạt Mỗi output của một layer (trừ input layer) sẽ được tính toán dựa vào công thức 2.1: a(l) = f (l) (W(l)T a(l−1) + b(l) ) (2.1) Trong đó f (l) (.) là một hàm kích hoạt phi tuyến. Nếu hàm kích hoạt tại một layer là một hàm tuyến tính, layer này và layer tiếp theo có thể rút gọn thành một layer vì hợp của các hàm tuyến tính là một hàm tuyến tính. Hàm kích hoạt thường là một hàm số áp dụng lên từng phần tử của ma trận hoặc vector đầu vào, nói cách khác, hàm kích hoạt thường là element-wise (trừ hàm Softmax). Trong báo cáo này, chúng em sẽ sử dụng hàm kích hoạt ReLU cho các hidden layers và hàm Softmax cho output layer. ReLU Hình 2.3: Đồ thị hàm ReLU ReLU (Rectified Linear Unit) được sử dụng rộng rãi trong các nghiên cứu về mạng thần kinh nhân tạo gần đây [2, 12, 9] vì tính đơn giản và hiệu quả của nó. Đồ thị của hàm ReLU được minh họa trên hình 2.3. Hàm ReLU có công thức toán học là f (z ) = max(0, z ) - một công 9 thức rất đơn giản và có lợi về mặt tính toán. Đạo hàm của nó bằng 0 tại các điểm âm, bằng 1 tại các điểm dương. ReLU được chứng minh giúp cho việc huấn luyện các multilayer neural network và deep network (rất nhiều hidden layer) nhanh hơn rất nhiều so với các hàm kích hoạt khác như hàm tanh [5], hàm sigmoid. Hình 2.4 so sánh tốc độ hội tụ của hàm mất mát khi sử dụng hai hàm kích hoạt ReLU và tanh. Rõ ràng có thể nhận thấy, tốc độ hội tụ khi sử dụng hàm ReLU cho kết quả nhanh hơn nhiều lần so với hàm tanh. Điều này có thể giải thích được là vì ReLU được tính toán gần như tức thời và gradient của nó cũng được tín rất nhanh. Mặc dù cũng có nhược điểm đạo hàm bằng 0 với các giá trị đầu vào âm, ReLU được chứng minh bằng thực nghiệm rằng có thể khắc phục việc này bằng cách tăng số hidden units 1 . Hình 2.4: So sánh tốc độ hội tụ của ReLU và tanh sau các epoch Softmax Với các bài toán phân loại, ta cần một mô hình xác suất sao cho với mỗi input x, ta có đầu ra là vector a ∈ RM với M là số lượng lớp của bài toán và ai đại diện cho xác suất để input đó rơi vào lớp thứ i. Điều kiện cần là các ai phải dương và tổng của chúng phải bằng 1. 1 https://goo.gl/QGjKmU 10 Đồng thời, ta cũng cần một quan hệ đồng biến giữa zi và ai , nghĩa là nếu zi càng lớn, xác suất để điểm dữ liệu x rơi vào lớp thứ i càng cao. Như vậy, ta có hàm Softmax có thể đảm bảo được các điều kiện đã nêu trên, đồng thời đơn giản về mặt tính toán như sau: exp(zi ) ai = PC , ∀i = 1, 2..., C j =1 exp(zj ) (2.2) Lúc này, ta có thể coi xác suất để một điểm dữ liệu x rơi vào lớp thứ i nếu biết tham số mô hình là ma trận trọng số W bằng ai : p(yk = i|xk ; W) = ai 2.1.5 (2.3) Loss Function - Hàm mất mát Quan hệ giữa phép đánh giá mô hình (tốt hay không tốt) và các trọng số của mô hình thường được mô tả thông qua một hàm số gọi là hàm mất mát. Hàm mất mát đo độ chênh lệch giữa đầu ra dự đoán và đầu ra thực sự để đánh giá mô hình được huấn luyện có hiệu quả hay không. Việc đi tìm các trọng số của mạng sao cho việc huấn luyện là hiệu quả nhất đồng nghĩa với việc đi tối thiểu hàm mất mát. Trong báo cáo này, chúng em sử dụng hàm mất mát cross-entropy do nó có thời gian huấn luyện ít hơn và cho khả năng tổng quát hóa cao hơn so với sai số tổng bình phương (mean squared error) [4]. Trong phân loại nhị phân, tức là số lượng lớp phân loại C = 2, hàm mất mát cross-entropy có thể được tính toán như sau: J (y, ŷ ) = −(ylog (ŷ ) + (1 − y )log (1 − ŷ )) (2.4) Nếu C > 2 (phân loại nhiều lớp), hàm cross-entropy lúc này sẽ được gọi là categorical cross-entropy. Cụ thể, ta sẽ tính độ mất mát cho từng lớp riêng biệt và cộng tổng các kết quả như sau: J (y, ŷ) = − C X i=1 11 yi log (ŷi ) (2.5) 2.2 Học trong MLP 2.2.1 Feedforward - Lan truyền thẳng Quá trình lan truyền thẳng chính là quá trình tính toán ra output của mạng với một input sample. Trong lan truyền thẳng, một sample đi qua input layer để trở thành input của mạng, sau đó đầu ra của các hidden layers được tính toán bởi các trọng số và các hàm kích hoạt lần lượt cho đến khi ta có được output của hidden layer cuối cùng. Lúc này, vector output của hidden layer cuối cùng sẽ được truyền vào output layer, được tính toán lại bởi hàm kích hoạt softmax và cho ra output cuối cùng. Sau đó, hàm mất mát sẽ được tính toán để phục vụ cho quá trình lan truyền ngược tiếp ngay sau đó. Giai đoạn lan truyền thẳng sẽ được tóm tắt bằng các công thức sau đây: • Gán input cho input layer: a(0) = x (2.6) • Tính toán đầu ra cho hidden layer: z(l) = W(l)T a(l−1) + b(l) , l = 1, 2, ...L (2.7) • Áp dụng activation function: a(l) = f (l) (z(l) ), l = 1, 2, ...L (2.8) • Tính output cuối cùng: ŷ = sof tmax(a(l) ) 2.2.2 (2.9) Backpropagation - Lan truyền ngược Trong báo cáo này, chúng em sử dụng thuật toán gradient descent (GD), cụ thể là mini-batch gradient descent để tối ưu mạng MLP do đây là một trong những phương pháp phổ biến cũng như đơn giản nhất thường 12 được sử dụng. Mini-batch ở đây được hiểu là các weights và biases sẽ được cập nhật sau một tập các điểm dữ liệu. GD có thể được sử dụng để tính gradient cho các ma trận trọng số và biases dựa trên một cặp điểm dữ liệu huấn luyện x, y , tức là các trọng số được cập nhật lại sau mỗi một cặp điểm dữ liệu. Để áp dụng được thuật toán SGD, chúng ta cần tính được đạo hàm của hàm mất mát theo từng ma trận trọng số W(l) và vector bias b(l) . Giả sử J (W, b, X, Y) là một hàm mất mát của bài toán, trong đó W, b là tập hợp tất cả các ma trận trọng số giữa các layer và vector bias của mỗi layer. X, Y là cặp dữ liệu huấn luyện với mỗi cột tương ứng với một điểm dữ liệu. Để có thể áp dụng các phương pháp gradient descent, chúng ta cần tính được các ∇W(l) J ; ∇(bl) J, ∀l = 1, 2, ..., L. Tuy nhiên, việc tính toán trực tiếp các giá trị đạo hàm là cực kỳ phức tạp vì hàm mất mát không phụ thuộc trực tiếp vào các ma trận hệ số và vector bias. Phương pháp phổ biến nhất được sử dụng để giải quyết vấn đề này có tên là backpropagation - thuật toán cho phép ta tính đạo hàm ngược từ layer cuối cùng đến layer đầu tiên. Layer cuối cùng được tính toán trước vì nó gần gũi với đầu ra dự đoán và hàm mất mát nhất. Việc tính toán đạo hàm của các ma trận hệ số trong các layer trước được thực hiện dựa trên một quy tắc chuỗi quen thuộc cho đạo hàm của hàm hợp. Hình 2.5: Mô phỏng cách tính lan truyền ngược 13 Đạo hàm của hàm mất mát theo một thành phần của ma trận trọng số của output layer: ∂J (L) ∂wij trong đó e(jL) = (l) toán và ∂zj (L) ∂wij ∂J (L) ∂zj (l ) ∂J = (l) ∂zj . ∂zj (L) ∂wij = e(jL) a(i L−1) (2.10) thường là một đại lượng không quá khó để tính = a(i L−1) vì zj(L) = wj(L)T a(L−1) + b(jL) . Tương tự, đạo hàm của hàm mất mát theo bias của layer cuối cùng là: ∂J (L) = ∂bj ∂J (L) ∂zj (L) . ∂zj (L) = ej (2.11) ∂bj Dựa vào hình 2.5, bằng quy nạp ngược từ cuối, ta sẽ suy ra được công thức tính đạo hàm hàm mất mát theo từng trọng số tại layer thứ l. Thuật toán lan truyền ngược khi sử dụng SGD có thể được tóm tắt bởi các bước như sau: 1. Thực hiện bước feedforward: với một giá trị đầu vào x, tính giá trị đầu ra của mạng, lưu lại các giá trị activation trong quá trình tính toán a(l) . 2. Với mỗi unit j ở output layer, tính: (L) ej = ∂J (L) ∂zj ; ∂J ∂J = a(i L−1) e(jL) ; (L) = e(jL) ( L ) ∂wi j ∂b (2.12) j 3. Với l = L-1, L-2,...,1, tính:   (L) (l+1) (l+1) (l) ej = wj e f 0 (zj ) (2.13) 4. Cập nhập đạo hàm cho từng hệ số: ∂J (l ) ∂wij = a(jl−1) e(jl) ; 14 ∂J (l ) ∂bj = e(jl) (2.14) Chương 3 LẬP TRÌNH VÀ MÃ NGUỒN Trong chương 3, chúng em sẽ trình bày về các kỹ thuật lập trình chuyên sâu để xây dựng mạng thần kinh nhân tạo MLP sử dụng ngôn ngữ lập trình C++ cũng như mã nguồn của các thành phần trong mạng qua các phần: • Lập trình • Mã nguồn C++ • Mã nguồn Python 15 3.1 Lập trình Cấu trúc dự án xây dựng mô hình mạng neural MLP sử dụng ngôn ngữ C++ của chúng em bao gồm các phần chính như sau: • data: folder lưu trữ dữ liệu Hình 3.1: Folder data chứa dữ liệu cho quá trình huấn luyện và thử nghiệm 16
- Xem thêm -

Tài liệu liên quan