Tải bản đầy đủ (.doc) (57 trang)

ứng dụng mạng nơron trong phát hiện mã độc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.39 MB, 57 trang )

HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA CÔNG NGHỆ THÔNG TIN

ĐỀ TÀI THỰC TẬP CƠ SỞ

Nghiên cứu, ứng dụng kỹ thuật dịch
ngược và mạng nơ-ron trong phát hiện
mã độc
Cán bộ hướng dẫn: Giảng viên Phạm Văn Hưởng
Sinh viên thực hiện:
- Ngô Văn Thỉnh
- Phạm Công Lý
- Nguyễn Văn Hoàng
Lớp: AT9A

HÀ NỘI 2015

1


HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA CÔNG NGHỆ THÔNG TIN

ĐỀ TÀI THỰC TẬP CƠ SỞ

Nghiên cứu, ứng dụng kỹ thuật dịch
ngược và mạng nơ-ron trong phát
hiện mã độc
Nhận xét của cán bộ hướng dẫn:.........................................................................................
.............................................................................................................................................
.............................................................................................................................................


.............................................................................................................................................
.............................................................................................................................................

Điểm chuyên cần:..................................................................................................................
Điểm báo cáo:.......................................................................................................................

Xác nhận của cán bộ hướng dẫn

2


LỜI CÁM ƠN
Chúng em xin chân thành cám ơn thầy giáo Phạm Văn Hưởng, khoa công
nghệ thông tin, Học viện Kỹ thuật Mật mã đã định hướng và tận tình hướng dẫn
chúng em hoàn thành đề tài này.
Chúng em cũng xin chân thành cám ơn các thầy cô đã đóng góp ý kiến quý
báu cho chúng em qua các buổi seminar để chúng em có thể hoàn thành khóa thực
tập cơ sở chuyên ngành.

Hà Nội, ngày 28 tháng 12 năm 2015
Nhóm sinh viên thực hiện

3


MỞ ĐẦU
Ngày này cùng với sự phát triển của Internet và máy tính các mối hiểm hoạ
cho hệ thống thông tin của chúng ta cũng tăng lên không ngừng. Một trong những
nguy cơ mất an toàn cho hệ thống của chúng ta đó là hệ thống có thể bị nhiễm mã
độc bất cứ khi nào. Mã độc ngày càng sử dụng nhiều kỹ thuật phức để tránh bị phát

hiện. Do đó việc phát hiện mã độc luôn là vấn đề khó và để phát hiện chúng một
cách toàn diện, các phần mềm phát hiện phải được viết sao cho có thể phát hiện và
loại bỏ chúng một cách chính xác nhất.
Có nhiều kỹ thuật phát hiện mã độc đã được sử dụng như: Sử dụng bộ giả lập
dựa trên kỹ thuật heuristics, phân rã mã ... tuy nhiên chưa có kỹ thuật nào phát hiện
một cách toàn diện. Mặt khác các kỹ thuật này còn phức tạp, và để hiệu cặn kẽ về
chúng là việc không đơn giản. Do vậy, việc tìm các phương pháp mới để phát hiện
Virus đa hình là cần thiết. Ngoài ra, với sự phát triển của việc ứng dụng trí tuệ nhân
tạo trong công nghệ tính toán mềm đang dần trở thành một xu thế tất yếu, sử dụng
mạng nơ ron nhân tạo trong các bài toán phân tích và nhận dạng cũng không nằm
ngoài xu thế đó. Vậy nên chúng em đã chọn đề tài "Nghiên cứu, ứng dụng kỹ thuật
dịch ngược và mạng nơ-ron trong phát hiện mã độc" để thực hiện nghiên cứu và đã
đạt được những kết quả nhất định.

4


MỤC LỤC
LỜI CÁM ƠN.........................................................................................................................3
MỞ ĐẦU...............................................................................................................................4
MỤC LỤC..............................................................................................................................5
DANH MỤC HÌNH VẼ............................................................................................................6
CHƯƠNG 1:KỸ THUẬT DỊCH NGƯỢC...................................................................................8
CHƯƠNG 2:MẠNG NƠ RON NHÂN TẠO............................................................................13
CHƯƠNG 3:ÁP DỤNG KỸ NGHỆ DỊCH NGƯỢC VÀ ANN ĐỂ PHÁT HIỆN MÃ ĐỘC...............33
KẾT LUẬN...........................................................................................................................55
TÀI LIỆU THAM KHẢO.........................................................................................................56

5



DANH MỤC HÌNH VẼ
HÌNH 1.1: IDA PRO 6.2........................................................................................................11
HÌNH 2.2: MÔ HÌNH NƠ-RON SINH HỌC............................................................................14
HÌNH 2.3: MÔ HÌNH MẠNG NƠ-RON NHÂN TẠO Ở MỨC ĐƠN GIẢN................................15
HÌNH 2.4: HÀM ĐỒNG NHẤT (IDENTITY FUNCTION)..........................................................16
HÌNH 2.5: HÀM BƯỚC NHỊ PHÂN (BINARY STEP FUNCTION).............................................17
HÌNH 2.6: HÀM SIGMOID...................................................................................................17
HÌNH 2.7: HÀM SIGMOID LƯỠNG CỰC..............................................................................17
HÌNH 2.8: MẠNG TRUYỀN THẲNG MỘT LỚP......................................................................18
HÌNH 2.9: MẠNG TRUYỀN THẰNG NHIỀU LỚP...................................................................19
HÌNH 2.10: MÔ HÌNH HUẤN LUYỆN CÓ GIÁM SÁT.............................................................20
HÌNH 2.11: MÔ HÌNH MẠNG TRUYỀN THẲNG MỘT LỚP....................................................21
HÌNH 2.12: MẠNG NƠ-RON TRUYỀN THẰNG NHIỀU LỚP.................................................21
HÌNH 2.13:MÔ HÌNH LAN TRUYỀN NGƯỢC........................................................................22
HÌNH 2.14: MỘT NƠ RON TRONG TẦNG ẨN HOẶC TẦNG XUẤT........................................23
HÌNH 2.15:KIẾN TRÚC MẠNG PERCEPTRON 3 TẦNG..........................................................26
HÌNH 2.16: HÀM SIGMOID LƯỠNG CỰC............................................................................30
HÌNH 2.17: NEUROPH STUDIO............................................................................................31
HÌNH 2.18: NEURAL NETWORK TYPES................................................................................31
HÌNH 2.19: LEARNING RULES..............................................................................................32

