1. Trang chủ
  2. » Luận Văn - Báo Cáo

LUẬN VĂN 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Ế

126 165 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 126
Dung lượng 3,01 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 đ

Trang 1

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Ế

Trang 2

LỜI MỞ ĐẦU

Trang 3

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

Trang 4

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ý

Trang 5

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

Trang 6

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:

Trang 7

- 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

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

processing elements

element size

energy use

processing speed

Style of computation

fault tolerant learns

intelligent, conscious

9

Hz serial,

centralized no a little not (yet)

Trang 8

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

Trang 9

đó 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ì

Trang 10

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:

Trang 11

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

Trang 12

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:

Trang 13

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ư

Trang 14

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

Trang 15

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)

Trang 16

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?

Trang 17

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

Trang 18

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ì ⃗ Vậy ta tăng x lên 11 lần thì y tăng lên 16 lần Ví dụ thì Hay bạn cũng có thể hiểu theo cách khác, với µ là số thực dương thì

và 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ì :

Trang 21

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ì :

Trang 23

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

Trang 24

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

Trang 25

Phương trình đường thẳng dự đoán là y = w 1 x + w 0 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 = w 1 x + w 0 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

y p = w 1 x p + w 0

Nếu y p 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:

Trang 26

Bằng phương pháp Gradient ta tìm giá trị của w0, w1 sau cho hàm tổng lỗi E đạt giá trị nhỏ nhất

có thể

Ta đưa bài toán này vào mạng noron như sau:

Viết lại phương trình đường thẳng y = xw 1 +w 0 thành y 2 = y 1 w 21 + 1.0 w 20 Ta có thể thấy được

y2 là kết quả ra của mạng, y1 là kết quả ra của một neuron nào đó, 1.0 là đầu ra của bias neuron,

w21, w20 là đầu vào của neuron output nhận từ neuron nào đó và neuron bias Như vậy ta có thể vẽ mạng neural như sau:

Đầu vào là trọng lượng của một xe, đầu ra là nhiên liệu tiêu thụ của xe này Tập lỗi của mạng hiện tại được hình dung như sau:

Trang 27

Ta đưa lần lượt các điểm dữ liệu p1,p2,p3,…,pn vào mạng neural đang xét, ta nhận được các giá trị lỗi tương ứng Ep1,Ep2…, Epn Tính tổng của tất cả các lỗi này ta được tập lỗi

(1) Mục tiêu ta tính gradient như sau:

Tổng quát ta ký hiệu độ tăng của wij như sau:

Với Wij là trọng số đường truyền từ unit j tới unit i (neuron đôi khi được gọi là unit) Để đơn giản mình đã lấy hệ số học µ=1, dấu ‘-‘ chỉ hướng ta cần đi là ngược lại với hướng Gradient

Trang 28

Áp dụng luật chuỗi (chain rule) ta tách Δ thành 2 phần :

Với y0 là kết quả đầu ra của unit o

Phần đầu lấy đạo hàm theo y0 của (1) ta được:

Trang 29

∑( )

Bây giờ ta đã có công thức tính độ tăng của w20, và w21 đã đến lúc xét tới thuật toán tính delta này như sau:

Gradient descent Algorithm

Thuật toán trên là thuật toán học toàn bộ hay còn gọi là batch learning

Ý tưởng của batch learning là đưa toàn bộ các điểm dữ liệu vào mạng và tính lỗi của mạng hiện tại với tập dữ liệu này Nếu lỗi này có thể chấp nhận được thì dừng chương trình và ngược lại thì cập nhật lại trọng số mạng, sau đó đưa tập dữ liệu vào lần nữa tính lại lỗi của mạng Quá trình này lặp lại liên tục cho đến khi lỗi của mạng là nhỏ nhất có thể Phương pháp này tỏ ra khá hiệu quả với tập dữ liệu nhỏ nhưng với tập dữ liệu lớn phương pháp này ngốn nhiều thời gian,

1 Khởi tạo các trọng số ban đầu

2 Repeat until DONE

Trang 30

nhất là với tập dữ liệu thay đổi liên tục Mỗi lần thêm một dữ liệu mới muốn cho mạng học thì phải huấn luyện lại từ đầu Do đó phương pháp này thường dùng cho dữ liệu nhỏ và vừa phải Một điều thuận lợi của phương pháp này là khả năng dự đoán tốt phù hợp với dữ liệu ít thay đổi theo thời gian ví dụ: Nhận dạng chữ viết tay, nhận dạng mặt người

Hình trên là kết quả của việc học batch learning, chấm đen là điểm dữ liệu, chấm hồng là điểm

dự đoán, đường màu đỏ là đường dự đoán Lỗi của mạng dừng lại ở con số 1.224996922 Ta thấy khả năng dự đoán được chia đều cho tất cả các dữ liệu

