1. Trang chủ
  2. » Công Nghệ Thông Tin

NGHIÊN CỨU PHƯƠNG PHÁP HỌC CÓ GIÁM SÁT VỚI MẠNG NEURON MLP

32 842 8

Đ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 32
Dung lượng 1,56 MB

Nội dung

Nghiên cứu phương pháp học có giám sát với mạng nơron MLPHình 1: Nơron nhân tạo Các thành phần cơ bản của một nơron nhân tạo bao gồm:  Tập các đầu vào: Là các tín hiệu vào input signals

Trang 1

HỌC VIỆN KỸ THUẬT QUÂN SỰKHOA CÔNG NGHỆ THÔNG TIN

-BỘ MÔN KHOA HỌC MÁY TÍNH

BÀI TẬPMÔN TRÍ TUỆ NHÂN TẠO

Đề tài

NGHIÊN CỨU PHƯƠNG PHÁP HỌC CÓ GIÁM SÁT

VỚI MẠNG NEURON MLP

Giảng viên Tiến sĩ Ngô Hữu Phúc

Sinh viên thực hiện Nguyễn Duy Hiếu – MHV: 11870194 Lớp: KHMT-K23 TPHCM

Tp Hồ Chí Minh, Tháng 7 năm 2012

MỤC LỤC

Trang 2

1 Giới thiệu

Hiện nay, phương pháp học có giám sát có thể nói là phương pháp được sử dụngnhiều nhất trong các ứng dụng của mạng nơron Một “thầy giáo” cung cấp các ví dụ mẫuhuấn luyện cho một mạng nơron học tập Học tập trong bối cảnh này có nghĩa là gia tăngthích ứng kết nối thông tin giữa các nơron với nhau để đưa ra một kết quả chính xác nhất

Trong thực tế, phương pháp học này có thể được thể hiện như là một vấn đề giảmthiểu về tham số một không gian nhiều chiều, cụ thể là không gian vector mở rộng ra bởitrọng lượng Một kỹ thuật điển hình để thực hiện tối ưu hóa thực hiện theo nguyên tắc giảm

độ dốc và thủ tục học giám sát phổ biến nhất là thuật toán lan truyền ngược

Trong bài tìm hiểu này nội dung bao gồm 2 phần: phần 1 là tìm hiểu về mạng nơronMLP và các phương pháp học, phần 2 là tìm hiểu về xây dựng một mạng nơron MLP vàthuật toán lan truyền ngược

2 Mạng nơron nhân tạo.

Mạng nơron nhân tạo, Artificial Neural Network (ANN) gọi tắt là mạng nơron, neural network, là một mô hình xử lý thông tin phỏng theo cách thức xử lý thông tin của các

hệ nơron sinh học Nó được tạo lên từ một số lượng lớn các phần tử (gọi là phần tử xử lý hay nơron) kết nối với nhau thông qua các liên kết (gọi là trọng số liên kết) làm việc như

một thể thống nhất để giải quyết một vấn đề cụ thể nào đó

Một mạng nơron nhân tạo được cấu hình cho một ứng dụng cụ thể (nhận dạng mẫu,

phân loại dữ liệu, ) thông qua một quá trình học từ tập các mẫu huấn luyện Về bản chất

học chính là quá trình hiệu chỉnh trọng số liên kết giữa các nơron

Một nơron là một đơn vị xử lý thông tin và là thành phần cơ bản của một mạng nơron.Cấu trúc của một nơron được mô tả trên hình dưới

Trang 3

Nghiên cứu phương pháp học có giám sát với mạng nơron MLP

Hình 1: Nơron nhân tạo

Các thành phần cơ bản của một nơron nhân tạo bao gồm:

 Tập các đầu vào: Là các tín hiệu vào (input signals) của nơron, các tín hiệu này

thường được đưa vào dưới dạng một vector N chiều

 Tập các liên kết: Mỗi liên kết được thể hiện bởi một trọng số (gọi là trọng số liên

kết – Synaptic weight) Trọng số liên kết giữa tín hiệu vào thứ j với nơron k thường được kí

hiệu là wkj Thông thường, các trọng số này được khởi tạo một cách ngẫu nhiên ở thời điểmkhởi tạo mạng và được cập nhật liên tục trong quá trình học mạng

 Bộ tổng (Summing function): Thường dùng để tính tổng của tích các đầu vào với

