Deep Learning Notes - 1.3浅层神经网络
单隐藏层的神经网络
一些约定
- 上标 [i][i] 指第 ii 层
- 上标 指第 ii 个样例
- 下标 指特定层中的第 ii 个节点
- 例如: 表示第 ii 层中的第 个节点
- 通常输入层不看作一个标准的层,所以输入层常被记为第 00 层
范例网络
其中为输入层,a[1]a[1]为隐藏层,a[2]a[2]为输出层。
神经网络的计算(一组训练样例)
每个神经元中,都会进行上图所示的计算,那么所有神经元的计算为:
z[1]1=w[1]T1x+b[1]1,a[1]1=σ(z[1]1)z[1]2=w[1]T2x+b[1]2,a[1]2=σ(z[1]2)z[1]3=w[1]T3x+b[1]3,a[1]3=σ(z[1]3)z[1]4=w[1]T4x+b[1]4,a[1]4=σ(z[1]4)z1[1]=w1[1]Tx+b1[1],a1[1]=σ(z1[1])z2[1]=w2[1]Tx+b2[1],a2[1]=σ(z2[1])z3[1]=w3[1]Tx+b3[1],a3[1]=σ(z3[1])z4[1]=w4[1]Tx+b4[1],a4[1]=σ(z4[1])向量化后为:
z[1]=W[1]x+b[1]a[1]=σ(z[1])z[2]=W[2]a[1]+b[2]a[2]=σ(z[2])z[1]=W[1]x+b[1]a[1]=σ(z[1])z[2]=W[2]a[1]+b[2]a[2]=σ(z[2])其中:
W[1]=⎡⎣⎢⎢⎢⎢⎢⎢−−−−w[1]T1w[1]T2w[1]T3w[1]T4−−−−⎤⎦⎥⎥⎥⎥⎥⎥W[1]=[−w1[1]T−−w2[1]T−−w3[1]T−−w4[1]T−]
x=⎡⎣⎢x1x2x3⎤⎦⎥x=[x1x2x3]并且bb和均为纵向堆叠。
多组训练样例的向量化
假设一共有mm组样例,那么向量化之后如下:
其中:X=A[0]X=A[0]
X=⎡⎣⎢|x(1)||x(2)|...|x(m)|⎤⎦⎥nx×mX=[|||x(1)x(2)...x(m)|||]nx×mA[1]=⎡⎣⎢|a[1](1)||a[1](2)|...|a[1](m)|⎤⎦⎥A[1]=[|||a[1](1)a[1](2)...a[1](m)|||]并且ZZ也为横向堆叠。
激活函数
为什么要使用激活函数
如果不适用激活函数,即对结果处理为,那么最终输出层输出的是xx的线性组合,中间隐藏层便失去了意义(不如去掉)。
而只有面对回归问题时,线性激活函数才应用于输出层。
激活函数σ(z)σ(z)
σ(z)=11+e−zσ(z)=11+e−zsigmod激活函数的使用范围不大,仅在二元分类网络的输出层使用较多。
激活函数tanh(z)tanh(z)
tanh[z]=ez−e−zez+e−ztanh[z]=ez−e−zez+e−z效果略好于sigmod函数,但使用也不常用,因为训练速度稍慢。
激活函数ReLU(z)ReLU(z)
ReLU(z)=max(0,z)ReLU(z)=max(0,z)此函数使用最为广泛,基本上作为默认使用。
激活函数leakyReLU(z)leakyReLU(z)
leakyReLU(z)=max(cz,z)leakyReLU(z)=max(cz,z)一般 cc 取一个很小的数,例如 。具体值需要根据训练情况而定。
此函数效果比ReLU要好,但是使用并不广泛。
梯度下降
向量化之后的计算过程:
dZ[2]=A[2]−YdW[2]=1mdZ[2]A[1]Tdb[2]=1mnp.sum(dZ[2],axis=1,keepdims=True)dZ[1]=W[2]TdZ[2]∗g[1]′(z[1])dW[1]=1mdZ[1]XTdb[1]=1mnp.sum(dZ[1],axis=1,keepdims=True)dZ[2]=A[2]−YdW[2]=1mdZ[2]A[1]Tdb[2]=1mnp.sum(dZ[2],axis=1,keepdims=True)dZ[1]=W[2]TdZ[2]∗g[1]′(z[1])dW[1]=1mdZ[1]XTdb[1]=1mnp.sum(dZ[1],axis=1,keepdims=True)上式中的 ∗∗ 是指逐个相乘。
随机初始化
矩阵需要随机化,而bb置为全零就可以了。