邱锡鹏《神经网络与深度学习》—— 部分习题答案整理

《nndl》链接


第二章

习题2-1

分析为什么平方损失函数不适用于分类问题

解答:在使用One-Hot编码表示分类问题的真实标签的情况下,我们使用平方损失函数计算模型的预测损失时会计算预测标签中每一个类别的可能性与真实标签之间的差距。
若我们想要得到更小的损失则需要模型预测得到的预测标签整体与One-Hot编码的真实标签相近,这对于模型来说计算精度要求过高,在分类我们上我们往往只关注模型对数据的真实类别的预测概率而不关注对其他类别的预测概率。所以对分类问题来说,平方损失函数不太适用。


习题2-2

习题2

1问解答:要获得最优的参数𝒘∗,那么就需要使风险函数取得最小值,ℛ(𝒘)为凸函数,则在导数为0处取得最小值求导得
习题2解答
2问解答:局部线性回归可以实现对临近点的精确拟合同时忽略那些距离较远的点的贡献,即近点的权值大,远点的权值小。越小越精确并且太小可能出现过拟合的问题。但局部线性回归不会得到一条适合于全局的函数模型,在每一次预测新样本时都会重新的确定参数,从而达到更好的预测效果。


2问课堂解答:两个方向:

1、r(n)的作用是改变采样数据的概率分布,达到基于先验的效果
2、r(n)用来修改噪声点的损失权重,是线性模型的拟合效果提高


习题2-3

证明在线性回归中,如果样本数量𝑁小于特征数量𝐷+1,则𝑿𝑿T的秩最大为𝑁。

解答:𝑿为(𝐷+1, 𝑁)形状的矩阵,其秩rank(𝑿)最大为min(𝐷+1, 𝑁),由题意得rank(𝑿) ≤ 𝑁,则rank(𝑿T) ≤ 𝑁
由定理得 rank(𝑿𝑿T) ≤ min{rank(𝑿), rank(𝑿T)} = 𝑁
所以𝑿𝑿T的秩最大为𝑁


习题2-4

在线性回归中,验证岭回归的解为结构风险最小化准则下的最小二乘法估计。

解答
在这里插入图片描述


习题2-5

在线性回归中,若假设标签 𝑦 ∼ 𝒩(𝒘T𝒙, 𝛽),并用最大似然估计来优化参数,验证最优参数为公式(2.52)的解。

解答:常数对𝒘求导为0
在这里插入图片描述


习题2-6

假设有 𝑁 个样本 𝑥(1), 𝑥(2), ⋯ , 𝑥(𝑁) 服从正态分布 𝒩(𝜇, 𝜎2),其中 𝜇 未知.
1)使用最大似然估计来求解最优参数𝜇𝑀𝐿
2)若参数𝜇为随机变量,并服从正态分布𝒩(𝜇0, 𝜎20),使用最大后验估计来求解最优参数𝜇𝑀𝐴𝑃

1问解答
在这里插入图片描述
2问解答
在这里插入图片描述


习题2-7

在习题2-6中,证明当𝑁 → ∞时,最大后验估计趋向于最大似然估计。

解答
在这里插入图片描述


习题2-8

验证公式(2.61)。

解答
在这里插入图片描述


习题2-9

试分析什么因素会导致模型出现图2.6所示的高偏差和高方差情况

解答:一般来说,当一个模型在训练集上的错误率比较高时,说明模型的拟合能力不够,偏差比较高.这种情况可以通过增加数据特征、提高模型复杂度、减小正则化系数等操作来改进.当模型在训练集上的错误率比较低,但验证集上的错误率比较高时,说明模型过拟合,方差比较高.这种情况可以通过降低模型复杂度、加大正则化系数、引入先验等方法来缓解.此外,还有一种有效降低方差的方法为集成模型,即通过多个高方差模型的平均来降低方差.


课堂解答后思考
假设:模型是通过不同的训练集进行训练的,各个模型在测试集上的表现差异类比成了打靶的效果。
方差表示了各个模型在测试集上的差异,如果点越集中,那就说明训练出来的模型相对稳定。
而偏差则表示了各个模型在测试集上的预测精度,如果点处于靶心部分,那么说明模型的预测效果相对较好。
我认为影响模型的方差和偏差是训练数据和模型训练过程的共同作用结果。
例如图(b)的情况,可能是模型很稳定,但是采样的训练数据集没有很好反应数据的分布,所以使得偏差很高。订哪也有可能是因为所有模型拟合的误差极大,不论训练数据集的好坏,模型在测试集上的预测结果都很差。
所以分析产生图(a)(b)©(d)四种情况的原因都需要考虑这数据和模型这两方面的影响。


习题2-10

验证公式(2.66)

解答:
在这里插入图片描述


习题2-11