trọng số liên kết của nó

 Ngưỡng (còn gọi là một độ lệch - bias): Ngưỡng này thường được đưa vào như một

thành phần của hàm truyền

 Hàm truyền (Transfer function) : Hàm này được dùng để giới hạn phạm vi đầu ra

của mỗi nơron Nó nhận đầu vào là kết quả của hàm tổng và ngưỡng đã cho Thông thường,phạm vi đầu ra của mỗi nơron được giới hạn trong đoạn [0,1] hoặc [-1, 1] Các hàm truyềnrất đa dạng, có thể là các hàm tuyến tính hoặc phi tuyến Việc lựa chọn hàm truyền nào là tuỳthuộc vào từng bài toán và kinh nghiệm của người thiết kế mạng Một số hàm truyền thường

sử dụng trong các mô hình mạng nơron được đưa ra trong bảng 1

 Đầu ra: Là tín hiệu đầu ra của một nơron, với mỗi nơron sẽ có tối đa là một đầu ra

Xét về mặt toán học, cấu trúc của một nơron k, được mô tả bằng cặp biểu thức sau:[cong thuc]

Trang 4

trong đó: x1, x2, , xp: là các tín hiệu vào; (wk1, wk2, , wkp) là các trọng số liênkết của nơron thứ k; uk là hàm tổng; bk là một ngưỡng; f là hàm truyền và yk là tín hiệu đầu

ra của nơron

Như vậy tương tự như nơron sinh học, nơron nhân tạo cũng nhận các tín hiệu đầu vào,

xử lý ( nhân các tín hiệu này với trọng số liên kết, tính tổng các tích thu được rồi gửi kết quảtới hàm truyền), và cho một tín hiệu đầu ra ( là kết quả của hàm truyền)

Trang 5

Nghiên cứu phương pháp học có giám sát với mạng nơron MLP

kiến trúc thống nhất Một mạng nơron là một mô hình tính toán được xác định qua các thamsố: kiểu nơron (như là các nút nếu ta coi cả mạng nơron là một đồ thị), kiến trúc kết nối (sự

tổ chức kết nối giữa các nơron) và thuật toán học (thuật toán dùng để học cho mạng)

Về bản chất một mạng nơron có chức năng như là một hàm ánh xạ F: X → Y, trong

đó X là không gian trạng thái đầu vào (input state space) và Y là không gian trạng thái đầu

ra (output state space) của mạng Các mạng chỉ đơn giản là làm nhiệm vụ ánh xạ các vector

đầu vào x ∈ X sang các vector đầu ra y ∈ Y thông qua “bộ lọc” (filter) các trọng số Tức là

y = F(x) = s(W, x), trong đó W là ma trận trọng số liên kết Hoạt động của mạng thường làcác tính toán số thực trên các ma trận

2.2.1 Các kiểu mô hình mạng nơron

Cách thức kết nối các nơron trong mạng xác định kiến trúc (topology) của mạng Các nơron trong mạng có thể kết nối đầy đủ (fully connected) tức là mỗi nơron đều được kết nối với tất cả các nơron khác, hoặc kết nối cục bộ (partially connected) chẳng hạn chỉ kết nối

giữa các nơron trong các tầng khác nhau Người ta chia ra hai loại kiến trúc mạng chính:

 Tự kết hợp (autoassociative): là mạng có các nơron đầu vào cũng là các nơron đầu

ra Mạng Hopfield là một kiểu mạng tự kết hợp

Hình 2: Mạng tự kết hợp

 Kết hợp khác kiểu (heteroassociative): là mạng có tập nơron đầu vào và đầu ra riêng

biệt Perceptron, các mạng Perceptron nhiều tầng (MLP: MultiLayer Perceptron), mạngKohonen, … thuộc loại này

Trang 6

Hình 3: Mạng kết hợp khác kiểu

Ngoài ra tùy thuộc vào mạng có các kết nối ngược (feedback connections) từ các

nơron đầu ra tới các nơron đầu vào hay không, người ta chia ra làm 2 loại kiến trúc mạng

 Kiến trúc truyền thẳng (feedforward architechture): là kiểu kiến trúc mạng không có

