
Hồi tháng 8 đến tháng 12 năm 2023, mình được đề cử sang Đại học Quốc Gia Singapore để trao đổi 1 học kỳ, cùng với 2 bạn cùng khóa trong K21 APCS.
Gần 3 năm sau, mình vẫn nhận được nhiều câu hỏi từ các bạn về làm sao để tham gia chương trình và chuẩn bị hồ sơ như thế nào. Cơ mà, đây không phải là mục đích của bài viết vì tư duy ấy toxic và các bạn không nên đặt 1 title nào đó để làm đích cuối (trust me i know). Thiệt ra, mình muốn viết chia sẻ về 4 môn học trong lúc học trao đổi và chúng giúp ích được gì cho mình sau khi về HCMUS.
Nhưng tại sao tới giờ mới đăng bài này? Nhân dịp APCS đóng môn Computational Structure, mình muốn chia sẻ những thứ hay ho mình nhặt được trong lúc học bên đấy, và những công cụ giúp mình thực hiện nhiều thứ hay ho trong năm 3 và 4 tại APCS. Cơ mà thừa nhận điểm các môn NUS của mình không cao, nhưng mình vẫn hài lòng với trải nghiệm và cơ hội được tiếp cận sâu.

Grade: C (lmao)
Đây là môn bắt buộc của ngành CS nên số lượng sinh viên rất đông. Giờ lý thuyết được tổ chức ở giảng đường lớn và cho phép chọn 1 trong 15 giờ lab để đáp ứng nhu cầu sinh viên. Đây cũng là 1 trong 2 môn khét tiếng của SoC undergrad vì độ khó của nó, chỉ thua CS3231 (phần sau). Phổ điểm của môn nhìn y như phân phối Gauss chuẩn - min 0, max 10, median 5. Lý 2 của thầy Nhã là 1 trong những môn duy nhất tạo được phân phối điểm tương tự ở APCS.
Môn này học theo cuốn Algorithm Design của Jon Kleinberg, Eva Tardos (cuốn K&T). Cho kỳ 1 AY23/24, thầy Arnab Bhattacharyya và thầy Rahul Jain dạy nửa đầu và nửa sau của môn. Nửa đầu dạy về độ phức tạp, O béo, greedy, divide-and-conquer, DP, lý thuyết đồ thị. Các bài lab chỉ tập trung quy nạp để chứng minh sự đúng đắn thuật toán, không đụng 1 dòng code nào. Thi giữa kỳ cũng chỉ viết chứng minh và giải bài tầm 1k2-1k6 Codeforces. Nửa sau dạy về network flow, P vs NP, vài bài toán NP-Hard điển hình, thuật toán ngẫu nhiên, xấp xỉ, tối ưu hóa. Bài lab và thi cuối kỳ khó hơn, bài tầm 1k6-1k9.
Đương nhiên vẫn sẽ có các chiến thần IOI, IMO qua môn dễ dàng. Và dàn TA cũng hầu hết là dân CP. Thậm chí nếu có A- trở lên môn này thì bạn có thể đăng ký học môn CS3233 - Competitive Programming. Học xong môn này thì mình cũng lên tay trình xí về CP.

Grade: C (đội ơn bell curve god vì tổng kết môn chỉ có 53% thôi)
Nếu bạn không học môn này thì bạn có thiệt sự học CS không, hay bạn chỉ cầm tấm bằng IT? Bạn được về tận cõi của lý thuyết tính toán để biết những mô hinh tính toán sơ khai trước khi có Turing Machine, và khi 1 hàm có thể tính được thì có phải Turing Machine luôn làm được không (Church-Turing thesis). Môn này cũng có overlap với CS3230 khi cũng phải mô tả và chứng minh thuât toán trong các tình huống P vs NP.
Môn này học theo cuốn Introduction to Automata Theory, Languages, and Computation từ Hopcroft-Motwani-Ullman của giáo trình Stanford. Thầy Sanjay Jain giảng hơi nhanh, nhưng cũng chịu giảng lại nguyên lecture cho sinh viên trong office hour. Mới thi xong finals từ 7h tối hôm đó, thì 2h chiều hôm sau đã có điểm (thiệt ra chắc giấy trống nhiều quá nên chấm bài cũng dễ thôi). Đợi ơn thầy vì chấm nương tay để tổng kết em vừa đủ vượt 50%.
Đi office hour để gặp TA trước khi thi cuối kỳ, mình cũng để ý kỷ niệm chương IOI và waifu.

Grade: B- (fair)
Thầy Sufatrio giảng bài rất dễ thương, luôn có câu chuyện minh họa cho context lý thuyết. Động lực của môn học tập trung vào bối cảnh Singapore và digital dependency của Singapore luôn đặt họ trong tình trạng nguy cơ. Để đánh giá nguy cơ thì chúng ta có CIA model. 6 tuần tiếp theo học lý thuyết về cryptography, vì đơn giản tất cả security chỉ là cryptography và ứng dụng thực tế. Còn lại là cưỡi ngựa xem hoa về network security và binary exploitation. Vui nhất là hồi dự tiết ôn thi cuối kỳ và được thầy cho sticker vì phát biểu trong giờ.

Môn học cũng sẽ có 2 contest CTF kéo dài 1 tuần do câu lạc bộ NUS Grey Hats tổ chức. Cuối kỳ thì tụi mình phải trình bày về given case study, mình trình bày về OCBC Phishing Scam. Mình cũng sẽ đính kèm write up cho cả 2 contest, case study và study notes (Notion Link).

Grade: B (also fair)
Môn CVPR kỳ này do thầy Amirhassan Monajemi dạy. Môn bắt đầu từ khải niệm sơ khai về vision và vật lý máy ảnh, con mắt, phát triển lý thuyết theo lịch sử khám phá thuật toán cổ điển - convolution filter, fourier transform, SIFT, local binary patterns, kalman filters. Phần lý thuyết của các thuật toán này chỉ dạy lướt qua.
Sau đó lớp trở thành môn Deep Learning trá hình, và các bạn sẽ cần sẵn kiến thức DL vì sẽ phóng nhanh về CNN, ViT, làm bài tập về backpropagation. Giờ lab cũng sẽ cho paper DETR và trình bày architecture và contributions của nó. Nhìn lại thì bài DETR cho sinh viên học cách đọc 1 bài CV khá hợp lý, tại bài có đủ các yếu tố CNN, Transformer, thuật toán cổ điển, tiện giới thiệu cả tạc vụ Object Detection.

Môn này không có thi giữa kỳ, mà sẽ thay bằng đồ án. Các nhóm 4 người sẽ được cho 1 dataset ảnh từ video và CCTV với binary label là “weapon” hoặc “no weapon”. Mục tiêu đồ án là thiết kế mô hình binary classification và chấm bằng poster presentation theo tiêu chí Technique, Novelty, Clarity. Tính ra ngay từ 2023 mình cũng có tầm nhìn phết, vì Ultralytics công bố YOLO-World vào đầu 2024 và cũng dùng CLIP backbone để hỗ trợ zero-shot.
Bài thi cuối kỳ cho tính convolution bằng mean filter 3x3, tính tay backpropagation trên computational graph, tính tay Kalman Filter, thiết kế mô hình cho task OD, trao đổi thêm về paper DETR.

Mình từng đăng bài FB về vài tấm hình hồi đi NUS (FB Link). Từ trải nghiệm qua, mình càng trân trọng lý thuyết nền tảng và phát triển kỹ năng cho hướng đi hiện tại của mình. Bây giờ mình lại chọn tiếp môn học cho tháng 8 sắp tới, cần phải lock in để cày GPA cho tốt.
