面试反馈

  • derivative 导数
  • first prime derivative 一阶导数
  • second prime derivative 二阶导数
  • derivation 求导

GoogleNet Inception

在这里插入图片描述
它一共包含了4个 分支。第一个分支是一个1×1的卷积,1×1的卷积是一个非常优秀的结构,它可以跨通道组织信息,来提高网络的表达能力,同时还可以对输出通道进行升维和降维,1×1的卷积还可以进行低成本的跨通道特征变换,在Google Inception Net中大量使用了1×1的卷积。
最后通过聚合操作在输出通道上将四个分支的结果进行合并。Inception Module中包含了1×1、3×3、5×5三种不同大小的卷积和一个3×3的最大池化,来增加网络对于不同尺度的适应性
为了使得靠后的Inception Module能够捕捉到更高阶的抽象特征,所以在靠后的Inception Module的卷积空间集中度应该降低,来获取更大面积的特征。所以,越靠后的Inception Module,3×3和5×5这两种大小的卷积核占比最多。

样,1x1的卷积核起到了降低feature map厚度、减少计算量的作用。
大家可能还是不太明白吧,没关系,咋来举个例子:
我们以3×3这个 path 为例,假设 input(也就是上层的 output)为128×100×100(channel×height×width,batch size略去,没写,事实上,batch size是不影响计算的):
不使用1×1的卷积,那么经过 kennel = 3×3,channel = 256,stride=1,pad=1 的卷积之后,其 output:256×100×100,那么其参数数量128×256×3×3
若是先将 output 经过 kennel = 1×1,channel = 64,的卷积经之后,再将 1×1 Conv 的 output 抛进 3×3 卷积层,还是设3×3 Conv 的kennel = 3×3,channel = 256,stride=1,pad=1。但参数数量将减少为128×64×1×1+64×256×3×3,参数将近减少了一半,而你把这个放到5×5 的那条path上面去推算一下,可能会更明显!你说腻害不腻害
现在大家明白了这个1×1的卷积层是拿来干啥的了吧
大家都 get 到这个 point 以后,我们现在再来对这个 “Incepetion模块” 进行一波总结:

采用了1×1、3×3以及5×5的不同的kennel,那么神经元将看到不同尺度的信息,最后的 concat 也就将不同尺度的features加以结合了;
1×1 卷积接上 3×3 卷积。将前者的通道数设置为少于输入通道,这样减少后者的计算量。而后者加上了padding=1使得输出的长宽与输入一致,5×5 的那个是一样的道理,padding=2 而已。输出的长宽与输入一致确保最后能 concat 在一起
文章说很多地方都表明pooling挺有效,所以Inception里面也嵌入了。至于pooling嘛,原文解释得不是很详细,只说了效果好,所以放上去了 ,大家有什么看法也可以留言交流
最后,网络使用的是average pooling,而不是全连接,结果当然要好不然人家也不这么干,而在最后它还是使用linear线性层,这么干是为了方便fine-tuning模型。
我们再来回归原点,讨论整个网络的思路go more deeper,go more wider:

深度,层数更深,文章采用了22层,为了避免上述提到的梯度消失问题(在反向传播更新参数时,越靠近输入梯度越小),GoogLeNet 巧妙的在不同深度处增加了两个loss来保证梯度回传消失的现象。
宽度,增加了多种核1x1,3x3,5x5,还有直接max pooling的。
但是如果简单的将这些应用到feature map上的话,concat起来的feature map厚度将会很大,所以在googlenet中为了避免这一现象提出的inception具有如下结构,在3x3前,5x5前,max pooling后分别加上了1x1的卷积核起到了降低feature map厚度的作用
以上我们其实都是介绍的是more wider,那么这儿再来说说如何解决more deeper的一些问题,我们看到GoogLeNet一共堆砌了多个Incepetion模块使得网络加深,因此在BP(Back Propagation )的时候梯度弥散的情况是存在的,而GoogLeNet里面的softmax0、softmax1就是来解决这个问题的具体就是在训练的时候,他们的损失误差乘以一个权值(GoogLeNet里设置为0.3)加到整体损失中。在应用的时候,这两个辅助分类器会被丢掉。GoogLeNet的实验表明,只需要一个辅助分类器就可以达到同样的效果(提升0.5%)。

inception block has 4 branches, each branch uses different convolution operation, like their kernel size is not the same.
their outputs would be contacted together.
in such way, the network can capture information of different scales.

BN层

effective normalization way.
increase the speed of network training.
since it normalizes the training data to a normal distribution, which can reduce internal covariate shift, therefore avoid overfitting to some extent.
Batch Normalization(简称BN)是一个非常有效的正则化方法,它可以加快大型网络的训练速度,同时还可以使得收敛后网络的分类准确率大幅度提高。BN使用在神经网络中,会对每一个batch数据进行内部的标准化处理(均值为0,方差为1),使得输出规范化到N(0,1)的正态分布(normal distribution)减少Internal Covariate Shift(内部神经元分布的改变)。在BN的论文中指出,传统的深度神经网络在训练的时候,每一层输入的分布都在变化,导致训练变得困难,我们只能使用一个很小的学习速率来解决这个问题。如果对每一层都使用BN之后,我们就可以有效地解决这个问题,学习速率可以增大很多倍,达到之前Inception V1的准确率需要的迭代次数只有1/14,训练时间可以大幅度缩短。

