卷积核的大小是一个超参数(hyperparameter),也就意味着改变它既有可能提高亦有可能降低模型的表现。
混沌度可以理解为不确定性,当然是越低越好。
在架构中添加Dropout这一改动仅会影响训练过程,而并不影响测试过程。
l n − 1 = ( l n − 1 ) × s n − 1 + k n − 1 l_{n - 1} = (l_n - 1) \times s_{n - 1} + k_{n - 1} ln−1=(ln−1)×sn−1+kn−1
其中: l n = 1 l_n = 1 ln=1,因此我们可以推出:
l 0 = 1 l 1 = ( 1 − 1 ) × 1 + 3 = 3 l 2 = ( 3 − 1 ) × 2 + 2 = 6 l 3 = ( 6 − 1 ) × 2 + 3 = 13l0=1l1=(1−1)×1+3=3l2=(3−1)×2+2=6l3=(6−1)×2+3=13" role="presentation" style="position: relative;"> l 0 = 1 l 1 = ( 1 − 1 ) × 1 + 3 = 3 l 2 = ( 3 − 1 ) × 2 + 2 = 6 l 3 = ( 6 − 1 ) × 2 + 3 = 13
即导数第三层特征图的感受野为13。
a. 计算预测值和真实值之间的误差
b. 重复迭代,直至得到网络权重的最佳值
c. 把输入传入网络,得到输出值
d. 用随机值初始化权重和偏差
e. 对每一个产生误差的神经元,调整相应的(权重)值以减小误差
dcaeb 这几个步骤面试的时候最好是能够背着说出来吧




