[{"content":"","date":"2026-07-18","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","date":"2026-07-18","externalUrl":null,"permalink":"/","section":"Hasukie","summary":"","title":"Hasukie","type":"page"},{"content":"","date":"2026-07-18","externalUrl":null,"permalink":"/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":"","date":"2026-07-18","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"2026-07-18","externalUrl":null,"permalink":"/categories/%E7%AC%94%E8%AE%B0/","section":"Categories","summary":"","title":"笔记","type":"categories"},{"content":"","date":"2026-07-18","externalUrl":null,"permalink":"/tags/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/","section":"Tags","summary":"","title":"机器学习","type":"tags"},{"content":"\r这是博客的第一篇笔记，用来验证公式渲染、代码高亮和复制按钮是否正常。内容是一个最经典的入门例子。\n问题：用一条直线拟合数据\r#\r线性回归要找一个线性模型 $y = \\mathbf{w}^\\top \\mathbf{x} + b$，让它尽量贴合训练数据。 核心思路是把“模型好坏”变成一个可以优化的数字（损失），再不断调整参数让它变小。\n损失函数：均方误差\r#\r用均方误差（MSE）衡量预测值与真实值的差距：\n$$ \\mathcal{L}(\\mathbf{w}, b) = \\frac{1}{n} \\sum_{i=1}^{n} \\left( \\hat{y}_i - y_i \\right)^2 $$其中 $\\hat{y}_i = \\mathbf{w}^\\top \\mathbf{x}_i + b$ 是模型对第 $i$ 个样本的预测值，$y_i$ 是真实值。\n求解：梯度下降\r#\r参数沿负梯度方向更新，学习率为 $\\eta$：\n$$ \\mathbf{w} \\leftarrow \\mathbf{w} - \\eta \\, \\nabla_{\\mathbf{w}} \\mathcal{L}, \\qquad b \\leftarrow b - \\eta \\, \\frac{\\partial \\mathcal{L}}{\\partial b} $$直观地说：损失函数像一片地形，梯度指向“上坡”，我们就朝“下坡”走一小步，一步步走到最低点（最优解）。\nPyTorch 实现\r#\r下面用 PyTorch 的自动求导跑一遍梯度下降，体会“不用手算梯度”的便利：\nimport torch # 1. 造数据：y = 2x + 3 + 噪声 torch.manual_seed(0) X = torch.linspace(-1, 1, 100).reshape(-1, 1) y = 2 * X + 3 + 0.1 * torch.randn_like(X) # 2. 可训练参数（requires_grad=True 让 PyTorch 跟踪它的梯度） w = torch.zeros(1, requires_grad=True) b = torch.zeros(1, requires_grad=True) lr = 0.1 # 学习率 η for epoch in range(100): y_hat = X * w + b # 前向：线性模型 loss = ((y_hat - y) ** 2).mean() # MSE 损失 loss.backward() # 反向传播：自动算梯度 with torch.no_grad(): w -= lr * w.grad # 梯度下降更新 b -= lr * b.grad w.grad.zero_(); b.grad.zero_() # 清空梯度（PyTorch 会累加） print(f\u0026#34;训练完成：w ≈ {w.item():.3f}（真值 2），b ≈ {b.item():.3f}（真值 3）\u0026#34;)\r运行后会看到 $w$ 收敛到 2 附近、$b$ 收敛到 3 附近——模型自己“学”到了数据背后的规律。\n小结\r#\r这套流程几乎就是所有神经网络训练的骨架：\n定义模型（这里是线性模型，后面会换成神经网络）； 算损失（MSE 只是其一，分类任务会用交叉熵）； 梯度更新（loss.backward() + 手动下降）。 把这三步记住，后面学更复杂的模型时，变化的只是每一步的具体形式。\n","date":"2026-07-18","externalUrl":null,"permalink":"/posts/hello-machine-learning/","section":"Posts","summary":"从均方误差到梯度下降更新规则，配 PyTorch 自动求导示例。","title":"机器学习入门：线性回归与梯度下降","type":"posts"},{"content":"","date":"2026-07-18","externalUrl":null,"permalink":"/tags/%E6%95%B0%E5%AD%A6%E5%9F%BA%E7%A1%80/","section":"Tags","summary":"","title":"数学基础","type":"tags"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"}]