文章目录
1.神经网络概述
如何实现神经网络,看一个两层神经网络的例子。
2.神经网络的表示
输入特征x1,x2,x3为输入层,中间的四个节点我们称之为隐藏层,最后的那个节点,被称为输出层,负责产生预测值。
这里的激活值a亦可作下一层的输入。
一个完整的两层神经网络的结构如下图所示:
3.计算一个神经网络的输出
神经网络的计算:首先计算出z,然后用sigmoid函数作为激活函数计算出a,一个典型的神经单元计算如下图:
向量化计算:
4.多样本向量化
没有向量化的计算方法:
向量化之后:
水平方向是样本m的索引,垂直方向是激活单元的索引。
5.向量化实现的解释
为什么可以实现向量化,从下图中直观的可以看出来:
6.激活函数
构建一个神经网络时,需要决定哪种激活函数用在隐藏层,哪种用在输出节点上。
Q1:为什么隐藏层上使用tanh效果总是优于sigmoid函数?
A:因为tanh函数值域在-1和+1之间,其均值接近零均值,这会使得下一层学习简单一点。
Q2:tanh和sigmoid的缺点是什么?
A:当z特别大或者特别小的时候,导数梯度或者函数斜率会变得特别小,接近0,降低了梯度下降的速度。
Q3:选择激活函数的经验法则?
A:二分类问题,输出层选择sigmoid函数,其他单元选择Relu函数。
sigmoid、tanh、Relu、Leaky Relu函数图像:
优缺点对比:
- Relu激活函数比sigmoid和tanh学习的更快
- sigmoid和tanh的导数在正负饱和区都接近0,会造成梯度弥散,Relu和Leaky Relu大于0部分为常数,不会产生梯度弥散现象。(Relu进入负半区,梯度为0,神经元停止训练,产生稀疏性,Leaky Relu不会产生这种问题)
7.为什么需要非线性激活函数
证明:如果另g(z)=z。(恒等激活函数)那么这个模型的输出y仅仅只是输入特征x的线性组合。
这个模型的复杂度和没有隐藏层的Logistic回归是一样的。
这个可以用在回归问题上,因为回归问题输出是一个实数。
8.激活函数的导数
这一块没有啥好说的,直接上结果:
1)sigmoid激活函数
2)tanh激活函数
3)ReLU
z=0的情况下极少。
4)Leaky ReLU
z=0的情况下极少。
9.神经网络的梯度下降
正向传播:
10.直观理解反向传播
就只有一个链式法则,能整对维度就好了。
11.随机初始化
对称问题:
Q:权重矩阵通常初始化一个较小的随机数?
A:使用tanh或者sigmoid激活函数,如果z过大,a就会很小,影响学习速度。