您的位置:

dnn向量,dnn是什么

本文目录一览:

CNN、RNN、DNN的内部网络结构有什么区别?

从广义上来说,NN(或是更美的DNN)确实可以认为包含了CNN、RNN这些具体的变种形式。在实际应用中,所谓的深度神经网络DNN,往往融合了多种已知的结构,包括卷积层或是LSTM单元。但是就题主的意思来看,这里的DNN应该特指全连接的神经元结构,并不包含卷积单元或是时间上的关联。

因此,题主一定要将DNN、CNN、RNN等进行对比,也未尝不可。其实,如果我们顺着神经网络技术发展的脉络,就很容易弄清这几种网络结构发明的初衷,和他们之间本质的区别。神经网络技术起源于上世纪五、六十年代,当时叫感知机(perceptron),拥有输入层、输出层和一个隐含层。输入的特征向量通过隐含层变换达到输出层,在输出层得到分类结果。

早期感知机的推动者是Rosenblatt。(扯一个不相关的:由于计算技术的落后,当时感知器传输函数是用线拉动变阻器改变电阻的方法机械实现的,脑补一下科学家们扯着密密麻麻的导线的样子…)但是,Rosenblatt的单层感知机有一个严重得不能再严重的问题,即它对稍复杂一些的函数都无能为力(比如最为典型的“异或”操作)。

连异或都不能拟合,你还能指望这货有什么实际用途么。随着数学的发展,这个缺点直到上世纪八十年代才被Rumelhart、Williams、Hinton、LeCun等人(反正就是一票大牛)发明的多层感知机(multilayer perceptron)克服。多层感知机,顾名思义,就是有多个隐含层的感知机。

CNN、RNN、DNN的一般解释

CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?

转自知乎 科言君  的回答

神经网络技术起源于上世纪五、六十年代,当时叫 感知机 (perceptron),拥有输入层、输出层和一个隐含层。输入的特征向量通过隐含层变换达到输出层,在输出层得到分类结果。早期感知机的推动者是Rosenblatt。 (扯一个不相关的:由于计算技术的落后,当时感知器传输函数是用线拉动变阻器改变电阻的方法机械实现的,脑补一下科学家们扯着密密麻麻的导线的样子…)

但是,Rosenblatt的单层感知机有一个严重得不能再严重的问题,即它对稍复杂一些的函数都无能为力(比如最为典型的“异或”操作)。连异或都不能拟合,你还能指望这货有什么实际用途么o(╯□╰)o

随着数学的发展,这个缺点直到上世纪八十年代才被Rumelhart、Williams、Hinton、LeCun等人(反正就是一票大牛)发明的 多层感知机 (multilayerperceptron)克服。多层感知机,顾名思义,就是有多个隐含层的感知机(废话……)。好好,我们看一下多层感知机的结构:

图1 上下层神经元全部相连的神经网络——多层感知机

多层感知机可以摆脱早期离散传输函数的束缚,使用sigmoid或tanh等连续函数模拟神经元对激励的响应,在训练算法上则使用Werbos发明的反向传播BP算法。对,这货就是我们现在所说的 神经网络 NN ——神经网络听起来不知道比感知机高端到哪里去了!这再次告诉我们起一个好听的名字对于研(zhuang)究(bi)很重要!

多层感知机解决了之前无法模拟异或逻辑的缺陷,同时更多的层数也让网络更能够刻画现实世界中的复杂情形。相信年轻如Hinton当时一定是春风得意。

多层感知机给我们带来的启示是, 神经网络的层数直接决定了它对现实的刻画能力 ——利用每层更少的神经元拟合更加复杂的函数[1]。

(Bengio如是说:functions that can be compactly

represented by a depth k architecture might require an exponential number of

computational elements to be represented by a depth k − 1 architecture.)

即便大牛们早就预料到神经网络需要变得更深,但是有一个梦魇总是萦绕左右。随着神经网络层数的加深, 优化函数越来越容易陷入局部最优解 ,并且这个“陷阱”越来越偏离真正的全局最优。利用有限数据训练的深层网络,性能还不如较浅层网络。同时,另一个不可忽略的问题是随着网络层数增加, “梯度消失”现象更加严重 。具体来说,我们常常使用sigmoid作为神经元的输入输出函数。对于幅度为1的信号,在BP反向传播梯度时,每传递一层,梯度衰减为原来的0.25。层数一多,梯度指数衰减后低层基本上接受不到有效的训练信号。

