我有一个关于CNN最后一层中完全连接层的作用的问题。
1- FC层充当学习者分类器吗?
2-为什么我们首先使用线性激活函数,然后使用非线性激活函数(例如softmax)?
3-在网络顶部连续添加多个FC层的原因是什么?
M_L = KL.Dense(512, activation='relu')(M_L)
M_L = KL.Dropout(DROPOUT_PROB)(M_L)
M_L = KL.Dense(256, activation='relu')(M_L)
M_L = KL.Dropout(DROPOUT_PROB)(M_L)
M_L = KL.Dense(128, activation='relu')(M_L)
M_L = KL.Dropout(DROPOUT_PROB)(M_L)
M_L = KL.Dense(64, activation='relu')(M_L)
M_L = KL.Dropout(DROPOUT_PROB)(M_L)
M_L = KL.Dense(1, activation='Sigmoid')(M_L)4-如果我们只这样做,会有什么不同:
M_L = KL.Dense(512, activation='relu')(M_L)
M_L = KL.Dropout(DROPOUT_PROB)(M_L)
M_L = KL.Dense(1, activation='Sigmoid')(M_L)或者甚至是:
M_L = KL.Dense(1, activation='Sigmoid')(M_L)我的直觉是,通过添加更多的FC层,我们有更多的可训练参数。因此,对于一个特定的任务,有一些特定的参数将有助于多任务网络。我说的对吗?
5-我们添加几个连续的FC层是否还有其他原因?平滑地减少特征是否有助于训练分类器?
发布于 2019-09-13 17:42:31
Universal Approximation Theorem指出,神经网络只需要一个具有非线性激活函数的隐藏层来对任何函数进行建模。这一单层可能需要有无限数量的过滤器才能完美地模拟函数--但我们可以通过选择足够多的过滤器来获得任意精度的近似值。
所以你是对的,原则上,你的第二个架构将能够近似你的功能。它不会像第一个那样做得很好,但它会做一些事情。
第三种架构非常弱,因为你没有隐藏层。您只有一个带有sigmoid激活函数的过滤器。假设你想要建模的函数被限制在0到1的范围内,这就是为什么你的所有架构中都有一个sigmoid输出层的原因。想必,您有很多输入。在您的第三个体系结构中将发生的所有事情是,您将获得输入的加权线性和,添加一个标量权重(偏差),然后获取结果的sigmoid。这不是很有表现力。在这种架构下,你不能任意接近一个任意函数。
现在,第一个“深度”架构有什么特别之处?通用近似定理说我们只需要一个隐藏层,第二个架构就有这个。所以我们可以把这个单一的隐藏层做得更宽,对吧?万能近似定理并不是说单个隐藏层是对函数建模的最佳方式。通常,我们发现过滤器数量逐渐减少的多层可以产生更好的结果。要获得与第一种体系结构类似的结果,您可能需要在隐藏层中使用10,000个过滤器。
在引入ReLU之前,深度架构的训练速度非常慢,或者被卡住了。现在这已经不是什么大问题了。
https://stackoverflow.com/questions/57920748
复制相似问题