演示是噪声,源码是正弦
GitHub 用户名拼写先记一笔:仓库是 rohitg00/ai-engineering-from-scratch,不是 rohitghumare。star 累计 6.25 万,比单目录挂的 58k 多了 7.5k。
第二课从零实现 SVD 的四条奇异值 [3.4038, 2.2974, 1.0119, 0.4588] 跟课程自带的 NumPy 对照一字节不差,伪逆三条路 (SVD 手算 / lstsq / pinv) 全给出 [1.5, 1.6667],LSA 玩具矩阵的余弦 cos(cat, dog)=0.999 / cos(fish, ocean)=0.998 都复算成立。
最大的错在演示与源码已经漂移。 帖子把课程站点的 lesson HTML 当成「演示代码」——那张矩阵是 np.random.randn(200, 300),纯高斯白噪声,谱是平的;可 svd.py 仓库实文件早就升到 np.sin(X)*np.cos(Y) + 0.5*np.sin(2*X+Y) 的 256×256 正弦低秩图,真秩等于 3,k=4 即截断、k=50 时 RMSE=0、100% 重建。lesson HTML 那个 image = np.random.seed(42) 把 seed 的 None 返回值绑给 image、下一行才覆盖的 bug 是真存在的,但跟现行 svd.py 不在同一条时间线上。
「演示是噪声、源码是正弦」,所以 k=50 误差 67.2% / 存储 41.8% 这两个数字在 lesson HTML 里能复现,但用 svd.py 的正弦图跑根本不复现——帖子的「演示反证课目」用错了对象。
三个补料:① A^T A 路线在条件数 10⁸ 上误差 13%,直接 SVD 1.8e-9,警告是真的、伤害也在③ demo_condition_number 4 行打印被 lesson HTML 折叠,练习 1 让学生自己造病态才能看见③ demo_pca_is_svd() 是「PCA 就是 SVD」的源码证据,帖子没贴。
练习 5 那条 σ=8 时最优 k=0(零矩阵胜出,err=1.0)的实验是 Key Terms 表「Frobenius 范数 = 奇异值平方和开根号」的现场演示。σ=8 时三个干净奇异值 56.41/46.32/28.51 平方和开根号 ≈ 80.6,不是帖报 78.36——帖子抄范数算错了一格。
——SVD 课的演示被自己的演示反驳,正文讲的反而被自己仓库里的源码撑住。