深度学习
深度学习知识汇总
专注于计算机视觉的AndyJiang
这个作者很懒,什么都没留下…
展开
-
深度学习之l2正则,weight decay,momentum,batchsize,lr超参数之间的关系
l2正则L2正则化的目的就是为了让权重衰减到更小的值,在一定程度上减少模型过拟合的问题。权重衰减(weight decay)weight decay(权值衰减)的使用既不是为了提高收敛精确度也不是为了提高收敛速度,其最终目的是防止过拟合。在损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,若weight decay很大,则复杂的模型损失函数的值也就大。L2正则原创 2020-09-27 20:01:49 · 2264 阅读 · 2 评论 -
深度学习之联邦学习
什么是联邦学习联邦学习(federated learning)能够让AI算法借助位于不同站点的数据中获得经验。该方法能够让多个组织协作开发模型,而且不需要彼此之间直接共享敏感的数据在多次训练迭代过程中,共享模型所覆盖的数据范围会比任何一个组织内部拥有的数据都要大得多。联邦学习如何工作难点:不仅仅是数据量的问题,数据集还需要极高的多样化。但是考虑到隐私性,这些数据一般无法共享。解决办法:联邦学习摒弃了将数据集中到某个位置进行训练的方法,取而代之的是将模型分散到各个不同的站点进行迭代训练。例如原创 2020-09-10 10:34:00 · 3515 阅读 · 0 评论 -
深度学习之知识蒸馏(Knowledge Distillation)
本文参考以下链接,如有侵权,联系删除论文参考引言知识蒸馏是一种模型压缩方法,是一种基于“教师-学生网络思想”的训练方法,由于其简单,有效,在工业界被广泛应用。Knowledge Distillation,简称KD,顾名思义,就是将已经训练好的模型包含的知识(”Knowledge”),蒸馏(“Distill”)提取到另一个模型里面去。温度: 我们都知道“蒸馏”需要在高温下进行,那么这个“蒸馏”的温度代表了什么,又是如何选取合适的温度?背景虽然在一般情况下,我们不会去区分训练和部署使用的模型,但原创 2020-09-10 10:17:02 · 15006 阅读 · 2 评论 -
深度学习之常用激活函数
引言激活函数的目标是,将神经网络非线性化。激活函数是连续的且可导的。连续的:当输入值发生较小的改变时,输出值也发生较小的改变;可导的:在定义域中,每一处都是存在导数;常见的激活函数:sigmoid,tanh,relu。sigmoidsigmoid是平滑的阶梯函数,可导。sigmoid可以将任何值转换为0~1概率,用于二分类。当使用sigmoid作为激活函数时,随着神经网络隐含层(hidden layer)层数的增加,训练误差反而加大。表现为:靠近输出层的隐含层梯度较大,参数更新速度快,很原创 2020-09-09 16:32:05 · 1807 阅读 · 0 评论 -
损失函数之center loss
A Discriminative Feature Learning Approach for Deep Face Recognition-ECCV2016概要对于常见的图像分类问题,我们常常用softmax loss来求损失,最后各个类别学出来的特征分布大概如下图Fig2。这个图是以MNISTt数据集做的实验,一共10个类别,用不同的颜色表示。从Fig2可以看出不管是训练数据集还是测试数据集,都能看出比较清晰的类别界限。如果你是采用softmax loss加上本文提出的center loss的损失,原创 2020-09-09 15:16:46 · 1999 阅读 · 0 评论 -
机器学习之评价指标AUC的意义
参考概要在互联网的排序业务中,比如搜索、推荐、广告等,AUC(Area under the Curve of ROC)是一个非常常见的评估指标。AUC的理解一般有两大类解释,一种是基于ROC线下面积,需要理解混淆矩阵,包括精确率、召回率、F1 值、ROC等指标的含义。另外一种是基于概率的解释,模型的排序能力。AUC的排序特性对比accuracy、precision等指标,AUC指标本身和模型预测score绝对值无关,只关注排序效果,因此特别适合排序业务。为何与模型预测score值无关为何是很好原创 2020-09-09 14:17:43 · 5637 阅读 · 1 评论 -
深度学习之权重初始化
为什么要初始化权重权重初始化的目的是防止深度神经网络的正向(前向)传播过程中层激活函数的输出损失梯度出现爆炸或消失.如果发生任何一种情况,损失梯度太大或者太小,就无法有效向后反传,即便可以向后反传,网络也需要花更长的时间来达到收敛.矩阵乘法是神经网络的基本数学运算。在多层深度神经网络中,一个正向传播仅需要在每层对该层的输入和权重矩阵执行连续的矩阵乘法。这样每层的乘积成为后续层的输入,依此类推。训练神经网络的标准做法,是让输入值落入类似一个均值为0,标准差为1的正态分布中,以确保其被归一化。假设有一个原创 2020-08-19 11:10:06 · 2922 阅读 · 0 评论 -
深度学习之空洞卷积
参考链接:知乎空洞卷积 Dilated ConvolutionsMulti-Scale Context Aggregation by Dilated Convolutions-ICLR 2016Dilated/Atrous Convolution 或者是 Convolution with holes 从字面上就很好理解,是在标准的 convolution map 里注入空洞,以此来增加 reception field。相比原来的正常convolution,dilated convolution 多了一原创 2020-08-17 14:33:52 · 1481 阅读 · 2 评论 -
深度学习之各种Normalization
概要归一化层,目前主要有这几个方法,Batch Normalization(2015年)、Layer Normalization(2016年)、Instance Normalization(2017年)、Group Normalization(2018年)、Switchable Normalization(2019年);将输入的图像shape记为[N, C, H, W],这几个方法主要的区别就是在,batchNorm是在batch上,对NHW做归一化,对小batchsize效果不好;layerNo原创 2020-08-14 15:44:40 · 405 阅读 · 0 评论 -
深度学习之模型压缩
本文参考以下链接,如有侵权,联系删除参考概述目的:最大程度的减小模型复杂度,减少模型存储需要的空间,也致力于加速模型的训练和推理主要方法前端压缩(可逆):知识蒸馏:通过采用预先训练好的复杂模型(teacher model)的输出作为监督信号去训练另外一个简单的网络(student model)紧凑网络设计(compact network design):挤压设计与扩张设计滤波器级别的剪枝(pruning):在训练时使用稀疏约束(加入权重的稀疏正则项,引导模型的大部分权重趋向于0).完成训练原创 2020-08-12 18:24:31 · 604 阅读 · 0 评论 -
深度学习之weight_decay和L2正则的区别
Adam有很多的优点,但是在很多数据集上的最好效果还是用SGD with Momentum细调出来的。可见Adam的泛化性并不如SGD with Momentum。论文 中提出其中一个重要原因就是Adam中L2正则化项并不像在SGD中那么有效。L2正则和Weight Decay在Adam这种自适应学习率算法中并不等价,只有在标准SGD的情况下,可以将L2正则和Weight Decay看做一样。特别是,当与自适应梯度相结合时,L2正则化导致具有较大历史参数和/或梯度幅度的权重比使用权重衰减时更小。原创 2020-08-12 09:30:00 · 4477 阅读 · 0 评论 -
深度学习之DenseNet
参考DenseNet-cvpr2017Densely Connected Convolutional Networks概要这篇文章是CVPR2017的oral,非常厉害。文章提出的DenseNet(Dense Convolutional Network)主要还是和ResNet及Inception网络做对比,思想上有借鉴,但却是全新的结构,网络结构并不复杂,却非常有效!众所周知,最近一两年卷积神经网络提高效果的方向,要么深(比如ResNet,解决了网络深时候的梯度消失问题)要么宽(比如GoogleNe原创 2020-07-29 16:49:21 · 907 阅读 · 0 评论 -
深度学习之ResNeXt
本文参考以下链接,如有侵权,联系删除参考论文链接Aggregated Residual Transformations for Deep Neural Networksresnext-cvpr2017motivation传统的要提高模型的准确率,都是加深或加宽网络,但是随着超参数数量的增加(比如channels数,filter size等等),网络设计的难度和计算开销也会增加。因此本文提出的 ResNeXt 结构可以在不增加参数复杂度的前提下提高准确率,同时还减少了超参数的数量(得益于子模块的拓原创 2020-07-29 15:53:22 · 438 阅读 · 0 评论 -
深度学习之SENet
参考1参考2SENet-2017Squeeze-and-Excitation Networks最后一届 ImageNet 2017 竞赛 Image Classification 任务的冠军,并被邀请在 CVPR 2017 的 workshop(Beyond ImageNet)中给出算法介绍.核心思想SENet的核心思想在于通过网络根据loss去学习特征权重,使得有效的feature map权重大,无效或效果小的feature map权重小的方式训练模型达到更好的结果卷积介绍卷积核作为卷积神原创 2020-07-29 14:51:07 · 980 阅读 · 2 评论 -
深度学习之轻量型网络shufflenet
参考shufflenet-cvpr2017shufflenetAn Extremely Efficient Convolutional Neural Network for Mobile Devices概要ShuffleNet是Face++的一篇关于降低深度网络计算量的论文,号称是可以在移动设备上运行的深度网络。这篇文章可以和MobileNet、Xception和ResNeXt结合来看,因为有类似的思想。卷积的group操作从AlexNet就已经有了,当时主要是解决模型在双GPU上的训练。ResN原创 2020-07-29 12:53:22 · 1060 阅读 · 2 评论 -
机器学习之梯度下降法求最值
梯度下降法求最值import numpy as npdef f(x): return x**2def h(x): return 2*x x = 2 #初始点(初始横坐标)step = 0.8#(步长) f_change = f(x)f_current = f(x)count = 0#迭代次数while f_change>1e-10:#停止迭代的条件,差值小于10^-10的时候停止迭代 x = x-step*h(x)#更新x tmp = f(x)原创 2020-07-28 13:13:29 · 659 阅读 · 0 评论 -
深度学习之常用损失函数
参考原创 2020-07-28 13:05:32 · 1085 阅读 · 0 评论 -
机器学习之AUC评测指标
参考原创 2020-07-28 11:10:58 · 1387 阅读 · 0 评论 -
卷积神经网络之转置卷积
转置卷积、又称反卷积其实是卷积的逆过程。卷积的过程通常会减小特征图的的大小,而转置卷积往往增大特征图的大小卷积卷积操作,输入是一个特征图i,参数padding§, stride(s),kernel_size(k),输出是卷积后得到的特征图o,输出的特征图大小转置卷积转置卷积是卷积的逆过程。在做的转置卷积的时候,我们同样会给转置卷积几个参数,如输入特征图i,p,k,s,分别对应padding,kernel_size,stride。何理解转置卷积是卷积的逆过程?假设卷积的输入为x,输出为y,而转置原创 2020-07-27 16:07:17 · 1014 阅读 · 0 评论 -
深度学习常见面试题目
基础知识题:1. 如何解决过拟合?如何提高模型的泛化能力欠拟合指模型无法得到较低的训练误差;过拟合指模型的训练误差远小于它在测试数据集上的误差。解决过拟合选择复杂度合适的模型避免使用过少的训练样本使用丢弃法(dropout)提高模型的泛化能力从数据上提升性能:收集更多的数据。对数据做缩放和变换。特征组合和重新定义问题。从算法调优上提升性能:用可靠的模型诊断工具对模型进行诊断,权重的初始化,用小的随机数初始化权重。对学习率进行调节。尝试选择合适的激活函数。调整网络的拓扑原创 2020-07-08 19:51:28 · 2294 阅读 · 0 评论 -
机器学习之常用的分类模型评价指标
1.1 精确率和召回率精确率和召回率主要用于二分类问题(从其公式推导也可看出),结合混淆矩阵有:精确率P和召回率R的定义为:上述计算公式中的Positive与Negative是预测标签,True与false代表预测正误;要注意,精确率和召回率是二分类指标,不适用多分类,由此得到P-R曲线以及ROC曲线均是二分类评估指标(因为其横纵轴指标均为二分类混淆矩阵计算得到),而准确率适用于多分类评估。(可以将多分类问题转换为二分类问题进行求解,将关注的类化为一类,其他所有类化为一类)理想情况下,精确率和原创 2020-07-22 19:09:56 · 1227 阅读 · 0 评论 -
pytorch之weight decay的作用和实现
weight decay(权值衰减)的目的既不是提高精确度也不是提高收敛速度,可以将它看做是一种正则化,其最终目的是为了防止过拟合。在进行梯度下降时,使用一个λ\lambdaλ值(取值介于0到1之间)乘以当前计算的每一个weight。momentum是梯度下降中一种常用的加速技术,用来跳过局部最优如下图,0.99就是权重衰减系数,η\etaη为学习率...原创 2020-07-16 18:20:35 · 7592 阅读 · 4 评论 -
目标检测之Focal Loss
focal loss的提出是在目标检测领域,为了解决正负样本比例严重失衡的问题。是由log loss改进而来的,为了于log loss进行对比,公式如下:其基本思想就是,对于类别极度不均衡的情况下,网络如果在log loss下会倾向于只预测负样本,并且负样本的预测概率pip_ipi也会非常的高,回传的梯度也很大。但是如果添加(1−pi)γ(1−p_i)^{\gamma}(1−pi)γ则会使预测概率大的样本得到的loss变小,而预测概率小的样本,loss变得大,从而加强对正样本的关注度。可以改善目标不原创 2020-07-05 18:53:48 · 476 阅读 · 0 评论 -
深度学习之如何处理样本不平衡?
什么是样本不平衡?在计算机视觉(CV)任务里常常会碰到类别不平衡的问题, 例如:图片分类任务:有的类别图片多,有的类别图片少检测任务:现在的检测方法如SSD和RCNN系列,都使用anchor机制。 训练时正负anchor的比例很悬殊.分割任务:背景像素数量通常远大于前景像素。从实质上来讲, 它们可以归类成分类问题中的类别不平衡问题:对图片/anchor/像素的分类。再者,除了类不平衡问题, 还有easy sample overwhelming的问题。easy sample如果太多,可能会将有效原创 2020-07-05 18:52:53 · 2017 阅读 · 0 评论 -
卷积神经网络之CNN感受野计算
感受野指的是一个特定的CNN特征(特征图上的某个点)在输入空间所受影响的区域。一个感受野可以用中心位置(center location)和大小(size)来表征。然而,对于一个CNN特征来说,感受野中的每个像素值(pixel)并不是同等重要。一个像素点越接近感受野中心,它对输出特征的计算所起作用越大。这意味着某一个特征不仅仅是受限在输入图片中某个特定的区域(感受野),并且呈指数级聚焦在区域的中心。特征图大小计算公式假设输入特征图大小为5×5,采用的卷积参数如下:卷积核大小k=3×3,padding大小原创 2020-07-02 21:06:26 · 674 阅读 · 0 评论 -
经典网络之GoogLeNet(从Inception v1到v4的演进)
2014年,GoogLeNet和VGG是当年ImageNet挑战赛(ILSVRC14)的双雄,GoogLeNet获得了第一名、VGG获得了第二名,这两类模型结构的共同特点是层次更深了。VGG继承了LeNet以及AlexNet的一些框架结构。而GoogLeNet则做了更加大胆的网络结构尝试,虽然深度只有22层,但大小却比AlexNet和VGG小很多,GoogleNet参数为500万个,AlexNet参数个数是GoogleNet的12倍,VGGNet参数又是AlexNet的3倍,因此在内存或计算资源有限时,Go原创 2020-07-02 21:05:25 · 277 阅读 · 0 评论 -
经典网络之深度残差网络(DRN)ResNet网络原理
讨论:深的网络一般会比浅的网络效果好,如果要进一步地提升模型的准确率,最直接的方法就是把网络设计得越深越好,这样模型的准确率也就会越来越准确?实验论证:在网络很深的时候(56层相比20层),模型效果却越来越差了(误差率越高),并不是网络越深越好。通过实验可以发现:随着网络层级的不断增加,模型精度不断得到提升,而当网络层级增加到一定的数目以后,训练精度和测试精度迅速下降,这说明当网络变得很深以后,深度网络就变得更加难以训练了。为什么随着网络层级越深,模型效果却变差了呢?...原创 2020-07-02 21:05:09 · 2709 阅读 · 0 评论 -
经典网络之CNN经典模型:VGGNet
VGGNet探索了卷积神经网络的深度与其性能之间的关系,成功地构筑了16~19层深的卷积神经网络,证明了增加网络的深度能够在一定程度上影响网络最终的性能,使错误率大幅下降,同时拓展性又很强,迁移到其它图片数据上的泛化性也非常好。到目前为止,VGG仍然被用来提取图像特征。VGGNet可以看成是加深版本的AlexNet,都是由卷积层、全连接层两大部分构成。1、输入224x224x3的图片,经64个3x3的卷积核作两次卷积+ReLU,卷积后的尺寸变为224x224x642、作max pooling(最大化原创 2020-07-02 21:04:50 · 890 阅读 · 0 评论 -
深度学习之轻量级神经网络 MobileNet,从V1到V3
原文连接:知乎其实介绍MobileNetV1(以下简称V1)只有一句话,MobileNetV1就是把VGG中的标准卷积层换成深度可分离卷积就可以了。MobileNet V1MobileNetV1深度可分离卷积可分离卷积主要有两种类型:空间可分离卷积和深度可分离卷积。空间可分离空间可分离就是将一个大的卷积核变成两个小的卷积核,比如将一个3×3的核分成一个3×1和一个1×3的核:深度可分离卷积深度可分离卷积就是将普通卷积拆分成为一个深度卷积和一个逐点卷积。标准的卷积操作:输入一个12原创 2020-07-02 21:02:06 · 5836 阅读 · 0 评论 -
深度学习之Sigmoid 和 Softmax的异同点
sigmoid 函数函数的基本性质:1、定义域:(−∞,+∞)2、值域:(−1,1)3、函数在定义域内为连续和光滑函数4、处处可导,导数为:f′(x)=f(x)(1−f(x))softmax函数相同点都可以做二分类,求的都是 cross entropy loss(交叉熵损失)不同点sigmoid将一个real value映射到(0,1)的区间,用来做二分类。softmax 把一个 k 维的real value向量(a1,a2,a3,a4….)映射成一个(b1,b2,b3,b4…原创 2020-06-27 17:07:44 · 1221 阅读 · 0 评论 -
深度学习之dropout的作用
概要dropout可以作为训练神经网络的一种trick选择,在每个训练批次中,以某种概率忽略一定数量的神经元.可以明显地减少过拟合现象.详解dropout可以减少特征检测器(隐层节点)间的相互作用.检测器相互作用是指某些检测器依赖其他检测器才能发挥作用.简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定概率p停止工作.这样可以使模型泛化能力更强.因为它不会太依赖某些局部的特征.经过dropout屏蔽掉某些神经元之后,还需要对输出向量y1,…y100进行缩放,也就是乘以1/(1-p)如果原创 2020-06-16 12:59:36 · 6909 阅读 · 0 评论 -
Pytorch之动手学习深度学习(PyTorch)
dive into DL PyTorchbasic knowledgemain toolstorch.utils.data模块提供了有关数据处理的工具,torch.nn模块定义了大量神经网络的层,torch.nn.init模块定义了各种初始化方法,torch.optim模块提供了模型参数初始化的各种方法softmax回归适用于分类问题。它使用softmax运算输出类别的概率分布。s...原创 2020-06-13 19:03:23 · 1309 阅读 · 0 评论 -
深度学习之CNN可视化
CNN可视化过程我们现在可以明白,CNN的浅层的filters一般会检测“边缘”、“颜色”等最初级的特征,之后,filters可以识别出各种“纹理纹路”,到深层的时候,filters可以检测出类似“麻花”、“蜘蛛”等等由前面的基础特征组成的图案。沿着 “将激活值与输入图片对应”这种思路(我的猜测),利用 Deconvnet这种结构,将激活值沿着CNN反向映射到输入空间,并重构输入图像,从而更加清晰明白地知道filters到底识别出了什么具体的方法,其实是将原来的CNN的顺序完全反过来,但是组件不变(原创 2020-06-13 19:00:43 · 786 阅读 · 0 评论 -
深度学习之经典CNN模型
1、LeNet-5论文这个可以说是CNN的开山之作,由Yann LeCun在1998年提出,可以实现对手写数字、字母的识别。结构如下:Input(32×32)–>CONV(6 filters)–>AvgPOOL–>CONV(16 filters)–>AvgPOOL–>FC(120)–>FC(84)–>FC(10)2、AlexNet论文AlexNet于2012年由Alex Krizhevsky, Ilya Sutskever 和 Geoffrey Hin原创 2020-06-13 19:00:11 · 1066 阅读 · 0 评论 -
深度学习之初识CNN
1. 引子————边界检测可以通过设计特定的filter,让它去跟图片做卷积,就可以识别出图片中的某些特征,比如边界。CNN(convolutional neural network),主要就是通过一个个的filter,不断地提取特征,从局部的特征到总体的特征,从而进行图像识别等等功能。每个filter中的各个数字就是参数,我们可以通过大量的数据,来让机器自己去“学习”这些参数。这就是CNN的原理。2. CNN基本概念1).padding 填白采用padding的方法。每次卷积前,先给图片周原创 2020-06-13 18:59:33 · 285 阅读 · 0 评论 -
深度学习之参数调节
我们平时一直都在说“调参、调参”,但实际上,不是调“参数”,而是调“超参数”1.参数(Parameter)参数是我们训练神经网络 最终要学习的目标,最基本的就是神经网络的权重 W和bias b,我们训练的目的,就是要找到一套好的模型参数,用于预测未知的结果。这些参数我们是不用调的,是模型来训练的过程中自动更新生成的。2.超参数(HyperParameter)超参数是我们控制我们模型结构、功能、效率等的 调节旋钮learning rateepochs(迭代次数,也可称为 num of iterat原创 2020-06-13 18:55:02 · 1251 阅读 · 0 评论 -
深度学习之激活函数
激活函数神经网络的每一层基本都是在一个线性运算后面来一个非线性激活函数(Activation function),再把值传给下一层的为啥要有非线性的激活函数(non-linear activation function)n个线性函数嵌套起来,还是线性函数:y=a1(a2x+b2)+b1=a1a2x+a1b2+b1=cx+d这样,n层的神经网络,就相当于一个简单的Logistic regression了。因此,我们必须采用一个非线性的激活函数,让每一层都有意义,让每一层都有其特定的功能!1.原创 2020-06-13 18:52:51 · 1163 阅读 · 0 评论 -
深度学习之优化算法
1.Gradient Decent把所有的训练样本丢进去训练一次之后,把W和b更新一次,然后重复这个过程,具体重复多少次就看我们的“迭代次数”是多少。“把所有训练样本过一遍”为一个epoch2. Mini-batch GD我们训练的时候,跑完一个mini-batch就把W和b更新一次,这样的的话,在一个epoch中,我们就已经把参数更新了多次了!虽然每一步没有batch GD的一步走的准,但是我多步加起来,怎么样也比你走一步的效果好的多,因此可以加快训练速度,更快到达最值点。对于不同的mini-b原创 2020-06-13 18:50:55 · 233 阅读 · 0 评论 -
深度学习之神经网络参数初始化
神经网络参数初始化神经网络的参数主要是权重(weights):W, 和偏置项(bias):b1) 0初始化不管是哪个神经元,它的前向传播和反向传播的算法都是一样的,如果初始值也一样的话,不管训练多久,它们最终都一样,都无法打破对称(fail to break the symmetry),那每一层就相当于只有一个神经元,最终L层神经网络就相当于一个线性的网络,如Logistic regression因此,我们决不能把所有参数初始化为0,同样也不能初始化为任何相同的值,因为我们必须“打破对称性”!2原创 2020-06-13 18:50:19 · 726 阅读 · 0 评论 -
深度学习之正则化
1、Bias(偏差) & Variance(方差)bias就是衡量训练集和我们的最小误差的差距variance是指你的验证集和你训练集的效果的差别,而不是某个绝对的值。2、如何解决bias和variance的问题如果你的模型训练结果是high bias,我们一般用以下几种方法来改进:1)尝试使用更复杂更大的网络结构(增加单元数、增加层数,或者更改结构)2)训练更长的时间(增加迭代次)数因为high bias意味着我们训练的还不够,连训练集的内容都无法很好的识别。所以这种情况下不用去想原创 2020-06-13 18:49:27 · 222 阅读 · 0 评论