[Machine Learning] Giới thiệu tổng quan về Machine Learning

I – Lời nói đầu

Trong thời buổi công nghiệp 4.0 như hiện nay, việc máy tính dần thay thế con người đã không còn xa lạ gì với chúng ta nữa. Máy tính đang làm tốt những việc có tính chất lặp đi lặp lại của con người , thậm chí là còn làm tốt hơn thế, việc của chúng ta chỉ cần lập trình sẵn các chức năng và máy tính sẽ thực thi chúng một cách chính xác.

Vậy chuyện gì sẽ xảy ra nếu chúng ta không thể lập trình cụ để máy tính thực hiện một công việc nào đó? Đây là lúc chúng ta cần đến máy học (Machine Learning), thay vì con người chỉ ra các bước cụ thể giải quyết một vấn đề thì máy có thể học được thông qua việc quan sát từ dữ liệu. Vậy thì máy học là gì, vì sao máy học làm được như vậy, phân loại các thuật toán máy học như thế nào và ứng dụng trong đời sống ra sao? Hy vọng bài viết này sẽ giúp các bạn giải đáp được các thắc mắc trên.

II – Machine learning là gì?

Hiện tại có khá nhiều khái niệm khác nhau về Machine learning. Để dễ hình dung về máy học trong bài viết này tác giả so sánh cách giải quyết một vấn đề bằng máy tính giữa máy học và cách lập trình truyền thống.

Hình 1: Traditional Programming (nguồn ảnh Youtube)

Hình 1 mô phỏng cách giải quyết một vấn đề bằng lập trình truyền thống, trong đó bạn sẽ là người viết ra các quy tắc để cho máy tính có thể dựa trên đó mà đưa ra kết quả. Ngược lại, đối với machine learning, việc của máy tính chính là tìm ra các quy tắc này.

Hình 2: Machine learning (nguồn ảnh Youtube)

Đối với máy học, bạn sẽ cần phải có dữ liệu để huấn luyện mô hình, đây chính là quá trình mà mô hình máy học tìm ra các quy tắc như đã nói bên trên. Sau khi huấn luyện xong, máy tính sẽ dựa vào mô hình đã huấn luyện để đưa ra dự đoán.

Như vậy: có thể khái quát lại: Machine Learning là việc máy tính có thể giải một bài toán cụ thể bằng những “kinh nghiệm” mà nó đã được “học” từ dữ liệu .

A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P if its performance at tasks in T, as measured by P, improves with experience E.

Mitchell, T. (1997). Machine Learning. McGraw Hill. p. 2

Trước khi tiếp tục, có hai khái niệm mà mình cần làm rõ với các bạn, đó là khái niệm mô hình máy học và khái niệm “học” của máy tính.

Đối với máy học, chúng ta sẽ cung cấp đáp án, dữ liệu và máy tính sẽ phải tìm ra rules (như bạn đã thấy trong hình 2), sau đó dùng rules này để có thể đưa ra dự đoán gần với câu trả lời thực tế nhất có thể. Rules mà máy tính tìm ra chính là một mô hình máy học. Các bạn có thể hiểu đơn giản thì mô hình máy học cũng như một hàm số vậy \(f(x)\), giả sử \(y\) là kết quả thực tế, chúng ta cần xấp xỉ một hàm \(\hat{y} = f(x)\) để \(\hat{y}\) gần với \(y\) nhất có thể. Đương nhiên là máy học không đơn giản như vậy, các bạn sẽ được tìm hiểu kỹ từng mô hình máy học và cơ sở toán học của mô hình trong các bài viết tiếp theo của CLB.

Về khái niệm “học”, giữa con người và máy tính đều có điểm giống nhau chính là đều cần phải tự cải thiện bản thân dựa trên những gì đã được học. Điểm khác nhau cơ bản giữa việc học của con người và máy tính chính là học từ những gì? Đối với con người, chúng ta học từ những quan sát thực tế, chúng ta được nhìn, được nghe.. Đối với máy tính, “học” thực ra là việc tính toán dựa trên tập dữ liệu huấn luyện để đưa ra hàm số phù hợp (chính là tự cải thiện bản thân máy tính). Chúng ta sẽ lấy một số ví dụ để các bạn có thể dễ tiếp cận.

