您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 计算机视觉理论学习总结
第一部分:深度学习1、神经网络基础问题(1)Backpropagation后向传播是在求解损失函数L对参数w求导时候用到的方法,目的是通过链式法则对参数进行一层一层的求导。这里重点强调:要将参数进行随机初始化而不是全部置0,否则所有隐层的数值都会与输入相关,这称为对称失效。大致过程是:首先前向传导计算出所有节点的激活值和输出值,计算整体损失函数:然后针对第L层的每个节点计算出残差(本质就是整体损失函数对每一层激活值Z的导数),所以要对W求导只要再乘上激活函数对W的导数即可(2)梯度消失、梯度爆炸梯度消失:这本质上是由于激活函数的选择导致的,最简单的sigmoid函数为例,在函数的两端梯度求导结果非常小(饱和区),导致后向传播过程中由于多次用到激活函数的导数值使得整体的乘积梯度结果变得越来越小,也就出现了梯度消失的现象。梯度爆炸:同理,出现在激活函数处在激活区,而且权重W过大的情况下。但是梯度爆炸不如梯度消失出现的机会多。(3)常用的激活函数激活函数公式缺点优点Sigmoidσ(x)=1/(1+e−x)1、会有梯度弥散2、不是关于原点对称3、计算exp比较耗时-Tanhtanh(x)=2σ(2x)−1梯度弥散没解决1、解决了原点对称问题2、比sigmoid更快ReLUf(x)=max(0,x)梯度弥散没完全解决,在(-)部分相当于神经元死亡而且不会复活1、解决了部分梯度弥散问题2、收敛速度更快LeakyReLUf(x)=1(x0)(αx)+1(x=0)(x)-解决了神经死亡问题Maxoutmax(wT1x+b1,wT2x+b2)参数比较多,本质上是在输出结果上又增加了一层克服了ReLU的缺点,比较提倡使用(4)参数更新方法方法名称公式Vanillaupdatex+=-learning_rate*dxMomentumupdate动量更新v=mu*v-learning_rate*dx#integratevelocityx+=v#integratepositionNesterovMomentum(牛顿动量)x_ahead=x+mu*vv=mu*v-learning_rate*dx_aheadx+=vAdagrad(自适应的方法,梯度大的方向学习率越来越小,由快到慢)cache+=dx**2x+=-learning_rate*dx/(np.sqrt(cache)+eps)Adamm=beta1*m+(1-beta1)dxv=beta2*v+(1-beta2)(dx**2)x+=-learning_rate*m/(np.sqrt(v)+eps)(5)解决overfitting的方法dropout,regularization,batchnormalizatin,但是要注意dropout只在训练的时候用,让一部分神经元随机失活。Batchnormalization是为了让输出都是单位高斯激活,方法是在连接和激活函数之间加入BatchNorm层,计算每个特征的均值和方差进行规则化。2、CNN问题(1)思想改变全连接为局部连接,这是由于图片的特殊性造成的(图像的一部分的统计特性与其他部分是一样的),通过局部连接和参数共享大范围的减少参数值。可以通过使用多个filter来提取图片的不同特征(多卷积核)。(2)filter尺寸的选择通常尺寸多为奇数(1,3,5,7)(3)输出尺寸计算公式输出尺寸=(N-F+padding*2)/stride+1步长可以自由选择通过补零的方式来实现连接。(4)pooling池化的作用虽然通过卷积的方式可以大范围的减少输出尺寸(特征数),但是依然很难计算而且很容易过拟合,所以依然利用图片的静态特性通过池化的方式进一步减少尺寸。(5)常用的几个模型,这个最好能记住模型大致的尺寸参数。名称特点LeNet5没啥特点-不过是第一个CNN应该要知道AlexNet引入了ReLU和dropout,引入数据增强、池化相互之间有覆盖,三个卷积一个最大池化+三个全连接层VGGNet采用1*1和3*3的卷积核以及2*2的最大池化使得层数变得更深。常用VGGNet-16和VGGNet19GoogleInceptionNet我称为盗梦空间网络这个在控制了计算量和参数量的同时,获得了比较好的分类性能,和上面相比有几个大的改进:1、去除了最后的全连接层,而是用一个全局的平均池化来取代它;2、引入InceptionModule,这是一个4个分支结合的结构。所有的分支都用到了1*1的卷积,这是因为1*1性价比很高,可以用很少的参数达到非线性和特征变换。3、InceptionV2第二版将所有的5*5变成2个3*3,而且提出来著名的BatchNormalization;4、InceptionV3第三版就更变态了,把较大的二维卷积拆成了两个较小的一维卷积,加速运算、减少过拟合,同时还更改了InceptionModule的结构。微软ResNet残差神经网络(ResidualNeuralNetwork)1、引入高速公路结构,可以让神经网络变得非常深2、ResNet第二个版本将ReLU激活函数变成y=x的线性函数2、RNN1、RNN原理:在普通的全连接网络或CNN中,每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立,因此又被成为前向神经网络(Feed-forward+Neural+Networks)。而在RNN中,神经元的输出可以在下一个时间戳直接作用到自身,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出。所以叫循环神经网络2、RNN、LSTM、GRU区别RNN引入了循环的概念,但是在实际过程中却出现了初始信息随时间消失的问题,即长期依赖(Long-TermDependencies)问题,所以引入了LSTM。LSTM:因为LSTM有进有出且当前的cellinformaton是通过inputgate控制之后叠加的,RNN是叠乘,因此LSTM可以防止梯度消失或者爆炸。推导forgetgate,inputgate,cellstate,hiddeninformation等因为LSTM有进有出且当前的cellinformaton是通过inputgate控制之后叠加的,RNN是叠乘,因此LSTM可以防止梯度消失或者爆炸的变化是关键,下图非常明确适合记忆:GRU是LSTM的变体,将忘记门和输入们合成了一个单一的更新门。3、LSTM防止梯度弥散和爆炸LSTM用加和的方式取代了乘积,使得很难出现梯度弥散。但是相应的更大的几率会出现梯度爆炸,但是可以通过给梯度加门限解决这一问题。4、引出word2vec这个也就是WordEmbedding,是一种高效的从原始语料中学习字词空间向量的预测模型。分为CBOW(ContinousBagofWords)和Skip-Gram两种形式。其中CBOW是从原始语句推测目标词汇,而Skip-Gram相反。CBOW可以用于小语料库,Skip-Gram用于大语料库。具体的就不是很会了。3、GAN1、GAN的思想GAN结合了生成模型和判别模型,相当于矛与盾的撞击。生成模型负责生成最好的数据骗过判别模型,而判别模型负责识别出哪些是真的哪些是生成模型生成的。但是这些只是在了解了GAN之后才体会到的,但是为什么这样会有效呢?假设我们有分布Pdata(x),我们希望能建立一个生成模型来模拟真实的数据分布,假设生成模型为Pg(x;θ),我们的目的是求解θ的值,通常我们都是用最大似然估计。但是现在的问题是由于我们相用NN来模拟Pdata(x),但是我们很难求解似然函数,因为我们没办法写出生成模型的具体表达形式,于是才有了GAN,也就是用判别模型来代替求解最大似然的过程。在最理想的状态下,G可以生成足以“以假乱真”的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,因此D(G(z))=0.5。这样我们的目的就达成了:我们得到了一个生成式的模型G,它可以用来生成图片。2、GAN的表达式通过分析GAN的表达可以看出本质上就是一个minmax问题。其中V(D,G)可以看成是生成模型和判别模型的差异,而minmaxD说的是最大的差异越小越好。这种度量差异的方式实际上叫做Jensen-Shannondivergence。3、GAN的实际计算方法因为我们不可能有Pdata(x)的分布,所以我们实际中都是用采样的方式来计算差异(也就是积分变求和)。具体实现过程如下:有几个关键点:判别方程训练K次,而生成模型只需要每次迭代训练一次,先最大化(梯度上升)再最小化(梯度下降)。但是实际计算时V的后面一项在D(x)很小的情况下由于log函数的原因会导致更新很慢,所以实际中通常将后一项的log(1-D(x))变为-logD(x)。实际计算的时候还发现不论生成器设计的多好,判别器总是能判断出真假,也就是loss几乎都是0,这可能是因为抽样造成的,生成数据与真实数据的交集过小,无论生成模型多好,判别模型也能分辨出来。解决方法有两个:1、用WGAN2、引入随时间减少的噪声4、对GAN有一些改进有引入f-divergence,取代Jensen-Shannondivergence,还有很多,这里主要介绍WGAN5、WGAN上面说过了用f-divergence来衡量两个分布的差异,而WGAN的思路是使用EarthMoverdistance(挖掘机距离Wassersteindistance)。第二部分、机器学习准备1、决策树树相关问题(1)各种熵的计算熵、联合熵、条件熵、交叉熵、KL散度(相对熵)熵用于衡量不确定性,所以均分的时候熵最大KL散度用于度量两个分布的不相似性,KL(p||q)等于交叉熵H(p,q)-熵H(p)。交叉熵可以看成是用q编码P所需的bit数,减去p本身需要的bit数,KL散度相当于用q编码p需要的额外bits。交互信息Mutualinformation:I(x,y)=H(x)-H(x|y)=H(y)-H(y|x)表示观察到x后,y的熵会减少多少。(2)常用的树搭建方法:ID3、C4.5、CART上述几种树分别利用信息增益、信息增益率、Gini指数作为数据分割标准。其中信息增益衡量按照某个特征分割前后熵的减少程度,其实就是上面说的交互信息。用上述信息增益会出现优先选择具有较多属性的特征,毕竟分的越细的属性确定性越高。所以提出了信息增益率的概念,让含有较多属性的特征的作用降低。CART树在分类过程中使用的基尼指数Gini,只能用于切分二叉树,而且和ID3、C4.5树不同,Cart树不会在每一个步骤删除所用特征。(3)防止过拟合:剪枝剪枝分为前剪枝和后剪枝,前剪枝本质就是早停止,后剪枝通常是通过衡量剪枝后损失函数变化来决定是否剪枝。后剪枝有:错误率降低剪枝、悲观剪枝、代价复杂度剪枝(4)前剪枝的几种停止条件节点中样本为同一类特征不足如果某个分支没有值则返回父节点中的多类样本个数小于阈值2、逻辑回归相关问题(1)公式推导一定要会(2)逻辑回归的基本概念这个最好从广义线性模型的角度分析,逻辑回归是假设y服从Bernoulli分布。(3)L1-norm和L2-norm其实稀疏的根本还是在于L0-norm也就是直接统计参数不为0的个数作为规则项,但实际上却不好执行于是引入了L1-norm;而L1norm本质上是假设参数先验是服从Laplace分布的,而L2-norm是假设参数先验为Gaussian分布,我们在网上看到的通常用图像来解答这个问题的原理就在这。但是L1-norm的求解比较困难,可以用坐标轴下降法或是最小角回归法求解。(4)LR和SVM对比首先,LR和SVM最大的区别在于损失函数的选择,LR的损失函数为Log损失(或者说是逻辑损失都可以)、而SVM的损失函数为hingeloss。其次,两者都是线性模型。最后,SVM只考虑支持向量(也就是和分类相关的少数点)(5)LR和随机森林区别随机森林等树算法都是非线性的,而LR是线性的。LR更侧重全局优化,而树模型主要
本文标题:计算机视觉理论学习总结
链接地址:https://www.777doc.com/doc-5214238 .html