Tải bản đầy đủ (.pdf) (126 trang)

LUẬN VĂN TỐT NGHIỆP TÌM HIỂU MẠNG NEURAL VÀ MỘT SỐ ỨNG DỤNG TRONG GIẢI QUYẾT CÁC BÀI TOÁN THỰC TẾ

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 (3.01 MB, 126 trang )

LUẬN VĂN TỐT NGHIỆP
(Báo cáo lần 1)
TÌM HIỂU MẠNG NEURAL VÀ MỘT SỐ ỨNG DỤNG TRONG GIẢI QUYẾT CÁC
BÀI TOÁN THỰC TẾ


LỜI MỞ ĐẦU


MỤC LỤC
1. SƠ LƯỢC MẠNG NORON TRONG TỰ NHIÊN........................................................................... 4
2. MẠNG NORON NHÂN TẠO....................................................................................................... 9

2.1 Tiếp cận căn bản .............................................................................................................. 9
2.2 Tiếp cận hoạt động của mạng noron ............................................................................ 16
Gradient search .............................................................................................................. 16
Ứng dụng phương pháp Gradient vào mạng noron ...................................................... 23
Gradient descent Algorithm ........................................................................................... 29
Các bước xây dựng chương trình mô phỏng bằng C# ................................................... 33
Các bài toán không tịnh tiến .......................................................................................... 55
Các bước xây dựng chương trình mô phỏng bằng C# ................................................... 67
Overfitting – Quá phù hợp ............................................................................................. 85
Bias – Variance trace-off................................................................................................ 85
Ngăn chặn Overfitting.................................................................................................... 86
Weight decay ................................................................................................................. 88
Áp dụng công thức Quickprop để giải quyết bài toán liner ở ví dụ đầu tiên ................. 99
Growing network (mạng lớn dần)................................................................................ 109
Phương pháp cascade corelation ................................................................................ 110
3. PHỤ LỤC ................................................................................................................................ 123