Hình 3: “học” củacon người và máy tính (nguồn: lụm ở đâu đó)

Hãy nghĩ rằng máy tính giống như một đứa bé, bạn có ảnh 50 quả cam, 50 quả táo, bạn đưa cho đứa bé và dạy cho nó đâu là ảnh của quả táo, đâu là quả cam. Từ những gì đứa bé được “dạy”, nó sẽ học cách để phân biệt hai quả đó. Sau đó, bạn đưa một tấm ảnh của một trong hai quả đó, đứa bé có thể phân biệt được đó là quả gì. Tương tự, ý tưởng cơ bản nhất của máy học là giúp cho máy tính phân biệt được giữa hai loại quả bằng cách áp dụng chiến thuật “dạy” cho chúng đâu là quả cam, đâu là quả táo.

Hoặc là bạn cũng sẽ cho nó xem 50 ảnh quả cam, 50 ảnh quả táo, tuy nhiên lần này, máy tính sẽ phải tự mình tìm ra đâu là ảnh quả cam và đâu là ảnh quả táo. Cách mà nó học có thể là dựa vào màu sắc, một quả màu cam, một quả màu vàng, hình dạng (quả cam thì tròn hơn quả táo chẳng hạn)… Thì sau khi “học” xong, bạn cho máy tính một tấm ảnh của 1 trong 2 thì máy tính cũng sẽ phân biệt được.

Hai ví dụ ở phía trên là hai ví dụ về 2 loại máy học khác nhau, chúng ta sẽ tìm hiểu kỹ hơn ở phần phân loại máy học. Tiếp theo, chúng ta sẽ xem một chút về ý tưởng của máy học dưới góc độ toán học như thế nào.

III – Machine learning dưới góc độ toán học

Qua phần đầu, các bạn đã có khái niệm cơ bản về máy học là gì rồi, tiếp theo chúng ta sẽ nói về máy học dưới góc độ toán học.

Trong hai ví dụ mình lấy ở trên, sau máy tính “học” xong, cái mà bạn có được và dùng nó để dự đoán xem ảnh đó là cam hay táo được gọi là mô hình máy học (machine learning model). Hãy xem mô hình này như là một hàm toán học \( y=f(x) \) thông thường. Lúc này, bức ảnh mà bạn đưa vào để máy tính dự đoán xem đó là cam hay táo chính là \( x \) (feature) và kết quả cam hoặc táo chính là \( y \) (label).

Vậy nếu mô hình máy học chỉ là một hàm số thì làm sao nó có thể “học”? Để hiểu hơn tại sao nó có thể học, hãy để mình lấy một ví dụ khác là đổi nhiệt độ từ độ C sang độ F để dễ dàng giải thích cho các bạn. Đương nhiên là trong thực tế chả ai lại áp dụng máy học vào bài toán mà chỉ cần 1 dòng code là có kết quả như thế này, tuy nhiên nó lại rất phù hợp để giải thích cho các bạn.

Đầu tiên, mình có công thức để đổi từ độ C sang độ F như sau: \(T_F=(T_C∗1.8)+32\)

Vậy thì dạng của hàm số là \(y=f(x)=ax+b\). Thì mô hình máy học mà chưa được huấn luyện thì cũng giống như hàm số \(y=f(x)\) đó vậy, nó sẽ không biết được tham số \(a, b\) bằng mấy cho phù hợp. Do đó, việc huấn luyện là để máy tính “học” hay tìm ra bộ tham số phù hợp.

Đầu tiên, máy tính sẽ tạo ngẫu nhiên các tham số này, có thể là \(a=0,b=1\), sau đó máy tính sẽ tính \(y\), giả sử \(x=5\) thì \(y=1\) trong khi thực tế thì y phải bằng \(41\), lúc này \(a, b\) sẽ được điều chỉnh lại để làm sao cho \(y\) dự đoán (\(y\) predicted hay \(\hat{y}\)) gần với \(y\) thực tế nhất có thể. Ví dụ sau khi điều chỉnh thì \(a=2, b = 30\), sau đó lại dự đoán và điều chỉnh lại \(a, b\). Quá trình này cứ lặp đi lặp lại cho đến hết số lần lặp quy định hoặc giá trị \(\hat{y}\) gần với \(y\) nhất, lúc này, tham số \(a, b\) đã là tối ưu nhất và phù hợp với bài toán.

