34 2.8 Các ứng dụng của việc sử dụng phương pháp phát hiện lỗ hổng bảo mật trong hợp đồng thông minh sử dụng các cách tiếp cận học máy và biểu diễn đồ thị ...- 35 CHƯƠNG 3.. Đầu tiên, vi
Trang 1ĐẠI HỌC QUỐC GIA HO CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THONG TIN
KHOA MẠNG MAY TÍNH VÀ TRUYEN THONG
TRAN XUAN NAM - 20521637
A STUDY ON SMART CONTRACT VULNERABILITY
DETECTION USING MACHINE LEARNING AND GRAPH
REPRESENTATION APPROACH
CU NHAN NGANH AN TOAN THONG TIN
GIANG VIEN HUGNG DAN:
ThS Trần Tuấn Dũng
TP.Hồ Chí Minh - 2024
Trang 2LỜI CẢM ƠN
Trong thời gian thực hiện nghiên cứu khóa luận tốt nghiệp, nhóm đã nhân
được nhiều sự giúp đỡ, đóng góp ý kiến và chỉ bảo nhiệt tình của thầy cô, bạn
bè Với sự giúp đỡ này đã giúp nhóm rất nhiều trong việc cũng cố kiến thức và giải đáp những thắc mắc còn tồn đọng.
Nhóm xin gửi lời cám ơn chân thành đến thầy Trần Tuấn Dũng giảng viên khoa Mang máy tính và truyền thông dữ liệu trường đại học Công Nghệ Thông Tin, người đã tận tình hướng dẫn, chỉ bảo nhóm trong suốt quá trình làm khóa luận tốt nghiệp vừa qua.
Với những kiến thức đã đạt được trong khóa luận này nhóm báo cáo có thể tự
tin hơn trên chặng đường tốt nghiệp sắp tới và trong cuộc sống sau này Nhóm xin được chúc thầy và các cán bộ giảng viên đang công tác tại trường thật nhiều sức khỏe và thành công trong cuộc sống.
Trần Xuân Nam
Trang 3DANH MUC CAC BANG BIEU vii
CHƯƠNG 1 TONG QUAN DE TÀI 3
11 Giới thiéu vấn der gE 1é.” ^® 3
1.2 Các nghiên cứu liên quan So 4 1.3 Những thách thức Ặ Q.0 QC 5
1.4 Mục tiêu, đối tượng, và phạm vi nghiên cứu 6
1.41 Mục tiêu nghiên cỨu cố 6
1.4.2 Dối tượng nghiên cứu 6
143 Phạm vinghiéncttu co 6
1.4.4 Cấu trúc của khóa luận tốt nghiệp - 6
CHƯƠNG 2 CƠ SỞ LÝ THUYET 8
2.1 Các thành phần liên quan đến hợp đồng thông minh §
2.2 Các lỗ hồng phổ biến 9
2.3 Tree-sitter na 11
2.4 Cây cú pháp trừu tượng (AST) 13
2.41 Thành phần của AST 13 2.42 VíiduvềASlT Q2 14
2.4.3 Quá trình tạo AST Q2 15
244 UngdungctaAST 00.0.0 00004 16
2.4.5 AST trong phát hiện lỗ hổng bảo mật hợp đồng thông minh 16
Trang 42.5 Biểu diễn đồ thị 2 2Q Qua 17
2.5.1 Đồ thị va ứng dụng trong việc phân tích mã 17
2.5.2 Dồ thị dòng dữ liệu (DFG) 18
2.5.3 Đồ thị dòng dữ liệu quan trọng (CDFG) 18
2.5.4 Đồ thị có hướng (Directed Graph) 19
2.6 Machine Learning 00.0.0 00000 20 2.6.1 Khái nệm 0 0000.00 2 eee 20 2.6.2 Khanangtuhoc 2.0 0022 ee 21 2.6.3 Phân loại 0 00000000 eee ee 22 2.6.4 Cách thức hoạt d6ng 22
2.7 Học sâu (Deep Learning) - 0000005 23 2.7.1 Mot số thành phần chính của mang no-ron 24
2.7.2 Một số các khái nệm khác 25
2.7.3 Một số kiến trúc mạng nơ-ron pho biến trong lĩnh vực học SUA me ể v tan | / ee ol 2.7.4 Phương pháp hoc trong hoc sau 33
2.7.5 Các ham tính toán khoảng cách thường dting 34
2.8 Các ứng dụng của việc sử dụng phương pháp phát hiện lỗ hổng bảo mật trong hợp đồng thông minh sử dụng các cách tiếp cận học máy và biểu diễn đồ thị - 35
CHƯƠNG 3 TỔNG QUAN VỀ MÔ HÌNH 37 3.1 Dinh nghĩa van đề Q co 37 3.2 Tiền xử lí dữ liệu Q Q Q Q Q Q Q Q s 38 3.2.1 Đối với mô hình huấn luyện GraphCodeBễERT 38
3.2.2 Dối với mô hình huấn luyện GCN 45
3.3 Dưa dữ liệu đã xử lý vào mô hình huấn luyện 48
3.3.1 Mô hình huấn luyện GraphCodeBERT 49
3.3.2 Mô hình huấn luyện GCN 52
3.4 Phương phấp đánh giá 54
Trang 54.2.1 Xử lí dữ liệu cho mô hình huấn luyện GraphCodeBERT 59
4.2.2 Xử lí dữ liệu cho mô hình huấn luyện GCN 63 4.2.3 Dưa dữ liệu đã xử lí vào mô hình huấn luyện GraphCode-
5.2 Hướng cải thiện và phát triển 2 78
TÀI LIỆU THAM KHẢO 80
Trang 6DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
AI Artificial Intelligence AST Abstract Syntax Tree API Application Programming Interface CDFG Crucial Data Flow Graph
CNN Convolutional Neural Network CFG Control Flow Graph
DeFi Decentralized Finance DFG Data Flow Graph
DNN _ Deep Neural Network EOS Ethereum Operating System
FN False Negative
FP False Positive GAN — Generative Adversarial Network
GCN — Graph Convolutional Network
GNN Graph Neural Networks GRU Gated Recurrent Unit
IDE Integrated Development Environment LSTM Long Short-Term Memory
MSE Mean Squared Error
N Số lượng các chức năng tương đồng được xếp hang
NLP Natural Language Processing RNN Recurrent Neural Network
TP True Positive TMP Temporal Message Propagation Network
TN True Negative
Trang 7DANH MỤC CÁC HÌNH VE
Hình 2.1 Ví dụ về lỗ hong Reentrancy 11
Hình 2.2 Ví dụ về một đoạn mã nguồn đơn giản 14
Hình 23 Cây cú pháp trừu tượng tương Ứng - 15
Hình 2.4 Sơ đồ tự học của Machine Learning 21
Hình 25 Mô hình mạng nơron 25
Hình 2.6 Ví dụ về một mô hình CNN để phân loại hình anh 31
Hình 27 Vi dụ về mô hình kết hợp CNN và RNN 33
Hình 3.1 Mô hình tổng quan - Kết hợp GraphCodeBERT va GCN trong phát hiện lỗ hong hợp đồng thông minh 38
Hình 3.2 Quy trình trích xuất luồng dữ liệu quan trọng từ mã nguồn 39 Hình 3.3 Quy trình của khi chuyển đổi mã nguồn thành AST với thu viện WA Siti‘ 6Ð ẻẻẽẻẽẹộ¬ Do 41
Hình 3.4 Quy trình chuyển đổi từ AST thành DFG 42
Hình 3.5 Thuật toán chuyển đổi từ DFG thành CDFG 44
Hình 3.6 Các giai đoạn tao và chuẩn hóa đồ thị trong phương pháp cua ching toi 2 NI | aaanaaAaa 45 Hình 37 Mô hình GraphCodeBồERT 49
Hình 3.8 Kiến trúc mô hình GraphCodeBERT của chúng toi 51
Hình 3.9 Sơ ddmotaGCN 0 00200200008 52 Hình 3.10 Kiến trúc mô hinh GCN 53
Hình 4.1 Hàm để xóa các comment không cần thiết 58
Hình 4.2 Kết quả sau khi xóa các comment 59
Hình 4.3 Chương trình để tạo một tệp JSONL chứa dữ liệu các hợp
Trang 8Hình 4.4 Két quả của tệp JSONL sau khi được tạo 61
Hình 4.5 Két quả khi biên dich hợp đồng ví dụ từ hình 3.2 thành DFG 61 Hình 4.6 Doan mã để xác định các nút quan trong 62
Hình 4.7 Đoạn mã để loại bỏ các điểm độc lập không phụ thuộc vào nút quan tỌNE Q Q Q Q Q H H Q k V V 63 Hình 48 Kết quả khi rút gọn DFG thành CDFG 63
Hình 4.9 Một ví dụ về hợp đồng thông minh 64
Hình 4.10 Kết quả cạnh đặc trưng của hình 4.9 64
Hình 4.11 Kết quả cạnh nút đặc trưng của hình 49_ 64
Hình 4.12 Kết quả khi chuẩn hóa đồ thị biểu diễn của hợp đồng ví dụ hình 4.9 thành dang vecfOT Ặ Ặ 000000045 65 Hình 4.13 Lớp RobertaClassificationHead - đầu ra cho các tác vụ phân loại céu § GIA @ \À 66
Hình 4.14 Lớp Model - kiến trúc của mô hình GraphCodeBERT 66
Hình 4.15 Các thông số config của mô hình - 67
Hình 4.16 Lớp GraphConvolutionLayer - lõi của GCN và thực hiện các phép tích chập trên đồ thị 70
Hình 4.17 Lớp GƠN - mô hình mạng nơ-ron sử dụng để xử lý dữ liệu dạng đồ thị ca 71 Hình 4.18 Hàm huấn luyện mô hình GƠCN 72
Hình 4.19 Biểu đồ training loss của mô hình GraphCodeBERT với mỗi
epoch an iủú.a ee 74
Hình 4.20 Biểu đồ F1 score của mô hình GraphCodeBERT với mỗi steps 7ð
Trang 9DANH MUC CAC BANG BIEU
Bang 3.1 Tom tắt các cạnh ngữ nghĩa Tat cả các cạnh được phân
loại thành 4 loại, bao gồm luồng điều khiển, luồng dữ liệu, chuyển
Bảng 4.1 Các chỉ số đánh giá của mô hình
Trang 10-TÓM TẮT
Ngày nay, việc phát hiện 16 hong bảo mật trong mã nguồn của hợp đồng thông
minh đang ngày càng quan trọng hơn trong lĩnh vực công nghệ blockchain va
an ninh mạng Các hợp đồng thông minh, do đặc thù của chúng, yêu cầu mức
độ bảo mật cao và không thể dễ dàng sửa đổi sau khi được triển khai Vì vậy,việc phát hiện sớm các lỗ hổng trong mã nguồn là cực kỳ quan trọng để đảm
bảo tính toàn vẹn và an toàn của các giao dịch trên blockchain.
Đầu tiên, việc phát hiện lỗ hổng trong mã nguồn của hợp đồng thông minh
có thể giúp ngăn chặn các cuộc tấn công mạng và bảo vệ tài sản số Các lỗ hổngtrong hợp đồng thông minh có thể bị khai thác bởi các tin tặc để đánh cắp tài
sản hoặc gây ra những hậu quả nghiêm trọng khác Bằng cách phân tích mã
nguồn và phát hiện các lỗ hổng tiềm an, các nhà phát triển có thể sửa chữa
chúng trước khi triển khai hợp đồng lên blockchain
Tiếp đến, trong phát triển phần mềm, việc phát hiện lỗ hổng trong mã nguồn
của hợp đồng thông minh giúp đảm bảo chất lượng và độ tin cậy của phần mềm.
Các nhà phát triển có thể sử dụng các kỹ thuật phát hiện lỗ hổng để kiểm tra
mã nguồn, phát hiện các lỗi và tối ưu hóa mã, từ đó giảm thiểu rủi ro bảo mật
và tăng cường hiệu suất của hợp đồng thông minh.
Cuối cùng, trong nghiên cứu bảo mật, phát hiện lỗ hong trong mã nguồn của
hợp đồng thông minh giúp phát triển các biện pháp bảo vệ mới Bằng cách phân
tích các hợp đồng thông minh khác nhau và tim ra các lỗ hổng chung, các nhànghiên cứu có thể phát triển các phương pháp phát hiện và ngăn chặn các cuộc
tấn công tương tự trong tương lai.
Cùng với phương pháp phát hiện lỗ hổng thông thường, phương pháp pháthiện lỗ hong dựa trên hoc sâu cũng đang ngày càng phát triển và chứng minh sự
hiệu quả vượt trội so với các phương pháp truyền thống Các phương pháp phát
Trang 11hiện 16 hong truyền thống thường dựa trên các kỹ thuật thống kê hoặc so sánh
ký tự Tuy nhiên, các kỹ thuật này có thể không hiệu quả trong trường hợp mã
nguồn được mã hóa hoặc biến đổi Trong những năm gần đây, các phương pháp
phát hiện lỗ hồng dựa trên học sâu đã được phát triển và cho thấy hiệu quả cao
hơn Các phương pháp này sử dụng các mô hình học sâu để học các đặc điểmcủa mã nguồn, từ đó có thể phát hiện các 16 hổng ngay cả khi mã nguồn được
mã hóa hoặc biến đổi
Trong khóa luận của mình, chúng tôi đã đề xuất hai phương pháp phát hiện lỗ
hổng bảo mật trong mã nguồn của hợp đồng thong minh là GraphCodeBERFT[S]
va Graph Convolutional Network (GCN)[11] Sau đó chúng tôi sử dụng phương
pháp Ensemble Learning để kết hợp kết quả từ hai mô hình trên và đưa ra kếtluận cuối cùng Phương pháp này có thể tận dụng sức mạnh của cả hai mô hình
để đạt được độ chính xác cao hơn trong việc phát hiện lỗ hổng Chúng tôi cũng
đã thực hiện các thực nghiệm để đánh giá và so sánh độ hiệu quả của các phương
pháp khi áp dụng vào mô hình của chúng tôi.
Trang 12CHƯƠNG 1 TONG QUAN DE TÀI
Chương này giới thiệu về van đề chúng tôi sẽ nghiên cứu và các nghiên cứu
đã có trước đó Đồng thời chúng tôi trình bày phạm vi và cấu trúc của khóa
luận.
1.1 Giới thiệu vấn đề
Phát hiện lỗ hong trong mã nguồn của hợp đồng thong minh là một bài toán
quan trọng trong lĩnh vực blockchain và công nghệ hợp đồng thông minh Bài
toán này nhận đầu vào là mã nguồn của một hợp đồng thông minh và đưa ra
đầu ra là các lỗ hồng có thể tồn tại trong mã đó hoặc là đưa ra dự đoán hợp đồng
có bị lỗ hổng không Các lỗ hổng này có thể thuộc nhiều loại như Timestamp
Dependency, Reentrancy, Integer Overflow/Underflow,
Công việc này mặc dù có vẻ đơn giản nhưng lại được ứng dung thực tế rất nhiều và cũng quan trọng trong lĩnh vực blockchain Ví dụ, phát hiện các lỗ
hồng có thể giúp ngăn ngừa các cuộc tấn công và mất mát tài sản trong hợpđồng thông minh Ngoài ra, việc kiểm tra và phân tích mã nguồn cũng có thể
giúp cải thiện tính an toàn và độ tin cậy của các ứng dụng blockchain.
Tuy nhiên, đây là một lĩnh vực phức tạp và đầy thách thức Mã nguồn của hợp đồng thông minh thường phải đối mặt với các yếu tố như sự phức tạp của ngôn ngữ lập trình, tính chất đặc thù của các giao dịch và môi trường blockchain,
cũng như các tiêu chuẩn bảo mật khắt khe Việc phát hiện và giải quyết các lỗhồng đòi hỏi sự kết hợp giữa kiến thức về blockchain, lập trình và an ninh mạng
Trang 131.2 Các nghiên cứu liên quan
Trong kỷ nguyên công nghệ số hiện nay, hợp đồng thông minh đã trở thành
một phần thiết yếu của nền kinh tế kỹ thuật số Tuy nhiên, những lỗ hồng bảo
mật trong các hợp đồng này có thể gây ra nhiều rủi ro tiềm an, dẫn đến các van
đề nghiêm trọng như mất mát tài sản và lạm dụng thông tin cá nhân Để giảiquyết vấn đề này, việc phát triển các phương pháp tự động hóa hiệu quả hơn là
vô cùng cần thiết.
Kể từ khi học máy (Machine Learning) phát triển và ngày càng có nhiều
những nghiên cứu nhấm đến vào những năm gần đây, học máy và học sâu cũng
được áp dụng vào lĩnh vực phát hiện lỗ hong bảo mật của hợp đồng thông minh
và các giải pháp tiên tiến cho vấn đề này gần đây đều liên quan đến học máy.
Như Yuan Zhuang và các cộng sự[16] đã đề xuất sử dụng mạng nơ-ron đồ
thị (Graph Neural Networks - GNNs) để nâng cao độ chính xác trong phát hiện
lỗ hổng so với các phương pháp khác vào khoảng thời gian năm 2021 Cụ thể,phương pháp này xây dựng một đồ thị hợp đồng để biểu diễn cấu trúc cú pháp
và ngữ nghĩa trong hợp đồng thong minh Dé tăng cường sự quan trọng củacác nút chính, phương pháp này thiết kế một giai đoạn loại bỏ để chuẩn hóa
đồ thị Sau đó,mạng truyền thông tin thời gian (Temporal Message Propagation
Network - TMP) được đề xuất để học từ các đồ thị đã chuẩn hóa để phát hiện
lỗ hổng
Sau đó, Lejun Zhang va các cộng sự[15| cũng đề xuất là xây dựng một đồ
thị thông tin (information graph) để biểu diễn các mối quan hệ giữa các thành
phần trong hợp đồng thông minh Sau đó kết hợp nhiều mô hình khác nhau như Convolutional Neural Network(CNN), Recurrent Neural Network (RNN),
Transformer, để đưa ra phán đoán cuối cùng về lỗ hong bảo mat trong hợp
đồng thông minh Mô hình này vượt trội hơn hắn Yuan Zhuang do việc tích hợp
7 loại mô hình khác nhau.
Cuối cùng, vào năm 2023, Lei Zhang và các cộng su[9] đề xuất là xây dựng
Trang 14mot m6 hinh phat hién 16 hổng dựa trên việc hợp nhất các đặc điểm cú pháp và
ngữ nghĩa Lei Zhang sử dụng cây cú pháp trừu tượng (Abstract Syntax Tree
-AST) và đồ thị luồng điều khiển (Control Flow Graph - CFG) để biểu diễn cú pháp và ngữ nghĩa của hợp đồng thong minh, sau đó hợp nhất các đặc điểm này
để phát hiện lỗ hổng
1.3 Những thách thức
Như đã trình bày, phát hiện được những lỗ hing tiềm tàng của một hợp đồng
thông minh không hề dễ dàng Thường những khó khăn đến từ những lí do sau:
e Sự đa dạng của ngôn ngữ viết nên hợp đồng: Hợp đồng thông minh thường
được viết bằng ngôn ngữ đặc thù như Solidity [3] (cho Ethereum) hoặc Vyper,
và ngôn ngữ này có cú pháp và cách hoạt động riêng Điều này làm cho việc
phân tích và tìm lỗ hồng trở nên phức tạp hơn so với phân tích mã nguồn
thông thường.
e Sự thay đổi của hợp đồng: Hợp đồng thông minh có thể được sửa đổi và
nâng cấp sau khi được triển khai Điều này đòi hỏi công cụ kiểm thử phải
theo kịp các thay đổi này và đảm bảo rằng các lỗ hổng không xuất hiện sau
khi hợp đồng đã được cập nhật.
e Do phức tạp của mạng lưới blockchain: Hợp đồng thông minh thường hoạt
động trong một mạng lưới blockchain phân tán, và việc tìm lỗ hong trongmôi trường phân tán này có thể phức tạp hơn so với môi trường truyềnthống Công cụ kiểm thử cần có khả năng xử lý các khía cạnh phân tán và
xác định các lỗi có liên quan.
e Phạm vi kiểm thử hạn chế: Do tính phức tạp của hợp đồng thông minh,
việc kiểm thử toàn diện có thể là không khả thi Công cụ kiểm thử tự độngchỉ có thể tìm ra các lỗi mà nó được lập trình để tìm kiếm, và có thể bỏqua những lỗ hổng khác
Trang 151.4 Mục tiêu, đối tượng, và phạm vi nghiên cứu
1.4.1 Mục tiêu nghiên cứu
Nghiên cứu phương pháp phát hiện lỗ hồng bảo mật hợp đồng thông minh
sử dụng cách tiếp cận học máy và biểu diễn đồ thị
1.4.2 Đối tượng nghiên cứu
Đối tượng nghiên cứu:
e Các thành phần cấu tạo nên hợp đồng thông minh
e Cách triển khai hợp đồng trên một Private chain
1.4.8 Pham vi nghién cứu,
Trích xuất các thuộc tính và chức năng ham của hợp đồng thông minh Thuc
hiện xây dựng mô hình phát hiện lỗ hổng bảo mật hợp đồng thông minh sử
dụng cách tiếp cận học máy và biểu diễn đồ thị và đánh giá khả năng phát hiện
lỗ hong bảo mật hợp đồng thông minh của phương pháp đã nghiên cứu
1.4.4 Cấu trúc của khóa luận tốt nghiệp
Chúng tôi trình bày nội dung của khóa luận theo cấu trúc như sau:
Trang 16e Chương 1: Giới thiệu tổng quan về dé tài của khóa luận và những nghiên
cứu tương tự có liên quan.
e Chương 2: Trình bày cơ sở lý thuyết và những kiến thức liên quan phục vụ
cho đề tài.
e Chương 3: Trình bày phương pháp phát hiên lỗ hong bảo mật hợp đồng
thông minh mà chúng tôi đã nghiên cứu
e Chương 4: Trình bày các thí nghiệm và đánh giá.
e Chương 5: Kết luận và hướng phát triển của đề tài
Trang 17CHƯƠNG 2 CƠ SỞ LÝ THUYẾT VÀ THÀNH PHẦN
LIÊN QUAN
Trong phần này chúng tôi sẽ trình bày các cơ sở lý thuyết liên quan của
nghiên cứu: Bao gồm các thành phần liên quan của hợp đồng thong minh, biểu
diễn đồ thị, mô hình học máy và học sâu.
2.1 Các thành phần liên quan đến hợp đồng thông minh
Ngôn ngữ hợp đồng: Ñgôn ngữ hợp đồng là ngôn ngữ mà hợp đồng thông minh
được viết bằng Các ngôn ngữ phổ biến trong lĩnh vực này bao gồm Solidity (cho
Ethereum), Vyper, Serpent, NEO và nhiều ngôn ngữ khác Ngôn ngữ hợp đồng định nghĩa các quy tắc và điều khoản của hợp đồng thông minh.
Môi trường blockchain: Hợp đồng thông minh hoạt động trong một môi trường
blockchain phân tán Blockchain cung cấp môi trường để triển khai và thực
thi hợp đồng thông minh Một số môi trường blockchain phổ biến bao gồm
Ethereum, Bitcoin, NEO, EOS và nhiều mạng lưới blockchain khác.
Mã nguồn hợp đồng: Mã nguồn hợp đồng là mã máy tính chứa quy tắc và logic của hợp đồng thông minh Nó được viết bằng ngôn ngữ hợp đồng tương
ứng và thường được triển khai trên mạng lưới blockchain Mã nguồn hợp đồng
xác định hành vi và chức năng của hợp đồng thông minh
Giao thức thực thi: Giao thức thực thi là một tập hợp các quy tắc và thuật
toán được sử dụng để thực thi hợp đồng thong minh trên mạng lưới blockchain
Giao thức thực thi dam bao rằng các hành động trong hợp đồng được thực hiện
một cách đáng tin cậy và an toàn.
Giao dịch và sự kiện: Hợp đồng thông minh tương tác với các giao dịch va
sự kiện trong mạng lưới blockchain Giao dịch là các hoạt động như chuyển tiền
Trang 18hoặc thay đổi trạng thái của hợp đồng thong minh, trong khi sự kiện là các
thông báo hoặc tín hiệu từ mạng lưới blockchain mà hợp đồng thông minh phan
ứng và thực hiện các hành động tương ứng.
Trong nghiên cứu này, chúng tôi chỉ chọn hợp đồng được viết bằng ngôn ngữ
Solidity và được triển khai trên mạng Ethereum Điều này có các lí đo sau đây:
e Độ phổ biến: Solidity là ngôn ngữ hợp đồng thông minh phổ biến nhất
cho mạng Ethereum và có cộng đồng lớn, đông đảo Việc chọn Solidity
đảm bảo rằng có nhiều tài liệu, ví dụ và công cụ hỗ trợ để nghiên cứu
va phát triển hợp đồng thông minh
Da dang dataset: Sự pho biến của Solidity din đến nguồn dữ liệu
phong phú, cho phép thu thập, phân tích và đạt được kết quả tích
cực.
Tính ứng dụng cao: Ethereum là một mạng lưới blockchain có hiệu
suất và tính mở rộng tương đối tốt, cho phép triển khai hợp đồng
thông minh với quy mô lớn và giao dịch nhanh chóng Việc nghiên
cứu và phát triển hợp đồng thông minh trên Ethereum có thé đáp
ứng được yêu cầu hiệu suất và tính mở rộng của các ứng dụng thực
tê œx
2.2 Các lỗ hồng phổ biến
Một số lỗ hồng tồn tại phổ biến hiện nay mà chúng tôi tìm hiểu trong quá
trình nghiên cứu:
e Suicidal: Hacker có thể tan dụng một giao diện không được bảo vệ để
phá hủy một hợp đồng bị lỗ hổng này Câu lệnh tiềm năng dễ bị tấncông liên quan đến lệnh selfdestruct Hacker có thể lựa chọn bất kỳ
hợp đồng nào được đặt trên blockchain.
Trang 19e Call injection: Hacker gọi một hàm nhạy cảm, ví dụ như chuyển quyền
sở hữu, của một hợp đồng nạn nhân Các câu lệnh tiềm năng dễ bị tấn công bao gồm lệnh call, callcode và delegatecall.
e Chuyển giá trị tùy ý (ví dụ: Reentrancy) : Hacker chuyển đổi token
hoặc ether từ một hợp đồng nạn nhân; nếu việc chuyển khoản được
lặp lại, chúng tôi gọi đó là cuộc tấn công tái nhập Chức năng tiếp
thu lỗ hồng ở đây là cuộc gọi của call.value
e Integer overflow/underflow : Tran số hoặc tràn số thực cho một biến
số nguyên có độ dài cố định Các câu lệnh tiếp thu lỗ hổng là cáchướng dẫn add, sub và mul Nếu lỗ hổng nằm trong một chức năng
mà bất kỳ hợp đồng nào cũng có thể gọi, kẻ thù cũng có thể là bất kỳ
hợp đồng nào nằm trên blockchain, không có quyền truy cập vào các chức năng đặc quyền, vi dụ như chức năng có modifer onlyOwner Nếu
lỗ hồng nằm trong một chức năng mà chỉ các hợp đồng đặc biệt có
thể gọi, kẻ thù cũng là các hợp đồng đặc biệt đó nằm trên blockchain
Ví dụ, trong đoạn mã dưới, kẻ tấn công gọi hàm attack (dòng 23) trong hợp đồng Attack, điều này sẽ thực thi ham withdraw trong hợp đồng Reentrance tai dòng 24 Khi hợp đồng Reentrance thực thi hàm withdraw (dòng 3), nó sẽ sử
dụng một câu lệnh gọi để gửi ether đến hợp đồng Attack (dòng 6) Tuy nhiên,
trong ngôn ngữ Solidity, khi một tài khoản bên ngoài hoặc hợp đồng khác gửi ether đến một địa chỉ hợp đồng, hàm fallback của hợp đồng được gọi sẽ được
thực thi Do đó, vào thời điểm này, hợp đồng Attack phản hồi việc chuyển tiền
bằng hàm fallback của Attack (dòng 27) Hàm fallback của Attack gọi lại hàm
withdraw của Reentrance để rút ether một lần nữa (dòng 29) Do đó, hợp đồng
Attack sẽ tiếp tục rút tiền từ hợp đồng Reentrance cho đến khi hết gas và câu
lệnh trừ số lượng token được giữ bởi hợp đồng Attack chỉ được thực thi một lần
duy nhất.
Trang 20| contract Reentrance{
2 mapping (address=>uint) public balance;
3 function withdraw(uint _amount) {
12 function() public payable{}
I§ contract Attack{
19 Reentrance public entrance;
20 constructor(address _target) public{
26 /fanname function is the fallback function
27 function() public payable{
28 // re-enter the Reentrance contract
29 entrance.withdraw(0.5 ether);
Hình 2.1: Ví dụ vé lỗ hong Reentrancy
2.3 Tree-sitter
Tree-sitter[1] là một công cụ hiện đại và có cách sử dung đa dạng để phân
tích cú pháp, được thiết kế để tạo ra các cây cú pháp trừu tượng (AST)[14] một
cách hiệu quả và chính xác Tree-sitter có thể được sử dụng cho nhiều ngôn ngữ
lập trình khác nhau và hỗ trợ nhiều tính năng tiên tiến.
Trang 21Các đặc điềm chính của Tree-sitter:
e Hiệu suất cao: Tree-sitter được thiết kế để phân tích cú pháp nhanh và hiệu
quả, có khả năng xử lý mã nguồn lớn một cách nhanh chóng Nhờ sử dụng
các kỹ thuật tiên tiến, Tree-sitter giảm thiểu thời gian phan tích và tối ưu
hóa việc sử dụng tài nguyên hệ thống.
e Khả năng cập nhật động (Incremental parsing): Tree-sitter hỗ trợ cập nhật
động, cho phép tái phân tích chỉ các phần thay đổi của mã nguồn mà không
cần phân tích lại toàn bộ tệp Điều này rất hữu ích trong các ứng dụng biên tập mã nguồn và IDE, nơi mã nguồn thường xuyên được chỉnh sửa.
e Da ngôn ngữ: Tree-sitter có khả năng hỗ trợ nhiều ngôn ngữ lập trình khác
nhau thông qua việc sử dụng các ngữ pháp (grammars) cụ thể Các ngữ
pháp này được định nghĩa dưới dạng các tệp JSON hoặc JavaScript, giúp
dễ dang mở rộng và tùy chỉnh.
e Cấu trúc cây cú pháp rõ ràng và có thể truy vấn: Cây cú pháp được tạo ra
bởi Tree-sitter rất chỉ tiết và có thể được truy vấn dễ dàng Tree-sitter cungcấp API để truy vấn và duyệt cây cú pháp, cho phép người dùng trích xuấtthông tin cụ thể từ mã nguồn
e Tích hợp tốt với các công cụ và môi trường phát triển: Tree-sitter có thể
tích hợp dễ dàng với các môi trường phát triển tích hợp (IDE) và các công
cụ phân tích mã nguồn Nó được ứng dung rộng rãi trong các trình soạn
thảo mã như Visual Studio Code, Atom, và nhiều dự án mã nguồn mở khác.
Sử dụng Tree-sitter để phát hiện lỗ hổng bảo mật hợp đồng thông minh đóng
vai trò quan trọng nhờ các khả năng sau:
e Phân tích cú pháp hợp đồng thông minh: Tree-sitter có thể tạo ra AST từ
mã nguồn của hợp đồng thông minh, giúp phân tích cú pháp và logic của
Trang 22hợp đồng Việc này giúp xác định các cấu trúc nguy hiểm và các hành vi
không an toàn trong mã nguồn.
e Phát hiện mẫu lỗ hồng: Sử dụng AST được tạo ra bởi Tree-sitter, các công
cụ phân tích có thể tìm kiếm các mẫu mã tương ứng với các lỗ hồng bảomật phổ biến Các mẫu này có thể bao gồm reentrancy, integer overflow,
race conditions, và các lỗ hồng logic khác.
e Tích hợp với học máy: AST từ Tree-sitter có thể được sử dụng làm đầu vào
cho các mô hình học máy, giúp cải thiện khả năng phát hiện 16 hong bằngcách nhận diện các mẫu phức tạp và ngữ cảnh cụ thể Các mô hình họcmáy có thể học từ dit liệu mã nguồn và phát hiện các lỗ hổng mới mà cácphương pháp phân tích tĩnh truyền thống có thể bỏ sót
2.4 Cây cú phấp trừu tượng (AST)
Cây cú pháp trừu tượng (Abstract Syntax Tree - AST) là một cấu trúc dữ
liệu dạng cây dùng để biểu diễn cú pháp của mã nguồn trong một ngôn ngữ lập
trình AST trừu tượng hóa mã nguồn bằng cách bỏ qua một số chi tiết không
cần thiết và chỉ tập trung vào cau trúc logic của chương trình Nó là một công
cụ quan trọng trong các trình biên dịch, phân tích mã nguồn, và trong việc phát
— Nút con (Child nodes): Đại diện cho các thành phần cấu trúc nhỏ hơn,
như câu lệnh, biểu thức, biến, hàm,
Trang 23Hình 2.2: Ví dụ vé một đoạn mã nguồn đơn giản
AST tương ứng có thể được biểu diễn như sau:
Trang 24Hành 2.3: Câu cú pháp trừu tượng tương ứng
2.4.8 Quá trình tạo AST
Phân tích từ vựng (Lexical Analysis): Chuyển đổi mã nguồn thành một chuỗi
các token Mỗi token đại diện cho một phần tử cơ bản của ngôn ngữ (chẳng hạn
như từ khóa, toán tử, biến, số) Phân tích cú pháp (Parsing): Sử dụng các token
để xây dựng AST Quá trình này bao gồm:
e Xây dựng nút gốc: Bat đầu từ nút gốc, đại diện cho toàn bộ chương trình.
e Thêm nút con: Mỗi token được xử lý để tạo ra các nút con, xây dựng cây
từ dưới lên.
Trang 252.4.4 Ứng dụng của AST
AST có nhiều ứng dụng đối với mã nguồn của hợp đồng thông minh, bao gồm
những ứng dụng sau:
e Phân tích mã nguồn: AST giúp phân tích cú pháp và logic của mã nguồn
mà không cần xử lý trực tiếp văn bản mã nguồn.
e Tối ưu hóa mã: Trình biên dịch sử dụng AST để áp dụng các bước tối ưu
hóa, như loại bỏ mã thừa, tối ưu hóa biểu thức,
e Phát hiện lỗ hong bảo mật: AST cho phép phát hiện các mẫu mã không an
toàn hoặc các hành vi bất thường trong mã nguồn.
e Chuyển đổi mã nguồn: AST có thể được sử dụng để chuyển đổi mã nguồn
từ ngôn ngữ này sang ngôn ngữ khác, hoặc để tao ra mã nguồn được tối wu
hóa.
2.4.5 AST trong phát hiện lỗ hổng bảo mật hợp đồng thông minh
Trong ngữ cảnh phát hiện lỗ hổng bảo mật hợp đồng thông minh, AST được
sử dụng để:
e Phân tích cú pháp và ngữ nghĩa: AST giúp xác định các hành vi và cấu
trúc cú pháp nguy hiểm trong hợp đồng thông minh
e Phát hiện mẫu lỗ hổng: Phân tích AST giúp nhận diện các lỗ hồng phổ biến
như reentrancy, tràn số nguyên, và race conditions một cách hiệu quả.
e Tích hợp với các kỹ thuật học máy: AST có thể được sử dụng làm đầu vào
cho các mô hình học máy, giúp tăng cường khả năng phát hiện lỗ hong bảo
mật thông minh.
Trang 26AST là một công cụ mạnh mẽ và linh hoạt cho việc phân tích mã nguồn và
phát hiện lỗ hổng bảo mật trong các hợp đồng thông minh, đóng vai trò quan
trọng trong việc bảo dam an toàn và bảo mật cho các hệ thống blockchain.
2.5 Biểu diễn đồ thị
2.5.1 Đồ thi va ứng dựng trong tiệc phân tích mã
Đồ thị là một cấu trúc toán học gồm các đỉnh (vertices) và các cạnh (edges)
nối các đỉnh với nhau Trong lĩnh vực phân tích mã, đồ thị được sử dụng để biểu
diễn các mối quan hệ và luồng điều khiển trong chương trình Các đỉnh của đồthị thường biểu diễn các thực thể trong mã như biến, hàm, điều kiện, hay cácđiểm đánh dấu quan trọng trong chương trình Các cạnh của đồ thị biểu thị cácmối quan hệ giữa các thực thể này, có thể là luồng điều khiển, phụ thuộc dữ
liệu, hoặc các tương tác khác.
Ứng dụng của đồ thị trong phân tích mã:
e Biéu diễn cấu trúc chương trình: Đồ thị được sử dụng để hiển thị cấu trúc
của chương trình một cách trực quan Ví dụ, đồ thị luồng điều khiển (CFG)biểu diễn các khối mã và các đường dẫn điều khiển giữa chúng, giúp nhìn
nhận rõ ràng các luồng thực thi trong chương trình.
e Phân tích và đánh giá độ phức tạp của mã: Thông qua việc phân tích đồ
thị, ta có thể xác định mức độ phức tạp của chương trình Điều này bao
gồm việc đánh giá số lượng và kích thước của các khối mã, phân tích các điều kiện phân nhánh, cũng như sự phụ thuộc giữa các hàm và biến.
e Phát hiện lỗ hổng bảo mật: Đồ thị cũng hữu ích trong việc phát hiện và
phân tích các lỗ hổng bảo mật trong mã nguồn Ví dụ, nó có thể giúp xácđịnh các điểm yếu trong luồng điều khiển, các đường dẫn không an toàn,
hoặc việc sử dụng biến không an toàn.
Trang 27e Tối ưu hóa mã: Bằng cách phan tích cấu trúc và luồng điều khiển của chương
trình, đồ thị có thể hỗ trợ việc tối ưu hóa mã, ví dụ như loại bỏ các đoạn
mã không cần thiết, tối ưu hóa các vòng lặp, hay cải thiện hiệu suất thực
thi chương trình.
2.5.2 Đồ thi dòng dữ liệu (DFG)
e Dinh nghĩa: Đồ thị dòng dit liệu (DEFG){[13] là một đồ thị có các nút biểu
thị các biến chương trình và các cạnh biểu thị các mối quan hệ phụ thuộc
giữa các biến này Các mối quan hệ này thường là các dòng dữ liệu, trong
đó giá trị của một biến được truyền từ một nút đến nút khác thông qua các
lệnh gán, phép toán, hoặc hàm gọi.
e Ứng dụng: DFG hữu ích trong phân tích lưu lượng thông tin trong chương
trình, giúp hiểu rõ các luồng dữ liệu và quan hệ giữa các biến N6 cung cấp một cách nhìn tổng quát về sự phụ thuộc dữ liệu trong mã nguồn, từ đó
giúp phân tích và tối ưu hóa mã.
⁄ ~ Ũ ~ «
e Ví dụ: Trong đoạn mã result = max_value - min_value;, DFG sẽ biéu
diễn mối quan hệ dòng dữ liệu giữa result, max_value, và min_value, chỉ ra rằng giá trị của result phụ thuộc vào giá trị của max_value và
min_value.
2.5.3 Đồ thị dòng dữ liệu quan trọng (CDFG)
e Dịnh nghĩa: Đồ thị dòng dữ liệu quan trọng (CDFG)[13] là một dạng đặc
biệt của DFG, tập trung vào các nút và các mối quan hệ dòng dữ liệu quan
trọng có thé gây ra các lỗ hổng bảo mật CDFG chứa thông tin quan trọngnhư các biến liên quan đến các lỗ hong bảo mật, ví dụ như call.valuetrong 16 hổng tái nhập
e Xác định các nút quan trọng: CDFG xác định các nút quan trọng bằng cách
lựa chọn các biến ở cùng một dòng với thông tin quan trọng và có mối quan
Trang 28hệ dòng dữ liệu trực tiếp với một nút quan trọng khác Các nút quan trọng
này được coi là các điểm nóng có thể gây ra các lỗ hổng bảo mật
° Ứng dụng trong phát hiện lỗ hổng bảo mật: CDFG hỗ trợ trong việc phát
hiện và đánh giá các lỗ hong bảo mật bằng cách tập trung vào các đườngdẫn dữ liệu quan trọng và có thể dẫn đến các lỗ hổng Bằng cách phân tích
CDFG, người phân tích có thể nhận diện các điểm yếu tiềm năng và cải
thiện tính bảo mật của chương trình.
2.5.4 Đồ thị có hướng (Directed Graph)
Một đồ thị hướng (directed graph), hay còn gọi là đồ thị có hướng, là một cấu trúc dữ liệu toán học bao gồm tập hợp các đỉnh và tập hợp các cạnh, mỗi cạnh chỉ ra một hướng duy nhất từ một đỉnh nguồn đến một đỉnh đích Điều
này có nghĩa là các cạnh trong đồ thị hướng có thứ tự cụ thể, đi từ một đỉnh
(nguồn) và chỉ đến một đỉnh khác (đích).
Các thành phần chính của đồ thị hướng:
e Dỉnh (Vertices):
— Đồ thị hướng bao gồm một tập hợp các đỉnh, mỗi đỉnh đại diện cho
một thực thể hoặc một đối tượng
— Ví dụ, trong một đồ thị biểu diễn mối quan hệ giữa các thành phần
trong một chương trình, các đỉnh có thể biểu thị cho biến, hàm, lớp,
hoặc các thành phần khác của chương trình.
e Cạnh (Edges):
— Mỗi cạnh trong đồ thị hướng đi từ một đỉnh nguồn đến một đỉnh đích
và biểu thị một mối quan hệ hướng giữa chúng
— Các cạnh có thể có hướng duy nhất, nghĩa là từ một đỉnh A có thể có
cạnh chỉ đến một đỉnh B mà không có cạnh ngược lại từ B đến A.
Trang 29e Hướng (Direction):
— Hướng của cạnh quyết định chiều di của dit liệu hoặc mối quan hệ giữa
các đỉnh.
— Ví dụ, trong một đồ thị biểu diễn luồng điều khiển của chương trình,
mỗi cạnh từ một khối lệnh đến khối lệnh tiếp theo chỉ ra thứ tự thực
hiện của các câu lệnh.
e Cấu trúc và ứng dụng:
— Đồ thị hướng được sử dụng rộng rãi trong nhiều lĩnh vực, bao gồm khoa
học máy tính, phân tích dữ liệu, công nghệ thông tin, mô hình hóa quá
trình, và nhiều lĩnh vực khác.
— Trong lĩnh vực phân tích chương trình, đồ thị hướng có thể giúp xác
định các luồng điều khiển, phân tích phụ thuộc dữ liệu, phát hiện lỗhồng bảo mật, và cải thiện hiệu suất chương trình
e Ví dụ đơn giản:
— Ví du, giả sử chúng ta có một đồ thị hướng biểu diễn các lớp và quan
hệ giữa chúng trong một ứng dụng Các đỉnh có thể biểu diễn các lớp(Class A, Class B, Class C), và các cạnh có thể biểu thị các mối quan
hệ giữa chúng (Class A kế thừa từ Class B, Class B sử dung Class C).
2.6 Machine Learning
2.6.1 Khai niém
Machine learning (học máy) là một lĩnh vực của trí tuệ nhân tao (Artificial
Intelligence - AT) tập trung vào việc phát triển các thuật toán và mô hình đểmáy tính có thể tự động học từ dữ liệu và cải thiện hiệu suất của mình theo thời
gian Trong machine learning, các thuật toán được áp dụng để phan tích và học
Trang 30hỏi từ các mẫu dữ liệu, từ đó đưa ra các dự đoán hoặc quyết định dựa trên dữ
liệu mới mà chưa được lập trình cụ thể.
2.6.2 Kha năng tự học
Quá trình machine learning bắt đầu bằng việc xử lý dữ liệu đầu vào Dữ liệu
thô được lựa chọn và tiền xử lý để loại bỏ dữ liệu không cần thiết và sắp xếp
chúng thành nhóm có cấu trúc Các thuật toán machine learning sau đó được Ap
dụng để phân tích dữ liệu và tạo ra các phương án tối ưu Các phương án nàyđược đánh giá và kiểm nghiệm trong các điều kiện giả định để chọn ra phương
án cuối cùng phù hợp nhất với bài toán.
Sd, Learning "-: Deploy selected modelPre-processing
a Se 8-2 -@ „>8
Raw Data Structured data Candidate Model
Hình 2.4: Sơ đồ tự học của Machine Learning.
Quá trình này là 1 chuỗi khép kín, vận hành và chuyển hóa liên tục Quá
trình chi tiết bao gồm:
e Xử lý dữ liệu đầu vào: Dữ liệu thô được chọn lọc và tiền xử lý để loại
bỏ nhiễu và sắp xếp thành các nhóm có cấu trúc nhất định.
e Áp dụng thuật toán: Các thuật toán machine learning được sử dụng để
phân tích và học hỏi từ dữ liệu Các thuật toán này có thể là phân loại,học tăng cường, hoc không giám sát, hoặc kết hợp các phương pháp để datđược mục tiêu cụ thể
e Đánh giá và chọn lựa: Các phương án được đánh giá dựa trên hiệu suất
Trang 31và độ chính xác để chọn ra phương án tối ưu nhất Các phương án này sau
đó được kiểm nghiệm và cải thiện liên tục để đáp ứng yêu cầu thực tế.
2.6.3 Phan loạt
Machine Learning được chia thành 3 phân loại chính như sau:
e Hoc máy có giám sát (Supervised Machine Learning): Sử dụng dữ
liệu được gán nhãn để huấn luyện và dự đoán Các thuật toán này học từ
các ví du đã được đánh giá và đưa ra dự đoán hoặc phân loại cho dt liệu
mới dựa trên mối quan hệ giữa đầu vào và đầu ra đã biết trước.
e Hoc máy không giám sát (Unsupervised Machine Learning): Sử
dụng dữ liệu không được gấn nhãn để tự động học hỏi và phân tích các
mẫu tự nhiên trong dữ liệu Các thuật toán này giúp khám phá các cấu
trúc an trong dữ liệu và có thể áp dụng trong việc gom cụm, phân tích
thành phần chính và giảm chiều dữ liệu.
e Học máy bán giám sát (Semi-supervised Machine Learning): Kết
hợp giữa học mấy có giấm sát va không giám sát Các thuật toán này sử
dụng một lượng lớn dé liệu không được gán nhãn và một số lượng nhỏ dữ
liệu được gán nhãn để cải thiện hiệu suất và tốc độ huấn luyện
Quá trình hoc máy không chỉ là công cu mạnh mẽ để giải quyết các bài toánphức tạp mà còn là một lĩnh vực nghiên cứu đang phát triển nhanh chóng, đónggóp quan trọng vào sự phát triển của trí tuệ nhân tạo và các ứng dụng công
nghệ hiện đại.
2.6.4 Cách thức hoạt động
Quy trình hoạt động của công nghệ học máy cung cấp cho chúng ta cái nhìn
tổng quát về cách máy tính học và làm việc Cụ thể, quá trình machine learning
bao gồm các bước sau:
Trang 32Thu thập dữ liệu (Data collection): Day là bước đầu tiên và quan trọng
nhất trong quá trình học máy Để máy tính có thể học được, bạn cần thu thập
một bộ dữ liệu phù hợp Dữ liệu có thể được thu thập từ nhiều nguồn khácnhau, nhưng cần phải đảm bảo tính chính xác và đáng tin cậy từ nguồn gốc để
đạt được hiệu quả cao nhất.
Tiền xử lý (Preprocessing): Bước này dùng để chuẩn hóa và chuẩn bị dữ
liệu trước khi đưa vào huấn luyện mô hình Các hoạt động trong tiền xử lý bao
gồm loại bỏ dữ liệu nhiễu, chuẩn hóa dữ liệu, gán nhãn, mã hóa các đặc trưng,
trích xuất thông tin cần thiết và thu gọn dữ liệu sao cho vẫn đảm bảo chất lượng kết quả Bước này thường mất nhiều thời gian và chiếm tỷ lệ lớn trong quá trình thực hiện, đặc biệt là khi có nhiều dữ liệu phức tạp.
Huấn luyện mô hình (Training model): Sau khi đã tiền xử lý dữ liệu,bạn sẽ huấn luyện mô hình máy học trên bộ dữ liệu đã được chuẩn bị Quá trình
này bao gồm cung cấp dữ liệu đầu vào cho mô hình và cho phép nó học hỏi từ
các mẫu dữ liệu để tối ưu hóa và điều chỉnh các tham số
Đánh giá mô hình (Evaluating model): Sau khi đã huấn luyện mô hình,
bạn cần đánh giá hiệu suất của nó Độ chính xác của mô hình trên một tập dữ
liệu thử nghiệm được sử dụng để đánh giá Độ chính xác thường được xem là
tốt nếu vượt qua một ngưỡng nhất định, ví dụ như trên §0%.
Cải thiện (Improvement): Nếu mô hình không đạt được độ chính xác mong muốn, bạn cần tiếp tục cải thiện bằng cách đào tạo lại mô hình với các
thay đổi trong tiền xử lý hoặc thay đổi thuật toán Quá trình này lặp đi lặp lại
cho đến khi đạt được hiệu suất mong muốn.
2.7 Học sâu (Deep Learning)
Học sâu là một lĩnh vực của Trí tuệ nhân tao (Artificial Intelligence) tập
trung vào việc xây dựng và huấn luyện các mô hình máy học sâu để tự động học
từ dữ liệu cho trước Phương pháp này được lấy cảm hứng từ cách hoạt động
Trang 33của não người, trong đó mạng nơ-ron sinh học trong não xử lý thông tin qua
việc kết nối các nút nơ-ron.
Học sâu tập trung vào việc xây dựng các mô hình máy tính có khả năng học
và hiểu được những dữ liệu phức tạp, từ đó có thể thực hiện dự đoán, phân loại
và giải quyết các bài toán khó khăn Công nghệ này có ứng dụng rộng rãi trong nhiều lĩnh vực, bao gồm nhận dạng hình ảnh và video, xử lý ngôn ngữ tự nhiên, nhận dạng giọng nói, phân tích dữ liệu y tế, xe tự hành và nhiều lĩnh vực khác.
2.7.1 Một số thành phần chính của mang no-ron
Mô hình Mạng Nơ-ron thông thường sẽ có thành phần cơ bản sau:
Lớp đầu vào (Input layer)
e Lớp đầu vào này nhận dữ liệu đầu vào và truyền chúng vào mạng
nơ-ron để xử lý
e Kích thước của lớp đầu vào phụ thuộc vào đặc điểm của dữ liệu và
mục tiêu của bài toán cần giải quyết.
Lớp an (Hidden layers)
e Lớp an là nơi xảy ra quá trình biến đổi dữ liệu va trích xuất đặc trưng.
e Mỗi lớp an sẽ có một số nút nơ-ron và các kết nối giữa chúng để truyền
thông tin qua mạng nơ-ron.
Lớp đầu ra (Output layer)
e Lớp này nhận thông tin từ các lớp an và đưa ra kết quả cuối cùng của
mô hình Hình 2.5
Trang 34@ input Layer (ềHiddenLayer @ Output Layer
Hình 2.5: Mô hình mang no-ron
Ke
2.7.2 Một sô các khái niệm khác
Overfitting
Overfitting là hiện tượng trong mạng nơ-ron khi mô hình quá tinh chỉnh cho
tập dữ liệu huấn luyện cụ thể mà nó không mang tổng quát hóa tốt cho dữ liệumới mà không biết trước Mạng nơ-ron có thể học các mẫu và quy tắc phức tạp
trong tập dữ liệu huấn luyện, đến mức nó ghi nhớ cả các nhiễu và chi tiết không
cần thiết Điều này dẫn đến mô hình quá phức tạp và khả năng tổng quát hoá
kém.
Các dấu hiệu của overfitting trong mạng nơ-ron thường là việc đánh giá trên tập dữ liệu huấn luyện thì cho kết quả rất tốt, nhưng khi đánh giá trên một tập khác thì kết quả lại có sự khác biệt lớn.
Underfitting
Trang 35Underfitting là hiện tượng trong mạng nơ-ron không được cung cấp đủ thông
tin và dữ liệu cho quá trình huấn luyện Trong trường hợp này, mang nơ-ron chưa
đủ khả năng học các mẫu phức tạp và quy tắc trong dit liệu huấn luyện.
Các dấu hiệu của underfitting trong mạng nơ-ron thường là hiệu suất thấp
trên cả tập dữ liệu dùng để huấn luyện và tập dữ liệu dùng để kiểm tra
Lan truyền thuận (forward propagation)
Lan truyền thuận là quá trình dữ liệu khi được đưa vào mô hình sẽ đi từ các
lớp đầu vào đến các lớp ẩn rồi đến lớp đầu ra Trong quá trình lan truyền thuận,
đầu vào của mỗi nơ-ron trong mạng được tính toán dựa trên các trọng số kết
nối và hàm kích hoạt tương ứng
Quá trình lan truyền thuận bắt đầu bằng việc gán giá trị đầu vào cho các nơ-ron trong lớp đầu vào Sau đó, thông qua các kết nối trọng số giữa các nơ-ron,
di liệu được truyền qua các lớp ẩn của mạng nơ-ron Mỗi nơ-ron trong mỗi lớp
tính toán giá trị đầu ra của nó dựa trên giá trị đầu vào và hàm kích hoạt của
nó Quá trình này lặp lại cho đến khi dữ liệu được truyền qua tất cả các lớp ẩn
và đạt được lớp đầu ra Trong quá trình lan truyền thuận, mạng no-ron tính toán giá trị đầu ra dự đoán cho mỗi mẫu dữ liệu đầu vào Quá trình này cho
phép mạng nơ-ron học và thực hiện các dự đoán dựa trên các trọng số được điều chỉnh trong quá trình huấn luyện.
Lan truyền ngược (back propagation)
Lan truyền ngược là một thuật toán sử dụng để tính toán đạo hàm của hàmmất mát theo các trọng số của mạng nơ-ron, từ đó điều chỉnh các trọng số để
tối ưu hóa mạng.
Quá trình lan truyền ngược bắt đầu từ việc tính toán đầu ra của mạng nơ-ron dựa trên dữ liệu huấn luyện và các trọng số hiện tại Sau đó, đạo hàm của hàm mat mát được tính toán đối với các trọng số của mạng Dao hàm này cho biết
mức độ ảnh hưởng của từng trọng số đến sự sai khác giữa kết quả dự đoán và
giá trị thực tế.
Trang 36Tiếp theo, đạo ham được truyền ngược từ lớp đầu ra qua các lớp trước đó
của mạng Tại mỗi nơ-ron, đạo hàm được tính dựa trên đạo hàm của các nơ-ron
trong lớp tiếp theo và trọng số kết nối tương ứng Quá trình này tiếp tục cho đến khi đạo hàm được tính toán cho tất cả các nơ-ron trong mạng.
Sau khi đã tính toán được đạo hàm của hàm mat mát theo các trọng số, các trọng số được điều chỉnh sử dụng một thuật toán tối ưu hóa như gradient descent Thuật toán gradient descent sẽ cập nhật các trọng số theo hướng giảm đạo ham, từ đó làm giảm hàm mất mát và cải thiện hiệu suất của mạng.
Ham kích hoạt (Activation function)
Ham kích hoạt được áp dung cho mỗi nút nơ-ron trong các lớp an và lớp đầu
ra để tạo ra các đầu ra phi tuyến tính và đưa ra quyết định Chúng đóng vai
trò quan trong trong việc tạo ra độ linh hoạt và khả năng học của mạng nơ-ron.
Một số loại hàm kích hoạt là:
e Hàm Sigmoid: Hàm sigmoid ánh xạ một giá trị đầu vào vào khoảng
(0, 1) Tức là khi áp dụng hầm này cho một giá trị đầu vào, nó trả về một giá trị trong khoảng từ 0 đến 1.
e Hàm Tanh: Tương tự như hàm sigmoid, hàm tanh ánh xạ giá trị đầu
vào vào khoảng (-1, 1) N6 giúp tăng cường độ dốc của đầu ra so với
hàm sigmoid.
e Hàm ReLU (Rectified Linear Unit): Hàm này trả về giá trị đầu vào
nếu kết quả tính toán lớn hơn 0 và trả về 0 nếu nó nhỏ hơn hoặc bằng
0 Hàm này giúp mô hình học nhanh hơn và dễ dàng tính toán.
e Hàm Leaky ReLU: Tương tự như ReLU, hàm Leaky ReLU trả về giá
trị đầu vào nếu kết quả tính toán lớn hơn 0 và trả về một giá trị nhỏ
hơn 0 nhân với một hệ số nhỏ nếu nó nhỏ hơn hoặc bằng 0 Điều này
giúp khắc phục vấn đề "neuron chết" trong hàm ReLU.
e Hàm Softmax: Được sử dung trong lớp cuối cùng của mạng nơ-ron để
Trang 37ánh xạ đầu ra thành một phân phối xác suất Hàm softmax tính toán
đầu ra sao cho tổng các giá trị đầu ra bằng 1, giúp giải quyết bài toán
phân loại da lớp.
Mỗi hàm kích hoạt có ưu điểm và đặc điểm riêng, và sự lựa chọn của hàm kích
hoạt phụ thuộc vào kiến trúc mạng đang sử dung, yêu cầu của bài toán, loại dữ
liệu,
Ham mat mát (loss function)
Hàm mat mát là một hàm số dùng dé đo lường sự khác nhau giữa kết quả
dự đoán của mô hình và kết quả thực tế của tập dữ liệu Hàm này có nhiệm vụ
đánh khả năng dự đoán của mô hình và từ đó cung cấp 1 phản hồi để thay đổi
các trọng số của mô hình
Thông thường trong huấn luyên, một trong các mục tiêu là tìm ra các tham
số của mô hình sao cho hàm mất mát đạt giá trị nhỏ nhất
Có nhiều loại hàm mất mát khác nhau, dưới đây là một số hàm mất mát phổ
biến:
e Hàm Cross-Entropy: Hàm này đo lường độ chính xác của dự đoán so với
nhãn thực tế và cố gắng tối thiểu hóa khoảng cách giữa chúng Thường
được sử dụng trong các bài toán phân loại.
e Hàm Mean Squared Error (MSE): Hàm nay do lường chênh lệch bình
phương giữa giá trị dự đoán và giá trị thực tế Mục tiêu là tối thiểu hóa sai
số trung bình Thường được sử dụng trong bài toán hồi quy.
e Hàm Binary Cross-Entropy: Dược sử dụng trong bài toán phân loại nhị
phân, hàm này đo lường chênh lệch giữa xác suất dự đoán và nhãn thực tế.
e Hàm Categorical Cross-Entropy: Được sử dụng trong bài toán phân loại đa
lớp, hàm này đo lường chênh lệch giữa phân phối xác suất dự đoán và nhãn
thực tế.
Trang 38Việc lựa chọn hàm mất mát đóng vai trò quan trọng trong việc tối đa hiêu suất của mô hình.
Batch size và Epoch
Batch size là số lượng mẫu dữ liệu được truyền qua mạng nơ-ron trong mỗi lần cập nhật trọng số Thay vì truyền từng mẫu dữ liệu một, chúng ta chia dữ
liệu huấn luyện thành các batch có kích thước nhất định Batch size ảnh hưởng đến hiệu suất và tốc độ huấn luyện của mô hình.
e Batch size lớn: Nếu chon batch size lớn, mô hình sẽ được cập nhật trọng số
ít lần hơn trong mỗi epoch, giúp tăng tốc độ huấn luyện vì phần lớn thời gian chạy sẽ được dành cho việc tính toán và không cần truyền dữ liệu qua
mạng Tuy nhiên, đòi hỏi bộ nhớ lớn hơn và có thể không khả thi đối với
bộ nhớ hạn chế.
e Batch size nhỏ: Nếu chọn batch size nhỏ, mô hình sẽ được cập nhật trong
số nhiều lần hơn trong mỗi epoch, làm cho quá trình huấn luyện chậm hơn
vì cần truyền đữ liệu qua mạng cho mỗi lần cập nhật Tuy nhiên, batch size
nhỏ có thể giúp mô hình hội tụ tốt hơn và có khả năng tìm được điểm tối
ưu cục bộ tốt hơn.
Epoch là một vòng lặp hoàn chỉnh mà mô hình học được toàn bộ tập dữ liệu
huấn luyện đã chuẩn bị Số lượng epoch tức là số lần mà mô hình được huấn
luyện trên toàn bộ dữ liệu.
e Nếu chọn số lượng epoch nhỏ, thời gian huấn luyện sẽ it,có thể dẫn đến
underfitting, tức là mô hình không học được đủ thông tin từ dữ liệu
e Số lượng epoch lớn: Nếu chọn số lượng epoch lớn, mô hình sẽ được huấn
luyện trong một khoảng thời gian dài, có thể dẫn đến overfitting, tức là môhình hoc quá mức các đặc trưng của dữ liệu huấn luyện cụ thể, din đến
hiệu suất kém trên dữ liệu mới
Trang 39Để dễ hình dung hơn về 2 tham số này, chúng tôi lấy một ví dụ như sau:
Giả sử chúng toi dang có một bữa ăn cơm Thay vi ăn một lần hết một chén
cơm, chúng tôi muốn ăn từng muỗng cơm cho đến khi hết chén đó, sau đó chứng
tôi chuyén sang chén cơm khác Trong quá trinh nay, các khái niệm sau được áp
dụng:
e Tap dataset: Tương ứng uới tổng lượng cơm trong toàn bộ bữa ăn.
e Batch size: Số lượng hat cơm trong mỗi muỗng cơm chúng tôi ăn mỗi lần.
Điều nay quuết định số lượng đữ liệu mà chúng tôi xử ly cùng một lúc trong quá trinh huấn luyện.
e Epoch: Số bát cơm chúng tôi ăn trong toàn bộ quá trình.
Ví dụ nay giúp hành dung vé cách batch size va epoch hoạt động trong quá trình huấn luyện mang no-ron Chứng tôi chia tập dataset thành các batch (muỗng
com) uới kích thước được định trước (chén cơm - batch size) Khi huấn luyện,
chúng tôi sẽ lặp lại quá trinh nay theo số lượng epoch, tức là ăn nhiều chén cơm
tương ứng uới sô lần lặp Mục tiêu là di qua toàn bộ tập dataset (hết chén cơm)
va cập nhật các tham số của mmô hành để tối ưu hóa
Ma trận nhầm lẫn (confusion matrix)
Dây là một công cụ quan trọng trong đánh giá hiệu suất của các mô hình học
máy và các bài toán phân loại No được sử dụng dé mô tả sự tương quan giữa
các dự đoán của mô hình và các nhãn thực tế của dữ liệu.
Confusion matrix có dạng một bảng vuông chứa các giá trị đại diện cho các
kết quả phân loại Bảng được chia thành các ô, trong đó hàng thể hiện nhãnthực tế và cột thể hiện nhãn dự đoán No giúp chúng ta có cái nhìn tổng quan về
khả năng phân loại của mô hình, từ đó tính toán các độ đo đánh giá hiệu suất
như accuracy, precision, recall, F1-score, và các độ đo khác Bằng cách phan tích
confusion matrix, ta có thể hiểu rõ hơn về các loại lỗi phân loại mà mô hình gặpphải và điều chỉnh mô hình để cải thiện độ chính xác
Trang 402.7.3 Một số kiến trúc mang nơ-ron phổ biến trong lĩnh uực học
sâu
Mạng nơ-ron Tích chập (Convolutional Neural Network - CNN)
e Kiến trúc CNN được sử dung chủ yếu trong xử lý ảnh.
e Bao gồm các lớp tích chập (convolutional) để trích xuất đặc trưng từ
ảnh và các lớp gộp (pooling layers) để giảm kích thước của đặc trưng
e Cuối cùng, các lớp kết nối đầy đủ (fully connected layers) được sử
convolution + max pooling
nonlinearity
convolution + pooling layers fully connected layers Nx binary classification
Hình 2.6: Vi dụ vé một mô hành CNN để phân loại hành ảnh
Mạng nơ-ron Hồi quy (Recurrent Neural Network - RNN)
e Kiến trúc RNN được sử dụng trong xử lý dữ liệu tuần tự như ngôn
ngữ tự nhiên và dữ liệu chuỗi thời gian.
e Có khả năng lưu trữ thông tin trạng thái trước đó và áp dụng lặp lại
cho di liệu mới.
e Mạng LSTM (Long Short-Term Memory) và GRU (Gated Recurrent
Unit) là các biến thé phổ biến của RNN giúp khắc phục van dé mất
thông tin dài hạn.