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

Báo cáo đồ án trí tuệ nhân tạo : xây dựng chương trình sử dụng MLP đa lớp để tìm đường phân lớp 2 tập điểm là các điểm trên không gian 2 chiều

22 1,1K 3

Đ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 22
Dung lượng 412,5 KB

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

Nội dung

MỤC LỤC: CHƯƠNG 1: CĂN BẢN VỀ MẠNG NEURAL A.Các mô hình mạng Neural…………………………………2 1.Neural một đầu vào…………………………………….2 2.Hàm truyền………………………………………………3 3.Neural nhiều đầu vào…………………………………6 B.Các kiến trúc mạng Neural…………………………….8 1.Mạng Neural một lớp………………………………..8 2.Mạng Neural đa lớp……………………………….10 C.Mạng Perceptron đa lớp và giải thuật lan truyền ngược 1.Nội dung giải thuật lan truyền ngược…………..11 2.Huấn luyện mạng (Training). ……………………..13 3.Khởi tạo giá trị trọng số……………………………15 CHƯƠNG 2: ÁP DỤNG VÀO BÀI TOÁN: “Bài toán được mô tả là các điểm trên không gian 2 chiều.Mỗi điểm được gán nhãn là 0 hoặc 1.Hãy xây dựng chương trình sử dụng MLP đa lớp để tìm đường phân lớp 2 tập điểm nói trên (đường này cố gắng chia không gian thành 2 phần sao cho tập điểm nhãn 0 ở 1 phía,phía kia là tập điểm mang nhãn 1) ” 1.Xác định bài toán……………………………………..16 2. Xác định các tham số cho mạng…………………….16 3.Áp dụng vào bài toán………………………………….20

Trang 1

KHOA CÔNG NGHỆ THÔNG TIN

VŨ THỊ THO Tin học 5A

BÀI TẬP LỚN MÔN TRÍ TUỆ NHÂN TẠO

Tên đề tài :

“Bài toán được mô tả là các điểm trên không gian 2 chiều.Mỗi điểm được gán nhãn là 0 hoặc 1.Hãy xây dựng chương trình sử dụng MLP đa lớp để tìm đường phân lớp 2 tập điểm nói trên ( đường này cố gắng chia không gian thành 2 phần sao cho tập điểm nhãn 0 ở 1 phía,phía kia là tập điểm mang nhãn 1 ) ”

Giáo viên phụ trách : NGÔ HỮU PHÚC

Trang 2

MỤC LỤC:

CHƯƠNG 1: CĂN BẢN VỀ MẠNG NEURAL

A.Các mô hình mạng Neural………2

1 Neural một đầu vào……….2

2 Hàm truyền………3

3 Neural nhiều đầu vào ………6

B Các kiến trúc mạng Neural……….8

1.Mạng Neural một lớp ……… 8

2.Mạng Neural đa lớp ……….10

C Mạng Perceptron đa lớp và giải thuật lan truyền ngược

1 Nội dung giải thuật lan truyền ngược ………… 11

2 Huấn luyện mạng (Training) ……… 13

3 Khởi tạo giá trị trọng số………15

CHƯƠNG 2: ÁP DỤNG VÀO BÀI TOÁN: “Bài toán được mô tả là các điểm trên không gian 2 chiều.Mỗi điểm được gán nhãn là 0 hoặc 1.Hãy xây dựng chương trình sử dụng MLP đa lớp để tìm đường phân lớp 2 tập điểm nói trên (đường này cố gắng chia không gian thành 2 phần sao cho tập điểm nhãn 0 ở 1 phía,phía kia là tập điểm mang nhãn 1) ” 1.Xác định bài toán……… 16

2 Xác định các tham số cho mạng……….16

3.Áp dụng vào bài toán……….20

Trang 3

A.Các mô hình mạng Neural

1.Neural một đầu vào

Hình 1.1 Neural 1 đầu vào

Đầu vào vô hướng p được nhân với trọng số w, cho wp, tạothành một số hạng gửi đến bộ cộng Một đầu vào khác là 1 đượcnhân với bias b, rồi chuyển đến bộ cộng Đầu ra của bộ cộng,thường được xem như là net-input, trở thành đầu vào cho hàmtruyền đạt f sinh ra đầu ra Neural là a:

a = f(wp + b)

Ví dụ: w = 3, p = 2, b = -1.5 thì a = f(wp + b) = f(3x2 - 1.5) =f(4.5)

Bias giống trọng số ngoại trừ luôn có đầu vào hằng số là 1 Có thể

bỏ qua bias nếu muốn

2.Hàm truyền

Hàm truyền f cho trong hình 2.1 có thể là hàm tuyến tính hoặcphi tuyến của n Mỗi hàm truyền cụ thể được chọn nhằm thoả mãnmột số tính chất đặc biệt của bài toán cần giải quyết

Sau đây là 3 hàm truyền thông dụng nhất:

Hàm truyền Hard Limit:

Trang 4

a = hardlim(n) =

Ta sẽ sử dụng hàm này để tạo các Neural phân lớp các đầuvào thành hai nhóm

Hàm truyền này được minh hoạ như hình 1.2

Hình 1.2 Hàm truyền Hard Limit

Trang 5

Hàm truyền log.sigmoid

a = logsig(n) =

Hàm truyền logsig thông thường được sử dụng trong cácmạng đa lớp dùng để huấn luyện với giải thuật BP, một phần lànhờ tính khả vi của nó

Hàm truyền này được minh hoạ như hình 1.4

Hình 1.4 Hàm truyền Log-SigmoidMột số hàm truyền khác thường sử dụng, xem bảng tóm lượccác hàm truyền

Trang 6

Bảng 1.5 Các hàm truyền

3 Neural nhiều đầu vào

Thông thường, một nơ ron có nhiều đầu vào Một Neural với

R đầu vào được cho như hình 1.5 Các đầu vào độc lập p1, p2,

p3, ,pR được gán trọng số bởi các thành phần w11, w12,, , w1R của

ma trận trọng số W

Trang 7

Hình 1.6 Neural nhiều đầu vào

Ở đây: W = [w11, w12, , w1R]1xR; p = [p1, p2, p3, , pR]T

Rx1 Như vậy:

Ta lại muốn vẽ mạng với nhiều Neural, mỗi Neural có nhiềuđầu vào, hơn nữa, lại có thể có nhiều lớp các Neural, do đó nếudùng cách biểu thị như hình 1.5 thì sẽ rất phức tạp Ta dùng kýhiệu tắt như hình 1.6 sau:

Hình 1.7 Neural R đầu vào, kí hiệu tắt

Trang 8

Ở đây, đầu vào p là một véc tơ Rx1

Chú ý thêm rằng, số lượng đầu vào của một mạng được xácđịnh bởi bài toán Chẳng hạn, để thiết kế một mạng Neural dự toáncác điều kiện bay và đầu vào là nhiệt độ không khí, vận tốc gió và

độ ẩm thì phải có 3 đầu vào cho mạng Neural

Trang 9

Trong đó Wt =[wt1 wt2 wtR] là hàng thứ t của W

Một lớp Neural gồm S Neural được thể hiện như trong hình1.8 Chú ý rằng, mỗi thành phần trong R đầu vào đều được kết nốiđến tất cả các Neural, do đó ma trận trọng số có S hàng (R cột)

Ta nói rằng, một lớp Neural ở đây bao gồm: Ma trận trọng

số, các bộ cộng, véc tơ bias b, các hộp hàm truyền và véc tơ đầu ra

có tính chất hàm truyền như trên

Các thành phần của véc tơ đầu vào đi vào mạng thông qua

ma trận trọng số W:

Như đã nói, các chỉ số hàng của phần tử wij (tức i) của wdùng để chỉ Neural liên kết, trong khi chỉ số (j) chỉ nguồn đầu vào

Do đó các chỉ số trong w32 nói lên rằng, trọng số này (w32) kết nốiđến Neural thứ 3 từ nguồn thứ 2 (p2)

Mạng một lớp S-Neural, R đầu vào cũng có thể vẽ ở dạng

ký hiệu tắt như hình 1.9 sau:

Trang 10

Hình 1.9 Lớp S Neural, kí hiệu tắt

Ở đây: pRx1; WSxR; aSx1; bSx1

2.Mạng Neural đa lớp

Bây giờ ta xét một mạng có một số lớp các Neural Mỗi lớp