Hình 4: Hypothesis (Nguồn ảnh Quora)

Cần lưu ý rằng, việc chọn dạng hàm số \(y=ax+b\) như ở trên cũng giống như việc bạn chọn mô hình nào cho bài toán máy học của bạn, có thể bạn chọn Linear Regression, có thể Polynominal Linear Regession… Việc lựa chọn mô hình nào phải tùy vào bài toán, tùy vào dữ liệu đầu vào. Chẳng hạn như dữ liệu của bạn có phân bố tuyến tính thì bạn có thể chọn linear regression. Các mô hình này sẽ được tìm hiểu sau trong các bài viết tiếp theo của CLB AI.

Việc điều chỉnh tham số \(a, b\) không phải ngẫu nhiên, việc điều chỉnh này dựa trên một hàm mất mát (loss function), hàm này đo đạt độ sai lệch giữa kết quả dự đoán được và kết quả thực tế, sau đó dùng nó để điều chỉnh lại tham số a, b cho phù hợp. Tùy vào mỗi bài toán và mô hình máy học mà sẽ có các độ đo khác nhau.

Qua phần này, chắc các bạn cũng đã hiệu tại sao chúng ta lại phải xử lý dữ liệu (như mình đã nói ở phần trên) trước khi đưa vào mô hình máy học. Đơn giản là vì mô hình máy học cũng chỉ là các hàm toán học, và toán thì chúng ta chỉ có thể giải quyết, tính toán trên những giá trị số mà thôi.

IV – Input/output của bài toán ML là gì?

Một bài toán thì lúc nào cũng sẽ có input và ouptut. Luôn luôn, việc đầu tiên khi giải quyết một bài toán luôn là phân tích input và output. Vậy thì input và output của một bài toán máy học là gì? Để trả lời câu hỏi này, trước tiên ta cần phải rõ được, bài toán máy học là gì trước đã.

Bài toán máy học là bài toán thực tế mà có thể mô hình hóa đưa vào máy tính và áp dụng máy học để giải quyết. Hiển nhiên là nếu bài toán mà lập trình thông thường có thể giải được thì ta không xem đó là một bài toán máy học. Ví dụ như bài toán phân biệt quả cam, táo, bài toán dự đoán giá nhà… chúng ta đều không thể giải bằng cách lập trình thông thường, lúc này ta có thể áp dụng máy học để giải quyết vấn đề, lúc này các bài toán này được gọi là bài toán máy học.

Sau khi đã hiểu được bài toán máy học là gì, chúng ta tiếp tục với việc phân tích input và output của bài toán máy học. Input của bài toán máy học có thể là bất kỳ dữ liệu nào trong thực tế, chẳng hạn như ảnh, âm thanh, văn bản, số… hoặc thậm chí tất cả chúng đều có thể là input của cùng một bài toán.

Hình 5: Bài toán phân loại ảnh (Nguồn ảnh datacamp)

Trong ảnh trên là ví dụ về bài toán phân loại (classification), bạn đưa một hình ảnh vào trong mô hình máy học, nó sẽ xác định hình ảnh đó là thuộc lớp nào trong các lớp nó đã được học. Như trong ảnh, mô hình xác định được nó là con mèo. Như vậy input của chúng ta là hình ảnh con mèo và output xác định nó thuộc lớp con mèo.

Hình 6: Xác định vật thể trong ảnh (nguôn ảnh datacamp)

Một ví dụ khác cũng về hình ảnh, nhưng lần này chúng ta sẽ có một sự kết hợp giữa hai bài toán, regression và classification. Regression là việc chúng ta xác định vị trí trong ảnh nghi ngờ là vật thể, sau đó chúng ta sẽ xác định vùng đó có thuộc lớp nào đã học hay không. Như trong hình ảnh ví dụ, giống với ví dụ trước là xác định chó, mèo… tuy nhiên lần này chúng ta còn có thêm cả vị trí của chúng trong bức ảnh. Đây chính là ví dụ của một bài toán mà input có thể là cả ảnh và các số (dùng để các định vị trí của vật trong ảnh).

