(1-2)神经网络与深度学习 | 浅层和深层神经网络

目录

浅层神经网络

神经网络的表示 

计算神经网络的输出

单个样本前向传播

多个样本前向传播

激活函数

sigmoid函数与tanh函数

Relu函数和Leaky Relu函数

使用非线性激活函数原因

神经网络的梯度下降(反向传播)

随机初始化

深层神经网络

深层神经网络前向传播

核对矩阵的维数

搭建深层神经网络块

参数和超参数


浅层神经网络

神经网络的表示 

  • 用上标[i]代表神经网络的第i层,用上标(i)代表第i个样本;
  • W^{[i]}代表第i-1层和第i层之间的权重参数矩阵,维度为n^{[i]}*n^{[i-1]}n^{[i]}代表第i层的单元数);b^{[i]}代表第i-1层和第i层之间的偏置参数向量,维度n^{[i]}*1
  • 一般输入层为第0层,不算在神经网络的层数内。

计算神经网络的输出

单个样本前向传播

z_{j}^{[i]},a_{j}^{[i]}整合为一个列向量记做z^{[i]},a^{[i]},把w_{j}^{[i]}^{T}整合为一个矩阵W^{[i]}

      

多个样本前向传播

把m个样本的特征向量x^{(i)}堆叠在一起构成特征矩阵X(n_{x}*m)作为输入,可以同时实现m个样本的前向传播,此时中间结果z,a(向量或标量)都相应的扩展为Z,A(矩阵或向量)。扩展的矩阵横向指标对应不同的训练样本,竖向指标对应神经网络中的不同节点

 

激活函数

sigmoid函数与tanh函数

    

在实际应用中几乎不使用sigmoid激活函数,tanh函数几乎在所有方面都优于sigmoid函数

sigmoid激活函数使用情形(导数为a(1-a)):

  • 使用神经网络进行2分类时,此时输出层只有一个单元且输出需介于0-1之间

sigmoid函数缺点:

  • 当输入z太大或太小时,梯度会接近于0,算法优化速度会非常慢
  • 输出以0.5为中心,不是以0为中心,输出值没有中心化的效果(输出数据以0为中心化可以方便下一层的学习)

tanh函数(导数为1-a^2):

  • 优点:输出值以0为中心,有数据中心化的效果。方便下一层的学习。
  • 缺点:当输入z太大或太小时,梯度会接近于0,算法优化速度会非常慢(与sigmoid类似)。

Relu函数和Leaky Relu函数

Relu函数:

  • 优点:不存在梯度接近于0的情况,算法优化速度比sigmoid和tanh函数快很多。
  • 缺点:当输入z< 0时,梯度=0,但是这影响不大,对于大部分隐藏层的单元来说,输入z >0,此时梯度都是不为0的(=1)。

Leaky Relu函数:在Relu函数的基础上增加了一个超参数,当z< 0时的系数需要手动设置,一般设为0.01,实际操作中,可以进行尝试然后选出最优的。

使用非线性激活函数原因

使用非线性激活函数可以让神经网络得到有趣的输出。

无论使用多少个隐层,如果每个隐层和输出层都采用线性激活函数,那么最后的输出可以表示为输入特征的线性组合。也就是说,此时的隐层是没有意义的,不需要任何隐层也可以得到该输出。但如果机器学习的是线性回归问题,比如房价预测,输出层用线性激活函数也许可以。

神经网络的梯度下降(反向传播)

随机初始化

权重参数W应该随机初始化,而偏置参数b可以初始化为0,因为只要W保证随机初始化,就可以破坏隐藏单元对称性。一般随机初始化权重参数时,还要乘以一个非常小的数,如0.01。因为如果采用sigmoid或tanh激活函数时,不至于使z过大或过小,导致计算梯度时接近于0,降低算法的优化速度。

深层神经网络

深层神经网络前向传播

A^{[0]} = X,for (l=1:l)

    Z^{[l]} = W^{[l]}*A^{[l-1]} + b^{[l]}

    A^{[l]} = g^{[l]}(Z^{[l]})

其中A^{[0]}是对单个样本前向传播的向量进行堆叠(一列代表一个样本),形成相应的矩阵。

核对矩阵的维数

以5层神经网络为例进行核对矩阵的维数

单个样本 vs. m个样本

    

搭建深层神经网络块

先由a^{[0]}前向传播得到a^{[L]}=\hat y,计算损失函数L(a^{[L]},y);再反向传播,先计算出da^{[L]}=\frac{\partial L(a^{L},y)}{\partial a^{L}},再继续利用链式法则(以及前向传播中缓存的中间结果z^{[L]},和参数W^{[L]},b^{[L]})逐步计算出dz^{[L]},dW^{[L]},db^{[L]},da^{[L-1]},其他层依次进行。

参数和超参数

参数W^{[1]},b^{[1]},W^{[2]},b^{[2]},W^{[3]},b^{[3]},...

超参数:学习率\alpha、梯度下降迭代次数、隐层数、各个隐层单元数、激活函数的选择等等需要自己来设置的参数,实际上超参数的不同取值可以影响模型的实际参数。

猜你喜欢

转载自blog.csdn.net/Nibaby9/article/details/104863394
今日推荐