梯度下降法

  • BGD
    batch gradient descent
    Training on the entire data set, so it is slower, requires large memory, and does not allow instances to be updated online
    在这里插入图片描述
    缺点:整个数据集上进行训练,所以速度较慢,需要大内存,不允许在线更新实例
  • SGD
    Easy to converge to a local optimum, trapped at the saddle point, because SGD is updated frequently, it will cause severe fluctuations
    和BGD算法相反,Stochastic gradient descent 算法每读入一个数据(每一个example),便立刻计算cost fuction的梯度来更新参数:
    在这里插入图片描述
    优点:训练速度快
    缺点:容易收敛(converge)到局部最优,困在鞍点(saddle point),SGD 因为更新比较频繁,会造成 cost function 有严重的震荡(convulsion)
  • 鞍点 在某一个方向在最低点,另一方向则不是
    在这里插入图片描述
  • Mini-BGD
    MBGD 每一次利用一小批样本,即 n 个样本进行计算, 这样它可以降低参数更新时的方差,收敛更稳定, 另一方面可以充分地利用深度学习库中高度优化的矩阵操作来进行更有效的梯度计算。
    和 SGD 的区别是每一次循环不是作用于每个样本,而是具有 n 个样本的Batch。n=50-200
    缺点:
    learning rate 如果选择的太小,收敛速度会很慢,如果太大,loss function 就会在极小值处不停地震荡甚至偏离
    ②有一种措施是先设定大一点的学习率,当两次迭代之间的变化低于某个阈值后,就减小 learning rate,不过这个阈值的设定需要提前写好,这样的话就不能够适应数据集的特点。此外,这种方法是对所有参数更新时应用同样的 learning rate,如果我们的数据是稀疏的,我们更希望对出现频率低的特征进行大一点的更新。
    ③另外,对于非凸函数,还要避免陷于局部极小值处,或者鞍点处,因为鞍点周围的error 是一样的,所有维度的梯度都接近于0,SGD 很容易被困在这里。
  • Momentum
    add gradient of last moment
    SGD方法的一个缺点是其更新方向完全依赖于当前batch计算出的梯度,因而十分不稳定。Momentum算法借用了物理中的动量概念,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    缺点:个人觉得这个超参数的设定值还是会对实验有影响,如果越大的话代表对历史梯度对当前梯度的影响越大。
    在这里插入图片描述
  • Nesterov Momentum
    include the next moment of gradient.
    在小球向下滚动的过程中,我们希望小球能够提前知道在哪些地方坡面会上升,这样在遇到上升坡面之前,小球就开始减速。这方法就是Nesterov Momentum,其在凸优化中有较强的理论保证收敛。
    在这里插入图片描述
    在这里插入图片描述
    也就是说梯度的计算是先让B走到C,然后在C的基础上求梯度
    CD的梯度是在在这里插入图片描述
    上求梯度
    然后相加

自适应学习率优化算法

  • Adagrad
    主要针对稀疏数据(sparse data),对不同的数据使用不同的学习率,比如出现次数较多的数据,学习率较低。For example, data with a high number of occurrences has a low learning rate.
    梯度的平方 square of gradient
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    缺点:训到后期,学习率为0,所以训练需要提前结束,迭代次数不能过大
  • RMSProp
    Adagrad会累加之前所有的梯度平方,而RMSprop仅仅是计算对应的平均值,因此可缓解Adagrad算法学习率下降较快的问题。
    在这里插入图片描述
    添加了一个衰减率(一般0.9或者0.99),可以使得grad_squared的变化不会因为时间的累积而变得太大。
    在这里插入图片描述

缺点:也由于衰减的问题,grad_squard是可能导致我们训练一直在变慢的

  • AdaDelta
    AdaGrad & RMSProp结合体
  • Adam
    Adam(Adaptive Moment Estimation)是另一种自适应学习率的方法。它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。公式如下:
    在这里插入图片描述
    在这里插入图片描述
    一/二阶动量项, 偏置修正
    参考:https://blog.csdn.net/weixin_41417982/article/details/81561210

Tensor

3维向量

Weight decay

reduce overfitting
梯度更新时,增加一项:
在这里插入图片描述

学习率降火

作用:控制梯度下降的速度
If the learning rate is too small, it will lead to slow convergence. If the learning rate is too large, it can hinder convergence, it will oscillate near the extreme point.

注意点:如果学习速率过小,则会导致收敛速度很慢。如果学习速率过大,那么其会阻碍收敛,即在极值点附近会振荡(it will oscillate near the extreme point),因此通常会控制学习率使其在多次迭代后衰减(attenuate after iterations),使得网络可以顺利收敛(smoothly converge)

L2 regularization

通过减小权重,解决过拟合
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

经验误差&泛化误差

学习器在训练集上的误差成为“训练误差”或“经验误差”。在新样本上的误差称为“泛化误差”。
泛化误差是用来衡量一个学习机器推广未知数据的能力,即根据从样本数据中学习到的规则能够应用到新数据的能力。

