葫芦书笔记----前向神经网络
前向神经网络
多层感知机与布尔函数
多层感知机表示疑惑逻辑时最少需要几个隐含层(仅考虑二元输入)?
速记:一个。
详细:设具有0个隐藏层的情况(等同于逻辑回归)。仅考虑二元输入的情况,设X的取值为0或1,Y的取值也为0或1,Z为异或运算的输出。
逻辑回归公式如下:
Z
=
s
i
g
m
o
i
d
(
A
X
+
B
Y
+
C
)
Z=sigmoid(AX+BY+C)
Z=sigmoid(AX+BY+C)
其中Sigmoid**函数是单调递增的:
当AX+BY+C的取值增大时,Z的取值也增 大;当AX+BY+C的取值减少时,Z的取值也减小。而AX+BY+C对于X和Y的变化也 是单调的,
当参数A为正数时,AX+BY+C以及Z的取值随X单调递增;
当A取负数 时,AX+BY+C和Z随X单调递减;
当参数A为0时,Z的值与X无关。
观察异或运算的真值表,当Y=0时,将X的取值从0变到1将使输出Z也从0变为1,说明此时Z的变化 与X是正相关的,需要设置A为正数;
而当Y=1时,将X的取值从0变为1将导致输出 Z从1变为0,此时Z与X是负相关的,需要设置A为负数,与前面矛盾。因此,采用 逻辑回归(即不带隐藏层的感知机)无法精确学习出一个输出为异或的模型表示。
加一个隐藏层可以用来判断XY是否都为0或1。
如果只是用一个隐层,需要多少隐节点能够实现包含n元输入的任意布尔函数?
速记: 2 n − 1 2^{n-1} 2n−1个
考虑多隐层的情况,实现包含n元输入的任意布尔函数最少需要多少个网络节点或网络层?
速记:3(n-1)个节点, 2 log 2 N 2 \log_2N 2log2N向上取整层
深度神经网络中的**函数
常用**函数
速记:sigmiod、ReLU
详细:
s
i
g
m
o
i
d
(
z
)
=
1
1
+
e
x
p
(
−
z
)
sigmoid(z)=\frac{1}{1+exp(-z)}
sigmoid(z)=1+exp(−z)1
R e L U ( z ) = m a x ( 0 , z ) ReLU(z)=max(0,z) ReLU(z)=max(0,z)
T a n h ( z ) = t a n h ( z ) = e z − e − z e z + e − z Tanh(z)=tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}} Tanh(z)=tanh(z)=ez+e−zez−e−z
为什么Sigmoid和Tanh**函数会导致梯度消失的现象?
速记:导数在输入很大或很小时都会趋于0。
详细 :
t
a
n
h
(
x
)
=
2
s
i
g
m
o
i
d
(
2
x
)
−
1
tanh(x)=2sigmoid(2x)-1
tanh(x)=2sigmoid(2x)−1
如图可见,在输入很大或很小时,导数趋于0,因此梯度消失了。
ReLU系列的**函数相对于Sigmoid和Tanh**函数有什么优点?它们有什么局限性以及如何改进?
速记:计算简单,解决梯度消失问题,提供网络的稀疏表达能力。局限:导致神经元死亡问题。
详细:
优点:
- 计算简单,只需一个阈值即可得到**值。
- ReLUctant的非把薄荷性可以有效地解决梯度消失的问题,提供相对宽的**边界。
- ReLU的单侧抑制提供了网络的稀疏表达能力。
局限性:
ReLU训练过程中会导致神经元死亡的问题。因为函数 f ( z ) = m a x ( 0 , z ) f(z)=max(0,z) f(z)=max(0,z)导致负梯度在经过该ReLU单元时被置为0,且在之后也不会被任何数据**,即流经该神经元的梯度永远为0.
为解决这一问题,可以使用Leaky ReLU,其形式i表示为:
f
(
z
)
=
{
z
,
z
>
0
a
z
,
z
≤
0
f(z)= \begin{cases} z,z>0\\ az,z\le0 \end{cases}
f(z)={z,z>0az,z≤0
类似的还有PReLU顿号Random ReLU。
多层感知机的反向传播算法
速记:核心就是链式法则。
写出多层感知机的平方误差和交叉熵损失函数。
特别地,平方误差那的二分之一是为了抵消求导后的2加的。
平方误差损失函数和交叉熵损失函数分布适合什么场景?
速记:平方损失函数更适合输出是连续的,交叉熵适合分类。
详细:平方误差损失函数更适合输出为连续,且最后一层不含Sigmoid或Softmax**函数的神经网络;交叉熵损失则更适合二分零或者多酚类的场景。
在反向传播时,平方误差损失函数相对于输出层的导数:
δ
(
L
)
=
−
(
y
−
a
(
L
)
)
f
′
(
z
(
L
)
)
\delta^{(L)}=-(y-a^{(L)})f'(z^{(L)})
δ(L)=−(y−a(L))f′(z(L))
其中
f
′
(
z
(
L
)
)
f'(z^{(L)})
f′(z(L))为**函数的导数。当**函数为Sigmoid函数时,如果
z
(
L
)
z^{(L)}
z(L)的绝对值较大,函数的梯度会居于饱和,即
f
′
(
z
(
L
)
)
f'(z^{(L)})
f′(z(L))的绝对值非擦汗给你小,导致
δ
(
L
)
\delta^{(L)}
δ(L)也非常小。
神经网络训练技巧
在训练神经网络时,经常会出现“过拟合”的问题,解决方法有很多,包括数据集增强 (Data Augmentation)、参数范数惩罚/正则化(Regularization)、模型集成 (Model Ensemble)等;其中Dropout是模型集成方法中最高效与常用的技巧。
神经网络训练时是否可以将全部参数初始化为0?
速记:雅蠛蝶~~❤
详细:在全连接的深度神经网络中,同一层中的任意神经元都是同构的,它们拥有相同的输入和输出,如果将参数初始化为同样的值,那么无论前向传播还是反向传播的取值都是完全相同的。最终2同一网络层中的各个参数仍然是相同的。偏置可以全为0.
为什么dropout可以抑制过拟合?它的工作原理和实现?
速记:Dropout是指在深度网络的训练中,以一定的概率随机地 “临时丢弃”一部分神 经元节点。
详细:具体来讲,Dropout作用于每份小批量训练数据,由于其随机丢弃部分 神经元的机制,相当于每次迭代都在训练不同结构的神经网络。类比于Bagging方 法,Dropout可被认为是一种实用的大规模深度神经网络的模型集成算法。这是由 于传统意义上的Bagging涉及多个模型的同时训练与测试评估,当网络与参数规模 庞大时,这种集成方式需要消耗大量的运算时间与空间。Dropout在小批量级别上 的操作,提供了一种轻量级的Bagging集成近似,能够实现指数级数量神经网络的 训练与评测。
批量归一化的基本动机与原理是什么?在卷积神经网络中如何使用?
速记:增强泛化能力。
详细:批量归一化可以看作在每一层输入和上一层输出之间加入了一个新的计算 层,对数据的分布进行额外的约束,从而增强模型的泛化能力。但是批量归一化 同时也降低了模型的拟合能力。
批量归一化在卷积神经网络中应用时,需要注意卷积神经网络的参数共享机 制。每一个卷积核的参数在不同位置的神经元当中是共享的,因此也应该被一起 归一化。