3.浅层神经网络

浅层神经网络概述


3.浅层神经网络

[1]计算出z,α(第一层)
z[1]=W[1]+b[1]z^{[1]}=W^{[1]}+b^{[1]} α[1]=sigmoid(z[1])α^{[1]}=sigmoid(z^{[1]})
[2]计算出z,α(第二层)
z[2]=W[2]+b[2]z^{[2]}=W^{[2]}+b^{[2]} α[2]=sigmoid(z[2])α^{[2]}=sigmoid(z^{[2]})

这只是一个简短的描述,接下来的学习希望能够理解神经网络的原理。


神经网络的表示

3.浅层神经网络

  • 输入特征x1,x2,x3x_1,x_2,x_3,成为神经网络的输入层
  • 接下来的一层我们称之为隐含层

监督学习训练一个数据集时,训练集中既有输入xx也有目标输出yy,而这一层结点的值是透明的,训练集中并不包含其值,所以称为隐藏层。
最后只有一个结点的我们称之为输出层

  • a意味着**,也是每一个神经元的输出(后所提),以输入层为第0层,标[num]表示第几层,标num表示该层的第几个结点
    • a2[1]a^{[1]}_2表示第一层第二个结点的**值。

本神经网络的隐藏层有个单元,所以其**值是一个4×14\times{1}的矩阵
3.浅层神经网络
最后输出层将产生某个数值a(一个数),所以y^=a[2]\hat{y}=a^{[2]}

输入层不算入计算网络的层数

  • 隐藏层和输出层都是带有参数的,W[1],b[1]W^{[1]},b^{[1]},W[2],b[2]W^{[2]},b^{[2]}
    • W[1]W^{[1]}是一个(4,3)的矩阵,4因为有4个结点,3因为上一层有三个输入特征。b[1]b^{[1]}是个(4,1)的向量
    • W[2]W^{[2]}是一个(1,4)的矩阵,1因为有1个结点,4因为上一层有4个值输入到此层。b[2]b^{[2]}是个(1,1)的向量

如前一章所学,在逻辑回归中W是个系数矩阵,而b是一个纠偏的向量或值,在上一章,WX是(1,1),所以b是一个值,此处WX形如(4,1),所以b是一个(4,1)向量,mark一下,理解有误后期来修正此处。


神经网络的计算在个结点计算出假设函数的值,然后作为变量输入**函数输出a。

比如在隐藏层:
z1[1]=w1[1]x+b1[1]z^{[1]}_1=w^{[1]}_1x+b^{[1]}_1 a1[1]=σ(z1[1])a^{[1]}_1=\sigma(z^{[1]}_1)

z2[1]=w2[1]x+b2[1]z^{[1]}_2=w^{[1]}_2x+b^{[1]}_2 a2[1]=σ(z2[1])a^{[1]}_2=\sigma(z^{[1]}_2)

z3[1]=w3[1]x+b3[1]z^{[1]}_3=w^{[1]}_3x+b^{[1]}_3 a3[1]=σ(z3[1])a^{[1]}_3=\sigma(z^{[1]}_3)

z4[1]=w4[1]x+b4[1]z^{[1]}_4=w^{[1]}_4x+b^{[1]}_4 a4[1]=σ(z4[1])a^{[1]}_4=\sigma(z^{[1]}_4)


向量化就是用NumPy来进行的矩阵运算

多样本向量化就是把下标i作为列i,每个都看作是一个抽象矩阵作横向扩展。


**函数

sigmoid函数:
a=σ(z)=11+eza=\sigma(z)=\frac{1}{1+e^{-z}}

tanh(双曲正切函数):
a=tanh(z)=ezezez+eza=tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}}

  • 总体上都优于sigmoid函数
  • 值域位于+1和-1之间
  • 经过(0,0)点
  • 均值更接近均值
  • 在二分类问题上,想让y^\hat{y}介于0和1之间,而不是-1和+1之间,所以需要使用sigmoid**函数。

不同可以使用不同**函数


既然tanh效果好,为什么不用tanh后在进行归一化么?


sigmoid和tanh都会在z特别大或特别小的时候,导数的梯度或函数的斜率变得特别小
修正线性单元的函数(ReLu):a=max(0,z)a=max(0,z)

**函数的经验法则

  • 如果输出是二分类问题,则输出层选择sigmoid函数,然后其他的所有单元都选择ReLu函数
  • sigmoid:除了输出层是一个二分类问题基本不会用它
  • tanh**函数:tanh是非常优秀的,几乎适合所有场合。
  • ReLu函数:最常用的默认函数,如果不确定用哪个**函数,jiuyongReLu或Leaky ReLu

为什么使用非线性**函数?

个人理解:简化一下神经网络结构,假设其都是线性传递,即多层,每层单节点,从输入层到输出层只是在做这样一个计算y=w[1]w[2]...w[m]Xy=w^{[1]}w^{[2]}...w^{[m]}X而已,前面的所有系数矩阵w相乘过后得到的是一个系数矩阵。函数形式没有更复杂,反向传播也一直是等步长下降,结果还只是一个线性函数,只是将空间一分为2,而引入非线性函数,虽不能准确说明其形式,但各结点非等步长进行梯度下降,函数形式明显会变得复杂,呈现多项式形式或更为复杂精确的函数形式,甚至划分出多区域也是可能的。

sigmoid的导数:
3.浅层神经网络

tanh的导数:
3.浅层神经网络

ReLu的导数:
3.浅层神经网络

Leaky ReLu的导数:
3.浅层神经网络

以上都是对z求导


推导用LaTeX真的是太麻烦了…

3.浅层神经网络

根据下面dz[2]dz^{[2]}此处应该用的是sigmoid**函数。

dadz=a(1a)\frac{da}{dz}=a(1-a) 见上文

dLdz=dLda×dadz=ya+1y1a×a(1a)=ay\frac{dL}{dz}=\frac{dL}{da}\times{\frac{da}{dz}}=-\frac{y}{a}+\frac{1-y}{1-a}\times{a(1-a)}=a-y

dLdw[2]=dLdz[2]×dz[2]dw[2]=dLdz[2]×a[1]\frac{dL}{dw^{[2]}}=\frac{dL}{dz^{[2]}}\times{\frac{dz^{[2]}}{dw^{[2]}}}=\frac{dL}{dz^{[2]}}\times{a^{[1]}}

z[2]=w[2]a[1]+b[2]z^{[2]}=w^{[2]}a^{[1]}+b^{[2]}
其他的大同小异。


随机初始化

初始化为0导致隐含单元在1个以上没有意义,因为各结点对称(想象一个坐标图,输入与隐含层由于是全相联,系数和偏差一样则映射到同一个点,在该点梯度也一样,进行下降的步长就也一样)

  • w随机初始化z再乘一个很小随机数,b可初始化为0
  • 随机数太大的话,落在梯度平缓区域的概率变大,降低梯度下降的速度
  • 选取问题看后续mark