首页 » Web前端 » 老潘php技巧_机械进修深度进修面试常识点汇总

老潘php技巧_机械进修深度进修面试常识点汇总

访客 2024-11-27 0

扫一扫用手机浏览

文章目录 [+]

来源丨oldpan博客

编辑丨极市平台

老潘php技巧_机械进修深度进修面试常识点汇总

导读

老潘php技巧_机械进修深度进修面试常识点汇总
(图片来自网络侵删)

本文总结了一些秋招口试中会碰着的问题和一些主要的知识点,适宜口试前突击和巩固根本知识。

序言

最近这段韶光正临秋招,这篇文章是老潘在那会找事情过程中整理的一些主要知识点,内容比较杂碎,部分采集于网络,大略整理下发出来,适宜口试前突击,当然也适宜巩固根本知识。
其余推举大家一本叫做《百面机器学习》的新书,2018年8月份出版的,个中包括了很多机器学习、深度学习口试过程中会碰着的问题,比较适宜须要准备口试的机器学习、深度学习方面的算法工程师,当然也同样适宜巩固根本~有韶光一定要须要看的书本:

程序员的数学系列,适宜重温知识,回顾一些根本的线性代数、概率论。
深度学习花书,总结类书,有根本知识的讲解,比较全面。
统计学习方法,总结类书,篇幅不长,都是核心。
Pattern Recognition and Machine Learning,条理清晰,用贝叶斯的办法来讲解机器学习。
机器学习西瓜书,适宜当教材,内容较广但是不深。

百翻不烂的百面机器学习

常见的知识题L1正则可以使少数权值较大,多数权值为0,得到稀疏的权值;L2正则会使权值都趋近于0但非零,得到平滑的权值;在AdaBoost算法中,被错分的样本的权重更新比例的公式相同;Boosting和Bagging都是组合多个分类器投票的方法,但Boosting是根据单个分类器的精确率决定其权重,Bagging是可大略地设置所有分类器权重相同;EM算法不能担保找到全局最优值;SVR中核函数宽度小欠拟合,宽度大随意马虎过拟合PCA和LDA都是经典的降维算法。
PCA是无监督的,也便是演习样本不须要标签;LDA是有监督的,也便是演习样本须要标签。
PCA是去除掉原始数据中冗余的维度,而LDA是探求一个维度,使得原始数据在该维度上投影后不同类别的数据尽可能分离开来。

PCA是一种正交投影,它的思想是使得原始数据在投影子空间的各个维度的方差最大。
假设我们要将N维的数据投影到M维的空间上(M<N),根据PCA,我们首先求出这N维数据的协方差矩阵,然后求出其前M个最大的特色值所对应的特色向量,那么这M个特色向量即为所求的投影空间的基。
LDA投影后类内方差最小,类间方差最大。
如下图所示有两种投影办法,左边的投影后赤色数据和蓝色数据还有重叠部分,右边的投影后赤色数据和蓝色数据则刚好被分开。
LDA的投影即类似右边的投影办法,投影后使得不同类别的数据尽可能分开,而相同类别的数据则尽可能紧凑地分布。

PCA和LDA

参考链接:PCA和LDA的比拟KNN K隔壁

关于K隔壁算法的知识有很多,比如算法实行的步骤、运用领域以及把稳事变,不过相信很多人对K隔壁算法的利用把稳事变不是很清楚。
在这篇文章中我们针对这个问题进行解答,带大家来好好理解一下k隔壁算法的把稳事变以及K隔壁算法的优点与缺陷。

K隔壁算法的把稳事变

K隔壁算法的利用把稳事变详细便是利用间隔作为度量时,要担保所有特色在数值上是一个数量级上,以免间隔的打算被数量级大的特色所主导。
在数据标准化这件事上,还要把稳一点,演习数据集和测试数据集一定要利用同一标准的标准化。
个中的缘故原由总的来说就有两点内容,第一便是标准化实在可以视为算法的一部分,既然数据集都减去了一个数,然后除以一个数,这两个数对付所有的数据来说,就要等量齐观。
第二便是演习数据集实在很少,在预测新样本的时候,新样本就更少得可怜,如果新样本就一个数据,它的均值便是它自己,标准差是0,这根本就不合理。

K隔壁算法的优点是什么呢?

K隔壁算法的优点详细表示在四方面。
第一就便是k隔壁算法是一种在线技能,新数据可以直接加入数据集而不必进行重新演习,第二便是k隔壁算法理论大略,随意马虎实现。
第三便是准确性高,对非常值和噪声有较高的容忍度。
第四便是k隔壁算法天生就支持多分类,差异与感知机、逻辑回归、SVM。

K隔壁算法的缺陷是什么呢?

K隔壁算法的缺陷,基本的 k隔壁算法每预测一个“点”的分类都会重新进行一次全局运算,对付样本容量大的数据集打算量比较大。
而且K隔壁算法随意马虎导致维度灾害,在高维空间中计算间隔的时候,就会变得非常远;样本不平衡时,预测偏差比较大,k值大小的选择得依赖履历或者交叉验证得到。
k的选择可以利用交叉验证,也可以利用网格搜索。
k的值越大,模型的偏差越大,对噪声数据越不敏感,当 k的值很大的时候,可能造成模型欠拟合。
k的值越小,模型的方差就会越大,当 k的值很小的时候,就会造成模型的过拟合。

二维高斯核函数

如果让你写一个高斯模糊的函数,你该怎么写呢?

`def gaussian_2d_kernel(kernel_size = 3,sigma = 0):kernel = np.zeros([kernel_size,kernel_size]) center = kernel_size // 2 if sigma == 0: sigma = ((kernel_size-1)0.5 - 1)0.3 + 0.8 s = 2(sigma2) sum_val = 0 for i in range(0,kernel_size): for j in range(0,kernel_size): x = i-center y = j-center kernel[i,j] = np.exp(-(x2+y2) / s) sum_val += kernel[i,j] #/(np.pi s) sum_val = 1/sum_val return kernelsum_val `演习采样方法交叉验证留一法自助法(bootstrap):有放回的抽样方法,可能会抽到重复的样本Kmean和GMM事理、差异、运用处景

kmeans的收敛性?

可以看这里 https://zhuanlan.zhihu.com/p/36331115也可以看百面机器学习P93、P102如何在多台打算机上做kmeans

实在是这样的,先分布到n台机器上,要担保k个初始化相同,经由一次迭代后,拿到kn个新的mean,放到一台新的机器上,由于初始化相同,以是mean的排列相同,然后对属于每个类的n个mean做加权均匀,再放回每台机器上做下一步迭代。

KNN算法以及流程

K值的选择:

K值较小,则模型繁芜度较高,随意马虎发生过拟合,学习的估计偏差会增大,预测结果对隔壁的实例点非常敏感。
K值较大可以减少学习的估计偏差,但是学习的近似偏差会增大,与输入实例较远的演习实例也会对预测起浸染,使预测发生缺点,k值增大模型的繁芜度会低落。
在运用中,k值一样平常取一个比较小的值,常日采取交叉验证法来来选取最优的K值。

KNN中的K值选取对分类的结果影响至关主要,K值选取的太小,模型太繁芜。
K值选取的太大,导致分类模糊。
那么K值到底怎么选取呢?有人用Cross Validation,有人用贝叶斯,还有的用bootstrap。
而间隔度量又是其余一个问题,比较常用的是选用欧式间隔。
可是这个间隔真的具有普适性吗?《模式分类》中指出欧式间隔对平移是敏感的,这点严重影响了剖断的结果。
在此必须选用一个对已知的变换(比如平移、旋转、尺度变换等)不敏感的间隔度量。
书中提出了采取切空间间隔(tangent distance)来替代传统的欧氏间隔。

无监督学习和有监督学习的差异

有监督:

感知机K隔壁法朴素贝叶斯决策树逻辑回归支持向量机提升方法隐马尔科夫模型条件随机场

无监督:

聚类-kmeansSVD奇异值分解PCA主身分剖析

天生式模型:LDA KNN 稠浊高斯 贝叶斯 马尔科夫 深度信念 判别式模型:SVM NN LR CRF CART

逻辑回归与SVM差异

逻辑回归即LR。
LR预测数据的时候,给出的是一个预测结果为正类的概率,这个概率是通过sigmoid函数将wTx映射到[0,1]得到的,对付wTx正的很大时(可以认为离决策边界很远),得到为正类的概率趋近于1;对付wTx负的很大时(可以认为离决策边界很远),得到为正类的概率趋近于0。
在LR中,跟“与决策边界间隔”扯得上关系的仅此而已。
在参数w求解过程中完备没有与决策边界间隔的影子,所有样本都等量齐观。
和感知机的不同之处在于,LR用到与决策边界的间隔,是用来给预测结果一个可以看得到的置信区间。
感知机里面没有这一考虑,只根据符号来判断。
而SVM更进一步,在参数的求解过程中,便舍弃了间隔决策边界过远的点。
LR和感知机都很随意马虎过拟合,只有SVM加入了L2范数之后的构造化风险最小化策略才办理了过拟合的问题。
总结之:

感知机前后都没有引入与超平面“间隔”的观点,它只关心是否在超平面的一侧;LR引入了间隔,但是在演习模型求其参数的时候没有间隔的观点,只是在末了预测阶段引入间隔以表征分类的置信度;SVM两个地方有间隔的观点:其一,在求超平面参数的时候有间隔的观点,其表现为在与超平面一定间隔内的点着重关注,而其他的统统点都不再关注。
被关注的点称之为“支撑向量”。
其二,预测新样本的时候,和LR一样,间隔代表置信度。

逻辑回归只能办理二分类问题,多分类用softmax。
干系参考链接

https://blog.csdn.net/maymay_/article/details/80016175https://blog.csdn.net/jfhdd/article/details/52319422https://www.cnblogs.com/eilearn/p/9026851.htmlbagging boosting 和 提升树bagging是通过结合几个模型降落泛化偏差,分别演习几个不同的模型,然后让所有的模型表决测试样例的输出。
模型均匀见效的缘故原由是不同的模型常日不会在测试集上产生完备相同的偏差。
从原始样本集中抽取演习集.每轮从原始样本集中利用Bootstraping的方法抽取n个演习样本(在演习集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中).共进行k轮抽取,得到k个演习集.(k个演习集相互独立)Bagging是并行的学习算法,思想很大略,即每一次从原始数据中根据均匀概率分布有放回的抽取和原始数据集一样大小的数据凑集。
样本点可以涌现重复,然后对每一次产生的数据集布局一个分类器,再对分类器进行组合。
对付分类问题,将上步得到的k个模型采取投票的办法得到分类结果;对回归问题,打算上述模型的均值作为末了的结果.Boosting是一族可将弱学习器提升为强学习器的算法.Boosting的每一次抽样的样本分布是不一样的,每一次迭代,都是根据上一次迭代的结果,增加被缺点分类的样本的权重。
使模型在之后的迭代中更加看重难以分类的样本。
这是一个不断学习的过程,也是一个不断提升的过程,这便是Boosting思想的实质所在。
迭代之后,将每次迭代的基分类器进行集成,那么如何进行样本权重的调度和分类器的集成是我们须要考虑的关键问题。

Bagging和Boosting的差异:

1)样本选择上:Bagging:演习集是在原始集中有放回选取的,从原始集中选出的各轮演习集之间是独立的. Boosting:每一轮的演习集不变,只是演习集中每个样例在分类器中的权重发生变革.而权值是根据上一轮的分类结果进行调度.2)样例权重:Bagging:利用均匀取样,每个样例的权重相等 Boosting:根据缺点率不断调度样例的权值,缺点率越大则权重越大.3)预测函数:Bagging:所有预测函数的权重相等. Boosting:每个弱分类器都有相应的权重,对付分类偏差小的分类器会有更大的权重.4)并行打算:Bagging:各个预测函数可以并行天生 Boosting:各个预测函数只能顺序天生,由于后一个模型参数须要前一轮模型的结果.

Bagging 是 Bootstrap Aggregating 的简称,意思便是再取样 (Bootstrap) 然后在每个样本上演习出来的模型取均匀,所以是降落模型的 variance. Bagging 比如 Random Forest 这种先天并行的算法都有这个效果。
Boosting 则是迭代算法,每一次迭代都根据上一次迭代的预测结果对样本进行加权,以是随着迭代不断进行,偏差会越来越小,以是模型的 bias 会不断降落High variance 是model过于繁芜overfit,记住太多细节noise,受outlier影响很大;high bias是underfit,model过于大略,cost function不足好。
boosting是把许多弱的分类器组合成一个强的分类器。
弱的分类器bias高,而强的分类器bias低,以是说boosting起到了降落bias的浸染。
variance不是boosting的紧张考虑成分。
bagging是对许多强(乃至过强)的分类器求均匀。
在这里,每个单独的分类器的bias都是低的,均匀之后bias依然低;而每个单独的分类器都强到可能产生overfitting的程度,也便是variance高,求均匀的操作起到的浸染便是降落这个variance。
Bagging算法的代表:RandomForest随机森林算法的把稳点:

在构建决策树的过程中是不须要剪枝的。
全体森林的树的数量和每棵树的特色须要人为进行设定。
构建决策树的时候分裂节点的选择是依据最小基尼系数的。

