吴恩达《深度学习-神经网络和深度学习》3--浅层神经网络
1. 神经网络长什么样?
神经网络引入了layer(层)和unit(单元)的概念,x是第一层也就是输入层,含有三个unit(单元),其单元数通常是特征值的个数,有时候输入层也会被表示成a[0],最后一层叫做输出层,(输出层也可能包含多个单元,即多分类,对于多分类问题,给定输入值x,预测其属于哪类,就看其哪类的预测值最大)。中间的称谓隐藏层,计算一个神经网络的层数的时候,输入层通常不计入,即如果有一个隐藏层,那么这个神经网络是一个双层神经网络(隐藏层和输出层)。
正向传播(forward propagation)计算估计值,反向传播(backport propagation)计算梯度 。
2. 双层神经网络前向传播向量化(以逻辑回归函数为例)
对于单个样本来说,其前向传播向量化过程如下:
对于整个样本集,其前向传播向量化过程如下:
3. **函数(activation function)
**函数即隐藏层及输出层计算估计值所用的函数,对于以逻辑回归为例的神经网络来说,**函数即sigmoid函数,还有很多其他的函数可以作为**函数。不同层之间的**函数可以相同也可以不同。
-1-sigmoid(z)函数 //适合二分类,0<=y<=1
-2-tanh(z)函数 //比sigmoid更优越的**函数,均值为零
//sigmoid,tanh函数都有一个缺点,即当z足够大时,其导数会趋近于零,会使得梯度下降收敛速度很慢
-3-ReLU(Rectified Linear Unit)修正线性单元 //目前默认的**函数
-4-Leaky ReLU带泄露的ReLU //表现比ReLU更好,但通常使用率不高
//ReLU函数的主要优势是其斜率不容易趋近于零,梯度下降收敛速度不会很慢
-5-g(z)=z 线性**函数或恒定**函数(Identity activation function) //用线性**函数不管有多少隐藏层,每层有多少单元,归根结底还是计算线性**函数,因而隐藏层就变得没有意义。所以神经网络一般不采用线性**函数。
4. **函数的导数
-1- sigmoid
-2-tanh
-3- ReLU and Leaky ReLU
5. 神经网络的梯度下降/后向传播(双层神经网络)
6. 梯度下降(后向传播)向量化(双层神经网络)
7. 随机初始化
为什么不能初始化为0?
初始化参数w为0,会导致不管迭代多少次,隐藏层的各单元计算的函数一样,各单元导数也一样,从而最终计算的参数值w,其各行是相等的,这种情况称之为隐藏单元是对称的,这样多个隐藏单元就变得毫无意义了。参数b不存在对称问题,可以初始化为0.
初始化时为什么对参数w乘以0.01?
因为如果**函数是sigmoid或者tanh,若参数值较大很可能就会导致其落在平缓区,即导数趋近于零,降低收敛速度。
注意:对浅层神经网络来说,参数W乘以0.01是个不错的选择,但是对于深层神经网络来说,参数值需要调整一下,具体如何调整会在接下来的课程介绍。