2006年,Hinton利用预训练方法缓解了局部最优解问题,将隐含层推动到了7层[2],神经网络真正意义上有了“深度”,由此揭开了深度学习的热潮。这里的“深度”并没有固定的定义——在语音识别中4层网络就能够被认为是“较深的”,而在图像识别中20层以上的网络屡见不鲜。为了克服梯度消失,ReLU、maxout等传输函数代替了sigmoid,形成了如今DNN的基本形式。单从结构上来说, 全连接的 DNN 和图 1 的多层感知机是没有任何区别的 。

值得一提的是,今年出现的高速公路网络(highway network)和深度残差学习(deep residual learning)进一步避免了梯度消失,网络层数达到了前所未有的一百多层(深度残差学习:152层)[3,4]!具体结构题主可自行搜索了解。如果你之前在怀疑是不是有很多方法打上了“深度学习”的噱头,这个结果真是深得让人心服口服。

图2 缩减版的深度残差学习网络,仅有34 层,终极版有152 层,自行感受一下

如图1所示,我们看到 全连接 DNN 的结构里下层神经元和所有上层神经元都能够形成连接 ,带来的潜在问题是 参数数量的膨胀 。假设输入的是一幅像素为1K*1K的图像,隐含层有1M个节点,光这一层就有10^12个权重需要训练,这不仅容易过拟合,而且极容易陷入局部最优。另外,图像中有固有的局部模式(比如轮廓、边界,人的眼睛、鼻子、嘴等)可以利用,显然应该将图像处理中的概念和神经网络技术相结合。此时我们可以祭出题主所说的卷积神经网络CNN。对于CNN来说,并不是所有上下层神经元都能直接相连,而是 通过“卷积核”作为中介。同一个卷积核在所有图像内是共享的,图像通过卷积操作后仍然保留原先的位置关系。 两层之间的卷积传输的示意图如下:

图3 卷积神经网络隐含层(摘自Theano 教程)

通过一个例子简单说明卷积神经网络的结构。假设图3中m-1=1是输入层,我们需要识别一幅彩色图像,这幅图像具有四个通道ARGB(透明度和红绿蓝,对应了四幅相同大小的图像),假设卷积核大小为100*100,共使用100个卷积核w1到w100(从直觉来看,每个卷积核应该学习到不同的结构特征)。用w1在ARGB图像上进行卷积操作,可以得到隐含层的第一幅图像;这幅隐含层图像左上角第一个像素是四幅输入图像左上角100*100区域内像素的加权求和,以此类推。同理,算上其他卷积核,隐含层对应100幅“图像”。每幅图像对是对原始图像中不同特征的响应。按照这样的结构继续传递下去。CNN中还有max-pooling等操作进一步提高鲁棒性。

图4 一个典型的卷积神经网络结构,注意到最后一层实际上是一个全连接层(摘自Theano 教程)

在这个例子里,我们注意到 输入层到隐含层的参数瞬间降低到了 100*100*100=10^6 个 !这使得我们能够用已有的训练数据得到良好的模型。题主所说的适用于图像识别,正是由于 CNN 模型限制参数了个数并挖掘了局部结构的这个特点 。顺着同样的思路,利用语音语谱结构中的局部信息,CNN照样能应用在语音识别中。

全连接的DNN还存在着另一个问题——无法对时间序列上的变化进行建模。然而, 样本出现的时间顺序对于自然语言处理、语音识别、手写体识别等应用非常重要 。对了适应这种需求,就出现了题主所说的另一种神经网络结构——循环神经网络RNN。

在普通的全连接网络或CNN中,每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立,因此又被成为前向神经网络(Feed-forward Neural Networks)。而在 RNN 中,神经元的输出可以在下一个时间戳直接作用到自身 ,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出!表示成图就是这样的:

图5 RNN 网络结构

我们可以看到在隐含层节点之间增加了互连。为了分析方便,我们常将RNN在时间上进行展开,得到如图6所示的结构:

图6 RNN 在时间上进行展开

Cool, ( t+1 )时刻网络的最终结果O(t+1) 是该时刻输入和所有历史共同作用的结果 !这就达到了对时间序列建模的目的。

不知题主是否发现,RNN可以看成一个在时间上传递的神经网络,它的深度是时间的长度!正如我们上面所说, “梯度消失”现象又要出现了,只不过这次发生在时间轴上 。对于t时刻来说,它产生的梯度在时间轴上向历史传播几层之后就消失了,根本就无法影响太遥远的过去。因此,之前说“所有历史”共同作用只是理想的情况,在实际中,这种影响也就只能维持若干个时间戳。

为了解决时间上的梯度消失,机器学习领域发展出了 长短时记忆单元 LSTM ,通过门的开关实现时间上记忆功能,并防止梯度消失 ,一个LSTM单元长这个样子:

图7 LSTM 的模样

除了题主疑惑的三种网络,和我之前提到的深度残差学习、LSTM外,深度学习还有许多其他的结构。举个例子,RNN既然能继承历史信息,是不是也能吸收点未来的信息呢?因为在序列信号分析中,如果我能预知未来,对识别一定也是有所帮助的。因此就有了 双向 RNN 、双向 LSTM ,同时利用历史和未来的信息。

图8 双向RNN

事实上, 不论是那种网络,他们在实际应用中常常都混合着使用,比如 CNN 和RNN 在上层输出之前往往会接上全连接层,很难说某个网络到底属于哪个类别。 不难想象随着深度学习热度的延续,更灵活的组合方式、更多的网络结构将被发展出来。尽管看起来千变万化,但研究者们的出发点肯定都是为了解决特定的问题。题主如果想进行这方面的研究,不妨仔细分析一下这些结构各自的特点以及它们达成目标的手段。入门的话可以参考:

Ng写的Ufldl: UFLDL教程 - Ufldl

也可以看Theano内自带的教程,例子非常具体: Deep Learning Tutorials

欢迎大家继续推荐补充。

当然啦,如果题主只是想凑个热闹时髦一把,或者大概了解一下方便以后把妹使,这样看看也就罢了吧。

参考文献:

[1]

Bengio Y. Learning Deep

Architectures for AI[J]. Foundations Trends® in Machine Learning, 2009,

2(1):1-127.

[2]

Hinton G E, Salakhutdinov R R.

Reducing the Dimensionality of Data with Neural Networks[J]. Science, 2006,

313(5786):504-507.

[3]

He K, Zhang X, Ren S, Sun J. Deep

Residual Learning for Image Recognition. arXiv:1512.03385, 2015.

[4]

Srivastava R K, Greff K,

Schmidhuber J. Highway networks. arXiv:1505.00387, 2015.

关于YouTube推荐系统的论文学习

本文是2010年发表在RecSys上的文章。本文主要介绍的是YouTube的个性化推荐的相关内容。

用户使用YouTube一般有三个原因:

--看他们在其他地方找到的单一视频(直接导航);

--围绕某个主题(搜索和目标导向浏览)查看特定视频;

--受他们感兴趣内容的吸引。

推荐系统主要是针对第三点,目的是帮助用户发现他们感兴趣的高质量视频,并且推荐结果应该随时间和用户最近的行为更新。

在YouTube的推荐应用中,面临以下挑战:

--用户上传的视频的元信息非常少;

--视频时长比较短(一般小于10分钟);

--用户行为短暂、多变而且噪声很多;

--视频生命周期短。

这是YouTube的推荐和普通视频网站推荐不同的地方,这些挑战也是现在很多短视频公司关注的问题。

推荐系统算法应该保持时效性和新鲜性,另外,用户必须了解为什么向他们推荐视频,这样可以帮助用户根据自己的喜好改善推荐引擎。推荐的视频是通过用户的行为来生成的,用户的行为包括观看、收藏、喜欢等来作为种子视频,然后使用各种相关性和多样性的 signals 对视频集进行排序。推荐系统的工程设计方面,保持各个模块的独立性,并且还需要对故障具有恢复能力,并在出现部分故障时适度降级。

这里有2种数据可以考虑:

