【深度学习】深度学习基础知识

1、卷积核为什么是奇数的?

2、卷积核的平移不变性和卷积是如何获取到绝对位置信息?

3、卷积神经网络复杂度分析

3.1时间复杂度(计算量)

  • 计算量只看输出特征图尺寸,因为输出特征图上每个点都是卷积核在输入特征图上一次卷积运算得到。

3.2 空间复杂度(模型参数量)

  • 也就是卷积核的参数量,与特征图的尺寸无关。

 另外两个笔记:

4、卷积核的感受野

1. 感受野的概念

在卷积神经网络中,感受野(Receptive Field)的定义是卷积神经网络每一层输出的特征图上的像素点在输入图片上映射的区域大小。再通俗点的解释是,特征图上的一个点对应输入图上的区域,如图1所示。

2. 感受野的例子

(1)两层3*3的卷积核卷积操作之后的感受野是5*5,其中卷积核(filter)的步长(stride)为1、padding为0,如图2所示:

                         图2:两层3*3卷积核操作之后的感受野是5*5

(2)三层3*3卷积核操作之后的感受野是7*7,其中卷积核的步长为1,padding为0,如图3所示:

3. 感受野的计算

卷积核为3*3,步长stride_n=1,K_i:第i层卷积核的大小。

第0层的感受野:原图感受野1

第1层的感受野:RF_1 = K_1 = 3

第2层的感受野:RF_2 = RF_1 + (k_2 - 1) = 3 + (3 - 1) = 5

第3层的感受野:RF_3 = RF_2 + (k_3 - 1) = 5 + (3 - 1) = 7

第n层的感受野:

当前层感受野 = 上一层的感受野 + (卷积核尺寸 - 1) × 之前所有的卷积核步长相乘

链接参考:Receptive field(感受野) - 简书

5、线性回归

6、正则化

7、Dropout

        Dropout可以作为训练深度神经网络的一种trick供选择。在每个训练批次中,通过忽略一半的特征检测器(让一半的隐层节点值为0),可以明显地减少过拟合现象。这种方式可以减少特征检测器(隐层节点)间的相互作用,检测器相互作用是指某些检测器依赖其他检测器才能发挥作用。

        Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征,如图所示。
 

训练和测试阶段的差异:

由于训练阶段使部分神经元随机失活,导致该层的数据值变小。这里有两种处理方法:

  1. 一种是在测试阶段,将该层的数据值缩小,使得和训练阶段数据的量级一致。
  2. 另一方式是,直接在训练阶段做完Dropout后,对数据进行放大。这样测试阶段就不需要针对Dropout操作进行特殊处理。

caffe中的实现方式:caffe源码中,在训练阶段执行dropout失活部分神经元后,会将输入值放大到失活前的量级。因为在训练阶段已经针对dropout操作进行了数据缩放,所有测试阶段不需要做特殊处理。caffe中dropout_layer.cpp源码

// LayerSetUp
DCHECK(threshold_ > 0.);
DCHECK(threshold_ < 1.);
scale_ = 1. / (1. - threshold_);
// forward
void DropoutLayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>*>& bottom,
    const vector<Blob<Dtype>*>& top) {
  const Dtype* bottom_data = bottom[0]->cpu_data();
  Dtype* top_data = top[0]->mutable_cpu_data();
  unsigned int* mask = rand_vec_.mutable_cpu_data();
  const int count = bottom[0]->count();
  if (this->phase_ == TRAIN) {
    // 产生01掩码,伯努利随机数
    caffe_rng_bernoulli(count, 1. - threshold_, mask);
    for (int i = 0; i < count; ++i) {
      // 训练阶段:执行fropout操作后,放到大输入(因为失活部分数据导致输入值变小了,所有要将数据放大到失活前原有的量级)
      // 丢弃部分置0,保留部分按inverted dropout需要放大scale_倍
      top_data[i] = bottom_data[i] * mask[i] * scale_;
    }
  } else { // 测试阶段:原样输出(因为训练阶段已经做了缩放,也可以训练时不放大,测试阶段进行缩小)
    caffe_copy(bottom[0]->count(), bottom_data, top_data);
  }
}

BN和Dropout共同使用时会出现的问题

        BN和Dropout单独使用都能减少过拟合并加速训练速度,但如果一起使用的话并不会产生1+1>2的效果,相反可能会得到比单独使用更差的效果。

参考链接:12中主要的Dropout方法:如何应用于DNNs,CNNs,RNNs中的数学和可视化解释 - 知乎

参考链接:https://blog.youkuaiyun.com/program_developer/article/details/80737724

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值