6


HÌNH 3.20:CÁC LOẠI MÃ ĐỘC HẠI......................................................................................33
HÌNH 3.21: CẤU TRÚC CỦA MỘT FILE PE............................................................................35
HÌNH 3.22: MINH HỌA CẤU TRÚC CƠ BẢN CỦA 1 PE FILE..................................................36
HÌNH 3.23: CẤU TRÚC DOS HEADER...................................................................................37
HÌNH 3.24: PHẦN DOS HEADER VÀ PE HEADER CỦA BASECALC.EXE..................................38

HÌNH 3.25: CẤU TRÚC IMAGE_NT_HEADER.......................................................................38
HÌNH 3.26: CẤU TRÚC FILEHEADER....................................................................................39
HÌNH 3.27: GIÁ TRỊ NUMBEROFSECTION...........................................................................40
HÌNH 3.28: CẤU TRÚC DATA DIRECTORY............................................................................40
HÌNH 3.29: CẤU TRÚC PE CỦA BASECALC.EXE....................................................................42
HÌNH 3.30: CẤU TRÚC DATA DIRECTORY............................................................................42
HÌNH 3.31: DANH SÁCH 16 DIRECTORY..............................................................................43
HÌNH 3.32: THÔNG TIN CÁC DIRECTORY SỬ DỤNG HEXDITOR..........................................43
HÌNH 3.33: CẤU TRÚC SECTION TABLE...............................................................................44
HÌNH 3.34: SƠ ĐỒ CHỨC NĂNG TRÍCH CHỌN DẤU HIỆU DỰA VÀO CFL............................46
HÌNH 3.35: MÔ HÌNH CHỨC NĂNG TRÍCH CHỌN DẤU HIỆU SỬ DỤNG THUẬT TOÁN FISHER
SCORE.................................................................................................................................48
HÌNH 3.36: MÔ HÌNH CHỨC NĂNG HỆ THỐNG NHẬN DẠNG MÃ ĐỘC BẰNG PHƯƠNG
PHÁP MẠNG NƠ -RON.......................................................................................................49
HÌNH 3.37: MÔ HÌNH CẤU TRÚC MẠNG NƠ-RON DỰA TRÊN PERCEPTRON 3 TẦNG.........50

7


CHƯƠNG 1: KỸ THUẬT DỊCH NGƯỢC

1.1. Khái niệm:
Trước khi tìm hiểu kỹ thuật dịch ngược là gì ta cùng xem xét đến một tình
huống như sau:
Bạn may mắn được thưởng thức và mang về nhà 1 món ăn rất ngon từ 1 trong
những nhà hàng nổi tiếng nhất thế giới. Nhưng lượng thức ăn có hạn, làm sao để có
thể mời bạn bè món này trong các bữa tiệc?
Bạn sẽ làm gì để thực hiện được ý định của mình ???
Có 1 cách, đó là, trước khi thưởng thức, bạn nên tìm cách học xem họ chế
biến như thế nào. Không may thay, nhà hàng này không phải lúc nào bạn cũng có thể

đến, vì nó rất xa, và đầu bếp cũng không có thời gian hướng dẫn bạn, hoặc là họ sẽ
giữ bí mật, không tiết lộ cho bạn. Bạn sẽ làm gì? Bây giờ thì khó khăn hơn nhiều rồi.
Điều này buộc bạn sẽ phải quan sát xem món ăn này gồm có những thành
phần gì, nếm thử, và đoán xem có những gia vị đặc trưng nào... Đây có thể coi là
khái niệm cơ bản về kỹ thuật dịch ngược thức ăn!
Trong bài viết này chúng ta sẽ cùng xem xét về khái niệm kỹ thuật dịch
ngược, khái niệm kỹ thuật dịch ngược trong công nghệ thông tin.
“Kỹ thuật dịch ngược là quá trình tìm hiểu những công nghệ được sử dụng
bởi 1 thiết bị, 1 đối tượng hoặc 1 hệ thống thông qua việc phân tích cấu trúc,
các chức năng và hoạt động của nó ”.
• Kỹ thuật dịch ngược là 1 khái niệm rất rộng, bao gồm cả dịch ngược phần
cứng và dịch ngược phần mềm. Nhưng trong đề tài này, chúng ta chỉ tìm hiểu
kỹ thuật dịch ngược phần mềm.
• Việc phân tích hoạt động cụ thể của một hệ thống hay một chương trình sẽ
được sử dụng trong việc bảo trì chính hệ thống hay chương trình đó. Một mục
đích khác của kỹ thuật dịch ngược là phục vụ cho việc tạo ra một hệ thống
mới hoặc chương trình mới có những chức năng tương tự mà không sử dụng
hoặc chỉ là sao chép đơn giản (không có sự hiểu biết) hệ thống/chương trình
gốc.

1.2. Ứng dụng của kỹ thuật dịch ngược.
Dịch ngược được sử dụng ở rất nhiều mảng trong khoa học máy tính nhưng
sau đây là những mảng chính:
• Có được trong tay ý tưởng code của tác giả.
Tái tạo lại file code ban đầu dựa vào file nhị phân.
• Phá vỡ cơ chế bảo vệ phần mềm.

8



Phá vỡ cơ chế bảo vệ của chương trình. Điều đó có nghĩa là chúng ta gỡ bỏ
tính năng thời gian dùng thử, đăng kí sử dụng hay tất cả những thứ mà những
chương trình thương mại làm để bắt người dùng phải trả tiền.
• Học tập nghiên cứu virus hay mã độc.
Nghiên cứu virus và mã độc. Việc dịch ngược là cần thiết vì bên ngoài có rất
nhiều người viết virus và họ sẽ chẳng bao giờ để lộ cách họ viết ra virus, mục
tiêu của virus hay cách mà virus đạt được mục tiêu của mình.
• Kiểm tra chất lượng phần mềm
Kiểm tra thẩm định tính an toàn cũng như lỗ hổng của phần mềm. Khi mà
phải làm việc với một chương trình lớn (ví dụ như hệ điều hành Windows) thì
việc dich ngược giúp đảm bảo không có những lỗ hổng nghiêm trọng hay làm
khó các cracker cố gắng crack phần mềm.
• Bổ sung thêm tính năng vào chương trình.
Chúng ta có thể thêm hoặc thay đổi những tính năng trong một phần mềm
theo ý muốn. VD: thay đổi bức ảnh trong phần mềm, thêm tính năng mã hóa
văn bản vào chương trình soạn thảo…

