目录
浅层神经网络
神经网络的表示
计算神经网络的输出
单个样本前向传播
多个样本前向传播
激活函数
sigmoid函数与tanh函数
Relu函数和Leaky Relu函数
使用非线性激活函数原因
神经网络的梯度下降(反向传播)
随机初始化
深层神经网络
深层神经网络前向传播
核对矩阵的维数
搭建深层神经网络块
参数和超参数
浅层神经网络
神经网络的表示
- 用上标[i]代表神经网络的第i层,用上标(i)代表第i个样本;
- 代表第i-1层和第i层之间的权重参数矩阵,维度为(代表第i层的单元数);代表第i-1层和第i层之间的偏置参数向量,维度;
- 一般输入层为第0层,不算在神经网络的层数内。
计算神经网络的输出
单个样本前向传播
把
整合为一个列向量记做
,把
整合为一个矩阵
多个样本前向传播
把m个样本的特征向量
堆叠在一起构成特征矩阵X(
)作为输入,可以同时实现m个样本的前向传播,此时中间结果
(向量或标量)都相应的扩展为
(矩阵或向量)。扩展的矩阵横向指标对应不同的训练样本,竖向指标对应神经网络中的不同节点。
激活函数
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函数快很多。
- 缺点:当输入时,梯度=0,但是这影响不大,对于大部分隐藏层的单元来说,输入,此时梯度都是不为0的(=1)。
Leaky Relu函数:在Relu函数的基础上增加了一个超参数,当
时的系数需要手动设置,一般设为0.01,实际操作中,可以进行尝试然后选出最优的。
使用非线性激活函数原因
使用非线性激活函数可以让神经网络得到有趣的输出。
无论使用多少个隐层,如果每个隐层和输出层都采用线性激活函数,那么最后的输出可以表示为输入特征的线性组合。也就是说,此时的隐层是没有意义的,不需要任何隐层也可以得到该输出。但如果机器学习的是线性回归问题,比如房价预测,输出层用线性激活函数也许可以。
神经网络的梯度下降(反向传播)
随机初始化
权重参数W应该随机初始化,而偏置参数b可以初始化为0,因为只要W保证随机初始化,就可以破坏隐藏单元对称性。一般随机初始化权重参数时,还要乘以一个非常小的数,如0.01。因为如果采用sigmoid或tanh激活函数时,不至于使z过大或过小,导致计算梯度时接近于0,降低算法的优化速度。
深层神经网络
深层神经网络前向传播
其中
是对单个样本前向传播的向量进行堆叠(一列代表一个样本),形成相应的矩阵。
核对矩阵的维数
以5层神经网络为例进行核对矩阵的维数
单个样本 vs. m个样本
搭建深层神经网络块
先由
前向传播得到
,计算损失函数
;再反向传播,先计算出
,再继续利用链式法则(以及前向传播中缓存的中间结果
,和参数
)逐步计算出
,其他层依次进行。
参数和超参数
参数:
超参数:学习率
、梯度下降迭代次数、隐层数、各个隐层单元数、激活函数的选择等等需要自己来设置的参数,实际上超参数的不同取值可以影响模型的实际参数。