1)是内容数据视频流、视频元信息(标题,标签等);

2)用户行为数据,包括显性和隐性数据。前者是指用户评分、明确表示喜欢、不喜欢等行为,后者是浏览、观看等行为。

原始数据中还含有非常多的噪声,很多不可控因素会影响原始数据的质量。

作者将相关视频定义为用户在观看给定的种子视频 v 之后可能会观看的视频,使用关联规则挖掘技术来确定视频间的相关性。视频i和j的相关性定义为:

将用户观看过的视频、喜欢过的视频、收藏过的视频等等作为种子集合,对它们进行N级的级联扩展,也就是YouTube选择召回的不是1步相关视频,而是n-步相关视频,即种子视频迭代n次后得到的相关视频集合,产生广阔和多样的候选结果。

在生成一组候选视频后,需要对这些相关视频进行排序。

用于排序的数据主要包括:

--视频质量:包括观看次数、视频评分、评论、收视和上传时间等;

--用户特征:考虑用户观看历史记录中种子视频的属性,例如观看次数和观看时间等;

--多样性:要在被推荐的视频集合的类别中做一个平衡,以保持结果的多样性。

这些数据最终被线性组合起来,得到ranking的评分。

本文虽然是2010年发表的,近年来有很多内容升级复杂化了,但是作为初学者,本文的知识点和整体思路是非常值得学习的。当时的YouTube推荐系统的核心算法就是基于Item的协同过滤算法,也就是对于一个用户当前场景下和历史兴趣中喜欢的视频,找出它们相关的视频,并从这些视频中过滤掉已经看过的,剩下就是可以用户极有可能喜欢看的视频。

本文是Google的YouTube团队在推荐系统上DNN方面的尝试,发表在16年9月的RecSys会议。本文第1节介绍了YouTube推荐系统主要面临的挑战。第2节介绍了一个简要的系统概述。第3节更详细地描述了候选集生成模型,包括如何对其进行训练并用于提供推荐服务;实验结果显示模型添加特征和DNN深度后可以显著提升预测效果。第4节详细说明了排序模型,包括使用加权逻辑回归技术以训练预测预期观察时间的模型;实验结果表明,增加隐层网络宽度和深度都能提升模型效果。 最后,第5节做了总结。

-规模大:用户和视频的数量都很大,传统适合小规模的算法无法满足;

-新鲜度:要求对新视频作出及时和合适的反馈;

-噪音:YouTube上的历史用户行为由于稀疏性和各种不可观察的外部因素而不可预测。 我们很少能获得基本真实的用户满意度,更多的是隐式反馈噪声信号。

推荐系统的整体结构如图所示:

该系统由两个神经网络组成:一个用于候选集的生成,一个用于排序。候选集生成网络将用户的Youtube活动历史记录作为输入,然后从海量视频集中筛选出一小部分(数百个)以高精度与用户相关的视频。排序网络负责基于更加精细的特征对候选集进行排序,最后将最高得分的视频呈现给用户(按它们的得分排名)。

该模型把这个推荐问题转化成极端多分类问题:对于用户U和上下文C,把语料库V中的数百万个视频(分类)i,在时间t处做准确的分类,如下所示:

其中u为用户U的embedding表示,vi 代表各个候选视频的embedding。embedding是指稀疏实体(单个视频,用户等)到实数密集向量的映射;DNN的目标就是在用户信息和上下文信息为输入条件下学习用户的embedding向量u,这对于用softmax分类器来区分视频是有用的。

整个模型架构是包含三层全连接层,使用relu激活函数。把用户观看历史数据、搜索数据做一个embedding,加上age、gender等特征作为DNN的输入;输出分线上和离线训练两个部分。训练阶段使用softmax输出概率,在服务期间则直接使用接近最近邻搜索来进行生产候选的N个视频。

1)把用户观看过的视频id列表做embedding,并对所有历史观看视频ID的embedding做平均,得到观看embedding向量。

2)同时把用户搜索过的视频id列表也做如上的embedding,得到搜索embedding向量。

3)用户的人口统计学属性做embedding得到特征向量。

4)简单的二值和连续特征,例如用户的性别,登录状态和年龄作为归一化为[0,1]的实数值直接输入到网络中。

