Kuo 是机器学习的前辈,看不惯几年来的调参浪潮,因此自己开疆拓土提出了一套不用反向传播(用传统方法 PCA)的 CNN。虽然我不敢苟同,但是一代人有一代人熟悉的方法,这个世界需要弄潮儿,也需要摆渡人。
Kuo 对 CNN 的认识
尽管 CNN 已经取得了 state-of-the-art 的地位,但是仍然存在一些问题:over-parameters:大量的参数进行反向传播,数学上难以解释;numerous tricks:复杂的网络结构、Dropout 等让网络变得难以理解;sensitivitity:受到攻击时鲁棒性差。
针对这些问题 Kuo 搞了一个新的 CNN 模型 FF CNN,模型有三个优点:不需要反向传播,因此速度更快,资源占用少;每一个 layer 可解释,layer 也不多,没有深度学习的黑箱;是一个半监督(甚至可以是无监督)模型,不依赖于 label。
Kuo 正在改进的缺点有:准确率目前略低于带有 BP CNN,但是仍有提升空间;虽然没有明确说明,但是模型应该是 problem special 的,需要根据数据集特点手动调整。
此外,Kuo 设计了两个方面的实验对比 FF CNN 和 BP CNN:分类问题的准确率、受到攻击时的鲁棒性。
FF CNN 的设计
CNN 的含义
CNN 是一系列的特征映射。这些特征映射可以分为升维和降维两类。
大多数时候都是在降维,少数时候是在升维。其中,升维是在扫描整个图像,得到尽可能多的有效特征。降维则是从当前特征中选择最有效的特征。升维的方法有卷积。降维的方法有PCA、pooling。保持维度,增强特征的方法有激活函数、全连接(也可以用于降维)。
卷积的含义
对于卷积公式我们可以这样理解训练参数 [图片上传失败...(image-281cf0-1572431090839)]
:对于传统的 BP CNN,它是过滤器的权重(需要优化的参数),求过滤器的权重与输入数据的内积即为匹配过滤器的过程。我们还可以这样考虑,将它当作一组线性空间的基,求基与输入数据的积即为特征在低维空间的近似。
池化的含义
卷积帮助我们得到猫的模式,池化帮助我们选择猫的模式。池化会帮助我们选择众多模式中共有的部分。
比如,所有的 9 张猫都有相似的脸,池化就会抹掉其他信息,提取公共的猫脸。我们可以用统计分析模拟这个过程。
这里 Kuo 解释了为何 max pooling 比 average pooling 更有效。这是因为 max pooling 能够提取窗格内较远的信息,从而更好的表征位置不同而形状相同的信息。比如,图中的猫脸位置稍有不同,但是在 pooling 的作用下都回到了画面中心。
多层感知器的含义
多层感知器在 CNN 中充当的是分类器的角色,每一个隐藏层都是一次映射,将输入降维。我们可以这样理解,每一次映射是从 intra-class 到 class 的过程,多次映射后获得所需维度的 class。
比如,第一次映射区分了蟒蛇、眼镜蛇、加菲猫、波斯猫,第二次映射区分了蛇和猫。多次映射后得到了在我们所需维度上的分类。
我们可以使用 K-Means 模拟这一过程,对于一个 40 -> 20 -> 10 的多层感知器,我们可以使用 K-Means 聚 40 类、20 类、10 类,模拟每一个隐藏层的输入和输出。
有了每一层的输入和输出,我们可以使用最小平方回归(如上图),求解 intra-class 到 class 的映射过程。从而,将反向传递计算 [图片上传失败...(image-401532-1572431249509)]
变成了解方程计算 [图片上传失败...(image-f088c1-1572431249509)]
。
集成与叠加
我们都知道,多层的 PCA 效果较差,因此 FF CNN 无法像 BP CNN 一样通过叠加 layer 提高对特征的表征能力。但是 Kuo 认为,可以通过集成(ensemble)多种 FF CNN 来提高 FF CNN 的性能。FF CNN 就像一个简单的小机器人,BP CNN 则是一个复杂的大机器人。FF CNN 通过量取胜,BP CNN 通过复杂性取胜。
在上图中,Kuo 构建了 3 种 FF CNN,在受到攻击时,可以采用多数投票制进行集成。一个小机器人被打倒,其他的机器人仍能存活下来。此外,Kuo 还列举了根据 RGB 设计 FF CNN 集成的方法。
虽然 Kuo 没有阐述 FF CNN 在并行等领域的应用,这个模型效率高、能耗低,比 BP CNN 具有更大的并行可能,未来或许会在嵌入式等领域大放光彩。
FF CNN 与 BP CNN 的应用场景抽象
Kuo 最后的总结很正经,前辈客观地阐述了 FF 和 BP 的应用场景,批评了一些人(也就是我们这届差生 233)不分 data collection 青红皂白就上 BP 的做法。他说:
FF 是一种 data-independent 模型,因此它高效,适合解简单问题。BP 是一种 data-driven 模型,因此它耗时,适合解复杂问题。
我们拿到一个 dataset 的时候,没有人会跟你说这个 dataset 是简单还是复杂的,你的 dataset 可能不是 pure 的。
如果你用 data-driven 模型,复杂的 data 可能会覆盖简单的 data 造成过拟合。如果你用 data-independent 模型,可能会因为无法表征复杂的 data 而效果较差。
一切设计都要因 dataset 制宜。
结束
Kuo 发表了一篇论文“ Interpretable Convolutional Neural Networks via Feedforward Design”,表述严谨清晰,感兴趣可以了解一下。
我很佩服这位前辈,手动把消耗大量算力的训练参数自己 “解” 了出来。现在,我们不止能对结果求交叉熵,对比预测结果和实际 label 的差异,还能在每一步计算 FF CNN 求得的参数和 BP CNN 训练的参数的差异。
从上图我们可以看出,这个解和BP求得的解仍有一定距离。