机器学习与深度学习基础学习笔记

深度学习

在开始之前我想说一句很重要的话:“知识的无限性和生命的有限性是一对无法调和的矛盾”。这篇博客记录了DL中很多有趣的点子,但记住挑你喜欢的阅读,不要陷入知识的“深渊”中。有时候“好学”也是一种鸦片。

 

.siamese network(暹罗网络又称孪生网络)

# 孪生神经网络的用途是什么?

简单来说,衡量两个输入的相似程度。孪生神经网络有两个输入(Input1 and Input2),将两个输入feed进入两个神经网络(Network1 and Network2),这两个神经网络分别将输入映射到新的空间形成输入在新的空间中的表示。通过Loss的计算,评价两个输入的相似度。 

# 孪生神经网络和伪孪生神经网络分别适用于什么场景呢?

先上结论:孪生神经网络用于处理两个输入"比较类似"的情况。伪孪生神经网络适用于处理两个输入"有一定差别"的情况.

# Siamese network loss function一般用哪一种呢?

Softmax当然是一种好的选择,但不一定是最优选择,即使是在分类问题中。传统的siamese network使用Contrastive Loss。损失函数还有更多的选择,siamese network的初衷是计算两个输入的相似度,。左右两个神经网络分别将输入转换成一个"向量",在新的空间中,通过判断cosine距离就能得到相似度了。Cosine是一个选择,exp function也是一种选择,欧氏距离似乎也可以。

参考资料:https://zhuanlan.zhihu.com/p/35040994

. 为什么我要执着于Loss

“相信这个系列会成为工程派非常感兴趣的一个专题,毕竟这可能是工程量最小同时可能会在某个任务上取得较大提升的最简单有效的方法了。” 

在利用卷积神经网络(CNN)进行特征提取然后做分类任务的时候,最常用的就是Softmax Loss了。而Softmax Loss对CNN的分类特征没有什么强约束,只要最后可以把样本分开就可以了,没有明确的定义某个分类特征x和它的类别y需要有什么关系,也即是对x的约束并不强。当给CNN传入一些对抗样本的时候,CNN会表现出分类困难。原因就是CNN对对抗样本提取的特征基本处于最后一层分类特征的边界上,使得类别的区分度低。

参考资料:https://mp.weixin.qq.com/s/aYrpdwd4J501hKyHozJZBw

余弦距离

定义:通过计算两个向量的夹角的余弦值来评估他们的相似度。

Contrastive Loss 和 Triplet Loss

Triplet-Loss是Contrastive-Loss的改进版本。相似两类区分使用前者,三类及以上使用后者。和ReLU激活函数一样是个分段函数,其实我一直在思考这种分段函数为什么是连续可导的。

参考资料:https://zhuanlan.zhihu.com/p/103278453

Center Loss

简单来说,Contrastive Loss的思想是最小化一对同类样本特征之间的距离,最大化一对不同样本特征之间的距离。而Triplets loss则把一对变成3个。这两个Loss均要把样本进行组合来进行优化,导致样本的数量急剧增加(O(n^2),O(n^3)),因此加长了训练时间并且训练难度也大大增加,为了改善这一缺点Center Loss被提出。Center Loss可以直接对样本特征之间的距离进行约束。Center Loss添加的约束是,特征与相同类别的平均特征(有"Center"的味道了)的距离要足够小,即要求同类特征要更加接近它们的中心点。  另外Center Loss一定是要与Softmax Loss一起使用的。至于提到的“深度特征&样本特征”指的就是wx+b中的x,而且应该是最后一层的x。或许直接使用输入图像作为x,好像也说得通,可能等价。

更加值得注意的是

文章中提出了Center Loss与Softmax Loss一起使用,这与我的本科论文又是一种不谋而合即“另外一种损失函数与Softmax Loss联合优化”。就是我论文中提到的联合损失函数。

参考资料:https://mp.weixin.qq.com/s/aYrpdwd4J501hKyHozJZBw

Focal Loss

解决的问题有两个:正负样本不均衡以及简单难分类别不均衡。这就导致了:

(1)针对所有的negtive example,数量过多造成它的loss太大,以至于主导了损失函数,不利于收敛。

(2)针对单个negtive example来说,大多数的negative example不在前景和背景的过渡区域上,分类很明确(这种易分类的negative称为easy negative)。即使单个example的loss很小但由于数量极大,在训练时对应的背景类score还是会很大。同时梯度小造成easy negative example对参数的收敛作用很有限,我们更需要loss大的对参数收敛影响也更大的example,即hard positive/negative example。

