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

基本知识

卷积操作 即为 一系列 滤波操作 之和 。 有关卷积的概念,具体可参加我的这篇文章:深度学习: 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。

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

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

颜色特征提取边缘特征提取纹理特征提取肢干特征提取整体特征提取
2%10%80%8%2%


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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值