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

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Ế

128 36 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 128
Dung lượng 2,87 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ởichất neurontransitor, tương tự mô phỏng đi

Trang 1

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Ế

Trang 2

L I M Ờ Ở

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-of 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

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 tintruyề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 chocá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ớinhau, 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ạngnà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ếtnố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

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ácreceptors, tổng các neurotransmittor hấp thụ… Hình P1.3 thể hiện ảnh hưởng của lớpneuronstransmitor 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ượcvớ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ữngkhả 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

processing element energy processing Style of fault

learns intelligent,

1014synapses 10-6 m 30 W 100 Hz parallel, yes yes usually

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 quanoron 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 đốivớ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ânnhư: 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ặcthông tin trên đường truyền giữa các neuron thay đổi không như mong muốn Kết quả cuốicù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ácneuron đầ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ềulớ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 racủ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ố 4nằ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ắcchắ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ủamắ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ậptrung 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ừ đâynhữ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ởichấ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ộttrọ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ổngcá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àyvượ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àitoá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ộthà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 theobà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ộthà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ácneuron 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 biasvớ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ìnhtrê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ỗimạ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ạitrong 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á đơngiả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ềnnguyê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ưnglà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 đườngtruyề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àytheo 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ạngneuron 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 đượckế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ạngthứ 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ìnhdung 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ùngthuậ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ớphidden? 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ổngquá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 neuronnhư 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 Atheo 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ụchoà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à xbiế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

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êncủ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 đaphầ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ẫnkhô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ănglê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 caohơ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 Gthì 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ềuchỉ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 cungcấ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ộty: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ữatrọ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ổnnhiê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ánnà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, haygầ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, ở đâymì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 trongphươ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ạnghiệ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ảnmì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 :

(3)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:

(4)Phần sau với ∑

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

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

2 Repeat until DONE

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ệntạ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ìnhnà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ệuquả 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,

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 Tathấ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 tamuố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ủatrọ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ớithay đổ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àokhô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êmmộ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ếtquả 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ờ tathê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ọconline 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ớikhá 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ỗikhô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ọckế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ớinhó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ểmtrong 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 đổikhô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ệncho 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ôngqua 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ềunà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ủaneuron input thì các đối tượng tương ứng trong neural 2 này cũng thay đổi theo ( theo phươngthứ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 choneuron này là hàm liner với Net = W21.Y1 + W21.Y2

public double output()

Trang 37

Trong đó lớp ClBatchLearning, ClOnlineLearing, ClCombineLearning là các cách huấn luyện mạng

ta sẽ xét chi tiết ở phần sau, _acceptError là lỗi cho phép để dừng quá trình huấn luyện mạnglại _acceptError là số thực lớn hơn 0.0

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ươngnằ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ệunà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ốctọ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ớibà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ôngthức chuyển tọa độ từ điểm tọa độ thành điểm dữ liệu như sau:

Ngược lại để chuyển điểm dữ liệu đã nén thành tọa độ để biểu diễn thì ta làm như sau:

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 / 60)).ToString());

int Y = int Parse( Math Round(((60 - (3 - _y) * 10) * panel1.Height / 60)).ToString());

//In ra man hinh // MessageBox.Show(x.ToString() + “=/=" + X.ToString());

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 trongkhoả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);

+ _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

_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: 27/08/2020, 16:25

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