我已经学习机器学习4个月了,我理解多层感知机(MLP)背后的概念。问题出现在我开始阅读关于卷积神经网络(CNN)的内容时。让我先告诉你我所知道的,然后再问我遇到的问题。
CNN的核心部分包括:
- 卷积层:你有“n”个滤波器,用来生成“n”个特征图。
- RELU层:用于归一化卷积层的输出。
- 子采样层:用于“生成”代表更抽象概念的新特征图。
重复前三层几次,最后部分是一个常见的分类器,比如MLP。
我的疑问如下:
- 如何创建卷积层中使用的滤波器?我是需要先创建一个滤波器,训练它,然后放入卷积层,还是直接用反向传播算法来训练它?
- 假设我有一个卷积层,里面有3个滤波器,那么它会输出3个特征图。在应用RELU和子采样层后,我仍然会有3个特征图(但更小)。当再次通过卷积层时,我如何计算输出?我是需要在每个特征图上分别应用滤波器,还是对3个特征图进行某种操作然后再求和?我完全不知道如何计算第二个卷积层的输出,以及它会输出多少个特征图。
- 如何将卷积层的输出数据传递给MLP(用于神经网络最后部分的分类)?
如果有人知道一个不使用框架的简单CNN实现,我会非常感激。我认为学习事物工作原理的最佳方式是自己动手做。将来,当你已经知道事物是如何工作的,你可以使用框架,因为它们能节省很多时间。
回答:
- 你用反向传播算法来训练它,就像训练MLP一样。
- 你需要分别应用每个滤波器。例如,如果你在第一层有10个特征图,而第二层的一个特征图的滤波器形状为3*3,那么你要将3*3的滤波器应用到第一层的每个特征图上,每个特征图的权重是不同的,在这种情况下,一个滤波器将有3*3*10个权重。为了更容易理解,记住非灰度图像的一个像素有三个值——红色、绿色和蓝色,所以如果你将图像传递给卷积神经网络,那么在输入层你已经有3个特征图(用于RGB),因此下一层的一个值将连接到第一层的全部3个特征图。
- 你应该将卷积特征图展平,例如,如果你有10个大小为5*5的特征图,那么你将有一个包含250个值的层,然后与MLP没有什么不同,你通过权重将所有这些人工神经元连接到下一层的所有人工神经元。
这里有人实现了不使用框架的卷积神经网络。
我还推荐你观看这些讲座。