Perceptron, XOR và kiến trúc mạng noron
Perceptron Rosenblatt, giới hạn XOR của Minsky-Papert, kiến trúc nhiều lớp, hidden layer và trực giác hình học của mạng noron sâu.
KhóThuật toán ~60 phút
Ôn lại trước khi học
Giới thiệu
Bài này học perceptron và vì sao cần tầng ẩn. Dùng để hiểu gốc của mọi mạng noron ngày nay.
Kiến thức cần nhớ
Perceptron
- Định nghĩa: noron cộng dồn bằng chứng có trọng số rồi bật tắt.
- Tổng vượt ngưỡng thì bắn tín hiệu, không thì im.
- Ví dụ đời thường: như cân phiếu bầu có trọng số.
- Học bằng cách dịch trọng số khi đoán sai.
- Chỉ tách được dữ liệu chia được bằng 1 đường thẳng.
Giới hạn XOR
- Định nghĩa: XOR cần 4 miền xen kẽ kiểu bàn cờ.
- Một đường thẳng không tách được 2 cặp chéo nhau.
- Ví dụ đời thường: như 1 nhát kéo không cắt chéo 2 lần.
- Đây là giới hạn biểu diễn, không phải thiếu dữ liệu.
- Muốn giải phải thêm tầng ẩn.
| Mô hình | XOR 4 điểm | Vì sao |
|---|---|---|
| Perceptron đơn | Tối đa ~75% | Chỉ 1 đường thẳng |
| MLP 2 noron ẩn | 100% | Ghép 2 đường ranh |
Mạng nhiều lớp
- Định nghĩa: xếp noron thành lớp vào, ẩn, ra.
- Tầng ẩn biến đổi không gian cho tách được tuyến tính.
- Ví dụ đời thường: như gấp giấy rồi cắt 1 nhát thẳng.
- Sâu vừa phải thường lợi tham số hơn nông quá rộng.
- Mạng tuyến tính thuần dù sâu vẫn gộp thành 1 phép.
Ví dụ
- Input: 4 điểm XOR -> Output: perceptron đơn sai ít nhất 1 điểm.
- Giải thích: không có đường thẳng nào tách được cặp chéo.
# Đếm tham số mạng 2 vào, 2 ẩn, 1 ra
tham_so = 2*2 + 2 + 2*1 + 1 # trọng số + ngưỡng
print(tham_so) # 9
💻 Bài tập
Ngôn ngữ: Python 3 với NumPy. Không dùng thư viện học sâu. Nộp vào day-093/.
Bài 1: Perceptron
class Perceptron:
def __init__(self, lr: float = 1.0, epochs: int = 100): ...
def fit(self, X, y): ... # y trong {0, 1}, cập nhật w += lr * (y - yhat) * x
def predict(self, X): ... # bậc thang: 1 nếu w.x + b > 0
errors_: list[int] # số lỗi mỗi epoch
AND -> hội tụ, 0 lỗi, in w và b
OR -> hội tụ, 0 lỗi
XOR -> sau 100 epoch vẫn sai ít nhất 1 trên 4 điểm
Vẽ đường biên của AND và OR. Vẽ 4 điểm XOR và giải thích bằng hình vì sao không có đường thẳng nào tách được.
Bài 2: Mạng 2 lớp giải XOR bằng tay
Không huấn luyện. Chọn tay trọng số cho mạng 2 đầu vào, 2 nơ-ron ẩn (bậc thang), 1 đầu ra để tính XOR.
Gợi ý: nơ-ron ẩn 1 tính OR, nơ-ron ẩn 2 tính NAND, đầu ra tính AND của 2 nơ-ron ẩn.
forward([0,0]) = 0; forward([0,1]) = 1; forward([1,0]) = 1; forward([1,1]) = 0
In giá trị tầng ẩn cho 4 điểm. Vẽ 4 điểm trong không gian ẩn: chúng tách được bằng 1 đường thẳng.
Bài 3: MLP forward và giới hạn tuyến tính (nâng cao)
- Viết
MLP(layer_sizes, activation)chỉ cóforwardvới trọng số khởi tạo ngẫu nhiên (He/Xavier). - Chứng minh bằng số: mạng 3 tầng không có hàm kích hoạt tương đương 1 ma trận duy nhất. Tính
W = W3 @ W2 @ W1và so output với mạng gốc trên 100 input ngẫu nhiên. - Đếm số tham số của MLP
[784, 256, 128, 10]. Viết công thức tổng quát.
✅ Tiêu chí hoàn thành
- Perceptron hội tụ trên AND, OR và thất bại trên XOR.
- Mạng tay giải đúng XOR, có hình không gian ẩn.
- Bài 3 chứng minh bằng số mạng tuyến tính sâu gộp thành 1 phép.
- Giải thích được vì sao XOR cần tầng ẩn.
❓ Câu hỏi ôn tập
- Perceptron tính output thế nào?
- Vì sao 1 đường thẳng không giải được XOR?
- Tầng ẩn giúp gì cho XOR?
- Mạng sâu khác mạng rộng ra sao?
🌕 Bạn đã hoàn thành ngày 93. Làm hết bài tập phía trên rồi sang ngày tiếp theo.