深度学习基础
光明顶上的5G
作者5G,目前专注于Java后端技术的学习
展开
-
仿射变换转载
仿射变换是一种二维坐标到二维坐标之间的线性变换,它保持了二维图形的平直性和平行性,前者指直线经过变换后仍然是直线,后者指二维图形之间的相对位置保持不变。仿射变换可以写成如下的形式:...转载 2020-04-23 21:36:45 · 255 阅读 · 0 评论 -
23.梯度下降法的神经网络容易收敛到局部最优,为什么应用广泛
实际情况中,我们可能从来没有找到过“局部最优”,更别说全局最优了、很多人都有一种看法,就是“局部最优是神经网络优化的主要难点。”直观的想象,高维的时候这样的局部极值会更多,指数级的增加,于是优化到全局最优就更难了。现在来看,神经网络的训练的困难问题主要是鞍点问题。在实际中,我们很可能从来没有真的遇到过局部极值。不过,即使有局部极值,具有较差loss的局部极值的吸引域也是很小的。所以实际上很多...原创 2020-04-07 19:27:31 · 1010 阅读 · 0 评论 -
65.当神经网络的调参效果不好时,从哪些角度思考
是否找到合适的损失函数批尺寸是否合适是否选择了合适的激活函数学习率是否选择了合适的优化算法是否过拟合原创 2020-04-07 18:30:02 · 672 阅读 · 0 评论 -
64.神经网络中会用到批量梯度下降吗,为什么用随机梯度下降
一般不用批量梯度下降原因:批量梯度下降每次需要用到全量数据,计算量太大引入随机因素,即使陷入局部极小,梯度也可能不为0,这样就有机会跳出局部极小继续搜索。...原创 2020-04-07 18:27:07 · 409 阅读 · 0 评论 -
63.请写出batch normalization的计算方法和应用
批量归一化中,norm是数据标准化或归一化,batch可以理解为批量,加起来就是批量标准化。解决在训练过程中中间层数数据分布发生改变的问题,以防止梯度消失或爆炸,加快训练速度。神经网络学习过程的本质就是学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力大大降低,所以需要使用输入数据归一化方法,使训练数据与测试数据的分布相同。另一方面,神经网络训练时一旦某一层的输入数据分布发生...原创 2020-04-07 18:22:09 · 307 阅读 · 0 评论 -
59.CNN的特点和优势
CNN的使用范围是具有局部空间相关性的数据,比如图像、自然语言、语音。局部连接:可以提取局部特征权值共享:减少参数数量,降低训练难度降维:通过池化或卷积stride实现多层次结构:将低层次的局部特征组合成较高层次的特征,不同层级的特征可以对应不同任务...原创 2020-04-07 17:44:46 · 7359 阅读 · 1 评论 -
58.什么是深度学习中的anchor
在faster rcnn中,anchor的作用是代替以往rcnn使用的选择搜索方法寻找图片里可能存在物体的区域。当一张图片输入resnet或vgg,在最后一层的特征图上面,寻找可能出现物体的位置,这时候分别以这张特征图的每一个点为中心,在原图上画出9个尺寸不同的anchor。然后计算anchor与GT(ground truth) box的iou,满足一定iou条件的anchor,便认为是这个an...原创 2020-04-07 17:40:01 · 4063 阅读 · 0 评论 -
56.请阐述下选择搜索的主要思想
使用一种过分割手段,将图像分割成小区域;查看现有小区域,按照合并规则合并可能性最高的相邻两个区域,重复直到整张图像合并成一个区域位置;输出所有曾经存在过的区域,所谓候选区域;合并规则:颜色相近的纹理相近的合并后总面积小的(保证合并操作的尺度较为均匀)...原创 2020-04-07 15:21:52 · 135 阅读 · 0 评论 -
55.什么是边框回归(bounding-box regression)
如上图所示,绿色的框表示真实值,红色的框表示选择搜索提取的候选区域(region proposal),那么即使红色的框被分类器识别为飞机,但是由于红色的框定位不准,这张图也相当于没有正确的检测出飞机。如果能对红色的框进行微调,使得经过微调后的窗口跟ground truth更接近,这样会使定位更准确,边框回归就是用来微调这个窗口的。边框回归的目的即是:给定(Px,Py,Pw,Ph)寻找一种映...原创 2020-04-07 15:17:05 · 648 阅读 · 0 评论 -
54.什么是fine-tuning
在实践中,由于数据集不够大,很少有人从头开始训练网络,常见的做法是使用预训练的网络来重新fine-tuning(微调),或者当做特征提取器。以下是两类常见的迁移学习场景:卷积网络当做特征提取器,比如使用在ImageNet上预训练的网络,去掉最后的全连接层,剩余部分当做特征提取器,这样的提取叫做CNN codes。得到这样的特征后,可以使用线性分类器来分类图像。fine-tuning卷积网络...原创 2020-04-07 14:51:32 · 900 阅读 · 0 评论 -
41.如何解决深度学习中模型训练效果不佳的情况
选择合适的损失函数神经网络的损失函数时非凸的,有多个局部最低点,目标是找到一个可用的低点。非凸函数时凹凸不平的,但是不同的损失函数凹凸程度不同,比如平方损失和交叉熵损失相比后者起伏更大,且后者更容易找到一个可用的最低点,从而达到优化的目的。选择合适的批量尺寸采用合适的批量尺寸进行学习,一方面可以减少计算量,一方卖弄有助于跳出局部最优点,因此要选择合适的批量尺寸。另一方面,批量尺寸取太大会陷入...原创 2020-04-07 11:15:33 · 4813 阅读 · 0 评论 -
38.在神经网络中有哪些办法防止过拟合
dropoutL1/L2正则化batchnormalization网络bagging提前终止数据增强原创 2020-04-04 19:24:17 · 429 阅读 · 0 评论 -
33.请简单说下sigmoid激活函数
其中z是一个线性组合如b+w1x1+w2x2。通过带入很大的正数或很小的负数可知其结果分别趋于0或1。其函数图形如下:它的性质是可以把分隔平面压缩到[0,1]区间一个数,在线性分隔平面值为0时正好对应sigmoid值为0.5,大于0对应sigmoid值大于0.5,小于0对应sigmoid值小于0.5,0.5可以作为分类的阈值。...原创 2020-04-04 18:49:14 · 559 阅读 · 0 评论 -
31.什么是RNN
RNN的目的是用来处理序列数据。在传统的神经网络模型中,是从输入层到隐藏层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能为力,例如预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNN之所以成为循环神经网络,是因为一个序列当前的输出与前面的输出也有关。具体的表现形式是网络会对前面的信息进行记忆并应用于当...原创 2020-04-04 18:38:48 · 1551 阅读 · 0 评论 -
29.如何修复梯度爆炸问题
重新设计网络模型在深度神经网络中,梯度爆炸可以通过重新设计更少的网络层数来解决使用更小的批尺寸对网络训练也有好处在循环神经网络中,训练过程中在更少的先前时间步上进行更新可以缓解梯度爆炸问题。使用ReLU激活函数使用ReLU激活函数可以减少梯度爆炸,它也是最适合隐藏层的新实践。使用长短期记忆网络采用长短期记忆单元和相关的门类型神经元结构可以减少梯度爆炸问题。使用梯度截断...原创 2020-04-04 18:21:11 · 353 阅读 · 0 评论 -
28.如何确定是否出现梯度爆炸
训练过程中出现梯度爆炸会伴随一些细微的信号,如:模型无法从训练数据中获得更新模型不稳定,导致更新过程中的损失出现显著变化训练过程中,模型损失编程NaN以下是一些稍微明显一点的信号:训练过程中模型梯度快速变大训练过程中模型权重编程NaN值训练过程中每个结点和层的误差梯度值持续超过1.0...原创 2020-04-04 10:53:55 · 497 阅读 · 0 评论 -
27.梯度爆炸会引发什么问题
在深度多层感知机网络中,梯度爆炸会引起网络不稳定,最好的结果是无法从训练数据中学习,而最坏的结果是出现无法再更新的NaN权重值。原创 2020-04-04 10:48:50 · 691 阅读 · 0 评论 -
26.什么是梯度爆炸
误差梯度时神经网络训练过程中计算的方向和数量,用于以正确的方向和合适的量更新网络权重。在深层网络或循环神经网络中,误差梯度可在更新中累积,变成非常大的梯度,然后导致网络权重的大幅更新,并因此使网络变得不稳定。在极端情况下,权重的值变得非常大,以至于溢出,导致NaN值。网络层之间的梯度(值大于1.0)重复相乘导致的指数级增长会产生梯度爆炸。...原创 2020-04-04 10:45:52 · 2350 阅读 · 0 评论 -
22.神经网络中激活函数的真正意义
非线性:即倒数不是常数。这个条件是多层神经网络的基础,保证多层网络不退化成单层线性网络,这也是激活函数的意义所在。几乎处处可微:可微保证了在优化中梯度的可计算性。传统的激活函数如sigmoid等满足处处可微。对于分段线性函数比如ReLU只满足几乎处处可微。对于SGD算法来说,由于几乎不可能收敛到梯度接近零的位置,有限的不可微点对于优化结果不会有很大影响。计算简单:非线性函数有很多,但激活函数...原创 2020-04-04 08:14:29 · 607 阅读 · 0 评论 -
18.如何缓解梯度消失和梯度膨胀
原因梯度消失:根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都小于1,那么在经过足够多层传播之后,误差对输入层的偏导会趋于0。解决方案:可以采用ReLU激活函数有效的解决梯度消失的情况,也可以用Batch Normalization解决这个问题。梯度爆炸:根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都大于1的话,在经过足够多层传播之后,误差对输入层的偏导会趋...原创 2020-03-30 09:08:44 · 475 阅读 · 0 评论 -
16.什么样的数据集不适合用深度学习
数据集太小时,数据样本不足时,深度学习相对于其它机器学习算法,没有明显优势;数据集没有局部相关特性,目前深度学习表现比较好的领域是图像、语音、自然语言处理等领域,这些领域的一个共性是局部相关性。图像中像素组成物体,语音信号中音符组合成单词,文本数据中单词组成句子,这些特征元素的组合一旦被打乱,表示的含义同时也被改变。对于没有这样的局部相关性的数据集,不适合用深度学习算法进行处理。...原创 2020-03-29 15:59:13 · 1655 阅读 · 0 评论 -
15.如何解决RNN梯度爆炸和弥散的问题
解决梯度爆炸问题,可以在梯度大于一定阈值的时候,将它截断为一个较小的数。原创 2020-03-29 11:22:38 · 626 阅读 · 0 评论 -
14.为什么LSTM模型中存在sigmoid与tanh两种激活函数,而不是选择一种
二者目的不一样。sigmoid用在了各种gate上,产生0~1之间的值,这个使用sigmoid最直接,相当于要么是1则记住要么是0则忘掉。tanh用在了状态和输出上,是对数据的处理,这个也可以用其他激活函数。...原创 2020-03-29 11:15:32 · 6738 阅读 · 0 评论 -
13.请问人工神经网络中为什么Relu要好过tanh和sigmoid
采用sigmoid等函数,算激活函数时计算量大,反向传播求误差梯度时,求导涉及除法和指数运算,计算量相对较大,而采用Relu激活函数,整个过程的计算量节省很多。对于深层网络,sigmoid函数反向传播时很容易出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),这种现象称为饱和,从而无法完成深层网络的训练。而Relu就不会有饱和倾向,不会有特别小...原创 2020-03-29 10:39:48 · 411 阅读 · 0 评论 -
12.为什么引入非线性激励函数
对于神经网络来说,网络的每一层相当于f(wx+b),对于线性函数,其实相当于f(x)=x,那么在线性激活函数下,每一层相当于用一个矩阵去乘以x,那么多层就是反复用矩阵去乘以输入。根据矩阵的乘法法则,多个矩阵相乘得到一个大矩阵。所以线性激活函数下,多层网络与一层网络相当。比如两层的网络f(w1*f(w2x))=w1w2x=Wx。非线性变换是深度学习有效的原因之一。原因在于非线性相当于对空间进行变...原创 2020-03-29 10:26:30 · 630 阅读 · 0 评论 -
10.LSTM结构推导,为什么比RNN好
推导forget gate,input gate,cell state,hidden information等的变化;因为LSTM有进有出且当前的cell information是通过input gate控制之后叠加的,RNN是叠乘,因此LSTM可以防止梯度消失或爆炸。...原创 2020-03-29 10:13:17 · 1041 阅读 · 0 评论 -
9.CNN最成功的的应用是在CV,那为什么NLP和speech的很多问题也可以用CNN解出来?为什么AlphaGo也用了CNN?
以上几个不相关问题的相关性在于,都存在局部与整体的关系,由低层次的特征经过组合组成高层次的特征,并且得到不同特征之间的空间相关性。CNN抓住此共性的手段主要有四个:局部连接、权值共享、池化操作、多层次结构。局部连接使网络可以提取数据的局部特征;权值共享大大降低网络的训练难度;池化操作与多层结构一起实现了数据的降维,将低层次的局部特征组合成为较高层次的特征,从而对整个图片进行表示。...原创 2020-03-29 10:09:33 · 1181 阅读 · 0 评论 -
8.你有哪些深度学习调参经验
relu+bn:这套组合可以满足大多数的情况,除非有些特殊情况回用identity,比如回归问题,比如resnet的shortcut支路。dropout:分类问题用dropout,只需要最后一层softmax前用基本就可以了,能够防止过拟合,可能对accuracy提高不大,但是dropout前面的那层如果是之后要使用的feature的话,性能会大大提升。数据的shuffle和argmenta...原创 2020-03-28 09:00:22 · 193 阅读 · 0 评论 -
7.请简要介绍下TensorFlow的计算图
TensorFlow是一个通过计算图的形式来表述计算的编程系统,计算图也叫数据流图,可以把计算图看做是一种有向图,TensorFlow中的每一个结点都是计算图上的一个Tensor,也就是张量,而结点之间的边描述了计算之间的依赖关系和数学操作。如下两图所示:...原创 2020-03-27 23:04:46 · 398 阅读 · 0 评论 -
5.简述下什么是生成对抗网络
GAN之所以是对抗的,是因为GAN的内部是竞争关系,一方叫generator,它的主要工作是生成图片,并且尽量使其看上去是来自于训练样本的。另一方是discriminator,其目标是判断输入图片是否属于真实训练样本。一个简单解释:一个生成模型G,一个判别模型D,判别模型的任务时判断一个实例是真实的还是由模型生成的,生成模型(G)的任务的生成一个实例来骗过判别模型(D),两个模型互相对抗,发展下...原创 2020-03-27 22:57:56 · 519 阅读 · 0 评论 -
4.什么是CNN的池化pool层
池化,简言之就是取区域平均或最大,如下图所示。上图所展示的是取区域最大,即取上图左边部分中左上角2x2矩阵中6最大,右上角2x2矩阵中8最大,左下角2x2矩阵中4最大,右下角2x2矩阵中4最大,所以得到上图右边部分的结果:6,8,3,4。...原创 2020-03-27 22:49:14 · 867 阅读 · 0 评论 -
3.什么是卷积
对图像和滤波矩阵(滤波器)做内积(逐个元素相乘再求和)的操作就是所谓的卷积操作,也是卷积神经网络的名字来源。原创 2020-03-27 22:42:34 · 307 阅读 · 0 评论 -
2.如何确定CNN的卷积核通道数和卷积输出层的通道数
CNN的卷积核通道数 = 卷积输入层的通道数CNN的卷积输出层通道数 = 卷积核的个数原创 2020-03-27 22:36:06 · 7129 阅读 · 0 评论 -
1.什么是归一化,它与标准化的区别是什么
不同点对比点归一化标准化概念将数值规约到(0,1)或(-1,1)区间将对应数据的分布规约在均值为0,标准差为1的分布上侧重点数值的归一,丢失数据的分布信息,对数据之间的距离没有得到较好的保留,但保留了权重数据分布的归一,较好的保留了数据之间的分布,也即保留了样本之间的距离,但丢失了权值形式缺点1.丢失样本间的距离信息;2.鲁棒性较差,当有新的...原创 2020-03-27 17:06:24 · 3227 阅读 · 0 评论 -
神经网络入门
神经网络输入层(特征向量值) 隐藏层(可以有多层) 输出层(标记分类) 权重 偏置 激励函数 隐藏层足够多,训练集足够大,可以模拟任何问题。输入层神经元数量由特征集决定,输出层神经元数量由目标集确定。每条连线都有权重,出了输入神经元每个神经元都有偏置。NN算法(BP=Back Propagation):后向传播算法特征向量标准化normalize(转化为0-1之...原创 2019-06-29 08:43:57 · 161 阅读 · 0 评论 -
一文学会如何在Keras中开发LSTMs(附代码)
LSTM是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要事件。在自然语言处理、语言识别等一系列的应用上都取得了很好的效果。《Long Short Term Memory Networks with Python》是澳大利亚机器学习专家Jason Brownlee的著作,里面详细介绍了LSTM模型的原理和使用。该书总共分为十四个章节,具体如下:第一章:什么是LS...转载 2019-07-24 08:43:00 · 1041 阅读 · 0 评论 -
DenseNet算法详解
论文:密集连接卷积网络论文链接:https://arxiv.org/pdf/1608.06993.pdf代码的github链接:https://github.com/liuzhuang13/DenseNetMXNet版本代码(有ImageNet预训练模型):https: //github.com/miraclewkf/DenseNet文章详解:DenseNet(密集卷...转载 2019-07-06 09:39:26 · 759 阅读 · 0 评论 -
研习U-Net
论文地址:https://arxiv.org/pdf/1807.10165.pdfAuthor:Zongwei Zhou| 周纵苇Weibo:@MrGiovanniEmail:zongweiz@asu.eduPaper:UNet++: A Nested U-Net Architecture for Medical Image SegmentationCode:git...转载 2019-07-04 16:20:42 · 572 阅读 · 0 评论 -
embedding_Keras嵌入层
Keras提供了一个嵌入层,可用于处理文本数据的神经网络。他要求输入数据进行整数编码,以便每个单词都由唯一的整数表示。该数据准备步骤可以使用提供有Keras的Tokenizer API来执行。嵌入层使用随机权重初始化,并将学习所有数据集中词的嵌入。它是一个灵活的层,可以以各种方式使用,如:1、它可以单独使用来学习一个字嵌入,以后可以在另一个模型中使用。2、它可以用作深度学习模型的一...转载 2019-07-24 15:13:31 · 1109 阅读 · 0 评论 -
在Keras中开发LSTM
1 定义模型第一步是定义你的网络,keras中的神经网络被定义为一系列的层,这些层的容器是Sequential类。第一步是创建Sequential类的实例,然后可以创建相应的层,并按照它们应该连接的顺序添加它们。由存储单元组成的LSTM循环层被称为LSTM()。一个全连接层经常跟着一个LSTM层,用于输出一个预测的层被称为Dense()。例如,我们可以定义一个具有两个存储单元的LSTM隐藏...转载 2019-07-25 19:46:15 · 3862 阅读 · 2 评论