Bài toán thuộc lĩnh vực học máy

Sau khi mình chia sẻ DLSS slides của bác Hugo Larochelle đã nhận được phản hồi tích cực. Những slides này là tư liệu tuyệt vời tổng hợp các bài toán hot nhất về ML và các kiến thức về neural network hiện đại [tính đến năm 2017]. Videos và slides của DLSS có tại đây

Tuy nhiên, mình nhận thấy đối với những bạn mới tiếp xúc với machine learning việc đọc slides chay sẽ gặp khó khăn. Trong bài này mình sẽ đi qua các slides về các bài toán trong machine learning và giải thích theo hiểu biết của mình. Đây vừa là một bài tập mình tự giao cho bản thân để cập nhật kiến thức, cũng mong là sẽ giúp ích cho các bạn.

Một tí background

Machine learning về cơ bản là dự đoán dựa vào dữ liệu. Bạn có một quan sát [observation] \[x\] [một câu văn, một bức ảnh, …] và bạn muốn dự đoán về một tính chất nào đó của quan sát này [ví dụ quan sát thấy một câu văn và muốn dự đoán câu văn này thể hiện cảm xúc vui hay buồn? quan sát thấy một bức ảnh về loài vật và muốn dự đoán con vật trong bức ảnh này là chó hay mèo?]. Nếu có hứng thú với machine learning có thể đọc quyển “Machine learning: mì, súp và công thức nấu của mình để làm quen.

Deep learning là một nhánh của machine learning với đặc điểm là sử dụng các model phi tuyến tính có chiều sâu để dự đoán. Neural network, nền tảng của deep learning, là một dạng model được lấy ý tưởng từ bộ não con người với nhiều lớp chồng lên nhau nhằm học được các khái niệm từ đơn giản đến phức tạp. Hiện tại, neural network đang nắm giữ hầu hết các kỉ lục trên các bài toán machine learning phổ thông, và là con đường phát triển của machine learning trong tương lai.

Machine learning có hai quá trình là train và test. Train là khi bạn huấn luyện model bằng một tập quan sát có sẵn. Bạn cho model nhìn thấy các quan sát trong tập này nhiều lần và dạy nó dự đoán những gì bạn muốn nó dự đoán. Sau khi train, bạn sẽ test xem model có thật sự “học” được gì hay không bằng cách cho nó dự đoán trên các quan sát trong một tập khác, chưa hề được nhìn thấy. Nếu model thật sự có thể dự đoán trên quan sát chưa hề được nhìn thấy, tức là nó có khả năng học được một khái niệm trừu tượng gì đó từ việc huấn luyện. Còn không, cho dù model dự đoán rất tốt các quan sát khi train, thì nó chỉ “học vẹt” và cố nhớ hết những gì được dạy mà thôi.

Tùy theo những điều kiện khác nhau khi train và test mà ta sẽ có những dạng bài machine learning khác nhau.

Các bài toán hot trong machine learning

Để cho dễ hiểu, mình sẽ giả sử rằng các quan sát \[x\] mà ta quan tâm là các bức ảnh về mèo [vì mình thích mèo :P].

Supervised learning [slide 3]: bài toán cơ bản và “dễ” nhất trong machine learning. Bạn muốn dự đoán về một nhãn [label] \[y\] nào đó của quan sát \[x\]. Khi train, model sẽ được dạy để dự đoán các nhãn này. Supervised learning có hai dạng chính: classification và regression. Với classification thì nhãn \[y\] là một giá trị rời rạc [đoán xem con mèo này là mèo mun hay mèo mướp]. Ngược lại, nhãn \[y\] trong regression là một gía trị liên tục [số thực] [đoán xem con mèo này nặng bao nhiêu kg].

Unsupervised learning [slide 4]: khác với supervised learning ở chỗ bạn không có nhãn khi train. Đa phần, bạn cũng không có nhãn khi test [vì nếu có, bạn đã dùng nó để train rồi]. Khi nhắc đến unsupervised learning, thường thì mục đích không phải là để dự đoán một nhãn nào cụ thể. Với distribution estimation, bạn muốn tính phân bố xác suất của \[x\], tức là \[P[x]\]. Khi biết được \[P[x]\] bạn có thể làm được nhiều thứ như sample \[x\] từ \[P[x]\]. Ví dụ, ta cần viết một chương trình tự tạo ra một bức ảnh mèo. Ta sẽ cho model quan sát thật nhiều ảnh mèo và dùng unsupervised learning để ước tính \[P[ảnh \ mèo]\]. Sau đó ta sẽ tạo ra nhiều bức ảnh mèo khác nhau bằng cách lấy mẫu từ phân bố này. Với dimensionality reduction, mục đích là biểu diễn \[x\] với ít chiều hơn mà vẫn giữ được các tính chất cơ bản. Ví dụ, bạn muốn giảm một tấm ảnh mèo với 600x400 điểm ảnh xuống thành một vector 300 chiều nhưng vẫn giữ được khái niệm về độ giống nhau [similarity]: khoảng cách từ một vector ảnh mèo mun đến một vector ảnh mèo mướp sẽ xa hơn nhiều so với khoảng cách đến vector ảnh của một con mèo mun khác.

