3. Học không giám sát
(Unsupervised Learning)
Phân nhóm và giảm chiều: phân nhóm theo k
trung bình, phân nhóm theo cấu trúc, phân tích thành phần chính, SVD.
Làm thế nào bạn
tìm được cấu trúc bên dưới một tập dữ liệu? Bạn tổng hợp và nhóm nó thế nào để
hiệu quả nhất? Làm sao bạn biểu diễn dữ liệu dưới dạng nén một cách hiệu quả?
Đó là những mục tiêu của học không giám sát, gọi là “không giám sát” vì bạn bắt
đầu với dữ liệu không được gán nhãn (không có Y).
Có 2 loại học
không giám sát chúng ta sẽ khám phá, chúng đều phân dữ liệu thành các nhóm dựa
theo sự tương đồng và giảm chiều để nén dữ liệu trong khi vẫn duy trì được cấu
trúc và tính hữu dụng của nó.
Ví dụ về chỗ các phương pháp học không giám
sát có thể hữu ích:
-
Nền tảng
quảng cáo phân đoạn dân số Mỹ thành các nhóm nhỏ hơn dựa trên nhân khẩu học
tương đồng và thói quen mua sắm, nhờ đó các nhà quảng cáo có thể đạt được mục
tiêu thị trường bằng các quảng cáo phù hợp.
-
Airbnb
phân nhóm các danh sách giá nhà của họ theo hàng xóm, nhờ vậy người dùng có thể
tìm được các danh sách dễ dàng hơn.
-
Đội ngũ
khoa học dữ liệu giảm số chiều trong một tập dữ liệu lớn để đơn giản việc mô
hình hóa và giảm kích thước file.
Ngược lại với học
có giám sát, không phải lúc nào cũng dễ dàng tìm được các phép đo để giải thuật
học không giám sát làm việc tốt. “Hiệu quả” thường mang tính chủ quan và nằm trong
một lĩnh vực cụ thể.
3.1. Phân nhóm (Clustering)
Một ví dụ thú vị
về phân nhóm trong thế giới thực là tiếp thị hệ thống phân nhóm các giai đoạn sống
của nhà cung cấp dữ liệu Acxiom là Personicx. Dịch vụ này phân đoạn dư liệu các
hộ gia đình Mỹ thành 70 nhóm tách biệt nằm trong 21 nhóm tuổi đời thường được
các nhà quảng cáo sử dụng khi nhắm đến các quảng cáo Facebook, quảng cáo hình ảnh,
các chiến dịch dùng thư gửi trực tiếp…
Một kiểu phân nhóm nhân khẩu Personicx
Báo cáo của họ
nhận thấy rằng họ dùng phương pháp phân nhóm các trọng tâm và phân tích thành
phần chính (PCA), cả hai kỹ thuật đều sẽ được đề cập tới trong phần này.
Bạn có thể tưởng
tượng cách truy cập vào các cụm nhóm này sẽ cực kỳ có ích cho các nhà quảng cáo
đang muốn (1) thấu hiểu các vấn đề cơ bản của các khách hàng hiện tại và (2) dùng
quảng cáo một cách hiệu quả khi nhắm vào các khách hàng mới tiềm năng dựa trên
nhân khẩu học phù hợp, các mối quan tâm và phong cách sống.
Nhóm của tôi là gì?
Nhóm #24: Xây dựng sự nghiệp
Những người độc
thân của nhóm Xây dựng sự nghiệp đều trẻ tuổi, nhưng có thu nhập tốt. Trong khi
vừa trả các khoản vay thời còn đi học, họ cũng đã bắt đầu tiết kiệm và đầu tư.
Họ thích các cửa hàng hợp thời phục vụ lứa tuổi, thu nhập và khát vọng của họ,
như Express, H&M và Sephora. Họ thích công nghệ mới, đọc tạp chí trên thiết
bị di động. Họ thường tới các cửa hàng của Apple. Họ dùng Internet một cách rộng
rãi cho tin tức giải trí, âm nhạc, podcast và các loại dịch vụ. Thể thao cũng
quan trọng, như một fan hâm mộ hoặc một thành viên. Họ nghe bình luận bóng đá,
xem MMA mà vẫn vui vẻ trượt tuyết hay chơi khúc côn cầu.
Bạn có thể thực
sự tìm ra mình thuộc nhóm nào chỉ bằng cách trả lời vài câu hỏi đơn giản trong
công cụ “What’s My Cluster?” của Acxiom.
Giờ chúng ta sẽ
đi vào các phương pháp phân nhóm để phát triển trực giác về cách thức các
phương pháp này hoạt động.
Phân nhóm theo k trung bình
“Và k chiếc nhẫn được trao cho cuộc đấu của
các Trọng Tâm, những kẻ đang khao khát quyền năng trên hết thảy mọi thứ.”
Mục đích của
phân nhóm là tạo ra các nhóm của các điểm dữ liệu trong đó các điểm ở những cụm
khác nhau thì không tương đồng còn các điểm trong một cụm thì tương đồng.
Với phương pháp
phân nhóm theo k trung bình, chúng ta sẽ phân nhóm các điểm dữ liệu thành k
nhóm. Một k càng lớn tạo ra các nhóm càng nhỏ và nhiều hạt hơn, còn k càng nhỏ
thì nhóm càng lớn và ít hạt.
Đầu ra của thuật
toán có thể là một tập các “nhãn” gán cho mỗi điểm dữ liệu tới một trong k
nhóm. Trong phương pháp phân loại theo k trung bình, cách các nhóm được xác định
đều nhờ tạo ra một trọng tâm cho mỗi nhóm. Trọng tâm giống như trái tim của
nhóm, chúng “bắt” các điểm gần nhất quanh mình và đưa chúng vào một cụm.
Hãy nghĩ về những
thứ này như những người xuất hiện trong bữa tiệc rồi nhanh chóng thành trung
tâm của sự chú ý vì họ quá thu hút. Nếu chỉ có 1 người như thế, mọi người sẽ tập
trung xung quanh; nhưng nếu có nhiều người như thế, nhiều trung tâm hoạt động nhỏ
hơn sẽ hình thành.
Đây là các bước của phương pháp phân nhóm
theo k trung bình:
1.
Xác định
k trọng tâm. Hãy bắt đầu khởi tạo chúng ngẫu nhiên (cũng có nhiều giải thuật rất
hay để khởi tạo các trọng tâm một cách hiệu quả).
2.
Tìm trọng
tâm gần nhất và cập nhật thao tác gán vào cụm. Hãy gán mỗi điểm dữ liệu vào một
trong k cụm. Mỗi điểm dữ liệu được gán với cụm của trọng tâm gần nhất. Ở đây,
thước đo cho sự “gần” là một siêu tham số - thường là khoảng cách Euclid.
3.
Di
chuyển các trọng tâm vào trung tâm của các cụm. Ví trí mới của mỗi trọng tâm được
tính theo vị trí trung bình của toàn bộ các điểm trong cụm của nó.
Hãy lặp lại bước 2 và 3 cho tới khi trọng
tâm dừng di chuyển.
Nói ngắn gọn, đó
chính là cách phương pháp phân nhóm theo k trung bình hoạt động! Hãy kiểm tra
tính trực quan của giải thuật – hãy đọc nó như một câu chuyện hài. Mỗi điểm
trong mặt phẳng được tô màu theo trọng tâm gần nhất tại mỗi thời điểm. Bạn sẽ
nhận ra rằng các trọng tâm (các hình tròn xanh đỏ có kích cỡ lớn hơn) khởi đầu
rất ngẫu nhiên, sau đó sẽ nhanh chóng điều chỉnh để tạo ra các nhóm tương ứng của
riêng chúng.
Một ứng dụng
trong thế giới thực khác của phương pháp phân nhóm k trung bình là phân loại
các chữ số viết tay. Giả sử chúng ta có những bức ảnh của các chữ số dưới dạng
một vector chứa độ sáng theo pixel rất dài. Giả sử các bức ảnh đều là đen trắng
và có kích thước 64x64 pixel. Mỗi pixel biểu diễn một chiều. Vì thế không gian
các bức ảnh này sống có 64x64=4.096 chiều. Trong thế giới 4.096 chiều này,
phương pháp phân nhóm k trung bình cho phép chúng ta nhóm các bức ảnh gần nhau
và giả sử chúng biểu diễn cùng một chữ số - điều này có thể đạt được dễ dàng nhờ
thuật toán nhận dạng chữ số.
Phân nhóm theo cấu trúc
“Hãy biến một triệu lựa chọn thành 7 lựa chọn.
Hoặc 5. Hoặc 20? Meh, chúng ta sẽ quyết định sau.”
Phân nhóm theo cấu
trúc cũng tương tự phân nhóm thông thường, ngoại trừ việc bạn có ý thức nhắm tới
xây dựng một cấu trúc cho các nhóm. Điều này có thể có ích khi bạn muốn có sự
linh hoạt khi quyết định mình cần bao nhiêu nhóm. Ví dụ, hãy tưởng tượng cần phân nhóm các thứ trong cái chợ trực tuyến
như Etsy hay Amazon. Trên trang chủ, bạn muốn một số danh mục lớn của các thứ để
tìm kiếm đơn giản hơn, như khi bạn đi vào từng danh mục lớn một cách chi tiết,
bạn sẽ làm tăng độ chi tiết, ví dụ như tạo thêm các cụm nhóm nữa để phân nhóm
các thứ trong đó.
Trên khía cạnh đầu
ra của thuật toán, cùng với việc gán các nhóm, bạn cũng có thể xây dựng một cái
cây đẹp để nói cho bạn biết về cấu trúc giữa các nhóm. Sau đó bạn có thể chọn
ra một số nhóm bạn muốn trên cái cây này.
Đây là các bước của phương pháp phân nhóm
theo cấu trúc:
1.
Bắt đầu
với N nhóm, một nhóm cho một điển dữ liệu.
2.
Trộn
hai nhóm gần nhau nhất lại với nhau. Giờ bạn có N-1 nhóm.
3.
Tính
toán lại khoảng cách giữa các nhóm. Có vài cách để làm điều này. Một cách trong
số đó (gọi là phân nhóm theo liên kết trung bình) sẽ coi khoảng cách giữa 2
nhóm là khoảng cách trung bình giữa toàn bộ các thành viên liên quan của nó.
4.
Lặp lại
bước 2 và 3 cho tới khi bạn nhận được 1 nhóm của N điểm dữ liệu. Bạn sẽ thu được
một cái cây (còn gọi là sơ đồ hình cây) như dưới đây.
5.
Nhặt
ra một số nhóm và vẽ một đường ngang trong sơ đồ hình cây. Ví dụ, nếu bạn muốn
k=2 nhóm, bạn nên vẽ một đường ngang quanh “khoảng cách =20000”. Bạn sẽ có một
nhóm với các điểm dữ liệu 8,9,11,16 và một nhóm chứa các điểm dữ liệu còn lại.
Nói chung, số nhóm bạn nhận được là số điểm giao nhau giữa đường ngang của bạn
với các đường dọc trong cấu trúc cây kia.
Nguồn: Solver.com
3.2. Giảm chiều (Dimensionality Reduction)
“Nó không gia tăng hằng ngày, mà giảm hằng
ngày. Giảm dần dần những thứ không cần thiết.” - Bruce Lee
Giảm chiều trông
rất giống nén. Đó là việc cố gắng giảm độ phức tạp của dữ liệu trong khi vẫn giữ
được càng nhiều cấu trúc tương ứng càng tốt. Nếu bạn chụp một bức ảnh 128x128x3
pixel (dài x rộng x giá trị RGB), ta sẽ được một dữ liệu có 49.152 chiều. Nếu bạn
có thể giảm số chiều trong không gian bức ảnh này tồn tại mà không phá hủy quá
nhiều nội dung có nghĩa của nó, thì bạn đã hoàn thành tốt công việc giảm chiều.
Chúng ta hãy
nhìn sâu vào 2 kỹ thuật phổ biến của phương pháp này trong thực tế: phân tích
thành phần chính và SVD.
Phân tích thành phần chính (Principal Component Analysis – PCA)
Trước tiên, nhắc
lại một chút về đại số tuyến tính – không gian và cơ số.
Bạn hẳn đã quen
thuộc với trục tọa độ có gốc O(0,0) và 2 vector gốc i(1,0), j(0,1). Nó cho phép
bạn chọn một gốc hoàn toàn khác mà phép toán vẫn làm việc đúng. Ví dụ, bạn có
thể giữ O làm gốc và chọn 2 vector gốc là i’(2,1) và j’(1,2). Nếu bạn kiên nhẫn,
bạn sẽ dần tự tin khi biết điểm được gán nhãn (2,2) trong hệ tọa độ i’,j’ chính
là điểm được gán nhãn (6,6) trong hệ tọa độ i,j.
Lập bằng cách sử dụng “hệ tọa độ Đề các
tương tác” của Mathisfun
Điều này có
nghĩa là chúng ta có thể thay đổi gốc của một không gian. Giờ hãy tưởng tượng với
không gian có số chiều cao hơn nhiều. Chẳng hạn, 50K chiều. Bạn có thể lựa chọn
một gốc cho không gian đó, rồi chỉ chọn 200 vector đặc trưng nhất từ gốc. Các
vector gốc này gọi là các thành phần chính (principal component), và tập con mà
bạn vừa chọn tạo thành một không gian mới nhỏ hơn về số chiều so với không gian
gốc nhưng vẫn duy trì được độ phức tạp dữ liệu nhiều nhất có thể.
Để lựa chọn các
thành phần chính đặc trưng nhất này, chúng ta hãy nhìn vào lượng biến thiên dữ
liệu nhiều bao nhiêu mà chúng có và khi sắp xếp chúng theo một thước đo.
Cách khác để
nghĩ về vấn đề này là PCA đang gán lại không gian trong đó dữ liệu hiện thời của
chúng ta sẽ được làm cho dễ hiểu hơn. Chiều chuyển đổi nhỏ hơn số chiều gốc.
Bằng cách chỉ sử
dụng một số chiều nhất định ban đầu của không gian đã được gán lại, chúng ta có
thể bắt đầu thu hoạch được một số hiểu biết về tổ chức của tập dữ liệu. Đây là
một việc rất hứa hẹn của việc giảm chiều: giảm độ phức tạp (là số chiều trong
trường hợp này) trong khi vẫn đảm bảo duy trì được cấu trúc (độ biến thiên). Có
một bài viết rất thú vị của Samer về việc dùng PCA (và ánh xạ khuếch tán, cùng
các kỹ thuật khác) để cố gắng làm cho vấn đề Wikileaks trở nên dễ hiểu hơn.
Singular Value Decomposition (SVD)
Hãy biểu diễn dữ
liệu của chúng ta giống như một ma trận lớn A = m x n. SVD là phương pháp tính
toán cho phép chúng ta phân tích ma trận lớn này thành tích của 3 ma trận nhỏ
hơn (U=m x r, ma trận đường chéo Ʃ=r x r, và V=r x n trong đó r là một số tự
nhiên nhỏ).
Đây là mô phỏng
đồ họa của tích số mà chúng ta bắt đầu tìm kiếm:
Giá trị của ma
trận đường chéo Ʃ = r * r gọi là các giá trị đơn. Điều thú vị của chúng là những
giá trị đơn này có thể được dùng để nén ma trận gốc. Nếu bạn hạ 20% nhỏ nhất của
các giá trị đơn này và các cột đi kèm trong ma trận U và V, bạn sẽ tiết kiệm được
1 bit không gian mà vẫn đảm bảo biểu diễn hợp lệ ma trận ban đầu.
Để khám phá điều
này chính xác là gì, hãy làm việc với bức ảnh một chú chó:
Chúng ta sẽ sử dụng
đoạn code viết trong bài của Andrew Gibiansky về SVD. Đầu tiên, chúng ta thấy nếu
sắp xếp các giá trị đơn (các giá trị của ma trận Ʃ) theo cường độ, 50 giá trị
đơn đầu tiên chứa 85% độ lớn của toàn bộ ma trận Ʃ.
Chúng ta có thể
sử dụng điều này để loại bỏ 250 giá trị tiếp theo của sigma (ví dụ, đặt chúng bằng
0) và chỉ giữ một phiên bản “hạng 50” của bức ảnh chú chó. Ở đây ta đã tạo một
chú chó hạng 200, 100, 50, 30, 20, 10 và
3. Thoạt tiên có lẽ bức ảnh trông nhỏ hơn, nhưng rõ ràng chú chó hạng 30 vẫn tốt.
Giờ hãy xem ta có thể nén được bao nhiêu với chú chó này. Ma trận ảnh gốc là
305*275=83.875 giá trị. Chú chó hạng 30 là 305*30+30+30*275=17.430 – ít hơn gần
5 lần về số lượng giá trị mà chỉ mất mát chất lượng ảnh rất nhỏ. Lý do của việc
tính toán trên là chúng ta cũng loại bỏ các phần trong ma trận U và V đã được
nhân với 0 khi thực hiện phép tính UƩ’V (trong đó Ʃ’ là phiên bản sửa đổi của
Ʃ, chỉ có 30 giá trị đầu tiên trong đó).
Học không giám
sát thường được dùng để sơ chế dữ liệu. Thông thường điều này có nghĩa là nén
nó theo một cách nào đó mà vẫn giữ được ý nghĩa (như PCA hay SVD) trước khi đưa
nó vào một mạng neuron sâu hoặc một thuật toán học có giám sát khác.
Thế là xong!
Giờ bạn đã kết thúc phần này, bạn vừa thu được
một chuyện khôi hài khủng khiếp, chưa bao giờ được nhắc lại, về học không giám
sát. Nó đây…
Nhân
vật #1: Nhưng liệu Y có khi nào cần dùng tới không giám sát nhỉ?
Nhân
vật #2: Y? Không có Y.
Kế tiếp là phần 4: Các mạng neuron và học sâu!
Các tài liệu thực hành và tìm hiểu
sâu hơn
3a –
phân nhóm theo k trung bình
Dạo chơi lòng vòng với các kiểu trực quan của
phân nhóm để xây dựng trực giác xem cách các giải thuật làm việc ra sao. Sau đó
nhìn vào việc triển khai phương pháp phân nhóm theo k trung bình với các chữ số
viết tay và hướng dẫn đi kèm.
3b –
SVD
Nguồn tham khảo hay về SVD, không có gì tốt
hơn bài viết của Andrew Gibiansky.
Vishal Maini
Samer Sabri
"""Cùng tìm hiểu thêm về machine learning nhé!
Trả lờiXóamachine learning là gì"""