Chủ Nhật, 19 tháng 11, 2017

Machine Learning cho mọi người - 4: Các mạng neuron & Học sâu (Deep Learning)



4. Các mạng neuron & Học sâu
(Deep Learning)
Các mạng neuron hoạt động ở đâu, tại sao, và sâu đến mức nào. Mô phỏng lấy cảm hứng từ bộ não. Các mạng neuron xoắn (CNN) và các mạng neuron tái phát (RNN), các ứng dụng thế giới thực.

Với học sâu, chúng ta sẽ vẫn học một hàm f liên kết đầu vào X với đầu ra Y với sai số tối thiểu trên dữ liệu kiểm thử, giống như chúng ta đã làm ở các phần trước. Hãy nhớ “phát biểu bài toán” ban đầu của chúng ta từ phần 2.1 về học có giám sát:

Y = f(X) + ϵ
Đào tạo: máy học f từ dữ liệu đào tạo đã gán nhãn
Kiểm thử: máy tiên đoán Y từ dữ liệu kiểm thử chưa gán nhãn

Thế giới thực rất hỗn độn, vì thế đôi khi f rất phức tạp. Trong các bài toán về ngôn ngữ tự nhiên, kích cỡ từ vựng lớn có nghĩa là nhiều đặc điểm. Các bài toán về thị giác thường chứa nhiều thông tin thị giác về các pixel. Tham gia trò chơi đòi hỏi ra quyết định dựa trên các ngữ cảnh phức tạp với nhiều khả năng có thể xảy ra trong tương lai. Các kỹ thuật máy học mà chúng ta đã tìm hiểu làm việc tốt khi dữ liệu của chúng ta không phức tạp đến phát điên, dù cũng không rõ cách thức chúng khái quát hóa các ngữ cảnh kiểu đó.

Học sâu (deep learning) thực sự rất giỏi trong việc học hàm f, đặc biệt trong những tình huống dữ liệu phức tạp. Thực tế, các mạng neuron nhân tạo thường được gọi là các bộ xấp xỉ hàm tổng quan, vì chúng có khả năng học bất kỳ hàm nào, bất kể nó có uốn éo thế nào, chỉ với một lớp ẩn đơn.

Hãy nhìn vào bài toán phân loại ảnh. Chúng ta lấy một bức ảnh làm đầu vào, và đầu ra là một lớp nào đó (ví dụ: chó, mèo, xe ô tô…)

Về mặt đồ họa, mạng neuron sâu sẽ giải quyết việc phân loại ảnh kiểu này:


Hình ảnh từ bài post “Deep Learning Overview” của Jeff Clune trên YouTube

Nhưng thực tế, đó là một lượng tính toán khổng lồ với hàng triệu thuật ngữ và rất nhiều biến số. Đầu vào X là một bức ảnh theo thang độ xám được biểu diễn bằng một ma trận độ sáng của pixel w-by-h. Đầu ra Y là một vector chứa các xác suất xuất hiện của các lớp có thể xảy ra. Có nghĩa là chúng ta sẽ có đầu ra là khả năng xuất hiện của mỗi lớp có thể là nhãn đúng của bức ảnh. Và các lớp ở giữa chỉ đang làm phép nhân ma trận bằng cách tính tổng activations x weights của các phép chuyển đổi phi tuyến (các hàm activation) sau khi mỗi lớp ẩn cho phép mạng học được một hàm phi tuyến.

Thật khó mà tin nổi, bạn có thể dùng đạo hàm giảm (gradient descent) theo chính xác cùng một kiểu với hồi qui tuyến tính trong phần 2.1 để đào tạo các tham số này theo cách tối thiểu hóa sai số. Như thế, với rất nhiều ví dụ và nhiều đạo hàm giảm, mô hình có thể học được cách phân loại các bức ảnh động vật chính xác. Và vỏ hạt trong vỏ hạt, kiểu đó gọi là “học sâu”.

Học sâu vận hành tốt ở chỗ nào?

