【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

好久不见,甚是想念!小Mi最近一直在忙着消化深度学习的各种知识点,这不就马不停蹄地就给大家安排上啦!今天小Mi给大家介绍简单的深度学习网络(Deep Neural Networks, DNN),废话不多说,赶紧开始吧~

感知机

首先隆重介绍下神经网络的基础单元——感知机,整体过程就是对若干输入进行加权求和,再加上偏置值,最后通过激活函数【MindSpore:跟着小Mi一起深度学习吧】深度神经网络得到神经元的输出:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

中间输出结果:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络最后通过某一种神经元激活函数,如:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络该模型的输出结果只能为1或-1,可用于简单二元分类。

DNN基本结构

在介绍深度学习的过程中其实小Mi已经跟大家介绍过深度学习网络的大致模型,分别由输入层、隐藏层和输出层,而DNN简单来说就是拥有很多隐藏层的神经网络。

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络 深度神经网络中层与层是全连接的关系,即,第i层的任意神经元一定与第i+1层的任意一个神经元相连。

前向传播算法

假设激活函数【MindSpore:跟着小Mi一起深度学习吧】深度神经网络,下图中的DNN前向传播算法公式可以直接求得:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

第二层输出:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

 

 

 

 

 

 

 

第三层输出:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

最后根据数学归纳法(这个很重要,本文中运用到好几次),可以得出,假设第【MindSpore:跟着小Mi一起深度学习吧】深度神经网络层有m个神经元,则第【MindSpore:跟着小Mi一起深度学习吧】深度神经网络层的第j个神经元的输出【MindSpore:跟着小Mi一起深度学习吧】深度神经网络为:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络这个时候矩阵也可以发挥巨大的作用啦~用矩阵法表示(所有的都可以看成是一个矩阵),第【MindSpore:跟着小Mi一起深度学习吧】深度神经网络层的输出为:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

代码思想

简单来说,前向传播算法就是对若干输入进行加权求和,再加上偏置值,最后通过激活函数,进行线性运算和激活运算,从第一层开始一层层向后计算。

输入: 总层数L,隐藏层、输出层的对应矩阵W,偏倚向量b,输入向量x

输出:输出层输出【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

1)初始化【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

2)for 【MindSpore:跟着小Mi一起深度学习吧】深度神经网络,计算并输出【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

反向传播

之前小Mi给大家介绍过机器学习算法,用一个合适的损失函数来度量训练样本的输出损失,接着对这个损失函数进行优化求最小化的极值,大家是不是对这个并不陌生?!对DNN的损失函数用梯度下降法进行迭代优化求极小值的过程就是反向传播算法。

在进行DNN反向传播算法前,需要选择一个损失函数,来度量训练样本计算出的输出和真实的训练样本输出之间的损失。

这里选用最常见的均方差来度量损失。即对于每个样本,期望最小化:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络和y均为向量,而【MindSpore:跟着小Mi一起深度学习吧】深度神经网络为S的L2范数。

那么便可以用梯度下降法迭代求解每一层的W,b啦。

输出层第L层,输出层的W,b满足:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

对于输出层的参数,损失函数为:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

求解W,b的梯度:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

符号⊙表示Hadamard积,对于两个维度相同的向量A【MindSpore:跟着小Mi一起深度学习吧】深度神经网络和B【MindSpore:跟着小Mi一起深度学习吧】深度神经网络,则A⊙B=【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

先对【MindSpore:跟着小Mi一起深度学习吧】深度神经网络进行计算:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

计算出输出层的梯度,然后一层一层递推,第【MindSpore:跟着小Mi一起深度学习吧】深度神经网络层的未激活输出【MindSpore:跟着小Mi一起深度学习吧】深度神经网络梯度可以表示为:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络根据前向传播算法,第【MindSpore:跟着小Mi一起深度学习吧】深度神经网络层的【MindSpore:跟着小Mi一起深度学习吧】深度神经网络关系可以知道:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

而第【MindSpore:跟着小Mi一起深度学习吧】深度神经网络层的【MindSpore:跟着小Mi一起深度学习吧】深度神经网络梯度如下:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

接着求出【MindSpore:跟着小Mi一起深度学习吧】深度神经网络,又一次采用数学归纳法,假设第【MindSpore:跟着小Mi一起深度学习吧】深度神经网络层的【MindSpore:跟着小Mi一起深度学习吧】深度神经网络已知,那么我们如何求出第【MindSpore:跟着小Mi一起深度学习吧】深度神经网络层的【MindSpore:跟着小Mi一起深度学习吧】深度神经网络呢?

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

可见,现在关键在于求解【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络【MindSpore:跟着小Mi一起深度学习吧】深度神经网络的关系其实很容易找出:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

这样很容易求出:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

将上式带入上面【MindSpore:跟着小Mi一起深度学习吧】深度神经网络【MindSpore:跟着小Mi一起深度学习吧】深度神经网络关系式得到:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

得到了【MindSpore:跟着小Mi一起深度学习吧】深度神经网络的递推关系式,只要求出了某一层的【MindSpore:跟着小Mi一起深度学习吧】深度神经网络,求解【MindSpore:跟着小Mi一起深度学习吧】深度神经网络的对应梯度就很简单啦。

代码思路

由于梯度下降法有批量(Batch),小批量(mini-Batch),随机三个变种,这里小Mi选用最基本的批量梯度下降法来描述反向传播算法。

输入: 总层数L,各隐藏层与输出层的神经元个数,激活函数,损失函数,迭代步长【MindSpore:跟着小Mi一起深度学习吧】深度神经网络,最大迭代次数MAX与停止迭代阈值【MindSpore:跟着小Mi一起深度学习吧】深度神经网络,输入的m个训练样本【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

输出:各隐藏层与输出层的线性关系系数矩阵【MindSpore:跟着小Mi一起深度学习吧】深度神经网络和偏倚向量【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

1.初始化各隐藏层与输出层的线性关系系数矩阵【MindSpore:跟着小Mi一起深度学习吧】深度神经网络和偏倚向量【MindSpore:跟着小Mi一起深度学习吧】深度神经网络的值为一个随机值。

2.for iter to 1 to MAX:

1) for i =1 to m:

   a) 将DNN输入【MindSpore:跟着小Mi一起深度学习吧】深度神经网络设置为【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

   b) for【MindSpore:跟着小Mi一起深度学习吧】深度神经网络=2 to L,进行前向传播算法计算【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

   c) 通过损失函数计算输出层的【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

   d) for【MindSpore:跟着小Mi一起深度学习吧】深度神经网络 = L-1 to 2, 进行反向传播算法计算【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

2) for 【MindSpore:跟着小Mi一起深度学习吧】深度神经网络= 2 to L,更新第【MindSpore:跟着小Mi一起深度学习吧】深度神经网络层的【MindSpore:跟着小Mi一起深度学习吧】深度神经网络:

【MindSpore:跟着小Mi一起深度学习吧】深度神经网络

3) 如果所有W,b的变化值都小于停止迭代阈值【MindSpore:跟着小Mi一起深度学习吧】深度神经网络,则跳出迭代循环到步骤3。

输出各隐藏层与输出层的线性关系系数矩阵W和偏倚向量b。

好啦,今天小Mi的讲解就到这里啦,主要介绍了深度神经网络的前向传播和反向传播,还是稍微有点难度的,不过没难度咱们如何提高呢?下期给大家介绍深度神经网络的正则化!我们下期再见呦~

上一篇:【 jsqlparser学习】


下一篇:【MindSpore:跟着小Mi一起机器学习吧!】神经网络的学习(上)