1.3. Ứng dụng kỹ thuật dịch ngược trong phát hiện mã độc hại
1.3.1. Mở đầu
• Ngày nay khi Internet đã trở nên phổ biến toàn cầu, việc đảm bảo ATTT lại
phải đối mặt với những vấn đề khó khăn hơn trước. Một trong những vấn đề
ấy chính là vấn đề về phần mềm độc hại (malware). Qua nhiều năm nghiên
cứu và khảo sát con người đã đưa ra nhiều giải pháp nhằm đối phó lại với
các phần mềm độc hại. Nhưng có lẽ công việc bắt buộc với bất kì giải pháp
nào thì điều đầu tiên trước hết phải làm là dịch ngược lại mã nguồn của các
phần mềm độc đó.
• Với mong muốn tìm hiểu thêm về một phần kiến thức của kĩ thuật dịch
ngược đồng thời tiếp bước với phần giới thiệu tổng quan về kỹ thuật dịch
ngươc mà nhóm đã tìm hiểu thì chúng em xin được đi trọng tâm vào phần
“Reversing Malware”.

1.3.2. Thiết lập môi trường an toàn


Ở phần này, chúng em xin được mô tả kỹ thuật dịch ngược ở mức cơ bản,
thực tế thì dịch ngược phần mềm độc hại không hẳn là chúng ta phải làm thủ
công bằng tay mà thực tế là chúng ta có sẵn các công cụ hệ thống để làm
được việc này, nó sẽ cung cấp cho chúng ta những đoạn mã ở dạng
assembler, chính là dạng ngôn ngữ gần nhất với ngôn ngữ máy. Tuy nhiên
trước hết hãy xem xét khi ta dịch ngược một phần mềm độc có nghĩa chúng
ta đang làm việc với chúng và rất dễ gặp nguy hiểm, vậy nên ta sẽ làm gì
trước tiên? Vâng, hãy thiết lập một môi trường thật an toàn.



Rõ rằng khi chúng ta làm việc với phần mềm độc hại, nghĩa là hệ thống
của chúng ta đang sử dụng sẽ gặp nguy cơ bị nhiễm mã độc, vì vậy cần phải
9


chú ý thiết lập một môi trường làm việc thật an toàn. Chúng ta có thể sử
dụng các phần mềm máy ảo như Microsoft Virtual PC, VMWare
Workstation, hay Oracle Virtual Box… hoặc ta cũng có thể dùng một hệ
thống thật. Tuy nhiên hệ thống của chúng ta nên hoạt động ở chế độ không
kết nối mạng, bởi vì khi kết nối mạng sẽ dẫn đến phần mềm độc có cơ hội
phát tán và lây nhiễm sang hệ thống khác. Nếu cần chuyển một file thực thi
nào đó (chẳng hạn một file chương trình độc hại) từ hệ thống của mình vào
hệ thống kiểm tra, tốt nhất ta nên sử dụng việc ghi ra đĩa CD hay DVD để
chắc chắn rằng chúng không thể tự tái tại và ổ đĩa và lây sang hệ thống khác.
Ngoài ra, khi lưu trữ các chương trình độc hại trên ổ đĩa cứng hay trên một
đĩa CD, ta cũng có thể đổi tên chúng về dạng non-executable (đổi tên phần

mở rộng của file, vd: excute.exe > excute.txt)
1.3.3. Kỹ thuật dịch ngược phần mềm độc.
 Yêu cầu kỹ năng
Kỹ năng cần thiết nhất để dịch ngược chính là khả năng lập trình tốt, đặc
biệt là kiến thức về ngôn ngữ assembler. Chúng ta không cần phải đạt ở
trình độ lập trình cao cấp hoàn toàn nhưng yêu cầu tối thiểu chúng ta phải có
khả năng đọc hiểu mã nguồn, hiểu rõ nguyên lý và chức năng của từng hàm
lệnh.
Cần phải kiên trì, hiểu biết sâu về hệ thống, nguyên lý hệ điều hành… tư
duy logic tốt bởi vì chúng ta đều biết dịch ngược mã nguồn hoàn toàn là một
điều không hề đơn giản!
Cụ thể, chúng ta cần phải có kiến thức hiểu biết về:











System Monitor, Process Explorer, CaptureBAT, Regshot, VMware
BinText, LordPE, QuickUnpack, Firebug, PELister, PEiD
IDA Pro, OllyDbg và các plug-in OllyDump, HideOD
Rhino, Malzilla, SpiderMonkey, Jsunpack-n
Internet Explorer Developer Toolbar, cscript
Honeyd, netcat, Wireshark, curl, wget, xorsearch
OfficeMalScanner, OffVis, Radare, FileInsight

Framework và các plug-in như malfind2 và apihooks
SWFTools, Flare, shellcode2exe, giả mạo DNS…
Chuẩn bị công cụ
Công cụ cần thiết là một bộ phân tách (disassembler), có rất nhiều công
cụ giúp ta có thể dịch ngược lại mã nguồn trong đó phổ biến và hay dùng
nhất đó chính là IDA pro hay OllyDebug
IDA pro có rất nhiều phiên bản, và phiên bản mới nhất hiện tại là 6.5.
IDA pro với nhiều tính năng hữu ích có thể debug rất nhiều các định dạng
file và đưa ra sơ đồ diagram… Đồng thời được xây dựng cho nhiều hệ điều
hành như Linux, Windows và Mac. Trong kỹ thuật dịch ngược, IDA giúp ta
phân tích các đoạn mã tĩnh một cách hữu hiệu.
10


OllyDebug là công cụ chuyên dịch ngược file định dạng *.exe và *.dll về
dạng assembler. Phần mềm này có thể giúp ta phân tích mã động trong quá
trình Reverse.

