Skip to content

DeepLearning笔记(2)——神经网络

1. 前向传播

如上图,左边为一个简单的神经网络结构,右边为每一个神经单元的计算过程。

对于一个样本:

a[0]=xz[1]=W[1]a[0]+b[1]a[1]=σ(z[1])z[2]=W[2]a[1]+b[2]a[2]=σ(z[2])

其中:

W[1]R4×3b[1]R4×1W[2]R1×4b[2]R1×1

一般来说,令:

  • L 表示神经网络层数(不包含输入层),输入层看作是第0层
  • n[l] 表示第 l 层的节点数量
  • g[l] 表示第 l 层的激活函数

则对于多个样本向量化:

XRn[0]×mW[l]Rn[l]×n[l1]b[l]Rn[l]×1A[0]=XZ[l]=W[l]A[l1]+b[l]A[l]=g[l](Z[l])

2. 激活函数

  • 不同的层可以使用不同的激活函数
  • 激活函数是非线性的

常用的激活函数有:

sigmoid:a=g(z)=11+eztanh:a=g(z)=ezezez+ezReLU:a=g(z)=max(0,z)leaky ReLU:a=g(z)=max(0.01z,z)

它们的导数分别为:

sigmoid:g(z)=a(1a)tanh:g(z)=1a2ReLU:g(z)={0,if z<01,if z>0leaky ReLU:g(z)={0.01,if z<01,if z>0

3. 反向传播

在前向传播过程中,针对每一层,输入为 A[l1],输出为 A[l]

Z[l]=W[l]A[l1]+b[l]A[l]=g[l](Z[l])

在反向传播过程中,针对每一层,输入为 dA[l],输出为 dA[l1]dW[l]db[l]

dZ[l]=dA[l]g[l](Z[l])dW[l]=1mdZ[l]A[l1]Tdb[l]=1mi=1mdZ[l](i)dA[l1]=W[l]TdZ[l]

4. 参数初始化

在逻辑回归中,参数 wb 可以都初始化为0,但是在神经网络中,如果这样做的话,则每一层所有的神经单元都是在做着同样的计算。因此需要进行随机初始化。

初始化的参数值通常会很小。如果比较大,在使用了sigmoid或者tanh激活函数的时候,计算值就容易落到函数值较大的区域,从而梯度很小,导致反向传播过程进行的很慢。

5. 参数和超参数

参数:

  • W
  • b

超参数:

  • 学习速率 α
  • 梯度下降迭代次数 iterations
  • 神经网络层数 L
  • 每一层的节点数 n[l]
  • 激活函数类型 g(z)
  • ……

超参数决定了最终训练好的参数 Wb 的值,即超参数是控制参数的参数。