Các mạng neuron nhân tạo thực ra đã xuất hiện đâu đó từ khá lâu. Trong lịch sử, ứng dụng của chúng được gọi là cybernetics (điều khiển học – xuất hiện trong những năm 1940-1960), rồi connectionism (liên kết học – những năm 1980-1990), sau đó theo trào lưu gọi là deep learning (học sâu – từ năm 2006) khi các mạng neuron bắt đầu trở nên “sâu hơn” (theo Goodfellow et al, 2016). Nhưng chỉ gần đây chúng ta mới thực sự bắt đầu đi sơ qua bề mặt tiềm năng phong phú của chúng.

Như Andrej Karpathy (Giám đốc AI tại Tesla, người mà chúng tôi coi là Pháp sư của Học sâu) đã mô tả, nói chung có “4 yếu tố riêng biệt tạo nên AI:
1.      Tính toán (thời gian đầu có Định luật Moore, GPU, ASIC)
2.      Dữ liệu (theo dạng thức đẹp đẽ, nó ở đâu đó trên internet – ví dụ ImageNet)
3.      Các giải thuật (các nghiên cứu và ý tưởng, ví dụ như cột chống nghiêng, CNN, LSTM)
4.      Cơ sở hạ tầng (phần mềm bên dưới – Linux, TCP/IP, Git, ROS, PR2, AWS, AMT, TensorFlow…) (Karpathy, 2016)

Trong khoảng hơn một thập kỷ trước, tiềm năng phong phú của học sâu được mở khóa nhờ các tiến bộ của (1) và (2), tới lượt nó đã dẫn tới những đột phá trong (3) và (4) – và cứ thế chu trình lại tiếp tục theo cấp số nhân, trở nên con người hơn là việc chỉ tập trung vào các mặt trận nghiên cứu về học sâu (tức chỉ nghĩ về những gì bạn sẽ làm ngay bây giờ thôi!)


Hình minh họa của NVIDIA, nhà sản xuất bộ xử lí đồ họa (GPU) hàng đầu, các GPU vốn dĩ được xây dựng để chơi game nhưng đã biến đổi trở nên cực kỳ phù hợp với loại hình tính toán song song mà các mạng neuron sâu đòi hỏi.

Trong phần còn lại của phần này, chúng tôi sẽ cung cấp một số nền tảng cơ bản từ sinh học và thống kê để giải thích chuyện gì xảy ra bên trong các mạng neuron, sau đó sẽ nói tới vài ứng dụng thú vị của học sâu. Cuối cùng, chúng ta sẽ kết nối tới một số tài nguyên để bạn có thể tự sử dụng học sâu, ngay cả khi bạn đang ngồi trên giường với bộ đồ ngủ và chiếc laptop, vẫn nhanh chóng đạt được hiệu năng lớn hơn mức con người bình thường khi giải quyết một vài kiểu bài toán nhất định.

Lấy cảm hứng từ bộ não (hay chỉ là một kiểu thống kê chăng?) – điều gì diễn ra bên trong các mạng neuron

Các neuron, học theo đặc điểm, và các lớp trừu tượng

Khi bạn đọc những từ này, bạn sẽ không kiểm tra từng chữ cái trong mỗi từ, hoặc mỗi pixel tạo nên mỗi chữ cái, mới có thể hiểu được nghĩa của các từ. bạn đang trừu tượng hóa từ các chi tiết và nhóm các thứ theo những khái niệm mức cao hơn: các từ, các cụm từ, các câu, các đoạn văn.

Khả năng nyà kểim tra ccá đặc đểim cấp độ coa hnơ, cho phpé bnạ hiuể điuề gì đagn xảy ra trnog cuâ nyà khnôg qáu kóh khnă.

Điều tương tự cũng diễn ra với thị giác, không chỉ ở con người mà cả ở hệ thống thị giác của động vật nói chung.