các kết nối ngược trở lại từ các nơron đầu ra về các nơron đầu vào; mạng không lưu lại cácgiá trị output trước và các trạng thái kích hoạt của nơron Các mạng nơron truyền thẳng chophép tín hiệu di chuyển theo một đường duy nhất; từ đầu vào tới đầu ra, đầu ra của một tầngbất kì sẽ không ảnh hưởng tới tầng đó Các mạng kiểu Perceptron là mạng truyền thẳng

Hình 4: Mạng truyền thẳng

 Kiến trúc phản hồi (Feedback architecture): là kiểu kiến trúc mạng có các kết nối từ

nơron đầu ra tới nơron đầu vào Mạng lưu lại các trạng thái trước đó, và trạng thái tiếp theokhông chỉ phụ thuộc vào các tín hiệu đầu vào mà còn phụ thuộc vào các trạng thái trước đócủa mạng Mạng Hopfield thuộc loại này

Trang 7

Nghiên cứu phương pháp học có giám sát với mạng nơron MLP

Hình 5: Mạng phản hồi 2.2.2 Perceptron

Perceptron là mạng nơron đơn giản nhất, nó chỉ gồm một nơron, nhận đầu vào làvector có các thành phần là các số thực và đầu ra là một trong hai giá trị +1 hoặc -1

Hình 6: Perceptron

Đầu ra của mạng được xác định như sau: mạng lấy tổng có trọng số các thành phầncủa vector đầu vào, kết quả này cùng ngưỡng b được đưa vào hàm truyền (Perceptron dùnghàm Hard-limit làm hàm truyền) và kết quả của hàm truyền sẽ là đầu ra của mạng

Hoạt động của Perceptron có thể được mô tả bởi cặp công thức sau:

Trang 8

2.2.3 Mạng nhiều tầng truyền thẳng (MLP)

Mô hình mạng nơron được sử dụng rộng rãi nhất là mô hình mạng nhiều tầng truyềnthẳng (MLP: Multi Layer Perceptron) Một mạng MLP tổng quát là mạng có n (n≥2) tầng(thông thường tầng đầu vào không được tính đến): trong đó gồm một tầng đầu ra (tầng thứ n)

và (n-1) tầng ẩn

Hình 7: Mạng MLP tổng quát

Kiến trúc của một mạng MLP tổng quát có thể mô tả như sau:

 Đầu vào là các vector (x1, x2, , xp) trong không gian p chiều, đầu ra là các vector(y1, y2, , yq) trong không gian q chiều Đối với các bài toán phân loại, p chính là kíchthước của mẫu đầu vào, q chính là số lớp cần phân loại Xét ví dụ trong bài toán nhận dạngchữ số: với mỗi mẫu ta lưu tọa độ (x,y) của 8 điểm trên chữ số đó, và nhiệm vụ của mạng làphân loại các mẫu này vào một trong 10 lớp tương ứng với 10 chữ số 0, 1, …, 9 Khi đó p làkích thước mẫu và bằng 8 x 2 = 16; q là số lớp và bằng 10

 Mỗi nơron thuộc tầng sau liên kết với tất cả các nơron thuộc tầng liền trước nó

 Đầu ra của nơron tầng trước là đầu vào của nơron thuộc tầng liền sau nó

Hoạt động của mạng MLP như sau: tại tầng đầu vào các nơron nhận tín hiệu vào xử lý(tính tổng trọng số, gửi tới hàm truyền) rồi cho ra kết quả (là kết quả của hàm truyền); kếtquả này sẽ được truyền tới các nơron thuộc tầng ẩn thứ nhất; các nơron tại đây tiếp nhận như

là tín hiệu đầu vào, xử lý và gửi kết quả đến tầng ẩn thứ 2;…; quá trình tiếp tục cho đến khicác nơron thuộc tầng ra cho kết quả

Một số kết quả đã được chứng minh:

Trang 9

Nghiên cứu phương pháp học có giám sát với mạng nơron MLP

 Bất kì một hàm Boolean nào cũng có thể biểu diễn được bởi một mạng MLP 2 tầngtrong đó các nơron sử dụng hàm truyền sigmoid

 Tất cả các hàm liên tục đều có thể xấp xỉ bởi một mạng MLP 2 tầng sử dụng hàmtruyền sigmoid cho các nơron tầng ẩn và hàm truyền tuyến tính cho các nơron tầng ra với sai

