来源: 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) (渗漏整流函数)
为何需要它
打破计算层的线性特性
现实中大多数时间映射是非线性
的,没有标准的因果关系。只有在做线性回归才会考虑在输出层
使用线性激活
常用激活函数的导数
ddzsigmod(z)=A(1−A),A=sigmod(z)
ddztanh(z)=1−(tanh(z))2
ddzRelu(z)=(0,z<01,z>0)
ddzLeakyRelu(z)=(0.01,z<01,z>0)
随机初始化参数向量
不像之前训练逻辑回归时全0初始化参数原因:会让所有的隐藏神经元做相同的工作
由于这种
对称
,反向传播后每个单元得到的梯度阵也是相同的- 最后导致所有的神经元都做相同的计算
正确做法 - W[1]=np.random.randn((shape))∗0.01 。这样使得 W 每个元素初始化为很小的随机值
B 则可以初始化为0,因为 W 参数阵已经可以让不同的单元做不同的工作- 使用小的数字原因:防止使用
tanh
sigmod
这类激活函数,反向时使得到的梯度值过小,影响学习率。