(3)阿尔法是一个简单的调节因子,可以调整正负样本的比例,一定程度上缓解样本不均衡问题。(1-y)中的y(有时也写作p)就是置信度,通过gamma因子调节(1-y)即可调整对难易分类两种两本的均衡,简单说就是将高置信度(1-y)或者p样本的损失降低。

参考资料:https://mp.weixin.qq.com/s/2VZ_RC0iDvL-UcToEi93og

. teacher net或者说数值蒸馏相关,其中也涉及到了Loss

Hinton的原始论文

Hinton的文章"Distilling the Knowledge in a Neural Network"首次提出了知识蒸馏(暗知识提取)的概念,通过引入与教师网络(teacher network:复杂、但推理性能优越)相关的软目标(soft-target)作为total loss的一部分,以诱导学生网络(student network:精简、低复杂度)的训练,实现知识迁移(knowledge transfer)。

                          

如上图所示,教师网络(左侧)的预测输出除以温度参数(Temperature)之后、再做softmax变换,可以获得软化的概率分布(软目标),数值介于0~1之间,取值分布较为缓和。Temperature数值越大,分布越缓和;而Temperature数值减小,容易放大错误分类的概率,引入不必要的噪声。针对较困难的分类或检测任务,Temperature通常取1,确保教师网络中正确预测的贡献。硬目标则是样本的真实标注,可以用one-hot矢量表示。total loss设计为软目标与硬目标所对应的交叉熵的加权平均(表示为KD loss与CE loss),其中软目标交叉熵的加权系数越大,表明迁移诱导越依赖教师网络的贡献,这对训练初期阶段是很有必要的,有助于让学生网络更轻松的鉴别简单样本,但训练后期需要适当减小软目标的比重,让真实标注帮助鉴别困难样本。另外,教师网络的推理性能通常要优于学生网络,而模型容量则无具体限制,且教师网络推理精度越高,越有利于学生网络的学习。

更需注意

文章中对CE-Loss以及KD-Loss进行了结合,没错就是直接加权求和,这给我最大启示是CE-Loss可以以各种形式向更加soft的方向修改,这样我大概为我本科论文找到了一个理论依据。

参考资料:https://zhuanlan.zhihu.com/p/37037460

参考资料:https://blog.csdn.net/dwyane12138/article/details/78703823

. 空洞卷积

带洞卷积实际上就是普通的卷积核中间插入了几个洞,它的运算量跟普通卷积保持一样,好处是它的“视野更大了”,比如普通3x3卷积的结果的视野是3x3,插入一个洞之后的视野是5x5。视野变大的作用是,在特征图缩小到同样倍数的情况下可以掌握更多图像的全局信息,这在语义分割中很重要。

参考资料:https://www.jianshu.com/p/f743bd9041b3

增大感受野的好处:一是原文中提到的分割更为精确,二是也许在细粒度问题中也可以被应用。

. 反卷积

通常都是在图像分割的领域中使用。仔细回忆一下图像分割任务,输入一张图片,生成覆盖在图像上的掩膜,以前都是输入图像输出一个标签,掩膜操作必然需要包含一个信息解码的过程,也就是卷积的反过程,故称为反卷积。

说是反卷积,但本质上是转置卷积。

但是,如果你代入数字计算会发现,反卷积的操作只是恢复了矩阵的尺寸大小,并不能恢复每个元素值,效果肯定是差一点,但根据标签与损失函数的逼近我们可以做到拟合一种恢复机制恢复原信息。

参考资料:https://www.zhihu.com/question/48279880

. 图像分割领域介绍

先要明确这里面有三方面工作,按分割目的划分

普通分割

将不同分属不同物体的像素区域分开。 
如前景与后景分割开,狗的区域与猫的区域与背景分割开。

语义分割

在普通分割的基础上,分类出每一块区域的语义(即这块区域是什么物体)。 
如把画面中的所有物体都指出它们各自的类别。

实例分割

在语义分割的基础上,给每个物体编号。 
如这个是该画面中的狗1,那个是画面中的狗2

工作论文

1.FCN:开山之作,使用反卷积(转置卷积)


FCN对图像进行像素级的分类,从而解决了语义级别的图像分割(semantic segmentation)问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。简单的来说,FCN与CNN的区域在把于CNN最后的全连接层换成卷积层,输出的是一张已经Label好的图片。

2.DeepLab系列:使用空洞卷积和ASPP(空洞空间卷积池化金字塔):带洞卷积,英文名叫做Dilated Convolution,或者Atrous Convolution。带洞卷积实际上就是普通的卷积核中间插入了几个洞,如下图。

