Tải bản đầy đủ (.docx) (23 trang)

Tiểu luận môn Máy học và ứng dụng TÌM HIỂU VÀ CÀI ĐẶT THỰC NGHIỆM MẠNG NEURAL VỚI THUẬT GIẢI LAN TRUYỀN NGƯỢ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 (416.31 KB, 23 trang )

Đại Học Quốc Gia TP.HCM
Trường Đại Học Công Nghệ Thông Tin
TIỂU LUẬN MÔN HỌC
MÁY
HỌC
TÌM HIỂU VÀ CÀI ĐẶT
THỰC NGHIỆM MẠNG NEURAL
VỚI THUẬT GIẢI LAN TRUYỀN NGƯỢC
GVHD: PGS.TS VŨ THANH NGUYÊN
HVTH: NGUYỄN MINH PHÁT
MSHV: CH1301047
TP. HỒ CHÍ MINH
Tháng 3/2014
Tiểu luận: Máy học
MỤC LỤC
Lời mở đầu
Từ khi ra đời, máy tính đã nhanh chóng phát triển và đóng một vai trò rất quan trọng
trong nghiên cứu khoa học kỹ thuật cũng như trong đời sống.
Nhưng một máy tính dù có mạnh đến đâu chăng nữa, cũng chỉ có thể làm việc theo
một chương trình đã được hoạch định sẵn bởi lập trình viên. Nó vẫn không có khả năng liên
tưởng, kết nối sự việc này với sự việc khác, và quan trọng hơn hết là khả năng sáng tạo như
con người.
Vì lý do đó, mạng noron (Artificial neural networks ) ra đời từ mục đích cố gắng mô
phỏng hoạt động trí tuệ của con người.Từ khi ra đời, mạng neuron đã nhanh chóng phát
triển trong các lĩnh vực về nhận dạng ,phân loại , giảm nhiễu, dự đoán…
Trong bài thu hoạch này em tìm hiểu một chủ đề nghiên cứu sao cho máy tính có thể
thay thế con người để qiải quyết các bài toán một cách thông minh, đó là mạng neural, một
trong những cách tiếp cận của máy học. Phần đầu của khóa luận sẽ tóm tắt sơ lược về máy
học và một số cách tiếp cận của nó. Trên cơ sở đó lý thuyết về mạng neural và thuật giải
lan truyền ngược sẽ được trình bày chi tiết trong phần hai. Phần cuối của khóa luận là một
chương trình minh họa cho phương pháp lan truyền ngược của mạng neural.


Em xin cám ơn sâu sắc đến Thầy Vũ Thanh Nguyên. Thầy đã tận tình giảng dạy
chuyển tải thông tin đến cho lớp chúng em trong suốt thời gian học tập và nghiên cứu môn
Máy học.
2
Tiểu luận: Máy học
Bằng lượng kiến thức đã học tập và nghiên cứu được em cố gắng hoàn thành bài thu
hoạch trong phạm vi cho phép, nhưng do thời gian và kiến thức còn hạn chế nên bài thu
hoạch vẫn còn nhiều thiếu sót. Kính mong thầy quan tâm giúp đỡ và chỉ bảo để em hoàn
thiện bài thu hoạch tốt hơn nữa.
Một lần nữa em xin được tỏ lòng biết ơn Thầy đã giảng dạy và chỉ bảo tận tình, cám
ơn các thầy cô khoa sau đại học và nhà trường đã tạo điều kiện để chúng em hoàn thành
môn học.
Tổng Quan Về Mạng Neural
I.Giới Thiệu
Mạng neural nhân tạo (Artificial Neural Networks : ANN) ra đời xuất phát từ ý
tưởng mô phỏng hoạt động của bộ não con người.
Mạng noron nhân tạo là sự tái tạo bằng kỹ thuật những chức năng của hệ thần kinh
con người với vô số các neural được liên kết truyền thông với nhau qua mạng.Giống như
con người , ANN được học bởi kinh nghiệm, lưu những kinh nghiệm đó và sử dụng trong
những tình huống phù hợp.
Mạng neural trong một vài năm trở lại đây đã được nhiều người quan tâm và đã áp
dụng thành công trong nhiều lĩnh vực khác nhau, như tài chính, y tế, địa chất và vật lý. Thật
vậy, bất cứ ở đâu có vấn đề về dự báo, phân loại và điều khiển, mạng neural đều có thể ứng
dụng được. Ví dụ như khả năng nhận dạng mặt người trong các hệ thống quản lý thông tin
liên quan đến con người (quản lý nhân sự ở các công sở, doanh nghiệp; quản lý học sinh,
sinh viên trong các trường trung học, đại học và cao đẳng;… ); các ngành khoa học hình sự,
tội phạm; khoa học tướng số, tử vi,…
Kết hợp chặt chẽ với logic mờ, mạng neural nhân tạo đã tạo nên cuộc cách mạng
thực sự trong việc thông minh hóa và vạn năng hóa các bộ điều khiển kỹ thuật cao cho cả
hiện nay và trong tương lai. Ví dụ như ứng dụng tự động điều khiển hệ thống lái tàu, hệ

