实现随机梯度下降(Stochastic Gradient Descent)训练一个线性回归模型。
批量梯度下降每次更新都要扫完整个数据集,代价随样本数线性增长;SGD 改为每读一条样本就更新一次参数,用单样本梯度作为整体梯度的无偏估计,因而更新频繁、收敛快,代价是轨迹带噪声。
模型为 y^=w⋅x+b,损失为单样本平方误差:
Li=(y^i−yi)2对应的梯度为:
∂w∂Li=2(y^i−yi)xi,∂b∂Li=2(y^i−yi)参数 w 和 b 全部初始化为 0。训练进行 T 轮,每轮按输入给定的顺序遍历全部 n 条样本,每条样本立即执行一次更新:
w←w−η∂w∂Li,b←b−η∂b∂Li第一行输入两个整数 n(1≤n≤500)、d(1≤d≤20)和两个浮点数 η(0.0001≤η≤0.1)、T(1≤T≤100),分别表示样本数、特征维度、学习率和训练轮数,其中 T 为整数。
接下来 n 行,每行输入 d+1 个浮点数,前 d 个为特征 x1,…,xd,最后一个为标签 y,取值范围均为 −10≤x,y≤10。
第一行输出 d 个空格分隔的权重 w,保留 4 位小数。
第二行输出偏置 b,保留 4 位小数。
输入
4 1 0.1000 1
1.0000 2.0000
2.0000 4.0000
3.0000 6.0000
4.0000 8.0000
输出
1.5776
0.9984
说明
训练 1 轮,按顺序处理 4 条样本。
初始 w=0,b=0。第 1 条样本 x=1,y=2:预测值为 0,误差 y^−y=−2,故 w←0−0.1×2×(−2)×1=0.4,
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册