它的运算量跟普通卷积保持一样,好处是它的“视野更大了”,比如普通3x3卷积的结果的视野是3x3,插入一个洞之后的视野是5x5。视野变大的作用是,在特征图缩小到同样倍数的情况下可以掌握更多图像的全局信息,这在语义分割中很重要。同时FCN的padding引入噪声,减少池化层又会不可进行fine-tune,空但洞卷积可以。
使用多尺度进行空洞卷积,在经过1*1的卷积之后连接起来。多尺度特征提取,得到全局和局部特征:
 

简单说:DeepLab相比于FCN的改进是(1)将最后几层替换为感受野更大的空洞卷积(2)使用了ASPP

3.PSPNet(Pyramid Scene Parsing Network)系列:核心贡献是Global Pyramid Pooling,翻译成中文叫做全局金字塔池化。它将特征图缩放到几个不同的尺寸,使得特征具有更好地全局和多尺度信息,这一点在准确率提升上上非常有用。其实不光是语义分割,金字塔多尺度特征对于各类视觉问题都是挺有用的。(注意全局金字塔池化和ASPP还是不一样的,ASPP只在最后几个全连接层中有所优化,全局金字塔是在特征图上实现多尺度)

4.MaskRCNN系列:Mask R-CNN是在Faster R-CNN的基础上添加了一个预测分割mask的分支,如上图所示。其中黑色部分为原来的Faster-RCNN,红色部分为在Faster-RCNN网络上的修改。将RoI Pooling层替换成了RoI Align层;添加了并列的FCN层(mask层)。

既然写到这了,简单说一说RCNN网络中的经典结构:
4.1 RPN(RegionProposal Network):RPN是一种优于窗口滑动与随机生成的一种区域生成(区域提议)方法,Faster R-CNN的出现才使得CNN目标检测的任务趋于完整,一种说法是Faster R-CNN=Fast R-CNN+RPN,可见RPN的重要性。
 

上图左下方即是RPN的具体结构。可以看到3×3 conv + relu后有两个分支1×1 conv,一个通过softmax分类是物体positive还是背景negative,得到最可能含有目标的anchor;另一个计算针对原图坐标的偏移量,以获得精确的proposals。最后综合positive anchors和对应bounding box regression偏移量获取object proposals
4.2 NMS(Non-Maximum Suppression):https://www.cnblogs.com/makefile/p/nms.htmlhttps://zhuanlan.zhihu.com/p/273485367,是用来筛选RPN生成的区域,具体实现细节见链接
4.3 ROI(regions of interest):是目标检测中使用的筛选RPN生成的提议区域的方法,完成名称应为ROI Pooling,实现细节:https://blog.csdn.net/u011436429/article/details/80279536
4.4 MaskRCNN将ROI Pooling改为了RoI Align层:这两个都是用在rpn之后的。具体来说,从feature map上经过RPN得到一系列的proposals,大概2k个,这些bbox大小不等,如何将这些bbox的特征进行统一表示就变成了一个问题。即需要找一个办法从大小不等的框中提取特征使输出结果是等长的。最开始目标检测模型Faster RCNN中用了一个简单粗暴的办法,叫ROI Pooling。该方式在语义分割这种精细程度高的任务中,不够精准,由此发展来了ROI Align。两者的区分在于pooling的操作于取整的区别上,后者使用了插值:https://zhuanlan.zhihu.com/p/73138740

5.U-Net与FCN相近,都没有使用空洞卷积也没有连接CRF,结构简单。与FCN逐点相加不同,U-Net采用将特征在channel维度拼接在一起,形成更“厚”的特征。
 

这个链接后面还有些常识需要补充
参考资料:https://blog.csdn.net/qq_36492210/article/details/89875708

. 目标检测网络演变

在深度学习时代,目标检测可以分为两类:“ two-stage detection ” 和 “ one-stage detection ”,前者将检测框定为一个 “ 从粗到细 ” 的过程,而后者将其定义为 “ 一步完成 ”。参考:https://zhuanlan.zhihu.com/p/112942266

CNN based Two-stage Detectors

(1)RCNN

RCNN背后的想法很简单:它首先通过选择性搜索提取一组对象建议(对象候选框)。然后,每个提案都被重新调整成一个固定大小的图像,并输入到一个在ImageNet上训练得到的CNN模型(例如,AlexNet) 来提取特征。最后,利用线性SVM分类器对每个区域内的目标进行预测,识别目标类别。RCNN在VOC07上产生了显著的性能提升,平均精度(mean Average Precision,mAP)从33.7%(DPM-v5) 大幅提高到58.5%。

虽然RCNN已经取得了很大的进步,但它的缺点是显而易见的:在大量重叠的提案上进行冗余的特征计算 ( 一张图片超过2000个框 ),导致检测速度极慢(GPU下每张图片14秒)。同年晚些时候,SPPNet被提出并克服了这个问题。

(2)SPPNet