Bộ não được tạo thành từ các neuron. Neuron bắn ra các tín hiệu điện tới các neuron khác sau khi đã bị “kích hoạt” đủ. Các neuron này đều rất dẻo dai, khi một tín hiệu từ các neuron khác tới nó lớn bao nhiêu sẽ làm tăng mức độ bị kích hoạt của neuron lên bấy nhiêu (tức là khối lượng liên kết các neuron với nhau có thể đào tạo được để tạo ra các liên kết neuron hữu ích hơn, giống như các tham số trong hồi qui tuyến tính có thể được đào tạo để cải thiện ánh xạ từ đầu vào tới đầu ra).


Minh họa từng khía cạnh của các neuron sinh học và nhân tạo, dựa trên CS231n của Stanford. Tính tương tự này không thể thực hiện theo nghĩa đen – các neuron sinh học có thể làm những việc mà các neuron nhân tạo không thể, và ngược lại – nhưng hiểu được việc lấy cảm hứng từ sinh học cũng rất có ích. Hãy xem mô tả của Wikipedia về các neuron sinh học so với các neuron nhân tạo để biết thêm chi tiết.

Các mạng neuron sinh học của chúng ta được sắp xếp theo kiểu phân cấp, vì thế các neuron nhất định sẽ làm công việc phát hiện không chỉ những đặc điểm cực kỳ cụ thể của thế giới quanh ta mà cả những đặc điểm trừu tượng hơn nhiều, ví dụ các mẫu hoặc các phân nhóm của những đặc điểm ở cấp độ thấp hơn nhiều. Chẳng hạn, vùng mặt dạng nấm trong hệ thống thị giác của con người được chuyên biệt hóa cho nhận dạng khuôn mặt.


Ảnh trên: Minh họa việc học các đặc điểm trừu tượng tăng dần qua NVIDIA. Ảnh dưới: sơ đồ cách thức một mạng neuron nhân tạo lấy đầu vào là các pixel thô, phát triển các “neuron” trung gian để phát hiện các đặc điểm cấp độ cao hơn (ví dụ sự hiện diện của cái mũi), và kết hợp các đầu ra tạo thành kết quả cuối cùng. Minh họa này từ Neural Networks and Deep Learning của Nielsen, 2017.

Cấu trúc phân cấp này do các mạng neuron sinh học thể hiện, đã được phát hiện trong những năm 1950 khi 2 nhà nghiên cứu David Hubel và Torsten Wiesel đang nghiên cứu về các neuron trong vỏ não thị giác của loài mèo. Họ không thể quan sát sự kích hoạt neuron sau khi cho con mèo tiếp xúc với nhiều kích thích: các đốm đen, các đốm sáng, vẫy tay, và thậm chí các những bức hình phụ nữ trên tạp chí. Nhưng trong khi họ đang thất vọng, ngay lúc họ rời một slide khỏi máy chiếu ở góc chéo, họ nhận thấy một hoạt động thần kinh! Họ phát hiện ra rằng các đường chéo ở một góc độ rất đặc biệt đã khiến một số neuron nhất định bị kích hoạt.

Điều này có ý nghĩa cách mạng vì các môi trường trong tự nhiên nói chung đều lắm nhiễu và ngẫu nhiên (hãy tưởng tượng về một cánh đồng đầy cỏ dại hoặc một vùng đất toàn sỏi đá). Vì thế khi loài mèo trong tự nhiên nhận thức được một “cạnh”, ví dụ một đường thẳng nổi bật tương phản với nền, điều này có thể là chỉ dấu cho một đối tượng hoặc một tạo vật đang nằm trong vùng thị giác. Khi một nhóm neuron cạnh nào đó bị kích hoạt, các kích hoạt này sẽ kết hợp để tạo ra một kích hoạt còn trừu tượng hơn nữa, và cứ thế tiếp diễn, cho tới khi sự trừu tượng cuối cùng là một khái niệm có nghĩa, chẳng hạn như “con chim” hay “con sói”.