可能是A或B,取决于神经网络的权重设置
训练出来的就是个二分类器,简单举例,如果分类器认为中间一列全为黑就是 T,否则就是H,那么输出全黑,如果分类器认为右下角为黑就是 H,否则就是T,那么输出全白,具体还得看分类器权重是怎么学的
我在做这道题的时候,其实第一反应就是,直接选择D的。因为网络的中间权重不知道,我怎么判断特定的结果呢? 换句话说,权重是random的, 只有两个输入和两个对应的输出,是不能说,中间的权重一定是啥啥啥。
首先你网络学习到的结果就两种结果,可以把他当做一个分类问题。
穷举搜索法,随机搜索法,贝叶斯优化都可以优化超参数,各有优劣。所以ABC三种都可实现调整优化超参数。
穷举搜索:如网格法grid search 随机搜索快于穷举 bayesian优化:在上一次结果较好的参数取值附近查找
池化算法比如取最大值/取平均值等, 都是输入数据旋转后结果不变, 所以多层叠加后也有不变性。
不变性,对于一个函数,如果对其输入施加的某种操作丝毫不会影响到输出,那么这个函数就对该变换具有不变性。
对于加入池化层,卷积神经网络具有近似不变性,如果是max池化,只要不是对最大值进行变换,其变换不会影响最后的输出矩阵。
ResNet-50就是因为它有50层网络,这50层里只有一个全连接层,剩下的都是卷积层,所以是50-1=49
防止模型过拟合:
- 引入正则化(参数范数惩罚)
- Dropout
- 提前终止训练
- 增加样本量
- 参数绑定与参数共享
- 辅助分类节点(auxiliary classifiers)
- Batch Normalization
正则化(regularization)会给给代价函数增加一个惩罚项,使得系数不会达到很大的值。
- 非线性:即导数不是常数。这个条件是多层神经网络的基础,保证多层网络不退化成单层线性网络。这也是激活函数的意义所在。
- 几乎处处可微:可微性保证了在优化中梯度的可计算性。传统的激活函数如sigmoid等满足处处可微。对于分段线性函数比如ReLU,只满足几乎处处可微(即仅在有限个点处不可微)。对于SGD算法来说,由于几乎不可能收敛到梯度接近零的位置,有限的不可微点对于优化结果不会有很大影响。
- 计算简单:非线性函数有很多。极端的说,一个多层神经网络也可以作为一个非线性函数,类似于Network In Network中把它当做卷积操作的做法。但激活函数在神经网络前向的计算次数与神经元的个数成正比,因此简单的非线性函数自然更适合用作激活函数。这也是ReLU之流比其它使用Exp等操作的激活函数更受欢迎的其中一个原因。
- 非饱和性(saturation):饱和指的是在某些区间梯度接近于零(即梯度消失),使得参数无法继续更新的问题。最经典的例子是Sigmoid,它的导数在x为比较大的正值和比较小的负值时都会接近于0。更极端的例子是阶跃函数,由于它在几乎所有位置的梯度都为0,因此处处饱和,无法作为激活函数。ReLU在x>0时导数恒为1,因此对于再大的正值也不会饱和。但同时对于x<0,其梯度恒为0,这时候它也会出现饱和的现象(在这种情况下通常称为dying ReLU)。Leaky ReLU和PReLU的提出正是为了解决这一问题。
- 单调性(monotonic):即导数符号不变。这个性质大部分激活函数都有,除了诸如sin、cos等。个人理解,单调性使得在激活函数处的梯度方向不会经常改变,从而让训练更容易收敛。
- 输出范围有限:有限的输出范围使得网络对于一些比较大的输入也会比较稳定,这也是为什么早期的激活函数都以此类函数为主,如Sigmoid、TanH。但这导致了前面提到的梯度消失问题,而且强行让每一层的输出限制到固定范围会限制其表达能力。因此现在这类函数仅用于某些需要特定输出范围的场合,比如概率输出(此时loss函数中的log操作能够抵消其梯度消失的影响)、LSTM里的gate函数。
- 接近恒等变换(identity):即约等于x。这样的好处是使得输出的幅值不会随着深度的增加而发生显著的增加,从而使网络更为稳定,同时梯度也能够更容易地回传。这个与非线性是有点矛盾的,因此激活函数基本只是部分满足这个条件,比如TanH只在原点附近有线性区(在原点为0且在原点的导数为1),而ReLU只在x>0时为线性。这个性质也让初始化参数范围的推导更为简单。这种恒等变换的性质也被其他一些网络结构设计所借鉴,比如CNN中的ResNet和RNN中的LSTM。
- 参数少:大部分激活函数都是没有参数的。像PReLU带单个参数会略微增加网络的大小。还有一个例外是Maxout,尽管本身没有参数,但在同样输出通道数下k路Maxout需要的输入通道数是其它函数的k倍,这意味着神经元数目也需要变为k倍;但如果不考虑维持输出通道数的情况下,该激活函数又能将参数个数减少为原来的k倍。
- 归一化(normalization):这个是最近才出来的概念,对应的激活函数是SELU,主要思想是使样本分布自动归一化到零均值、单位方差的分布,从而稳定训练。在这之前,这种归一化的思想也被用于网络结构的设计,比如Batch Normalization。
权值共享就是说,给一张输入图片,用一个卷积核去扫这张图,卷积核里面的数就叫权重,这张图每个位置是被同样的卷积核扫的,所以权重是一样的,也就是共享。可以极大地减少参数数量,这是全连接神经网络不具备的优势。
CNN,RNN
- Bagging:独立的集成多个模型,每个模型有一定的差异,最终综合有差异的模型的结果,获得学习的最终的结果;
- Boosting(增强集成学习):集成多个模型,每个模型都在尝试增强(Boosting)整体的效果;
- Stacking(堆叠):集成 k 个模型,得到 k 个预测结果,将 k 个预测结果再传给一个新的算法,得到的结果为集成系统最终的预测结果;
是对数据进行归一化,而不是权重
B代表图像的batch,即多少张图像一个batch。C代表图像的通道数。
BN是对多张图像的同一通道做Normalization
所以有多少通道就有多少个mean和variance
contrastive loss表示三元损失函数,是基于 样本对在特征空间距离的 损失函数,希望相似样本距离近,不相似样本距离远,来源于降维。
在传统的siamese network中一般使用Contrastive Loss作为损失函数,这种损失函数可以有效的处理孪生神经网络中的paired data的关系。
caffe六种优化方法:
- Stochastic Gradient Descent (type: “SGD”): 随机梯度下降
- AdaDelta (type: “AdaDelta”): 自适应学习率
- Adaptive Gradient (type: “AdaGrad”): 自适应梯度
- Adam (type: “Adam”): 自适应学习,推荐使用
- Nesterov’s Accelerated Gradient (type: “Nesterov”): 加速梯度法
- RMSprop (type: “RMSProp”)
维度低的先相乘效率更高
正确答案A,更多层意味着网络更深。没有严格的定义多少层的模型才叫深度模型,目前如果有超过2层的隐层,那么也可以及叫做深度模型。
正确答案是:D 学习率过大,会使得迭代时,越过最低点。
卷积函数是线性的,一般情况下,卷积层后会跟一个非线性函数。Relu函数是非线性激活函数
Attention-based Model其实就是一个相似性的度量,当前的输入与目标状态越相似,那么在当前的输入的权重就会越大,说明当前的输出越依赖于当前的输入。
严格来说,Attention并算不上是一种新的model,而仅仅是在以往的模型中加入attention的思想,所以Attention-based Model或者Attention Mechanism是比较合理的叫法,而非Attention Model。
(样本少,相似性低)–> 冻结训练
(样本多,相似性低)–> 重新训练
(样本少,相似性高)–> 修改输出层
(样本多,相似性高)–> 预训练权+重新训练
不同数据集下使用微调:
- 数据集1-数据量少,但数据相似度非常高-在这种情况下,我们所做的只是修改最后几层或最终的softmax图层的输出类别。
- 数据集2-数据量少,数据相似度低-在这种情况下,我们可以冻结预训练模型的初始层(比如 k k k 层),并再次训练剩余的 n − k n-k n−k 层。由于新数据集的相似度较低,因此根据新数据集对较高层进行重新训练具有重要意义。
- 数据集3-数据量大,数据相似度低-在这种情况下,由于我们有一个大的数据集,我们的神经网络训练将会很有效。但是,由于我们的数据与用于训练我们的预训练模型的数据相比有很大不同,使用预训练模型进行的预测不会有效。因此,最好根据你的数据从头开始训练神经网络(Training from scratch)。
- 数据集4-数据量大,数据相似度高-这是理想情况。在这种情况下,预训练模型应该是最有效的。使用模型的最好方法是保留模型的体系结构和模型的初始权重。然后,我们可以使用在预先训练的模型中的权重来重新训练该模型。
我认为A没错 少量数据就应该冻结更多的层 不然会过拟合
正确答案是:B H-K算法思想很朴实,就是在最小均方误差准则下求得权矢量。他相对于感知器算法的优点在于,他适用于线性可分和非线性可分得情况:
- 对于线性可分的情况: 给出最优权矢量
- 对于非线性可分得情况: 能够判别出来,以退出迭代过程。
- 牛顿法、拟牛顿法、adam,rmsgrad用到了二阶导
- momentum、adgrad用的是一阶导,adgrad的特点是历史梯度正则。
blob: caffe的数据存储单元
layer: caffe的计算单元
B并不总是正确。层数增加可能导致过拟合,从而可能引起错误增加。
C也有问题吧?改变已训练好的模型的数值精度难道不会改变结果精度?那模型量化还要校准表干什么
训练好的模型大小不变,在执行推断的时候改变精度影响后续推断效果



