目录
浅层神经网络
神经网络的表示
- 用上标[i]代表神经网络的第i层,用上标(i)代表第i个样本;
代表第i-1层和第i层之间的权重参数矩阵,维度为
(
代表第i层的单元数);
代表第i-1层和第i层之间的偏置参数向量,维度
;- 一般输入层为第0层,不算在神经网络的层数内。
计算神经网络的输出
单个样本前向传播
把
整合为一个列向量记做
,把整合为一个矩阵
![W^{[i]}](https://i-blog.csdnimg.cn/blog_migrate/c52a67a7201d3079560c71e382419a44.gif)

多个样本前向传播
把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,降低算法的优化速度。

深层神经网络
深层神经网络前向传播
![A^{[0]} = X,for (l=1:l)](https://i-blog.csdnimg.cn/blog_migrate/660724924aeec09098229244b0f60398.gif)
![Z^{[l]} = W^{[l]}*A^{[l-1]} + b^{[l]}](https://i-blog.csdnimg.cn/blog_migrate/ef3fea60544001405ed54c75fcebb219.gif)
![A^{[l]} = g^{[l]}(Z^{[l]})](https://i-blog.csdnimg.cn/blog_migrate/c9590db0e94b07974ac88254f7d01a38.gif)
其中
是对单个样本前向传播的向量进行堆叠(一列代表一个样本),形成相应的矩阵。
核对矩阵的维数
以5层神经网络为例进行核对矩阵的维数

单个样本 vs. m个样本

搭建深层神经网络块
先由
前向传播得到
,计算损失函数
;再反向传播,先计算出
,再继续利用链式法则(以及前向传播中缓存的中间结果
,和参数
)逐步计算出
,其他层依次进行。


参数和超参数
参数:![W^{[1]},b^{[1]},W^{[2]},b^{[2]},W^{[3]},b^{[3]},...](https://i-blog.csdnimg.cn/blog_migrate/42c49f69e1ff70ae83f711aba82bcdd7.gif)
超参数:学习率
、梯度下降迭代次数、隐层数、各个隐层单元数、激活函数的选择等等需要自己来设置的参数,实际上超参数的不同取值可以影响模型的实际参数。
1万+

被折叠的 条评论
为什么被折叠?



