原始题目:LeetGPU - Logistic Regression
在 GPU 上求解逻辑回归问题。给定特征矩阵 X(n_samples×n_features)和二元目标向量 y(长度 n_samples,仅含 0 和 1),计算最大化对数似然的系数向量 β:
βmaxi=1∑n[yilog(pi)+(1−yi)log(1−pi)]
其中 pi=σ(XiTβ),σ(z)=1+e−z1 为 sigmoid 函数。
- 不允许使用外部库。
solve 函数签名必须保持不变。- 最终系数必须存储在
beta 向量中。 - 目标向量 y 仅包含 0 和 1。
Input: X (8 samples × 2 features):
[[2,1],[1,2],[3,3],[1.5,2.5],[-1,-2],[-2,-1],[-1.5,-2.5],[-3,-3]]
y: [1,1,1,0,0,0,1,0]
Output: β: [2.26, -1.29]
- 1≤n_samples≤100,000,1≤n_features≤1,000。
- n_samples≥n_features。
- −10.0≤X 中的值 ≤10.0。
- 绝对容差 10−2,相对容差 10−2。
- 性能测试在 n_features=8, n_samples=16 的规模下进行。
逻辑回归没有闭式解,需要通过迭代优化求解(如 Newton-Raphson、梯度下降或 IRLS)。每次迭代需要计算梯度 XT(p−y) 和 Hessian XTWX(W 是对角权重矩阵 pi(1−pi))。计算瓶颈在矩阵乘法(XTWX),这是一个对称 rank-k 更新,可以利用 GEMM 加速。当 n_features 较小时,多项迭代在 GPU 上的 overhead 可能大于计算收益。欢迎在 GitHub Discussions 分享你的解法。