咱们机器学习升级版的随机森林章节,我用白板写了写这个公式:p = 1 - (1 - 1/N)^N,其意义是:一个样本在一次决策树天生过程中,当选中作为演习样本的概率,当N足够大时,约即是63.2%。
简言之,即一个样本当选中的概率是63.2%,根据二项分布的的期望,这意味着大约有63.2%的样本当选中。
即有63.2%的样本是不重复的,有36.8%的样本可能没有在本次演习样本集中。
随机森林是一个包含多个决策树的分类器,并且其输出的种别是由个别树输出的类别的众数而定。
随机森林的随机性表示在每颗树的演习样本是随机的,树中每个节点的分裂属性凑集也是随机选择确定的。
有了这2个随机的担保,随机森林就不会产生过拟合的征象了。
随机森林是用一种随机的办法建立的一个森林,森林是由很多棵决策树组成的,每棵树所分配的演习样本是随机的,树中每个节点的分裂属性凑集也是随机选择确定的。

SVM

干系的notebook除了cs231n也可以看这里。

https://momodel.cn/workspace/5d37bb9b1afd94458f84a521?type=module

凸集、凸函数、凸优化

口试见得比较少,感兴趣的可以看下:

https://blog.csdn.net/feilong_csdn/article/details/83476277

为什么深度学习中的图像分割要先编码后解码

降采样是手段不是目的:

降落显存和打算量,图小了显存也小,打算量也小;增大感想熏染野,利用同样3x3的卷积能在更大的图像范围上进行特色提取。
大感想熏染野对分割很主要,小感想熏染野做不了多分类分割,而且分割出来很粗糙多出几条不同程度额下采样分支,可以方便进行多尺度特色的领悟。
多级语义领悟会让分类更加准确。

降采样的理论意义,我大略朗读一下,它可以增加对输入图像的一些小扰动的鲁棒性,比如图像平移,旋转等,减少过拟合的风险,降落运算量,和增加感想熏染野的大小。
干系链接:为什么深度学习中的图像分割要先编码再解码?

(全局)均匀池化average pooling和(全局)最大池化max pooling的差异最大池化保留了纹理特色均匀池化保留整体的数据特色全局均匀池化有定位的浸染(看知乎)

最大池化提取边缘等“最主要”的特色,而均匀池化提取的特色更加smoothly。
对付图像数据,你可以看到差异。
虽然两者都是出于同样的缘故原由利用,但我认为max pooling更适宜提取极度功能。
均匀池有时不能提取好的特色,由于它将全部计入并打算出均匀值,这对付工具检测类型任务可能不好用但利用均匀池化的一个动机是每个空间位置具有用于期望特色的检测器,并且通过均匀每个空间位置,其行为类似于均匀输入图像的不同平移的预测(有点像数据增加)。
Resnet不是采取传统的完备连通层进行CNN分类,而是直接从末了一个mlp转换层输出特色图的空间均匀值,作为通过全局均匀合并层的种别置信度,然后将得到的矢量输入到 softmax层。
比较之下,Global average更故意义且可阐明,由于它逼迫实现了feature和种别之间的对应关系,这可以通过利用网络的更强大确当地建模来实现。
此外,完备连接的层易于过拟合并且严重依赖于 dropout 正则化,而全局均匀池化本身便是起到了正则化浸染,其本身防止整体构造的过拟合。

https://zhuanlan.zhihu.com/p/42384808https://www.zhihu.com/question/335595503/answer/778307744https://www.zhihu.com/question/309713971/answer/578634764全连接的浸染,与1x1卷积层的关系

在实际利用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;而前层是卷积层的全连接层可以转化为卷积核为hxw的全局卷积,h和w分别为前层卷积结果的高和宽利用 global average pooling 全局均匀池化来代替卷积

全连接层(fully connected layers,FC)在全体卷积神经网络中起到“分类器”的浸染。
如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特色空间的话,全连接层则起到将学到的“分布式特色表示”映射到样本标记空间的浸染。
在实际利用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;而前层是卷积层的全连接层可以转化为卷积核为hxw的全局卷积,h和w分别为前层卷积结果的高和宽

那么,11卷积的紧张浸染有以下几点:

降维( dimension reductionality )。
比如,一张500x500且厚度depth为100的图片在20个filter上做11的卷积,那么结果的大小为50050020。
加入非线性。
卷积层之后经由勉励层,11的卷积在前一层的学习表示上添加了非线性勉励( non-linear activation ),提升网络的表达能力,但是也可以这样说:使之由纯挚的线性变换,变为繁芜的feature map之间的线性组合,从而实现特色的高度抽象过程。
这一过程视为由线性变换为非线性,提高抽象程度。
而非加入激活函数的浸染。
个人该当是降维或者升维来减小参数个数和增加网络深度,以及跨通道的特色聚合可以代替全连接层

看这个问题的回答 https://www.zhihu.com/question/56024942/answer/369745892

看这个问题的回答 https://www.zhihu.com/question/41037974/answer/150522307

concat与add(sum)的差异

对付两路输入来说,如果是通道数相同且后面带卷积的话,add等价于concat之后对应通道共享同一个卷积核。
下面详细用式子阐明一下。
由于每个输出通道的卷积核是独立的,我们可以只看单个通道的输出。
假设两路输入的通道分别为X1, X2, ..., Xc和Y1, Y2, ..., Yc。
那么concat的单个输出通道为(表示卷积):

而add的单个输出通道为:

因此add相称于加了一种prior,当两路输入可以具有“对应通道的特色图语义类似”(可能不太严谨)的性子的时候,可以用add来替代concat,这样更节省参数和打算量(concat是add的2倍)。
FPN[1]里的金字塔,是希望把分辨率最小但语义最强的特色图增加分辨率,从性子上是可以用add的。
如果用concat,由于分辨率小的特色通道数更多,打算量是一笔不少的开销。
https://www.zhihu.com/question/306213462/answer/562776112

concat改成sum确实会好很多,这两个都是特色领悟,到底有什么实质差异呢?我用的时候也没什么原则便是两个都试一下(实在更喜好用sum,毕竟更省显存)。
我之前做过类似ASP的实验,金字塔型空洞卷积领悟,末了实验结果sum比concat要好一些,但是缘故原由不知道怎么阐明我看过一些论文是concat比sum好的,可能这跟数据集等详细情形有关吧不同的特色 sum 了,有什么意义呢,这些特色又丢失了吧;如果直接 concat,让后面的网络学习,该当更好啊,用到的特色更多了SSD怎么改动变成FasterRCNN

SSD是直接分类,而FasterRcnn是先判断是否为背景再进行分类。
一个是直接细分类,一个是先粗分类再细分类。

反向传播的事理

反向传播事理看CS231n中的BP过程,以及Jacobian的传播。

GD、SGD、mini batch GD的差异

在百面深度学习中有相应的章节。

偏差、方差

有一篇文章比较好的先容了,还有在那本电子版CNNbook中也有。