Hình 1.1: IDA pro 6.2

 Reverse Malware Cheet Sheet
Đây là những hướng dẫn về các thao tác cơ bản nhất khi sử dụng kỹ thuật dịch
ngược phần mềm độc hại. Nó bao gồm quá trình phân tích phần mềm độc hại,
cũng như các mẹo sử dụng các công cụ OllyDbg, IDA pro và các công cụ
khác.
Cách tiếp cận chung
 Thiết lập một phòng thí nghiệm, kiểm soát, cô lập, trong đó để kiểm tra mẫu
phần mềm độc hại. (chính là việc tạo môi trường làm việc)
 Thực hiện phân tích hành vi để kiểm tra tương tác của malware với môi
trường của nó.

 Thực hiện phân tích mã tĩnh để hiểu rõ thêm về hoạt động bên trong của
malware. (sử dụng IDA pro để phân tích mã tĩnh sau khi Debug)
 Thực hiện phân tích mã động để hiểu các khía cạnh phức tạp hơn của mã này.
(sử dụng OllyDbg để phân tích mã động)
 Nếu cần thiết, giải nén malware. (unpack)
11


 Lặp lại các bước 2, 3, và 4 (thứ tự có thể thay đổi) cho đến khi mục tiêu phân
tích đầy đủ đáp ứng.
 Phát hiện và đưa kết quả, sau đó dọn sạch phòng thí nghiệm để phân tích
trong tương lai.
 Phân tích hành vi
 Trước hết phải chuẩn bị tính sẵn sàng của hệ thống luôn ở trạng thái tốt, bằng
cách sử dụng: dd (linux), tạo snapshot trong VMware, dùng CoreRestore,
Ghost, SteadyState…
 Sử dụng trình quản lý như Process Monitor, Process Explorer và phân tích
mạng như Wireshark, Tcpdump…
 Phát hiện ra những thay đổi cục bộ (Regshot, Autoruns)
 Chuyển hướng truy cập mạng (sử dụng việc thay đổi tập tin hosts, thay đổi
DNS hoặc dùng Honeypot)
 Kích hoạt các dịch vụ IRC, HTTP, SMTP… khi cần thiết để phát hiện ra các
hành vi mới của malware.
Loại bỏ sự phòng thủ của Malware
1. Thử unpack nhanh chóng, lây nhiễm vào hệ thống và dump bộ nhớ bằng
LordPE hoặc OllyDump
2. Đối với việc phải unpack gói lớn, ta xác định các Original Entry Point (OEP)
sau khi tiến hành unpack
3. Nếu không thể unpack, ta kiểm tra các gói thông qua việc phân tích mã động
khi chúng đang thực thi

4. Khi unpack bằng OllyDbg, hãy thử SFX (bytewise) và OllyDump để tìm
OEP
5. Có thể giấu OllyDbg bằng HideOD và OllyAdvanced
6. Một lệnh JMP hay CALL đến thanh ghi EAX có thể cho biết được vị trí của
OEP, có thể đứng trước POPA hoặc POPAD
7. Nhận ra các bước nhảy phức tạp qua các lệnh SHE, RET, CALL…
8. Nếu các gói được đóng sử dụng SHE, ta dự đoán OEP bằng cách theo dõi
vùng stack được sử dụng để lưu trữ và xử lý đóng gói
9. Giải mã dữ liệu được bảo vệ bằng cách kiểm tra kết quả của chức năng giải
mã thông qua việc phân tích mã động
10. Sửa lại các PE header với XPELister, LordPE, ImpREC, PEiD…
11. Để có thể tiếp cận gần hơn với OEP thì nên thử phá các lời gọi của unpacker
tới LoadLibraryA hoặc GetProcAddress.
12


CHƯƠNG 2: MẠNG NƠ RON NHÂN TẠO
Những năm 40 của thế kỷ 20, với mong muốn chế tạo những cỗ máy thông minh
có chức năng tương tự như bộ não con người,các nhà nghiên cứu đã phát triển những
mô hình phần cứng và phần mềm đơn giản về các nơ-ron sinh học và cơ chế tương
tác của chúng. McCull và Pitts là những người đầu tiên đã xuất bản một công trình
nghiên cứu có tính hệ thống về mạng nơ-ron nhân tạo.
Đến những năm 50 và 60, một nhóm các nhà nghiên cứu đã kết hợp những kiến
thức về sinh học và tâm thần học để tạo ra một mạng nơ-ron nhân tạo hoàn chỉnh đầu
tiên. Ban đầu được chế tạo dưới dạng mạch điện tử, sau đó các mạng nơ-ron được
chuyển thành các chương trình trên máy tính có độ linh hoạt cao hơn.
Trong thời gian gần đây, mạng nơ-ron phát triển mạnh mẽ với các nghiên cứu
của Rosenblatt, Widrow và Hoff về các mạng nơ-ron nhiều lớp phức tạp. Mặt khác,
do khả năng của phần cứng máy tính tăng lên rất nhiều cũng góp phần vào sự phát
triển cho lĩnh vực nghiên cứu này. Mạng nơ-ron nhân tạo được ứng dụng trong nhiều

lĩnh vực như: nhận dạng, phân loại, xử lý ảnh, các hệ thống điều khiển,dự báo và đặc
biệt là trong việc phát hiện các mã độc hại
Các tính chất của mạng nơ-ron nhân tạo:
 Là hệ phi tuyến: mạng nơ-ron có khả năng to lớn trong lĩnh vực nhận dạng
và điểu khiển các đối tượng phi tuyến.
 Tốc độ tính toán rất cao, rất phù hợp với lĩnh vực nhận dạng và điều khiển.
 Là hệ học và thích nghi: mạng được luyện từ các số liệu quá khứ, có khả
năng tự điều chỉnh khi số liệu đầu vào bị mất
 Là hệ biến thiên, hệ nhiều đầu vào, hệ nhiều đầu ra: rất tiện dụng khi điều
khiển đối tượng có nhiều biến số.