Hoặc một ví dụ khác là bạn cho máy tính học ảnh của những chiếc xe ô tô. Sau khi học xong, bạn đưa cho máy tính một tấm ảnh thì nó có thể phân biệt được ảnh đó có phải là ô tô hay không (xem ảnh bên dưới)

Hình 7: Machine Learning Input and ouput example (nguồn ảnh ahmedbesbes)

Nhiều bạn có thể sẽ tự hỏi vậy sao mà máy tính hay đúng hơn là mô hình máy học có thể “học” được trên hình ảnh, âm thanh… Đương nhiên là chúng ta sẽ cần phải xử lý dữ liệu trước khi đưa vào mô hình để học rồi. Các bạn phải luôn nhớ rằng, hầu hết thông tin trong trong cuộc sống đều là dữ liệu liên tục, tuy nhiên máy tính chỉ có thể xử lý các dữ liệu số, do đó chúng ta luôn luôn phải xử lý thông tin thành dữ liệu có thể xử lý trên máy tính. Đối với mỗi loại dữ liệu thì sẽ có kỹ thuật xử lý riêng, các bạn sẽ dược tìm hiểu kỹ hơn trong các bài viết sau của CLB.

V – Các khái niệm cơ bản về máy học

Trong một bài toán về máy học, các bạn cần nắm thêm những khái niệm sau đây:

  • Tập dữ liệu huấn luyện (training set): là tập dữ liệu mà bạn sẽ dùng để huấn luyện mô hình (chính là dữ liệu cho máy tính “học”). (Trong ví dụ trên là ảnh táo và cam)
  • Tập dữ liệu kiểm tra (test set): là tập dữ liệu bạn dùng để đánh giá độ chính xác của mô hình sau khi được huấn luyện.
  • Điểm dữ liệu (data point): là một đơn vị thông tin độc lập trong tập dữ liệu của bạn. Chẳng hạn như bạn có tập dữ liệu gồm giá nhà, ngày xây, diện tích… thì một điểm dữ liệu sẽ bao gồm các thông tin đó. Và một tập hợp các điểm dữ liệu được gọi là tập dữ liệu. Ví dụ bài cam, táo thì mỗi ảnh là có một nhãn kèm theo tạo thành một điểm dữ liệu.
  • Nhãn (label – \(y\)): là kết quả thực tế mà chúng ta muốn mô hình dự đoán. Ví dụ như cam, táo trong ví dụ ở trên được gọi là nhãn. (chỉ có đối với học có giám sát – sẽ được trình bày ở bên dưới)
  • Đặc trưng (feature – \(X\)): một hoặc một nhóm thuộc tính tạo nên các đặc trưng duy nhất, có thể đo lường và có thể so sánh với nhau . Đặc trưng là thứ làm cho một lớp có thể phân biệt với các lớp khác. Ví dụ như ảnh là đặc trưng của ví dụ cam, táo ở trên. Trong ví dụ ở mục điểm dữ liệu thì giá nhà, ngày xây, diện tích… là đặc trưng.

Một số bạn có thể sẽ thắc mắc tại sao mình dùng chữ in thường cho y mà lại in hoa cho \(X\). Lý do là bởi tập dữ liệu huấn luyện có nhiều data point, mỗi data point có các thông tin trong đó, nó thực chất là một ma trận hay một mảng các vector. Do đó được ký hiệu in hoa. Đối với \(y\), ứng với mỗi data point chỉ có một label duy nhất, khi đó, có n data point thì cũng chỉ có n label tương ứng, nó tạo thành một vector, do đó by convention được ký hiệu là \(y\).

Để hiểu rõ hơn thì các bạn có thể xem hình bên dưới đây:

Hình 8: Dataset example (nguồn ảnh IBM)

Toànbộ table bên dưới là một dataset của một bài toán dự đoán mức lương. Mỗi hàng trong table đó là một datapoint, cột cuối cùng là label, các cột còn lại là feature.

VI – Machine learning workflow