5)example age:机器学习系统总是利用历史的例子去预测未来,所以对过去总会有一个隐含的偏差。为了矫正偏差,YouTube把训练样本的年龄当作一个特征。

1.训练样本要用youtube上的所有视频观看记录,而不只是我们的推荐的视频的观看记录。

2.为每个用户生产固定数量的训练样本。

3.丢弃搜索信息的顺序,用无序的词袋表示搜索查询。

4.如下图,图(a)从历史观看记录中随机拿出来一个作为正样本来预测它,其余的历史观看记录作为上下文;这样其实泄露了未来的信息,并且忽略了任何非对称的消费模式。相反,图(b)是从用户的历史视频观看记录中随机拿出来一个作为正样本,然后只用这个视频之前的历史观看记录作为输入;这样的预测效果好得多。

– 深度为0:这时网络就是一个把连接起来的输入层转换一下,和softmax的256维输出对应起来

– 深度为1:第一层 256个节点,激活函数 是ReLU (rectified linear units 修正线性单元)

– 深度为2:第一层512个节点,第二层256个节点,激活函数都是ReLU

– 深度为3:第一层1024个节点,第二层512个节点,第三层256个节点,激活函数都是ReLU

– 深度为4:第一层2048个节点,第二层1024个节点,第三层512个节点,第四层256个节点,激活函数都是ReLU

实验结果如下图所示:

可以看出,特征选取较多时,并且模型深度在四层时,可以得到较好的结果。

排序阶段最重要的任务就是精准的预估用户对视频的喜好程度。在排序阶段面对的数据集比较小,因此会采用更多的特征来计算。

作者在排序阶段所设计的DNN和上文的DNN的结构是类似的,但在训练阶段对视频的打分函数不再是softmax,而是采用的逻辑回归。如下图所示:

1)特征工程

尽管神经网络能够减轻人工特征工程的负担,但是我们依然需要花费精力将用户及视频数据转化为有效的特征。其主要的挑战在于如何表示用户动作的时间序列以及这些动作如何与正被评分的视频展现相关。但是通过对用户和物品之间的交互行为,我们能提取出一些有用信息,比如: 用户从这个频道里看过多少视频,用户上次观看这个主题的视频是什么时候等。

2)embedding 离散特征

每个维度都有独立的embedding空间,实际并非为所有的id进行embedding,比如视频id,只需要按照点击排序,选择top N视频进行embedding,其余置为0向量;而当多值离散特征映射成embedding之后,像在候选集生成阶段一样,在输入网络之前需要做一下加权平均。另外一个值得注意的是,离散特征对应的ID一样的时候,他们的底层embedding也是共享的,其优势在于提升泛化能力、加速训练、减小内存占用等。

3)连续特征归一化

对连续值类的特征进行归一化,作者设计一种积分函数将特征映射为一个服从[0,1]分布的变量;还可以对某些特征进行取根号、取对数和取平方的相关操作,使得网络有更强的表达能力。

给定正负样本,正样本为有点击视频,负样本为无点击视频;用观看时长对正样本做了加权,负样本都用单位权重(即不加权);采用的是基于交叉熵损失函数的逻辑回归模型训练的。

上表显示了在保留数据集上用不同的隐层配置得到的结果,这些结果表明增加隐层的宽度提升了效果,增加深度也是一样。

本文内容方面,介绍了YouTube基于深度学习的推荐系统,先用视频和用户的主要信息通过深度候选生成模型从百万级视频中找出数百个相关的视频,再用视频和用户的其他信息通过深度排序模型从数百个视频中找出几十个最有可能受用户欢迎的视频给用户。这样使得推荐系统对用户喜好的刻画能力大大增强,刻画的范围更加广泛。

本文结构方面,从推荐系统的整体结构讲起,划分为候选集生成和排序两个阶段,然后对每个阶段详细地展开讲解。整体过程条理清晰,逻辑严密,值得我们学习。

证明设n阶行列式Dnn,D中元素aij的代数余子式Aij。证明n维列向量(An1,......,Ann)'是齐次线性方程

这道题n阶行列式D应该不为0。

