Network in Network 笔记

network in network 学习笔记

-lenet等传统cnn网络中的卷积层其实就是用线性滤波器对图像进行内积运算,在每个局部输出后面跟着一个非线性的激活函数,最终得到的叫作特征图。而这种卷积滤波器是一种广义线性模型。所以用CNN进行特征提取时,其实就隐含地假设了特征是线性可分的,可实际问题往往是难以线性可分的。

GLM:(Generalized linear model)广义线性模型:

什么样的模型抽象水平更高呢?当然是比线性模型更有表达能力的非线性函数近似器了(比如MLP 多层感知神经网络)。

MLP的优点:
1. 非常有效的通用函数近似器
2. 可用BP算法训练,可以完美地融合进CNN
3. 其本身也是一种深度模型,可以特征再利用

-network in network网络的创新点

  1. 改进了传统CNN的结构。将每个卷积层用一个小型的权值共享的多层全连接神经网络(即多层感知机,mlp)代替,据说比单纯的卷积操作具有更好的非线性表达能力,可以逼近任意函数。
  2. 取消传统CNN的全连接层,倒数第二层就是feature maps,每个feature map对应一类,最后一对一直接连到softmax层输出各类概率。

- 普通卷积局部感受野层 与 mlp结构的 区别?

以前的卷积层中,我们局部感受野窗口的运算,可以理解为一个单层的网络,如下图所示:
这里写图片描述

mlpconv层的网络结构图如下:
这里写图片描述

各用一句话概括
1. 常规卷积层: conv→relu
2. maxout: several conv(full)→max
3. NIN: serveral conv(full)→relu→conv(1x1)→relu

具体一点

  1. 常规卷积层:conv→relu
    conv: conv_out=∑(x·w)
    relu: y=max(0, conv_out)

  2. maxout:several conv(full)→max
    several conv (full): conv_out1 = x·w_1, conv_out2 = x·w_2, …
    max: y = max(conv_out1, conv_out2, …)

  3. NIN: conv→relu→conv(1x1)→relu
    several conv (full): conv_out1 = x·w_1, conv_out2 = x·w_2, …
    relu: relu_out1 = max(0, conv_out1), relu_out2 = max(0, conv_out2), …
    conv(1x1): conv_1x1_out = [relu_out1, relu_out2, …]·w_1x1
    relu: y = max(0, conv_1x1_out)

举例子解释

 假设现在有一个3x3的输入,用一个9维的向量x代表,卷积核大小也是3x3,也9维的向量w代表。
  1. 对于常规卷积层,直接x和w求卷积,然后relu一下就好了。
  2. maxout,有k个的3x3的w(这里的k是自由设定的),分别卷积得到k个1x1的输出,然后对这k个输入求最大值
  3. NIN,有k个3x3的w(这里的k也是自由设定的),分别卷积得到k个1x1的输出,然后对它们都进行relu,然后再次对它们进行卷积,结果再relu。(这个过程,等效于一个小型的全连接网络)

图例
继续渣手绘,从上到下分别对应常规卷积层,maxout,NIN:

这里写图片描述

下面是caffe中mlpconv层的代码示例:

layers {
  bottom: "data"
  top: "conv1"
  name: "conv1"
  type: CONVOLUTION
  blobs_lr: 1
  blobs_lr: 2
  weight_decay: 1
  weight_decay: 0
  convolution_param {
    num_output: 96
    kernel_size: 11
    stride: 4
    weight_filler {
      type: "gaussian"
      mean: 0
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layers {
  bottom: "conv1"
  top: "conv1"
  name: "relu0"
  type: RELU
}
layers {
  bottom: "conv1"
  top: "cccp1"
  name: "cccp1"
  type: CONVOLUTION
  blobs_lr: 1
  blobs_lr: 2
  weight_decay: 1
  weight_decay: 0
  convolution_param {
    num_output: 96
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "gaussian"
      mean: 0
      std: 0.05
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layers {
  bottom: "cccp1"
  top: "cccp1"
  name: "relu1"
  type: RELU
}
layers {
  bottom: "cccp1"
  top: "cccp2"
  name: "cccp2"
  type: CONVOLUTION
  blobs_lr: 1
  blobs_lr: 2
  weight_decay: 1
  weight_decay: 0
  convolution_param {
    num_output: 96
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "gaussian"
      mean: 0
      std: 0.05
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layers {
  bottom: "cccp2"
  top: "cccp2"
  name: "relu2"
  type: RELU
}

mlpconv层的组合网络结构如下图:

这里写图片描述

- 总结

  1. 总的来说,maxout和NIN都是对传统conv+relu的改进。
  2. maxout想表明它能够拟合任何凸函数,也就能够拟合任何的激活函数(默认了激活函数都是凸的)
  3. NIN想表明它不仅能够拟合任何凸函数,而且能够拟合任何函数,因为它本质上可以说是一个小型的全连接神经网络
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值