thống dự báo sự cố,…
3
Tiểu luận: Máy học
Mạng neural dựa trên việc mô phỏng cấp thấp hệ thống neural sinh học. Trong
tương lai với sự phát triển mô phỏng neural sinh học, chúng ta có thể có loại máy tính thông
minh thật sự.
Trong phạm vi đề cập những gì liên quan đến kiến thức cơ sở để làm đồ án, em chỉ xin
trình bày những vấn đề có liên quan, những kiến thức được sử dụng phục vụ cho việc hoàn
thành đồ án.
II.Khái Niệm Mạng Neural
1.Sơ lược về neural sinh họ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
Hình 1.1 : Mô hình neuron 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ỉ.
4
Tiểu luận: Máy học
 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ó thể tóm tắt hoạt động của một nơron như sau: nơron lấy tổng tất cả các điện thế vào
mà nó nhận được, và phát ra một xung điện thế nếu tổng ấy lớn hơn một ngưỡng nào đó.
Các nơron nối với nhau ở các synapses. Synapse được gọi là mạnh khi nó cho phép
truyền dẫn dễ dàng tín hiệu qua các nơron khác. Ngược lại, một synapse yếu sẽ truyền
dẫn tín hiệu rất khó khăn.
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.
2.Mạng Neural Nhân Tạo
-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.
Hình 1.2 : Mô hình neuron nhân tạo ở mức đơn giản
Nơron này sẽ hoạt động như sau: giả sử có N inputs, nơron sẽ có N weights (trọng
số) tương ứng với N đường truyền inputs. 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 input thứ nhất, nhân với weight trên đường
input thứ nhất, lấy input thứ hai nhân với weight của đường input 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ó weight càng lớn thì tín hiệu truyền
qua đó càng lớn, như vậy có thể xem weight 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:
5
Tiểu luận: Máy học
Kết quả này sẽ được so sánh với threshold t của nơron, nếu nó lớn hơn t thì nơron
cho output là 1, còn nếu nhỏ hơn thì output 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 ouput bằng 1,
nếu kết quả âm thì output là 0. Dưới dạng toán học ta có thể viết output của nơron như sau:
Trong đó f là hàm Heaviside:
f được gọi là threshold function hay transfer function của nơron, còn giá trị (-t) còn được
gọi là bias hay offset của nơron.
Nếu chúng ta đưa thêm một input nữa vào, input thứ 0, có giá trị luôn luôn bằng 1 và
weight luôn luôn bằng bias (-t) thì output của nơron còn có thể viết dưới dạng:

Lưu ý là chỉ số của tổng bây giờ bắt đầu từ 0 chứ không phải bằng 1 như trước nữa.
3.Kiến Trúc Mạng
Là một hệ thống bao gồm nhiều phần tử xử lý đơn giản (hay còn gọi là neural) tựa
như neural thần kinh của não người, hoạt động song song và được nối với nhau bởi các liên
kết neural. Mỗi liên kết kèm theo một trọng số nào đó, đặc trưng cho tính kích hoạt hoặc ức
chế giữa các neural.
6
Tiểu luận: Máy học
Có thể xem các trọng số là phương tiện để lưu trữ thông tin dài hạn trong mạng
neural và nhiệm vụ của quá trình huấn luyện của mạng là cập nhật các trọng số khi có thêm
thông tin về mẫu học. Hay nói một cách khác, các trọng số đều được điều chỉnh sao cho
dáng điệu vào ra của mạng sẽ mô phỏng hoàn toàn phù hợp với môi trường đang xem xét.
3.1 Mạng Một Tầng
Mạng một tầng với S nơ-ron được minh họa trong hình 3.1. Chú ý rằng với mỗi một
đầu vào trong số R đầu vào sẽ được nối với từng nơ-ron và ma trận trọng số bây giờ sẽ có S
hàng.
Một tầng bao gồm ma trận trọng số, các bộ cộng, vector ngưỡng b, hàm chuyển và
vector đầu ra a.
i
a
i
b
Mỗi phần tử của vector đầu vào p được nối với từng nơ-ron thông qua ma trận
trọng số W. Mỗi nơ-ron có một ngưỡng , một bộ cộng, một hàm chuyển f và một đầu ra
.
Cùng với nhau, các đầu ra tạo thành một vector đầu ra a.
Thông thường thì số lượng đầu vào của tầng khác với số lượng nơ-ron.(R#S).
Có phải tất cả các nơ-ron trong cùng một tầng phải có hàm chuyển giống nhau ? Câu trả lời
là không; bạn có thể định nghĩa các nơ-ron trong một tầng có hàm chuyển khác nhau bằng
cách kết hợp song song hai mạng nơ-ron giống ở trên. Cả hai sẽ có đầu vào giống nhau, và

mỗi mạng sản xuất ra vài đầu ra.
Ma trận trọng số cho các phần tử trong vector đầu vào W:
W =














RSSS
R
R
www
www
www
,2,1,
,22,21,2
,12,11,1





7
Tiểu luận: Máy học



f
f
f
1
p
2
p
3
p
1,1
w
RS
w
,
1
a
2
a
S
a
1
b
2
b
S

b
1
n
2
n
S
n
1
1
1
a = f(Wp+b)
S
p




8
Tiểu luận: Máy học
Hình 3.1 : Mô hình mạng 1 lớp.
Các chỉ số hàng của các phần tử trong ma trận W chỉ ra nơ-ron đích đã kết hợp với
trọng số đó, trong khi chỉ số cột cho biết đầu vào cho trọng số đó. Vì vậy, các chỉ số trong
2,3
w
nói rằng đây là trọng số của đầu vào thứ 2 nối với nơ-ron thứ 3.
3.2 Mạng Đa Tầng
Hình 3.2 :Ví dụ về một mô hình mạng đa tầng
Mô hình mạng neural ở trên gồm 3 lớp: lớp nhập (input), lớp ẩn(hidden) và lớp xuất
(output). Mỗi nút trong lớp nhập nhận giá trị của một biến độc lập và chuyển vào mạng.
9

Tiểu luận: Máy học
Dữ liệu từ tất cả các nút trong lớp nhập được tích hợp – ta gọi là tổng trọng số – và
chuyển kết quả cho các nút trong lớp ẩn. Gọi là “ẩn” vì các nút trong lớp này chỉ liên lạc
với các nút trong lớp nhập và lớp xuất, và chỉ có người thiết kế mạng mới biết lớp này
(người sử dụng không biết lớp này).
Các nút trong lớp xuất nhận các tín hiệu tổng trọng hóa từ các nút trong lớp ẩn. Mỗi
nút trong lớp xuất tương ứng với một biến phụ thuộc.
III.Huấn luyện mạng neural.
1.Phương Pháp Học
Mạng neural nhân tạo phỏng theo việc xử lý thông tin của bộ não người, do vậy đặc trưng
cơ bản của mạng là có khả năng học, khả năng tái tạo các hình ảnh và dữ liệu khi đã học.
Trong trạng thái học thông tin được lan truyền theo hai chiều nhiều lần để học các trọng số.
Có 3 kiểu học chính, mỗi kiểu học tương ứng với một nhiệm vụ học trừu tượng. Đó là học
có giám sát (có mẫu), học không giám sát và học tăng cường. Thông thường loại kiến trúc
mạng nào cũng có thể dùng được cho các nhiệm vụ.
1.1.Học có giám sát.
Một thành phần không thể thiếu của phương pháp này là sự có mặt của một người thầy (ở
bên ngoài hệ thống). Người thầy này có kiến thức về môi trường thể hiện qua một tập hợp
các cặp đầu vào - đầu ra đã được biết trước. Hệ thống học (ở đây là mạng neural) sẽ phải
tìm cách thay đổi các tham số bên trong của mình (các trọng số và các ngưỡng) để tạo nên
một ánh xạ có khả năng ánh xạ các đầu vào thành các đầu ra mong muốn. Sự thay đổi này
được tiến hành nhờ việc so sánh giữa đầu ra thực sự và đầu ra mong muốn.
1.2.Học không giám sát.
Trong học không có giám sát, ta được cho trước một số dữ liệu x và hàm chi phí cần được
cực tiểu hóa có thể là một hàm bất kỳ của dữ liệu x và đầu ra của mạng, f – hàm chi phí
được quyết định bởi phát biểu của bài toán. Phần lớn các ứng dụng nằm trong vùng của các
bài toán ước lượng như mô hình hóa thống kê, nén, lọc, phân cụm.
1.3.Học tăng cường.
Dữ liệu x thường không được tạo trước mà được tạo ra trong quá trình một agent tương tác
với môi trường. Tại mỗi thời điểm t, agent thực hiện hành động y

t
và môi trường tạo một
quan sát x
t
với một chi phí tức thời C
t
, theo một quy trình động nào đó (thường là không
được biết). Mục tiêu là một sách lược lựa chọn hành động để cực tiểu hóa một chi phí dài
hạn nào đó, nghĩa là chi phí tích lũy mong đợi. Quy trình hoạt động của môi trường và chi
phí dài hạn cho mỗi sách lược thường không được biết, nhưng có thể ước lượng được.
Mạng neural nhân tạo thường được dùng trong học tăng cường như một phần của thuật toán
toàn cục. Các bài toán thường được giải quyết bằng học tăng cường là các bài toán điều
khiển, trò chơi và các nhiệm vụ quyết định tuần tự (sequential decision making) khác.
10
Tiểu luận: Máy học
1.4.Ví dụ
Giả sử chúng ta muốn dạy nơron phân biệt chữ A và B. Khi đưa input là A chúng ta muốn
nơron cho output là 1, còn khi input là B thì nơron phải cho output bằng 0.
Hãy bắt đầu bằng cách cho các weights những giá trị ngẫu nhiên, lúc này nơron chưa biết gì
hết. Bây giờ hãy input chữ A. Nơron sẽ lấy tổng có trọng số của các inputs và so sánh kết
quả với 0. Nếu kết quả dương thì output là 1, âm thì output là 0. Khả năng nơron đoán đúng
là 50%, vì các weights đang có giá trị hoàn toàn ngẫu nhiên. Nếu nơron đoán đúng thì
chúng ta không cần làm gì cả, nhưng khi nơron đoán sai (output bằng 0), thì chúng ta phải
tăng các weights của các inputs đang hoạt động (các inputs khác không) lên, sao cho lần
tới tổng có trọng số sẽ vượt quá threshold và tạo nên output là 1.
Ngược lại, khi đưa chữ B vào và nơron đoán sai (output bằng 1), thì ta phải giảm các
weights của các inputs đang hoạt động xuống, sao cho lần tới tổng có trọng số sẽ nhỏ hơn
threshold và buộc nơron phải cho output bằng 0.
Như vậy, khi dạy chữ B thành công rồi thì nơron có quên đi chữ đã học trước đó là A không
? Không, vì khi input là các chữ khác nhau thì nhóm các đường inputs đang hoạt động cũng

khác nhau hoặc là không hoàn toàn trùng nhau. Nhớ là chúng ta chỉ biến đổi weights của
các inputs đang hoạt động thôi. Chúng ta chỉ việc lập đi lập lại quá trình dạy như trên cho
tới khi nơron học thuộc bài mới thôi.
2.Thuật Toán Huấn Luyện Mạng
Trong phạm vi đề cập những gì liên quan đến kiến thức cơ sở để làm đồ án, chúng em chỉ
xin trình bày những vấn đề có liên quan, những kiến thức được sử dụng phục vụ cho việc
hoàn thành đồ án.
Trong đồ án , chúng em đã sử dụng mạng feed-forward và thuật toán lan truyền ngược sai
số Back Propagation để xử lý bài toán.
11
Tiểu luận: Máy học
2.1.Thuật Toán Lan Truyền Ngược Back Propagation
Đây là phương pháp thông dụng nhất để huấn luyện cho các mạng nơron truyền thẳng
nhiều lớp.
Có thể áp dụng cho các mạng truyền thẳng với các hàm chuyển và các
hàm lỗi khả vi.
Tiêu chuẩn huấn luyện: Làm cho sai số đầu ra càng nhỏ càng tốt.
Triết lý của phương pháp: dựa trên đầu ra để điều chỉnh trọng số của lớp ra, sau đó dựa trên
tính toán của lớp ra để điều chỉnh trọng số của lớp ẩn.
Huấn luyện mạng neural nhiều lớp sử dụng thuật toán Lan truyền ngược gồm hai quá trình:
Quá trình truyền tuyến tính và quá trình truyền ngược:
Quá trình truyền tuyến tính: Dữ liệu từ lớp nhập qua lớp ẩn và đến lớp xuất để:
 Thay đổi giá trị của trọng số liên kết W của các neural trong mạng biểu
diễn được dữ liệu học.
 Tìm ra sự khác nhau giữa giá trị thật hàm mẫu mà mạng tính được và kết
quả dự đoán của mạng gọi là lỗi (học có giám sát).
Quá trình truyền ngược: Giá trị lỗi sẽ được truyền ngược lại sao cho quá trình huyến
luyện(học) sẽ tìm ra trọng số Wi để lỗi nhỏ nhất.
Công thức tính và áp dụng cụ thể cho bài toán sẽ được đề cập trong phần I.2 của
Chương 2.

 Những hạn chế của phương pháp lan truyền ngược:
Ngoài những thành công của giải thuật học lan truyền ngược, vẫn còn có một số khía
cạnh làm cho giải thuật trở nên chưa được bảo đảm là mọi lúc đều tốt. Khó khăn chủ yếu là
ở quá trình huấn luyện lâu. Có thể do nhịp độ học và động lực không tối ưu. Sự sai sót trong
việc huấn luyện nói chung xuất hiện từ hai nguồn: mạng liệt và những cực tiểu địa phương.
Mạng liệt: xảy ra khi những trọng số được điều chỉnh tới những giá trị rất lớn. Tổng
đầu vào của một đơn vị ẩn hoặc đơn vị đầu ra có thể bởi vậy mà đạt giá trị rất cao (hoặc
dương hoặc âm), và qua hàm kích hoạt sigmoid, đơn vị sẽ có một giá trị kích hoạt rất gần 0
hoặc rất gần 1. Giá trị hiệu chỉnh trọng số gần 0, và quá trình huấn luyện có thể đi đến một
trạng thái dừng ảo.
Cực tiểu địa phương: bề mặt sai số của mạng rất phức tạp đầy những ngọn đồi và
những thung lũng. Bởi vì sự hạ độ dốc, mạng có thể bị mắc bẫy tại một cực tiểu địa phương
12
Tiểu luận: Máy học
khi có nhiều cực tiểu thấp hơn gần bên cạnh. Những phương pháp thống kê có thể giúp để
tránh cái bẫy này, nhưng chúng làm chậm. Một phương án khác là tăng thêm số lượng đơn
vị ẩn. Như vậy sẽ làm việc trong không gian sai số nhiều chiều, nên cơ hội gặp bẫy nhỏ
hơn. Tuy nhiên việc tăng cũng có giới hạn trên, khi vượt qua giới hạn này, cơ hội mắc bẫy
lại tăng lên.
Giải thuật lan truyền ngược - Single Neuron
Một tế bào neuron duy nhất với trọng số và một đầu vào
. Và trong giây lát, chúng ta hãy loại bỏ chức năng kích hoạt từ hình ảnh
(để chỉ tính phần tổng kết). Ta có thể đưa vào một tập huấn luyện đơn giản với các
nhãn và tính toán sai số của của neuron trên toàn bộ tập huấn luyện. Ta có thể
tính toán sai số bằng cách tính tổng bình phương các độ lệch của neuron đầu ra từ các nhãn
thực tế.
Phần quan trọng là chỉ là một hàm của các trọng số . Nói cách khác, tập các trọng số
hoàn toàn xác định hành vi của một tế bào neuron duy nhất.
Phần tính toán. Bất cứ lúc nào chúng ta có một hàm đa biến (ở đây, mỗi trọng số là một
biến), chúng ta có thể nói về cực tiểu và cực đại của nó. Trong trường hợp này, để tìm một

tối thiểu toàn cuc của hàm lỗi , chúng sẽ được học như là hàm phân lớp mục tiêu. Thật
vậy, để cải thiện tập trọng số hiện tại, chúng ta có thể sử dụng các thuật toán giảm gradient
chuẩn. Khi cho chúng ta một số thực cho mỗi neuron có thể (chọn mỗi trọng số), chúng
ta có thể lấy neuron hiện tại và làm cho nó tốt hơn nó bằng cách thay đổi trọng số nhẹ, và
đảm bảo sự thay đổi giúp đạt một giá trị nhỏ hơn . Nếu không thể đảm bảo điều này,
nghĩa là đã đạt đến mức nhỏ nhất có thể.
13
Tiểu luận: Máy học
Để thuận tiện ta bổ sung vào và bỏsubscript từ . Khi giảm thiểu cũng là giảm
thiểu , điều này không có nghĩa là thay đổi hàm cực tiểu. Có nghĩa là, từ nay về sau ta sẽ
dùng công thức
Sau đó ta tính toán gradient của . Các giá trị thích hợp cho các biến (tập trọng số
hiện tại) này là một vector trong , và như chúng ta biết khi tính toán các điểm có
hướng tăng lên mạnh nhất trong hàm . Có nghĩa là, nếu chúng ta trừ đi một số lương đủ
nhỏ của vector này từ vector trọng số hiện tại, chúng ta sẽ tiến gần hơn để cực tiểu hóa hàm
lỗi.
Lưu ý rằng sẽ có một giá trị tối thiểu toàn cục bằng hoặc tiến gần 0 (nếu có thể, một
neuron biểu diễn cho ham mục tiêu hoàn thiện, nó sẽ bằng không). Có nghĩa là, nguyên tắc
cập nhật được thực hiện như sau:
Trong đó là một số tham số thích hợp có giá trị giữa 0 và 1 biểu diễn cho "tỷ lệ học."
Với quy tắc cập nhật này ta có thể tính toán một cách rõ ràng:
Trong mỗi , chúng ta xem từng biến khác bên cạnh là không đổi, và kết hợp với
các quy tắc :
Vì trong công thức tính tổng cho các biến chỉ xuất hiện trong các tích (trong đó
là điều kiện thứ của vector ), phần cuối cùng thay vào ta có
14
Tiểu luận: Máy học
Khi đó quy tắc cập nhật là:
Có một nguyên tắc cập nhật khác cho phép cập nhật các trọng số sau khi mỗi đầu vào riêng
biệt được kiểm tra (ngược với quá trình kiểm tra kết quả đầu ra của toàn bộ tập huấn

luyện). Đây là quy tắc cập nhật ngẫu nhiên , và được đưa ra hệt như trên, nhưng không tính
tổng trên tất cả :
Thêm vào hàm kích hoạt thì không khó khăn, nhưng chúng ta sẽ lựa chọn để nó có tính
chất đặc biệt thuận lợi cho việc tính toán. Cụ thể, ta sẽ chọn hàm sigmoid ,
bởi vì nó thỏa mãn:
Vì vậy, thay trong công thức trên, chúng ta cần , và điều này đòi hỏi phải có
quy tắc dây chuyền một lần nữa:
Và bằng cách sử dụng đồng nhất cho chúng ta
Và sử dụng nguyên tắc cập nhật tương tự như trên. Ta kí hiệu là giá trị đầu ra ,
khi đó công thức dựa trên ngẫu nhiên theo nguyên tắc cập nhật này là
Bây giờ chúng ta có một nguyên tắc cập nhật một neuron duy nhất, chúng ta sẽ tìm hiểu
xem làm thế nào để áp dụng điều này cho toàn bộ một mạng neuron.
Giải thuật lan truyền ngược - Toàn bộ mạng
Có một vấn đề trong việc huấn luyện một mạng neuron bằng cách sử dụng nguyên tắc cập
nhật trên. Chúng ta không biết các đầu ra "mong đợi" của bất kỳ các cung bên trong đồ thị
là gì. Để tính toán lỗi chúng ta cần phải biết được đầu ra chính xác là gì, nhưng chúng ta
không có thông tin này ngay được.
15
Tiểu luận: Máy học
Chúng ta không biết giá trị lỗi cho một nút không có đầu ra trong mạng.
Trong hình trên, chúng ta biết được giá trị kỳ vọng của các cung đi từ nút , nhưng không
phải là của . Để tính toán lỗi cho , chúng ta cần phải lấy được một số loại giá trị lỗi cho
các nút ở giữa mạng.
Nó có vẻ hợp lý khi các lỗi cho phụ thuộc vào các lỗi của các nút mà cung cấp một
đầu vào. Trong hình sau lỗi đến từ tất cả các neuron .
Đặc biệt, một trong những giá trị lỗi có thể cho một đầu vào cụ thể cho toàn bộ mạng sẽ là
tổng trọng số qua các lỗi của , với các trọng số của các cung nối từ đến . Nói cách
khác, nếu ít có tác dụng trên đầu ra đặc biệt , nó sẽ không chịu quá nhiều lỗi đó. Ở
hình ảnh trên, các lỗi cho (với trọng số đầu vào ) là
16

Tiểu luận: Máy học
Với là lỗi tính toán cho các nút .
Nó chỉ ra rằng việc chứng minh lý thuyết đẹp cho việc sử dụng số lượng này là tốt. Đặc
biệt, nếu chúng ta nghĩ về toàn bộ mạng như một hàm duy nhất, chúng ta có thể tưởng
tượng các lỗi như là một hàm rất phức tạp của tất cả các trọng số trong mạng. Nhưng
không có vấn đề khó khăn khi viết ra các hàm, chúng ta biết rằng nó chỉ liên quan đến các
phép cộng, nhân, và kết hợp của các hàm có thể phân biệt. Vì vậy, nếu chúng ta muốn biết
làm thế nào để cập nhật các lỗi liên quan đến trọng số với các lớp ẩn trong mạng, về mặt lý
thuyết nó chỉ đòi hỏi đủ các ứng dụng của quy tắc dây chuyền để tìm thấy nó.
Để thấy điều này, chúng ta nói rằng chúng ta có một nút kết nối chuyển tiếp đến các
nút kết nối chuyển tiếp đến các nút , như vậy trọng số đại diện cho trọng số đi
từ , và trọng số cho cung đi từ .
Nếu chúng ta muốn biết đạo hàm riêng của tương ứng với các trọng số lồng nhau với ,
ta có thể tính toán nó:
Với đại diện cho các giá trị của hàm xung tại mỗi neuron đầu ra,
trong điều kiện một loạt các tính tổng quát không bình thường.
Nhưng sau khi áp dụng các quy tắc dây chuyền, một phần của tổng bên trong
chỉ phụ thuộc vào thông qua hệ số . Tức là, trọng số chỉ ảnh hưởng đến nút
bởi đầu ra của đi qua cung dán nhãn . Vì vậy, chúng ta nhận được một tổng:
Nghĩa là, nó chỉ đơn giản là tổng trọng số của các lỗi cuối với trọng số đúng. Những
thứ bên trong chỉ đơn giản là đầu ra của nút đó, mà lại là tổng số đầu vào của
nó. Trong dạng ngẫu nhiên, nguyên tắc cập nhật (với trọng số của ) chỉ là:
Với ký hiệu là véc tơ đầu vào cho các neuron dạng câu hỏi (có thể là đầu vào ban đầu
nếu neuron xuất hiện đầu tiên trong mạng và tất cả các yếu tố đầu vào được kết nối với nó,
hoặc nó có thể là kết quả đầu ra của các neuron khác ăn vào nó).
17
Tiểu luận: Máy học
Và bây giờ chúng ta đã thiết lập nguyên tắc cập nhật, các thuật toán lan truyền ngược để
huấn luyện một mạng neuron trở nên tương đối đơn giản. Bắt đầu bằng cách khởi tạo các
trọng số trong mạng một cách ngẫu nhiên. Đánh giá đầu vào bằng cách cho nó chuyển tiếp

thông qua mạng và ghi lại tại mỗi nút cục bộ giá trị đầu ra , và gọi đầu ra cuối cùng . Sau
đó tính toán lỗi cho giá trị đầu ra, lan truyền các lỗi trở lại để mỗi nút hồi đáp nút đầu ra, và
cập nhật các trọng số cho các nút đầu ra bằng cách sử dụng nguyên tắc cập nhật ở trên. Lặp
lại lan truyền lỗi này theo sau là một cập nhật trọng số cho mỗi nút hồi đáp vào nút đầu ra
trong cùng một cách, tính toán các cập nhật cho các nút hồi đáp vào các nút này, và như vậy
cho đến khi trọng số của toàn bộ mạng được cập nhật. Sau đó lặp lại với một đầu vào mới
.
Một vấn đề nhỏ là khi nào dừng lại. Cụ thể, nó sẽ không phải là trường hợp mà chúng ta chỉ
cần đánh giá từng đầu vào đúng một lần. Tùy thuộc vào cách tham số học được thiết lập,
chúng ta có thể cần phải đánh giá toàn bộ tập huấn luyện nhiều lần! Thật vậy, chúng ta chỉ
nên dừng lại khi gradient cho tất cả các mẫu đã cho là nhỏ, hoặc chúng ta sẽ chạy nó đủ lâu
đến nổi ta không còn đủ kiên nhẫn nữa. Để đơn giản, chúng ta sẽ bỏ qua việc kiểm tra một
gradient nhỏ, và chúng ta chỉ sửa một số lần lặp lại.
Kết quả là thu được một mạng huấn luyện được sử dụng để có thể đánh giá các nhãn cho
các đầu vào không rõ.
CÀI ĐẶT THUẬT GIẢI VỚI PYTHON
đầu tiên cần phải cài một cấu trúc dữ liệu cho mạng. Có nghĩa là, cần phải biểu diễn các nút
và các cung kết nối các nút. Hơn nữa, mỗi cung cần phải có một giá trị kết hợp, và mỗi nút
cần phải lưu trữ nhiều giá trị (các lỗi đã được truyền ngược lại, và đầu ra tại nút đó). Vì vậy,
ta cần xây dựng hai lớp:
classNode:
def__init__(self):
self.lastOutput =None
self.lastInput =None
self.error =None
self.outgoingEdges =[]
self.incomingEdges =[]

classEdge:
def__init__(self, source, target):

self.weight =random.uniform(0,1)
self.source =source
self.target =target

# noi cac cung den cac nut
source.outgoingEdges.append(self)
target.incomingEdges.append(self)
18
Tiểu luận: Máy học
Sau đó, một mạng nơ-ronđược biểu diễnbằng cách thiết lập các đầu vào và đầu ra của các
nút.
classNetwork:
def__init__(self):
self.inputNodes =[]
self.outputNode =None
Đặc biệt, mỗi Node cần biết về lượng đầu vào và đầu ra gần đây nhất của nó, và lỗi khi cập
nhật trọng số của nó. Vì vậy, bất cứ lúc nào chúng ta đánh giá một số đầu vào, chúng ta cần
phải lưu trữ các giá trị trong các Node. Ta sẽ đưa vào các lớp với các phương thức cần thiết
để đánh giá và huấn luyện mạng dựa trên tập dữ liệu. Chúng ta cần phân biệt giữa một nút
đầu vào và một nút nội bộ vào mạng nên ta sẽ tạo ra một lớp con của Node gọi là
InputNode:
classInputNode(Node):
def__init__(self, index):
Node.__init__(self)
self.index =index; # chỉ số của các vector đầu vào tương ứng với
nút này
Và đây là hàm đánh giá một đầu vào cho trước cung cấp bởi một mạng nơ-ron:
classNetwork:



defevaluate(self, inputVector):
returnself.outputNode.evaluate(inputVector)

classNode:


defevaluate(self, inputVector):
self.lastInput =[]
weightedSum =0

fore inself.incomingEdges:
theInput =e.source.evaluate(inputVector)
self.lastInput.append(theInput)
weightedSum +=e.weight *theInput

self.lastOutput =activationFunction(weightedSum)
returnself.lastOutput

19
Tiểu luận: Máy học
classInputNode(Node):


defevaluate(self, inputVector):
self.lastOutput =inputVector[self.index]
returnself.lastOutput
Một mạng nơ-ron gọi hàm đánh giá trên các nút đầu ra của nó, và mỗi nút đệ quy gọi đánh
giá các nguồn của mỗi cung mà nó đến. InputNode chỉ đơn giản là trả về các mục tương
ứng trong inputVector (mà đòi hỏi phải vượt qua vector đầu vào thông qua các lời gọi đệ
quy). Cấu trúc đồ thị là tùy ý, lưu ý rằng một số nút có thể được "đánh giá" nhiều hơn một

lần. Như vậy, chúng ta cần phải lưu trữ đầu ra các nút trong suốt thời gian đánh giá. Chúng
ta cũng cần phải lưu giá trị này để sử dụng trong huấn luyện, và vì vậy trước khi gọi hàm để
đánh giá chúng ta phải làm rõ giá trị này.
Chúng ta sẽ sử dụng hàm evaluate() để huấn luyện cũng như để đánh giá các yếu tố đầu vào
không rõ. Các mẫu ví dụ cho việc sử dụng các lớp (và kiểm tra) đã được đưa sẵn vào mã
nguồn.
Ngoài ra, chúng ta cần phải tự động thêm các nút thiên vị và các cung tương ứng nối các
nút không có đầu vào.Điều này dẫn đến một phân lớp mới của Node có hàm evaluate() có
giá trịmặc định là 1. Sự tồn tại của lớp này không thay đổi gì về thuật toán huấn luyện.
classBiasNode(InputNode):
def__init__(self):
Node.__init__(self)

defevaluate(self, inputVector):
return1.0
Thêm một hàm trong lớp Node (hàm này cũng được ghi đè trong lớp InputNode) có thêm
một nút thiên vị và cung để nối tất cả các nút không đầu vào.
Các thuật toán huấn luyện sẽ có một vòng lặp bao gồm ba bước:
+ Đầu tiên, đánh giá một mẫu đầu vào.
+ Thứ hai, đi qua mạng nơ-ron cập nhật các giá trị lỗi của mỗi nút sử dụng phương pháp lan
truyền ngược.
+ Thứ ba, đi qua mạng nơ-ron một lần nữa để cập nhật các trọng số của các cung phù hợp.
classNetwork:


defpropagateError(self, label):
20
Tiểu luận: Máy học
fornode inself.inputNodes:
node.getError(label)


defupdateWeights(self, learningRate):
fornode inself.inputNodes:
node.updateWeights(learningRate)

deftrain(self, labeledExamples, learningRate=0.9,
maxIterations=10000):
whilemaxIterations > 0:
forexample, label inlabeledExamples:
output =self.evaluate(example)
self.propagateError(label)
self.updateWeights(learningRate)

maxIterations -=1
Lớp network chỉ thực hiện lời gọi đầu tiên cho mỗi quá trình đệ quy. Sau đó các Node có
các hàm sau đây để thực hiện getError và updateWeights:
classInputNode(Node):


defupdateWeights(self, learningRate):
foredge inself.outgoingEdges:
edge.target.updateWeights(learningRate)

defgetError(self, label):
foredge inself.outgoingEdges:
edge.target.getError(label)

classNode:



defgetError(self, label):
ifself.error isnotNone:
returnself.error

ifself.outgoingEdges ==[]: # this is an output node
self.error =label -self.lastOutput
else:
self.error =sum([edge.weight *edge.target.getError(label)
foredge inself.outgoingEdges])

returnself.error

defupdateWeights(self, learningRate):
21
Tiểu luận: Máy học
if(self.error isnotNoneandself.lastOutput isnotNone
andself.lastInput isnotNone):

fori, edge inenumerate(self.incomingEdges):
edge.weight +=(learningRate *self.lastOutput *(1-
self.lastOutput) * self.error *self.lastInput[i])

foredge inself.outgoingEdges:
edge.target.updateWeights(learningRate)

self.error =None
self.lastInput =None
self.lastOutput =None
Trên đây chỉ đơn giản là cài đặt các công thức tính toán sang mã chương trình. Lỗi lan
truyền được tính là một tổng trọng số trong getError(), và các giá trị đầu vào và đầu ra trước

đó đã được lưu khi gọi hàm evaluate().
Minh họa giải thuật trên: hàm Sine
Một ví dụ đơn giản sử dụng để minh họa cho cài đặt trên. Trong quá trình tính toán này, cho
phép mạng neuroncó đầu ra bất kỳ với giá trị giữa 0 và 1 (hàm kích hoạt đã thực hiện điều
này). Và vì vậy chúng ta có thể sử dụng một mạng neuron để xấp xỉ gần đúng hàm nào đó
có giá trị trong . Đặc biệt, chúng ta sẽ thử trên
trên miền .
Mạng neuron này ở trên được xây dựng rất đơn giản: có một lớp duy nhất của hai mươi tế
bào neuron, mỗi neuron trong số đó được kết nối với một neuron đầu vào và một neuron
đầu ra duy nhất. Tỷ lệ học được thiết lập là 0,25, số lần lặp lại được thiết lập là 100000, và
tập huấn luyện được lấy mẫu ngẫu nhiên từ miền.
Sau khi đào tạo (mất khoảng mười lăm giây), các lỗi trung bình (khi thử nghiệm với một
mẫu ngẫu nhiên mới) nằm giữa 0.03 và 0.06. Dưới đây là một ví dụ về một đầu ra như:
22
Tiểu luận: Máy học
Một ví dụ về một mạng neuron 20-nút xấp xỉ hai giai đoạn của một hàm sin.
Ngoài ra, còn có một tập hợp dữ liệu các số nhị phân có nhãn là 1 nếu số là chẵn và có nhãn
0 nếu số này là lẻ. Một cách bố trí tương tự như ví dụ sin với ba nút bên trong một lần nữa
đã cho kết quả tốt.
Kết quả bài thu hoạch: Trong chương trình mô phỏng, cài đặt một mạng neural
theo giải thuật lan truyền ngược. Mặc dù đây chưa phải là một ứng dụng mang tính
thực tế của mạng neural nhưng chương trình đã minh họa rất chi tiết về phương
pháp lan truyền ngược. Đồng thời tính đúng đắn về mặt toán học cũng được trình
bày một cách tương đối trong phần lý thuyết. Từ đó có thể phát triển các ứng dụng
của mạng neural vào những bài toán thực tế sau này được dễ dàng hơn.
Hạn chế của bài thu hoạch: chưa đưa ra một ứng dụng mang tính thực tế của mạng
neural cũng như chưa trình bày những cải tiến đã được đưa vào nhiều ứng dụng
trong các công trình khoa học về phương pháp lan truyền ngược.
23
Tiểu luận: Máy học

Tài liệu tham khảo
1 Bài giảng của Thầy PGS.TS. Vũ Thanh Nguyên.
2 Simon Haykin-Neural Networks a Comprehensive Foundation
3 Yoshua Bengio, Aaron Courville, and Pascal Vincent. Representation Learning: A Review
and New Perspectives
4 Tạp chí khoa học và công nghệ,Đại học Đà Nẵng – Số 4(27).2008
5 An Introduction to Neural Networks.pdf
6 http:/ /codeproject.com
7 Và một số nguồn trên
24

×