分别用一元、二元和三元特征的词袋模型表示文本“我打了张三”和“张三打了我”,并分析不同模型的优缺点。

解答
一元 - “我”, “打了”, “张三”

x1 = [1 1 1]T

x2 = [1 1 1]T

二元 - “我”, “我打了”, “打了张三”, “张三打了”, “打了我”, “张三”

x1 = [1 1 1 0 0 1]T

x2 = [1 0 0 1 1 1]T

三元 - “我”, “我打了张三” “张三打了我”, “张三”

x1 = [1 1 0 1]T

x2 = [1 0 1 1]T

当n增长时,计算压力和参数空间会迅速增长。n越大,数据越稀疏。然而,当n很小的时候,例一元模型,仅仅只是根据当前一个字来判断下一个字可能是什么,未免有失偏颇。


习题2-12

对于一个三分类问题,数据集的真实标签和模型的预测标签如下:
在这里插入图片描述
分别计算模型的精确率、召回率、F1值以及它们的宏平均和微平均

解答
𝒫1 = 1÷2 = 0.5
𝒫2 = 2÷4 = 0.5
𝒫3 = 2÷3 = 0.67

1 = 1÷2 = 0.5
2 = 2÷3 = 0.67
3 = 2÷4 = 0.5

1 = (2×0.5×0.5)÷(0.5+0.5) = 0.5
2 = (2×0.5×0.67)÷(0.5+0.67) = 4÷7 = 0.57
3 = (2×0.67×0.5)÷(0.67+0.5) = 4÷7 = 0.57

𝒫𝑚𝑎𝑐𝑟𝑜 = (0.5+0.5+0.67)÷3 = 5÷9 = 0.56
ℛ𝑚𝑎𝑐𝑟𝑜 = (0.5+0.5+0.67)÷3 = 5÷9 = 0.56
ℱ1𝑚𝑎𝑐𝑟𝑜 = (2×0.56×0.56)÷(0.56+0.56) = 0.56

𝒫micro = 5÷9 = 0.56
micro = 5÷9 = 0.56
1micro = (2×0.56×0.56)÷(0.56+0.56) = 0.56


第三章

习题3-1

证明在两类线性分类中,权重向量𝒘与决策平面正交。

解答在这里插入图片描述


习题3-2

在线性空间中,证明一个点𝒙到平面𝑓(𝒙; 𝒘) = 𝒘T𝒙 + 𝑏 = 0的距离为|𝑓(𝒙; 𝒘)|/‖𝒘‖。

解答在这里插入图片描述


习题3-3

①在线性分类中,决策区域是凸的.②即若点 𝒙1 和 𝒙2 被分为类别𝑐,则点𝜌𝒙1 + (1−𝜌)𝒙2 也会被分为类别𝑐,其中𝜌∈(0,1)。

解答
问题其实是要证明第一句话,那么我们只需要证明对于所有的𝒙1 和 𝒙2都有第二句话成立就行
对于𝒙1,有 argmax(𝑓(𝒙1;𝒘)) = c
又因为是线性分类,所有必有argmax(𝑓(𝜌𝒙1;𝒘)) = c
同理可得argmax(𝑓((1-𝜌)𝒙2;𝒘)) = c
则argmax(𝑓(𝜌𝒙1 + (1−𝜌)𝒙2;𝒘) = argmax(𝑓(𝜌𝒙1;𝒘)) + argmax(𝑓((1-𝜌)𝒙2;𝒘)) = c


习题3-4

给定一个多分类的数据集,证明:
1)如果数据集中每个类的样本都和除该类之外的样本是线性可分的,则该数据集一定是线性可分的;
2)如果数据集中每两个类的样本是线性可分的,则该数据集不一定是线性可分的.

1问解答
假设样本的类别数为C,则构造C个权重向量𝒘
因为数据集中的每个类的样本和除该类之外的样本是线性可分的,所以对于每一类c都使其学的唯一权重向量𝒘c,使得𝑓(𝒙;𝒘c)大于其他C-1个𝑓(𝒙;𝒘n)。因此根据定义3.2可得该数据集一定是线性可分的。
2问解答
假设样本的类别数为C,则需要构造C(C-1)/2个权重向量𝒘
若想单独分出一类样本c,则使用C-1个权重向量可以将其他样本与c类样本区分开来。
但是想要在分出c类样本的基础上分出d类,则需要考虑划分d类与其他样本的C-1个权重向量与c类的那C-1个权重向量是否划分出了不可判断区域,也就是我们无法保证这些向量相交于一点。所以样本不一定线性可分。


课堂解答后思考
1问解答
在这里插入图片描述
2问解答
无解。。。


习题3-5

在Logistic回归中,是否可以用 ̂𝑦 = 𝜎(𝒘T𝒙)去逼近正确的标签𝑦,并用平方损失(𝑦 − ̂𝑦)2最小化来优化参数𝒘?