http://scott.fortmann-roe.com/docs/BiasVariance.html泛化偏差可以分解成偏差的平方+方差+噪声偏差度量了学习算法的期望预测和真实结果的偏离程度,刻画了学习算法本身的拟合能力方差度量了同样大小的演习集的变动所导致的学习性能的变革,刻画了数据 扰动所造成的滋扰噪声表达了当前任务长进修任何算法所能达到的期望泛化偏差下界,刻画了问题本身的难度。
偏差和方差一样平常称为bias和variance,一样平常演习偏差越强,偏差越小,方差越大,泛化偏差在中间会有一个最小值。
如果偏差较大,方差较小,此时为欠拟合,而偏差较小,方差较大为过拟合。
为什么会梯度爆炸,如何防止

多层神经网络常日存在像峭壁一样的构造,这是由于几个较大的权重相乘导致的。
碰着斜率很大的峭壁构造,梯度更新会很大程序地改变参数值,常日会完备跳过这类峭壁的构造。
花书P177.

分布式演习,多卡演习

http://ai.51cto.com/art/201710/555389.htm

https://blog.csdn.net/xs11222211/article/details/82931120#commentBox

精确率和召回率以及PR曲线

这个讲的比较好(TP与FP和ROC曲线):

https://segmentfault.com/a/1190000014829322

精确率是指分类精确的正样本个数占分类器剖断为正样本的样本个数的比例。
召回率是指分类精确的正样本个数占真正的正样本个数的比例。
Precision值和Recall值是既抵牾又统一的两个指标,为了提高Precision值,分类器须要只管即便在“更有把握”时才把样本预测为正样本,但此时每每会由于过于守旧而漏掉很多“没有把握”的正样本,导致Recall值很低。
如何权衡这两个值,以是涌现了PR曲线、ROC曲线以及F1 score等更多的标准来进行判断。
https://www.cnblogs.com/xuexuefirst/p/8858274.html

Yolov2比较Yolov1由于采取了先验框(Anchor Boxes),模型的召回率大幅提升,同时map轻微低落了0.2。

https://segmentfault.com/a/1190000014829322

https://www.cnblogs.com/eilearn/p/9071440.html

https://blog.csdn.net/zdh2010xyz/article/details/54293298

空洞卷积

空洞卷积一样平常都伴有padding,如果dilation=6,那么padding也即是6。
通过空洞卷积后的卷积特色图的大小不变,但是这个卷积的感想熏染野比普通同等大小的卷历年夜。
不过通道数是可以改变的。

在DeepLabv3+中,末了的ASPP层,通过一个1x1卷积和3个3x3的空洞卷积,再concat上一个经由全局均匀池化后双线性采样到同等维度的特色图。

但是要把稳,由于空洞卷积本身不会增大运算量,但是后续的分辨率没有减小,后面的打算量就间接变大了。
https://zhuanlan.zhihu.com/p/52476083

数据不好怎么办,数据不屈衡怎么处理、只有少量带标签怎么处理

详细问题详细剖析。

演习过程中须要过拟合情形怎么办深度学习-通用模型调试技巧如何根据演习/验证丢失曲线诊断我们的CNN关于演习神经网路的诸多技巧Tricks(完备总结版)深度学习中数据集很小是一种什么样的体验

如果模型的实际容量比较大,那么可以说模型可以完备学习到全体数据集,会发生过拟合。
这时候再添加新的数据进去,模型的性能会进一步提升,解释模型还没有被撑去世。
期望风险是模型关于联合分布的期望丢失,履历风险是模型关于演习数据集的均匀丢失。
根据大树定律,当样本容量N趋于无穷时,履历风险趋于期望风险。
但是当样本的容量比较小的的时候,履历风险最小化学习的效果未必就会很好,会产生“过拟合”的征象。
构造风险最小化是为了防止过拟合而提出的策略。

https://lilianweng.github.io/lil-log/2019/03/14/are-deep-neural-networks-dramatically-overfitted.html

https://www.jianshu.com/p/97aafe479fa1 (主要)

正则化

在Pytorch中只能在optim中设置weight_decay,目前只支持L2正则,而且这个正则是针对模型中所有的参数,不论是w还是b,也包括BN中的W和b。

BN层和L2正则化一起有什么后果

便是由于 batch norm 过后, weight 影响没那么重了,以是 l2 weight decay 的效果就不明显了。
证明了L2正则化与归一化相结合时没有正则化效应。
相反,正则化会影响权重的范围,从而影响有效学习率。

https://www.cnblogs.com/makefile/p/batch-norm.html?utm_source=debugrun&utm_medium=referral

ROIPooling和ROIAlign的差异

空间金字塔池化(SSP)可以使不同尺寸的图像产生固定的输出维度。
借题也问个问题,为什么fast rcnn的roi pooling是一个max pooling呢?roi pooling后面也是做单个roi的classification,为啥反面classification的pooling不同?我直觉是看feature map中的一个channel,提取全局特色(如,做classification)用average pooling,提取提取全局信息;提取局部特色(如,roi pooling)该当用max pooling,提取局部最明显的特色,成为7×7的grid后交给后面的fc来做classification。
干系先容:

SPPNet-引入空间金字塔池化改进RCNN自己实现图像增强算法

https://zhuanlan.zhihu.com/p/71231560

