思考: 神经网络层 的 功能识别

基本知识

卷积操作 即为 一系列 滤波操作 之和 。 有关卷积的概念,具体可参加我的这篇文章:深度学习: convolution (卷积)

现有研究

Zeiler 和 Fergus 两位大佬在他们获得ECCV2014最佳论文提名奖的论文《Visualizing and Understanding Convolutional Networks》中,就对各卷积层 生成的 feature map(特征图) 展开了 可视化探究

缺陷

但是他们却没有对 各卷积层的 卷积核 展开 功能规律性 总结

观察

初始化后的深度学习模型的训练就像一个婴孩。 在训练过程中,各网络层 总数不变,但在梯度下降的 引导 下,不断 分化 成各种 功能层 。各功能层 协作 ,使得模型成熟而强大。

而每个神经网络层的 卷积核,其实就是 一系列的 filter(滤波器)集合 。 (关于不同类型的filter,可参见我之前在github上开源的一个repo:Image_Filter

思考

训练好的模型中,各层 的 卷积核 参数 初看起来像是一块乱序的tensor。

但是,通过某种卷积操作(即滤波操作)以实现 该特征 的 抽取功能,那么所用到的卷积核(即filter集合)一定会 近似于 某种filter集合。

通俗点讲,既然他们能 分化 成各种 功能层 ,意味着他们一定会长得越来越像 该功能 所对应的 filter集合

举例

例如,如果该功能层80%的功能是实现边缘提取,那么它的卷积核一定 长得像 加长版的边缘滤波器。

各种边缘滤波器,长得又都极其类似(代码截取自Image_Filter):

def Edge_Detection_360_degree_Filter():
    # Edge_Detection_360° Filter  360°边缘检测 滤波 (抽取 边缘特征)
    filter_0 = np.array([[[-1,0,0],[-1,0,0],[-1,0,0]],
                         [[-1,0,0],[8,0,0],[-1,0,0]],
                         [[-1,0,0],[-1,0,0],[-1,0,0]]],
                        dtype=np.int16)
    filter_1 = np.array([[[0,-1,0],[0,-1,0],[0,-1,0]],
                         [[0,-1,0],[0,8,0],[0,-1,0]],
                         [[0,-1,0],[0,-1,0],[0,-1,0]]],
                        dtype=np.int16)
    filter_2 = np.array([[[0,0,-1],[0,0,-1],[0,0,-1]],
                         [[0,0,-1],[0,0,8],[0,0,-1]],
                         [[0,0,-1],[0,0,-1],[0,0,-1]]],
                        dtype=np.int16)
    return filter_0, filter_1, filter_2

def Edge_Detection_45_degree_Filter():
    # Edge_Detection_45° Filter  45°边缘检测 滤波 (抽取 边缘特征)
    filter_0 = np.array([[[-1,0,0],[0,0,0],[0,0,0]],
                         [[0,0,0],[2,0,0],[0,0,0]],
                         [[0,0,0],[0,0,0],[-1,0,0]]],
                        dtype=np.int16)
    filter_1 = np.array([[[0,-1,0],[0,0,0],[0,0,0]],
                         [[0,0,0],[0,2,0],[0,0,0]],
                         [[0,0,0],[0,0,0],[0,-1,0]]],
                        dtype=np.int16)
    filter_2 = np.array([[[0,0,-1],[0,0,0],[0,0,0]],
                         [[0,0,0],[0,0,2],[0,0,0]],
                         [[0,0,0],[0,0,0],[0,0,-1]]],
                        dtype=np.int16)
    return filter_0, filter_1, filter_2

Idea

相同功能 的网络层,所对应的 卷积核 一定 长得彼此类似

通过总结出 各类 功能层 对应的 “卷积核 大众脸”(即该类型卷积核的参数惯常分布),即可找出规律。

用途

可用于对 训练好的 神经网络层 进行 功能识别

网络层 功能识别 具体步骤

首先,总结出常用的几类功能滤波器(例如颜色特征抽取、边缘特征抽取、纹理特征抽取、肢干特征抽取、整体特征抽取)。

其次,对要进行识别的网络层,输入该层训练好的卷积核。

接着,对 维度 进行 归一化 ,以保证要识别的 tensor 有一致的size。

然后,将预处理过的 待识别卷积核常用的 几类功能滤波器 进行 相似度比较 (比如通过 l2l_{_2}损失函数,求得各位置上对应参数值的距离损失)。

通过比较各损失情况,得出该卷积核的 功能分类概率 。 举例如下图:

颜色特征提取

边缘特征提取

纹理特征提取

肢干特征提取

整体特征提取

2%

10%

80%

8%

2%

最后,通过最大概率, 判定 该功能层为 纹理特征提取层 (或通过 大于10%概率阈值 的筛选方法,判定其为 80%纹理+10%边缘 的 特征提取层 )。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏新智元

Reddit 讨论:Hinton的Capsule网络真的比CNN效果更好吗?

【新智元导读】Hinton 提出用 Capsule 这个概念代替反向传播,引起广泛关注。本文来自Reddit上“Capsule networks为何与众不同,它...

3537
来自专栏AI科技大本营的专栏

深度学习目标检测指南:如何过滤不感兴趣的分类及添加新分类?

AI 科技大本营按:本文编译自 Adrian Rosebrock 发表在 PyImageSearch 上的一篇博文。该博文缘起于一位网友向原作者请教的两个关于目...

1352
来自专栏算法channel

机器学习逻辑回归:算法兑现为python代码

0 回顾 昨天推送了逻辑回归的基本原理:从逻辑回归的目标任务,到二分类模型的构建,再到如何用梯度下降求出二分类模型的权重参数。今天,我们将对这个算法兑现为代码...

3605
来自专栏专知

【专知-PyTorch手把手深度学习教程02】CNN快速理解与PyTorch实现: 图文+代码

【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视...

4.7K11
来自专栏ATYUN订阅号

Python中的白噪声时间训练

白噪声是时间序列预测中的一个重要概念。如果一个时间序列是白噪声,它是一个随机数序列,不能预测。如果预测误差不是白噪声,它暗示了预测模型仍有改进空间。 在本教程中...

8366
来自专栏机器之心

入门 | 如何通过梯度检验帮助实现反向传播

1355
来自专栏专知

【最新TensorFlow1.4.0教程03】利用Eager Execution构建和训练卷积神经网络(CNN)

【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视...

4115
来自专栏null的专栏

利用Theano理解深度学习——Convolutional Neural Networks

注:本系列是基于参考文献中的内容,并对其进行整理,注释形成的一系列关于深度学习的基本理论与实践的材料,基本内容与参考文献保持一致,并对这个专题起名为“利用The...

4619
来自专栏ATYUN订阅号

【学术】一文教你如何正确利用kNN进行机器学习

AiTechYun 编辑:xiaoshan k最近邻算法(kNN)是机器学习中最简单的分类方法之一,并且是入门机器学习和分类的好方法。它基本上是通过在训练数据中...

2825
来自专栏Petrichor的专栏

深度学习: Regularization (正则化)

正则化,regularization,也即 约束 。是防止过拟合的诸多手段之一,很常用。

1.2K4

扫码关注云+社区

领取腾讯云代金券