解答
可以用,但没必要。习题2-1已解释。如果觉得有问题,我换个角度给你解释。在这里插入图片描述


习题3-6

在 Softmax 回归的风险函数(公式 (3.39))中,如果加上正则化项会有什么影响?

解答(作者文中解答):
Softmax回归中使用的𝐶个权重向量是冗余的,即对所有的权重向量都减去一个同样的向量 𝒗,不改变其输出结果。因此,Softmax回归往往需要使用正则化来约束其参数。此外,我们还可以利用这个特性来避免计算Softmax函数时在数值计算上溢出问题


习题3-7

验证平均感知器训练算法3.2中给出的平均权重向量的计算方式和公式(3.77)等价.


习题3-8

证明定理3.2.


习题3-9

若数据集线性可分,证明支持向量机中将两类样本正确分开的最大间隔分割超平面存在且唯一.


习题3-10

验证公式(3.97)

解答
在这里插入图片描述


习题3-11

在软间隔支持向量机中,试给出原始优化问题的对偶问题,并列出其KKT条件.


第四章

习题4-1

对于一个神经元𝜎(𝒘T𝒙 + 𝑏),并使用梯度下降优化参数𝒘时,如果输入𝒙恒大于0,其收敛速度会比零均值化的输入更慢.

解答
如果输入的𝒙恒大于0,那么在反向传播回传到w上的梯度将要么全部为正要么全部为负,得到的梯度用于权重更新的时候,不是平缓地迭代变化,而总是朝着某同一方向变化,是类似锯齿状的突变。
在这里插入图片描述


习题4-2

试设计一个前馈神经网络来解决XOR问题,要求该前馈神经网络具有两个隐藏神经元和一个输出神经元,并使用ReLU作为激活函数.

解答
在这里插入图片描述


习题4-3

试举例说明“死亡ReLU问题”,并提出解决方法.

解答:
在这里插入图片描述

解决办法

  1. 使用带泄露的ReLU
  2. 使用带参数的ReLU
  3. 使用正则项约束参数
  4. 使用其他方式训练网络,例如Adam

习题4-4

计算Swish函数和GELU函数的导数.


习题4-5

如果限制一个神经网络的总神经元数量(不考虑输入层)为 𝑁 + 1,输入层大小为 𝑀0,输出层大小为 1,隐藏层的层数为𝐿,每个隐藏层的神经元数量为𝑁/𝐿,试分析参数数量和隐藏层层数𝐿的关系.

解答
若有𝐿层隐藏层,易得用于连接输入至输出的参数矩阵共有𝐿+1层。
对于全连接网络,每一个隐藏层中的单个神经元都会与前一层的所有输出产生连接,并且每一个神经元都带有偏置。
连接输入层与第一个隐藏层的参数量为𝑀0 × 𝑁 ÷ 𝐿
隐藏层内部连接的参数量为(𝐿-1) × 𝑁2 ÷ 𝐿2
连接𝐿层隐藏层和输出层的参数量为𝑁 ÷ 𝐿
偏置层参数量为N
参数量 M = 𝑀0 × 𝑁 ÷ 𝐿 + (𝐿-1) × 𝑁2 ÷ 𝐿2 + 𝑁 ÷ 𝐿 + N


习题4-6

证明通用近似定理对于具有线性输出层和至少一个使用 ReLU 激活函数的隐藏层组成的前馈神经网络,也都是适用的.


习题4-7

为什么在神经网络模型的结构化风险函数中不对偏置𝒃进行正则化?

解答
正则化的作用是为了限制模型的复杂度避免模型过拟合,提高模型的泛化能力。
对于某个神经元的输入来说,input = w(0)x(0) + w(1)x(1) + w(2)x(2) + ······ + b
对于样本特征向量X,其对input的贡献只与权重向量W有关。
W向量中的值都很大,若特征向量X中的值发生细微的变化会导致input值的突变。
这就导致了模型的不稳定,所有我们希望得到较小的权重值。而偏置b对于所有输入样本来说都是一致的,是一个不变量,所以不需要考虑对B进行正则化。


习题4-8

为什么在用反向传播算法进行参数学习时要采用随机参数初始化的方式而不是直接令𝑾 = 0, 𝒃 = 0?

解答
若将𝑾和𝒃都初始化为0,则在输入层之后的所有隐藏层神经元接收到的输入都是一样的,那么在使用反向传播算法进行梯度的传递时,每一隐藏层的权重梯度值都是相同的,这就导致了权重只能向同一方向下降,这和问题4-1有一定的相似性,只不过是从权重和偏置方面导致了输入X值的非零均值化(更极端的是所有值相同)。


习题4-9

梯度消失问题是否可以通过增加学习率来缓解?

