全连接层原理解析

全连接层一般由两个部分组成:线性部分和非线性部分,类似下图:


FCN.

这是一个整体的全连接网络,其实从input layer到hidden layer1已经是一个完整的全连接层的转换过程,下面来看看细节。

  • 线性部分:
    对于输入层向量x=[x_0,x_1,...x_n]^T,其输出是hidden layer1设置为z = [z_0.z_1,...z_m]^T,那么实际上它要转变为一个m维的向量,所以可以认为input layer需要乘上一个m*n的矩阵W,再加上一个偏置b=[b_0,b_1,...b_n]

W*x+b = z

给出个例子:


WX.jpg

实际上要获得hidden layer1,还要把z进行一个变换,这是从数学原理来看的,但是我们只是知道它进行了一个这样的运算,却不知道其作用是什么,那再看一个例子:
对于入门的MNIST,其输入是一个28*28的二值图,输出为0-9其中一个数字,如下图所示:


MNIST.PNG

这个应该是1,但是我们怎么判断出来呢,这些像素点对于机器来说只是二维矩阵,怎么把它和最终的取值联系起来?显然它们应该存在一定的关系,那我们把它展开形成一个28*28=784的一维向量作为输入,假设我们只有一层的话,那output layer为10个单元,运算如图所示:

MNIST2.jpg

对于每个像素点,我们给出一组权重,进行运算来获取最终的值,实际上我们也知道权重初始的时候是随机的,后续权重会通过反向传播自己学习,这个意义就是,我们从多个角度对输入的数据进行了分析和总结,这个的矩阵,一共十行,代表为每个取值的运算结果,每行有794个元素,代表对输入每个像素点的考量。

  • 非线性部分
    一般称之为激活函数g(z),因为线性变化再怎么转变还是线性的,而很多情况并不是简单的一个线性的对应关系,那么它就很难拟合真是的场景,所以引入了非线性变化,例如sigmod函数等。结果线性变换得到的结果结果激活函数g(z)即为hidden layer1的值,即:

hddden\_layer1 = g (W*input + bia)

然后hidden layer1又作为input 输入到下一层。

  • 总结
    实际上,在现在的网络架构中,一般都是前面是CNN,最后是几层全连接层,一个感兴趣的点是怎么从CNN转换到全连接层,另一个是为什么使用FCN,下面我思考一下。
    • CNN->FCN
      现在假设CNN的最后输出是一个20*10*10的图像,全连接层的第一层为100个单元,是怎么做到从20*10*10到1*100呢,实际上,是由20*100个10*10的卷积核经过线性变换得到的,对于20个10*10的图像,我们也使用20个10*10的卷积核和它们相乘,这样我们得到了20*1*1的结果,把显然厚度为20,那么把20个1*1相加,即得到了一个单元的值,这样的运算做100次,即有1*100个单元。
    • 全连接层的目的
      传统的网络输出一般是分类,也就是几个类别的概率或者是是一个数表示那个类别,经过CNN后提取的已经是高度提纯的特征了,那么全连接层可以使用这些特征来进行分类或者回归,不过由于全连接层的参数太多了,目前的最新趋势是全局平均化。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。