吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络

神经网络概览

下图是最基本的神经网络——双层神经网络(输入层一般不看做一个标准的层)。
吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络

表示方法:

吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络
吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络

计算过程:

首先计算a^[1]层的第一个单元
吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络
对剩下的三个单元继续计算,最终计算结果如下
吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络
最终得到
吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络
向量表示
吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络

多个不同样本的向量化:

未向量化时
吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络
有一个for循环,计算速度较慢。
向量化时
吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络
吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络

**函数:

吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络
吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络
使用tanh(z)函数比sigmoid函数效果要好,因为它有数据中心化效果(数据平均值接近于0),可以让下一层学习更方便。
各种**函数的优缺点以及如何选择:
吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络
sigmoid函数
(1)函数输出不是以0为中心的。我们更偏向于当**函数的输入是0时,输出也是0的函数。
(2)当z非常大或非常小时,导数接近于0,梯度下降速度很慢。
由于sigmod函数梯度下降慢,因此我们一般不用sigmoid函数作为**函数。
tanh函数
(1)优点:数据平均值接近于0,方便下层学习计算。
(2)缺点:存在梯度下降慢的问题。
一般二分类问题中隐藏层用tanh函数;输出层用sigmoid函数。
Relu(修正线性单元)函数
(1)优点:**函数斜率与0相差比较大,因此学习速度快。
(2)缺点:当z为负时,导数为0,梯度下降慢。(实际上大部分时候z都是大于0的)
在不确定用哪个**函数时,一般选用Relu函数,因为它比上面两者速度都快。
实际选择时,多测试几种不同选择,以找到最适合该问题的**函数。
为何选用非线性**函数:
若**函数是线性的,则有
吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络
这显然是无意义的。
一般在回归问题(例如预测房价)中输出层用线性**函数,其他地方一般不用。
**函数的导数:
吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络

神经网络中的梯度下降:

正向传播
吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络
反向传播(求导)
吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络
其中g函数是sigmoid**函数; -np.sum 是求维度之和;axis= 1 是矩阵的水平求和;keepdims=True 是确保结果输出的是一个矩阵,而不是秩为1的数组。若不用keepdims=True,则可以调用reshape命令。

随机初始化:

初始化时,不能所有的参数都初始化为0.
一般有
吴恩达神经网络和深度学习课程自学笔记(三)之浅层神经网络
式子(1)中用0.01而不是100/1000的原因:
若使用tanh**函数或者sigmoid函数,权重太大,则w太大,则z太大,最终导致导数接近于0,梯度下降很慢。
浅层神经网络用0.01可以,但是深层神经网络得换个权重。但是一般都很小。