二、浅层神经网络
1.神经网络
神经网络是机器学习中的一种模型,是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。
多个样本的计算过程:
for i in range(1,m):
#计算上述4个公示
在多样本计算时实现进一步向量化
即对样本、参数都进行横向堆叠。如:
2.神经网络的激活函数( Activation Function)
由于线性模型的表达能力有限,使用激活函数将非线性特性引入NN中,不同层可以使用不同的激活函数。
Sigmoid函数
优点:
Sigmoid函数的输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层,也一般只用作二分类问题的输出层。
缺点:
1.由于其软饱和性,容易产生梯度消失。
2.其输出并不是以0为中心的。
梯度消失:由于激活函数导数的最大值小于1,且两端的倒数趋近于0。根据链式求导法则,越往后的隐藏层梯度会越来越小趋近于0,这也意味着,前面层的学习会显著慢于后面层的学习。
tanh函数
优点:
1.比Sigmoid函数收敛速度更快。
2.相比Sigmoid函数,其输出以0为中心。
缺点:
还是没有改变Sigmoid函数的最大问题——由于饱和性产生的梯度消失。
Relu函数
优点:
1.相比起Sigmoid和tanh,ReLU在SGD中能够快速收敛。这是因为它线性、非饱和的形式。
2.Sigmoid和tanh涉及了很多很expensive的操作(比如指数),ReLU可以更加简单的实现。
3.有效缓解了梯度消失的问题。
4.在没有无监督预训练的时候也能有较好的表现。
缺点:
随着训练的进行,可能会出现神经元死亡,权重无法更新的情况。如果发生这种情况,那么流经神经元的梯度从这一点开始将永远是0。也就是说,ReLU神经元在训练中不可逆地死亡了。
Leaky ReLU
或一个其他非常小的常数。
优点:
解决Relu函数中神经元死亡的问题,同时又保留来其他Relu函数的优点。
为什么需要非线性激活函数?
线性激活函数的隐藏层一点意义都没有。
在输出层可以用线性激活函数(回归问题)。
3.神经网络中的梯度下降
即向量化实现普通的梯度下降,由更新一个单个的参数变成更新一个参数矩阵。
4.随机初始化
对于参数W
,使用random
函数产生随机数矩阵作为W
的初始值,如果使用sigmoid
或tanh
作为激活函数,注意可以将W
乘以一个很小的常数,如0.01,使得初始的W
值比较小(原因请思考这两个激活函数的曲线),对于参数b
(偏置项),可以初始化为全都是0的矩阵。
对于参数W
,不能全都初始化为0,会导致同一层的每个单元之间在计算完全相同的函数,导致所有单元的输出会完全一样,这是不能接受的。