神经网络基础—浅层神经网络
来源: coursera DeepLearningAI-Shallow Neural Network 课程的笔记整理
浅层神经网络
层
- 可以将计算中的每一步视为神经网络的一个层。
- 隐藏层:不被观察到的层,大多数指在计算中未被表述的层。
表达方式
- 注意:输入不算层数。所以上层为一个2层神经网络
-
a[layer](example)node 用于表述一个神经元 - 同时 我们一般采用
计算层
+**层
的方式来组建一个神经网络层。 - 大多数情况下,层的深入仅仅是计算方式的重复而已。同时需要考虑梯度计算的梯度消失问题
**函数
概述
- 使用与
隐藏层
或输出层
的一个函数(大多情况使用非线性函数) - 隐藏层,可以考虑
tanh
(a=ez−e−zez+e−z ):使得得到的资料集中于0,并非0.5。方便后面的学习 - 输出层,可以考虑
Sigmod
:使得得到值在0~1 - 当然,全用
ReLu
也是一个大众的做法. -
ReLu
的升级版为leaky ReLu
a=max(0.01z,z) (渗漏整流函数)
为何需要它
打破计算层的线性特性
现实中大多数时间映射是非线性
的,没有标准的因果关系。只有在做线性回归才会考虑在输出层
使用线性**
常用**函数的导数
随机初始化参数向量
不像之前训练逻辑回归时全0初始化参数原因:会让所有的隐藏神经元做相同的工作
由于这种
对称
,反向传播后每个单元得到的梯度阵也是相同的- 最后导致所有的神经元都做相同的计算
正确做法 -
W[1]=np.random.randn((shape))∗0.01 。这样使得W 每个元素初始化为很小的随机值 -
B 则可以初始化为0,因为 W 参数阵已经可以让不同的单元做不同的工作 - 使用小的数字原因:防止使用
tanh
sigmod
这类**函数,反向时使得到的梯度值过小,影响学习率。