乐趣区

关于机器学习:MindSpore跟着小Mi一起机器学习神经网络的学习上

危险,危险,危险——好久不见,等你在这里见面~ 在通过前两期对于神经网络的简略介绍后,明天小 Mi 将进一步介绍神经网络的代价函数、前向流传和反向流传,废话不多说,咱们开干吧~

1 代价函数
首先引入一些便于稍后探讨的新标记办法:

假如神经网络的训练样本有 m 个,每个蕴含一组输出 x 和一组输入信号 y,L 示意神经网络层数,示意每层的 neuron 个数(示意输入层神经元个数),代表最初一层中处理单元的个数。

将神经网络的分类定义为两种状况:二类分类和多类分类,

二类分类:,示意哪一类;

K 类分类:,示意分到第类;

小 Mi 带大家回顾一下,逻辑回归问题中的代价函数为:

在逻辑回归中,咱们只有一个输入变量,又称标量(scalar),也只有一个因变量 y,然而在神经网络中,能够有很多输入变量,咱们的是一个维度为 K 的向量,并且训练集中的因变量也是同样维度的一个向量,因而代价函数会比逻辑回归更加简单一些,为:

这个看起来简单很多的代价函数背地的思维还是一样的,咱们心愿通过代价函数来察看算法预测的后果与真实情况的误差有多大,惟一不同的是,对于每一行特色,都会给出 K 个预测,基本上能够利用循环对每一行特色都预测 K 个不同后果,而后在利用循环在 K 个预测中抉择可能性最高的一个,将其与 y 中的理论数据进行比拟。

正则化的那一项只是排除了每一层后,每一层的矩阵的和。最里层的循环循环所有的行(由层的激活单元数决定),循环 i 则循环所有的列,由该层(层)的激活单元数所决定。即:与实在值之间的间隔为每个样本 - 每个类输入的加和,对参数进行 regularization 的 bias 项解决所有参数的平方和。

2 反向流传算法
之前小 Mi 在计算神经网络预测后果的时候采纳了一种正向流传办法,须要从第一层开始正向一层一层进行计算,直到最初一层的。

当初,为了计算代价函数的偏导数,咱们须要采纳一种反向流传算法,也就是首先计算最初一层的误差,而后再一层一层反向求出各层的误差,直到倒数第二层。上面用一个例子来阐明反向流传算法。

假如咱们的训练集只有一个样本,咱们的神经网络是一个四层的神经网络,其中 K =4,,L=4:

前向流传算法:

从最初一层的误差开始计算,误差是激活单元的预测与理论值之间的误差,,用来示意误差,则:。利用这个误差值来计算前一层的误差:,其中是 S 形函数的导数,。而则是权重导致的误差的和。下一步是持续计算第二层的误差:,因为第一层是输出变量,不存在误差。咱们有了所有的误差的表达式后,便能够计算代价函数的偏导数了,假如,即不做任何正则化解决时有:

值得注意的是,须要分明地晓得下面式子中高低标的含意:

l 代表目前所计算的是第几层。

j 代表目前计算层中的激活单元的下标,也将是下一层的第 j 个输出变量的下标。

i 代表下一层中误差单元的下标,是受到权重矩阵中第 i 行影响的下一层中的误差单元的下标。

如果咱们思考正则化解决,并且训练集是一个特色矩阵而非向量。在下面的非凡状况中,咱们须要计算每一层的误差单元来计算代价函数的偏导数。在更为个别的状况中,咱们同样须要计算每一层的误差单元,然而须要为整个训练集计算误差单元,此时的误差单元也是一个矩阵,能够用来示意这个误差矩阵。第 l 层的第 i 个激活单元受到第 j 个参数影响而导致的误差。

咱们的算法示意为:

即首先用正向流传办法计算出每一层的激活单元,利用训练集的后果与神经网络预测的后果求出最初一层的误差,而后利用该误差使用反向流传法计算出直至第二层的所有误差。

在求出了之后,便能够计算代价函数的偏导数了,计算方法如下:

3 反向流传算法的直观了解
在上一节中,咱们介绍了反向流传算法,对很多人来说,当第一次看到这种算法时,第一印象通常是,啊,这个算法看起来好难,须要那么多繁冗的步骤,几乎是太简单了!切实不晓得这些步骤,到底应该如何合在一起应用。就如同一个黑箱,外面充斥了简单的步骤。如果你对反向流传算法也有这种感触的话,实际上是很失常的。相比于线性回归算法和逻辑回归算法而言,从数学的角度上讲,反向流传算法并不是一个简洁的算法,而且经常会让人感觉并不是很分明反向流传算法到底到底在做什么。当然啦,小 Mi 始终认为,practice makes perfect!多做一些编程练习能够帮忙咱们将这些简单的步骤梳理梳理,从而能够更深一步地了解反向流传算法具体是如何实现的,最终能够独立应用这个算法。