图像分类的tricks亚马逊:用CNN进行图像分类的Tricks(https://mp.weixin.qq.com/s/e4m_LhtqoUiGJMQfEZHcRA)溶解实验(Ablation experiment)

由于作者提出了一种方案,同时改变了多个条件/参数,他在接下去的溶解实验中,会逐一掌握一个条件/参数不变,来看当作果,到底是哪个条件/参数对结果的影响更大。
下面这段话摘自知乎,@公民艺术家:你朋友说你本日的样子很帅,你想知道发型、上衣和裤子分别起了多大的浸染,于是你换了几个发型,你朋友说还是挺帅的,你又换了件上衣,你朋友说不帅了,看来这件衣服还挺主要的。

手撸NMS与soft-NMS

https://oldpan.me/archives/write-hard-nms-c

逻辑回归和线性回归

线性回归:通过均方偏差来探求最优的参数,然后通过最小二乘法来或者梯度低落法估计:

而逻辑回归的原型:对数几率回归:逻辑回归和对数几率回归是一样的,通过变形就可以得到,其余逻辑回归利用极大似然概率进行估计。
大略总结:

线性回归和逻辑回归都是广义线性回归模型的特例线性回归只能用于回归问题,逻辑回归用于分类问题(可由二分类推广至多分类)线性回归无联系函数或不起浸染,逻辑回归的联系函数是对数几率函数,属于Sigmoid函数线性回归利用最小二乘法作为参数估计方法,逻辑回归利用极大似然法作为参数估计方法两者都可以利用梯度低落法

把稳:

线性回归的梯度低落法实在和我们演习神经网络一贯,首先须要对参数进行初始化,然后利用随机梯度低落的办法对参数进行更新:https://zhuanlan.zhihu.com/p/33992985线性回归与最小二乘法:https://zhuanlan.zhihu.com/p/36910496最大似然 https://zhuanlan.zhihu.com/p/33349381

来源文章:

https://segmentfault.com/a/1190000014807779https://zhuanlan.zhihu.com/p/39363869https://blog.csdn.net/hahaha_2017/article/details/81066673

对付凸函数来说,局部最优便是全局最优,干系链接:http://sofasofa.io/forum_main_post.php?postid=1000329

http://sofasofa.io/forum_main_post.php?postid=1000322Logistic classification with cross-entropy

什么是attention,有哪几种

https://zhuanlan.zhihu.com/p/61440116

https://www.zhihu.com/question/65044831/answer/227262160

深度学习的线性和非线性卷积是线性的激活函数是非线性的梯度消逝和梯度爆炸的问题

Batch-norm层的浸染

不看必进坑~不论是演习还是支配都会让你踩坑的Batch Normalization

Batch size过小会使Loss曲线振荡的比较大,大小一样平常按照2的次幂规律选择,至于为什么?没有答出来,口试官后面阐明是为了硬件打算效率考虑的,海哥后来也说GPU演习的时候开的线程是2的次幂个神经网络的实质是学习数据的分布,如果演习数据与测试数据的分布不同则会大大降落网络的泛化能力。
随着网络演习的进行,每个隐层的变革使得后一层的输入发生变革,从而每一批演习的数据的分布也会变革,致使网络在每次迭代过程中都须要拟合不同的数据分布,增加数据演习的繁芜度和过拟合的风险。

对数据的剧烈变革有抵抗能力。

要把稳BN在卷积网络层中,由于参数的共享机制,每一个卷积核的参数在不同位置的神经元当中是共享的,因此也该当被归一化。
(详细看一下实现过程)https://leonardoaraujosantos.gitbooks.io/artificial-inteligence/batch_norm_layer.html但是在演习过程中如果batch-size不大的话,可以不该用BN(MaskRcnn这样说的)。
至此,关于Batch Normalization的理论与实战部分就先容道这里。
总的来说,BN通过将每一层网络的输入进行normalization,担保输入分布的均值与方差固定在一定范围内,减少了网络中的Internal Covariate Shift问题,并在一定程度上缓解了梯度消逝,加速了模型收敛;并且BN使得网络对参数、激活函数更加具有鲁棒性,降落了神经网络模型演习和调参的繁芜度;末了BN演习过程中由于利用mini-batch的mean/variance作为总体样本统计量估计,引入了随机噪声,在一定程度上对模型起到了正则化的效果。

https://zhuanlan.zhihu.com/p/34879333

BN与贝叶斯的关系:

从Bayesian角度浅析Batch NormalizationBN跨卡演习怎么担保相同的mean和var

在实践中,我创造,跨卡同步的BN对付performance相称有用。
尤其是对付detection,segmentation任务,本来Batch size较小。
如果Batch Norm能跨卡同步的话,就相称于增大了Batch Norm的batch size 这样能估计更加准确的mean和variance,以是这个操作能提升performance。

如何实现SyncBN

跨卡同步BN的关键是在前向运算的时候拿到全局的均值和方差,在后向运算时候得到相应的全局梯度。
最大略的实现方法是先同步求均值,再发回各卡然后同步求方差,但是这样就同步了两次。
实际上只须要同步一次就可以,我们利用了一个非常大略的技巧,改变方差的公式(公式是图片,详细大家自己网上搜一下SyncBN)。
这样在前向运算的时候,我们只须要在各卡上算出与,再跨卡求出全局的和即可得到精确的均值和方差, 同理我们在后向运算的时候只需同步一次,求出相应的梯度与。
我们在最近的论文Context Encoding for Semantic Segmentation 里面也分享了这种同步一次的方法。
有了跨卡BN我们就不用担心模型过大用多卡影响收敛效果了,由于不管用多少张卡只要全局的批量大小一样,都会得到相同的效果。

ResNet为什么好用

涌现成分:

随着网络的加深,优化函数越来越陷入局部最优解随着网络层数的增加,梯度消逝的问题更加严重,由于梯度在反向传播的时候会逐渐衰减

缘故原由,偏差传播公式可以写成参数W和导数F连乘的形式,当偏差由第L层传播到输入以外的第一个隐含层的时候,会涉及到很多很多的参数和导数的连乘,这时偏差很随意马虎产生消逝或者膨胀,导致不随意马虎学习,拟合能力和泛化能力较差。
残差层中的F层只须要拟合输入x与目标输出H的残差H-x即可,如果某一层的输出已经较好地拟合了期望结果,那么多一层也不回使得模型变得更差,由于该层的输出直接被短接到两层之后,相称于直接学习了一个恒等映射,而跳过的两层只须要拟合上层输出和目标之间的残差即可。

https://zhuanlan.zhihu.com/p/42706477https://zhuanlan.zhihu.com/p/31852747

Resnet的缺陷

resnet实在无法真正的实现梯度消逝,这里面有很强的先验假设,并且resnet真正起浸染的层只在中间,深层浸染比较小(到了深层便是恒等映射了),feature存在利用不敷的征象,add的办法阻碍了梯度和信息的流利。

L1范数和L2范数 运用处景

L1正则可以使少数权值较大,多数权值为0,得到稀疏的权值;L2正则会使权值都趋近于0但非零,得到平滑的权值;https://zhuanlan.zhihu.com/p/35356992

网络初始化有哪些办法,他们的公式初始化过程

目前的权重初始化分为三类:

全置为0 - 险些不会利用随机初始化(均匀随机、正态分布)Xavier 作者 Glorot 认为,精良的初始化该当使得各层的激活值和状态梯度的方差在传播过程中保持同等。
适宜sigmoid,但是不适宜Relu。
He初始化适用于Relu。

初始化,说白了便是构建一个平滑的局部几何空间从而使得优化更大略xavier分布解析:

https://prateekvjoshi.com/2016/03/29/understanding-xavier-initialization-in-deep-neural-networks/

假设利用的是sigmoid函数。
当权重值(值指的是绝对值)过小,输入值每经由网络层,方差都会减少,每一层的加权和很小,在sigmoid函数0附件的区域相称于线性函数,失落去了DNN的非线性性。
当权重的值过大,输入值经由每一层后方差会迅速上升,每层的输出值将会很大,此时每层的梯度将会趋近于0. xavier初始化可以使得输入值x 方差经由网络层后的输出值y方差不变。

https://blog.csdn.net/winycg/article/details/86649832https://zhuanlan.zhihu.com/p/57454669

在pytorch中默认的权重初始化办法是何凯明的那个,举个例子:

resnet中权重的初始化

for m in self.modules(): if isinstance(m, nn.Conv2d): nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') elif isinstance(m, nn.BatchNorm2d): nn.init.constant_(m.weight, 1) nn.init.constant_(m.bias, 0)# Zero-initialize the last BN in each residual branch,# so that the residual branch starts with zeros, and each residual block behaves like an identity.# This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677if zero_init_residual: for m in self.modules(): if isinstance(m, Bottleneck): nn.init.constant_(m.bn3.weight, 0) elif isinstance(m, BasicBlock): nn.init.constant_(m.bn2.weight, 0)求解模型参数量

def model_info(model): # Plots a line-by-line description of a PyTorch model n_p = sum(x.numel() for x in model.parameters()) # number parameters n_g = sum(x.numel() for x in model.parameters() if x.requires_grad) # number gradients print('\n%5s %50s %9s %12s %20s %12s %12s' % ('layer', 'name', 'gradient', 'parameters', 'shape', 'mu', 'sigma')) for i, (name, p) in enumerate(model.named_parameters()): name = name.replace('module_list.', '') print('%5g %50s %9s %12g %20s %12.3g %12.3g' % ( i, name, p.requires_grad, p.numel(), list(p.shape), p.mean(), p.std())) print('Model Summary: %d layers, %d parameters, %d gradients' % (i + 1, n_p, n_g)) print('Model Size: %f MB parameters, %f MB gradients\n' % (n_p4/1e6, n_g4/1e6))卷积打算量

差不多这几个懂了就OK。

普通卷积可分离卷积全连接点卷积

可以看老潘的这篇文章:

你的模型能跑多快???多标签和多分类

那么,如何用softmax和sigmoid来做多类分类和多标签分类呢?

1、如何用softmax做多分类和多标签分类 现假设,神经网络模型末了的输出是这样一个向量logits=[1,2,3,4], 便是神经网络终极的全连接的输出。
这里假设统共有4个分类。
用softmax做多分类的方法: tf.argmax(tf.softmax(logits))首先用softmax将logits转换成一个概率分布,然后取概率值最大的作为样本的分类,这样看彷佛,tf.argmax(logits)同样可以取得最大的值,也能得到精确的样本分类,这样的话softmax彷佛浸染不大.那么softmax的紧张浸染实在是在打算交叉熵上,首先样本集中y是一个one-hot向量,如果直接将模型输出logits和y来打算交叉熵,由于logits=[1,2,3,4],打算出来的交叉熵肯定很大,这种打算办法不对,而该当将logits转换成一个概率分布后再来打算,便是用tf.softmax(logits)和y来打算交叉熵,当然我们也可以直接用tensorflow供应的方法sofmax_cross_entropy_with_logits来打算 这个方法传入的参数可以直接是logits,由于这个根据方法的名字可以看到,方法内部会将参数用softmax进行处理,现在我们取的概率分布中最大的作为终极的分类结果,这是多分类。
我们也可以取概率的top几个,作为终极的多个标签,或者设置一个阈值,并取大于概率阈值的。
这就用softmax实现了多标签分类。

2、如何用sigmoid做多标签分类 sigmoid一样平常不用来做多类分类,而是用来做二分类的,它是将一个标量数字转换到[0,1]之间,如果大于一个概率阈值(一样平常是0.5),则认为属于某个种别,否则不属于某个种别。
那么如何用sigmoid来做多标签分类呢?实在便是针对logits中每个分类打算的结果分别浸染一个sigmoid分类器,分别剖断样本是否属于某个种别。
同样假设,神经网络模型末了的输出是这样一个向量logits=[1,2,3,4], 便是神经网络终极的全连接的输出。
这里假设统共有4个分类。
tf.sigmoid(logits)sigmoid该当会将logits中每个数字都变成[0,1]之间的概率值,假设结果为[0.01, 0.05, 0.4, 0.6],然后设置一个概率阈值,比如0.3,如果概率值大于0.3,则剖断种别符合,那这里,样本会被剖断为种别3和种别4都符合。

数据的输入为什么要归一化

为了肃清数据特色之间的量纲影响在实际运用中,通过梯度低落法求解的模型常日是须要数据归一化的,包括线性回归、逻辑回归、支持向量机、神经网络等,但是决策模型不是很适用。

为什么说朴素贝叶斯是高偏差低方差?

首先,假设你知道演习集和测试集的关系。
大略来讲是我们要在演习集长进修一个模型,然后拿到测试集去用,效果好不好要根据测试集的缺点率来衡量。
但很多时候,我们只能假设测试集和演习集的是符合同一个数据分布的,但却拿不到真正的测试数据。
这时候怎么在只看到演习缺点率的情形下,去衡量测试缺点率呢?

由于演习样本很少(至少不敷够多),以是通过演习集得到的模型,总不是真正精确的。
(就算在演习集上精确率100%,也不能解释它刻画了真实的数据分布,要知道刻画真实的数据分布才是我们的目的,而不是只刻画演习集的有限的数据点)。
而且,实际中,演习样本每每还有一定的噪音偏差,以是如果太追求在演习集上的完美而采取一个很繁芜的模型,会使得模型把演习集里面的偏差都当成了真实的数据分布特色,从而得到缺点的数据分布估计。
这样的话,到了真正的测试集上就错的一塌糊涂了(这种征象叫过拟合)。
但是也不能用太大略的模型,否则在数据分布比较繁芜的时候,模型就不敷以刻画数据分布了(表示为连在演习集上的缺点率都很高,这种征象较欠拟合)。
过拟合表明采取的模型比真实的数据分布更繁芜,而欠拟合表示采取的模型比真实的数据分布要大略。

在统计学习框架下,大家刻画模型繁芜度的时候,有这么个不雅观点,认为Error = Bias + Variance。
这里的Error大概可以理解为模型的预测缺点率,是有两部分组成的,一部分是由于模型太大略而带来的估计不准确的部分(Bias),另一部分是由于模型太繁芜而带来的更大的变革空间和不愿定性(Variance)。

以是,这样就随意马虎剖析朴素贝叶斯了。
它大略的假设了各个数据之间是无关的,是一个被严重简化了的模型。
以是,对付这样一个大略模型,大部分场合都会Bias部分大于Variance部分,也便是说高偏差而低方差。

在实际中,为了让Error只管即便小,我们在选择模型的时候须要平衡Bias和Variance所占的比例,也便是平衡over-fitting和under-fitting。

Canny边缘检测,边界检测算法有哪些

https://zhuanlan.zhihu.com/p/42122107

https://zhuanlan.zhihu.com/p/59640437

传统的目标检测

传统的目标检测一样平常分为以下几个步骤:

区域选择:一幅图像通过selective search的方法,首先对原图进行分割(聚类),然后通过打算相邻区域的相似度,终极找到2000个框,同样要与GT进行正例和负例的判断。
特色提取:通过SIFT或者其他的特色提取方法,将2000个转化为特色向量分类器分类:将特色向量放入SVM中进行分类演习,同时将父类也放入分类器中进行演习。

经典的构造:

HoG + SVM

传统方法的缺陷:

基于滑窗的区域选择策略没有针对性,韶光繁芜度高,窗口冗余手工设计的特色对环境多样性的变革并没有很好的鲁棒性堕落膨胀、开运算闭运算

可以看学习OpenCV第三版中的干系内容,搜索erode、dilation

一些滤波器https://blog.csdn.net/qq_22904277/article/details/53316415https://www.jianshu.com/p/fbe8c24af108https://blog.csdn.net/qq_22904277/article/details/53316415https://blog.csdn.net/nima1994/article/details/79776802https://blog.csdn.net/jiang_ming_/article/details/82594261图像中的高频、低频信息以及高通滤波器、低通滤波器在图像中,边缘信息等比较明显的变革比较剧烈的像素点便是图像中的高频信息。
而除了边缘部分,比较平缓的像素点变革不是很剧烈的内容信息便是低频信息。
高通滤波器便是突出变革剧烈(边缘),去除低频部分,也便是当做边缘提取器。
而低通滤波器紧张是平滑该像素的亮度。
紧张用于去噪和模糊化,高斯模糊是最常用的模糊滤波器(平滑滤波器)之一,它是一个削弱高频旗子暗记强度的低通滤波器。
Resize双线性插值

在网络构造进行特色领悟的时候,双线性插值的办法比转置卷积要好一点。
由于转置卷积有一个比较大的问题便是如果参数配置不当,很随意马虎涌现输出feature map中带有明显棋盘状的征象。

须要把稳的,最近邻插值的效果是最不好的。

双线性插值也分为两类:

align_corners=Truealign_corners=False

一样平常来说,利用align_corners=True可以担保边缘对齐,而利用align_corners=False则会导致边缘突出的情形。
这个讲的非常好:

https://blog.csdn.net/qq_37577735/article/details/80041586

代码实现的讲解:

https://blog.csdn.net/love_image_xie/article/details/87969405https://www.zhihu.com/question/328891283/answer/717113611 看这里的图像展示:https://discuss.pytorch.org/t/what-we-should-use-align-corners-false/22663gradient clipping 梯度裁剪

为了避免梯度爆炸而做出的改进,把稳要和提前终止差异开来。
(提前终止是一种正则化方法,由于当演习有足够能力表示乃至会过拟合的大模型时,演习偏差会随着韶光的推移逐渐降落但验证集的偏差会再次上升。
这意味着只要我们返回使验证集偏差最低的参数设置即可)第一种做法很随意马虎理解,便是先设定一个 gradient 的范围如 (-1, 1), 小于 -1 的 gradient 设为 -1, 大于这个 1 的 gradient 设为 1.

https://wulc.me/2018/05/01/%E6%A2%AF%E5%BA%A6%E8%A3%81%E5%89%AA%E5%8F%8A%E5%85%B6%E4%BD%9C%E7%94%A8/实现一个大略的卷积

实现卷积一样平常用的是im2col的形式,但是口试中我们大略实现一个滑窗法就行了。
比如:用3x3的卷积核(滤波盒)实现卷积操作。
NCNN中在PC端卷积的源码也是这样的。

`/输入:imput[IC][IH][IW]IC = input.channelsIH = input.heightIW = input.width卷积核: kernel[KC1][KC2][KH][KW]KC1 = OCKC2 = ICKH = kernel.heightKW = kernel.width输出:output[OC][OH][OW]OC = output.channelsOH = output.heightOW = output.width个中,padding = VALID,stride=1,OH = IH - KH + 1OW = IW - KW + 1也便是先提前把Oh和Ow算出来,然后将卷积核和输入数据逐一对应即可/for(int ch=0;ch<output.channels;ch++){for(int oh=0;oh<output.height;oh++){for(int ow=0;ow<output.width;ow++){float sum=0;for(int kc=0;kc<kernel.channels;kc++){for(int kh=0;kh<kernel.height;kh++){for(int kw=0;kw<kernel.width;kw++){sum += input[kc][oh+kh][ow+kw]kernel[ch][kc][kh][kw];}}}//if(bias) sum +=bias[]output[ch][oh][ow]=sum;}}}`

参考:

https://www.cnblogs.com/hejunlin1992/p/8686838.html卷积的过程

看看Pytorch的源码与caffe的源码,都是将卷积打算转化为矩阵运算,im2col,然后gemm。
https://blog.csdn.net/mrhiuser/article/details/52672824

转置卷积的打算过程

https://cloud.tencent.com/developer/article/1363619

11的卷积核有什么用,33的卷积核和一个13加一个31的有什么差异

1x1卷积可以改变上一层网络的通道数目。
卷积核大于1x1,意味着提特色须要邻域信息。

若提取横向纹理,则横向邻域信息密度比纵向信息密度高。
核扁横着最科学。
若提纵向纹理,同理,瘦高竖着最好。
若你想提取的纹理种类丰富,那横向邻域信息密度的期望~=纵向信息密度期望

以是对ResNet中bottlenet与mobilenetv2的inverted构造比拟

把稳,resnet中是先降维再升维,而mobilenetv2中是先升维后降维(以是称之为inversed)。

https://zhuanlan.zhihu.com/p/67872001https://zhuanlan.zhihu.com/p/32913695卷积特色图大小的打算

很大略但是也很随意马虎错的问题:

Conv2D动态图和静态图的差异静态图是建立一次,然后不断复用;静态图可以在磁盘中序列化,可以保存全体网络的构造,可以重载,在支配中很实用,在tensorflow静态图中条件和循环须要特定的语法,pytorch只用python的语法就可以实现而动态图是每次利用的时候建立,不随意马虎优化,须要重复之前的代码,但是动态图比静态图代码更简洁

依据采取动态打算或是静态打算的不同,可以将这些浩瀚的深度学习框架划分成两大阵营,当然也有些框架同时具有动态打算和静态打算两种机制(比如 MxNet 和最新的 TensorFlow)。
动态打算意味着程序将按照我们编写命令的顺序进行实行。
这种机制将使得调试更加随意马虎,并且也使得我们将大脑中的想法转化为实际代码变得更加随意马虎。
而静态打算则意味着程序在编译实行时将师长西席成神经网络的构造,然后再实行相应操作。
从理论上讲,静态打算这样的机制许可编译器进行更大程度的优化,但是这也意味着你所期望的程序与编译器实际实行之间存在着更多的代沟。
这也意味着,代码中的缺点将更加难以创造(比如,如果打算图的构造涌现问题,你可能只有在代码实行到相应操作的时候才能创造它)。
尽管理论上而言,静态打算图比动态打算图具有更好的性能,但是在实践中我们常常创造并不是这样的。

历年来所有的网络

这个可以看CS231n中的第九课以及

https://ucbrise.github.io/cs294-ai-sys-sp19/assets/lectures/lec02/classic_neural_architectures.pdfhttps://towardsdatascience.com/a-simple-guide-to-the-versions-of-the-inception-network-7fc52b863202

正式总结下:

LeNet-5:第一个卷积,用来识别手写数组,利用的卷历年夜小为5x5,s=1,便是普通的卷积核池化层结合起来,末了加上全连接层。
AlexNet:在第一个卷积中利用了11x11卷积,第一次利用Relu,利用了NormLayer但不是我们常常说的BN。
利用了dropout,在两个GPU上进行了演习,利用的演习办法是模型并行、ZFNet:AlexNet的加强版,将11x11卷积改成了7x7,也在AlexNet的根本年夜将卷积的通道深度加深。
以是在分类比赛中比之前的效果好了些。
VGGNet:只利用了小卷积3x3(s=1)以及常规的池化层,不过深度比上一个深了一些,末了几层也都是全连接层接一个softmax。
为什么利用3x3卷积,是由于三个3x3卷积的有效感想熏染野和7x7的感想熏染野同等,而且更深、更加非线性,而且卷积层的参数也更加地少,以是速率更快也可以适当加深层数。
GoogleNet:没有利用FC层,参数量比较之前的大大减少,提出了Inception module构造,也便是NIN构造(network within a network)。
但是原始的Inception module打算量非常大,以是在每一个分支加了1x1 conv "bottleneck"构造(详细细节看图)。
googlenet网络构造中为了避免梯度消逝,在中间的两个位置加了两个softmax丢失,以是会有三个loss,全体网络的loss是通过三个loss乘上权重相加后得到 干系文章:https://zhuanlan.zhihu.com/p/42704781 inception构造的特点:1、增加了网络的宽度,同时也提高了对付不同尺度的适应程度。
2、利用 1x1 卷积核对输入的特色图进行降维处理,这样就会极大地减少参数量,从而减少打算量。
3、在V3中利用了多个小卷积核代替大卷积核的方法,除了规整的的正方形,我们还有分解版本的 3x3 = 3x1 + 1x3,这个效果在深度较深的情形下比规整的卷积核更好。
4、发明了Bottleneck 的核心思想还是利用多个小卷积核替代一个大卷积核,利用 1x1 卷积核替代大的卷积核的一部分事情。
也便是先1x1降落通道然后普通3x3然后再1x1回去。
Xception:改进了inception,提出的 depthwise Separable Conv 让人面前一亮。
https://www.jianshu.com/p/4708a09c4352ResNet:越深的网络越难进行优化,有一个特点须要搞明白,越深的层最最少表现该当和浅层的一样,不能比浅层的还差。
对付更深的Resnet(50+),这里采取bottleneck层(也便是两个1x1分别降维和升维)去提升网络的效率。
更详细的描述可以看百面机器学习和ppt。
干系讲解:https://zhuanlan.zhihu.com/p/42706477DenseNet 不能大略说densenet更好,二者比较,ResNet是更一样平常的模型,DenseNet是更特化的模型。
DenseNet用于图像处理可能比ResNet表现更好,实质是DenseNet更能和图像的信息分布特点匹配,是利用了多尺度的Kernel。
但是也有缺点最直接的打算便是一次推断中所产生的所有feature map数目。
有些框架会有优化,自动把比较靠前的层的feature map开释掉,以是显存就会减少,或者inplace操作通过重新打算的方法减少一部分显存,但是densenet由于须要重复利用比较靠前的feature map,以是无法开释,导致显存占用过大。
正是这种_concat_造成densenet能更密集的连接。
SeNet:全称为Squeeze-and-Excitation Networks。
属于把稳力特色提取的范畴,加了GP(Global pooling)和两个FC再加上sigmoid和scale。
也便是天生把稳力掩膜,去乘以输入的x得到新的x。
核心思想便是去学习每个特色通道的主要程度,然后根据这个主要程度去提升有用的特色并抑制对当前任务用途不大的特色。
这个给每一个特色层通道去乘以通过sigmoid得到的主要系数,实在和用bn层去不雅观察哪个系数主要一样。
缺陷:由于在主干上存在 0~1 的 scale 操作,在网络较深 BP 优化时就会在靠近输入层随意马虎涌现梯度消散的情形,导致模型难以优化。
http://www.sohu.com/a/161633191_465975Wide Residual NetworksResNeXt:是resnet和inception的结合体,阁下的residual connection便是公式中的x直接连过来,然后剩下的是32组独立的同样构造的变换,末了再进行领悟,符合split-transform-merge的模式。
虽然分了32组,都是先点卷积降维,然后3x3普通卷积,然后1x1卷积升维(与Mobilenetv2中的相反) 干系先容:https://zhuanlan.zhihu.com/p/51075096Densely Connected Convolutional Networks:有利于减轻梯度消逝的情形,增强了特色的流动。

shufflenet:https://blog.csdn.net/u011974639/article/details/79200559

一些统计知识

正太分布:https://blog.csdn.net/yaningli/article/details/78051361

关于如何演习(演习过程中的一些问题)

MaxPool导致的演习震荡(通过在MaxPool之后加上L2Norm):https://mp.weixin.qq.com/s/QR-KzLxOBazSbEFYoP334Q

全连接层的好伴侣:空间金字塔池化(SPP)

https://zhuanlan.zhihu.com/p/64510297

感想熏染野打算

感想熏染野打算有两个公式,一个普通公式一个通项公式:

须要把稳,卷积和池化都可以增加感想熏染野。

http://zike.io/posts/calculate-receptive-field-for-vgg-16/

—版权声明—

仅用于学术分享,版权属于原作者。

—THE END—

标签:

相关文章

格里姆赛沃代码探索人工智能领域的里程碑

人工智能逐渐成为当今社会关注的焦点。在众多人工智能技术中,格里姆赛沃代码因其独特性而备受瞩目。本文将从格里姆赛沃代码的起源、原理、...

Web前端 2025-02-18 阅读0 评论0

歌词与歌曲同步音乐艺术的完美融合

音乐,作为人类情感的表达方式,自古以来就与人们的生活息息相关。音乐制作技术也日益成熟,歌曲与歌词的同步成为了音乐艺术的一个重要环节...

Web前端 2025-02-18 阅读0 评论0

功能点与代码行软件开发的度量与优化之路

在软件开发的领域,功能点与代码行是衡量软件质量、估算开发成本、评估开发效率的重要指标。功能点关注软件功能的实现,代码行关注软件的实...

Web前端 2025-02-18 阅读1 评论0