1.4. Cấu trúc mạng nơ-ron nhân tạo (Artifical Neural Networks-ANN):
Bộ não con người có khoảng 1011 − 1012 nơ-ron. Mỗi nơ-ron có thể liên kết với
10 4 các nơ-ron khác thông qua các khớp nối (dendrite). Các nơ-ron nhận tín hiệu
điện từ từ các khớp nối và khi sự tổng hợp các tín hiệu này vượt quá một ngưỡng cho
phép thì nơ-ron sẽ kích hoạt một tín hiệu điện ở ngõ ra để truyền tới trục nơ-ron
(Axon) và dẫn đến các nơ-ron khác.
Sau đây là những thành phần chính trong cấu trúc của một nơron trong bộ não
con người:

13


Hình 2.2: Mô hình nơ-ron sinh học

Trong đó :
- Các Soma là thân của noron.
- Các dendrites là các dây mảnh, dài, gắn liền với soma, chúng truyền dữ liệu
(dưới dạng xung điện thế) đến cho soma xử lý. Bên trong soma các dữ liệu đó được
tổng hợp lại. Có thể xem gần đúng sự tổng hợp ấy như là một phép lấy tổng tất cả

các dữ liệu mà nơron nhận được.
- Một loại dây dẫn tín hiệu khác cũng gắn với soma là các axon. Khác với
dendrites, axons có khả năng phát các xung điện thế, chúng là các dây dẫn tín hiệu từ
nơron đi các nơi khác. Chỉ khi nào điện thế trong soma vượt quá một giá trị ngưỡng
nào đó (threshold) thì axon mới phát một xung điện thế, còn nếu không thì nó ở trạng
thái nghỉ.
- Axon nối với các dendrites của các nơron khác thông qua những mối nối đặc
biệt gọi là synapse. Khi điện thế của synapse tăng lên do các xung phát ra từ axon thì
synapse sẽ nhả ra một số chất hoá học (neurotransmitters); các chất này mở "cửa"
trên dendrites để cho các ions truyền qua. Chính dòng ions này làm thay đổi điện thế
trên dendrites, tạo ra các xung dữ liệu lan truyền tới các nơron khác.
Các synapses đóng vai trò rất quan trọng trong sự học tập. Khi chúng ta học tập
thì hoạt động của các synapses được tăng cường, tạo nên nhiều liên kết mạnh giữa
các nơron.
Có thể nói rằng người nào học càng giỏi thì càng có nhiều synapses và các
synapses ấy càng mạnh mẽ, hay nói cách khác, thì liên kết giữa các nơron càng
nhiều, càng nhạy bén.
Mạng nơ-ron nhân tạo cũng hoạt động dựa theo cách thức của bộ não con người
nhưng ở cấp độ đơn giản hơn.
Hai đặc tính cơ bản của mạng nơ-ron là:
+ Quá trình tính toán được tiến hành song song và phân tán trên nhiều nơ-ron
gần như đồng thời.
14


+ Tính toán thực chất là quá trình học, chứ không phải theo sơ đồ định sẵn từ
trước.
Noron nhân tạo là một đơn vị tính toán có nhiều đầu vào và một đầu ra với ba
thuộc tính quan trọng là: trọng số kết nối (Weight), ngưỡng (Threshold) và hàm kích
hoạt (Activation function hay Transfer function).

Sau đây mà mô hình một nơ-ron nhân tạo đơn giản:

Hình 2.3: Mô hình mạng nơ-ron nhân tạo ở mức đơn giản

Nơron này sẽ hoạt động như sau: giả sử có N đầu vào (Input), nơron sẽ có N
trọng số (Weight) tương ứng. Nơ-ron sẽ lấy tổng có trọng số của tất cả các inputs.
Nói như thế có nghĩa là nơ-ron sẽ lấy đầu vào thứ nhất nhân với trọng số trên đường
vào thứ nhất, lấy đầu vào thứ hai nhân với trọng số của đường vào thứ hai v.v... rồi
lấy tổng của tất cả các kết quả thu được. Đường truyền nào có trọng số càng lớn thì
tín hiệu truyền qua đó càng lớn, như vậy có thể xem trọng số là đại lượng tương
đương với synapse trong nơ-ron sinh học. Có thể viết kết quả lấy tổng của nơ-ron
như sau:

Kết quả này sẽ được so sánh với ngưỡng (threshold) t của nơ-ron, nếu nó lớn
hơn t thì nơron cho đầu ra (Output) là 1, còn nếu nhỏ hơn thì đầu ra là 0. Ngoài ra
ta cũng có thể trừ tổng nói trên cho t, rồi so sánh kết quả thu được với 0, nếu kết quả
là dương thì nơ-ron cho đầu ra bằng 1, nếu kết quả âm thì đầu ra là 0. Ta có thể viết
đầu ra của nơron như sau:

Trong đó f là hàm chuyển bậc thang đơn vị (Heaviside):

15


f được gọi là hàm chuyển của nơ-ron, còn giá trị t còn được gọi là ngưỡng phân cực
(-bias). Kí hiệu: θ (threshold hay offset) của nơ-ron.
1.4.1. Hàm kích hoạt
Quá trình xử lý thông tin gồm: xử lí tín hiệu đầu vào và xử lí tín hiệu đầu ra.
Hàm tổng (u): dùng để kết hợp và xử lí tín hiệu các thông tin ở đầu vào
Một số hàm tổng thường gặp:

Hàm tuyến tính (linear function):
n
u = (∑ j =1 w j x j ) − θ = W T X − θ
Hàm toàn phương (quadratic function):
u = (∑ j =1 w j x 2j ) − θ
n

Hàm cầu (sherical function):
u=(

1
ρ2



n
j =1

(x j - w j ) 2 ) - θ =

1
( X − W )T ( X − W ) − θ
ρ2

Hàm kích hoạt: là hàm xử lý tìm hiệu đầu ra.
Kí hiệu: f(.)
Một số kiểu hàm thông dụng:
Hàm đồng nhất (Linear function, Identity function ):
f(x) = x


Hình 2.4: Hàm đồng nhất (Identity function)

Hàm bước nhị phân (Binary step function, Hard limit function):
1, (x >= θ ) 
f (x) = 

 0, (x < θ ) 
16


Dạng hàm này được sử dụng trong các mạng chỉ có một lớp. Trong hình vẽ sau, θ
được chọn bằng 1.

