官方网站建设案例,网页设计工具有哪些,宁德市人社局,办公室装修大概多少钱一平方word版资料自取链接#xff1a; 链接#xff1a;https://pan.baidu.com/s/1H5ZMcUq-V7fxFxb5ObiktQ 提取码#xff1a;kadm
卷积层 全连接神经网络需要非常多的计算资源才能支撑它来做反向传播和前向传播#xff0c;所以说全连接神经网络可以存储非常多的参数#xff0c;…word版资料自取链接 链接https://pan.baidu.com/s/1H5ZMcUq-V7fxFxb5ObiktQ 提取码kadm
卷积层 全连接神经网络需要非常多的计算资源才能支撑它来做反向传播和前向传播所以说全连接神经网络可以存储非常多的参数如果你给它的样本如果没有达到它的量级的时候它可以轻轻松松把你给他的样本全部都记下来这会出现过拟合的情况。 局部感知在传统神经网络中每个神经元都要与图片上每个像素相连接这样的话就会造成权重的数量巨大造成网络难以训练。人的大脑识别图片的过程中并不是一下子整张图同时识别而是对于图片中的每一个特征首先局部感知然后更高层次对局部进行综合操作从而得到全局信息。 权值共享卷积核的权重通过学习得到且在卷积过程中卷积核的权重不会改变这是参数共享的思想。说明我们通过一个卷积核的操作提取了原图的不同位置的同样(类似)特征。简单来说就是在一幅图片中的不同位置的相同目标它们的特征是基本相同的。 感受野卷积神经网络每一层输出的特征图feature map上的像素点在输入图片上映射的区域大小 计算(out - 1) * stride ksize其中out是指上一层感受野的大小stride是当前层stride 池化层 池化Pooling也称为欠采样或下采样。主要用于特征降维压缩数据和参数的数量减小过拟合保持某种不变性旋转、平移、伸缩等提高模型的容错性。主要有Max Pooling最大池化Average Pooling平均池化 max保留了纹理特征提取出特征差异最大的值会丢弃很多信息。 avg保留整体的数据特征保留的信息很完整但由于求平均可以会导致特征差异减小。 当特征中的信息都具有一定贡献的时候使用AvgPooling网络走到比较深的地方这个时候特征图的H W都比较小包含的语义信息较多这个时候再使用MaxPooling就不太合适了。 激活层 激活函数是神经网络中非线性的来源因为如果去掉这些函数那么整个网络就只剩下线性运算线性运算的复合还是线性运算的最终的效果只相当于单层的线性模型
Sigmoid 1.如果我们初始化神经网络的权值为 [0,1] 之间的随机值由反向传播算法的数学推导可知梯度从后向前传播时其梯度是不可能超过0.25的如果神经网络隐层特别多那么梯度在穿过多层后将变得非常小接近于0即出现梯度消失现象当网络权值初始化为 (1,∞) 区间内的值则会出现梯度爆炸情况。 2.Sigmoid 的 output 不是0均值即zero-centered。这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。 3.其解析式中含有幂运算计算机求解时相对来讲比较耗时。
Tanh 它解决了Sigmoid函数的不是zero-centered输出问题然而梯度消失gradient vanishing的问题和幂运算的问题仍然存在。
Relu ReLu是分段线性函数它的非线性性很弱因此可以构建深层网络。 计算速度非常快只需要判断输入是否大于0 ReLU的输出不是zero-centered
输出层全连接层 两层之间所有神经元都有权重连接通常全连接层在卷积神经网络尾部通过softmax函数得到最终的输出。也就是跟传统的神经网络神经元的连接方式是一样的
Softmax它将多个神经元的输出映射到0,1区间内可以看成概率来理解从而来进行多分类
批量归一化层 解决在训练过程中中间层数据分布发生改变的问题以防止梯度消失或爆炸、加快训练速度 一旦训练数据与测试数据的分布不同那么网络的泛化能力也大大降低 一旦每批训练数据的分布各不相同(batch 梯度下降)那么网络就要在每次迭代都去学习适应不同的分布这样将会大大降低网络的训练速度这也正是为什么我们需要对数据都要做一个归一化预处理的原因。
空洞卷积在标准卷积核内补0大小为3×3 卷积核就可以拥有和大小为5×5卷积核相同的感受野。 使用不同空洞率的空洞卷积就可以获得不同感受野的卷积核就可以应对不同大小的待检测物体也可以同是获得物体的纹理、结构信息。 空间自注意经过不同感受野的空洞卷积后不可避免的会产生冗余信息和噪声在本模块中对于不同尺度空洞卷积得到的特征采取的是Add操作而不是Concatenate操作多尺度特征在融合的过程中如果不采用加权融合的方法会导致冗余信息和噪声与特征拥有相同的响应值。
1.DNN深度神经网络 1.1神经网络 神经网络的学习就是学习如何利用矩阵的线性变换加激活函数的非线性变换将原始输入空间投向线性可分/稀疏的空间去分类/回归。增加节点数增加维度即增加线性转换能力。增加层数增加激活函数的次数即增加非线性转换次数 1.2神经元 神经网络由大量的神经元相互连接而成。每个神经元接受线性组合的输入后最开始只是简单的线性加权后来给每个神经元加上了非线性的激活函数从而进行非线性变换后输出。每两个神经元之间的连接代表加权值称之为权重weight。不同的权重和激活函数则会导致神经网络不同的输出。 1.3激活函数 参考 常用的非线性激活函数有sigmoid、tanh、relu等等前两者sigmoid/tanh比较常见于全连接层后者relu常见于卷积层。
1.3.1.sigmoid
函数g(z)的图形表示如下 横轴表示定义域z纵轴表示值域g(z)
• 也就是说sigmoid函数的功能是相当于把一个实数压缩至0到1之间。当z是非常大的正数时g(z)会趋近于1而z是非常小的负数时则g(z)会趋近于0。 缺点
容易导致梯度消失。 问梯度消失和梯度爆炸改进方法。 解决梯度爆炸 a.可以通过梯度截断。通过添加正则项。 解决梯度消失 a.将RNN改掉使用LSTM等自循环和门控制机制。 b.优化激活函数如将sigmold改为relu c.使用batchnorm d.使用残差结构Sigmoid 的输出不是0均值即zero-centered。 这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。 结果那么对w求局部梯度则都为正这样在反向传播的过程中w要么都往正方向更新要么都往负方向更新导致有一种捆绑的效果使得收敛缓慢。解析式中含有幂运算。 计算机求解时相对来讲比较耗时。对于规模比较大的深度网络这会较大地增加训练时间。 1.3.2.tanh
特点和sigmoid差不多但值域为[-1,1] 解决了Sigmoid函数的不是zero-centered输出问题。 梯度消失和幂运算的问题仍然存在。 1.3.3.ReLU
优点
解决了梯度消失问题计算速度非常快只需要判断输入是否大于0收敛速度远快于sigmoid和tanh因为这两个梯度最大为0.25而relu为1 缺点输出不是zero-centeredDead ReLU Problem指的是某些神经元可能永远不会被激活导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化少见 。例如w初始化全部为一些负数。(2) learning rate太高导致在训练过程中参数更新太大不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。权重初始化看本篇1.7原点不可导 1.3.4.leaky relu函数
优点 不会有Dead ReLU问题 输出的均值接近0zero-centered 缺点 计算量稍大 原点不可导 1.3.5为什么神经网络要引入非线性 答如果没有激励函数在这种情况下你每一层节点的输入都是上层输出的线性函数无论你神经网络有多少层输出都是输入的线性组合相当于没有隐藏层网络的学习能力有限。 深度学习最主要的特点就是多层非线性。 多层为了能够学习更多的东西没有非线性多层和单层没什么区别就是简单的线性组合连异或都解决不了 1.4神经网络
输入层Input layer众多神经元Neuron接受大量非线形输入讯息。输入的讯息称为输入向量。输出层Output layer讯息在神经元链接中传输、分析、权衡形成输出结果。输出的讯息称为输出向量。隐藏层Hidden layer简称“隐层”是输入层和输出层之间众多神经元和链接组成的各个层面。如果有多个隐藏层则意味着多个激活函数。 1.4Backpropagation要能推导 后向传播是在求解损失函数L对参数w求导时候用到的方法目的是通过链式法则对参数进行一层一层的求导。这里重点强调要将参数进行随机初始化而不是全部置0否则所有隐层的数值都会与输入相关这称为对称失效。 1.5梯度消失、梯度爆炸 梯度消失因为在深层网络中通常采用的激活函数是sigmoid在该函数中最小值和最大值的梯度(也就是倒数)都趋近于0。神经网络的反向传播是逐层对函数偏导相乘当神经网络层数非常深的时候最后一层产生的偏差就因为乘了很多的小于1的数而越来越小最终就会变为0从而导致层数比较浅的权重没有更新。 梯度爆炸同理出现在激活函数处在激活区而且权重W过大的情况下。但是梯度爆炸不如梯度消失出现的机会多。 1.5.1解决梯度消失或爆炸问题的方法。修改激活函数批量规范化Batch Normalization梯度截断Gradient Clipping使用长短期记忆网络残差结构逐层贪婪预训练 1.6overfitting 1.6.0过拟合的原因训练集与测试集数据分布不一致数据集噪声比较多干扰太大模型记住噪声信息未拟合输入信息和标签的关系模型迭代太多拟合了样本中不具有代表性的数据和噪声数据样本数据量远小于模型复杂度 1.6.1.解决方法 拟合过程中通常都**倾向于让权值尽可能小最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单能适应不同的数据集也在一定程度上避免了过拟合现象。**可以设想一下对于一个线性回归方程若参数很大那么只要数据偏移一点点就会对结果造成很大的影响但如果参数足够小数据偏移得多一点也不会对结果造成什么影响专业一点的说法是『抗扰动能力强』。L1/L2正则化原理奥卡姆剃刀:L1正则化在损失函数中加入所有权重参数w的绝对值之和迫使更多的w为0使特征变得稀疏L2正则化也叫作权重衰减目标函数中增加所有权重w参数的平方之和。对于线性回归模型使用L1正则化的模型建叫做Lasso回归使用L2正则化的模型叫做Ridge回归岭回归。early stoppingDropout在训练过程中让神经元以超参数p的概率被激活(也就是说1-p的概率被设置为0)类似于bagging算法Batch Normalization对神经网络中下一层的输入进行归一化处理使得输入量的均值为0方差为1即通过特征归一化加速模型的训练shortcut-connect(使用残差网络Residual networkdensenet)数据增强(增加样本的数量) 1.6.2.L1/L2正则化的理解 拟合过程中通常都倾向于让权值尽可能小最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单能适应不同的数据集也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程若参数很大那么只要数据偏移一点点就会对结果造成很大的影响但如果参数足够小数据偏移得多一点也不会对结果造成什么影响专业一点的说法是“抗扰动能力强。 1.6.3 Batch Normalization的理解 参考 机器学习领域有个很重要的假设 IID独立同分布假设就是假设训练数据和测试数据是满足相同分布的这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。那BatchNorm的作用是什么呢BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。 BN的基本思想其实相当直观 因为深层神经网络在做非线性变换前的激活输入值就是那个xWUBU是输入随着网络深度加深或者在训练过程中其分布逐渐发生偏移或者变动之所以训练收敛慢一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近对于Sigmoid函数来说意味着激活输入值WUB是大的负值或正值所以这导致反向传播时低层神经网络的梯度消失这是训练深层神经网络收敛越来越慢的本质原因而BN就是通过一定的规范化手段把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布其实就是把越来越偏的分布强制拉回比较标准的分布这样使得激活输入值落在非线性函数对输入比较敏感的区域这样输入的小变化就会导致损失函数较大的变化意思是这样让梯度变大避免梯度消失问题产生而且梯度变大意味着学习收敛速度快能大大加快训练速度。 BatchNorm的好处 BatchNorm为什么厉害呢关键还是效果好。①不仅仅极大提升了训练速度收敛过程大大加快②还能增加分类效果一种解释是这是类似于Dropout的一种防止过拟合的正则化表达方式所以不用Dropout也能达到相当的效果③另外调参过程也简单多了对于初始化要求没那么高而且可以使用大的学习率等。 1.6.4Batch Normalization的实现 参考
如上图所示BN步骤主要分为4步 求每一个训练批次数据的均值 求每一个训练批次数据的方差 使用求得的均值和方差对该批次的训练数据做归一化获得0-1分布。其中ε是为了避免除数为0时所使用的微小正数。 尺度变换和偏移将xi乘以γ调整数值大小再加上β增加偏移后得到yi这里的γ是尺度因子β是平移因子。这一步是BN的精髓由于归一化后的xi基本会被限制在正态分布下使得网络的表达能力下降。为解决该问题我们引入两个新的参数γ,β。 γ和β是在训练时网络自己学习得到的。 1.6.5BN测试集预测时均值和方差怎么求 在训练时我们会对同一批的数据的均值和方差进行求解进而进行归一化操作。但是对于预测时我们的均值和方差怎么求呢比如我们预测单个样本时那还怎么求均值和方法呀其实是这种样子的对于预测阶段时所使用的均值和方差其实也是来源于训练集。比如我们在模型训练时我们就记录下每个batch下的均值和方差待训练完毕后我们求整个训练样本的均值和方差期望值作为我们进行预测时进行BN的的均值和方差. 1.6.6BN滑动平均操作 参考 滑动平均或者叫做指数加权平均可以用来估计变量的局部均值使得变量的更新与一段时间内的历史取值有关。
滑动平均的好处 占内存少不需要保存过去10个或者100个历史 θ 值就能够估计其均值。当然滑动平均不如将历史值全保存下来计算均值准确但后者占用更多内存和计算成本更高 训练阶段: 在训练时利用当前batch的mean和variance来进行BN处理, 同时使用滑动平均的方式不断的更新global 的mean和variance, 并将其存储起来. 测试阶段: 在预测阶段, 直接使用模型存储好的均值和方差进行计算 1.7权重初始化的几种方法
看这里 1.7.1把w初始化为0 我们在线性回归logistics回归的时候基本上都是把参数初始化为0我们的模型也能够很好的工作。然后在神经网络中把w初始化为0是不可以的。这是因为如果把w初始化0那么每一层的神经元学到的东西都是一样的输出是一样的而且在bp的时候每一层内的神经元也是相同的因为他们的gradient相同。 1.7.2对w随机初始化 但是随机初始化也有缺点np.random.randn()其实是一个均值为0方差为1的高斯分布中采样。当神经网络的层数增多时会发现越往后面的层的激活函数使用tanH的输出值几乎都接近于0激活函数输出值接近于0会导致梯度非常接近于0因此会导致梯度消失。 1.7.3Xavier初始化 Xavier initialization是 Glorot 等人为了解决随机初始化的问题提出来的另一种初始化方法他们的思想倒也简单就是尽可能的让输入和输出服从相同的分布这样就能够避免后面层的激活函数的输出值趋向于0。深层的激活函数输出值还是非常漂亮的服从标准高斯分布。虽然Xavier initialization能够很好的 tanH 激活函数但是对于目前神经网络中最常用的ReLU激活函数还是无能能力 1.7.4He初始化 为了解决上面的问题我们的何恺明大神关于恺明大神的轶事有兴趣的可以八卦下哈哈哈蛮有意思的提出了一种针对ReLU的初始化方法一般称作 He initialization。现在神经网络中隐藏层常使用ReLU权重初始化常用He initialization这种方法。 1.8关于softmax 参考 softmax函数又称归一化指数函数。它是二分类函数sigmoid在多分类上的推广目的是将多分类的结果以概率的形式展现出来。 我们知道概率有两个性质1预测的概率为非负数2各种预测结果概率之和等于1。 softmax就是将在负无穷到正无穷上的预测结果按照这两步转换为概率的。
两步
将预测结果转化为非负数。各种预测结果概率之和等于1。 2.CNN卷积神经网络 卷积神经网络Convolutional Neural Networks, CNN是一类包含卷积计算且具有深度结构的前馈神经网络Feedforward Neural Networks是深度学习deep learning的代表算法之一。 超详细介绍
2.1什么是卷积 对图像和滤波矩阵做内积逐个元素相乘再求和的操作就是所谓的『卷积』操作也是卷积神经网络的名字来源。 几个概念
depth窗口个数决定输出的depth厚度。同时代表滤波器个数。stride数据窗口每次移动的步长zero-padding在外围边缘补充若干圈0方便从初始位置以步长为单位可以刚好滑倒末尾位置通俗地讲就是为了总长能被步长整除。 2.1.1为什么用奇数卷积 主要有以下两个原因 • 1奇数卷积核更容易做padding。我们假设卷积核大小为k*k为了让卷积后的图像大小与原图一样大根据公式可得到paddingk-1/2看到这里细心地小伙伴应该已经看到点端倪了没错这里的k只有在取奇数的时候padding才能是整数否则padding不好进行图片填充 • 2更容易找到锚点。这又是什么意思呢在CNN中一般会以卷积核的某个基准点进行窗口滑动通常这个基准点是卷积核的中心点所以如果k’是偶数就找不到中心点了。 2.1.2.1x1卷积核的作用 参考 1实现跨通道的交互和信息整合使用1x1卷积核其实就是对不同channel间的信息做线性组合的一个变换过程。 2增加非线性特性1x1卷积核利用后接的非线性激活函数可以在保持feature map尺度不变的前提下大幅增加非线性特性把网络做的很深 3减少模型参数降低计算量 2.1.3.为什么2个3x3可以代替1个5x5的卷积核 在卷积神经网络中一般情况下卷积核越大感受野receptive field越大看到的图片信息越多所获得的全局特征越好。虽说如此但是大的卷积核会导致计算量的暴增不利于模型深度的增加计算性能也会降低。 于是在VGG、Inception网络中利用两个3×3卷积核的组合替换一个5×5卷积核这样的好处是 1在具有相同感知野的条件下提升了网络的深度在一定程度上提升了神经网络的效果 2降低了参数量从5×5×1 x channels 到 3×3×2 x channels。 那么假设输入是28x28 使用5x5的卷积核对其卷积步长stride为1填充padding为0得到的结果是 (28-5 0x2) / 1 124 使用2层3x3的卷积核同样步长stride为1填充padding为0 第一层3x3得到的结果是28-3 0x2/ 1 126 第二层3x3得到的结果是26-3 0x2/ 1 124 所以最终结果是2层3x3和1个5x5的卷积核得到的feature map大小是一样的。 同理也能得出三个3x3的卷积核可以替换一个7x7的卷积核。 2.2激励层 前面介绍了激活函数sigmoid但实际梯度下降中sigmoid容易饱和、造成终止梯度传递且没有0中心化。在CNN中用ReLU作为激励函数。 ReLU的优点是收敛快求梯度简单。 2.3池化层 CNN还有一个重要思想就是池化池化层通常接在卷积层后面。其实引入它的目的就是为了简化卷积层的输出。通俗地理解池化层也在卷积层上架了一个窗口但这个窗口比卷积层的窗口简单许多不需要wb这些参数它只是对窗口范围内的神经元做简单的操作如求和求最大值把求得的值作为池化层神经元的输入值。 通常卷积层的窗口是多个的池化层的窗口也是多个的。简单来说卷积层用一个窗口去对输入层做卷积操作池化层也用一个窗口去对卷积层做池化操作。 需要记住池化层一个最大的好处经过池化后大大减少了我们学到的特征值也就大大减少了后面网络层的参数。 虽然通过卷积的方式可以大范围的减少输出尺寸特征数但是依然很难计算而且很容易过拟合所以依然利用图片的静态特性通过池化的方式进一步减少尺寸。 2.4全连接层 池化层到输出层是全连接这和DNN是一样的。 如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。 2.5什么是权值共享 局部感知即网络部分连通每个神经元只与上一层的部分神经元相连只感知局部而不是整幅图像滑窗实现。局部像素关系紧密较远像素相关性弱。因此只需要局部感知在更高层将局部的信息综合起来就得到了全局的信息。 权值共享从一个局部区域学习到的信息应用到图像的其它地方去。即用一个相同的卷积核去卷积整幅图像不同的特征靠多个不同的卷积核实现。 2.6CNN和密集神经网络DNN的区别 DNN的输入是向量形式并未考虑到平面的结构信息在图像和NLP领域这一结构信息尤为重要例如识别图像中的数字同一数字与所在位置无关换句话说任一位置的权重都应相同CNN的输入可以是tensor例如二维矩阵通过filter获得局部特征较好的保留了平面结构信息。 2.6.1在图像分类任务中相较于使用DNN使用CNN有哪些优势 虽然两种模型都可以捕获彼此靠近的像素之间的关系但CNN具有以下属性 • 它是平移不变的对于过滤器而言像素的确切位置是无关的。 • 参数更少更不容易发生过度拟合一般而言CNN中的参数比DNN要少很多。 • 方便我们更好地理解模型我们可以查看过滤器的权重并可视化神经网络的学习成果。 • 分层性质通过使用较简单的模式描述复杂的模式来学习模式。 2.7.Feature Map尺寸计算 Feature Map的尺寸等于(input_size 2 * padding_size − filter_size)/stride1 2.8常用的几个模型这个最好能记住模型大致的尺寸参数.
2.9说明在图像分类任务中可视化CNN特征的两种方法 • 输入遮挡遮挡输入图像的一部分看看哪部分对分类的影响最大。 例如针对某个训练好的图像分类模型将下列图像作为输入。如果我们看到第三幅图像被分类为狗狗的概率为98%而第二幅图像的准确率仅为65%则说明眼睛对于对分类的影响更大。 • 激活最大化创建一个人造的输入图像以最大化目标响应梯度上升。 2.10 什么是Group Convolution 若卷积神将网络的上一层有N个卷积核,则对应的通道数也为N。设群数目为M, 在进行卷积操作的时候, 将通道分成M份, 每个group对应N/M个通道, 然后每个group卷积完成后输出叠在一起, 作为当前层的输出通道。参数减少为原来的1/M. 3.RNN循环神经网络 循环神经网络Recurrent Neural Network, RNN是一类以序列数据为输入在序列的演进方向进行递归recursion且所有循环单元按链式连接的递归神经网络recursive neural network
3.1RNN模型 看这里
3.2RNN前向传播 WUV三个参数是共享的。
3.3RNN反向传播BPTT手推 BPTTback-propagation through time算法是常用的训练RNN的方法其实本质还是BP算法只不过RNN处理时间序列数据所以要基于时间反向传播故叫随时间反向传播。BPTT的中心思想和BP算法相同沿着需要优化的参数的负梯度方向不断寻找更优的点直至收敛。综上所述BPTT算法本质还是BP算法BP算法本质还是梯度下降法那么求各个参数的梯度便成了此算法的核心。 与BP算法不同的是其中W和U两个参数的寻优过程需要追溯之前的历史数据参数V相对简单只需关注目前那么我们就来先求解参数V的偏导数。
W和U的偏导的求解由于需要涉及到历史数据其偏导求起来相对复杂我们先假设只有三个时刻那么在第三个时刻 L对W的偏导数为
相应的L在第三个时刻对U的偏导数为
可以观察到在某个时刻的对W或是U的偏导数需要追溯这个时刻之前所有时刻的信息这还仅仅是一个时刻的偏导数上面说过损失也是会累加的那么整个损失函数对W和U的偏导数将会非常繁琐。虽然如此但好在规律还是有迹可循我们根据上面两个式子可以写出L在t时刻对W和U偏导数的通式
整体的偏导公式就是将其按时刻再一一加起来。 前面说过激活函数是嵌套在里面的如果我们把激活函数放进去拿出中间累乘的那部分
我们会发现累乘会导致激活函数导数的累乘进而会导致“梯度消失“和“梯度爆炸“现象的发生。 3.4RNN的应用场景 至少会说出三个图片生成文字情感分析机器翻译 • 1对多 1、从图像生成文字输入为图像的特征输出为一段句子 2、根据图像生成语音或音乐输入为图像特征输出为一段语音或音乐 • 多对1最典型的就是情感分析 1、输出一段文字判断其所属类别 2、输入一个句子判断其情感倾向 3、输入一段视频判断其所属类别 • 多对多 1、机器翻译输入一种语言文本序列输出另外一种语言的文本序列 2、文本摘要输入文本序列输出这段文本序列摘要 3、阅读理解输入文章输出问题答案 4、语音识别输入语音序列信息输出文字序列 3.5CNN和RNN的区别 相同点就往神经网络说不同点空间和时间动态和静态去解释
4.LSTM 长短期记忆网络LSTMLong Short-Term Memory是一种时间循环神经网络是为了解决一般的RNN循环神经网络存在的长期依赖问题而专门设计出来的 核心细胞状态 三个门控 去除或增加信息到细胞状态 选择让信息有多少通过 看这里
4.1忘记门 作用丢弃信息
4.2输入门层 作用确定更新的信息
4.3输出门层 作用确定要输出的值
4.4LSTM防止梯度消失梯度爆炸问题 RNN在进行BPTT计算更新参数时深层的网络计算参数的梯度时会出现偏导数连乘的情况这时会出现梯度消失或者梯度爆炸。当使用LSTM时因为加入了sigmoid和tanh激活函数求偏导时使得连乘的偏导部分等于0或者1这就解决了梯度消失和梯度爆炸的问题。 参考1 参考2
4.5 LSTM 为什么用sigmoid和tanh激活函数 1、在 LSTM 中所有控制门都使用 sigmoid 作为激活函数遗忘门、输入门、输出门 2、在计算候选记忆或隐藏状态时使用双曲正切函数 tanh 作为激活函数 3、所谓饱和性即输入超过一定范围后输出几乎不再发生明显变化了符合门控的定义如果使用其他非饱和激活函数则难以实现门控效果因此不能替换为其他激活函数。 4、使用 tanh 作为计算状态时的激活函数主要是因为其值域为 (-1, 1)tanh 比 sigmoid 在 0 附近有更大的梯度通常会使模型收敛更快。 5.GRU 5.1原理 相比LSTM使用GRU能够达到相当的效果并且相比之下更容易进行训练能够很大程度上提高训练效率因此很多时候会更倾向于使用GRU。(一句话就是简单但效果也不差) 它将忘记门和输入门合成了一个单一的更新门。同样还混合了细胞状态和隐藏状态和其他一些改动。最终的模型比标准的 LSTM 模型要简单也是非常流行的变体。
5.2.GRU和LSTM的区别 GRU和LSTM的性能在很多任务上不分伯仲。 GRU 参数更少因此更容易收敛但是数据集很大的情况下LSTM表达性能更好。 从结构上来说GRU只有两个门update和resetLSTM有三个门forgetinputoutputGRU直接将hidden state 传给下一个单元而LSTM则用memory cell 把hidden state 包装起来。 6.GAN(生成对抗网络) 6.1GAN网络的思想 GAN用一个生成模型和一个判别模型关于生成模型和判别模型的面试看这里。判别模型用于判断给定的图片是不是真实的图片生成模型自己生成一张图片和想要的图片很像开始时两个模型都没有训练然后两个模型一起进行对抗训练生成模型产生图片去欺骗判别模型判别模型去判别真假最终两个模型在训练过程中能力越来越强最终达到稳态。 7.EM算法 EM算法是用于含有隐变量模型的极大似然估计或者极大后验估计有两步组成E步求期望expectationM步求极大maxmization。本质上EM算法还是一个迭代算法通过不断用上一代参数对隐变量的估计来对当前变量进行计算直到收敛。 注意EM算法是对初值敏感的而且EM是不断求解下界的极大化逼近求解对数似然函数的极大化的算法也就是说EM算法不能保证找到全局最优值。对于EM的导出方法也应该掌握。 8.HMM(隐马尔科夫模型) 暂时先不写 9.CRF 暂时先不写 10.深度学习参数更新方法
11.如何解决样本类别的不均衡问题 • 过采样/上采样增加类别少的样本数量实现样本数量的均衡。具体是通过复制类别上的样本构成多条数据。此方法的缺点是当样本的特征很少时容易出现过拟合。需要对过采样方法进行改进改进的方法是在类别少的样本中加入噪声、干扰数据或通过一定的规则产生新合成的样本如smote算法。 • 欠采样/下采样减少类别多的样本数量一般的方法是随机地去掉一些类别多的样本。而下采样的缺点也比较明显那就是最终的训练集丢失了数据模型只学到了一部分可能会导致欠拟合解决办法多次下采样放回采样这样产生的训练集才相互独立产生多个不同的训练集进而训练多个不同的分类器利用模型融合通过组合多个分类器的结果得到最终的结果。 • 损失函数采用不同的类别权重对类别少的样本赋予高的权重对类别多的样本赋予低的权重。 • 选择准确率之外的损失函数在样本不平衡的情况下得到的高准确率没有任何意义此时准确率就会失效。针对机器学习中的数据不平衡问题建议更多PR(Precision-Recall曲线)而非ROC曲线。 ● BatchNormalization的作用 参考回答 神经网络在训练的时候随着网络层数的加深,激活函数的输入值的整体分布逐渐往激活函数的取值区间上下限靠近,从而导致在反向传播时低层的神经网络的梯度消失。而Batch Normalization的作用是通过规范化的手段,将越来越偏的分布拉回到标准化的分布,使得激活函数的输入值落在激活函数对输入比较敏感的区域,从而使梯度变大,加快学习收敛速度,避免梯度消失的问题。 ● 梯度消失 参考回答 在神经网络中当前面隐藏层的学习速率低于后面隐藏层的学习速率即随着隐藏层数目的增加分类准确率反而下降了。这种现象叫做消失的梯度问题。 ● 循环神经网络为什么好? 参考回答 循环神经网络模型RNN是一种节点定向连接成环的人工神经网络是一种反馈神经网络RNN利用内部的记忆来处理任意时序的输入序列并且在其处理单元之间既有内部的反馈连接又有前馈连接这使得RNN可以更加容易处理不分段的文本等。 ● 什么是Group Convolution 参考回答 若卷积神将网络的上一层有N个卷积核,则对应的通道数也为N。设群数目为M,在进行卷积操作的时候,将通道分成M份,每个group对应N/M个通道,然后每个group卷积完成后输出叠在一起,作为当前层的输出通道。 ● 什么是RNN 参考回答 一个序列当前的输出与前面的输出也有关,在RNN网络结构中中,隐藏层的输入不仅包括输入层的输出还包含上一时刻隐藏层的输出,网络会对之前的信息进行记忆并应用于当前的输入计算中。 ● 训练过程中,若一个模型不收敛,那么是否说明这个模型无效?导致模型不收敛的原因有哪些? 参考回答 并不能说明这个模型无效,导致模型不收敛的原因可能有数据分类的标注不准确,样本的信息量太大导致模型不足以fit整个样本空间。学习率设置的太大容易产生震荡,太小会导致不收敛。可能复杂的分类任务用了简单的模型。数据没有进行归一化的操作。 ● 图像处理中锐化和平滑的操作 参考回答 锐化就是通过增强高频分量来减少图像中的模糊,在增强图像边缘的同时也增加了图像的噪声。 平滑与锐化相反,过滤掉高频分量,减少图像的噪声是图片变得模糊。 ● VGG使用33卷积核的优势是什么? 参考回答 2个33的卷积核串联和55的卷积核有相同的感知野,前者拥有更少的参数。多个33的卷积核比一个较大尺寸的卷积核有更多层的非线性函数,增加了非线性表达,使判决函数更具有判决性。 ● Relu比Sigmoid的效果好在哪里? 参考回答 Sigmoid的导数只有在0的附近时有较好的激活性,而在正负饱和区域的梯度趋向于0,从而产生梯度弥散的现象,而relu在大于0的部分梯度为常数,所以不会有梯度弥散现象。Relu的导数计算的更快。Relu在负半区的导数为0,所以神经元激活值为负时,梯度为0,此神经元不参与训练,具有稀疏性。 ● 问题神经网络中权重共享的是 参考回答 卷积神经网络、循环神经网络 解析通过网络结构直接解释 ● 问题神经网络激活函数 参考回答 sigmod、tanh、relu 解析需要掌握函数图像特点互相比较优缺点以及改进方法 ● 问题在深度学习中通常会finetuning已有的成熟模型再基于新数据修改最后几层神经网络权值为什么 参考回答 实践中的数据集质量参差不齐可以使用训练好的网络来进行提取特征。把训练好的网络当做特征提取器。 ● 问题画GRU结构图 参考回答
GRU有两个门更新门输出门 解析如果不会画GRU可以画LSTM或者RNN。再或者可以讲解GRU与其他两个网络的联系和区别。不要直接就说不会。 ● Attention机制的作用 参考回答 减少处理高维输入数据的计算负担,结构化的选取输入的子集,从而降低数据的维度。让系统更加容易的找到输入的数据中与当前输出信息相关的有用信息,从而提高输出的质量。帮助类似于decoder这样的模型框架更好的学到多种内容模态之间的相互关系。 ● Lstm和Gru的原理 参考回答 Lstm由输入门,遗忘门,输出门和一个cell组成。第一步是决定从cell状态中丢弃什么信息,然后在决定有多少新的信息进入到cell状态中,最终基于目前的cell状态决定输出什么样的信息。 Gru由重置门和跟新门组成,其输入为前一时刻隐藏层的输出和当前的输入,输出为下一时刻隐藏层的信息。重置门用来计算候选隐藏层的输出,其作用是控制保留多少前一时刻的隐藏层。跟新门的作用是控制加入多少候选隐藏层的输出信息,从而得到当前隐藏层的输出。 ● 什么是dropout 参考回答 在神经网络的训练过程中,对于神经单元按一定的概率将其随机从网络中丢弃,从而达到对于每个mini-batch都是在训练不同网络的效果,防止过拟合。 ● LSTM每个门的计算公式 参考回答 遗忘门: 输入门: 输出门: ● DropConnect的原理 参考回答 防止过拟合方法的一种,与dropout不同的是,它不是按概率将隐藏层的节点输出清0,而是对每个节点与之相连的输入权值以一定的概率清0。
● BN层的作用为什么要在后面加伽马和贝塔不加可以吗 参考回答 BN层的作用是把一个batch内的所有数据从不规范的分布拉到正态分布。这样做的好处是使得数据能够分布在激活函数的敏感区域敏感区域即为梯度较大的区域因此在反向传播的时候能够较快反馈误差传播。 ● 梯度消失梯度爆炸的问题 参考回答 激活函数的原因由于梯度求导的过程中梯度非常小无法有效反向传播误差造成梯度消失的问题。 ● Adam 参考回答 Adam 算法和传统的随机梯度下降不同。随机梯度下降保持单一的学习率即 alpha更新所有的权重学习率在训练过程中并不会改变。而 Adam 通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率。 ● attention机制 参考回答 Attention简单理解就是权重分配。以seq2seq中的attention公式作为讲解。就是对输入的每个词分配一个权重权重的计算方式为与解码端的隐含层时刻作比较得到的权重的意义就是权重越大该词越重要。最终加权求和。
● RNN梯度消失问题,为什么LSTM和GRU可以解决此问题 参考回答 RNN由于网络较深,后面层的输出误差很难影响到前面层的计算,RNN的某一单元主要受它附近单元的影响。而LSTM因为可以通过阀门记忆一些长期的信息,相应的也就保留了更多的梯度。而GRU也可通过重置和更新两个阀门保留长期的记忆,也相对解决了梯度消失的问题。 ● GAN网络的思想 参考回答 GAN用一个生成模型和一个判别模型,判别模型用于判断给定的图片是不是真实的图片,生成模型自己生成一张图片和想要的图片很像,开始时两个模型都没有训练,然后两个模型一起进行对抗训练,生成模型产生图片去欺骗判别模型,判别模型去判别真假,最终两个模型在训练过程中,能力越来越强最终达到稳态。 ● 1*1的卷积作用 参考回答 实现跨通道的交互和信息整合,实现卷积核通道数的降维和升维,可以实现多个feature map的线性组合,而且可是实现与全连接层的等价效果。 ● 怎么提升网络的泛化能力 参考回答 从数据上提升性能:收集更多的数据,对数据做缩放和变换,特征组合和重新定义问题。 从算法调优上提升性能:用可靠的模型诊断工具对模型进行诊断,权重的初始化,用小的随机数初始化权重。对学习率进行调节,尝试选择合适的激活函数,调整网络的拓扑结构,调节batch和epoch的大小,添加正则化的方法,尝试使用其它的优化方法,使用early stopping。 ● 什么是seq2seq model 参考回答 Seq2seq属于encoder-decoder结构的一种,利用两个RNN,一个作为encoder一个作为decoder。Encoder负责将输入序列压缩成指定长度的向量,这个向量可以看作这段序列的语义,而decoder负责根据语义向量生成指定的序列。 ● 激活函数的作用 参考回答 激活函数是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题。 ● 为什么用relu就不用sigmoid了 参考回答 Sigmoid的导数只有在0的附近时有比较好的激活性,在正负饱和区域的梯度都接近0会导致梯度弥散。而relu函数在大于0的部分梯度为常数,不会产生梯度弥散现象。Relu函数在负半区导数为0,也就是说这个神经元不会经历训练,就是所谓稀疏性。而且relu函数的导数计算的更快。 ● 讲一下基于WFST的静态解码网络的语音识别流程 参考回答 从语音特征开始讲起我讲了MFCC和LPC的原理以及提取过程这一部分讲的很细然后讲了viterbi解码过程最后概述了一下HCLG.fst构建流程 ● 目标检测了解吗Faster RCNN跟RCNN有什么区别 参考回答 目标检测也叫目标提取是一种基于目标几何和统计特征的图像分割它将目标的分割和识别合二为一其准确性和实时性是整个系统的一项重要能力。尤其是在复杂场景中需要对多个目标进行实时处理时目标自动提取和识别就显得特别重要。 随着计算机技术的发展和计算机视觉原理的广泛应用利用计算机图像处理技术对目标进行实时跟踪研究越来越热门对目标进行动态实时跟踪定位在智能化交通系统、智能监控系统、军事目标检测及医学导航手术中手术器械定位等方面具有广泛的应用价值。 使用方法 缺点 改进 R-CNN 1、SS提取RP 2、CNN提取特征 3、SVM分类 4、BB盒回归。 1、 训练步骤繁琐微调网络训练SVM训练bbox 2、 训练、测试均速度慢 3、 训练占空间 1、 从DPM HSC的34.3%直接提升到了66%mAP 2、 引入RPCNN Faster R-CNN 1、RPN提取RP 2、CNN提取特征 3、softmax分类 4、多任务损失函数边框回归。 1、 还是无法达到实时检测目标 2、 获取region proposal再对每个proposal分类计算量还是比较大。 1、 提高了检测精度和速度 2、 真正实现端到端的目标检测框架 3、 生成建议框仅需约10ms。 ● SPPYOLO了解吗 参考回答 SPP-Net简介 SPP-Net主要改进有下面两个 1.共享卷积计算、2.空间金字塔池化 在SPP-Net中同样由这几个部分组成 ss算法、CNN网络、SVM分类器、bounding box ss算法的区域建议框同样在原图上生成但是却在Conv5上提取当然由于尺寸的变化在Conv5层上提取时要经过尺度变换这是它R-CNN最大的不同也是SPP-Net能够大幅缩短时长的原因。因为它充分利用了卷积计算也就是每张图片只卷积一次但是这种改进带来了一个新的问题由于ss算法生成的推荐框尺度是不一致的所以在cov5上提取到的特征尺度也是不一致的这样是没有办法做全尺寸卷积的Alexnet。 所以SPP-Net需要一种算法这种算法能够把不一致的输入产生统一的输出这就SPP即空间金字塔池化由它替换R-CNN中的pooling层除此之外它和R-CNN就一样了。 YOLO详解 YOLO的名字You only look once正是自身特点的高度概括。YOLO的核心思想在于将目标检测作为回归问题解决 YOLO首先将图片划分成SxS个区域注意这个区域的概念不同于上文提及将图片划分成N个区域扔进detector这里的区域不同。上文提及的区域是真的将图片进行剪裁或者说把图片的某个局部的像素扔进detector而这里的划分区域只的是逻辑上的划分。 ● 梯度消失梯度爆炸怎么解决 参考回答 1、使用 ReLU、LReLU、ELU、maxout 等激活函数 sigmoid函数的梯度随着x的增大或减小和消失而ReLU不会。 2、使用批规范化 通过规范化操作将输出信号x规范化到均值为0方差为1保证网络的稳定性。从上述分析分可以看到反向传播式子中有w的存在所以w的大小影响了梯度的消失和爆炸Batch Normalization 就是通过对每一层的输出规范为均值和方差一致的方法消除了w带来的放大缩小的影响进而解决梯度消失和爆炸的问题。 ● RNN容易梯度消失怎么解决 参考回答 1、梯度裁剪Clipping Gradient 既然在BP过程中会产生梯度消失就是偏导无限接近0导致长时记忆无法更新那么最简单粗暴的方法设定阈值当梯度小于阈值时更新的梯度为阈值。 优点简单粗暴 缺点很难找到满意的阈值 2、LSTMLong Short-Term Memory 一定程度上模仿了长时记忆相比于梯度裁剪最大的优点就是自动学习在什么时候可以将error反向传播自动控制哪些是需要作为记忆存储在LSTM cell中。一般长时记忆模型包括写入读取和忘记三个过程对应到LSTM中就变成了input_gate,output_gate, forget_gate,三个门范围在0到1之间相当于对输入输出进行加权的学习利用大量数据来自动学习加权的参数即学习了哪些错误可以用BP更新参数。具体的公式表达
优点模型自动学习更新参数 ● LSTM跟RNN有啥区别 参考回答 LSTM与RNN的比较 RNN在处理long term memory的时候存在缺陷因此LSTM应运而生。LSTM是一种变种的RNN它的精髓在于引入了细胞状态这样一个概念不同于RNN只考虑最近的状态LSTM的细胞状态会决定哪些状态应该被留下来哪些状态应该被遗忘。 下面来看一些RNN和LSTM内部结构的不同 RNN
LSTM
由上面两幅图可以观察到LSTM结构更为复杂在RNN中将过去的输出和当前的输入concatenate到一起通过tanh来控制两者的输出它只考虑最近时刻的状态。在RNN中有两个输入和一个输出。 而LSTM为了能记住长期的状态在RNN的基础上增加了一路输入和一路输出增加的这一路就是细胞状态也就是途中最上面的一条通路。事实上整个LSTM分成了三个部分 1哪些细胞状态应该被遗忘 2哪些新的状态应该被加入 3根据当前的状态和现在的输入输出应该是什么 下面来分别讨论 1哪些细胞状态应该被遗忘 这部分功能是通过sigmoid函数实现的也就是最左边的通路。根据输入和上一时刻的输出来决定当前细胞状态是否有需要被遗忘的内容。举个例子如果之前细胞状态中有主语而输入中又有了主语那么原来存在的主语就应该被遗忘。concatenate的输入和上一时刻的输出经过sigmoid函数后越接近于0被遗忘的越多越接近于1被遗忘的越少。 2哪些新的状态应该被加入 继续上面的例子新进来的主语自然就是应该被加入到细胞状态的内容同理也是靠sigmoid函数来决定应该记住哪些内容。但是值得一提的是需要被记住的内容并不是直接 concatenate的输入和上一时刻的输出还要经过tanh这点应该也是和RNN保持一致。并且需要注意此处的sigmoid和前一步的sigmoid层的w和b不同是分别训练的层。 细胞状态在忘记了该忘记的记住了该记住的之后就可以作为下一时刻的细胞状态输入了。 3根据当前的状态和现在的输入输出应该是什么 这是最右侧的通路也是通过sigmoid函数做门对第二步求得的状态做tanh后的结果过滤从而得到最终的预测结果。 事实上LSTM就是在RNN的基础上增加了对过去状态的过滤从而可以选择哪些状态对当前更有影响而不是简单的选择最近的状态。 在这之后研究人员们实现了各种LSTM的变种网络。不变的是通常都会用sigmoid函数做门筛选状态或者输入。并且输出都是要经过tanh函数。具体为什么要用这两个函数由于刚接触还不能给出一定的解释日后理解了再补充。 ● 卷积层和池化层有什么区别 参考回答 卷积层 池化层 功能 提取特征 压缩特征图提取主要特征 操作 可惜是二维的对于三维数据比如RGB图像3通道卷积核的深度必须同输入的通道数输出的通道数等于卷积核的个数。 卷积操作会改变输入特征图的通道数。 池化只是在二维数据上操作的因此不改变输入的通道数。对于多通道的输入这一点和卷积区别很大。 特性 权值共享减少了参数的数量并利用了图像目标的位置无关性。 稀疏连接输出的每个值只依赖于输入的部分值。 ● 防止过拟合有哪些方法 参考回答 1Dropout 2加L1/L2正则化3BatchNormalization 4网络bagging ● dropout咋回事讲讲 参考回答 Dropout的目标是在指数 级数量的神经网络上近似这个过程。Dropout训练与Bagging训练不太一样。在Bagging的情况下,所有模型是独立的。 在Dropout的情况下,模型是共享参数的,其中每个模型继承的父神经网络参 数的不同子集。参数共享使得在有限可用的内存下代表指数数量的模型变得可能。 在Bagging的情况下,每一个模型在其相应训练集上训练到收敛。 在Dropout的情况下,通常大部分模型都没有显式地被训练,通常该模型很大,以致到宇宙毁灭都不 能采样所有可能的子网络。取而代之的是,可能的子网络的一小部分训练单个步骤,参数共享导致剩余的子网络能有好的参数设定。 ● relu 参考回答 在深度神经网络中通常使用一种叫修正线性单元(Rectified linear unitReLU作为神经元的激活函数。ReLU起源于神经科学的研究2001年Dayan、Abott从生物学角度模拟出了脑神经元接受信号更精确的激活模型如下图
其中横轴是时间(ms)纵轴是神经元的放电速率(Firing Rate)。同年Attwell等神经科学家通过研究大脑的能量消耗过程推测神经元的工作方式具有稀疏性和分布性2003年Lennie等神经科学家估测大脑同时被激活的神经元只有1~4%这进一步表明了神经元的工作稀疏性。而对于ReLU函数而言类似表现是如何体现的其相比于其他线性函数(如purlin)和非线性函数(如sigmoid、双曲正切)又有何优势下面请各位看官容我慢慢道来。 首先我们来看一下ReLU激活函数的形式如下图
从上图不难看出ReLU函数其实是分段线性函数把所有的负值都变为0而正值不变这种操作被成为单侧抑制。可别小看这个简单的操作正因为有了这单侧抑制才使得神经网络中的神经元也具有了稀疏激活性。尤其体现在深度神经网络模型(如CNN)中当模型增加N层之后理论上ReLU神经元的激活率将降低2的N次方倍。这里或许有童鞋会问ReLU的函数图像为什么一定要长这样反过来或者朝下延伸行不行其实还不一定要长这样。只要能起到单侧抑制的作用无论是镜面翻转还是180度翻转最终神经元的输出也只是相当于加上了一个常数项系数并不影响模型的训练结果。之所以这样定或许是为了契合生物学角度便于我们理解吧。 那么问题来了这种稀疏性有何作用换句话说我们为什么需要让神经元稀疏不妨举栗子来说明。当看名侦探柯南的时候我们可以根据故事情节进行思考和推理这时用到的是我们的大脑左半球而当看蒙面唱将时我们可以跟着歌手一起哼唱这时用到的则是我们的右半球。左半球侧重理性思维而右半球侧重感性思维。也就是说当我们在进行运算或者欣赏时都会有一部分神经元处于激活或是抑制状态可以说是各司其职。再比如生病了去医院看病检查报告里面上百项指标但跟病情相关的通常只有那么几个。与之类似当训练一个深度分类模型的时候和目标相关的特征往往也就那么几个因此通过ReLU实现稀疏后的模型能够更好地挖掘相关特征拟合训练数据。 此外相比于其它激活函数来说ReLU有以下优势对于线性函数而言ReLU的表达能力更强尤其体现在深度网络中而对于非线性函数而言ReLU由于非负区间的梯度为常数因此不存在梯度消失问题(Vanishing Gradient Problem)使得模型的收敛速度维持在一个稳定状态。这里稍微描述一下什么是梯度消失问题当梯度小于1时预测值与真实值之间的误差每传播一层会衰减一次如果在深层模型中使用sigmoid作为激活函数这种现象尤为明显将导致模型收敛停滞不前 ● CNN为什么比DNN在图像识别上更好 参考回答 DNN的输入是向量形式并未考虑到平面的结构信息在图像和NLP领域这一结构信息尤为重要例如识别图像中的数字同一数字与所在位置无关换句话说任一位置的权重都应相同CNN的输入可以是tensor例如二维矩阵通过filter获得局部特征较好的保留了平面结构信息。 ● 使用的 CNN 模型权重之间有关联吗 参考回答 权重之间有关联。CNN是权重共享减少了参数的数量。 简单来说就是用一个卷积核来和一个图像来进行卷积记住是同一个卷积核不改变卷积核的值。这样可以减少权值参数。共享就是一个图片对卷积核是共同享有的。对于一个100100像素的图像如果我们用一个神经元来对图像进行操作这个神经元大小就是10010010000单如果我们使用1010的卷积核我们虽然需要计算多次但我们需要的参数只有1010100个加上一个偏向b一共只需要101个参数。我们取得图像大小还是100100。如果我们取得图像比较大它的参数将会更加多。我们通过1010的卷积核对图像进行特征提取这样我们就得到一个Feature Map。 一个卷积核只能提取一个特征所以我们需要多几个卷积核假设我们有6个卷积核我们就会得到6个Feature Map将这6个Feature Map组成一起就是一个神经元。这6个Feature Map我们需要101*6606个参数。这个值和10000比还是比较小的。如果像之前的神经网络, 两两相连, 需要 28x28 784 输入层, 加上第一个隐藏层30个神经元, 则需要784x30再加上30个b, 总共23,550个参数! 多了40倍的参数。 ● 神经网络为啥用交叉熵。 参考回答 通过神经网络解决多分类问题时最常用的一种方式就是在最后一层设置n个输出节点无论在浅层神经网络还是在CNN中都是如此比如在AlexNet中最后的输出层有1000个节点而即便是ResNet取消了全连接层也会在最后有一个1000个节点的输出层。 一般情况下最后一个输出层的节点个数与分类任务的目标数相等。假设最后的节点数为N那么对于每一个样例神经网络可以得到一个N维的数组作为输出结果数组中每一个维度会对应一个类别。在最理想的情况下如果一个样本属于k那么这个类别所对应的的输出节点的输出值应该为1而其他节点的输出都为0即[0,0,1,0,….0,0]这个数组也就是样本的Label是神经网络最期望的输出结果交叉熵就是用来判定实际的输出与期望的输出的接近程度。
LSTM和Naive RNN的区别 参考回答 RNN和LSTM内部结构的不同
RNN
LSTM 由上面两幅图可以观察到LSTM结构更为复杂在RNN中将过去的输出和当前的输入concatenate到一起通过tanh来控制两者的输出它只考虑最近时刻的状态。在RNN中有两个输入和一个输出。 而LSTM为了能记住长期的状态在RNN的基础上增加了一路输入和一路输出增加的这一路就是细胞状态也就是途中最上面的一条通路。事实上整个LSTM分成了三个部分 1哪些细胞状态应该被遗忘 2哪些新的状态应该被加入 3根据当前的状态和现在的输入输出应该是什么 下面来分别讨论 1哪些细胞状态应该被遗忘 这部分功能是通过sigmoid函数实现的也就是最左边的通路。根据输入和上一时刻的输出来决定当前细胞状态是否有需要被遗忘的内容。举个例子如果之前细胞状态中有主语而输入中又有了主语那么原来存在的主语就应该被遗忘。concatenate的输入和上一时刻的输出经过sigmoid函数后越接近于0被遗忘的越多越接近于1被遗忘的越少。 2哪些新的状态应该被加入 继续上面的例子新进来的主语自然就是应该被加入到细胞状态的内容同理也是靠sigmoid函数来决定应该记住哪些内容。但是值得一提的是需要被记住的内容并不是直接concatenate的输入和上一时刻的输出还要经过tanh这点应该也是和RNN保持一致。并且需要注意此处的sigmoid和前一步的sigmoid层的w和b不同是分别训练的层。细胞状态在忘记了该忘记的记住了该记住的之后就可以作为下一时刻的细胞状态输入了。 3根据当前的状态和现在的输入输出应该是什么 这是最右侧的通路也是通过sigmoid函数做门对第二步求得的状态做tanh后的结果过滤从而得到最终的预测结果。事实上LSTM就是在RNN的基础上增加了对过去状态的过滤从而可以选择哪些状态对当前更有影响而不是简单的选择最近的状态。 12.梯度更新方式 参考回答 1批量梯度下降法BGD 批量梯度下降法Batch Gradient Descent简称BGD是梯度下降法最原始的形式梯度下降法里的损失函数是在整个数据集上进行计算得到的均值所以每更新一次模型参数就要对整个数据集进行一个计算其数学形式如下
(1) 对上述的能量函数求偏导
优点全局最优解易于并行实现
缺点当样本数目很多时训练过程会很慢。
2随机梯度下降法SGD
由于批量梯度下降法在更新每一个参数时都需要所有的训练样本所以训练过程会随着样本数量的加大而变得异常的缓慢。随机梯度下降法Stochastic Gradient Descent简称SGD正是为了解决批量梯度下降法这一弊端而提出的。
将上面的能量函数写为如下形式
优点训练速度快可以从局部最小值中跳出来
缺点准确度下降并不是全局最优不易于并行实现。
3小批量梯度下降法MBGD
有上述的两种梯度下降法可以看出其各自均有优缺点那么能不能在两种方法的性能之间取得一个折衷呢即算法的训练过程比较快而且也要保证最终参数训练的准确率而这正是小批量梯度下降法Mini-batch Gradient Descent简称MBGD的初衷。
一次采样一个小批量的样本然后利用该小批量来计算梯度。这样做比每次仅采样一个样本能够使得计算的梯度值更加符合期望的梯度值排除减少异常样本的干扰
4AdaGrad 该算法的思想是独立地适应模型的每个参数具有较大偏导的参数相应有一个较大的学习率而具有小偏导的参数则对应一个较小的学习率每个参数的学习率会缩放各参数反比于其历史梯度平方值总和的平方根 学习率是单调递减的训练后期学习率过小会导致训练困难甚至提前结束 需要设置一个全局的初始学习率
4RMSProp RMSProp 主要是为了解决 AdaGrad 方法中学习率过度衰减的问题—— AdaGrad 根据平方梯度的整个历史来收缩学习率可能使得学习率在达到局部最小值之前就变得太小而难以继续训练 RMSProp 使用指数衰减平均递归定义以丢弃遥远的历史使其能够在找到某个“凸”结构后快速收敛此外RMSProp 还加入了一个超参数 ρ 用于控制衰减速率。
5Adam Adam 在 RMSProp 方法的基础上更进一步 除了加入历史梯度平方的指数衰减平均r外 还保留了历史梯度的指数衰减平均s相当于动量。 Adam 行为就像一个带有摩擦力的小球在误差面上倾向于平坦的极小值。