上面小 Mi 会帮忙大家坚固反向流传的一些固定步骤,使大家有一个更加全面直观的感触,了解这些步骤到底是在做什么,同时也能够证实,它至多还是一个正当且合格的算法。当然啦,可能最终大家还是会感觉反向流传仍然很简单,仍然像一个黑箱,蕴含了太多简单的步骤,甚至有点神奇,这也 OK。

上面咱们再来认真钻研一下前向流传的原理:

为了更好地了解反向流传,咱们先看钻研下前向流传的过程,这是一个蕴含 2 个输出单元的神经网络构造(当然啦,咱们并没有把偏置单元算进去),而后第二层有 2 个暗藏单元,再下一层也有 2 个,不过最初只有一个输入单元。

为了更好地阐明前向流传,能够用不同的色彩来示意这个网络。在进行前向流传时,可能会有一些个性的样本,比方,将其传到输出层中,因而能够把它们示意为,它们时咱们为输出层设置的值,对其进行前向流传流传到第一个暗藏层时,而后计算出,它们是输出单元的加权和,而后咱们将 sigmoid 逻辑函数,还有 sigmoid 激活函数利用到 z 值上失去这些激活值,也就是,而后持续向前流传,计算出,利用 sigmoid 逻辑函数和激活函数失去,就这样以此类推,最终失去,它是网络中最初的输入值。

进一步钻研下计算过程,比方紫红色示意的暗藏单元,将其权值示意进去,也就是,红色线这边的权值是,蓝色线的则是,因而计算的办法就是:,这就是前向流传。

事实上,前面咱们会发现反向流传的过程和前向流传十分类似,只是这两个算法计算的方向不一样而已,在反向流传算法中是从右往左进行运算:

首先咱们先看看代价函数,这个代价函数个别利用于只有一个输入单元的状况,如果不止一个输入单元,只需对它们进行求和即可;但如果只有一个输入单元,代价函数就会是这样,咱们同一组样本中,同时应用了前向流传和反向流传,能够择出一组独自的样本进行钻研剖析,,因为只有一个输入单元,就是一个实数,能够疏忽正则化,即,所以最初这个正则化项就没有了,察看括号中的这个求和项,会发现代价函数对应第 i 个训练样本,即代价函数对应的训练样本,是由式子:给出。所以第 i 个样本的代价函数表演了一个相似方差的角色,能够间接写成:,近似地当成是神经网络输入值与理论值的方差,就像逻辑回归中会偏差于抉择比较复杂的带对数模式的代价函数,然而为了能够把这个代价函数看作是某种方差函数,因而示意了预测样本值的精确水平,也就是网络的输入值,和理论观测值的靠近水平。

当初再看看反向流传的过程,简略来说反向流传就是在计算项,其实看作在第层第个单元中失去的激活项的“误差”,更正式地说,项实际上代价函数对于的偏导数,也就是计算出的 z 项的加权和或者说代价函数对于 z 项的偏导数,具体来说这个代价函数是一个对于标签 y 和神经网络中的输入值的函数,如果剖析网络的外部,略微改变下项,就能够影响神经网络的这些值,最终将扭转代价函数的值。

另外,对于输入层而言,比方咱们假如等于,当咱们对样本做前向流传和反向流传的时候,设,这是一个误差值,也就是 y 的理论值与预测值的差,就能够算出的值,而后对这些值进行反向流传,最初能够计算出前一层的这些项,也就是和,而后持续进行流传,最初计算出和,反向流传的计算过程和前向流传十分地类似,只是方向翻过来了。

能够看一下是如何计算出的值的,能够先标出权重,紫红色的权重为,红色的权重为,而后再来看是怎么计算的:

图.png

再举一个例子,的计算形式就是:。顺带一提,这些值都只对于暗藏单元,并不包含偏置单元,这个包不包含取决于对于反向流传的定义以及实现算法的形式,所以也能够用其余办法来计算蕴含偏置单元的值。偏置单位的输入总是“+1”,因为它们并不影响偏导数的计算,所以能够最初计算。

好啦,明天小 Mi 的分享就到这啦,心愿明天大家能对反向流传这个简单的函数有一个更加深刻的了解,尽管有点简单,然而好算法不怕多,对不对!下期的话小 Mi 还会针对神经网络的整体构造以及案例使用进行介绍,咱们下期再见~(挥手十分钟!)

PS: 身在南京的小 Mi 也心系河南,始终在心中为大家默默祷告!胡辣汤挺住,风雨背后盐水鸭和你们一起扛!!!

退出移动版