用神经网络做分类任务时,是不是输出层的神经元个数一定要和类别数相同?

用神经网络做分类任务时,是不是输出层的神经元个数一定要和类别数相同?

神经网络中最后一层的输出层常为全连接层,它在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。

在很多常见的模型架构中,最后一层全连接层都与分类类别数相同,比如做MNIST手写数字识别问题就有10个输出层神经元节点,做ImageNet图片分类任务就有1000个输出层神经元节点。是不是一定需要这样做呢?为什么不可以用二进制表示方式或者甚至一个输出节点来代替原本one-hot向量的表示方式?

在图像分类中,不同的编码方式和激活函数会对分类自然有不同的影响。一般分类输出我们会用到Sigmoid和Softmax函数,Sigmoid是一个二项分布,而Softmax是进阶版本的多项式分布。二分类时,Softmax等价于Sigmoid。因此,对于二分类任务,一个或两个输出节点都是可以的,用的是Softmax则输出[0,1]、[1,0]这样的标签,使用categorical-crossentropy损失函数;用Sigmoid激活函数则输出0或1这样的标签,使用binary-crossentropy损失函数。

对于多分类而言,如果使用one-hot的编码方式,在最后一层全连接层中也是需要激活函数的,如果模型输出为非互斥类别,且可以同时选择多个类别,则通常选用Sigmoid函数。如果模型输出为互斥类别,且只能选择一个类别,则通常选用Softmax函数。

如果使用二进制的编码方式,以四分类为例,one-hot用[1,0,0,0]、[0,1,0,0]、[0,0,1,0]、[0,0,0,1]这样的标签来表示;二进制则用[0,0]、[0,1]、[1,0]、[1,1]来表示,这个时候只需要两个能输出的0和1的神经元就可以代表四个类别。它们都能表达四分类标签,但是实际使用中效果不一样,比如在第二种标签中[0,0]和[0,1]不是完全独立的,第一位的“0”是相同的,这样计算损失函数的时候这两类在区分的时候有一位是没用的([0,0]和[1,0]、[0,1]和[1,1]、[1,0]和[1,1]同理)。第一种方式中虽然也不是完全独立,但任意两个标签之间,比如[1,0,0,0]和[0,1,0,0]仍然有两位不同,区分度会比第二种表示方式更好。因此,理论上第二种方式在训练的时候会比第一种收敛慢。

此外,如果只考虑用一个输出节点的话,就是把[0,1]区间划分成多个小区间,最后的输出值归属于哪个区间就是哪个类。这样做的话,就相当于把分类问题转为了类似回归的问题。在多分类中应该是行不通的,因为分类之间应该是平等的关系,这么做的话引入了额外的顺序关系,[0,0.25]代表的类和[0.25,0.5]代表的类之间的距离,与[0,0.25]代表的类和[0.75,1]代表的类之间的距离显然不一样,这么建模与实际相差可能较大,猜想实际效果会变差。

参考链接:https://www.zhihu.com/question/395814206?utm_source=com.tencent.minihd.qq&utm_medium=social&utm_oi=886574949685432320

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值