Semi-supervised learning [slide 5]: dùng unsupervised learning để hỗ trợ cho supervised learning. Ví dụ, bạn dùng dimensionality reduction để giảm thiểu các bức ảnh 600x400 xuống còn 300 chiều. Sau đó bạn sử dụng các vector 300 chiều để làm quan sát \[x\] cho một bài toán supervised learning [thay cho các tấm ảnh cũ], ví dụ như đoán giống mèo. Điều này tại sao lại có lợi? Bởi trong bức ảnh 600x400 không phải mọi điểm ảnh điều thuộc con mèo [có thể là cây cối, bầu trời,…]. Ép bức ảnh xuống 300 chiều, bạn hy vọng là sẽ loại bỏ những yếu tố thừa thãi không liên quan đến mèo.

Multi-task learning [slide 6+7+8]: dự đoán nhiều loại nhãn cùng một lúc mà sử dụng chung một model. Ví dụ vừa muốn đoán xem mèo giống gì, vừa muốn biết xem nó nặng bao nhiêu. Slide 7+8 nói về sự khác nhau giữa một neural network dành cho single-task [slide 7] và multi-task [slide 8]. Multi-tasking models có nhiều ngõ ra, mỗi ngõ dành cho một dạng nhãn. Tuy nhiên, các ngõ ra này lại chia sẻ chung các lớp ở phía trước. Mục đích của chuyện này là để các bài toán khác nhau có sự trao đổi thông tin lẫn nhau. Giả sử ta biết con mèo mun thường nặng hơn con mèo mướp, vậy thì việc biết một con mèo là giống gì cũng giúp ích cho việc dự đoán cân nặng. Trên một số bài toán, người ta chỉ ra rằng dự đoán nhiều loại nhãn với chỉ một model sẽ cho kết quả cao hơn so với xây dựng từng model riêng biệt cho từng loại nhãn.

Transfer learning [slide 9]: dùng model được huấn luyện để giải bài toán A [hoặc nhiều bài toán A1, A2,…] để giải bài toán B. Ví dụ như dùng model dùng để đoán giống mèo vào việc đoán cân nặng mèo. Điều này nghe không quá vô lý vì mỗi giống mèo có một chuẩn cân nặng nhất định. Tất nhiên, ta không thể bê nguyên xi model đoán giống mèo mà phải áp dụng các kỹ thuật transfer learning để biến đổi nhẹ model này lại một tí.

Domain adaptation [slide 10]: phát sinh khi mà quan sát được dùng khi train được lấy mẫu từ một phân bố xác suất khác với quan sát được dùng khi test. Nói các khác là \[P_{train}[X]\] khác với \[P_{test}[X]\]. Ví dụ, bạn muốn đoán cân nặng mèo nhưng chỉ thu thập được ảnh mèo mun nên model của bạn chỉ giỏi đoán cân nặng mèo mun. Bạn đem model này đi đoán cân nặng mèo mướp thì kết quả sẽ khá tệ. Cần có một số kỹ thuật để chuyển đổi giữa hai domain này, như dạy model cái gì liên quan đến cân nặng mà không liên quan đến giống mèo. Slide 12+13 nói về paper của Genin et al., 2015 sử dụng một dạng adversarial network để làm được chuyện này. Ý tưởng của paper này như sau: bạn có hai model, một để đoán giống và một để đoán cân nặng. Hai model dự đoán này sẽ lấy input được tạo ra từ một dimensionality reduction model, có nhiệm vụ tạo ra các quan sát từ các bức ảnh mèo. Model này sẽ làm một điều ảo diệu như sau: nó sẽ tạo ra các quan sát sao cho model dự đoán cân nặng càng chính xác càng tốt, nhưng model dự đoán giống mèo càng KHÔNG chính xác càng tốt. Cuối cùng, các quan sát sẽ chỉ chọn lọc lấy những yếu tố liên quan đến cân nặng mèo mà không phụ thuộc vào giống mèo.