2014年,K. He等人提出了空间金字塔池化网络( Spatial Pyramid Pooling Networks,SPPNet)。以前的CNN模型需要固定大小的输入,例如,AlexNet需要224x224图像。SPPNet的主要贡献是引入了空间金字塔池化(SPP)层,它使CNN能够生成固定长度的表示,而不需要重新缩放图像/感兴趣区域的大小。利用SPPNet进行目标检测时,只对整个图像进行一次特征映射计算,然后生成任意区域的定长表示,训练检测器,避免了卷积特征的重复计算。SPPNet的速度是R-CNN的20多倍,并且没有牺牲任何检测精度(VOC07 mAP=59.2%)。

SPPNet虽然有效地提高了检测速度,但仍然存在一些不足:第一,训练仍然是多阶段的,第二,SPPNet只对其全连接层进行微调,而忽略了之前的所有层。次年晚些时候,Fast RCNN被提出并解决了这些问题。

(3)Fast RCNN

2015年,R. Girshick提出了Fast RCNN检测器,这是对R-CNN和SPPNet的进一步改进。Fast RCNN使能够在相同的网络配置下同时训练检测器和边界框回归器。在VOC07数据集上,Fast RCNN将mAP从58.5%( RCNN)提高到70.0%,检测速度是R-CNN的200多倍。

虽然Fast-RCNN成功地融合了R-CNN和SPPNet的优点,但其检测速度仍然受到提案/建议检测的限制。然后,一个问题自然而然地出现了:“ 能用CNN模型生成对象建议吗? ” 稍后,Faster R-CNN解决了这个问题。

(4)Faster RCNN

2015年,S. Ren等人提出了Faster RCNN检测器,在Fast RCNN之后不久。Faster RCNN 是第一个端到端的,也是第一个接近实时的深度学习检测器(COCO mAP@.5=42.7%,COCO mAP@[.5,.95]=21.9%, VOC07 mAP=73.2%,VOC12 mAP=70.4%,17fps with ZFNet)。Faster RCNN的主要贡献是引入了区域建议网络 (RPN),使几乎cost-free的区域建议成为可能。从RCNN到Faster RCNN,一个目标检测系统中的大部分独立块,如提案检测、特征提取、边界框回归等,都已经逐渐集成到一个统一的端到端学习框架中。

虽然Faster RCNN突破了Fast RCNN的速度瓶颈,但是在后续的检测阶段仍然存在计算冗余。后来提出了多种改进方案,包括RFCN和 Light head RCNN。

(5)Feature Pyramid Networks(FPN)

2017年,T.-Y.Lin等人基于Faster RCNN提出了特征金字塔网络(FPN)。在FPN之前,大多数基于深度学习的检测器只在网络的顶层进行检测。虽然CNN较深层的特征有利于分类识别,但不利于对象的定位。为此,开发了具有横向连接的自顶向下体系结构,用于在所有级别构建高级语义。由于CNN通过它的正向传播,自然形成了一个特征金字塔,FPN在检测各种尺度的目标方面显示出了巨大的进步。在基础的Faster RCNN系统中使用FPN,在MSCOCO数据集上实现了最先进的单模型检测结果,没有任何附加条件(COCO mAP@.5=59.1%,COCO mAP@[.5,.95]= 36.2%)。FPN现在已经成为许多最新探测器的基本组成部分。

CNN based One-stage Detectors

(1)You Only Look Once (YOLO)

YOLO由R. Joseph等人于2015年提出。它是深度学习时代[20]的第一个单级检测器。YOLO非常快:YOLO的一个快速版本运行速度为155fps, VOC07 mAP=52.7%,而它的增强版本运行速度为45fps, VOC07 mAP=63.4%, VOC12 mAP=57.9%。YOLO是 “ You Only Look Once ” 的缩写。从它的名字可以看出,作者完全抛弃了之前的 “ 提案检测+验证 ” 的检测范式。相反,它遵循一个完全不同的哲学:将单个神经网络应用于整个图像。该网络将图像分割成多个区域,同时预测每个区域的边界框和概率。后来R. Joseph在 YOLO 的基础上进行了一系列改进,提出了其 v2 和 v3 版本,在保持很高检测速度的同时进一步提高了检测精度。

尽管与两级探测器相比,它的探测速度有了很大的提高,但是YOLO的定位精度有所下降,特别是对于一些小目标。YOLO的后续版本和后者提出的SSD更关注这个问题。

(2)Single Shot MultiBox Detector (SSD)

