• 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。

  • 逻辑回归和线性回归

逻辑回归的原型:对数几率回归:逻辑回归和对数几率回归是一样的,通过变形就可以得到,另外逻辑回归使用极大似然概率进行估计。简单总结:

  • 线性回归和逻辑回归都是广义线性回归模型的特例

  • 线性回归只能用于回归问题,逻辑回归用于分类问题(可由二分类推广至多分类)

  • 线性回归无联系函数或不起作用,逻辑回归的联系函数是对数几率函数,属于Sigmoid函数

  • 线性回归使用最小二乘法作为参数估计方法,逻辑回归使用极大似然法作为参数估计方法

  • 两者都可以使用梯度下降法

注意:

  • 线性回归的梯度下降法其实和我们训练神经网络一直,首先需要对参数进行初始化,然后使用随机梯度下降的方式对参数进行更新:https://zhuanlan.zhihu.com/p/33992985

  • 线性回归与最小二乘法:https://zhuanlan.zhihu.com/p/36910496

  • 最大似然 https://zhuanlan.zhihu.com/p/33349381

来源文章:

  • https://segmentfault.com/a/1190000014807779

  • https://zhuanlan.zhihu.com/p/39363869

  • https://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

  • 深度学习的线性和非线性

卷积是线性的;激活函数是非线性的

  • 梯度消失和梯度爆炸的问题

  • Batch-norm

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 Normalization

BN跨卡训练怎么保证相同的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/42706477

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

Resnet的缺点:resnet其实无法真正的实现梯度消失,这里面有很强的先验假设,并且resnet真正起作用的层只在中间,深层作用比较小(到了深层就是恒等映射了),feature存在利用不足的现象,add的方式阻碍了梯度和信息的流通。

  • L1范数和L2范数 应用场景

L1正则可以使少数权值较大,多数权值为0,得到稀疏的权值;L2正则会使权值都趋近于0但非零,得到平滑的权值;

  • 网络初始化有哪些方式?

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

  • 全置为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/86649832

  • https://zhuanlan.zhihu.com/p/57454669

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

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.02677
if 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 modeln_p = sum(x.numel() for x in model.parameters())  # number parametersn_g = sum(x.numel() for x in model.parameters() if x.requires_grad)  # number gradientsprint('\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_p*4/1e6, n_g*4/1e6))
  • 多标签和多分类

那么,如何用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都符合。

机器学习、深度学习知识点总结相关推荐

  1. 机器学习深度学习知识点总结

    1.Overfitting是什么?怎么解决? overfitting就是过拟合, 其直观的表现如下图所示,随着训练过程的进行,模型复杂度增加,在training data上的error渐渐减小,但是在 ...

  2. 史上最全的机器学习深度学习面经总结

    史上最全的机器学习深度学习面经总结 提示:19年之后的面经,扩大了范围包括了cv,推荐,语音等面经中的知识点, 同时增加了那三本面经书的内容一些github上一些比较火的项目,大部分问题是重复的,去重 ...

  3. 2018年机器学习深度学习资料 全新汇总(不断更新),希望看到文章的朋友能够学到更多

    向AI转型的程序员都关注了这个号??? 大数据挖掘DT数据分析  公众号: datadw 注:机器学习资料篇目一共500条,篇目二开始更新 本文提到链接 请查看原文  https://github.c ...

  4. 【深度学习知识点扫盲】病态、病态条件

    [深度学习知识点扫盲]病态.病态条件 文章目录 [深度学习知识点扫盲]病态.病态条件 花书内容 1. 概念定义 1.1 病态/ 良态问题 1.2 适定/ 非适定问题 2.数学解释 2.1 良态/病态矩 ...

  5. 图解人工智能机器学习深度学习的关系和区别

    图解人工智能机器学习深度学习的关系和区别,先直观看下图的关系: AI(Artificial Intelligence.人工智能).机器学习(machine learning).深度学习(Deep le ...

  6. DL之AF:机器学习/深度学习中常用的激活函数(sigmoid、softmax等)简介、应用、计算图实现、代码实现详细攻略

    DL之AF:机器学习/深度学习中常用的激活函数(sigmoid.softmax等)简介.应用.计算图实现.代码实现详细攻略 目录 激活函数(Activation functions)相关配图 各个激活 ...

  7. AI:一个20年程序猿的学习资料大全—人工智能之AI/机器学习/深度学习/计算机视觉/Matlab大赛——只有你不想要的,没有你找不到的

    AI:一个20年程序猿的学习资料大全-人工智能之AI/机器学习/深度学习/计算机视觉/Matlab大赛--只有你不想要的,没有你找不到的 目录 (有偿提供,替朋友转载,扫描下方二维码提问,或者向博主扫 ...

  8. 【资源放送】机器学习/深度学习最全公开视频大放送!

    文章首发于微信公众号<有三AI> [资源放送]机器学习/深度学习最全公开视频大放送! 该篇小记一下机器学习与深度学习的一些好的基础视频资源. 如果你是刚入门的小白,建议细细阅读一下下面将要 ...

  9. 深圳内推 | 华为诺亚方舟实验室招聘机器学习/深度学习算法实习生

    合适的工作难找?最新的招聘信息也不知道? AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职! 华为 华为诺亚方舟实验室是世界领先的工业实验室,在深圳.香港.北京.上海. ...

  10. 方法 | 机器学习(深度学习)通用工作流程

    机器学习(深度学习)通用工作流程 Deep Learning with Python 4.5节 1. 定义问题并装载数据集(Defining the problem and assembling a ...

最新文章

  1. @所有技术社区,年度”社区之星“开选,快来盘点各家技术大佬
  2. 重写系统中的UINavigationController返回按钮的事件
  3. Python编程语言简介
  4. 使用说明 思迅收银系统_便利店收银使用的收银系统应该取决于什么?
  5. java文件解压文件_java 文件解压缩
  6. 一个分布式服务器集群架构方案
  7. python 图形_Python图形数据
  8. 不懂 ZooKeeper?没关系,这一篇给你讲的明明白白
  9. 【备忘】conda环境常用配置命令
  10. (第九章)多表查询之all,any
  11. java处理表单变量_jsp处理表单及JS和JAVA变量互传
  12. Java中String、StringBuffer、StringBuilder的区别详解
  13. 谷歌卫星地图下载助手
  14. eclipse运行jsp文件时出现乱码解决方法
  15. 详细安装 kali 教程 和 基本命令使用
  16. zblog怎么定位html代码,zblog模板修改常用调用标签代码
  17. luogu P1195 口袋的天空
  18. windows功能_【各种功能升级】微信windows版v2.9新体验
  19. 制作一个私有的docker habor仓库
  20. Kafka创建topic

热门文章

  1. FPGA NCOip核的使用及仿真(quartusii 13.1+modelsimse 10.5)
  2. 【读书笔记】 《流畅的python》2.7-2.8 读书笔记
  3. Serverless概念
  4. 嵌入式C语言之---模块化编程
  5. 我能上网,但是右下角wif图标没了,点开显示无法连接internet解决办法
  6. 常见网页错误代码汇总
  7. Html5 Canvas绘图实例
  8. Java基于Snmp4j库实现SNMP协议的调用
  9. 3.4ghz属于计算机cpu吗,四核Xeon处理器频率已经超过3.4GHz
  10. Android app打开系统界面设置悬浮窗权限