《动手学深度学习》练习—第三章线性神经网络

一、3.1线性回归

1、假设我们有一些数据 𝑥 1 _1 1,…,𝑥 n _n n∈ℝ 。我们的目标是找到一个常数 𝑏,使得最小化 ∑ i ( x i − b ) 2 _i(x_i−b)^2 i(xib)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^Y22=min2n1∣∣XWY22
(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∣∣XWY22=2n1(XWY)T(XWY)=2n1(WTXTYT)(XWY)=2n1(WTXTXWYTXWWTXTY+YTY)=2n1(WTXTXW2YTXW+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} WL=2n1(2XTXW2YTX)=n1(XTXWYTX)
(c)通过将梯度设为0、求解矩阵方程来找到解析解。
回答: 令梯度为0,则 X T X W − Y T X = 0 X^TXW-Y^TX=0 XTXWYTX=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(yX)下数据的负对数似然。
回答:
在这里插入图片描述

(b)请试着写出解析解.
回答: 如第一问,损失函数就是负对数似然,对该函数求导,得导数为 s g n ( Y − X W ) X T sgn(Y-XW)X^T sgn(YXW)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)={yy2σ2σ1(yy)2 if yy>σ 其它情况

回答: 损失函数可以看这里,一共提供了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)jyj
此时求二阶导数 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(1softmax(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=1k(softmax(o)ik1)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>0eb>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 λlog20,根据夹逼定理, λ → ∞ \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) ojmax(ok)
4、返回概率最大的分类标签总是最优解吗?例如,医疗诊断场景下可以这样做吗?
回答: 不一定,尤其是医疗场景下需要权衡各种情况,诊断场景下更关注误诊率和漏诊率等其他因素,因此不一定会直接选取返回概率最大的分类标签。
5、假设我们使用softmax回归来预测下一个单词,可选取的单词数目过多可能会带来哪些问题?
回答: 最重要的是每个单词的概率都会很小,其实这个预测的意义和准确性就没有多少了。

七、3.7softmax回归的简洁实现

1、尝试调整超参数,例如批量大小、迭代周期数和学习率,并查看结果。
回答:
未修改前的结果如下图:
在这里插入图片描述
只修改批量大小为512,可以看到损失函数发生了变化
在这里插入图片描述
只修改批量大小为128,主要也是损失函数发生了变化
在这里插入图片描述
只修改迭代周期为20,损失和准确率都趋于平稳
在这里插入图片描述
只修改迭代周期为5,感觉就是上面的四分之一的图,变化不大
在这里插入图片描述
只修改学习率为1,直接崩了,只显示出来这两条曲线
在这里插入图片描述
只修改学习率为0.01,也崩了,但好歹图画出来了。可以明显发现损失函数下降比之前要迟缓很多。
在这里插入图片描述
2、增加迭代周期的数量。为什么测试精度会在一段时间后降低?我们怎么解决这个问题?
回答: 迭代周期的数量过大的情况下,会存在过拟合的现象从而使得测试精度下降。这个时候可以通过dropout或其他正则化手段来避免过拟合,也可以通过增加训练数据的方式。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值