Hình 2.5: Hàm bước nhị phân (Binary step function)

Hàm sigmoid (Sigmoid function (logsig))
f (x) =

1
1 + e− x

Hàm này đặc biệt thuận lợi khi sử dụng cho các mạng được huấn luyện
(trained) bởi thuật toán Lan truyền ngược (back-propagation), bởi vì nó dễ lấy đạo
hàm, do đó có thể giảm đáng kể tính toán trong quá trình huấn luyện. Hàm này được
ứng dụng cho các chương trình ứng dụng mà các đầu ra mong muốn rơi vào khoảng
[0,1].

Hình 2.6: Hàm Sigmoid

Hàm sigmoid lưỡng cực (Bipolar sigmoid function (tansig)):

f (x) =

1 − e− x
1 + e− x

Hàm này có các thuộc tính tương tự hàm sigmoid. Nó làm việc tốt đối với các
ứng dụng có đầu ra yêu cầu trong khoảng [-1,1].

Hình 2.7: Hàm sigmoid lưỡng cực

Các hàm chuyển của các đơn vị ẩn (hidden units) là cần thiết để biểu diễn sự
phi tuyến vào trong mạng. Lý do là hợp thành của các hàm đồng nhất là một hàm
đồng nhất. Mặc dù vậy nhưng nó mang tính chất phi tuyến (nghĩa là, khả năng biểu
diễn các hàm phi tuyến) làm cho các mạng nhiều tầng có khả năng rất tốt trong biểu
diễn các ánh xạ phi tuyến. Tuy nhiên, đối với luật học lan truyền ngược, hàm phải
khả vi (differentiable) và sẽ có ích nếu như hàm được gắn trong một khoảng nào đó.
17


Do vậy, hàm sigmoid là lựa chọn thông dụng nhất. Đối với các đơn vị đầu ra (output
units), các hàm chuyển cần được chọn sao cho phù hợp với sự phân phối của các giá
trị đích mong muốn. Chúng ta đã thấy rằng đối với các giá trị ra trong khoảng [0,1],
hàm sigmoid là có ích; đối với các giá trị đích mong muốn là liên tục trong khoảng
đó thì hàm này cũng vẫn có ích, nó có thể cho ta các giá trị ra hay giá trị đích được
căn trong một khoảng của hàm kích hoạt đầu ra. Nhưng nếu các giá trị đích không
được biết trước khoảng xác định thì hàm hay được sử dụng nhất là hàm đồng nhất
(identity function). Nếu giá trị mong muốn là dương nhưng không biết cận trên thì
nên sử dụng một hàm kích hoạt dạng mũ (exponential output activation function).
1.4.2. Phân loại mạng nơ-ron nhân tạo:
Các loại mạng có thể được phân loại dựa trên các tính chất của nó:

-Mạng một lớp: gồm chỉ một lớp nơ-ron
-Mạng nhiều lớp: gồm nhiều lớp nơ-ron
-Mạng truyền thẳng: các tín hiệu trong mạng chỉ truyền theo một chiều
từ đầu vào đến đầu ra.
-Mạng hồi quy: các tín hiệu hồi tiếp từ đầu ra đến đầu vào.

Hình 2.8: Mạng truyền thẳng một lớp

18


Hình 2.9: Mạng truyền thằng nhiều lớp

1.4.3. Các phương pháp huấn luyện mạng nơ-ron:
Có hai kiểu huấn luyện:
 Huấn luyện: thông số (Parameter Learning): dùng để cập nhật các trọng số
liên kết giữa các tế bào nơ-ron và ngưỡng phân cực trong mạng.
 Huấn luyện: cấu trúc (Structure Learning): dùng để thay đổi cấu trúc mạng
bao gồm cả tế bào nơ-ron và các liên kết giữa chúng.
Ta có thể sử dụng riêng rẽ hoặc đồng thời cả hai kiểu huấn luyện trên. Tuy nhiên,
ở đây ta chỉ đến kiểu huấn luyện thông số. Có 3 kiểu huấn luyện thông số:
 Luật huấn luyện có giám sát(Supervised Learning):
Là quá trình huấn luyện có giám sát, ở mỗi thời điểm thứ i khi đưa tín hiệu vào
xi của mạng nơ-ron, tương ứng sẽ có các đáp ứng mong muốn d i của đầu ra cho
trước ở thời điểm đó. Hay nói cách khác, trong quá trình học có giám sát, mạng nơron được cung cấp liên tục các cặp số mong muốn vào-ra ở từng thời điểm khi cho
đầu vào thực của mạng xk tương ứng sẽ có tín hiệu đầu ra cũng được lặp lại là d k
giống như mong muốn. Kết quả của quá trình huấn luyện có giám sát là tạo được một
hộp đen có đầu vào véc-tơ tín hiệu x sẽ đưa ra được câu trả lời đúng d.

19



Hình 2.10: Mô hình huấn luyện có giám sát

Để đạt được kết quả mong muốn trên, khi đưa vào tín hiệu xk , thông thường sẽ
có sai lệch ek giữa tín hiệu đầu ra thực yk và tín hiệu đầu ra mong muốn d k . Sai lệch
đó sẽ được truyền ngược lại tới đầu vào để điều chỉnh thông số mạng nơ-ron là ma
trận trọng số W. Quá trình cứ thế tiếp diễn sao cho sai lệch giữa tín hiệu ra mong
muốn và tín hiệu thực thế trong phạm vi cho phép, kết quả ta nhận được ma trận
trọng số W với các phần tử wij đã được điều chỉnh phù hợp với các đặc điểm của đối
tượng hay hàm số mạng nơ-ron cần học.
 Luật huấn luyện củng cố (Reinforcement Learning):
