如果我们初始化神经网络的权值为
[
0
,
1
]
[0,1]
[0,1]之间的随机值,由反向传播算法的数学推导可知,梯度从后向前传播时,每传递一层梯度值都会减小为原来的0.25倍,如果神经网络隐层特别多,那么梯度在穿过多层后将变得非常小接近于0,即出现梯度消失现象;当网络权值初始化为
(
1
,
+
∞
)
(1, +\infty)
(1,+∞)区间内的值,则会出现梯度爆炸情况。
详细数学分析见文章:http://neuralnetworksanddeeplearning.com/chap5.html 中文译文:深度神经网络为何很难训练https://www.jianshu.com/p/917f71b06499.
深度学习通过解决这个核心问题,获得了长足进步。
技术3.1 激活函数
如图3.1所示,Relu函数简单粗暴:
f
(
x
)
=
max
{
0
,
x
}
f(x) = \max\{0, x\}
f(x)=max{0,x}
图3.1 Relu函数及其导数
由于它并未像技术2.2所涉及的sigmoid和tanh那样,把数据映射到很小的区间,所以避免了梯度消失。
Leaky ReLU函数(PReLU)进行了一点改进
f
(
x
)
=
max
(
α
x
,
x
)
f(x) = \max(\alpha x, x)
f(x)=max(αx,x)
其中,
α
\alpha
α是一个很小的值,如
0.01
0.01
0.01.
有了这些激活函数,我们就可以做很深的网络,表达更复杂的模型了。
技术3.2 跳线
在全连接网络中,我们仅支持相邻层的网络节点相连。跳线则直接越过了多层,建立了直接的连接。
技术3.3 Dropout
当训练样本不多时,网络很容易发生过拟合。Dropout通过随机移除一些连接解决该问题,在一定程度上达到正则化的效果。
参见:https://blog.csdn.net/program_developer/article/details/80737724
技术3.4 同一层连线
如果处理的数据是序列,则需要在同一层节点(特别是相邻节点)之间进行连线。RNN(recurrent neural network,循环神经网络)的作用就在于此。
图3.2 RNN
技术3.5 更复杂的节点
LSTM在RNN基础上,使用了更复杂的节点结构。
图3.3 LSTM
小结
深度学习的技术可以从如下几个方面来分析:
- 输入
- 输出
- 网络结构
- 节点设计
相应分析放在下一个贴子。
本贴需要大幅修改。