我对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层吗?平滑减少功能有助于训练分类器吗?
答案 0 :(得分:1)
Universal Approximation Theorem指出,神经网络只需要具有非线性激活函数的单个隐藏层即可对任何函数进行建模。单层可能需要无限数量的滤波器才能完美地对函数进行建模-但是我们可以通过选择足够多的滤波器来获得任意精度的近似值。
因此,从原则上讲,您的第二个体系结构将能够近似您的功能。它不会像第一个那样做,但是会有所作为。
第三个架构非常脆弱,因为您没有隐藏层。您只有一个具有S型激活功能的滤波器。大概您要建模的函数被限制在0到1的范围内。这就是为什么所有体系结构中都存在S型输出层的原因。大概您有很多输入。在第三个体系结构中将要发生的所有事情是,您将对输入进行加权的线性求和,加上一个标量权重(偏差),然后得出结果的S形。那不是很表现力。使用这种架构,您无法任意接近任意函数。
现在,第一个“深度”架构有何特别之处?通用逼近定理说,我们只需要一个隐藏层,而第二个体系结构就具有该层。因此,我们可以将单个隐藏层扩大,对吗?好吧,通用近似定理并没有说单个隐藏层是对函数建模的最佳方式。通常,我们发现滤光片数量逐渐减少的多层会产生更好的结果。为了在第二种架构上获得与第一种架构相当的结果,您的隐藏层中可能需要10,000个过滤器。
在引入ReLU之前,深度架构的训练非常缓慢或陷入困境。现在这不是什么大问题。