Structured prediction [slide 10]: một dạng supervised learning với nhãn \[y\] là một cấu trúc [structure]. Các cấu trúc thường gặp là dãy [sequence] hoặc đồ thị [graph]. Ví dụ, bạn muốn tạo ra một câu văn [dãy gồm nhiều từ] diễn tả hành vi của con mèo trong một bức ảnh [“con mèo mà trèo cây cau” chẳng hạn]. Vì sao bài toán này khó? Bởi vì tập các cấu trúc có số lượng phần tử rất lớn. Ví dụ, muốn đoán giống mèo thì số lượng lựa chọn chỉ khoảng dưới 100, còn số lượng câu văn để mô tả một tấm hình mèo thì… nhiều hơn cả số nguyên tử trong vũ trụ. Ngoài ra, “sai một ly đi một dặm”, tức là chỉ cần dự đoán sai ở một bước thì sẽ càng ngày càng sai thêm ở các bước tiếp theo.

One-shot learning [slide 12]: một dạng supervised learning mà, khi test, bạn chỉ có duy nhất một quan sát cho mỗi nhãn muốn dự đoán. Khi train bạn có quyền có nhiều quan sát cho mỗi nhãn, với điều kiện là các nhãn này không được dự đoán khi test. Nghe có vẻ không tưởng đúng không? Làm sao có thể dạy được khái niệm “giống mèo mướp” chỉ bằng một tấm ảnh? Slide 13 nói về Siamese network, một giải pháp cho bài toán này. Siamese network thay vì dự đoán trực tiếp giống mèo, thì sẽ nhận vào hai tấm ảnh mèo và nói xem nó có phải cùng một loại hay không. Ví dụ, muốn phân loại mèo mướp với một tấm ảnh, ta chỉ cần cho tấm ảnh cần phân loại và tấm ảnh mèo mướp duy nhất ta có vào model để xem chúng có cùng loại hay không.

Zero-shot learning [slide 14]: khó hơn cả one-shot, là khi ta muốn dự đoán một loại nhãn mà không cần có quan sát nào của nhãn đó cả. Slide 15 nói về một phương pháp sử dụng một neural network có cấu trúc đặc biệt để học các đặc tính [attribute] thay vì nhãn. Ví dụ, một loài mèo có thể được dự đoán từ các đặc tính như màu lông, hình dáng, tính cách.

Reinforcement learning [bonus]: là một bài toán có từ rất lâu nhưng trở lại hot trong thời gian gần đây [AlphaGo, Atari games, Dota bot,…]. Bài toán này có hai điểm khó. Thứ nhất, khi train bạn sẽ không được cho nhãn, mà chỉ được cho phần thưởng [reward]. Phần thưởng khác với nhãn ở chỗ: nhãn sẽ cho biết đâu là đáp đúng, còn phần thưởng chỉ cho biết là bạn dự đoán đúng bao nhiêu so với đáp án đúng. Khi có phần thưởng, model hoàn toàn không có thông tin gì thêm về việc sẽ phải sửa dự đoán như thế nào để đoán được đúng hơn; trong khi nếu có nhãn, model biết cái gì là đúng và nó chỉ việc thay đổi dự đoán sao cho gần hơn với nhãn. Thứ hai, bạn sẽ phải dự đoán một dãy các hành động, mà hành động sau sẽ phụ thuộc vào hành động trước. Ví dụ bạn xem một đoạn video về mèo và dừng tại một khung hình. Bạn cần đoán xem các khung hình kế tiếp là gì. Giả sử con mèo đang nhìn thấy một con chuột. Nếu hành động tiếp theo của con mèo là giết con chuột, thì hành động sau đó nữa sẽ là vờn chuột hoặc ăn chuột. Nếu hành động tiếp theo chỉ là ngáp, thì rất có thể sau đó con mèo sẽ chỉ đi ngủ. Nếu với mỗi dự đoán bạn được cho nhãn đúng, thì bài toán này trở thành một dạng structured prediction. Nếu như các hành động không phụ thuộc vào nhau [tức là bạn không cần quan tâm đến quá khứ], thì bài toán trở thành contextual bandits. Cho nên, có thể nói reinforcement learning là một dạng bài vô cùng tổng quát. Cũng vì thế, nó có độ ứng dụng rất rộng nhưng đồng thời cực kì khó giải quyết.

Machine learning có rất nhiều bài toán thú vị đang đợi các bạn giải quyết. Các bạn đọc xong bài viết này, mặc dù mình chỉ đưa ra vì dụ về mèo, các bạn vẫn có thể hiểu được nội dung và áp dụng cho các bài toán khác. Machine learning còn một chặng đường rất xa để làm được điều này, và có thể làm được điều này hay không trông cậy vào những người như các bạn đấy!

Video liên quan

Chủ Đề