Ý tưởng phía sau một mạng neuron cấp độ sâu chính là bắt chước để tạo thành một hệ thống tương tự bằng các lớp neuron nhân tạo.

Tại sao các mô hình tuyến tính không hoạt động được

Để hiểu được khóa học tuyệt vời về deep learning của Stanford, trong cuốn CS231n: Convolutional Neural Networks and Visual Recognition, hãy tưởng tượng chúng ta đang muốn đào tạo một mạng neuron biết phân loại các bức ảnh theo đúng nhãn: [“máy bay”, “ô tô”, “chim”, “mèo”, “nai”, “chó”, “ếch”, “ngựa”, “cừu”, “xe tải”].

Có một cách là xây dựng một “mẫu”, hay một bức ảnh trung bình của mỗi lớp trong các bức ảnh được dùng làm ví dụ đào tạo, sau đó sử dụng thuật toán các hàng xóm gần nhất trong khi kiểm thử để đo khoảng cách giữa các giá trị pixel của mỗi ảnh chưa được phân loại, theo mỗi mẫu. Cách này không có các lớp trừu tượng. Đó là một mô hình tuyến tính kết hợp toàn bộ các chiều khác nhau của mỗi kiểu ảnh vào thành một hình dạng mập mờ sau khi được tính trung bình.

Ví dụ, người ta có thể lấy tất cả các loại xe ô tô – không cần biết chúng đang quay trái, phải, ở giữa thế nào và không quan tâm tới màu sắc của chúng – rồi tính trung bình toàn bộ. Mẫu thu được trông rất lờ mờ và không rõ ràng.


Ví dụ trong tài liệu từ Stanford CS231n: Convolutional Neural Networks and Visual Recognition, bài giảng số 2.

Dễ nhận thấy mẫu cho loài ngựa ở trên đã xuất hiện tới 2 cái đầu. Cách này không thực sự giúp gì cho chúng ta: chúng ta muốn có khả năng phát hiện được con ngựa đang quay mặt phải hay đang quay mặt trái rõ ràng, rồi nếu có một đặc điểm nào trong số đó được phát hiện, ta sẽ nói ta đang thấy một con ngựa. Sự linh hoạt này được các mạng neuron mức độ sâu cung cấp, mà chúng ta sẽ thấy ở phần sau.

Các mạng neuron mức sâu định hướng bài toán phân loại ảnh theo cách sử dụng các lớp trừu tượng

Nhắc lại những gì chúng tôi đã giải thích trước đó trong phần này: lớp đầu vao sẽ lấy độ sáng các pixel của bức ảnh ở dạng thô. Lớp cuối cùng sẽ là một vector đầu ra chứa các xác suất của các lớp có thể gán nhãn cho bức ảnh (ví dụ xác suất để bức ảnh là “mèo”, “ô tô”, “ngựa”…)

Nhưng thay vị học một mô hình tuyến tính đơn giản thể hiện quan hệ đầu vào và đầu ra, chúng ta sẽ xây dựng các lớp ẩn trung gian trong mạng để học dần dần các đặc điểm ngày một trừu tượng, điều đó cho phép chúng ta không làm mất sắc thái đối với dữ liệu phức tạp.


Nguồn: Analytics Vidhya

Chúng ta vừa mô tả rằng não động vật có thể phát hiện được các đặc điểm trừu tượng, các neuron nhân tạo trong các lớp ẩn cũng thế, có thể học để phát hiện các khái niệm trừu tượng – bất kể khái niệm nào, miễn sao hữu ích nhất để thu được thông tin đầu ra nhiều nhất và tối thiểu hóa sai số đảm bảo tính chính xác của đầu ra (đây là một thể hiện của kiểu học không giám sát xuất hiện trong mạng neuron).