Một mạng nơron được huyấn luyện sao cho với một tập các vector đầu vào X, mạng

có khả năng tạo ra tập các vector đầu ra mong muốn Y của nó Tập X được sử dụng cho huấn

luyện mạng được gọi là tập huấn luyện (training set) Các phần tử x thuộc X được gọi là các mẫu huấn luyện (training example) Quá trình huấn luyện bản chất là sự thay đổi các trọng số

liên kết của mạng Trong quá trình này, các trọng số của mạng sẽ hội tụ dần tới các giá trị saocho với mỗi vector đầu vào x từ tập huấn luyện, mạng sẽ cho ra vector đầu ra y như mongmuốn

Có ba phương pháp học phổ biến là học có giám sát (supervised learning), học không giám sát (unsupervised learning) và học tăng cường (Reinforcement learning):

 Học có giám sát: Là quá trình học có sự tham gia giám sát của một “thầy giáo”.

Cũng giống như việc ta dạy một em nhỏ các chữ cái Ta đưa ra một chữ “a” và bảo với em đórằng đây là chữ “a” Việc này được thực hiện trên tất cả các mẫu chữ cái Sau đó khi kiểm tra

ta sẽ đưa ra một chữ cái bất kì (có thể viết hơi khác đi) và hỏi em đó đây là chữ gì?

Với học có giám sát, tập mẫu huấn luyện được cho dưới dạng D = {(x,t) | (x,t) ∈ [IRN

x RK]}, trong đó: x = (x1, x2, , xN) là vector đặc trưng N chiều của mẫu huấn luyện và t =(t1, t2, , tK) là vector mục tiêu K chiều tương ứng, nhiệm vụ của thuật toán là phải thiết lậpđược một cách tính toán trên mạng như thế nào đó để sao cho với mỗi vector đặc trưng đầuvào thì sai số giữa giá trị đầu ra thực sự của mạng và giá trị mục tiêu tương ứng là nhỏ nhất

Trang 10

Chẳng hạn mạng có thể học để xấp xỉ một hàm

t = f(x) biểu diễn mối quan hệ trên tập các mẫu huấn luyện (x, t)

Như vậy với học có giám sát, số lớp cần phân loại đã được biết trước Nhiệm vụ củathuật toán là phải xác định được một cách thức phân lớp sao cho với mỗi vector đầu vào sẽđược phân loại chính xác vào lớp của nó

 Học không giám sát: Là việc học không cần có bất kỳ một sự giám sát nào

Trong bài toán học không giám sát, tập dữ liệu huấn luyện được cho dưới dạng: D ={(x1, x2, , xN)}, với (x1, x2, , xN) là vector đặc trưng của mẫu huấn luyện Nhiệm vụ củathuật toán là phải phân chia tập dữ liệu D thành các nhóm con, mỗi nhóm chứa các vectorđầu vào có đặc trưng giống nhau

Như vậy với học không giám sát, số lớp phân loại chưa được biết trước, và tùy theo

tiêu chuẩn đánh giá độ tương tự giữa các mẫu mà ta có thể có các lớp phân loại khác nhau

 Học tăng cường: còn được gọi là học thưởng-phạt (reward-penalty learning), là sự

tổ hợp của cả hai mô hình trên Phương pháp này cụ thể như sau: với vector đầu vào, quansát vector đầu ra do mạng tính được Nếu kết quả được xem là “tốt” thì mạng sẽ được thưởngtheo nghĩa tăng các trọng số kết nối lên; ngược lại mạng sẽ bị phạt, các trọng số kết nốikhông thích hợp sẽ được giảm xuống Do đó học tăng cường là học theo nhà phê bình

(critic), ngược với học có giám sát là học theo thầy giáo (teacher).

Trang 11