PHẦN 1
SƠ LƯỢC MẠNG NORON TRONG TỰ NHIÊN
Trong quá trình tiến hóa của sinh vật hàng
triệu năm nay, sinh vật thay đổi hình dạng
bên ngoài, màu sắc, cách di chuyển, thay đổi
môi trường sống, thức ăn… nhưng tiến hóa
đáng kể nhất mà khó nhìn thấy được là tiến
hóa về bộ não. não đã từ lâu là một bí ẩn với
con người về cách nó hoạt động, cách học
của nó. Con người là sinh vật cấp cao với bộ
não phát triển tốt nhất vượt lên trên mọi
sinh vật. Với trình độ khoa học kĩ thuật ngày
nay bộ não càng ngày lộ rõ trước kính hiển vi.
Hình P1 mô phỏng các phần trong bộ não. Bộ não không phải là một khối thống nhất. Ở tầm vĩ
mô ta phân tách não thành các phần vỏ não, midbrain, brainstem, và tiểu não. Mỗi phần này
được phân cấp thành nhiều vùng và phần nhỏ hơn, mỗi phần
này còn tùy thuộc vào cấu trúc nhỏ hơn bên trong nó hoặc phụ
thuộc vào các chức năng nhỏ hơn. Trong tổng thể các phần của
não ( những bó thần kinh) liên kết giữa các phần này là cực kz
phức tạp và chỉ một phần của nó được biết đến. Hệ thống tốt
nhất (và lớn nhất) trong bộ não con người đó là hệ thống các
trực giác nơi mà 10 hay 11 trạng thái xử l{ đầu tiên được xác định. Chúng ta phân biệt thông tin
truyền tới (feedforward) các cơ quan đầu vào (gần các cơ quan tiếp nhận thông tin) truyền cho
các xử lý sau này, truyền ngược (feedback) là nhận các phản hồi sau khi đã xử lý.


Mỗi phần có nhiệm vụ và chức năng riêng nhưng tất cả đều cấu tạo từ những noron nối kết với
nhau, theo một nguyên tắc đặc biệt nào đó tạo thành một mạng chằng chịt những noron. Mạng
này gọi là mạng noron, hình P1.2 mô phỏng điều này.


Được cấu thành từ nhiều noron, mỗi noron kết nối với một hay nhiều noron khác, mạng noron
truyền thông tin qua nhiều tầng. Tín hiệu đi vào một noron được noron xử l{ sau đó tín hiệu đã
được xử l{ được truyền tiếp cho những noron khác thông qua những đường truyền dài ngắn
khác nhau. Thông tin trên đường truyền có thể bị biến đổi do chiều dài hay tính chất riêng của
mỗi đường truyền.
Một noron nhận thông tin từ các noron khác
(thường là hàng ngàn). Hàm tổng các giá trị
đầu vào khi đã vượt mức định trước thì noron
phát ra một spike _ Một xung điện đi từ thân
đến axon và đến các noron khác (hay những
phần tiếp nhận khác). Spike này còn được gọi
là depolarization (khử phân cực).
Hầu hết phần cuối của Axon (output zone) kết
nối với dendrites của các neuron khác. Sự truyền tải tín hiệu điện từ noron này sang noron khác
chịu sự chi phối bởi neurotransmittor. Liên kết hóa học từ một noron truyền tín hiệu điện cho
noron khác gọi là synapse. Sự truyền tín hiệu từ một noron và một noron khác phụ thuộc vào


nhiều yếu tố ví dụ: Số các neurotransmittor đang hoạt động, số lượng và sự sắp xếp các
receptors, tổng các neurotransmittor hấp thụ… Hình P1.3 thể hiện ảnh hưởng của lớp
neuronstransmitor trong quá trình đường truyền.
Cấu trúc của một noron (Hình p1.4) như sau:
 Dendrites (nhập)
 Cell body: (thân tế bào)
 Axon (xuất)

Não người chứa 10 tỉ tế bào thần kinh, noron. Trung bình mỗi noron kết nối với các noron khác
thông qua 10 000 liên kết (sysnapses) (Thật sự những con số này rất khác nhau tùy thuộc vào
trung khu thần kinh). Não là mạng những noron hoạt động xử l{ song song. Điều này trái ngược
với máy tính thông thường chỉ xử lý tuần tự các chỉ dẫn.

Ngược lại trong khi noron thần kinh hoạt động với tốc độ tối đa là 100 Hz thì máy tính có thể
chạy trăm triệu toán tử trong một giây. Mặc dù với tốc độ khá chậm nhưng não người có những
khả năng vượt trội:


- Não có khuynh hướng giảm hoạt động khi một phần của nó bị hư hại. Ngược lại hầu hết
chương trình và hệ thống máy móc hiện đại sẽ dừng hoạt động nếu một phần của nó bị hỏng.
- Não có thể học (tự tổ chức lại chính nó) thông qua kinh nghiệm.
- Có nghĩa là não có thể hoàn thiện lại phần bị hỏng nếu phần khỏe mạnh có thể học và
đảm nhiệm công việc của phần bị hỏng.
- Nó xử lý các công việc song song cực kz hiệu quả. Ví dụ hình dung một khái niệm ảo
phức tạp chỉ trong vòng ít hơn 100ms, nghĩa là 10 quá trình xử lý cùng lúc!
- Nó cung cấp trí thông minh và kiến thức của chúng ta.

processing

element

energy

processing

Style of

fault

elements

size


use

speed

computation

tolerant

10 m

30 W

100 Hz

-6

30 W

14

10 synapses

-6

8

10 transistor
s

10 m


(CPU)

9

10 Hz

parallel,
distributed

serial,
centralized

yes

no

learns

intelligent,
conscious

yes

usually

a little

not (yet)


Não chúng ta nhận tín hiệu từ các cơ quan cảm giác như tai, mắt, mũi… sau đó xử lý và trả tín
hiệu trả lời lại cho các các cơ quan này. Ví dụ khi có người gọi tên bạn, sóng âm thanh phát ra
truyền đến tai, nhờ có màn nhĩ và xương ống trong tai biến những dao động âm thanh thành
những dao động điện. Các xung điện này truyền tới não, não xử lý các tín hiệu này rồi trả về kết
quả là một tín hiệu điện làm cho các cơ quan khác như chân, lưng, cổ làm cho bạn quay người
lại. Hình P1.5 mô phỏng phản ứng. Hình P1.5 mô phỏng quá trình phản ứng, xử lý thông tin của
não.


Giả sử thông tin đầu vào đi từ tai qua noron A, được noron A xử l{ sau đó thông tin tiếp tục qua
noron B, noron B xử lý thông tin và tiếp tục truyền đến C và D. Cuối cùng noron D đưa ra tín
hiệu xử l{ cho tay. Đối với một người trưởng thành khi ta gọi tên thì quá trình xảy ra như trên,
còn đối với em bé thì khi gọi tên em sẽ không có phản ứng gì. Điều đó có thể là do các nguyên
nhân như: một số noron chưa hoàn thiện hoặc chưa tồn tại, hoặc việc xử lý thông tin sai lệch,
hoặc thông tin trên đường truyền giữa các neuron thay đổi không như mong muốn. Kết quả
cuối cùng là neuron D không đưa ra được tín hiệu phản ứng cho tay.


PHẦN 2
MẠNG NORON NHÂN TẠO
2.1 Tiếp cận căn bản
Mạng noron đơn giản nhất là mạng noron truyền thẳng (feed forward neural network) _ hình
P2.1. Mạng này cấu thành bởi ba lớp: tầng vào (input layer), tầng ẩn (Hidden layer), tầng ra
(Output layer). Các neuron input nhận tín hiệu đầu vào, sau đó mỗi neuron này sẽ truyền cho
mọi neuron khác nằm ở tầng tiếp theo. Mỗi neuron ở tầng tiếp theo nhận và xử lý thông tin sau
đó sẽ truyền tiếp cho tất cả các neuron ở tầng tiếp theo nữa. Cứ như vậy truyền cho tới các
neuron đầu ra. Hình P2.1 ta ví dụ chỉ có 1 noron đầu ra. Một mạng noron thì có thể có rất nhiều
lớp trong tầng ẩn (Hidden layer). Nhưng tối thiểu một mạng noron phải có 2 tầng thiết yếu là
input và output.


Trong ví dụ này ta sẽ dùng mạng trên để nhận dạng số 4 nhập vào bằng hình ảnh. Dữ liệu đầu ra
của chúng ta chỉ là đúng hay sai thôi, vì vậy output ta chỉ chọn 1 neuron là đủ.
Vậy dữ liệu đầu vào ta sẽ là tấm hình của số 4 và các số khác, dữ liệu đầu ra sẽ phát hiện số 4
nằm ở đâu trong tấm hình trên. Nhưng vấn đề là làm sao đưa số 4 vào trong mạng neural? Chắc
chắc không thể là hình! Vì đầu vào của chúng ta là những tín hiệu tương tự trong máy tính thì


nó là các con số nhị phân. Vậy ta phải chuyển hình thành những tín hiệu. Dựa vào hoạt động
của mắt người, hay máy ảnh, khi ta nhìn một bức ảnh thì những tia sáng từ hình phát ra được
tập trung lại điểm vàng (đối với mắt), màn phim (với máy ảnh), nơi đây là mạng lưới dày đặt
những tế bào nhạy cảm với ánh sáng, khi bị ánh sáng chiếu vào tế bào phát sinh ra những xung
động điện và truyền tới mắt. Những ánh sáng khác nhau sẽ có bước sóng khác nhau tác động
vào tế bào do đó tế bào cũng sẽ phát ra xung động điện tương ứng, với những người mù màu
thì xung động này phát ra gần như nhau, nên não không phân biệt được đâu là đỏ, đâu là đen.
Từ đây những xung động điện này được truyền tới não như là những tín hiệu thông tin. Hình
P2.2 mô phỏng việc chuyển hình ảnh thành mảng tín hiệu. Với vùng đen được chuyển thành tín
hiệu 1 ở tế bào tương ứng, vùng trắng thì ngược lại. Độ rõ của hình phụ thuộc vào kích cỡ của
mảng mà ta sử dụng.

Ví dụ ta nhận được mảng những tín hiệu như sau:


Vấn đề tiếp theo là đưa tín hiệu này vào mạng như thế nào? Câu trả lời rất đơn
giản là đưa như thế nào tùy thích bạn. Bạn có thể đưa từng hàng hay từng cột
hay theo chiều chéo đều được. Miễn là bạn đưa như thế nào thì đối với dữ liệu
khác bạn cũng đưa y như vậy. Hình dung giống như khi bạn nhìn một vật, thật ra
ảnh mà bạn nhận được trong điểm vàng của mắt là một ảnh ngược, não bạn sẽ
không nhận ra điều này bởi vì nó đã quen như vậy. Dĩ nhiên để nhận ra một hình
thì bạn cần đưa tất cả các tín hiệu này vào cho não xử l{ cùng lúc, tương tự bạn
cần đưa tất cả các giá trị này vào cho lớp input. Mỗi một tín hiệu vào chỉ được

được đưa vào một và chỉ một neuron tương ứng nằm ở lớp input, có nghĩa là với ma trận đầu
vào là nxm thì bạn cần nxm neuron nằm ở lớp input.
Khi nhận được các tín hiệu đầu vào, mỗi neuron nằm ở lớp input sẽ truyền tín hiệu đến tất cả
các neuron khác nằm ở lớp hidden.
Mỗi neuron ở lớp input sẽ xử lý thông tin nhận được này như thế nào?
Tiếp theo ta xe cấu trúc của một noron nhân tạo:

Như đã giới thiệu phần trước khi tín hiệu truyền từ noron này sang noron kia sẽ bị thay đổi bởi
chất neurontransitor, tương tự mô phỏng điều này thì mỗi đường truyền nhân tạo cũng có một
trọng số. Trọng số này thay đổi tín hiệu đường truyền. Tín hiệu này thay đổi bằng cách lấy tín


hiệu ban đầu nhân với trọng số _ XiWi . Neuron khi nhận được các tín hiệu này, một hàm tổng
các tín hiệu nhận được được tính. Kết quả hàm tổng này gọi là Netk (k chỉ đây là neuron thứ k).
Sau đó giá trị Net này sẽ được đưa vào một hàm gọi là activation function , sau đó kết quả của
hàm này sẽ được so sánh với một giá trị ngưỡng Өk (Threshold) giá sau đó sẽ nếu kết quả này
vượt ngưỡng Ө k thì một tín hiệu sẽ được phát ra, tín hiệu này tùy thuộc vào hàm activation lúc
đầu mà ta sử dụng. Có rất nhiều hàm activation chuẩn mà ta có thể chọn để phù hợp với bài
toán của mình, vấn đề này sẽ được xem xét ở mục II . Nhưng trong ví dụ này chúng ta chọn một
hàm activation đơn giản như sau:

Với v = Net, giá trị ngưỡng ở đây là 0.5. Nếu Net =>0.5 thì neuron sẽ phát ra tín hiệu 1, nếu Net
< 0.5 thì neuron phát ra tín hiệu là 0. Như vậy thì đầu ra cũng mỗi neuron (trừ neuron input)
đều là 0 hoặc 1. Hàm activation như trên có thể hình dung bằng đồ thị:

Về bản chất hàm activation của mỗi noron có thể khác nhau tùy theo bạn lựa chọn và tùy theo
bài toán mà bạn đang giải quyết. Trong ví dụ trên mình cho các neuron đều dùng chung một
hàm activation. Bạn thấy mỗi neuron đều dùng chung một threshold nên bạn có thể xem:



Ta có thể thấy việc cài đặt threshold vào trong mạng neural dễ dàng nhờ vào một neuron mới,
neuron này luôn cho kết quả đầu ra là -1 và trọng số đường truyền (weight) từ nó đến các
neuron khác luôn là t. Neuron như vậy ta gọi là neuron bias (hay độ lệch).
Với thông tin đầu vào là x1,x2,…,xn bạn có thể hình dung mạng noron của chúng ta sẽ như sau:

Với mỗi đầu vào của các neuron ở tầng hidden hay Output đều có đường truyền từ neuron bias
với trọng số là t, và giá trị là -1. Thật ra bạn có thể dùng 1 neuron bias cho toàn bộ mạng, hình
trên chỉ minh họa cho bạn dễ hiểu, các bias neuron ở các tầng trong hình trên là như nhau. Mỗi
mạng noron đều có bias neuron, nếu không có ghi chú rõ ràng bạn phải hiểu là nó có tồn tại
trong các lớp, vì sao phải cần có bias neuron sẽ được làm rõ hơn ở phần sau.
Bây giờ bạn đã hình dung được mạng neuron như thế nào rồi. Cách hoạt động cũng khá đơn
giản, cho các giá trị của mảng dữ liệu đầu vào cho input layer, mỗi neuron tầng này truyền
nguyên giá trị này cho toàn bộ neuron ở lớp đầu tiên của tầng hidden layer. Mỗi neuron ở tầng
hidden này sẽ tính tổng ∑

+ (-1)t . Nếu tổng này nhỏ hơn 0.5 thì xuất ra 0, ngược lại

xuất ra 1 và truyền kết quả này cho tầng tiếp theo. Cứ như vậy tới tầng output, nếu kết quả của
output là 0 thì đầu vào không phải số 4, ngược lại kết quả của output là 1 thì đầu vào là số 4.
Quá đơn giản, nhưng làm thế nào để “dạy” cho mạng noron làm được điều này?
Ta cần làm rõ vấn đề là làm sao phân biệt mạng neuron đã được dạy và chưa được dạy. Chúng
ta đã biết mỗi mạng neural ta tạo ra đều giống nhau về cấu trúc: số lượng neuron input, số
lượng tầng trong hidden layer, số lượng neuron mỗi tầng, số lượng neuron output… cũng như


hàm activation mà ta dùng trong mỗi neuron đều là như nhau. Vậy chỉ có trọng số mỗi đường
truyền là ta không tạo nó! Nó được sinh ra ngẫu nhiên ban đầu, kết quả của mạng A và B phụ
thuộc vào các trọng số này. Vậy ta có thể đánh dấu mạng neural bằng chuỗi các trọng số này
theo một thứ tự nào đó. Giả sử ta quy đinh ở đây là từ dưới lên, từ trái qua phải, ví dụ với mạng
neuron như sau:


Ta nói mạng này là: 0.3, -0.8, -0.2, 0.6, 0.1, -0.1, 0.4, 0.5
Trở lại vấn đề với việc huấn luyện mạng neural. Giả sử ta chuyển hình số 4 thành mảng 2 chiều,
sau đó đưa mảng 2 chiều này theo thứ tự hàng-cột vào mạng W1 W2 W3 W4 Wn ta nhận được
kết quả cuối cùng là 1. Ta nói mạng này đã đúng với dữ liệu trên.


Tương tự nếu ta đưa hình số 2 vào mà kết quả lại là 1 thì ta nói mạng này sai với với dữ liệu
này.
Vậy nếu ta đưa một tập các hình vừa số 4 vừa không phải số 4 vào vào dựa vào kết quả nhận
được ta biết mạng ta sai bao nhiêu. Sau đó việc ta làm là chỉnh lại các trọng số sao cho sai này là
ít nhất.

Ví dụ với bộ dữ liệu trên thì mạng của ta sai hai lỗi (được in đỏ). Giả sử ta tạo ngẫu nhiên mạng
thứ 2: W’1 W’2 W’3 W’4 W’n với số lỗi tương ứng là 1 thì có nghĩa bộ dữ liệu 2 này tốt hơn bộ
thứ nhất. Như vậy ban đầu ta tạo ngẫu nhiên n mạng neural tương ứng với Ei lỗi. Ta có thể hình
dung tập này là một quần thể với nghịch đảo số lỗi chính là giá trị thích nghi. Ta có thể dùng
thuật toán di truyền để giải quyết bài toán này (bạn có thể xem demo kèm theo).


Có nhiều vấn đề khi thiết kế mạng noron mà bạn cần lưu ý là: Cần bao nhiêu neuron cho lớp
hidden? Dùng hàm activation nào cho mỗi neuron? Đây là câu hỏi khó, không có câu trả lời tổng
quát cho vấn đề này, chỉ đối với từng bài toán mà bạn có cách giải quyết riêng, đôi lúc còn phụ
thuộc vào cảm tính của bạn nữa! Phần tiếp theo ta sẽ hiểu thêm về hoạt động của mạng neuron
như thế nào.

2.2 Tiếp cận hoạt động của mạng noron
Gradient search
Gradient search là bài toán căn bản, đơn giản nhưng rất hữu hiệu trong các bài toán cần tìm
cực đại (hay cực tiểu) cục bộ.

Để dễ hình dung chúng ta quay lại bài toán lớp 12 mà ta đã học.

Cho một đồ thị hàm số Y=f(x) và điểm A(x0, y0) thuộc f(x). Vấn đề đặt ra là di chuyển điểm A
theo hướng nào để A lên đến điểm cao nhất của đồ thị này?
Với A(x0,f(x0)) thì ta chỉ cần thay đôi x0 thì A sẽ thay đổi vị trí, nhưng tăng hay giảm x0 để A lên
trên?


Suy nghĩ thì nếu A nằm ở bên mạn phải của đỉnh đồi thì việc ta làm là giảm x thì f(x) tương ứng
sẽ tăng. Nếu A nằm ở bên mạn trái của đỉnh đồi thì ta cần tăng x là xong. Nhưng làm thế nào để
biết A nằm bên trái hay bên phải?
Nhớ lại kiến thức lớp 12, với d là đường tiếp tuyến của f(x) tại A, gọi α là góc tạo bởi f(x) và trục
hoành.

Nếu α>900 thì điểm A đang nằm bên phải
Nếu α<900 thì điểm A đang nằm bên trái
Với α = f’(x0) vậy vấn đề đã được làm rõ, để đưa điểm A lên đỉnh ta cần tính đạo hàm của hàm
số tại điểm A. Nếu giá trị này âm thì ta cần giảm x, nếu giá trị này dương thì ta tăng x. Nghĩa là x
biến thiên theo vector ̅

vector này gọi là vector Gradient.

Từ kết quả trên ta có thể suy ra một cách để tìm ra cực đại của một hàm số như sau:
 Chọn ngẫu nhiên điểm A(x0,y0) thuộc f(x)
 Di chuyển điểm A theo vector gradient G


Kết quả điểm A sẽ di chuyển dần lên cực đại, lưu { đây chỉ là cực đại cục bộ. Để có thể đạt cực
đại tốt hơn thì ta có thể chọn random nhiều điểm A ban đầu và so sánh các kết quả với nhau.
(Để hiểu rõ hơn về gradient bạn xem phần phụ lục 1).

Đối với hàm 2 biến g= f(x,y) thì ta làm thế nào? Ví dụ tìm maximum của hàm z=f(x,y)=x2+xy+y2 .
Hoàn toàn tương tự như hàm một biến, ta biến đổi x,y theo hướng của vector Gradient. Vector
này như sau:


(

)

Nghĩa là tăng x theo hướng đạo hàm riêng của f theo x, tăng y theo hướng đạo hàm riêng của f
theo y.
Trong ví dụ trên thì ⃗

. Ta chọn ngẫu nhiên A=(2,7) thì ⃗

tăng x lên 11 lần thì y tăng lên 16 lần. Ví dụ

. Vậy ta

thì

. Hay bạn cũng có thể hiểu theo cách khác, với µ là số thực dương thì


. nếu µ càng lớn thì x và y tăng càng nhanh. Ta lưu

ý vector G chỉ có vai trò định hướng chứ không nói lên bạn tăng nó bao nhiêu. Tốc độ tăng lên
của x,y phụ thuộc vào giá trị µ mà bạn chọn.
Trong trường hợp tổng quát. Với A(x1,y1) là tọa độ lúc đầu, A(x2,y2) là tọa độ lúc sau thì:


Số µ thể hiện tốc độ tiến dần đến cực đại của điểm A. Với µ nhỏ thì :




Ta thấy tốc độ di chuyển dần lên của điểm A chậm, tùy theo hàm số mà ta đang xét, nhưng đa
phần trong các hàm số thì A càng gần về cực đại thì tốc độ di chuyển càng chậm mặc dù µ vẫn
không thay đổi. Khi đạt đến cực đại thì vector G sẽ là ⃗⃗ vì không còn hướng nào cho A để A tăng
lên nữa. Việc này giống như bạn đang đứng trên một đỉnh núi thì mọi con đường dưới chân bạn
đều là đường xuống núi. Như vậy A có thể là cực đại cục bộ nào đó, có thể tồn tại đỉnh núi cao
hơn gần bên A mà A không thấy được. Để A có thể đi qua đỉnh núi cao hơn đó thì việc đầu tiên
là A phải xuống núi trước ! Bây giờ ta quan sát với µ là một số lớn thì :



Từ giai đoạn 1 tới giai đoạn 2 ta thấy điểm A tăng lên rất nhanh, nhưng từ giai đoạn 2 lên giai
đoạn 3, điểm A đã vượt qua luôn đỉnh cực đại rơi vào bên kia sườn dốc ! Do chúng ta tăng quá
nhanh, nếu A tăng chậm thì ta không gặp phải trường hợp này. Từ giai đoạn 3 ta tính vector G
thì G chỉ hướng cho A phải quay lại. Khi A quay lại với tốc độ như cũ thì lần này A lại vượt qua
đỉnh trượt qua bên này sườn ! Cứ như vậy điểm A cứ chạy qua, chạy lại. Có thể A đạt đến cực
đại nhưng chậm, và cũng có thể A sẽ không đạt đến cực đại được !. Một đặc điểm của việc chọn
µ lớn đó là A có thể tránh khỏi trường hợp cực đại cục bộ do A nhảy quá « lung tung ». Việc
điều chỉnh tốc độ µ sẽ cho ta kết quả nhanh hơn và chính xác hơn.
Có thể thấy phương pháp gradient này không thích hợp với những bài toán mà không gian quá
gồ ghề, ta có thể kết hợp với phương pháp đánh giá cục bộ để tìm được giải pháp tối ưu hơn.

Ứng dụng phương pháp Gradient vào mạng noron
Hình sau là sự tương quan giữa trọng lượng xe và hao tốn nhiên liệu. Mỗi nút trong hình cung
cấp thông tin về trọng lượng (cột x: trọng lượng tính bằng pound) và sự tiêu thụ nhiên liệu( cột
y: số dặm/1gallon) của xe hơi. Ta quan sát 74 xe hơi năm 1979, Ta có thể dễ thấy sự liên kết

giữa trọng lượng xe và hao tiêu nhiên liệu, tổng quát xe càng nặng càng tốn nhiên liệu.


Bây giờ mục đích đặt ra là nếu có trọng lượng một chiếc xe thứ 75, có thế đoán được sự hao
tổn nhiên liệu của nó như thế nào dựa vào bảng dữ liệu trên?
Một cách đơn giản nhất là ta dùng đường dự đoán.


Phương trình đường thẳng dự đoán là y = w1 x + w0 . Nảy sinh vấn đề là ta chọn đường dự đoán
nào? Và đường nào tốt hơn đường nào?. Ta phải có cách đánh giá độ tốt của mỗi đường thẳng
dự đoán. Bạn suy nghĩ có thể đường tốt hơn chính là đường đi qua nhiều điểm dữ liệu hơn, hay
gần nhiều điểm dữ liệu hơn.
Nghĩa là tổng các khoảng cách từ điểm dữ liệu thật tới điểm dữ liệu dự đoán càng nhỏ thì càng
tốt. Giả sử đường thẳng y = w1 x + w0 là đường dự đoán
Với điểm P(xp,t) bất kz sẵn có trong tập dữ liệu.
Tính
yp = w1 xp + w0
Nếu yp càng gần t thì đường thẳng càng chính xác. Nghĩa là hàm lỗi Ep = ½ (tp – yp)2 càng nhỏ
càng tốt, con số ½ chỉ có mục đích làm giảm E xuống thôi do ta muốn làm việc với số nhỏ sẽ dễ
hơn nếu để E tăng quá tầm kiểm soát, bạn có thể chọn một con số khác 1/3 chẳng hạn, ở đây
mình chọn ½ để tí nữa lấy đạo hàm cho nó đơn giản. Nói một cách toán học thì tổng
∑ (

) với p là điểm dữ liệu, tp là sự tiêu tốn nhiên liệu tại điểm p, yp là sự hao tốn

mà ta dự đoán. Vấn đề lúc này trở thành giống như bài toán tìm cực tiểu của hàm số mà ta đã
đề cập tới trong phương pháp gradient descent ở trên. Bạn có thể hình dung không gian tìm
kiếm như sau:



×