Điều đó đi kèm với chi phí cho khả năng có thể giải thích được của mô hình, vì khi bạn thêm vào càng nhiều lớp ẩn, các neuron sẽ bắt đầu biểu diễn theo hướng ngày càng trừu tượng hơn, thậm chí các đặc điểm hoàn toàn không thể hiểu nổi – tới lúc bạn có lẽ đã nghe tới trong học sâu, người ta gọi là “tối ưu hộp đen” (black box optimization), tức bạn cơ bản chỉ ngẫu nhiên đưa vào cái gì đó rồi xem nó cho ra thứ gì, mà không cần thực sự phải hiểu chuyện gì xảy ra bên trong.

Hồi qui tuyến tính có thể giải thích được vì bạn đã quyết định đặc điểm nào sẽ có trong mô hình. Các mạng neuron mức sâu khó mà giải thích nổi vì các đặc điểm được học và không được giải thích ở đâu đó bằng tiếng Anh, tiếng Pháp hay tiếng nào đó. Toàn bộ đều nằm trong sự tưởng tượng của chính cỗ máy.

Một số khái niệm sâu hơn cần chú ý
-          Các gói phần mềm về học sâu: bạn hầu như không cần làm toàn bộ các phần của mạng neuron từ đầu vì nhiều thư viện và công cụ sẵn có đã và đang giúp cho việc xây dựng học sâu trở nên dễ dàng hơn. Có thể kể tới: TensorFlow, Caffe, Torch, Theano…
-          Các mạng neuron xoắn (CNN): CNN được thiết kế đặc biệt dành cho việc dùng các hình ảnh làm đầu vào, rất hiệu quả với các tác vụ liên quan tới thị giác máy tính. Chúng cũng hữu dụng với học sâu tăng cường (deep reinforcement learning). CNN đặc biệt lấy cảm hứng từ cách thức bộ não thị giác động vật làm việc, và chúng là trọng tâm của các bài giảng học sâu mà chúng ta vừa tham khảo, tài liệu CS231n của Stanford.
-          Các mạng neuron tái phát (RNN): RNN dùng bộ nhớ built-in và rất phù hợp với các bài toán ngôn ngữ. Chúng cũng quan trọng trong học tăng cường (reinforcement learning) vì chúng cho phép agent theo dõi kịp thời mọi thứ đang ở đâu và chuyện gì xảy ra đã xảy ra theo thời gian, ngay cả khi các phần tử hoàn toàn không thể nhìn thấy được. Christopher Olah đã viết một bài đánh giá tuyệt vời về RNN và LSTM trong lĩnh vực các bài toán ngôn ngữ.
-          Học sâu tăng cường (deep reinforcement learning): đây là một trong những lĩnh vực thú vị nhất của nghiên cứu về deep learning, là trung tâm các thành tựu gần đây như OpenAI đánh bại 2 tay chơi Dota chuyên nghiệp, hay AlphaGo của DeepMind vượt qua con người trong trò Go (cờ vây). Chúng ta sẽ đào sâu hơn trong phần 5, nhưng về cơ bản, mục đích là ứng dụng mọi kỹ thuật vào bài toán dạy một agent tối đa hóa lợi ích. Lĩnh vực này có thể ứng dụng trong bất kỳ ngữ cảnh có tính ăn thua nào – từ các trò game trong thực tế như Counter Strike hay Pacman, tới xe tự lái, chứng khoán, hay tới đời thực và thế giới thực (hoàn toàn thực).

Các ứng dụng của học sâu

Học sâu đang định hình lại thế giới trong mọi khía cạnh ảo. Dưới đây là một số ví dụ về những thứ không thể tin nổi mà học sâu có thể làm…
·         Facebook đã đào tạo một mạng neuron tăng cường bằng bộ nhớ ngắn hạn để trả lời rất thông minh các câu hỏi về tình tiết trong tác phẩm Chúa tể của Những chiếc nhẫn.


Nghiên cứu từ FAIR (Facebook AI Research) sử dụng các mạng neuron mức sâu được tăng cường bộ nhớ ngắn hạn riêng biệt để trả lời các câu hỏi về câu chuyện Chúa tể của Những chiếc nhẫn. Đây là định nghĩa về sử thi.