Không như huấn luyện có giám sát được cung cấp mục tiêu trước (mỗi tín hiệu
đầu vào sẽ có một tín hiệu đầu ra tương ứng), luật huấn luyện củng cố chỉ được cung
cấp theo mức (Ví dụ:"đúng" hoặc "sai"). Bởi vì trong thực tế không phải lúc nào ta
cũng có đầy đủ thông tin về đối tượng. Vì vậy, kiểu huấn luyện củng cố sẽ thích hợp
nhất cho những ứng dụng điều khiển hệ thống.
Tín hiệu d có thể được đưa vào từ bên ngoài môi trường, nhưng tín hiệu này có
thể không được đưa đầy đủ, mà có thể chỉ đưa đại diện 1 bít để cho tính chất kiểm tra
quá trình đúng và sai. Tín hiệu đó được gọi là tín hiệu củng cố. Phương pháp học
củng cố chỉ là một trường hợp của phương pháp huấn luyện có giám sát, bởi vì nó
cũng có tín hiệu chỉ đạo phản hồi từ môi trường. Chỉ khác là tín hiệu củng cố chỉ có
tính ước lượng hơn là để dạy. Có nghĩa là chỉ có thể nói là tốt hay xấu cho một tín
hiệu đầu ra cá biệt. Tín hiệu giám sát bên ngoài d thường được tiến hành bởi các tín
hiệu ước lượng để tạo thông tin tín hiệu ước lượng cho mạng nơ-ron điều chỉnh trọng
số với hy vọng sự ước lượng đó mạng lại sự tốt đẹp cho quá trình tính toán. Huấn
luyện củng cố còn được gọi là huấn luyện với sự ước lượng.
 Luật huấn luyện không có giám sát:
Trong trường hợp này, hoàn toàn không có tín hiệu ở bên ngoài. Giá trị mục tiêu
điều khiển không được cung cấp và không được tăng cường. Mạng phải khám

20


phá các mẫu, các nét đặc trưng, tính cân đối, tính tương quan... Trong khi khám
phá các đặc trưng khác, mạng nơ-ron đã trải qua việc tự thay đổi thông số, vấn đề
đó còn gọi là tự tổ chức.
1.4.4. Mạng nơ-ron truyền thằng
1.4.4.1. Mạng nơ-ron truyền thằng một lớp:

Hình 2.11: Mô hình mạng truyền thẳng một lớp

Một lớp nơ-ron là một nhóm các nơ-ron mà chúng cùng nhận một số tín hiệu và
đồng thời.
Trong ma trận trọng số w, các dòng thể hiện trọng số của mỗi nơ-ron, mỗi dòng
thứ j có thể đặt nhãn như một véc-tơ w j của nơ-ron thứ j gồm m trọng số wij .
Các trọng số trong cùng một cột thứ j=(1,2,....n) đồng thời nhận cùng một tín
hiệu x j .
Tại cùng một thời điểm, véc-tơ đầu vào x= ( x1 , x2 ...xn ) có thể một nguồn bên
ngoài là cảm biến hoặc thiết bị đo lường đưa tới mạng. Tới khi toàn bộ ma trận trọng
số được xác định tương ứng với véc-tơ đầu vào X thì các tích số wij xi cũng được tính
toán.
1.4.4.2. Mạng nơ-ron truyền thẳng nhiều lớp:

Hình 2.12: Mạng nơ-ron truyền thằng nhiều lớp

Trong mạng nơ-ron truyền thẳng nhiều lớp các lớp được phân thành 3 loại
sau:
 Tầng đầu vào: là lớp nơ-ron đầu tiên nhận được tín hiệu vào xi của
21



véc-tơ tín hiệu vào X. Mỗi tín hiệu xi của tín hiệu vào sẽ được đưa đến
tất cả các nơ-ron của lớp nơ-ron đầu tiên, chúng được phân phối trên
các trọng số có số lượng đúng bằng số nơ-ron của lớp này. Thông
thường, các nơ-ron đầu vào không làm biến đổi các tín hiệu vào xi tức
là chúng không có các trọng số hoặc các hàm chuyển đổi nào, chúng chỉ
đóng vai trò phân phối các tín hiệu và không đóng vai trò sửa đổi chúng.
 Tầng ẩn: là lớp nơ-ron dưới lớp vào, chúng không trực tiếp liên hệ với
thế giới bên ngoài như các nơ-ron vào ra.
 Tầng đầu ra: là lớp nơ-ron tạo ra các tín hiệu cuối cùng.

1.5. Tìm hiểu giải thuật lan truyền ngược
1.5.1. Lan truyền ngược

Hình 2.13:Mô hình lan truyền ngược

Là quá trình xử lý tập các mẫu huấn luyện được lặp đi lặp lại nhiều lần, mỗi
bước lặp so sánh các lớp mà mạng nơ-ron dự đoán cho mỗi mẫu với các lớp chính
xác của các mẫu. Với mỗi mẫu huấn luyện, các trọng số được điều chỉnh sao cho
cực tiểu sai số trung bình bình phương (phương sai) của lớp được dự đoán và lớp
thực sự. Sự điều chỉnh các trọng số này được thực hiện ở bước quay ngược lại tức
là bước từ tầng đầu ra quay ngược qua các tầng ẩn đến tầng ẩn đầu tiên. Mặc dù
không chắc chắn nhưng hầu hết các trọng số đều hội tụ về một giá trị và quá trình
22


huấn luyện hết thúc. Thuật toán lan truyền ngược gồm các bước như sau:
Bước 1: Khởi tạo các trọng số
Các trọng số trong mạng được khởi tạo giá trị ngẫu nhiên trong khoảng từ
-1.0 đến 1.0 hoặc từ -0.5 đến 0.5. Mỗi nơ-ron được kết hợp với một định hướng

(bias), giá trị định hướng này được khởi tạo giống như các trọng số.
Với mỗi mẫu học X được xử lý theo các bước sau:
Bước 2: Lan truyền tiến các đầu vào
Trong bước này, mạng đầu vào và đầu ra của mỗi nơ-ron trong tầng ẩn và
tầng xuất được tính toán. Đầu tiên mẫu huấn luyện được đưa vào tầng đầu vào
của mạng. Mạng đầu vào cho mỗi nơ ron trong các tầng ẩn và tầng xuất được
tính toán như là một ánh xạ của các biến đầu vào. Đầu vào của một nơ ron là đầu
ra của những nơ ron ở tầng trước nối đến nó. Để tính toán mạng đầu vào của nơ
ron thì mỗi đầu vào của nó được cộng dồn bởi trọng số tương ứng. Cho một nơ
ron j ở trong tầng ẩn hay tầng xuất thì mạng đầu vào Ij của j là :
Ij =∑ w ij O i + θj
Trong đó wij là trọng số của liên kết từ nơ ron i ở tấng trước đến nơ ron j, Oi là
đầu ra của nơ ron i từ tầng trước và θj là định hướng của nơ ron. Sự định hướng
này có tác dụng như là một ngưỡng, nó làm thay đổi cách hoạt động của nơ -ron.
Mỗi nơ ron ở trong tầng ẩn hay tầng đầu ra có một mạng đầu vào của nó và
áp dụng một hàm kích hoạt đến nó, hàm này là hàm lô-gic hoặc hàm sigmoid. Cho
mạng đầu vào Ij của nơ-ron j thì đầu ra Oj của nơ-ron j được tính như sau:
Oj =