Neural gồm ma trận trọng số W của nó, bias b của nó, một véc tơ net-input n và 1 véc tơ đầu ra a Ta cần có thêm một số ký hiệu để

phân biệt giữa các lớp này Ta dùng các ký hiệu kề trên để phânbiệt các lớp Theo đó, ma trận trọng số của của lớp thứ k ký hiệu là

Wk (không phải mũ k), Một mạng 3 lớp sẽ được biểu diễn nhưhình 1.10 sau:

Trang 11

Hình 1.10 Mạng 3 lớp

Như trên, có R đầu vào, S1 Neural trong lớp thứ nhất, S2

Neural trong lớp thứ 2, Các lớp khác nhau có thể có số Neuralkhác nhau Các đầu ra của lớp 1, 2 theo thứ tự là đầu vào cho cáclớp 2, 3 Do đó, lớp 2 có thể xem như là mạng một lớp với R=S1

đầu vào, S=S2 Neural, ma trận trọng số W2 cấp S2xS1, đầu vào cho

lớp 2 là a1, đầu ra là a2

Lớp có đầu ra là đầu ra của mạng thì được gọi là lớp ra Các lớpcòn lại được gọi là các lớp ẩn Mạng như đã vẽ ở hình 2.9 có mộtlớp ra (lớp 3) và 2 lớp ẩn (các lớp 1,2)

Mạng trên có thể vẽ lại dạng ký hiệu tắt như sau: (Hình 1.10)

ra đầu ra OS của mạng Giá trị đầu ra này thường có sai số so vớigiá trị đầu ra mong muốn Y tương ứng với mỗi mẫu học X Các

Trang 12

sai số sẽ được tính và lan truyền ngược từ lớp ra trở về phía trước

để cập nhật lại các trọng số liên kết giữa các Neural của các lớp

Các bước của thuật toán với mô hình mạng tổng quát

Trên đây ta đã trình bày giải thuật lan truyền ngược áp dụngcho mạng 2 lớp Tiếp theo ta sẽ trình bày giải thuật này áp dụngcho mạng Neural với số lớp bất kỳ:

Đầu vào: Tập mẫu học X=(x1,x2,x3,…xm) và Y=(y1,y2,y3,…

yn) với m: số đầu vào, n: số đầu ra, số lượng mẫu là M, số tầng

là các số ngẫu nhiên rât nhỏ

Khởi tạo m=1 (mẫu học thứ m), h =1 (lần huấn luyện thứ h), q =1 (lớp thứ q).

Bước 2:

Đưa mẫu huấn luyện thứ m áp lên mạng.

Bước 3:

Lan truyền xuôi tín hiệu đầu vào lần lượt qua các lớp

Neural, cho đến khi q > T để tính đầu ra tương ứng tại mỗi

Tính sai số ở lớp ra của mạng theo công thức:

k =(y k – o k ).o k (1-o k ) đối với Neural thứ k.

Bước 5:

Trang 13

Lan truyền ngược tín hiệu sai số, cụ thể là từ đầu ra, qua lớp

ẩn cuối cùng,…đến lớp ẩn đầu tiên, để cập nhật trọng số cũng nhưtín hiệu sai số trước đó theo các công thức:

Nếu m < M (chưa hết số mẫu học) thì m = m+1, quay

lại bước 2, ngược

lại chuyển sang bước 7

Bước 7:

Sai số trung bình của mạng được tính theo công thức:

RMS =

n M

o y

