给定卷积神经网络输入,卷积核大小,padding,步长,求输出的shape?各个激活函数的优缺点Sigmod优点输出值0-1(很重大的优点)其余的和其他众多激活函数比起来,感觉没有什么优点,方便入门理解缺点容易梯度消失x的可变值区域太小,极其容易陷入级值的状况(-0.9~0.9)指数exp计算复杂Tanh优点和sigmod比起来,是零均值化处理。(零均值化可以加快模型的收敛)缺点和sigmod一样的缺点Relu优点计算复杂度低(只有一个if>0判断,大于0则激活值为1),部分区域线性递增,没有幂运算与指数运算缺点x小于0时无法产生激活值训练到后期可能权重参数更新太大Leakly ReLu优点相对于relu来说,激活值必然可以产生缺点Relu的其他缺点一概继承下来了ELU优点相对于Leaky relu来说,激活值更平滑缺点其他的Leaky relu的缺点一并继承下来了。如何选择激活函数?Relu-小心设置learningrate(因为x>0的情况下,导数均为1),最好是设置一个比较小的值。不要使用sigmod(缺点太多,计算复杂)如何初始化CNN?(理论)不要全部把超参数设置为0(单层网络可以)容易梯度消失如何初始化CNN?(实践)Xavier-tanh(不太适合relu)fan_in输出通道数Fan_out输出通道数代码Np.randon.rand(fan_in,fan_out)/np.sqrt(fan_in/2)如何分析初始化参数结果好坏?查看初始化后各层的激活值分布是否在固定的,稳定的,同一个区间的均匀分布比较好的初始化结果均值为0,方差为0.02如tanh,relu函数什么叫梯度消失,梯度爆炸当网络层数过多时,前面层由于求导过程乘积运算,出现weight与bias变得异常大与异常小的情况左下角的内容清楚的说明了梯度爆炸和梯度消失的场景BN是什么,为什么能提高收敛速度批归一化是什么?标准化处理,特征缩放的一个方式,将数据规整到一定范围内。如上图所示,BN步骤主要分为4步:求每一个训练批次数据的均值求每一个训练批次数据的方差使用求得的均值和方差对该批次的训练数据做归一化,获得0-1分布。其中是为了避免除数为0时所使用的微小正数。尺度变换和偏移:将xixi乘以调整数值大小,再加上增加偏移后得到yiyi,这里的是尺度因子,是平移因子。这一步是BN的精髓,由于归一化后的xixi基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,我们引入两个新的参数:,。 和是在训练时网络自己学习得到的。为什么能提高收敛速度?解决internal covariate shift问题。特征没有消失,而是归一到一定范围内,加快学习速度因为最终都是映射到归一化范围内,所以前一层的权重调整对后一层的影响程度都会降低,不用重新适应新的分布,从而让模型学的更快,避免完全从头学习TipsBN不用于输入层和输出层(经验论)BN(实践)每次batch传入时都做BN各个优化器的优缺点优化器分两种固定学习率的优化算法SGD随机梯度下降优点只随机采样一个样本来计算梯度,加快学习效率,并且避免了普通GD一次性参数更新的坏处(导致模型无法收敛)缺点选择合适的学习率较为困难Momentum动量优点动量梯度下降,动力火车,惯性火车,这一次梯度下降的值,会影响下一次梯度下降的值,相对于简单的梯度下降来说,Momentum动量带有延续性相对于简单的梯度下降来说,减少梯度震荡缺点和SGD一样,选择合适的学习率较为困难自适应学习率的优化算法Adagrad优点更新参数时,会针对原梯度值乘上一个变量,即其所有梯度历史平均值总和的平方根(如上图)这样在训练初期,分母较小,学习率较大,学习比较快,后期时,学习会逐渐减慢缺点从训练开始就积累梯度方差会导致有效学习率过早和过量的减小只能解决凸问题,当应用于非凸函数训练神经网络时,学习可能会到达一个局部是凸碗的区域RMSProp优点能够解决凸问题由累计平方梯度变成和平均梯度缺点缺少Momentum动量元素Adam(结合了动量和RMSProp,通用方案)结合了Momentum和RMSProp的优点手画一下LSTM梯度裁剪介绍一下残差网络ResNet 基于VGG没解决深层网络下出现性能[梯度消失,导致学不到东西]与效率下降[反向传播运算成本大]的问题,优化出来的一个新的神经网络结构,如图所示,两条路一起走,最终线性激活输入值f(x)+x,然后将f(x)+x传递给激活函数[假设为relu]。那么在反向传播的时候,后面层的梯度更加“无损”的直接传递到前面层,前面层的参数因此也能继续更新。为什么残差网络会有效果?□ 先验证明《深层网络效果会比浅层网络好》只要有理想的训练方式,更深的网络肯定会比较浅的网络效果要好。证明过程也很简单:假设在一种网络A的后面添加几层形成新的网络B,如果增加的层级只是对A的输出做了个恒等映射(identity mapping),即A的输出经过新增的层级变成B的输出后没有发生变化,这样网络A和网络B的错误率就是相等的,也就证明了加深后的网络不会比加深前的网络效果差。当层数比较多时,容易导致模型学不到东西,甚至出现反效果,然而deep layers又确实是能使模型效果变好的,所以出现残差网络。效率不影响,层数增加,可以低成本高效率的学到更多非线性的特征。解决梯度弥漫问题如上所说,关键点在于反向传播的时候,梯度可以沿着shortcut无损进行回传,避免梯度弥漫问题。解决模型退化问题避免了过渡训练后,导致模型准确率反而降低的情况。paper中称为degration。经过实验后发现确实能解决这个问题。本人对于这个问题的确切原因并不清楚,但是猜测这个原因很可能是由于梯度消失以及众多其他原因所造成的。Q:既然说中间层是不必要的,那么为什么不直接把这些层去掉呢?可事实上,ResNet的结果比浅层网络的结果好的多,这应该怎么解释呢?加入中间层主要是为了说明会产生退化的效果。 ResNet效果好是因为解决了退化问题,,梯度爆炸/梯度弥散,调节了网络结构,简化了反向传播求导运算的流程。这和砍掉深一点的层是不一样的思想风格转换的原理图像风格转换由风格特征与内容特征共同计算得出风格特征风格的抽象度(越往后层,加入了越多内容的元素,更加具像)内容特征内容的相似度(越往后层,加入了越多风格的元素,和原图越不像)## 怎么解决过拟合简化模型正则化(包含dropout)数据增强集成学习早停减少特征数或使用较少的特征组合## 怎么解决欠拟合增加特征数或者使用较多的特征组合减小正则权重增加模型复杂度使用boosting集成学习如何提高学习算法性能的指导方针->低可拟合偏差更大的模型,更深的层更好的优化器方案探索更合适的超参数->低方差找寻更多的数据正则化,dropout对抗神经网络探索更合适的超参数->清晰的正交化方案……思路逻辑清晰的调试数据预处理一般步骤有哪些?指定原始数据的文件列表 -> 创建文件列表队列 ->从文件中读取数据 -> 数据预处理 -> 整理成batch作为神经网络输入如何用指标和方案去评判一个优秀的模型?train/Validation/Test 准确率/召回率方差偏差CNN模型加速与压缩汇总1. 合理设计模型2. 权值剪枝(编程稀疏矩阵)3. 权值量化(聚类)4. 二值化(BWN,XNorNet)5. 霍夫曼编码6. 奇异值分解(projection层)7. 1x1卷积的恰当使用减少通道量8. 卷积分解为deepwise Conv和pointwiseConv可大幅度减小计算量和参数量1/(Dk^2)9. Group Conv(可节省1/g计算量)10. Channel Shuffle11. 蒸馏法12. 低秩分解13. 模型裁剪# 怎么选择超参数神经网路中的超参数主要包括1. 学习率 ,2. 正则化参数 ,3. 神经网络的层数 L4. 每一个隐层中神经元的个数 j5. 学习的回合数Epoch6. 小批量数据 minibatch 的大小由神经网络的机理进行选择7. 输出神经元的编码方式8. 代价函数的选择9. 权重初始化的方法10. 神经元激活函数的种类11 . 宽泛策略的核心在于简化和监控12. 参加训练模型数据的规模如文章你已看懂,点个「喜欢」即可。如若错误以及不清晰的地方,随时提出。欢迎扫一扫上面二维码加入我的个人微信号进行技术交流。