·         Xe tự lái dùng học sâu cho các tác vụ thị giác như hiểu được tín hiệu trên đường, phát hiện làn đường, và nhận diện các chướng ngại vật.


Nguồn: Business Insider

·         Học sâu có thể dùng theo cách hài hước hơn như tạo ra các tác phẩm nghệ thuật. Một công cụ có tên Neural Style có thể băt chước phong cách của một nghệ sĩ nào đó cực kỳ ấn tượng và dùng điều đó để pha trộn tạo ra bức ảnh khác.

Phong cách trong tác phẩm Starry Night (đêm đầy sao) của Van Gogh được áp dụng vào bức ảnh khuôn viên đại học Stanford, bằng ứng dụng neural style của Justin Johnson. Tham khảo https://github.com/jcjohnson/neural-style

Các ví dụ đáng chú ý khác:
-          Tiên đoán hoạt tính sinh học cấp phân tử trong việc nghiên cứu chế tạo thuốc
-          Nhận dạng khuôn mặt và nhận dạng đối tượng để gắn thẻ cho ảnh và video
-          Tăng cường khả năng tìm kiếm của Google
-          Hiểu và tạo ra ngôn ngữ tự như, ví dụ Google Translate
-          Robot thám hiểm Sao Hỏa Curiosity tự động lựa chọn các mẫu đất đá có giá trị thí nghiệm dựa trên khả năng tự kiểm tra bằng thị giác…
Và còn nhiều, rất nhiều nữa.

Thế là đã xong!
Chúng ta không đi sâu vào cách tạo mạng neuron trong thực hành vì bạn có thể dễ dàng tự làm điều đó. Dưới đây là một số tài nguyên thú vị để bắt đầu:
-          Dạo chơi với kiến trúc của các mạng neuron để xem cấu hình khác nhau ảnh hưởng tới hiệu năng mạng thế nào với Neural Network Playground của Google.
-          Dậy và chạy thật nhanh với hướng dẫn này của Google: TensorFlow and Deep learning without a PhD. Phân loại chữ viết tay chính xác >99%, làm quen với TensorFlow, và học các khái niệm học sâu chỉ trong 3 giờ.
-          Sau đó, đi tìm hiểu ít nhất vài bải giảng trong cuốn tài liệu CS231n của Stanford và tự xây dựng một mạng neuron 2 lớp đầu tiên từ đầu để nắm vững các khái niệm trong bài viết.

Các tài nguyên mức độ sâu hơn
Học sâu là một lĩnh vực rộng. Theo đó, chúng tôi cũng đã dùng những tài nguyên tốt nhất tìm được cho chủ đề này, trong trường hợp bạn muốn tìm hiểu sâu hơn:
-          Deeplearning.ai: bài giảng mới về học sâu của Andrew Ng với giáo trình rất dễ hiểu.
-          CS231n: Convolutional Neural Networks for Visual Recognition: bài giảng về học sâu của Stanford. Một trong những tài liệu hay nhất chúng tôi từng thấy, với các bài giảng tuyệt vời và các bài toán minh họa tốt nhất.
-          Deep Learning & Neural Networks – có thể truy cập được nhưng rất nghiêm ngặt.
-          Deep Learning Book – cơ bản, nhiều kiến thức toán học
-          Fast.ai – ít lý thuyết, nhiều ứng dụng và mang tính hộp đen nhiều hơn
-          Xem câu trả lời của Greg Brockman (CTO của OpenAI) cho câu hỏi “What are the best ways to pick up Deep Learning skills as an engineer?” trên Quora.

Kế tiếp: đến lúc chơi vài game rồi!
Cuối cùng, nhưng cực kỳ chắc chắn rằng chưa phải kết thúc, là phần 5: Học tăng cường.



Vishal Maini
Samer Sabri

Thứ Bảy, 18 tháng 11, 2017

Machine Learning cho mọi người - 3: Học không giám sát (Unsupervised Learning)



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