线性回归课后题
- 全连接层和输入输出形状
假如你正在实现一个全连接层,全连接层的输入形状是7×8,输出形状是7×1,其中7是批量大小,则权重参数w和偏置参数b的形状分别是____和____
- 输入为 X ∈ R 7 × 8 X∈R^{7×8} X∈R7×8,输出为 Y ∈ R 7 × 1 Y∈R^{7×1} Y∈R7×1,权重参数为 w ∈ R 8 × 1 w∈R^8×1 w∈R8×1,则 X w ∈ R 7 × 1 X_w∈R^{7×1} Xw∈R7×1。
- 给 X w X_w Xw中的每个元素加上的偏置是一样的,所以偏置参数 b ∈ R 1 × 1 b∈R^{1×1} b∈R1×1。(参数的形状与批量大小没有关系)
- broadcasting semantics
- 计算:
# y为nx1
>>> y=torch.randn(4)
>>> y
tensor([-1.4736, -0.7209, 0.6472, 1.0759])
>>> y_hat.view(-1).shape # A选项正确
torch.Size([4])
# y_hat为1xn
>>> y_hat=torch.randn(4,1)
>>> y_hat
tensor([[1.2142],
[1.7063],
[0.4449],
[0.9576]])
>>> y.view(-1).shape # B选项错误:前者是4x1,后者是1x4
torch.Size([4])
>>> y.view(y_hat.shape).shape # C选项正确
torch.Size([4, 1])
>>> y.view(-1, 1).shape # D选项正确
torch.Size([4, 1])
- tensor的.shape/.size 都是返回形状
# .shape和.size()方法返回值一致
x=torch.randn(4)
>>> x
tensor([-0.0233, -0.4144, -0.5163, -0.8312])
>>> x.shape
torch.Size([4])
>>> x.size()
torch.Size([4])
- 在线性回归模型中,对于某个大小为3的批量,标签的预测值和真实值如下表所示:
y ^ \hat{y} y^ | y y y |
---|---|
2.33 | 3.14 |
1.07 | 0.98 |
1.23 | 1.32 |
- 该批量的损失函数的平均值为:0.112
# 用教程里的函数计算一下
>>> import torch
>>> y=torch.tensor([3.14, 0.98, 1.32])
>>> y_hat=torch.tensor([2.33, 1.07, 1.23])
>>> def squared_loss(y_hat, y):
... return (y_hat - y.view(y_hat.size())) ** 2 / 2
...
>>> loss=squared_loss(y_hat, y)
>>> loss
tensor([0.3281, 0.0041, 0.0041])
>>> loss.mean()
tensor(0.1121)
Softmax回归的基本概念
softmax是一个单层神经网络,输出层也是一个全连接层:
每个输出 o 1 , o 2 , o 3 o_1, o_2, o_3 o1,o2,o3的计算都要依赖于所有的输入 x 1 , x 2 , x 3 , x 4 x_1, x_2, x_3, x_4 x1,x2,x3,x4。
将输出值变换成值为正且和为1的概率分布:
softmax ( o ) = exp ( o ) ∑ i exp ( o i ) \text{softmax}(o) = \frac{ \exp(o)}{\sum_i \exp(o_i)} softmax(o)=∑iexp(oi)exp(o)
单样本与小批量softmax矩阵运算
- 计算表达式: o ( i ) = x ( i ) W + b , y ^ ( i ) = softmax ( o ( i ) ) . \begin{aligned} \boldsymbol{o}^{(i)} &= \boldsymbol{x}^{(i)} \boldsymbol{W} + \boldsymbol{b},\\ \boldsymbol{\hat{y}}^{(i)} &= \text{softmax}(\boldsymbol{o}^{(i)}). \end{aligned} o(i)y^(i)=x(i)W+b,=softmax(o(i)).
- 权重、偏差参数:
W = [ w 11 w 12 w 13 w 21 w 22 w 23