SSD由W. Liu等人于2015年提出。这是深度学习时代的第二款单级探测器。SSD的主要贡献是引入了多参考和多分辨率检测技术,这大大提高了单级检测器的检测精度,特别是对于一些小目标。SSD在检测速度和准确度上都有优势(VOC07 mAP=76.8%,VOC12 mAP=74.9%, COCO mAP@.5=46.5%,mAP@[.5,.95]=26.8%,快速版本运行速度为59fps) 。SSD与以往任何检测器的主要区别在于,前者在网络的不同层检测不同尺度的对象,而后者仅在其顶层运行检测。

(3)RetinaNet

单级检测器速度快、结构简单,但多年来一直落后于两级检测器的精度。T.-Y.Lin等人发现了背后的原因,并在2017年提出了RetinaNet。他们声称,在密集探测器训练过程中所遇到的极端的前景-背景阶层不平衡(the extreme foreground-background class imbalance)是主要原因。为此,在RetinaNet中引入了一个新的损失函数 “ 焦损失(focal loss)”,通过对标准交叉熵损失的重构,使检测器在训练过程中更加关注难分类的样本。焦损耗使得单级检测器在保持很高的检测速度的同时,可以达到与两级检测器相当的精度。(COCO mAP@.5=59.1%,mAP@[.5, .95]=39.1% )。

. 细粒度

1 基于常规图像分类网络的微调方法

        原有经典网路基础上加入triplet损失。

2 基于细粒度特征学习(fine-grained feature learning)的方法

        使用双线性卷积神经网络模型(Bilinear CNN)两个网络进行互补,更细化的提取特征。

3 基于目标块的检测(part detection)和对齐(alignment)的方法

        基于目标块(object part)检测的方法思路是:先在图像中检测出目标所在的位置,然后再检测出目标中有区分性区域的位置,然后将目标图像(即前景)以及具有区分性的目标区域块同时送入深度卷积网络进行分类。缺点是标注信息过多。

4 基于视觉注意机制(visual attention)的方法

参考资料:https://zhuanlan.zhihu.com/p/53611407

. 场

根据边有无方向性分类;

根据边有无方向性,PGM可以分为三类

1.有向图模型,也称为贝叶斯网(BayesianNetwork,BN),其网络结构使用有向无环图;

2.无向图模型,也称为马尔可夫网(MarkovNetwork,MN),其网络结构为无向图;

3. 局部有向模型,即同时存在有向边和无向边的模型,包括条件随机场(ConditionalRandomField,CRF)和链图(ChainGraph)。

按拟合分类

CRF,条件随机场是一种判别式无向图模型。马尔科夫随机场是一种生成式模型。判别式对条件分布建模,生成式对联合分布建模

CRF在DCNNmodel中应用的话

其中的一元势函数即来自于前端FCN的输出。而二元势函就是描述像素点与像素点之间的关系,鼓励相似像素分配相同的标签,而相差较大的像素分配不同标签,而这个“距离”的定义与颜色值和实际相对距离有关。所以这样CRF能够使图片尽量在边界处分割。

还是一种类似于贝叶斯概率的东西。

在DCNN中场一般被用来在图像分割任务中细化最后的掩膜。

这些“场”都是图像对类别的关联。

参考资料:https://zhuanlan.zhihu.com/p/22464586

. attention(注意力机制)

听过一种说法:未来的DCNN主要工作在注意力机制。

代表性的工作是17年CVPR中提出的循环注意卷积神经网络(Recurrent Attention Convolutional Neural Network, RA-CNN)。这项工作通过三个网络对输入图逐渐细化完成分类。逐渐细化就是不断缩小区域,也就是不断几种注意力。

. 上采样

理论上所有使得图像分辨率增加的技术都成为上采样,具体有以下几种。

unpooling:就是池化的反过程,鉴于maxpooling不可逆,因此记住正向运算时的位置并恢复,其余为0即可。

Deconvolution:也就是常说的反卷积,不重述了。但记住空洞卷积在卷积上,这个的空在输入上。

FCN(U-net)中的low-level和high-level特征的融合:在FCN论文中,作者采用了combine网络的low-level和high-level特征的方式。这是因为:网络比较深的时候,特征图通常比较小,对这种特征图进行上采样——有很好的语义信息,但分辨率很差。 网络比较浅的时候,特征图通常比较大(接近input image),对这种特征图进行上采样——有很好的细节,但语义信息很差。因此,对两者进行combine,我们可以在得到很好的细节基础上,也能获得尽可能强的图像语义信息。

双线性插值:利用相邻的四个点进行上采样,不是取平均,是x = i * x2- i * x1 , 其中i为像素值,y方向同理。其实与平均不差什么。

. 单目位姿估计

非深度学习模型

1. 是对图像模糊度建模,所谓更模糊就是图像的梯度更小

2. 如果是长走廊可以考虑消失点检测,之后越靠近消失点的像素赋予的而深度越大3