Dữ liệu dùng để huấn luyện(đã biết nội dung và tính chất dữ liệu

Giải thuật huấn luyện Hàm mục tiêu

Mạng nơron Ra

Hình 8: Sơ đồ huấn luyện mạng nơron có giám sát

error Nghiên cứu phương pháp học có giám sát với mạng nơron MLP

Mạng nơron học có giám sát là mạng nơron khi huấn luyện, tín hiệu đầu vào đã biết

rõ, đầu ra đã xác định Nhiệm vụ chỉ là: huấn luyện bộ trọng số Sau khi đã huấn luyện xong,một tín hiệu đầu vào sẽ được kết hợp với bộ trọng số đã được huấn luyện để đưa ra một tínhiệu đầu ra Từ tín hiệu đầu ra này mà mạng nơron sẽ cho biết đây là hư hỏng gì Mô hìnhhuấn luyện mạng nơron giám sát có thể được minh họa trong hình sau

Học có giám sát có thể được xem như việc xấp xỉ một ánh xạ: X→ Y, trong đó X làtập các vấn đề và Y là tập các lời giải tương ứng cho vấn đề đó Các mẫu (x, y) với x = (x1,x2, , xn) ∈ X, y = (yl, y2, , ym) ∈ Y được cho trước Học có giám sát trong các mạngnơron thường được thực hiện theo các bước sau:

Trang 12

 B1: Xây dựng cấu trúc thích hợp cho mạng nơron, chẳng hạn có (n + 1) nơron vào

(n nơron cho biến vào và 1 nơron cho ngưỡng x0), m nơron đầu ra, và khởi tạo các trọng sốliên kết của mạng

 B2: Đưa một vector x trong tập mẫu huấn luyện X vào mạng

 B3: Tính vector đầu ra o của mạng

 B4: So sánh vector đầu ra mong muốn y (là kết quả được cho trong tập huấn luyện)

với vector đầu ra o do mạng tạo ra; nếu có thể thì đánh giá lỗi

 B5: Hiệu chỉnh các trọng số liên kết theo một cách nào đó sao cho ở lần tiếp theo khi

đưa vector x vào mạng, vector đầu ra o sẽ giống với y hơn

 B6: Nếu cần, lặp lại các bước từ 2 đến 5 cho tới khi mạng đạt tới trạng thái hội tụ.

Việc đánh giá lỗi có thể thực hiện theo nhiều cách, cách dùng nhiều nhất là sử dụng lỗi tức

thời: Err = (o - y), hoặc Err = |o - y|; lỗi trung bình bình phương (MSE: mean-square error): Err = (o- y)2/2;

Có hai loại lỗi trong đánh giá một mạng nơron Thứ nhất, gọi là lỗi rõ ràng (apparent error), đánh giá khả năng xấp xỉ các mẫu huấn luyện của một mạng đã được huấn luyện Thứ hai, gọi là lỗi kiểm tra (test error), đánh giá khả năng tổng quá hóa của một mạng đã được

huấn luyện, tức khả năng phản ứng với các vector đầu vào mới Để đánh giá lỗi kiểm trachúng ta phải biết đầu ra mong muốn cho các mẫu kiểm tra

Thuật toán tổng quát ở trên cho học có giám sát trong các mạng nơron có nhiều cài đặtkhác nhau, sự khác nhau chủ yếu là cách các trọng số liên kết được thay đổi trong suốt thờigian học Trong đó tiêu biểu nhất là thuật toán lan truyền ngược

3.2.1 Học có giám sát với mạng Perceptron một lớp

Luật học perceptron được Rosenblatt đưa ra vào cuối năm 1950 là mục cho nguyên lýsửa sai theo giải thuật lan truyền ngược sai lệch Luật học này dựa trên mô hình Perceptronchỉ gồm một nơron duy nhất, dùng hàm ngưỡng tuyến tính làm hàm truyền nên được dùngcho việc nhận dạng và phân đối tượng thành 2 loại

Mô tả giải thuật:

Cho trước tập các giá trị vào đầu ra

Trang 13

Nghiên cứu phương pháp học có giám sát với mạng nơron MLP

cho tất cả các mẫu câu trong tập huấn luyện

Với 0 là giá trị của mạng nơron, y là giá trị ra mong muốn, e là sai lệch giữa hai giá trịnày: e = y – 0

Hàm kích hoạt được dùng là hàm ngưỡng tuyến tính, cho dưới dạng

Trang 14

c = e + ||y – 0||2

Bước 6: nếu k < K (tức chưa hết tập dữ liệu cần học) thì tăng k lên để qua mẫu kế tiếprồi trở lại bước 3, nếu k = K qua bước 7

Bước 7: xong một chu kỳ học Nếu e = 0 kết thúc quá trình học

Còn nếu e > 0 thì thiết lập e = 0, k = 1 và khởi tạo chu kỳ học mới bằng cách trở lạibước 3

Thuyết sau đây chứng tỏ rằng nếu bài toán có nhiều lời giải thì giải thuật họcPerceptron sẽ tìm ra một lời giải trong số đó Thuyết hội tụ: Nếu bài toán là khả tách tuyếntính thì chương trình sẽ chỉ lặp lại một số lần nhất định

3.2.2 Học có giám sát với mạng nơron MLP

Trong phương pháp này ta sử dụng thuật toán lan tuyện ngược để thực hiện:

• xji: đầu vào của nút thứ j từ nút thứ i

• wji: trọng số trên xji

• bj: ngưỡng tại nút thứ j

• oj: đầu ra của nút thứ j

• tj: đầu ra mong muốn của nút thứ j

• Downstream(j): Tập tất cả các nút nhận đầu ra của nút thứ j làm một giá trịđầu vào

• η: tốc độ học

• f: hàm truyền với f(x) = 1 / (1 + e-x)

Thuật toán lan truyền ngược được mô tả như sau:

Input:

Trang 15

Nghiên cứu phương pháp học có giám sát với mạng nơron MLP

Bước 1: Khởi tạo trọng số bởi các giá trị ngẫu nhiên nhỏ

Bước 2: Lặp lại cho tới khi thỏa mãn điều kiện kết thúc

Với mỗi mẫu, thực hiện các bước sau:

2.1 Tính đầu ra oj cho mỗi nút j:

 Dạng hàm đích: khi hàm đích càng phức tạp thì kích thước mẫu cần tăng

 Nhiễu: khi dữ liệu bị nhiễu (thông tin sai hoặc thiếu thông tin) kích thước mẫu cầntăng

Đối với mạng truyền thẳng (feedforward), cho hàm đích có độ phức tạp nhất định,

kèm một lượng nhiễu nhất định thì độ chính xác của mô hình luôn có một giới hạn nhất định

Có thể cần tập mẫu vô hạn để đạt đến giới hạn chính xác Nói cách khác độ chính xác của mô

Trang 16

hình là hàm theo kích thước tập mẫu Khi kích thước mẫu tăng, độ chính xác sẽ được cảithiện - lúc đầu nhanh, nhưng chậm dần khi tiến đến giới hạn

Dạng tổng quát của mối liên hệ giữa sai số và kích thước mẫu như sau:

Hình 10: Mối liên hệ giữa sai số và kích thước mẫu

Trong thực hành thường gặp phải 2 vấn đề sau :

 Đối với hầu hết bài toán thực tế, mẫu bị ràng buộc chặt chẽ với dữ liệu có sẵn Tathường không có được số lượng mẫu mong muốn

 Kích thước mẫu cũng có thể bị giới hạn bởi bộ nhớ hoặc khả năng lưu trữ của máytính Nếu tất cả các dữ liệu đồng thời được giữ trong bộ nhớ suốt thời gian luyện, kích thước

bộ nhớ máy tính sẽ bị chiếm dụng nghiêm trọng

Nếu lưu trữ trên đĩa sẽ cho phép dùng mẫu lớn hơn nhưng thao tác đọc đĩa từ thế hệnày sang thế hệ khác khiến cho tiến trình chậm đi rất nhiều

Chú ý: việc tăng kích thước mẫu không làm tăng thời gian luyện Những tập mẫu lớn

hơn sẽ yêu cầu ít thế hệ luyện hơn Nếu ta tăng gấp đôi kích thước của mẫu, mỗi thế hệ luyện

sẽ tốn thời gian khoảng gấp đôi, nhưng số thế hệ cần luyện sẽ giảm đi một nửa Điều này cónghĩa là kích thước mẫu (cũng có nghĩa là độ chính xác của mô hình) không bị giới hạn bởithời gian luyện

Luật cơ bản là: Sử dụng mẫu lớn nhất có thể sao cho đủ khả năng lưu trữ trong bộ

nhớ trong (nếu lưu trữ đồng thời) hoặc trên đĩa từ (nếu đủ thời gian đọc từ đĩa)

b Mẫu con

Ngày đăng: 03/07/2015, 15:49

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w