解答
分情况,在深层神经网络的浅层如果使用较大的学习率可能会导致模型跨过全局最优点而进入局部最优点。
但在网络的深层使用较大的学习率则可以保证网络的参数仍然在被更新,以达到更好的学习效果。
在这里插入图片描述


第五章

习题5-1

1)证明公式(5.6)可以近似为离散信号序列𝑥(𝑡)关于𝑡的二阶微分;
2)对于二维卷积,设计一种滤波器来近似实现对二维输入信号的二阶微分.

1问解答
在这里插入图片描述

2问解答
在这里插入图片描述


习题5-3

分析卷积神经网络中用1×1的卷积核的作用。

解答
1×1的卷积核在实际应用中类似于一根截面积为1个像素的正方形管道,用来贯穿整个输入特征。每个1×1的卷积核都试图提取基于相同像素位置的特征的融合表达。可以实现特征升维和降维的目的。并且增加了网络的非线性,提高拟合能力。


习题5-4

对于一个输入为100×100×256的特征映射组,使用3×3的卷积核,输出为100×100×256的特征映射组的卷积层,求其时间和空间复杂度.如果引入一个1×1卷积核,先得到100×100×64的特征映射,再进行3×3的卷积,得到100×100×256的特征映射组,求其时间和空间复杂度。

解答
时间复杂度一:256×100×100×256×3×3 = 5,898,240,000

for o in range(256):
   for x in range(100):
       for y in range(100):
           for kl in range(256):
               output[x][y] = 0
               for km in range(3):
                   for kn in range(3):
                       output[x][y] += k[o][kl][km][kn] * f[kl][x-1+km][y-1+kn]

空间复杂度一:256×100×100 = 2,560,000
时间复杂度二:64×100×100×256 + 256×100×100×64×3×3 = 1,638,400,000

for o in range(64):
   for x in range(100):
       for y in range(100):
          for kl in range(256):
               output1[x][y] += k[o][kl] * f[kl][x][y]             
       
for o in range(256):
   for x in range(100):
       for y in range(100):
           for kl in range(64):
               for km in range(3):
                   for kn in range(3):
                       output[x][y] += k[o][kl][km][kn] * output1[kl][x-1+km][y-1+kn]

空间复杂度二:64×100×100 + 256×100×100 = 3,200,000


第六章

习题6-1

分析延时神经网络、卷积神经网络和循环神经网络的异同点。

解答
循环神经网络和延时神经网络都需要基于前几个时刻的输出状态,而循环神经网络是基于前几个时刻的输出状态,延时神经网络是基于前几层的激活值,都带有一定的记忆功能。
对于CNN、RNN、TDNN这三类网络而言,他们都共享了权重,CNN在空间上,TDNN和RNN在时间上。


习题6-2

推导公式(6.40)和公式(6.41)中的梯度。

解答
在这里插入图片描述


习题6-3

当使用公式(6.50)作为循环神经网络的状态更新公式时,分析其可能存在梯度爆炸的原因并给出解决方法。

解答
若使用zk = Uhk-1 + Wxk + b 作为k时刻g(·)的输入,那么在对其求导时,ht与ht-1的权重系数就会超过1.
在这里插入图片描述

总结

每次上完课会同步更新,争取把总结正确的答案。

  • 91
    点赞
  • 697
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
好的,以下是一道简单的神经网络深度学习编程题: 使用Keras或TensorFlow搭建一个简单的全连接神经网络,用于对手写数字进行分类。数据集使用MNIST数据集(已经包含在Keras中),使用softmax作为最后一层的激活函数。请编写代码,并输出模型在测试集上的准确率。 以下是代码示例: ```python import tensorflow as tf from tensorflow import keras import matplotlib.pyplot as plt # 加载MNIST数据集 mnist = keras.datasets.mnist (train_images, train_labels), (test_images, test_labels) = mnist.load_data() # 将图像像素值归一化 train_images = train_images / 255.0 test_images = test_images / 255.0 # 定义模型 model = keras.Sequential([ keras.layers.Flatten(input_shape=(28, 28)), # 将图像展平为一维向量 keras.layers.Dense(128, activation='relu'), # 第一层全连接层,128个神经元 keras.layers.Dense(10, activation='softmax') # 最后一层全连接层,10个神经元,使用softmax激活函数 ]) # 编译模型,定义损失函数、优化器和评估指标 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 训练模型 history = model.fit(train_images, train_labels, epochs=10, validation_split=0.2) # 在测试集上评估模型准确率 test_loss, test_acc = model.evaluate(test_images, test_labels) print('Test accuracy:', test_acc) ``` 输出结果应为: ``` Test accuracy: 0.9827 ``` 以上是一个简单的全连接神经网络的代码示例,使用了Keras和TensorFlow框架。此题的难度较低,适合初学者练习使用神经网络进行分类任务。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值