Đối với bất kỳ bài toán machine learning nào, bạn sẽ luôn luôn làm việc theo trình tự sau:

  1. Thu thập dữ liệu – Gathering data/Data collection
  2. Tiền xử lý dữ liệu – Data preprocessing
    1. Trích xuất dữ liệu – data extraction
    2. Làm sạch dữ liệu – data cleaning
    3. Chuyển đổi dữ liệu – Data transformation
    4. Chuẩn hóa dữ liệu – Data normalization
    5. Trích xuất đặc trưng – Feature extraction
  3. Phân tích dữ liệu – Data analysis
  4. Xây dựng mô hình máy học – Model building
  5. Huấn luyện mô hình – Model training
  6. Đánh giá mô hình – Model evaluation

Bước thu thập dữ liệu có thể sẽ không có, các bạn có thể lấy dữ liệu công khai từ một nguồn nào đó trên mạng.

Hình 9: Machine learning workflow (nguồn ảnh DataDrivenInvestor)

Trong tất cả các bước thì việc thu thập dữ liệu, tiền xử lý và xây dựng bộ dữ liệu là tốn nhiều thời gian nhất, có thể chiếm từ 70 – 80% thời gian thực hiện. Không chỉ tốn thời gian, việc này còn cực kỳ quan trọng, nó sẽ ảnh hưởng rất nhiều đến mô hình máy học của bạn. Một bộ dữ liệu có chất lượng tốt thì mô hình mới tốt được, vì máy nó sẽ học trên dữ liệu đó mà. Cũng giống như câu tục ngữ “gần mực thì đen gần đèn thì sáng” vậy.

Hình 10: Không tin tưởng vào dữ liệu bất ổn định (nguồn ảnh qingkaikong)

Việc xây dựng, huấn luyện và đánh giá mô hình, chiếm ít thời gian hơn. Công việc này sẽ xoay vòng liên tục, sau khi đánh giá mô hình, chúng ta sẽ tìm cách tối ưu mô hình và tiếp tục huấn luyện, đánh giá, cứ như vậy cho đến khi độ chính xác tăng cao.

Tuy việc xây dựng, huấn luyện và đánh giá tốn ít thời gian hơn nhưng lại rất quan trọng. Hãy tưởng tượng xem nếu bạn không biết chọn mô hình nào cho phù hợp, bạn không biết tối ưu mô hình như thế nào thì làm sao mà có một mô hình tốt được mặc dù bộ dữ liệu của bạn rất tốt.

Đương nhiên đây chưa phải là workflow đầy đủ, đây chỉ là workflow cơ bản của máy học mà thôi. Các bạn có thể xem workflow đầy đủ của một project máy học từ lúc ý tưởng bài toán đến lúc depoyment.

Hình 11: Machine learning Workflow End-to-end (nguồn ảnh ml-ops)

VII – Phân loại máy học

Qua hai phần trên, bạn đã phần nào hiểu được máy học là gì, những khái niệm cơ bản trong máy học, hiểu cơ bản vì sao máy học có thể “học” được. Tiếp theo, chúng ta hãy cùng tìm hiểu xem máy học có những loại nào.

Dựa vào chức năng của thuật toán của mô hình máy học, chúng ta có thể phân làm những loại sau:

  • Regression – Hồi quy
  • Classification – Phân lớp
  • Clustering – Phân cụm

Hồi quy là những thuật toán có chức năng học và dự đoán giá trị ( thường là giá trị thực – rời rạc). Ví dụ như bạn đưa các đặc điểm về căn nhà như diện tích sàn, số phòng ngủ… và giá căn nhà cho máy học, sau đó bạn có thể dùng mô hình đã huấn luyện để dự đoán giá các căn nhà – trong đó giá các căn nhà là roi.

Phân lớp chính là thuật toán áp dụng trong bài phân loại táo, cam mà lúc đầu mình ví dụ. Loại này thì nhận vào dữ liệu và lớp mà nó thuộc vào, sau khi được huấn luyện thì mô hình có thể phân lớp các dữ liệu. Ví dụ như bài táo, cam thì có 2 lớp thôi, chúng ta có thể gọi là binary classificatio. Nếu có nhiều lớp hơn, ví dụ có thể thêm quýt… thì có thể gọi là Multi-Classification.

Hình 12: Classification and regression (nguồn ảnh dev.to)