Ngoài ra còn phương pháp học khác nữa là học trực tuyến (Online learning) Phương pháp này được mô tả như sau: Lúc đầu ta đã có một mô hình dự đoán sẵn, trong quá trình hoạt động ta muốn mạng học thêm dữ liệu mà ta đưa vào nữa, thì ta chỉ cần biến đổi những thông số của trọng số hiện tại sau cho phù hợp với dữ liệu mới đưa vào này đó là khả năng học “trực tuyến” của mạng Điều này có ưu điểm là mạng dễ dàng thay đổi theo các dữ liệu mới, nếu dữ liệu mới thay đổi theo hướng nào thì khả năng dự đoán sẽ thiên về hướng đó bỏ quên đi hướng dữ liệu

cũ Do tính chất này mà mạng phù hợp với dữ liệu thay đổi theo thời gian, dữ liệu đưa vào không ổn định Tốc độ học nhanh khi thêm vào dữ liệu mới do mạng học ngay sau khi bạn thêm một điểm dữ liệu mới Phương pháp này ứng dụng cho việc học những bộ dữ liệu có tính thay đổi theo thời gian và ít phụ thuộc vào dữ liệu quá khứ Vd: dự đoán thị trường chứng khoán, kết quả bóng đá…

Trang 31

Hình trên là mô hình dự đoán 10 dữ liệu có sẵng số lỗi hiện tại là 0.07459306582018 Bây giờ ta thêm vào một điểm dữ liệu mới với lỗi có thể chấp nhận với dữ liệu này là 0.04 Bằng cách học online learning ta nhận được hình như sau:

Ta thấy đường dự đoán của ta tự lệch về phía điểm dữ liệu mới này

Ta thêm một điểm nữa và lỗi có thể chấp nhận của mạng đối với của điểm dữ liệu này cũng là 0.04 thì ta được hình như sau:

Trang 32

Có thể thấy đường dự đoán của chúng ta lúc này thiên về dự đoán các điểm dữ liệu mới hơn là các dữ liệu cũ Ta có thể điều chỉnh mạng noron sao cho lỗi của mạng này với điểm dữ liệu mới khá nhỏ, gần bằng 0 Điều này làm cho đường dự đoán của chúng ta trở nên quá phù hợp và khả năng dự đoán của nó có thể thấy là giảm xuống, do đó đối với học online thì ta nên chọn số lỗi không nên quá nhỏ, để nó có thể mang ít nhiều phần dự đoán của dữ liệu cũ

Một phương pháp học trung gian giữa online learning và batch learning là mini-batches hay học kết hợp Ý tưởng này như sau khi có một nhóm dữ liệu mới (số lượng >1) được thêm vào thì quá trình học được bắt đầu Kết quả của quá trình học là chỉnh các trọng số sao cho phù hợp với nhóm dữ liệu mới này Phương pháp này có đặc điểm là khả năng dự đoán được chia đều cho dữ liệu mới và cũ, tùy thuộc vào số lượng điểm trong nhóm Nếu số lượng này nhỏ thì sự

bỏ sót đối với dữ liệu cũ càng lớn và ngược lại Tốc độ học trung bình tùy thuộc vào số lượng điểm trong nhóm Phương pháp này ứng dụng cho việc học những bộ dữ liệu mà dữ liệu này thay đổi không thường xuyên, phụ thuộc vào dữ liệu cũ và mới gần như nhau Ví dụ: dự đoán

sự phụ thuộc giữa trọng lượng xe hơi và sự tốn nhiên liệu qua các thời kz…

Giả sử ban đầu ta có mô hình dự đoán như sau:

Trang 33

Bây giờ ta thêm vào 5 điểm, và muốn mô hình học thêm 5 điểm mới này với số lỗi có thể chấp nhận là 1.2 ta được kết quả sau:

Ta thấy đường dự đoán đã lệch về 5 điểm dữ liệu mới, vì có khả năng khi thêm 1 điểm nữa thì điểm này sẽ thiên về hướng của 5 điểm này hơn

Các bước xây dựng chương trình mô phỏng bằng C#

1 Xây dựng cấu trúc mạng

Trang 34

Bám sát sơ đồ mạng mà ta đã đưa ra:

Để xây dựng mạng theo hướng đối tượng, vậy ta cần các nút sau: nút 1, nút 2 và nút 0 đại diện cho lần lượt các node: input node, output node và bias node

- Node bias chỉ gồm 1 phương thức là hàm lấy giá trị đầu ra của nút đó, như vậy Bias node

sẽ có cấu trúc là:

Trong đó hàm output luôn trả về giá trị 1.0

- Node 1 là input node, nó sẽ có các giá trị đầu vào là một số thực dương, và hàm tính giá trị đầu ra:

Trang 35

Trong đó ta áp dụng hàm liner cho phương thức output của Unit này

public double output()

{

return x;

}

Với x là giá trị được đưa vào unit