过拟合 overfitting

model too complicated, the parameters are too large small amount of training data. without considering generalization.
就是在训练集上效果很好,测试集上效果很差
原因:特征维度过多,模型假设过于复杂,参数过多/过大,训练数据过少,噪声过多,导致过度拟合训练数据,没有考虑泛化性
解决办法:1. 给训练数据加噪声 2. dropout 3. 正则化 4. 用的模型简单点

过拟合的时候,拟合函数的系数**(w)**往往非常大,为什么?过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数(y = wx+b)足够大,才能保证导数值很大
参考:

欠拟合 underfitting

The feature dimension is too small, and the model is too simple, resulting in that the fitted function cannot satisfy the training set and the error is large **
Solution: increase feature dimensions and training data

根本原因是特征维度过少,模型过于简单,导致拟合的函数无法满足训练集,误差较大
解决方法:增加特征维度,增加训练数据

dropout

During training, each neural unit is retained/kept/reserved with probability p, that is, the probability of being dropped is 1-p.
Dropout is similar to training different networks, since it randomly deletes half of hidden neurons which causes the network structure to be different, thus increasing the robustness of the network.

dropout make a neuron Reduce complex co-adaptation relationships between neurons: Because the dropout program causes two neurons not necessarily to appear in a dropout network each time.
作用:

  1. 减少神经元之间复杂的共适应关系: 因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。(这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况)。 迫使网络去学习更加鲁棒的特征 (这些特征在其它的神经元的随机子集中也存在)。换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的模式(鲁棒性)。(这个角度看 dropout就有点像L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高,就是使得下一神经元的输出特征不会特别依赖某些神经元,增加鲁棒性
  2. dropout掉不同的隐藏神经元就类似在训练不同的网络(随机删掉一半隐藏神经元导致网络结构已经不同),整个dropout过程就相当于 对很多个不同的神经网络取平均。而不同的网络产生不同的过拟合,一些互为“反向”的拟合相互抵消就可以达到整体上减少过拟合。

参考:https://zhuanlan.zhihu.com/p/23178423

ACFNet: Attention Class Feature Network

fine tune & domain adaptation

基于实例的迁移,简单来说就是通过权重重⽤,对源域和⽬标域的样例进⾏迁移。就是 说直接对不同的样本赋予不同权重,⽐如说相似的样本,我就给它⾼权重,这样我就完成了 迁移,⾮常简单⾮常⾮常直接。
基于特征的迁移,就是更进⼀步对特征进⾏变换。意思是说,假设源域和⽬标域的特征 原来不在⼀个空间,或者说它们在原来那个空间上不相似,那我们就想办法把它们变换到 ⼀个空间⾥⾯。这个⽅法是⽤得⾮常多的, ⼀直在研究,⽬前是感觉是研究最热的。
基于模型的迁移,就是说构建参数共享的模型。这个主要就是在神经⽹络⾥⾯⽤的特 别多,因为神经⽹络的结构可以直接进⾏迁移。⽐如说神经⽹络最经典的 finetune 就是模 型参数迁移的很好的体现。
基于关系的迁移,这个⽅法⽤的⽐较少,这个主要就是说挖掘和利⽤关系进⾏类⽐迁 移。⽐如⽼师上课、学⽣听课就可以类⽐为公司开会的场景。这个就是⼀种关系的迁移。

深度⽹络的 finetune 也许是最简单的深度⽹络迁移⽅法。Finetune,也叫微调、finetuning,是深度学习中的⼀个重要概念。简⽽⾔之,finetune 就是利⽤别⼈已经训练好的⽹ 络,针对⾃⼰的任务再进⾏调整,比如固定前几层的参数,只训练最后的分类层,或若干层,利用带有标签的数据

但finetune 的一个限制还是需要训练数据和测试数据处于同一分布,所以当在该限制下,我们需要提出领域适应。比如,在原本网络中插入适应层,再使用适应度量函数

GRL

Unsupervised Domain Adaptation by Backpropagation
2015 ICML
gradient reversal layer

Adversarial motivation

GAN (Generative adversarial nets) discriminator(T/F)
|
\/
decide/ distinguish/ judge/ classify
Domain adaptation discriminator (S/T)
2014 NIPS

公式很多的paper

WGAN

RL: online, offline net作用

防止过拟合,训练稳定?

supervised domain adaptation

这种分类⽅式最为直观。类⽐机器学习,按照⽬标领域有⽆标签,迁移学习可以分为以 下三个⼤类:

  1. 监督迁移学习 (Supervised Transfer Learning)
  2. 半监督迁移学习 (Semi-Supervised Transfer Learning)
  3. ⽆监督迁移学习 (Unsupervised Transfer Learning)
    显然,少标签或⽆标签的问题 (半监督和⽆监督迁移学习),是研究的热点和难点。

open-set domain adaptation & partial domain adaptation

For open-set DA, there should exist new classes in target domain.
在这里插入图片描述

领域适应 domain adaptation

利用标记数据训练分类器,去预测未标记数据。这两个数据分布不一致。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值