3. 遮挡效应,被遮挡物体轮廓不完整,赋予较深深度值

深度学习模型

1. 直接暴力点的方法就是便签标记为深度进行训练

2. 把深度图估计变成一个搜索问题,即假设相似图像具有相似深度图

3. 双目相机的几何约束作为无监督信息学习单目的深度估计

4. 单目帧间连续运动肯定也是可以提供一些可用信息的

5. 表面法向量

总之,深度学习在这个计算机视觉的传统问题上一开始是暴力的数据学习方法,慢慢地加入了传统方法的约束和先验知识,一定程度上缓解了数据标注的压力(pixel级别的ground truth是个挑战性的工作,structured light带来的数据多半是室内的,激光雷达的数据也存在“黑洞”现象),同时设计新的loss function同时多任务联合训练都能提升模型算法的性能。

参考资料:https://zhuanlan.zhihu.com/p/56263560

. 零样本和单样本学习方法(zero-shot和one-shot

其定义是:基于可见标注数据集&可见标签集合(seen),学习并预测不可见(unseen,无标注)数据集结果。其中unseen 标签集合是可获得的,seen 标签集合与unseen 标签集合交集为空。

处理方法是:样本信息分解为多种语义特征,其实本质上转化为传统的机器学习,对属性的特征建模

单样本就是训练给很少的样本去训练,极端情况就是只给一个。

参考资料:https://blog.csdn.net/tianguiyuyu/article/details/81948700

. 概率图模型

使用概率图模型的意义:概率分布可以分解成许多因子的乘积形式,如能找到一种使每个因子分布具有更少变量的分解方法,就能极大地降低表示联合概率的成本。可视化层面来说,图模型可使我们能够快速看出此分布的一些性质。

有向图和无向图的区别见花书P49-P51。特别地需要注意团的定义:无向图中满足两两之间有边连接的顶点的集合,势函数要求是非负,可以是一个指数函数。参考资料中对两者都进行了很简明的描述。

概率有向图模型又叫:贝叶斯网络(Bayesian network)、信念网络(belief network)、有向无环图模型(directed acyclic graphical model)。概率无向图模型(undirect graphical model)又叫马尔科夫随机场(Markov Random Filed,MRF)、马尔科夫网络(Markov Network,MN)。这一来很多的问题都可以解决了,很多模型在末端加一个“场”其实就是一个概率模型。

参考资料:https://blog.csdn.net/qq_17109251/article/details/82823279

有向图详细资料:https://blog.csdn.net/zb1165048017/article/details/60468659

无向图详细资料:https://blog.csdn.net/zb1165048017/article/details/60867140

. DL的数据结构问题

DL最成功的应用是在CV,那为什么NLP和Speech的很多问题也可以用CNN来出来?为什么AlphaGo里也用了CNN?这几个不相关的问题的相似性在哪里?CNN通过什么手段抓住了这个共性?

用传统方法进行文本分类任务时,通常将一篇文档所对应的tf-idf 向量作为模型的特征输入。但是这样做会有一个弊端,就是这样的tf-idf 表示实际上丢失了输入的文本序列中单词的顺序。而CNN对文本数据建模时,输入变长的字符串,然后通过滑动窗口加池化的方式将原先的输入转换成一个固定长度的向量表示,这样就可以捕捉到原文本中的一些局部特征和顺序上的信息。但一般只适用于短文本,对于两个词之间的长距离的依赖关系还是很难被捕捉到。这也是之后RNN被广泛使用的原因

首先要说的是,第一原因还是 Deep Learning 确实 work,而且效果还很好。这很重要,毕竟谁都不想说我搞了半天还没传统方法结果好。

刚开始深度学习的确没有在 NLP 中流行起来,深度学习刚开始的热点领域在图像分类、语音识别等方向。主要的转折点是 2013 年 word2vec 的诞生,词向量恰好与神经网络偏好的稠密的输入非常契合。区别以往传统的类似语言模型 LM、句法分析之类的操作都是针对以单词/词为单位,输入非常稀疏。词向量将深度网络和人类文字很好地结合起来,是神经网络能够『理解』文字的关键一步。因为人类的文字本质上是一个序列,传统的 LM 很难做到长序列的记忆与处理,一般都是用 bi-gram,tri-gram 之类的,而 RNN 理论上可以实现无限长的记忆处理(虽然还实际中还是有记忆衰退问题,不过这是另一个话题了),所以后来在大多数 NLP 领域中,深度学习最终能占了上风。

就像上面说的可以从信息的结构来说,之所以CV应用的比较成功是因为图像这种数据结构具有天然的空间相关性。自然语言处理方面应该也是可以将其拉伸为一种空间相关性结构(词向量)。以及也是具有稠密信息的空间关联结构。
第二,三四个问题应该可以合并为一个问题回答。它之所以取得比较好的效果。就是因为CNN的这种共性决定的。这种共性就是CNN是高性能的非线性求解器。可以理解为CNN可以你和一种非常复杂的非线性函数。这样就比较好理解。因为即使是DRL,也只是取代了强化学习中的价值函数。因为原来的价值函数是人为设定的被大多数自然环境下这种人为的规则很脆弱。CNN拟合的函数的鲁棒性就比较强。

. 为什么很多做人脸的Paper会最后加入一个Local Connected Conv?

先了解Local Conv:local conv与普通conv的区别就在于普通conv的参数在整个feature map上是共享的,而local conv在一个map上的局部区域内的参数是共享的不同区域内的参数是不同的。举个例子,一个8x8的map,局部区域为2x2,卷积核3x3,步长为1,我们从(0,0)的位置开始走你可以理解为,在(0,0),(0,1),(1,0),(1,1)这四个点你的卷积核是共享参数的,但一旦过了这个区域参数就不共享了,就要换一组参数了。所以local conv与conv比较计算量并没有增加,但是参数数量大大增加了。

当数据集具有全局的局部特征分布时,也就是说局部特征之间有较强的相关性,适合用全卷积。在不同的区域有不同的特征分布时,适合用local-Conv。典型例子就是人脸识别,在这个例子中,通常就放松参数共享的限制。一般人的面部都集中在图像的中央,你可能期望不同的特征,比如眼睛特征或者头发特征可能(也应该)会在图片的不同位置被学习。因此我们希望,数据窗口滑过这块区域的时候,权重和其他边缘区域是不同的。

说到这里,有一个叫做细粒度分类的领域。人脸检测应该相比于细粒度分类要求的条件更加严格。这种结构就是保持在极为相似的样本情况下进行区分。其实这也很好理解,因为人脸检测的论文中经常会诞生一些比较优秀的损失函数的设计。因为损失函数是区分这种细粒度问题或者是要稳极为相似的问题的所有解决方法中成本最低,收效性价比最高的一个。

参考资料:https://blog.csdn.net/wydbyxr/article/details/84062020

. 线性代数基础

x.xT在资料中出现就是一个向量的平方,结果是一个标量常数。

向量有两种表达形式:A={a1, a2, a3, ... an}  B={b1, b2, b3, ... bn}     A  ,  B(这种表达形式常见)。前一种形式的向量做点积时直接对应元素相乘后相加;后一种通常使用A.B = |A|.|B|.cosS,S为两个向量的夹角。

A . B = AT * 其中*为矩阵乘法。这就解释了第一条。

xTy= 0,说明两者正交。

ATA = AAT = I, 证明是正交矩阵。

特征值与特征向量的公式左侧v右移后可变为特征分解公式。

特征值与特征向量的作用是对特征空间进行扩张与缩小。花书图2.3。

奇异值分解很有用,SLAM中也有它。

伪逆求解优点:对角矩阵D的伪逆D+是其非零元素取到数之后再转置得到的。

当矩阵A的列数多于行数时或者行数多于列数时的情况见花书中的描述。

轨运算返回的是矩阵对角元素的和。迹运算不受转置影响。

. 为什么DL中要使用大量的概率表示

多数情况下简单而不确定的规则要比复杂而确定的规则更实用.即使真正的规则是确定的并且我们建模的系统可以足够准确地容纳复杂的规则

. 图卷积神经网络

周志华老师对DCNN发展提出的意见中比较重要的就是其对除视频、图像和语音三种结构之外的数据的处理能力(当然ML在这方面的表现相对优异)

图卷积神经网络(GNN)就是针对这个问题提出的解决方式,大致分为两种:基于谱的图卷积和基于空间域的图卷积

基于谱的图卷积记住两句话:频域上的相乘等于时域上的卷积(函数卷积的傅里叶变换等于函数傅里叶变换后的卷积);傅里叶变换本质上就是时域信号与拉普拉斯算子函数的乘积

参考链接:https://blog.csdn.net/weixin_39373480/article/details/90741121

. 模式识别贝叶斯决策那些东西

首先要熟悉贝叶斯公式,等式左边那个叫作后验概率,等式右边的分母是证据因子,分子是似然乘以先验。
所谓的最大后验概率和最大似然估计在求解时相差一个先验部分。而当可用于训练的数据足够多时,先验可以被忽略,从而将两者统一起来。参考资料:知乎
不难看出,欲使用贝叶斯判定准则来最小化决策风险,首先要获得后验概率。然而在限时任务中它通常难以获得。从这个角度来看,机器学习所要实现的是基于有限的训练样本尽可能准确地估计出后验概率。大体来说主要有两种策略:给定x,可直接通过建模后验来预测,这样得到的是判别式模型;也可以先对联合概率建模,然后再由此获得后验,这样得到的就是生成式模型。
根据贝叶斯最优决策定理 最大化似然估计需要令每个后验概率最大 那不就是最小二乘吗
贝叶斯描述分类问题时 事物的发生本就不存在完全性 而是一个概率 所以存在最小错误率和所谓的最优决策
而且每个后验不可能都完全取得最优 所以一个分类器的错误率肯定比最小错误率大

EM相关
MLE问题可以直接求得解析解(转变为最小二乘问题求解)
但带有隐变量的混合模型的参数估计也就是带有隐变量的混合模型的极大似然问题不能直接求出解析解(因为有对数内加法的存在),这时候就需要使用EM了

. 为什么加入残差结构后网络更容易被训练

有很多解释,比如梯度流动和低维度的流形嵌入,但可以从一下两种非常简单的角度去理解,比如感性点说,加入残差后一定是在本次的梯度计算中不仅仅考虑了上一级的信息,而是连同被跨越的几层中的信息一起考虑。参照的信息多了自然而然就会没那么容易梯度消失。第二点是如图,这个解释真的很棒

其代码部分的实现也较为简单,我用pytorch搭建了一个残差模块

import time
import torch
from torch import nn, optim
import torch.nn.functional as F

import sys
sys.path.append("..") 
import d2lzh_pytorch as d2l
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

class Residual(nn.Module):  # 本类已保存在d2lzh_pytorch包中方便以后使用
    def __init__(self, in_channels, out_channels, use_1x1conv=False, stride=1):
        super(Residual, self).__init__()
        self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1, stride=stride)
        self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1)
        if use_1x1conv:
            self.conv3 = nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride)
        else:
            self.conv3 = None
        self.bn1 = nn.BatchNorm2d(out_channels)
        self.bn2 = nn.BatchNorm2d(out_channels)

    def forward(self, X):
        Y = F.relu(self.bn1(self.conv1(X)))
        Y = self.bn2(self.conv2(Y))
        if self.conv3:
            X = self.conv3(X)
        return F.relu(Y + X)