Phân cụm là thuật toán có chức năng phân cụm dữ liệu. Thuật toán này thường được áp dụng cho dữ liệu chưa được gán nhãn. Sự phân bố, cấu trúc của dữ liệu phải tự mô hình khám phá và phân cụm chúng, bạn có thể xem hình ảnh bên dưới để hiểu rõ hơn. Hình bên dưới sử dụng thuật toán K-means.

Hình 13: Clustering (nguồn ảnh Medium)

Dựa vào cách máy tính học, chúng ta có thể chia làm 3 loại:

  • Học có giám sát – Supervised learning
  • Học không giám sát – Unsupervised learning
  • Học bán giám sát – Semi-supervised learning
  • Học tăng cường/củng cố – Reinforced learning

Học có giám sát là máy tính sẽ học trên dữ liệu đã được gán nhãn. Giống như chúng ta sẽ dạy cho chúng học vậy. Ví dụ bài cam, táo, mỗi bức ảnh sẽ có nhãn là cam hay táo để máy tính học theo đó.

Học không giám sát thì không như vậy, máy tính sẽ học trên dữ liệu chưa được gán nhãn. Nghĩa là chúng phải tự khám phá ra cấu trúc, phân bố của dữ liệu để tự phân cụm chúng.

Học bán giám sát là việc kết hợp cả hai loại vừa kể trên, một nửa sẽ học trên dữ liệu đã gán nhãn và một nửa thì không.

Học tăng cường là việc máy tính sẽ tự học dựa trên việc thưởng, phạt. Khi máy tính thử một bước, nếu như gần với kết quả mong muốn, máy tính sẽ được thưởng và phạt nếu xa kết quả mong muốn. Từ đó, máy tính có thể dần tự mình học được.

VIII – Ứng dụng của máy học

Không cần nói thì chắc các bạn cũng biết, hiện tại thì hầu như các bạn đều đã và đang sử dụng công nghệ máy học. Bạn selfie, bức ảnh siêu lung linh, bạn nói chuyện với trợ lý ảo,… tất cả đều là ứng dụng của máy học.

Sau đây là một số lĩnh vực ứng dụng máy học, mình chỉ kể những lĩnh vực mà mình biết thôi chứ ứng dụng của máy học có kể cả ngày chắc cũng chẳng hết được:

  • Nhận diện hình ảnh:
    • Tự động tag bạn vào post có hình bạn
    • Mở khóa khuôn mặt
    • Chuẩn đoán bệnh thông qua ảnh y khoa
    • Đếm số xe trong ngã rẽ để điều phối cho phù hợp
  • Nhận diện giọng nói: như Search by text, talk to assitant like Siri or Google Assistant
  • Product recommendation: đơn giản, dễ hiểu nhất là khi bạn search “áo phông” trên google thì một lúc sau đâu đâu cũng là quảng cáo áo phông. Hoặc là bạn xem một sản phẩm trên Tiki, bên dưới đó sẽ có rất nhiều sản phẩm liên quan.
  • Xe tự hành
  • Language translation
  • Email spam filtering

IIX – Lời kết

Như vậy là qua bài viết này, mình đã giới thiệu cho mọi người về máy học, các khái niệm cơ bản về máy học, phân loại máy học và ứng dụng của máy học trong thực tế. Hy vọng là bài viết này đã giúp các bạn hiểu rõ hơn về một khái niệm của khoa học máy tính cực kỳ phổ biến là máy học.

CLB AI UIT sẽ cố gắng ra mắt thêm nhiều bài viết hay, nhằm cung cấp thêm kiến thức về khoa học máy tính cho các bạn sinh viên, bạn đọc, các bạn nhớ theo dõi page nha!

IX – Tài liệu tham khảo

Intro to Machine Learning (ML Zero to Hero – Part 1)

https://aldro61.github.io/microbiome-summer-school-2017/sections/basics/

Bài 2: Phân nhóm các thuật toán Machine Learning

What is Machine Learning? IBM

Machine Learning Workflow – run.ai

An Overview of the End-to-End Machine Learning Workflow

kadikoy moto kurye umraniye moto kurye tuzla moto kurye atasehir moto kurye moto kurye moto kurye moto kurye moto kurye

Khiêm Lê – KHCL2019.3

Leave a Reply

Your email address will not be published. Required fields are marked *