Perceptron in Image Classification
Perceptron nhận diện ảnh: chữ số 0 hay 1?
Công ty nào đang ứng dụng Perceptron?
Thập niên 1990, phòng thí nghiệm của Yann LeCun tại AT&T Bell Labs công bố bộ dữ liệu MNIST: 70.000 ảnh chữ số viết tay 28×28 pixel. Bộ dữ liệu nhỏ bé này lại trở thành “phòng tập gym” đầu tiên cho mọi mô hình thị giác máy tính.
Bài toán đầu bài: cho một ảnh 28×28, nhận diện đó là chữ số “0” hay chữ số “1”. Nghe đơn giản đến mức mọi người hỏi: một perceptron đơn (chính là viên gạch mà bạn vừa học) có đủ không? Câu trả lời rất đáng ngạc nhiên. Với bài toán 0 vs 1, một perceptron đạt quanh 99% chính xác trên dữ liệu gọn gàng. Nhưng chỉ cần xoay ảnh 20°, đưa vào 10 chữ số thay vì 2, hoặc nét viết đậm hơn, perceptron đuối sức ngay.
Phần dưới sẽ cho bạn tô thử một lưới 28×28, xem “bản đồ trọng số” mà perceptron đã học, và hiểu vì sao ngành ảnh phải rẽ sang mạng sâu.
Vấn đề công ty cần giải quyết
Trước những năm 1990, máy nhận chữ viết tay phải được lập trình bằng các quy tắc hình học: “nếu có một đường thẳng dọc ở cột giữa thì đó là chữ 1”. Cách này sụp đổ ngay khi gặp người viết khác tay, xoay nhẹ, hoặc nét đứt. Các hệ thống phân loại thư tự động của bưu điện Mỹ vì thế phải dựa vào nhân công đọc mã vùng từng lá thư.
Cơ quan Bưu chính Hoa Kỳ và AT&T đặt một câu hỏi kỹ thuật: có mô hình nào tự họcnhận dạng chữ số từ hàng chục nghìn ví dụ? Perceptron (ý tưởng đã có từ 1958) được kéo ra khỏi “mùa đông AI” và chạy thử trên MNIST như một mô hình chuẩn đối chứng (baseline).
784 đầu vào
Mỗi ảnh 28×28 duỗi phẳng thành 784 số. Perceptron cần đúng 784 trọng số, không nhiều hơn, không ít hơn.
1 đầu ra
Chỉ có hai câu trả lời: “0” hoặc “1”. Đây là bài toán phân loại nhị phân, vừa vặn với hàm bước của perceptron.
Dữ liệu 60.000 ảnh
Đủ để luật học Rosenblatt hội tụ trong vài chục lần quét, mỗi lần chỉnh từng trọng số một chút.
Cách Perceptron giải quyết vấn đề
Đưa ảnh thành vector 784 số.Ảnh được chuyển về xám, co về kích thước 28×28, rồi duỗi phẳng thành một dãy 784 giá trị x₁, x₂, ..., x₇₈₄. Mỗi số đại diện độ sáng của một ô pixel. Perceptron không nhìn “bức tranh”. Nó nhìn một danh sách dài.
Khởi tạo 784 trọng số ngẫu nhiên.Perceptron bắt đầu mỗi trọng số bằng một số ngẫu nhiên nhỏ. Ở lúc này, trọng số chưa nói được gì. Bấm nút “predict” chỉ cho ra một câu trả lời tuỳ tiện.
Duyệt qua tập huấn luyện, sửa trọng số khi sai. Với mỗi ảnh (có nhãn đúng), perceptron tính tổng có trọng số, đưa ra dự đoán. Nếu sai, áp dụng luật Rosenblatt:
wᵢ ← wᵢ + η · (target − output) · xᵢ. Nói nôm na: những pixel đã bật nhưng đẩy câu trả lời về sai hướng sẽ bị trừ trọng số.Hội tụ sau vài chục vòng. Rosenblatt chứng minh (1958): nếu dữ liệu phân tách tuyến tính, luật học này chắc chắn hội tụ sau một số hữu hạn bước. MNIST 0-vs-1 về cơ bản là phân tách tuyến tính, nên vài chục lần quét là đủ.
Dùng perceptron đã học. Với mỗi ảnh mới, chạy đúng một lần phép tính 784 nhân + 1 cộng + 1 so sánh. Trên phần cứng thập niên 1960, việc này mất vài mili-giây. Trên điện thoại hiện nay, gần như tức thời.
Lưới 28×28. Tô pixel, xem dự đoán đổi.
Nhấn vào từng ô để bật/tắt pixel. Perceptron tính lại và đưa ra phán quyết “0” hoặc “1” ngay lập tức.
Bắt đầu vớiPixel đen (1)Pixel trắng (0)Perceptron nói
1Đây là chữ số 1
Tổng có trọng số22.40Lớn hơn 0 → chọn 1. Nhỏ hơn 0 → chọn 0. Càng xa 0, perceptron càng “tự tin”.
Pixel đang bật32Tổng pixel784Bias (ngưỡng)-1.0Mẹo trải nghiệmBấm “Xem trọng số” để thấy bản đồ nhiệt: đỏ là pixel mà khi bật lên sẽ đẩy perceptron về phía “1”, xanh là pixel đẩy về “0”. Đây chính là thứ perceptron “học được” sau khi xem hàng nghìn ảnh.- 1Nhìn kỹ đường đi của một ảnh
Bốn bước dưới đây là chính xácnhững gì perceptron làm trên bức ảnh bạn vừa tô. Bấm “Tiếp tục” để mở từng bước.
NhìnBước 1: Ảnh 28×28 = 784 ô pixelMọi bức ảnh đen–trắng trong MNIST là một lưới 28 hàng × 28 cột. Mỗi ô là một con số: 0 nếu trắng, 1 nếu đen (thật ra là thang xám 0–255, ta đơn giản hoá thành nhị phân).
Con số thật
Với bài 0-vs-1 gọn gàng, perceptron gần như hoàn hảo. Nhưng chỉ cần thay đổi nhỏ trong dữ liệu là nó gãy. Bấm từng kịch bản dưới đây.
Khi perceptron đuối sức
Bấm vào từng kịch bản để so sánh độ chính xác của một perceptron đơn và một mạng sâu (CNN nhỏ).
Mẫu gần giống dữ liệu huấn luyện. Một perceptron cũng xử lý được.
Nhiều lớp + convolution = tự học đặc trưng bất biến với dịch chuyển / xoay / co giãn.
Vì sao một perceptron lại gặp khó khăn khi ảnh chữ số bị dịch chuyển vài pixel sang phải?
Vì sao mạng sâu (deep nets) vượt xa một perceptron trên bài toán ảnh thực tế?
Nếu không có Perceptron, app sẽ ra sao?
Nếu Rosenblatt không chứng minh được rằng một perceptron có thể tự học nhận diện chữ số, ngành thị giác máy tính có thể đã không ra đời theo con đường “học từ dữ liệu”. Mọi hệ thống OCR (đọc chữ), nhận diện khuôn mặt, xe tự lái hôm nay đều bắt nguồn từ ý tưởng đơn giản mà bạn vừa tự tay thử: cho máy xem hàng nghìn ảnh có nhãn, để nó tự điều chỉnh trọng số.
Cùng lúc đó, giới hạn của perceptron (không xử lý được XOR, không bất biến với xoay / dịch) là cú hích đẩy ngành AI sang mạng nhiều lớp (MLP), mạng tích chập (CNN), và hàng loạt kiến trúc sâu. MNIST vẫn là benchmark đầu tiên mọi sinh viên ML thử, vì nó nhỏ đủ để chạy trong vài giây, nhưng đủ phức tạp để lộ ra hạn chế của mô hình đơn giản.
- Ảnh 28×28 duỗi phẳng thành 784 số; perceptron có đúng 784 trọng số.
- Sau khi học, 'bản đồ trọng số' cho thấy những vị trí pixel quan trọng để phân biệt hai lớp.
- Bài 0-vs-1 đạt khoảng 99%. Một perceptron đủ cho dữ liệu gọn gàng, phân tách tuyến tính.
- Ảnh xoay, dịch, đậm khác hoặc bài 10 lớp → perceptron gãy; phải dùng mạng sâu (MLP, CNN).
Kiểm tra hiểu biết
Ảnh 28×28 pixel được đưa vào perceptron dưới dạng gì?