1.多层感知机与布尔函数
问题1:多层感知机表示异或逻辑时最少需要几个隐含层(仅考虑二元输入)?
答:一层
问题2:如果只是用一个隐层,需要多少隐节点能够实现包含n元输入的任意布尔函数?
答:
问题3:考虑多隐层的情况,实现包含n元输入的任意布尔函数最少需要多少个网络节点和网络层?
答:
2.深度神经网络中的激活函数
问题1:写出常用激活函数及其导数?
答:
(1)sigmoid
,
(2)tanh
,
(3)relu
,
问题2:为什么Sigmoid和Tanh激活函数会导致梯度消失的现象?
答:
(1)sigmoid函数将输入z映射到(0,1),当z很大时,f(z)约等于1;当z很小时,f(z)约等于0. 其导数等于0,因为斜率为0.导致梯度消失
(2)tanh函数和sigmoid函数差不多。当z很大时,f(z)约等于1;当z很小时,f(z)约等于-1.其导数也是等于0.其实
问题3:Relu系列的激活函数相对于Sigmoid和Tanh激活函数的优点是什么?他们有什么局限性以及如何改进?
答:
优点
(1)sigmoid和tanh都需要计算指数,复杂度高
(2)Relu的非饱和性可以有效地解决梯度消失问题,提供相对宽的激活边界
(3)Relu的单侧抑制提供了网络的稀疏表达能力
局限性
relu的局限性在于其训练过程中会导致神经元死亡
改进方法leaky relu
3.多层感知机的反向传播算法
问题1:写出多层感知机的平方误差和交叉熵损失函数
答:给定包含m个样本的集合
平方误差的整体代价函数为
交叉熵损失函数(二分类)
第一项衡量了预测o与真实值y之间的交叉熵,当y与o相等时,熵最大,也就是损失函数达到最小。
交叉熵损失函数(多分类)
oi 代表第i个样本的预测属于类别k的概率,y为实际的概率。
问题2:根据问题1中定义的损失函数,推导各层参数更新的梯度计算公式
答:
问题3:平方误差损失函数和交叉熵损失函数分别适合什么场景?
答:平方损失函数更适合输出为连续,并且最后一层不含Sigmoid或Softmax激活函数的神经网络;交叉熵损失适合二分类或多分类的场景。
平方误差损失函数的最后一层为sigmodi的话,梯度会趋于饱和,使得学习速度非常的缓慢。
4.神经网络训练技巧
问题1:神经网络训练时是否可以将全部参数初始化为0?
答:如果参数全部初始化为同样的值,那么无论前向传播还是反向传播的取值都是完全相同的。学习过程将永远无法打破这种对称性,因此需要随机的初始化神经网络参数的值,初始化参数的取值范围的均匀分布,其中d是一个神经元接受的输入维度。偏执可以设置为0
问题2:为什么Dropout可以抑制过拟合?他的工作原理和实现?
答:Dropout作用于每次小批量训练数据,由于其随机丢弃部分神经元的机制,相当于每次迭代都在训练不同结构的神经网络。
Dropout的具体实现中,要求某个神经元节点激活值以一定的概率p被丢弃。因此对于包含N个神经元节点的网络,在Dropout的作用下可看作2^N个模型的集成。
训练阶段,每个神经元节点增加一个概率系数
测试阶段,每个神经元参数预先乘以概率p
问题3:批量归一化的基本动机与原理是什么?在卷积神经网络中如何使用?
答:神经网络训练过程的本质是学习数据分布,如果训练数据与测试数据的分布不同将大大降低网络的泛化能力,因此需要对所有输入数据进行归一化处理。然而随着训练的进行,每个隐层的参数变化使得后一层的输入发生变化,从而每一批训练数据的分布也随之改变,增大训练的复杂度以及过拟合风险。
批量归一化,是在网络的每一层输入之前增加归一化处理(均值为0,标准差为1),将所有批次数据强制在统一的数据分布下,对该层的任意神经元(假设为第k维)
其中x^k 维该层第k个神经元的原始输入数据,
批量归一化可以看做在每一层输入和上一层输出之间加入了一个新的计算层,对数据的分布进行额外的约束,从而增加模型的泛化能力。但是批量归一化同时也降低了模型的拟合能力,一sigmoid为例,批量归一化的数据分布在【0,1】之间,只包含中间的线性部分,破花了之前学到的特征分布。为了恢复原始数据分布,引用了变换重构以及可学习参数
,其中分别为输入数据分布的方差和偏差。