浅层神经网络个人学习笔记Shallow neural networks
作者arsoooo
1.1 计算一个神经网络的输出(Computing a Neural Network’s output)
在逻辑回归中,我们有a直接等于yhat,是因为在逻辑回归中我们只有一个输出层,所以我们没有用带方括号的上标。此处多层的神经网络,yhat表示最终输出,a表示中间层的输出,这些输出作为输入传入下一层里继续计算,所以又叫做激活值。
图中上标表示神经网络的层数,下标表示该层的第几个神经元,这是神经网络的符号惯例。
接下来计算一个神经网络的输出:
从隐藏层的第一个神经元开始计算,如上图第一个最上面的箭头所指。从上图可以看出,输入与逻辑回归相似,每个神经元的计算与逻辑回归一样分为两步,隐藏层的第二个以及后面两个神经元的计算过程一样,只是注意符号表示不同。
向量化的过程是将神经网络中的一层神经元参数纵向堆积起来,例如隐藏层中的w纵向堆积起来变成一个(4,3)的矩阵,用符号W[1]表示。得到Z[1]后,a[1] = sigmoid(Z[1]),接着通过a[1]进行一次计算得到a[2]。
1.2 多样本向量化(Vectorizing across multiple examples)
题目复杂,实际上1.1讲的是一个训练样本放入神经网络计算,现在是有m个训练样本,每个都要放进去计算。
当然我们不要用loop循环,而是把不同训练样本的x们组合成一个矩阵,其中水平方向上,对应于不同的训练样本;竖直方向上,对应不同的输入特征,而这就是神经网络输入层中各个节点。
1.3激活函数(Activation functions)
a = sigmoid(z),a是激活值,sigmoid是激活函数。除了sigmoid函数以外的非线性函数,tanh函数或者双曲正切函数是总体上都优于sigmoid函数的激活函数。
tanh函数是sigmoid的向下平移和伸缩后的结果。对它进行了变形后,使得数据的平均值更接近0而不是0.5,tanh函数在所有场合都优于sigmoid函数。
吴恩达老师给出了一些函数选择的建议:
如果输出是0、1值(二分类问题),则输出层选择sigmoid函数,然后其它的所有单元都选择Relu函数。
这是很多激活函数的默认选择,如果在隐藏层上不确定使用哪个激活函数,那么通常会使用Relu激活函数。有时,也会使用tanh激活函数,但Relu的一个优点是:当z是负值的时候,导数等于0。
这里也有另一个版本的Relu被称为Leaky Relu。当z是负值时,这个函数的值不是等于0,而是轻微的倾斜。这个函数通常比Relu激活函数效果要好,尽管在实际中Leaky ReLu使用的并不多。