Chuyển đến nội dung chính

ML for Developer: Học Machine Learning từ góc nhìn Developer - Part 1

Lời mở đầu

Mình là một lập trình viên .NET, không phải nhà nghiên cứu Machine Learning. Những gì được trình bày trong loạt bài này đến từ quá trình tự học, tự đọc tài liệu và tự triển khai các ví dụ, chủ yếu với mục tiêu hiểu bản chất của Machine Learning từ góc nhìn của một người làm phần mềm.

Mục tiêu của series này không phải là “dạy Machine Learning”, mà là chia sẻ cách một lập trình viên tiếp cận, hiểu và sử dụng Machine Learning như một công cụ trong thực tế phát triển phần mềm.

Thuật toán có phải là tri thức không?

Trước khi đi sâu vào Machine Learning, hãy thử bắt đầu bằng một câu hỏi tưởng chừng rất đơn giản:

Một chương trình giải phương trình bậc hai có tri thức hay không?
Câu trả lời là có.

Tri thức toán học về cách giải phương trình bậc hai đã được lập trình viên mã hóa trực tiếp vào chương trình dưới dạng các câu lệnh điều kiện và thuật toán.

Tuy nhiên, đây là một dạng tri thức cứng – tri thức chỉ tồn tại trong mã chương trình và không thể thay đổi nếu không sửa lại code. Khi bài toán trở nên phức tạp và tri thức liên tục thay đổi, cách tiếp cận này dần bộc lộ những giới hạn của nó.

Chính từ nhu cầu “mềm hóa” tri thức đó, Machine Learning ra đời.

Về mặt phổ thông, Machine Learning thường được định nghĩa là một lĩnh vực con của Trí tuệ nhân tạo (AI), cho phép máy tính học từ dữ liệu mà không cần được lập trình tường minh cho từng tác vụ.

Machine Learning là gì? – Một góc nhìn lịch sử

Trước khi có các mô hình phức tạp và thuật ngữ “Machine Learning” phổ biến như ngày nay, câu hỏi nền tảng đã được đặt ra từ rất sớm.

Năm 1950, Alan Turing đặt ra câu hỏi nổi tiếng: “Can machines think?” Trong bài báo Computing Machinery and Intelligence, ông đề xuất “Imitation Game”, sau này được biết đến với cái tên Turing Test. Thay vì định nghĩa “tư duy” một cách trừu tượng, Turing đưa ra một tiêu chí thực dụng: nếu con người không thể phân biệt được câu trả lời của máy với con người, thì liệu có thể nói máy đang “tư duy” hay không?

Gần một thập kỷ sau, Arthur Samuel đưa khái niệm này tiến thêm một bước quan trọng. Ông định nghĩa Machine Learning là một lĩnh vực cho phép máy tính học mà không cần được lập trình tường minh. 

 [A] Field of study that gives computers the ability to learn without being explicitly programmed.

Thay vì mã hóa toàn bộ luật chơi, chương trình chơi cờ của Samuel có thể tự cải thiện qua từng ván đấu, dựa trên kinh nghiệm đã tích lũy. Đây là một bước chuyển rõ ràng từ “viết luật” sang “để máy tự học luật”.

Đến năm 1997, Tom M. Mitchell đưa ra một định nghĩa mang tính chuẩn mực hơn, giúp hệ thống hóa Machine Learning như một ngành khoa học.

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 the experience E. 

Theo Mitchell, một chương trình được coi là học từ kinh nghiệm nếu hiệu suất thực hiện một lớp nhiệm vụ cụ thể được cải thiện sau khi trải qua kinh nghiệm đó. Ba yếu tố cốt lõi được xác định là: nhiệm vụ (Task), kinh nghiệm (Experience) và độ đo hiệu suất (Performance).

🧠 Mental Model

Machine Learning không phải là việc chọn thuật toán nào, mà là xác định rõ T–E–P cho bài toán trước khi nghĩ đến thuật toán.

Những định nghĩa này cho thấy Machine Learning không chỉ là một tập hợp thuật toán, mà là một cách tiếp cận mới để đưa tri thức vào máy tính.

Kết luận

Machine Learning xuất hiện như một hướng tiếp cận khác: thay vì viết ra các quy tắc, chúng ta để máy tính tự rút ra tri thức từ dữ liệu. Tuy nhiên, điều này đặt ra một câu hỏi nền tảng hơn: dữ liệu là gì, tri thức là gì, và bằng cách nào một hệ thống máy tính có thể “biết” được điều gì đó từ dữ liệu?

Tham khảo

What Is Machine Learning?

Mechanical Turk

Sách Deep Learning - Tác giả: Ian Goodfellow, Yoshua Bengio & Aaron Courville 

Nhận xét

Bài đăng phổ biến từ blog này

[ASP.NET MVC] Authentication và Authorize

Một trong những vấn đề bảo mật cơ bản nhất là đảm bảo những người dùng hợp lệ truy cập vào hệ thống. ASP.NET đưa ra 2 khái niệm: Authentication và Authorize Authentication xác nhận bạn là ai. Ví dụ: Bạn có thể đăng nhập vào hệ thống bằng username và password hoặc bằng ssh. Authorization xác nhận những gì bạn có thể làm. Ví dụ: Bạn được phép truy cập vào website, đăng thông tin lên diễn đàn nhưng bạn không được phép truy cập vào trang mod và admin.

ASP.NET MVC: Cơ bản về Validation

Validation (chứng thực) là một tính năng quan trọng trong ASP.NET MVC và được phát triển trong một thời gian dài. Validation vắng mặt trong phiên bản đầu tiên của asp.net mvc và thật khó để tích hợp 1 framework validation của một bên thứ 3 vì không có khả năng mở rộng. ASP.NET MVC2 đã hỗ trợ framework validation do Microsoft phát triển, tên là Data Annotations. Và trong phiên bản 3, framework validation đã hỗ trợ tốt hơn việc xác thực phía máy khách, và đây là một xu hướng của việc phát triển ứng dụng web ngày nay.

Tổng hợp một số kiến thức lập trình về Amibroker

Giới thiệu về Amibroker Amibroker theo developer Tomasz Janeczko được xây dựng dựa trên ngôn ngữ C. Vì vậy bộ code Amibroker Formula Language sử dụng có syntax khá tương đồng với C, ví dụ như câu lệnh #include để import hay cách gói các object, hàm trong các block {} và kết thúc câu lệnh bằng dấu “;”. AFL trong Amibroker là ngôn ngữ xử lý mảng (an array processing language). Nó hoạt động dựa trên các mảng (các dòng/vector) số liệu, khá giống với cách hoạt động của spreadsheet trên excel.