行列式的性质中有这样一个:求和(k从1到n)aikAik=D(行列式),求和(k从1到n)aikAjk=0,利用这个性质,把向量(An1,...,Ann)代入上述方程组,全部为0,因此是解。另外,由于n阶行列式不为0,因此D的行向量线性无关,因此题目中的齐次线性方程组的系数矩阵的行向量也线性无关,其秩为n-1,故基础解系只含一个向量,显然(An1,...,Ann)是非零向量,因此是基础解系。

嵌入式与神经网络(四):DNN算法

姓名:王央京    学号:18050100052   学院:电子工程学院

转自:

【嵌牛导读】本文介绍了DNN中的前后向传播算法

【嵌牛鼻子】DNN(深度神经网络)

【嵌牛提问】对于DNN进行初步学习,需要了解的具体算法有哪些?

【嵌牛正文】

DNN前向传播算法数学原理

对于下图的三层DNN,利用和感知机一样的思路,我们可以利用上一层的输出计算下一层的输出,也就是所谓的DNN前向传播算法。

4 DNN前向传播算法

所谓的DNN前向传播算法就是利用若干个权重系数矩阵W,偏倚向量b来和输入值向量x进行一系列线性运算和激活运算,从输入层开始,一层层的向后计算,一直到运算到输出层,得到输出结果为值。

输入: 总层数L,所有隐藏层和输出层对应的矩阵W,偏倚向量b,输入值向量x

输出:输出层的输出。

5 DNN反向传播算法要解决的问题

如果我们采用DNN的模型,即我们使输入层n_in个神经元,而输出层有n_out个神经元。再加上一些含有若干神经元的隐藏层。此时需要找到合适的所有隐藏层和输出层对应的线性系数矩阵W,偏倚向量b,让所有的训练样本输入计算出的输出尽可能的等于或很接近样本输出。怎么找到合适的参数呢?

可以用一个合适的损失函数来度量训练样本的输出损失,接着对这个损失函数进行优化求最小化的极值,对应的一系列线性系数矩阵W,偏倚向量b即为我们的最终结果。在DNN中, 损失函数优化极值求解的过程 最常见的一般是通过梯度下降法来一步步迭代完成的,也可以是其他的迭代方法比如牛顿法与拟牛顿法。

6 DNN反向传播算法的基本思路

在进行DNN反向传播算法前,我们需要选择一个损失函数,来度量训练样本计算出的输出和真实的训练样本输出之间的损失。

DNN可选择的损失函数有不少,为了专注算法,这里使用最常见的均方差来度量损失。即对于每个样本,我们期望最小化下式:

损失函数有了,用梯度下降法迭代求解每一层的w,b。

首先是输出层第 L层 。注意到输出层的W,b满足下式:

对于输出层的参数,损失函数变为:

求解W,b的梯度:

7 DNN反向传播算法过程

由于梯度下降法有批量(Batch),小批量(mini-Batch),随机三个变种,为了简化描述,这里我们以最基本的批量梯度下降法为例来描述反向传播算法。实际上在业界使用最多的是mini-Batch的梯度下降法。区别仅仅在于迭代时训练样本的选择。

输入:总层数 L,以及各隐藏层与输出层的神经元个数,激活函数,损失函数,迭代步长 a,最大迭代次数 max与停止迭代阈值 ,输入的m个训练样本

输出:各隐藏层与输出层的线性关系系数矩阵W和偏倚向量。

CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?

如下:

1、DNN:存在着一个问题——无法对时间序列上的变化进行建模。然而,样本出现的时间顺序对于自然语言处理、语音识别、手写体识别等应用非常重要。对了适应这种需求,就出现了另一种神经网络结构——循环神经网络RNN。

2、CNN:每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立,因此又被称为前向神经网络。

3、RNN:神经元的输出可以在下一个时间戳直接作用到自身,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出!

介绍

神经网络技术起源于上世纪五、六十年代,当时叫感知机(perceptron),拥有输入层、输出层和一个隐含层。输入的特征向量通过隐含层变换达到输出层,在输出层得到分类结果。早期感知机的推动者是Rosenblatt。

在实际应用中,所谓的深度神经网络DNN,往往融合了多种已知的结构,包括卷积层或是LSTM单元。