Sigmoid hay ReLU — câu hỏi phỏng vấn hay bài học đắt giá?
Activation function và phần cứng — hai lựa chọn nền tảng tưởng nhỏ mà quyết định chi phí inference cả pipeline AI của bạn.
Bụi Wire"Dùng ReLU đi" — lời khuyên đúng nhưng thiếu
Có một câu hỏi mà gần như mọi tutorial deep learning đều trả lời trong đúng một dòng: "Activation function nào? ReLU." Xong. Qua bài tiếp.
Mình từng cũng vậy. Copy-paste nn.ReLU() như một thói quen, không khác gì gõ import numpy as np — tay nhanh hơn não. Cho đến khi một anh tech lead trong team hỏi ngược: "Ê, nếu ReLU tốt hơn Sigmoid ở mọi mặt, tại sao Sigmoid vẫn tồn tại?"
Câu hỏi đó mở ra một lỗ hổng kiến thức mà mình nghĩ khá nhiều bạn mới bắt đầu với AI cũng đang có.
Sigmoid — ông thầy chấm điểm kiểu cào bằng
Hình dung thế này: bạn có một lớp học 40 học sinh, điểm thật từ 2 đến 10 rải đều. Nhưng ông thầy chấm lại ép tất cả vào khoảng 6 đến 7.5. Đứa giỏi nhất: 7.5. Đứa kém nhất: 6. Bạn nhìn bảng điểm và... không phân biệt được ai với ai.
Sigmoid hoạt động y chang. Nó nén mọi giá trị đầu vào vào khoảng 0 đến 1. Khi input càng xa ranh giới quyết định (decision boundary), output càng tiến về 0 hoặc 1 — nghe thì có vẻ rõ ràng, nhưng vấn đề nằm ở chỗ: điểm cách boundary 5 đơn vị và điểm cách 50 đơn vị cho ra output gần như giống nhau. Thông tin về khoảng cách — thứ mà các layer phía sau cần để xây representation phức tạp hơn — bị xóa sạch.
Nói thẳng ra thì: Sigmoid làm mất "ngữ cảnh hình học" (geometric context) của dữ liệu khi nó đi qua từng layer. Mạng càng sâu, tín hiệu càng bẹp.
ReLU giữ được gì mà Sigmoid không?
ReLU đơn giản đến mức nhiều người nghi ngờ: input dương thì giữ nguyên, input âm thì cho về 0. Vậy thôi.
Nhưng cái "giữ nguyên" đó lại là chìa khóa. Với input dương, ReLU bảo toàn magnitude — nghĩa là điểm cách boundary 5 đơn vị và điểm cách 50 đơn vị vẫn cho output khác nhau rõ rệt. Thông tin khoảng cách sống sót qua từng layer, cho phép model sâu hơn vẫn giữ được khả năng biểu diễn mà không cần phình to chiều rộng.
Hệ quả thực tế: model dùng ReLU thường cần ít neuron hơn để đạt cùng accuracy so với Sigmoid. Ít neuron hơn nghĩa là ít phép tính hơn, inference nhanh hơn, chi phí thấp hơn. Trên production, chênh lệch này nhân lên theo mỗi request.
Ví dụ cụ thể: team 4 người và cái model "chạy mà không hiểu"
Giả sử team bạn 4 người đang xây một bộ phân loại văn bản cho chatbot nội bộ. Bạn dùng một mạng feedforward 5 hidden layers, Sigmoid activation — vì "hồi đi học dùng cái này."
Model train xong, accuracy trên test set nhìn ổn. Deploy lên staging, latency mỗi request chấp nhận được. Nhưng khi traffic tăng gấp 3 vào giờ cao điểm, bạn phải scale pod lên, chi phí cloud phình ra.
Bây giờ, thử thay toàn bộ Sigmoid bằng ReLU, retrain cùng data. Bạn sẽ thấy: model hội tụ nhanh hơn, representation rõ ràng hơn (visualize embedding layer là thấy cluster tách bạch hơn), và inference cost giảm đáng kể — đơn giản vì ReLU tính nhanh hơn Sigmoid (một phép so sánh thay vì một phép mũ).
Đó không phải optimization cao siêu gì. Đó là chọn đúng công cụ nền tảng từ đầu.
Phần cứng cũng kể chuyện — và phức tạp hơn bạn nghĩ
Activation function là quyết định ở tầng model. Nhưng còn một tầng nữa mà dev mới thường bỏ qua: phần cứng chạy inference.
GPU đang là mặc định trong đầu mọi người — "train AI thì cần GPU." Đúng, nhưng chưa đủ. Hiện tại hệ sinh thái phần cứng AI đã phân hóa rõ:
- GPU (NVIDIA, AMD): mạnh ở song song hóa, linh hoạt, phù hợp cả train lẫn inference đa dạng workload
- TPU (Google): thiết kế riêng cho tensor operations, tối ưu cho model lớn trên Google Cloud
- NPU: chip nhúng trên thiết bị (điện thoại, laptop), tối ưu cho inference nhẹ, tiết kiệm pin
- LPU (Groq): kiến trúc mới, xử lý tuần tự cực nhanh, nhắm vào inference LLM với latency thấp
Bản chất thật sự: GPU như vận động viên đa môn — cái gì cũng khá. TPU như VĐV chuyên nghiệp — chỉ giỏi một thứ nhưng giỏi cực kỳ. NPU như runner nghiệp dư chạy bền — không nhanh nhất nhưng chạy cả ngày không mệt. LPU thì đang như tay đua mới vào sân — chưa nhiều người biết nhưng tốc độ ấn tượng.
Quyết định phần cứng ảnh hưởng trực tiếp đến chi phí và latency. Giả sử bạn đang serve model phân loại cho app nội bộ, traffic thấp — một con NPU trên edge device có khi đã đủ, không cần thuê GPU cloud theo giờ.
Thử ngay chiều nay
Bạn có Python và 30 phút? Đủ rồi. Thử bài thí nghiệm two-moons kinh điển để tận mắt thấy sự khác biệt:
- Tạo data: dùng
sklearn.datasets.make_moonsvớinoise=0.2, rồiStandardScalerđể chuẩn hóa - Xây 2 model giống hệt nhau bằng PyTorch: cùng architecture (3 hidden layers, 64 neurons mỗi layer) — một cái dùng
nn.Sigmoid, một cái dùngnn.ReLU - Train cả hai trên cùng data, cùng learning rate, cùng số epoch
- Visualize decision boundary: plot prediction trên grid 2D, so sánh cách mỗi model phân chia không gian
- Đo thời gian inference: chạy
time.time()trước và sau predict trên 10,000 điểm, so sánh
Bạn sẽ thấy tận mắt: decision boundary của ReLU sắc nét, gãy góc rõ ràng. Sigmoid cho boundary mượt hơn nhưng thiếu chi tiết — đặc biệt ở vùng hai class gần nhau, nơi geometric context quan trọng nhất.
Toàn bộ dùng open-source: scikit-learn, PyTorch, matplotlib. Không tốn đồng nào.
Cái bẫy "lý thuyết vững là đủ"
Mình từng thấy một bạn junior trình bày rất trơn tru về vanishing gradient, saturation zone của Sigmoid — nhưng khi được hỏi "vậy model đang chạy production dùng activation gì?", bạn ấy... không biết. Vì "cái đó anh senior setup từ đầu rồi."
Đây là sai lầm phổ biến nhất khi bắt đầu với AI: học lý thuyết tách rời khỏi production. Activation function không chỉ là câu hỏi phỏng vấn — nó ảnh hưởng trực tiếp đến inference cost, scaling behavior, và cả lựa chọn phần cứng phía sau.
Tương tự, nhiều team chọn GPU vì "ai cũng dùng GPU" mà không benchmark workload thực tế. Kết quả: trả tiền GPU cao cấp để serve cái model mà CPU cũng chạy tốt.
Một dòng mang về
Khi bắt đầu xây AI, đừng chỉ hỏi "model nào tốt" — hãy hỏi "model này cần gì để chạy rẻ và nhanh trên production." Activation function và phần cứng là hai câu trả lời đầu tiên bạn cần, và cũng là hai thứ ít ai dạy bạn đầu tiên.
Spoiler: không có silver bullet — nhưng có những lựa chọn sai ngay từ vạch xuất phát mà bạn hoàn toàn tránh được.
---
Bụi Wire — nghiện đọc release notes lúc 2 giờ sáng