.

) (

của vector đầu ra

Nếu RMS <  thì kết thúc Ngược lại gán h = h + 1 rồi lặp lại

các bước từ bước 2 cho tới bước 7, bắt đầu một chu kỳ học mới.

2.Huấn luyện mạng (Training).

Học từng mẫu một:

Trang 14

Một quy tắc cập nhật trọng số khác là: trọng số sẽ đượccập nhật ngay sau khi mạng học xong một mẫu, dựa trên đạohàm lỗi của riêng mẫu đó Với cách này thì lỗi trên tập mẫuthường giảm nhanh hơn ở các bước đầu vì mạng không cầnphải đợi hết một bước đi qua toàn bộ tập mẫu mới học đượcđiều gì đó.

Tuy vậy, với một vài bài toán ta phải cẩn thận khi dùngcách này Lý do đầu tiên là không phải lúc nào phương phápnày cũng giảm số bước cần thiết để mạng của ta ổn định với tậptrọng số tối ưu Trong nhiều trường hợp khi học mẫu mới mạng

có thể đã quên mẫu cũ Trường hợp này thường xảy ra khi cácmẫu kế tiếp nhau trong tập mẫu có sự khác biệt quá lớn

Thứ hai, ngay cả khi học từng mẫu, chỉ cần ít bước luyệnhơn nhưng chưa chắc tổng thời gian máy tính thực hiện việctính toán ít hơn so với học toàn tập mẫu một lần Bởi vì việc họctừng mẫu lại đòi hỏi việc tính toán của máy tính trên mỗi mẫunhiều hơn, trọng số thay đổi phải được tính cho mỗi mẫu chứkhông tính một lần cho cả bước

Thứ ba, việc học tong mẫu đòi hỏi ta phải then trong trongviệc sắp xếp thứ tự của các mẫu trong tập mẫu Thường thì cácmẫu xuất hiện cuối đợt huấn luyện thường có nhiều ảnh hưởnghơn so với các mẫu xuất hiện lúc đầu

Một giải pháp dung hoà là cập nhật tập trọng số dựa trêncác nhóm mẫu thay vì từng mẫu nhưng cũng không phải trêntoàn tập mẫu

Quy tắc moment

Phương pháp học được diễn tả như sau: nếu các bước học trướcđang giảm mạnh thì theo đà bước tới cũng sẽ giảm mạnh ta sẽtăng hệ số học để biến thiên trọng tăng lên, ngược lại giảm hệ sốhọc

3.Khởi tạo giá trị trọng số

Một vấn đề cũng rất đáng quan tâm trong quá trình huấnluyện mạng Neural đó là vấn đề khởi tạo các giá trị trọng số Huấn

Trang 15

luyện mạng là một tiến trình lặp qua lặp lại nhiều bước Trong mỗibước, mạng thi hành ánh xạ với các mẫu trong tập mẫu, tính toánsai số và cập nhật lại sao cho mạng thi hành ngày một tốt hơn.Vấn

đề đặt ra là, ban đầu để mạng có thể thi hành ở bước học đầu tiênthì các trọng số lấy từ đâu? Có một cách khá tốt đó là khởi tạotrọng sao cho kết xuất của các có giá trị trung dung là 0.5(chính làtrung điểm của hàm logictic) Có hai lý do giải thích cho việc này:

Thứ nhất, nếu ta không biết gì về kết xuất, giá trị ở giữa làgiá trị hợp lý nhất Trong trường hợp một lớp cứ cho rằng tất cảcác kết quả đầu ra phân bố xung quanh trung điểm hàm truyền, giátrị ở giữa sẽ cực tiểu hoá hàm sai số, bất kỳ giá trị nào khác cũng

sẽ sinh ra sai số lớn hơn

Thứ hai, ta muốn tránh được các giá trị kết xuất thái quá, vìchúng chứa các đạo hàm lỗi nhỏ, các đạo hàm lỗi nhỏ làm cho biếnthiên trọng nhỏ và như thế tiến trình học sẽ chậm

Có hai cách khác nhau cho phép khởi tạo trọng số để đượckết xuất một nút ở khoảng giữa:

- Cách thứ nhất: ding khởi tạo trọng số các nút ẩn

- Cách thứ hai: khởi tạo trọng số các nút xuất

Đối với các nút xuất, ta khởi tạo các trọng số ban đầu thậtnhỏ Nếu các trọng số của nó đủ nhỏ, nút sẽ kết xuất một giá trịgiữa bất chấp các giá trị nhập của nó

CHƯƠNG 2: Áp dụng vào bài toán:

“Bài toán được mô tả là các điểm trên không gian 2 chiều.Mỗi điểm được gán nhãn là 0 hoặc 1.Hãy xây dựng chương trình sử dụng MLP đa lớp để tìm đường phân lớp 2 tập điểm nói trên (đường này cố gắng chia không gian thành 2 phần sao cho tập điểm nhãn 0 ở 1 phía,phía kia là tập điểm mang nhãn 1) ” 1.Xác định bài toán

Trang 16

Bài toán đưa ra yêu cầu xây dựng mạng noron với các điểm đầu

vào có tọa độ (x,y) được gán nhãn là 0 hoặc là 1, đưa vào mạngMLP (em xây dựng mạng MLP 2 lớp) Khi đó đầu ra của mạnggồm có 2 đầu ra.Thứ nhất là đầu ra phân lớp đúng, thứ 2 là đầu raphân lớp sai

2 Xác định các tham số cho mạng

Bài toán sẽ sử dụng một mạng BP 2 lớp như hình vẽ dưới đây:

Hình 1.13 Mạng lan truyền ngược

Kiến trúc mạng tóm tắt như sau:

Mạng có m đầu vào, kí hiệu xi (i = 1…m)

Mạng có 2 lớp Neural

- Lớp ẩn có r Neural, kí hiệu p j (j =1 … r)

- Lớp ra có n Neural, kí hiệu là o k (k = 1…n)

 Mỗi Neural của lớp sau được liên kết đầy đủ với các Neural ở

lớp trước bởi các trọng số w, liên kết được thể hiện bằng các

đường nét liền

Trang 17

 Sự lan truyền ngược các sai số phát sinh được thể hiện bằngcác nét đứt.

Vì các đầu vào liên kết với các Neural nút ẩn bởi các trọng số

wij cho lên mỗi Neural thứ j của lớp ẩn sẽ nhận được tổng tín hiệu đầu vào có trọng số net j được tính theo công thức:

1

* i

Sau khi nhận được tổng tín hiệu vào với trọng số net j, giá trị

này sẽ được sử dụng làm tham số đầu vào cho hàm kích hoạt f (hàm truyền), và hàm kích hoạt f cho ta tín hiệu ra của các Neural lớp ẩn Giả sử hàm truyền được sử dụng là hàm Sigmoid đơn cực (ký hiệu là f) thì tín hiệu ra zj của mỗi Neural j được

Trang 18

Như vậy với đầu vào là vector X, sau khi lan truyền tiến qua

mạng, ta sẽ nhận được đầu ra là vector O Đầu ra này không thể

hoàn toàn trùng khớp với đầu ra đích (hay đầu r among muốn).Sai số tổng thể E của mạng được tính dựa trên sai lệch giữa O

và Y theo công thức bình phương:

E=21 

n

k 1 (y k – o k ) 2

Để điều chỉnh sao cho các tín hiệu ra O k tiến lại gần các tín

hiệu mong muốn y k, các trọng số của mạng sẽ được cập nhật lạitheo một quy tắc nào đó Chẳng hạn với quy tắc Delta (hay còngọi là phương pháp giảm theo hướng dốc nhất), thì các trọng số

liên kết giữa Neural thứ j tại lớp ẩn tới Neural thứ k tại lớp ra

được cập nhật theo công thức:

w jk = w jk + w jk

Trong đó biến thiên trọng số wjk của các trọng số liên kết

w jk được tính như sau:

w jk = .k z j

Với:

 : là hệ số học

 zj: là các đầu ra của Neural thứ j

  k: là sai số mà Neural thứ k phải chịu trách nhiệm, đượcxác định theo công thức:

k = E k f ’ (net k )

Ở đây E k là đạo hàm của hàm lỗi E (E k = o k - y k) , net k là tổng

tín hiệu vào có trọng số của Neural thứ k và f ‘ () là đạo hàm

của hàm kích hoạt f mà ta dùng trong mạng Hàm f là hàm

sigmoid đơn cực thì

Trang 19

f ‘ (x) = f(x)(1- f(x)) Vậy công thức trên sẽ được viết lại là:

k =(y k – o k ).o k (1-o k )

Các trọng số liên kết từ đầu vào thứ i tới Neural thứ j tại lởp

ẩn cũng được cập nhật theo cách tương tự, tuy nhiên sai số mà mộtNeural tại lớp ẩn phải chịu trách nhiệm sẽ được tính theo cáchkhác:

w ij = w ij + w ij

Với w ij =.j x i

Ta biết rằng một Neural thứ j ở lớp ẩn liên kết đầy đủ với tất cả các Neural k ở lớp ra Như vậy nó phải chụi trách nhiệm với tất cả các sai số của mỗi Neural k mà nó liên kết ở lớp ra Tổng sai số mà Neural thứ j phải chụi trách nhiệm là:

j = f(net j )

n

k 1 w jk k hay

Sai số trung bình của mạng được tính theo công thức:

RMS =

n M

o y

.

) (

Trang 20

Nếu RMS <  thì kết thúc.Ngược lại đưa mẫu huấn luyện thứ m

áp lên mạng,bắt đầu một chu kỳ học mới.

3.Áp dụng vào bài toán

Bước 1:Khởi tạo 2 ma trận trọng số q 1 và q 2

for ( int i = 1; i <= n; i++)

Trang 21

// sai so @[k] = e[k] * out2[k] * (1 - out2[k])

for ( int i = 1; i <= n; i++)

Trang 22

{

for ( int j = 1; j <= m; j++) {

b2[k] += deltaq2[j, k] / m; }

}

Ngày đăng: 25/03/2014, 22:18

HÌNH ẢNH LIÊN QUAN

Hình 1.1. Neural 1 đầu vào - Báo cáo đồ án trí tuệ nhân tạo : xây dựng chương trình sử dụng MLP đa lớp để tìm đường phân lớp 2 tập điểm là các điểm trên không gian 2 chiều
Hình 1.1. Neural 1 đầu vào (Trang 3)
Hình 1.2. Hàm truyền Hard Limit - Báo cáo đồ án trí tuệ nhân tạo : xây dựng chương trình sử dụng MLP đa lớp để tìm đường phân lớp 2 tập điểm là các điểm trên không gian 2 chiều
Hình 1.2. Hàm truyền Hard Limit (Trang 4)
Hình 1.4. Hàm truyền Log-Sigmoid Một số hàm truyền khác thường sử dụng, xem bảng tóm lược các hàm truyền - Báo cáo đồ án trí tuệ nhân tạo : xây dựng chương trình sử dụng MLP đa lớp để tìm đường phân lớp 2 tập điểm là các điểm trên không gian 2 chiều
Hình 1.4. Hàm truyền Log-Sigmoid Một số hàm truyền khác thường sử dụng, xem bảng tóm lược các hàm truyền (Trang 5)
Bảng 1.5 Các hàm truyền - Báo cáo đồ án trí tuệ nhân tạo : xây dựng chương trình sử dụng MLP đa lớp để tìm đường phân lớp 2 tập điểm là các điểm trên không gian 2 chiều
Bảng 1.5 Các hàm truyền (Trang 6)
Hình 1.7 Neural R đầu vào, kí hiệu tắt - Báo cáo đồ án trí tuệ nhân tạo : xây dựng chương trình sử dụng MLP đa lớp để tìm đường phân lớp 2 tập điểm là các điểm trên không gian 2 chiều
Hình 1.7 Neural R đầu vào, kí hiệu tắt (Trang 7)
Hình 1.6 Neural nhiều đầu vào - Báo cáo đồ án trí tuệ nhân tạo : xây dựng chương trình sử dụng MLP đa lớp để tìm đường phân lớp 2 tập điểm là các điểm trên không gian 2 chiều
Hình 1.6 Neural nhiều đầu vào (Trang 7)
Hình 1.9. Lớp S Neural, kí hiệu tắt - Báo cáo đồ án trí tuệ nhân tạo : xây dựng chương trình sử dụng MLP đa lớp để tìm đường phân lớp 2 tập điểm là các điểm trên không gian 2 chiều
Hình 1.9. Lớp S Neural, kí hiệu tắt (Trang 10)
Hình 1.10 Mạng 3 lớp - Báo cáo đồ án trí tuệ nhân tạo : xây dựng chương trình sử dụng MLP đa lớp để tìm đường phân lớp 2 tập điểm là các điểm trên không gian 2 chiều
Hình 1.10 Mạng 3 lớp (Trang 11)
Hình 1.13 Mạng lan truyền ngược - Báo cáo đồ án trí tuệ nhân tạo : xây dựng chương trình sử dụng MLP đa lớp để tìm đường phân lớp 2 tập điểm là các điểm trên không gian 2 chiều
Hình 1.13 Mạng lan truyền ngược (Trang 16)

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