B这是鞍点(Saddle Point)的梯度下降的经典例子。
本题来源于:https://www.analyticsvidhya.com/blog/2017/01/must-know-questions-deep-learning/。
除了局部极小值,还有一类值为“鞍点”,简单来说,它就是在某一些方向梯度下降,另一些方向梯度上升,形状似马鞍,如下图红点就是鞍点。
对于深度学习模型的优化来说,鞍点比局部极大值点或者极小值点带来的问题更加严重。
注意区分深度、卷积核个数对特征图的影响
不懂
Sigmoid函数由下列公式定义:
S ( x ) = 1 1 + e − x S(x) = \frac{1}{1+e^{-x}} S(x)=1+e−x1
其对 x x x的导数可以用自身表示:
S ′ ( x ) = e − x ( 1 + e − x ) 2 = S ( x ) ( 1 − S ( x ) ) S'(x) = \frac{e^{-x}}{ (1 + e^{-x})^2} = S(x)(1 - S(x)) S′(x)=(1+e−x)2e−x=S(x)(1−S(x))
选项3,使用归纳性更好的架构?模型已经过拟合了,使用更强的结构不会加重过拟合吗?
我理解的是归纳性更好的架构指对数据特性进行更好的归纳,具有更好的泛化性。而不是深入学习数据的特征。
说的是更好的架构 而不是更复杂的架构 相同能力我们认为越简单的越好 归纳性也更好
CPLD(Complex Programmable Logic Device)是Complex PLD的简称,一种较PLD为复杂的逻辑元件。CPLD是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。
由于反向传播算法进入起始层,学习能力降低,这就是梯度消失。换言之,梯度消失是梯度在前向传播中逐渐减为0, 按照图标题所说, 四条曲线是4个隐藏层的学习曲线, 那么第一层梯度最高(损失函数曲线下降明显), 最后一层梯度几乎为零(损失函数曲线变成平直线). 所以D是第一层, A是最后一层。
由于反向传播,在梯度消失情况下越接近输入层,其梯度越小;在梯度爆炸的情况下越接近输入层,其梯度越大。
C,第三隐藏层对应B,第四隐藏层对应D
由于反向传播算法进入起始层,学习能力降低,这就是梯度消失。换言之,梯度消失是梯度在前向传播中逐渐减为0, 按照图标题所说, 四条曲线是4个隐藏层的学习曲线, 那么第一层梯度最高(损失函数曲线下降明显), 最后一层梯度几乎为零(损失函数曲线变成平直线). 所以D是第一层, A是最后一层。
由于反向传播,在梯度消失情况下越接近输入层,其梯度越小;在梯度爆炸的情况下越接近输入层,其梯度越大。
正好相反,深度学习可以自行完成特征提取过程而机器学习需要人工来处理特征内容。