一、3.1线性回归
1、假设我们有一些数据 𝑥
1
_1
1,…,𝑥
n
_n
n∈ℝ 。我们的目标是找到一个常数 𝑏,使得最小化 ∑
i
(
x
i
−
b
)
2
_i(x_i−b)^2
i(xi−b)2。
(a)找到最优值𝑏的解析解。
回答: 对最小化式子y关于b求导,易知y≥0,所以y’=0时为取最小值的时候,此时
b
=
x
1
+
x
2
+
…
…
+
x
n
n
b=\frac{x_1+x_2+……+x_n}{n}
b=nx1+x2+……+xn。这也是最优值b的解析式。
(b)这个问题及其解与正态分布有什么关系?
回答: 这个最优值b就是这些数据的最大似然估计,而正态分布的极大似然估计化简到最后就是第一问的求解式。
2、推导出使用平方误差的线性回归优化问题的解析解。为了简化问题,可以忽略偏置 𝑏(我们可以通过向𝐗添加所有值为1的一列来做到这一点)。
(a)用矩阵和向量表示法写出优化问题(将所有数据视为单个矩阵,将所有目标值视为单个向量)。
回答:
y
^
=
w
T
x
+
b
\hat{y}=w^Tx+b
y^=wTx+b,又b可以忽略,故
Y
^
=
X
W
\hat{Y}=XW
Y^=XW,故平方误差的线性回归优化可以表示为
m
i
n
1
2
n
∣
∣
Y
^
−
Y
∣
∣
2
2
=
m
i
n
1
2
n
∣
∣
X
W
−
Y
∣
∣
2
2
min\frac{1}{2n}||\hat{Y}-Y||^2_2=min\frac{1}{2n}||XW-Y||^2_2
min2n1∣∣Y^−Y∣∣22=min2n1∣∣XW−Y∣∣22
(b)计算损失对𝑤的梯度。
回答: 损失函数L如下
L
=
1
2
n
∣
∣
X
W
−
Y
∣
∣
2
2
=
1
2
n
(
X
W
−
Y
)
T
(
X
W
−
Y
)
=
1
2
n
(
W
T
X
T
−
Y
T
)
(
X
W
−
Y
)
=
1
2
n
(
W
T
X
T
X
W
−
Y
T
X
W
−
W
T
X
T
Y
+
Y
T
Y
)
=
1
2
n
(
W
T
X
T
X
W
−
2
Y
T
X
W
+
Y
T
Y
)
\begin{aligned} L&=\frac{1}{2n}||XW-Y||^2_2\\ &=\frac{1}{2n}(XW-Y)^T(XW-Y)\\ &=\frac{1}{2n}(W^TX^T-Y^T)(XW-Y)\\ &=\frac{1}{2n}(W^TX^TXW-Y^TXW-W^TX^TY+Y^TY)\\ &=\frac{1}{2n}(W^TX^TXW-2Y^TXW+Y^TY) \end{aligned}
L=2n1∣∣XW−Y∣∣22=2n1(XW−Y)T(XW−Y)=2n1(WTXT−YT)(XW−Y)=2n1(WTXTXW−YTXW−WTXTY+YTY)=2n1(WTXTXW−2YTXW+YTY)
此时计算损失对W的梯度
∂
L
∂
W
=
1
2
n
(
2
X
T
X
W
−
2
Y
T
X
)
=
1
n
(
X
T
X
W
−
Y
T
X
)
\begin{aligned} \frac{\partial{L}}{\partial{W}}&=\frac{1}{2n}(2X^TXW-2Y^TX)\\ &=\frac{1}{n}(X^TXW-Y^TX) \end{aligned}
∂W∂L=2n1(2XTXW−2YTX)=n1(XTXW−YTX)
(c)通过将梯度设为0、求解矩阵方程来找到解析解。
回答: 令梯度为0,则
X
T
X
W
−
Y
T
X
=
0
X^TXW-Y^TX=0
XTXW−YTX=0。解得
W
=
(
X
T
X
)
−
1
X
T
Y
W=(X^TX)^{-1}X^TY
W=(XTX)−1XTY
(d)什么时候可能比使用随机梯度下降更好?这种方法何时会失效?
回答: 当问题规模比较小时,直接求取解析解比使用随机梯度下降要好,当不存在解析解或规模较大,求解困难时会失效。
3、假定控制附加噪声
ϵ
\epsilon
ϵ的噪声模型是指数分布。也就是说,
p
(
ϵ
)
=
1
2
exp
(
−
∣
ϵ
∣
)
p(\epsilon) = \frac{1}{2} \exp(-|\epsilon|)
p(ϵ)=21exp(−∣ϵ∣)
(a)写出模型
−
log
P
(
y
∣
X
)
-\log P(\mathbf y \mid \mathbf X)
−logP(y∣X)下数据的负对数似然。
回答:
(b)请试着写出解析解.
回答: 如第一问,损失函数就是负对数似然,对该函数求导,得导数为
s
g
n
(
Y
−
X
W
)
X
T
sgn(Y-XW)X^T
sgn(Y−XW)XT,由于sgn(0)为跳跃点,无意义,因此导数为0无解,所以不存在解析解。
(c)提出一种随机梯度下降算法来解决这个问题。哪里可能出错?(提示:当我们不断更新参数时,在驻点附近会发生什么情况)请尝试解决这个问题。
回答: 因为梯度下降后得到的始终是一个正值,因此在靠近驻点后会发现来回跳跃的突变,可以通过降低学习率,或其他损失函数或学习率自适应的方法来改善。
二、3.2线性回归的从零开始实现
1、如果我们将权重初始化为零,会发生什么。算法仍然有效吗?
回答: 我试了一下,在这一章里还是可以实现一定程度的识别效果,但是如果在较大的网络里把权重全部设置为0,则会导致反向传播时学习到的变化都是一样的,
2、假设试图为电压和电流的关系建立一个模型。自动微分可以用来学习模型的参数吗?
回答: 可以
3、能基于普朗克定律使用光谱能量密度来确定物体的温度吗?
回答: 应该是可以的
4、计算二阶导数时可能会遇到什么问题?这些问题可以如何解决?
回答: 主要可能存在数值不稳定和计算图需要被保存这两个问题。可以通过使用更高精度的变量类型,同时使用create_graph和retain_graph来保存一阶导数的计算图。
5、为什么在squared_loss函数中需要使用reshape函数?
回答: 为了使
y
^
\hat{y}
y^和y的大小一致,从而完成运算。
6、尝试使用不同的学习率,观察损失函数值下降的快慢。
回答: 学习率如果过大,则损失函数值会发生来回波动;学习率如果太小则损失函数值下降很慢。
7、如果样本个数不能被批量大小整除,data_iter函数的行为会有什么变化?
回答: 会在读取到最后一部分数据时舍弃不足以被整除的那部分。
三、3.3线性回归的简洁实现
1、如果将小批量的总损失替换为小批量损失的平均值,需要如何更改学习率?
回答: 因为总损失变为平均值,实际上是小了一个量级,因此为了保证原来的学习速度,应该增大学习率。
2、查看深度学习框架文档,它们提供了哪些损失函数和初始化方法?用Huber损失代替原损失,即
l
(
y
,
y
′
)
=
{
∣
y
−
y
′
∣
−
σ
2
if
∣
y
−
y
′
∣
>
σ
1
2
σ
(
y
−
y
′
)
2
其它情况
l(y,y') = \begin{cases}|y-y'| -\frac{\sigma}{2} & \text{ if } |y-y'| > \sigma \\ \frac{1}{2 \sigma} (y-y')^2 & \text{ 其它情况}\end{cases}
l(y,y′)={∣y−y′∣−2σ2σ1(y−y′)2 if ∣y−y′∣>σ 其它情况
回答: 损失函数可以看这里,一共提供了21种,分别是
初始化函数可以看这里。一共提供了7种,如下:
3、如何访问线性回归的梯度?
回答: 用.grad进行访问
四、3.4softmax回归
1、我们可以更深入地探讨指数族与softmax之间的联系。
(a)计算softmax交叉熵损失
l
(
y
,
y
^
)
l(\mathbf{y},\hat{\mathbf{y}})
l(y,y^)的二阶导数。
回答: 根据公式(3.27)我们可以直接得到
l
(
y
^
,
y
)
l(\hat{y},y)
l(y^,y)的一阶函数为
l
′
(
o
j
)
=
s
o
f
t
m
a
x
(
o
)
j
−
y
j
l'(o_j)=softmax(o)_j-y_j
l′(oj)=softmax(o)j−yj
此时求二阶导数
l
′
′
(
o
j
)
=
(
s
o
f
t
m
a
x
(
o
)
j
)
′
=
(
e
x
p
(
o
j
)
∑
k
e
x
p
(
o
k
)
)
′
=
e
x
p
(
o
j
)
∑
k
e
x
p
(
o
k
)
−
e
x
p
(
o
j
)
2
(
∑
k
e
x
p
(
o
k
)
)
2
=
e
x
p
(
o
j
)
∑
k
e
x
p
(
o
k
)
−
(
e
x
p
(
o
j
)
∑
k
e
x
p
(
o
k
)
)
2
=
s
o
f
t
m
a
x
(
o
)
j
−
(
s
o
f
t
m
a
x
(
o
)
j
)
2
=
s
o
f
t
m
a
x
(
o
)
j
(
1
−
s
o
f
t
m
a
x
(
o
)
j
)
\begin{aligned} l''(o_j)&=(softmax(o)_j)'\\ &=(\frac{exp(o_j)}{\sum_{k}exp(o_k)})'\\ &=\frac{exp(o_j)\sum_{k}exp(o_k)-exp(o_j)^2}{(\sum_{k}exp(o_k))^2}\\ &=\frac{exp(o_j)}{\sum_{k}exp(o_k)}-(\frac{exp(o_j)}{\sum_{k}exp(o_k)})^2\\ &=softmax(o)_j-(softmax(o)_j)^2\\ &=softmax(o)_j(1-softmax(o)_j) \end{aligned}
l′′(oj)=(softmax(o)j)′=(∑kexp(ok)exp(oj))′=(∑kexp(ok))2exp(oj)∑kexp(ok)−exp(oj)2=∑kexp(ok)exp(oj)−(∑kexp(ok)exp(oj))2=softmax(o)j−(softmax(o)j)2=softmax(o)j(1−softmax(o)j)
(b)计算
s
o
f
t
m
a
x
(
o
)
\mathrm{softmax}(\mathbf{o})
softmax(o)给出的分布方差,并与上面计算的二阶导数匹配。
回答: 分布方差即为方差,计算公式如下:
V
a
r
=
1
k
∑
i
=
1
k
(
s
o
f
t
m
a
x
(
o
)
i
−
1
k
)
2
Var=\frac{1}{k}\sum_{i=1}^k(softmax(o)_i-\frac{1}{k})^2
Var=k1i=1∑k(softmax(o)i−k1)2
尝试过化简但会更复杂,而且也没发现和二阶导数的联系。
2、假设我们有三个类发生的概率相等,即概率向量是
(
1
3
,
1
3
,
1
3
)
(\frac{1}{3}, \frac{1}{3}, \frac{1}{3})
(31,31,31)。
(a)如果我们尝试为它设计二进制代码,有什么问题?
回答: 用2位二进制数就可以表示这三个类别,但是有一个表示被浪费了。
(b)请设计一个更好的代码。提示:如果我们尝试编码两个独立的观察结果会发生什么?如果我们联合编码
n
n
n个观测值怎么办?
回答: 可以将所有观测情况罗列出来,并且根据概率采用霍夫曼编码,这样子出现概率高的情况代码更短,降低了传输的负担。也可以直接按顺序,把每种情况对应一个数字,并用二进制来表示,这样子像第一问中多出来的表示就可以给其他情况用。
3、softmax是对上面介绍的映射的误称(虽然深度学习领域中很多人都使用这个名字)。真正的softmax被定义为
R
e
a
l
S
o
f
t
M
a
x
(
a
,
b
)
=
log
(
exp
(
a
)
+
exp
(
b
)
)
\mathrm{RealSoftMax}(a, b) = \log (\exp(a) + \exp(b))
RealSoftMax(a,b)=log(exp(a)+exp(b))。
(a)证明
R
e
a
l
S
o
f
t
M
a
x
(
a
,
b
)
>
m
a
x
(
a
,
b
)
\mathrm{RealSoftMax}(a, b) > \mathrm{max}(a, b)
RealSoftMax(a,b)>max(a,b)。
回答:
e
a
>
0
,
e
b
>
0
,所以
e
a
+
e
b
>
e
m
a
x
(
a
,
b
)
,
e^a>0,e^b>0,所以e^a+e^b>e^{max(a,b)},
ea>0,eb>0,所以ea+eb>emax(a,b),
又
l
o
g
函数为递增函数,所以
l
o
g
(
e
a
+
e
b
)
>
l
o
g
(
e
m
a
x
(
a
,
b
)
)
=
m
a
x
(
a
,
b
)
,故原式得证。
又log函数为递增函数,所以log(e^a+e^b)>log(e^{max(a,b)})=max(a,b),故原式得证。
又log函数为递增函数,所以log(ea+eb)>log(emax(a,b))=max(a,b),故原式得证。
(b)证明
λ
−
1
R
e
a
l
S
o
f
t
M
a
x
(
λ
a
,
λ
b
)
>
m
a
x
(
a
,
b
)
\lambda^{-1} \mathrm{RealSoftMax}(\lambda a, \lambda b) > \mathrm{max}(a, b)
λ−1RealSoftMax(λa,λb)>max(a,b)成立,前提是
λ
>
0
\lambda > 0
λ>0。
回答:
λ
−
1
R
e
a
l
S
o
f
t
M
a
x
(
λ
a
,
λ
b
)
=
λ
−
1
l
o
g
(
e
λ
a
+
e
λ
b
)
>
λ
−
1
l
o
g
(
e
m
a
x
(
λ
a
,
λ
b
)
)
=
l
o
g
(
e
m
a
x
(
λ
a
,
λ
b
)
λ
−
1
)
=
l
o
g
(
e
m
a
x
(
λ
a
λ
−
1
,
λ
b
λ
−
1
)
)
=
l
o
g
(
e
m
a
x
(
a
,
b
)
)
=
m
a
x
(
a
,
b
)
\begin{aligned} \lambda^{-1} \mathrm{RealSoftMax}(\lambda a, \lambda b)&=\lambda^{-1} log(e^{\lambda a}+e^{\lambda b})\\ &>\lambda^{-1} log(e^{max(\lambda a,\lambda b)})\\ &=log(e^{max(\lambda a,\lambda b)\lambda^{-1}})\\ &=log(e^{max(\lambda a\lambda^{-1},\lambda b\lambda^{-1})})\\ &=log(e^{max(a,b)})\\ &=max(a,b) \end{aligned}
λ−1RealSoftMax(λa,λb)=λ−1log(eλa+eλb)>λ−1log(emax(λa,λb))=log(emax(λa,λb)λ−1)=log(emax(λaλ−1,λbλ−1))=log(emax(a,b))=max(a,b)
当且仅当
λ
>
0
\lambda>0
λ>0时成立,否则应该是小于。
(c)证明对于
λ
→
∞
\lambda \to \infty
λ→∞,有
λ
−
1
R
e
a
l
S
o
f
t
M
a
x
(
λ
a
,
λ
b
)
→
m
a
x
(
a
,
b
)
\lambda^{-1} \mathrm{RealSoftMax}(\lambda a, \lambda b) \to \mathrm{max}(a, b)
λ−1RealSoftMax(λa,λb)→max(a,b)。
回答:
根据(
b
)可知,对于
λ
>
0
时
,
λ
−
1
R
e
a
l
S
o
f
t
M
a
x
(
λ
a
,
λ
b
)
>
m
a
x
(
a
,
b
)
根据(b)可知,对于\lambda>0时,\lambda^{-1} \mathrm{RealSoftMax}(\lambda a, \lambda b) > \mathrm{max}(a, b)
根据(b)可知,对于λ>0时,λ−1RealSoftMax(λa,λb)>max(a,b),当
λ
→
∞
\lambda \to \infty
λ→∞时此时
λ
−
1
R
e
a
l
S
o
f
t
M
a
x
(
λ
a
,
λ
b
)
→
∞
\lambda^{-1} \mathrm{RealSoftMax}(\lambda a, \lambda b) \to \infty
λ−1RealSoftMax(λa,λb)→∞。又易知
λ
−
1
l
o
g
(
e
λ
a
+
e
λ
b
)
≤
l
o
g
(
2
e
m
a
x
(
a
,
b
)
)
,仅在
a
=
b
时两者相等。故进一步推理如下:
\lambda^{-1}log(e^{\lambda a}+e^{\lambda b})≤log(2e^{max(a,b)}),仅在a=b时两者相等。故进一步推理如下:
λ−1log(eλa+eλb)≤log(2emax(a,b)),仅在a=b时两者相等。故进一步推理如下:
λ
−
1
l
o
g
(
e
λ
a
+
e
λ
b
)
≤
l
o
g
(
2
e
m
a
x
(
a
,
b
)
)
=
λ
−
1
l
o
g
(
2
e
m
a
x
(
λ
a
,
λ
b
)
)
=
λ
−
1
l
o
g
2
+
λ
−
1
l
o
g
(
e
m
a
x
(
λ
a
,
λ
b
)
)
=
l
o
g
2
λ
+
λ
−
1
m
a
x
(
λ
a
,
λ
b
)
=
l
o
g
2
λ
+
m
a
x
(
a
,
b
)
\begin{aligned} \lambda^{-1}log(e^{\lambda a}+e^{\lambda b})&≤log(2e^{max(a,b)})\\ &=\lambda^{-1}log(2e^{max(\lambda a,\lambda b)})\\ &=\lambda^{-1}log2+\lambda^{-1}log(e^{max(\lambda a,\lambda b)})\\ &=\frac{log2}{\lambda}+\lambda^{-1}max(\lambda a,\lambda b)\\ &=\frac{log2}{\lambda}+max(a,b)\\ \end{aligned}
λ−1log(eλa+eλb)≤log(2emax(a,b))=λ−1log(2emax(λa,λb))=λ−1log2+λ−1log(emax(λa,λb))=λlog2+λ−1max(λa,λb)=λlog2+max(a,b)
又
λ
→
∞
\lambda \to \infty
λ→∞,则
l
o
g
2
λ
→
0
\frac{log2}{\lambda}\to 0
λlog2→0,根据夹逼定理,
λ
→
∞
\lambda \to \infty
λ→∞时,
λ
−
1
l
o
g
(
e
λ
a
+
e
λ
b
)
→
m
a
x
(
a
,
b
)
\lambda^{-1}log(e^{\lambda a}+e^{\lambda b}) \to max(a,b)
λ−1log(eλa+eλb)→max(a,b)。原式得证。
(d)soft-min会是什么样子?
回答: 这里的话想要将softmax修改为softmin,即当计算数值最大时归一化后的概率最小,则使用负号即可,式子如下:
s
o
f
t
m
i
n
(
o
)
=
e
x
p
(
−
o
j
)
∑
k
e
x
p
(
−
o
k
)
softmin(o) = \frac{exp(-o_j)}{\sum_{k}exp(-o_k)}
softmin(o)=∑kexp(−ok)exp(−oj)
(e)将其扩展到两个以上的数字。
回答:
R
e
a
l
S
o
f
t
M
a
x
(
a
,
b
,
c
,
⋯
)
=
log
(
exp
(
a
)
+
exp
(
b
)
+
exp
(
c
)
+
⋯
)
\mathrm{RealSoftMax}(a, b, c,\cdots) = \log (\exp(a) + \exp(b)+\exp(c)+\cdots)
RealSoftMax(a,b,c,⋯)=log(exp(a)+exp(b)+exp(c)+⋯)。
五、3.5图像分类数据集
1、减少batch_size(如减少到1)是否会影响读取性能?
回答: 会,读取时间会增大,本身训练是需要将所有数据都用一次的,batch_size的减少会导致整个读取时间的上升。如batch_size为256时,读取时间为2.78s,但改为1后为18.91s。
2、数据迭代器的性能非常重要。当前的实现足够快吗?探索各种选择来改进它。
回答: 目前的还可以了,从这里面来看,主要可以调整的参数直观看有2个,一个是进程数,一个是batch_size,但是batch_size是人为设定的,根据实际需求来决定。而进程数主要要看硬件设备,这里稍微增大进程数可以稍稍提升一点速度但并不明显。而data.DataLoader函数还有一个参数pin_memory,通过将这个参数设为True,数据加载器会将数据存储在 CUDA 固定内存上,可以加速 GPU 上的数据传输。
3、查阅框架的在线API文档。还有哪些其他数据集可用?
回答: 有48个,具体可见这里
六、3.6softmax回归的从零开始实现
1、本节直接实现了基于数学定义softmax运算的softmax函数。这可能会导致什么问题?提示:尝试计算 exp(50)的大小。
回答: 存在数值上溢的可能性
2、本节中的函数cross_entropy是根据交叉熵损失函数的定义实现的。它可能有什么问题?提示:考虑对数的定义域。
回答: log函数的定义域不包括0,但这里面直接根据定义实现可能会使得需要求解log0,存在数值下溢。
3、请想一个解决方案来解决上述两个问题。
回答: 这个问题在第3.7.2章节中被解决了,主要是根据式子3.30和3.31进行求解。其中第一个问题是从所有的
o
k
o_k
ok中减去max(
o
k
o_k
ok),而解决第二个问题则是避免计算exp(
o
j
o_j
oj-max(
o
k
o_k
ok)),而是直接计算
o
j
−
m
a
x
(
o
k
)
o_j-max(o_k)
oj−max(ok)
4、返回概率最大的分类标签总是最优解吗?例如,医疗诊断场景下可以这样做吗?
回答: 不一定,尤其是医疗场景下需要权衡各种情况,诊断场景下更关注误诊率和漏诊率等其他因素,因此不一定会直接选取返回概率最大的分类标签。
5、假设我们使用softmax回归来预测下一个单词,可选取的单词数目过多可能会带来哪些问题?
回答: 最重要的是每个单词的概率都会很小,其实这个预测的意义和准确性就没有多少了。
七、3.7softmax回归的简洁实现
1、尝试调整超参数,例如批量大小、迭代周期数和学习率,并查看结果。
回答:
未修改前的结果如下图:
只修改批量大小为512,可以看到损失函数发生了变化
只修改批量大小为128,主要也是损失函数发生了变化
只修改迭代周期为20,损失和准确率都趋于平稳
只修改迭代周期为5,感觉就是上面的四分之一的图,变化不大
只修改学习率为1,直接崩了,只显示出来这两条曲线
只修改学习率为0.01,也崩了,但好歹图画出来了。可以明显发现损失函数下降比之前要迟缓很多。
2、增加迭代周期的数量。为什么测试精度会在一段时间后降低?我们怎么解决这个问题?
回答: 迭代周期的数量过大的情况下,会存在过拟合的现象从而使得测试精度下降。这个时候可以通过dropout或其他正则化手段来避免过拟合,也可以通过增加训练数据的方式。