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 -