. 关于Group Normalization

可以参考链接:http://www.dataguru.cn/article-13318-1.html

. 关于损失函数最近又看了些

1. 首先是二元交叉熵损失函数https://blog.csdn.net/chansonzhang/article/details/84674144 简称BCE-loss,CE-loss是softmax归一化之后直接与one-hot进行概率分布相似性的衡量,BCE-loss是直接对输出采用sigmoid激活,使其范围分布至0-1,然后采用联合的交叉熵形式进行衡量。L(y^​,y)=−ylogy^​−(1−y)log(1−y^​)
2. 二元交叉熵损失函数还被称为logistic损失
3. 截止目前,针对标签编码是onehot形式(无论是softmax形成的还是sigmoid激活而形成的)的网络输出和标签之间的损失函数了解了四种:单纯的二元损失,hinge损失,交叉熵损失,二元交叉熵损失。

. 决策树

1. 在XGBoost的那本教材中我第一次了解到一个机器学习模型可解释性有多么的重要与多么的震撼。可解释性可以用来作为剪枝的依据
2. 如何训练一颗决策树:(1)决策树的训练就是一个ifelse的交替进行过程。(2)连续型的属性有两种方式,一是离散化为多个区间段以此作为,而是设立一个阈值将其划分为两段。(3)确定根据哪个属性来进行决策树节点的划分很重要,一般根据纯度(也可以说是一致的程度)的概念来完成(4)计算纯度指标:基尼系数、熵、分类误差(5)基尼指数: 


(6)熵:
 

(7)信息增益:熵下降的越大越好。借此原理提出增益率。信息增益和增益率配合使用

(8)分类误差:

(9)决策数的优点:构建方便,可解释性强,算法复杂度低,

. FM算法

参考:https://www.jianshu.com/p/40c7358040c9
          
https://zhuanlan.zhihu.com/p/37963267
          
https://blog.csdn.net/baymax_007/article/details/83931698

FM使用的必要性在第一份参考链接中已经提到,简单说:应用FM要解决的根本问题是特征组合是必要的,但特征组合后会出现检查项难以训练和特征稀疏这两个问题,FM可以解决这个问题。
FM算法的理论很好理解,唯一需要注意的是v是学出来的,我们在FM中通过将W分解为v和vt来简化计算,而之所以设定为对称矩阵是因为对称矩阵的性质即对称矩阵w可通过分解为一个向量v乘以它的转置vt来实现

FFM与deepFM:https://blog.csdn.net/hiwallace/article/details/81333604

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白 AI 日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值