首页 资料正文

神经网络-全连接层(1)

woniu 资料 2020-03-22 23:13:00 54239 0 | 文章出自:用户投稿

       apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium;">接下来聊一聊现在大热的神经网络。最近这几年深度学习发展十分迅速,感觉已经占据了整个机器学习的“半壁江山”。各大会议也是被深度学习占据,引领了一波潮流。深度学习中目前最火热的两大类是卷积神经网络(CNN)和递归神经网络(RNN),就从这两个模型开始聊起。

      当然,这两个模型所涉及到概念内容实在太多,要写的东西也比较多,所以为了能把事情讲得更清楚,这里从一些基本概念聊起,大神们不要觉得无聊啊……

      今天扯的是全连接层,也是神经网络中的重要组成部分。关于神经网络是怎么发明出来的这里就不说了。全连接层一般由两个部分组成,为了后面的公式能够更加清楚的表述,以下的变量名中上标表示所在的层,下标表示一个向量或矩阵内的行列号

  • 线性部分:主要做线性转换,输入用X表示,输出用Z表示
  • 非线性部分:那当然是做非线性变换了,输入用线性部分的输出Z表示,输出用X表示。

line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; color: rgb(51, 51, 51);">线性部分

      线性部分的运算方法基本上就是线性加权求和的感觉,如果对于一个输入向量神经网络-全连接层(1) ,线性部分的输出向量是神经网络-全连接层(1) ,那么线性部分的参数就可以想象一个m*n的矩阵W,再加上一个偏置项神经网络-全连接层(1) ,于是有:

神经网络-全连接层(1)

      线性部分做了什么事情呢?简单来说就是对输入数据做不同角度的分析,得出该角度下对整体输入数据的判断。

      这么说有点抽象,举一个实际点的例子,就拿CNN的入门case——MNIST举例。MNIST的例子在此不多说了,它是一个手写数字的识别项目,输入是一张28*28的二值图,输出是0-9这是个数字,这里假设我们采用完全全连接的模型,那么我们的输入就是28*28=784个像素点。数据显示到屏幕上大概是这个样子:

神经网络-全连接层(1)

      对于我们来说,这个像素点都太过于抽象了,我们无法判断这些像素点的取值和最终识别的关系:

      他们是正相关还是负相关?

      很显然,像素点之间是存在相关关系的,这个关系具体是什么我们后面再说,但存在关系这件事是板上钉钉的。所以只给每一个像素点一个权重是解决不了问题的,我们需要多组权重。

      我们可以

1)在第一组权重中给第一个像素一个正数,第二个也是正数,

2)在第二组权重中给第一个像素负数,而第二个还是正数……

      这样,我们相当于从多个角度对输入数据进行分析汇总,得到了多个输出结果,也就是对数据的多种评价。

非线性部分

      非线性部分有一些“套路”函数,这里只说下其中的一个经典函数——sigmoid。它的函数形式如下所示:

神经网络-全连接层(1)

      图像如下所示:

 神经网络-全连接层(1)

      这个函数的输入正是我们上一步线性部分的输出z,此时z取值范围在神经网络-全连接层(1) ,经过了这个函数就变成了神经网络-全连接层(1)

      那非线性部分为什么要做这个函数转换呢?以我的粗浅理解,其中的一个作用就是作数据的归一化。不管前面的线性部分做了怎样的工作,到了非线性这里,所有的数值将被限制在一个范围内,这样后面的网络层如果要基于前面层的数据继续计算,这个数值就相对可控了。不然如果每一层的数值大小都不一样,有的范围在(0,1),有的在(0,10000),做优化的时候优化步长的设定就会有麻烦。

      另外一个作用,就是打破之前的线性映射关系。如果全连接层没有非线性部分,只有线性部分,我们在模型中叠加多层神经网络是没有意义的,我们假设有一个2层全连接神经网络,其中没有非线性层,那么对于第一层有:

神经网络-全连接层(1)

      对于第二层有:

神经网络-全连接层(1)

      两式合并,有

神经网络-全连接层(1)
神经网络-全连接层(1)

      所以我们只要令神经网络-全连接层(1)  , 神经网络-全连接层(1) ,就可以用一层神经网络表示之前的两层神经网络了。所以非线性层的加入,使得多层神经网络的存在有了意义。

      另外还有一个比较有名的非线性函数,叫做双曲正切函数。它的函数形式如下所示:

神经网络-全连接层(1)

 神经网络-全连接层(1)

      这个长得很复杂的函数的范围是(-1,1)。可以看出,它的函数范围和前面的sigmoid不同,它是有正有负的,而sigmoid是全为正的。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接:https://www.chinaai.com/ziliao/572.html

评论