- Node 2 là output node, node này nhận các tín hiệu output từ node 1 và node 0 thông qua các đường truyền W21 và W20 sau đó xửa l{ và đưa ra ở tín hiệu đầu ra:

Trang 36

Trong đó các đối tượng _nrInput,_nrBias là các neuron được truyền vào khi khởi tạo lớp Điều này trong C# cho phép khi ta thay đổi giá trị thật của Neural bias và thay đổi giá trị đầu vào của neuron input thì các đối tượng tương ứng trong neural 2 này cũng thay đổi theo ( theo phương thức truyền tham số, với tham số là đối tượng)

Lớp khởi tạo của neuron này như sau:

public ClUnit2( ClUnit0 nrBias, ClUnit1 nrInput)

{

_nrBias = nrBias;

_nrInput = nrInput;

}

Khi khởi tạo output unit ép buộc ta phải truyền vào 2 unit trước đó là gì

Tiếp theo là hàm trả về của neuron này Như đã giới thiệu ta dùng hàm activation function cho neuron này là hàm liner với Net = W21.Y1 + W21.Y2

public double output()

Trang 37

List < int > _X;

List < int > _Y;

List < double > _dataX;

List < double > _dataY;

Trong đó List<double> _dataX và List<double>_dataY là bộ dữ liệu huấn luyện, (ứng với phần tử đầu tiên của _dataX thì dữ liệu dự đoán tốt nhất là phần tử đầu tiên của _dataY) List<int> _X và List<int>_Y là danh sách những tọa độ của điểm dữ liệu tương ứng để biểu diễn trên hình vẽ (trục tọa độ) Về nguyên tắc ta thấy số phần tử của _dataX bằng số phần tử của _dataY Số phần

tử của _X bằng số phần tử của _Y

System.Drawing Graphics _graphics;

Để biểu diễn các điểm dữ liệu lên màn hình một cách trực quan ta cần phải khai báo đối tượng

là graphics Vị trí các pixel trên màn hình được biểu diễn bằng tọa độ là các số nguyên dương nằm trong phạm vi hình chữ nhật mà ta đã vẽ (khoảng 0 đến 500), trong khi đó dữ liệu ta là các

số nguyên nằm trong khoảng (0,3000) do đó ta cần nén các điểm dữ liệu này lại thành các số nhỏ hơn Thay vì biểu diễn điểm dữ liệu ở vị trí 3000 ta biểu diễn nhỏ lại với tỉ lệ 1/1000, nghĩa

là chia hoành và tung độ của các điểm dữ liệu cho 1000, kết quả ta thu được là các điểm dữ liệu

Trang 38

bây giờ nằm trong khoảng từ 0 đến 3 nhưng là số thực Do đó cần có sự tương ứng biến dữ liệu này thành số nguyên để biểu diễn trên màn hình Ta chọn tâm của hình chữ nhật panel1 làm gốc tọa độ (bạn có thể chọn trung điểm cạnh dưới của panel1 để làm gốc như vậy sẽ phù hợp với bài toán này hơn) Với dữ liệu dự đoán của ta nằm trong khoảng -3…3 thì ta có xây dựng công thức chuyển tọa độ từ điểm tọa độ thành điểm dữ liệu như sau:

int x = 312; int y = 201; //toado thuc

//Bien toa do thuc thanh toa do ao.

double _x = 3 - (60 - 60 * ( double )x / panel1.Width) / 10;

double _y = 3 - (60 - 60 * ( double )y / panel1.Height) / 10;

//Bien ao thanh thuc.

int X = int Parse( Math Round(((60 - (3 - _x) * 10) * panel1.Width /

Trang 39

// MessageBox.Show(y.ToString() + "=/=" + Y.ToString());

}

Điều này cho phép ta nhập thẳng dữ liệu vào từ bàn phím, bằng cách click vào panel1 Tọa độ điểm click vào được chuyển thành tọa độ điểm dữ liệu huấn luyện dưới dạng số thực nằm trong khoảng (-3,3)

private void panel1_MouseClick( object sender, MouseEventArgs e)

{

_X.Add(e.X);

_Y.Add(e.Y);

_dataX.Add(3 - (60 - 60 * ( double )e.X / panel1.Width) / 10);

_dataY.Add(3 - (60 - 60 * ( double )e.Y / panel1.Height) / 10);

MessageBox Show(e.X.ToString() + "," + e.Y.ToString());

MessageBox Show(_dataX[_dataX.Count - 1].ToString() + "," +

_dataY[_dataY.Count - 1].ToString());

Pen pen_1 = new Pen ( Color Black);

_graphics.DrawRectangle(pen_1, e.X, e.Y, 3, 3);

Trang 40

private void panel1_Paint( object sender, PaintEventArgs e)

{

int mid_width = (panel1.Width) / 2;

int mid_heigth = (panel1.Height) / 2;

Pen pen_1 = new Pen ( Color Red);

//ve trục toa do

pen_1.Color = Color Blue;

pen_1.DashStyle = System.Drawing.Drawing2D DashStyle Dash;

_graphics.DrawLine(pen_1, new Point (mid_width, 0), new Point (mid_width, mid_heigth * 2));

_graphics.DrawLine(pen_1, new Point (0, mid_heigth), new Point (mid_width * 2, mid_heigth));

//ve du lieu

pen_1.Color = Color Black;

pen_1.DashStyle = System.Drawing.Drawing2D DashStyle Solid;

for ( int j = 0; j < _Y.Count; j++)

{

_graphics.DrawRectangle(pen_1, _X[j], _Y[j], 3, 3);

}

//ve duong thang dự đoán.

pen_1.Color = Color Red;

Ngày đăng: 23/11/2018, 10:06

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w