l
I
l +e j

Error: Reference source not found

Hàm này được xem như là một hàm nén (squashing), vì nó ánh xạ một miền
đầu vào rộng lớn lên một vùng nhỏ hơn trong khoảng từ 0 đến 1. Hàm logistic là
một hàm không tuyến tính (phi tuyến) và có khả năng phân loại, cho phép thuật
giải lan truyền ngược mô hình theo bài toán phân lớp là tuyến tính liên tục.


Hình 2.14: Một nơ ron trong tầng ẩn hoặc tầng xuất

1.5.2. Sai số lan truyền ngược:
Sai số được lan truyền ngược bởi quá trình cập nhật trọng số và định hướng
23


làm sai số trong việc dự đoán của mạng. Cho nơ ron j trong tầng xuất, sai số Errj
được tính bởi:
Errj = O j (1 − O j )(T j O j )

Với Oj là giá trị thực sự của đầu ra của nơ ron j,và Tj là đầu ra đúng dựa trên
lớp đã biết của mẫu học được cho, Oj(1 - Oj) là đạo hàm của hàm logistic.
Để tính độ sai số của tầng ẩn với nơ ron j, tổng các sai số của trọng số của các
nơ ron trong tầng kế tiếp liên kết đến nơ ron j được tính trước. Sai số
của tầng ẩn với nơ ron j là:
Errj = O j (1 − O j ) ∑Errkwk
j

Trong đó wjk là trọng số của liên kết từ nơ ron j đến nơ ron k trong tầng kế tiếp,
và Errk là sai số của nơ ron k
Trọng số và định hướng được cập nhật đã làm sai số lan truyền. Trọng số được
cập nhật bởi công thức sau, với ∆wij là phần thay đổi trong trọng số wij.
∆wij = (l ) Err j O j
wij = wij + ∆wij

Biến η biểu thị khả năng học hay mức độ học, là một hằng số có giá trị trong
khoảng 0 và 1. Huấn luyện lan truyền ngược sử dụng phương pháp giảm
gradient để kiếm ra một tập trọng số mà có thể mô hình hóa bài toán phân lớp cho
trước sao cho cực tiểu sai số bình phương-trung bình giữa lớp được mạng dự đoán

và lớp thực sự của mẫu học đã cho. Mức độ học ngăn không cho sa lầy vào cực
tiểu cục bộ trong không gian quyết định nghĩa là các trọng số xuất hiện để hội tụ,
nhưng nó không phải là giải pháp tốt nhất và đi tới khám phá cực tiểu toàn cục.
Nếu mức độ học quá nhỏ thì việc học tiến triển rất chậm. Nếu mức độ học quá
lớn thì các giải pháp không thỏa đáng. Một kinh nghiệm là cho mức độ học l=t với
t là số lần lặp đi lặp lại trên tập dữ liệu học cho tới lúc này.
Sự định hướng được cập nhật theo công thức sau, với ∆θj là phần thay đổi trong
θj
∆θ = (l ) Err j
∆θ = θ j + ∆θ j
1.5.3. Điều kiện kết thúc:
Quá trình học mạng được bắt đầu với các giá trị trọng số tùy ý và tiến hành
lặp đi lặp lại. Mỗi lần lặp được gọi là một thế hệ. Trong mỗi thế hệ mạng điều
chỉnh các trọng số sao cho sai số giảm dần và quá trình học kết thúc khi:
+ Tất cả ∆wij ở thế hệ trước nhỏ hơn một ngưỡng xác định nào đó hoặc
+ Tỷ lệ các mẫu bị phân lớp sai ở thế hệ trước nhỏ hơn một ngưỡng nào đó
hoặc
+ Lặp đủ số lượng thế hệ xác định trước.
Trong thực tế, có khi phải trải qua rất nhiều lần huấn luyện thì các trọng
số mới có thể hội tụ. Tóm tắt thuật giải lan truyền ngược cho mạng nơ-ron huấn
24


luyện để phân lớp được trình bày như sau:

Input: tập các mẫu học, mức độ học l, một mạng đa tầng
Output: một mạng nơ ron đã được học để phân lớp cho các mẫu

1)
2)

3)
4)
5)
6)

Khởi tạo tất cả các trọng số và định hướng trong mạng;
While điều kiện kết thúc chưa thỏa mãn{
for với mỗi mẫu X trong tập các mẫu học {
//lan truyền tiến các đầu vào
for với mỗi nơ-ron j của tầng ẩn hoặc tần xuất
// tính mạng đầu vào cho nơ-ron j
I j = ∑ wij (oi + o j )
for với mỗi nơ-ron j của tầng ẩn hoặc tầng xuấtError: Reference source not
foundError: Reference source not found

7)

Oj =

l
I
l +e j

// tính mạng đầu ra cho nơ ron j

// sai số lan truyền ngược

8)

for với mỗi nơ ron j trong tần suất


9)
10)
11)
12)
13)
14)
15)
16)
17)
18)
19)

Errj = O j (1 − O j )(T j O j )

//tính sai số
for với mỗi nơ ron j trong tầng ẩn
Errj = O j (1 − O j )∑ Errkjk // tính sai số
for với mỗi trọng số wij trong mạng {
∆wij = (l) Err j O j
//độ tăng trọng số
wij = wij + ∆wij
// cập nhật trọng số
for với mỗi định hướng θ i trong mạng {
∆θ j = (l) Err j
// độ tăng định hướng
∆θ j = θ j + ∆θ j
// cập nhập định hướng
}
}


25


×