精华内容
下载资源
问答
  • 本人精翻的《X-VECTORS ROBUST DNN EMBEDDINGS FOR SPEAKER RECOGNITION》
  • 大多数单词向量方法(Most word vector methods)依赖于单词向量(pairs of word vectors)对之间的距离或角度(angle ),作为评估这样一组单词表示的内在质量(intrinsic quality)的主要方法。 最近,Mikolov等人...

    摘要:最近学习单词的向量空间表示(vector space representations of words)的方法已成功地使用向量算法(vector arithmetic)捕获细粒度的语义(fine-grained semantic)和句法规则(syntactic regularities ),但这些规则的起源仍然是不透明的(opaque)。 我们分析并明确了(explicit)在单词向量中出现这种规则性所需的模型属性(model properties)。结果是一个新的全局logbilinear回归模型,它结合了文献中两个主要模型族的优点:全局矩阵分解(global matrix factorization)和局部上下文窗口方法(local context window methods)。 我们的模型通过仅训练单词 - 单词共生矩阵(cooccurrence matrix)中的非零元素而不是整个稀疏矩阵(entire sparse matrix)或大型语料库(a large corpus)中的各个上下文窗口来有效地利用(leverages)统计(statistical )信息。该模型产生一个具有有意义子结构(meaningful substructure)的向量空间,其最近一个单词类比任务(word analogy task)的性能为75%。 它在相似性任务(similarity tasks)和命名实体识别(named entity recognition)方面也优于相关模型。

    1 Introduction(简介)

    语言的语义向量空间模型(Semantic vector space models)用实值向量表示每个单词。 这些向量可以用作各种应用中的特征,例如信息检索(information retrieval)(Manning等,2008),文档分类(document classification)(Sebastiani,2002),问题回答(question answering)(Tellex等,2003),命名实体识别(named entity recognition)(Turian) et al,2010)和解析(Socher et al,2013)。

    大多数单词向量方法(Most word vector methods)依赖于单词向量(pairs of word vectors)对之间的距离或角度(angle ),作为评估这样一组单词表示的内在质量(intrinsic quality)的主要方法。 最近,Mikolov等人。 (2013c)引入了一种基于单词类比(word analogies)的新评估方案(evaluation scheme),通过检查单词向量之间的标量距离( scalar distance),而不是它们各种不同的差异,探讨(probes)单词向量空间的更精细结构(the finer structure)。

    例如,类比“国王是女王,男人是女人”应该在向量空间中由向量方程式王 - 女王=男人 - 女人编码(be encoded in)。 该评估方案(This evaluation scheme)倾向于(favors )产生意义维度(dimensions of meaning)的模型,从而捕获(thereby capturing)分布式表示的多聚类(multi-clustering)思想(Bengio,2009)。

    学习单词向量(learning word vectors)的两个主要模型族(model families)是:**1)全局矩阵分解方法(global matrix factorization),如潜在语义分析( latent semantic analysis–LSA)(Deerwester等,1990)和2)**局部上下文窗口方法(local context window methods),如skip-gram模型 Mikolov等(2013c)。 目前,两类模型方法(both families)都有明显的缺点( significant drawbacks)。 虽然像LSA这样的方法有效地利用(efficiently leverage)了统计信息,但它们对类比任务(word analogy task)这个词的表现相对较差(relatively poorly),表明了次优的向量空间结构( sub-optimal vector space structure)。 像skip-gram这样的方法在类比任务(word analogy task)上可能做得更好,但是它们很难利用( poorly utilize)语料库的统计数据(the statistics of the corpus),因为它们在单独的本地上下文窗口(local context windows)而不是在全局共现计数(global co-occurrence counts)上进行训练。

    在这项工作中,我们分析了产生线性方向意义(linear directions of meaning)所必需的模型属性(model properties necessary),并认为(argue that)全局对数双线性回归模型(global log-bilinear regression models)适合这样做(are appropriate for doing so)。 我们提出了一种特定的加权最小二乘模型(specific weighted least squares model),该模型训练全局词 - 词共现计数(global word-word co-occurrence counts),从而有效地利用统计数据(makes efficient use of statistics)。 该模型产生一个具有有意义子结构的单词向量空间(a word vector space with meaningful substructure),其最先进的性能(state-of-the-art)是对单词类比数据集的75%准确性所证明(as evidenced by)。 我们还证明了(demonstrate )我们的方法在几个单词相似性任务上(word similarity tasks)以及通用的命名实体识别(common named entity recognition-NER)基准上优于(outperform)其他当前方法(other current methods)。我们在http://nlp.stanford.edu/projects/glove/上提供了模型的源代码以及训练过的单词向量。

    2 Related Work(相关工作)

    矩阵分解方法(Matrix Factorization Methods)。 用于生成低维字表示(generating low-dimensional word representations)的矩阵分解方法可以追溯到LSA。 这些方法利用低秩近似(utilize low-rank approximations)来分解(decompose )捕获关于语料库的统计信息(statistical information about a corpus)的大矩阵。 由这些矩阵捕获的特定类型的信息因应用而异。在LSA中,矩阵是“术语 - 文档”类型,即,行对应于单词或术语,并且列对应于语料库中的不同文档。 相反(In contrast),例如,语言的超空间模拟(the Hyperspace Analogue to Language)(HAL)(Lund和Burgess,1996)利用“术语 - 术语”类型的矩阵,即行和列对应于单词,而条目对应于单词的次数 给定的单词出现在另一个给定单词的上下文中。

    HAL相关方法的一个主要问题是最频繁的单词对相似性度量的贡献不成比例(the most frequent words contribute a disproportionate amount to the similarity measure):例如,the和and,他们的语义相关性相对较少(semantic relatedness),但the与or共同出现的次数很多。 存在许多解决(addresses)HAL的这种缺点的技术,例如COALS方法(Rohde等人,2006),其中共生矩阵( co-occurrence matrix)首先通过基于熵或相关的归一化来变换(entropy or correlation-based normalization)。这种类型的变换的优点在于,对于可能跨越8或9个数量级的合理大小的语料库的(which for a reasonably sized corpus might span 8 or 9 orders of magnitude)原始共现计数(raw co-occurrence counts)被压缩,以便在更小的间隔中(a smaller interval)更均匀地分布。 各种新模型也采用这种方法(pursue this approach),包括一项研究(Bullinaria和Levy,2007),表明积极的逐点互信息(PPMI)是一个很好的转变。 最近,Hellinger PCA(HPCA)形式的平方根类型转换(Lebret和Collobert,2014)已被建议作为学习单词表示( learning word representations)的有效方式。

    基于浅窗的方法(Shallow Window-Based Methods)。 另一种方法是学习有助于在本地上下文窗口中进行预测的单词表示。 例如,Bengio等人。 (2003)引入了一个模型,学习单词矢量表示作为语言建模的简单神经网络体系结构的一部分。 Collobert和Weston(2008)将矢量训练一词与下游训练目标分离,这为Collobert等人铺平了道路(paved the way)。 (2011)使用单词的完整(full context of a word)上下文来学习单词表示,而不仅仅是前面的上下文,就像语言模型一样。

    最近,用于学习有用的单词表示的完整神经网络结构(full neural network structure)的重要性已经受到质疑(called into question)。 Mikolov等人的skip-gram和连续词袋(CBOW)模型。 (2013a)提出了一种基于两个词向量之间的内积的简单单层架构。 Mnih和Kavukcuoglu(2013)也提出了密切相关的矢量对数 - 双线性模型,vLBL和ivLBL,以及Levy等。 (2014)提出了基于PPMI度量的显式单词嵌入。

    在skip-gram和ivLBL模型中,目标是在给定单词本身的情况下预测单词的上下文,而CBOW和vLBL模型中的目标是在给定其上下文的情况下预测单词。 通过对单词类比任务(analogy task)的评估,这些模型展示了(demonstrated)将语言模式(linguistic patterns )学习为单词向量之间的线性关系的能力。

    与矩阵分解方法不同,基于浅窗口的方法的缺点在于它们不直接对语料库的共现统计进行操作(they do not operate directly on the co-occurrence statistics of the corpus)。 相反,这些模型扫描整个语料库(corpus)中的上下文窗口,这无法利用数据中的大量重复的信息(which fails to take advantage of the vast amount of repetition in the data)。

    3 The GloVe Model(GloVe 模型)

    语料库中(corpus)单词出现的统计数据是所有无监督学习单词表示方法的主要信息来源(primary source),虽然现在存在许多这样的方法,如何从这些统计数据产生(meaning)含义,以及生成的单词向量如何表示该(meaning)含义。 在本节中,我们对这个问题有所了解(we shed some light on this question)。 我们使用我们的见解(insights )构建一个新的单词表示模型(a new model for word representation),我们称之为GloVe,用于全局向量,因为全局语料库统计数据是由模型直接捕获的(the global corpus statistics)。

    首先,我们建立一些符号(notation)。 将字 - 词共同出现次数(word-word co-occurrence counts)的矩阵表示为X,其条目 X i j X_{ij} Xij表示word j出现在单词i的上下文中的次数。 设 X i = ∑ k X i k X_i = \sum _kX_{ik} Xi=kXik是任何单词出现在单词i的上下文中的次数。 最后,让 P i j = P ( j ∣ i ) = X i j / X i P_{ij} = P(j|i)= X_{ij} / X_i Pij=P(ji)=Xij/Xi是单词j出现的概率
    在这里插入图片描述
    表1:具有来自60亿 token corpus(就是该语料库含有60亿个词。注:可重复) 的所选上下文词(selected context words)的目标词(target words)ice和steam的共现概率(Co-occurrence probabilities)。 只有在这个比例中,来自water和fashion等非歧视性词语(non-discriminative)的噪音才会抵消(cancel out),因此大的值(远大于1)与ice的特性相关性很好,而小值(远小于1)与特定的属性关系良好steam。

    我们从一个简单的例子开始,展示了如何直接从共现概率(occurrence probabilities)中提取意义的某些方面。 考虑两个表示感兴趣的特定方面的词i和j; 具体而言(for concreteness),假设我们对热力学阶段(thermodynamic phase)的概念感兴趣,我们可以采用i = ice和j = steam。 可以通过研究它们的共现概率(cooccurrence probabilities)与各种探测词(probe words)k的比率(the ratio of their)来检验(examined)这些词的关系。 对于与ice而不是steam相关的单词k,比如说k = solid,我们预计比率 P i k / P j k P_{ik} / P_{jk} Pik/Pjk会很大。类似地(Similarly),对于与steam而非ice相关的单词k,比如k = gas,该比率应该很小。 对于像ice或fashion这样的词语k,无论是ice与steam,还是两者都不相关,这个比例应该接近1。 表1显示了这些概率及其与大型语料库的比率(ratios),数字证实了这些期望。 与原始概率相比(raw probabilities),该比率能够更好地(is better able to)区分(distinguish)相关词(solid 和 gas)与不相关词(ice和fashion),并且还能够更好地区分(discriminate)两个相关词。

    上述论点表明(The above argument suggests that),单词向量学习的适当起点(appropriate starting point)应该是共现概率的比率( ratios of co-occurrence probabilities)而不是概率本身(probabilities themselves)。 注意到比率 P i k / P j k P_{ik} / P_{jk} Pik/Pjk取决于三个单词i,j和k,最通用的模型采用的形式,
    在这里插入图片描述
    其中 w ∈ R d w\in \mathbb{R}^{d} wRd是单词向量, w ∈ R d w\in \mathbb{R}^{d} wRd是单独的上下文单词向量,其作用将在4.2节中讨论。在该等式中,右侧(right-hand side)是从语料库(corpus)中提取的,并且F可以取决于一些尚未指定(as-of-yet unspecified)的参数。 F的可能性很大(The number of possibilities for F is vast),但通过强制执行一些需求(desiderata ),我们可以选择一个独特的选择。 首先,我们希望F对在字向量空间中呈现比率 P i k / P j k P_{ik} / P_{jk} Pik/Pjk的信息进行编码。 由于向量空间本质上是线性结构(inherently linear structures),因此最自然的方法是使用向量差异(vector differences)。有了这个目标,我们可以将我们的考虑限制在仅依赖于两个目标词的差异(the difference of the two target words),修改Eqn的那些函数F. (1)到,
    在这里插入图片描述
    接下来,我们注意到公式(2)中的F的参数是向量,而右侧(right-hand side)是标量(scalar)。 虽然F可以被认为是由例如神经网络参数化的复杂函数(complicated function parameterized),但是这样做会混淆(obfuscate)我们试图捕获的线性结构。 为了避免这个问题,我们可以先拿参数的点积(dot product),
    在这里插入图片描述
    这可以防止F以不希望(undesirable )的方式混合矢量尺寸。 接下来,请注意(note that),对于单词共现矩阵,单词和上下文单词之间的区别是任意的,我们可以自由地交换这两个角色。为了这样做的一致性(To do so
    consistently),我们不仅要交换 w ↔ w ~ w\leftrightarrow \widetilde{w} ww ,同时也要交换 X ↔ X T X\leftrightarrow X^{T} XXT。我们的最终模型在这种重新标记下(relabeling)应该是不变的(invariant),但是Eqn(3)不是。 但是,对称性(symmetry)可以分两步恢复(restored)。首先,我们要求F是群 ( R , + ) (\mathbb{R},+) (R,+) ( R > 0 , × ) (\mathbb{R}_{>0},\times ) (R>0,×)之间的同态(homomorphism)
    在这里插入图片描述
    其中,由Eqn(3),解决了,
    在这里插入图片描述
    公式(4)的解是F=exp,也就是
    在这里插入图片描述
    接下来,我们注意到公式(6)如果不是右侧的 l o g ( X i ) log(X_i) log(Xi),则表现出交换对称性(exhibit the exchange symmetry)。 然而,该项与k无关,因此它可以被吸收到 w i w_i wi的偏置 b i b_i bi中。 最后,为 w ~ k \widetilde{w}_k w k添加额外的偏差 b ~ k \widetilde{b}_k b k可以恢复对称性(restores the symmetry),
    在这里插入图片描述
    公式(7)是对公式(1)的极大简化。 但它实际上是不明确的(it is actually ill-defined),因为只要参数(argument)为零,对数(logarithm)就会发散(diverges)。该问题的一个解决方案(resolution )是在对数中包括加性偏移(additive shift) l o g ( X i k ) → l o g ( 1 + X i k ) log(X_{ik})\rightarrow log(1 + X_{ik}) log(Xik)log(1+Xik),它保持了X的稀疏性(sparsity of X),同时避免了分歧(divergences)。将共生矩阵( co-occurrence matrix )的对数分解(factorizing the log)的想法与LSA密切相关,我们将使用得到的模型作为我们实验中的基线(baseline)。 这种模式的一个主要缺点(A main drawback)是,它平等地权衡所有共现(it weighs all co-occurrences equally),甚至是那些很少或从未发生的共现。 这种罕见的共现是嘈杂(noisy)的,并且信息比较频繁的信息少 - 但即使只有零条目(zero entries)占X中数据的75-95%,这取决于词汇量(vocabulary size)和语料库(corpus)。

    我们提出了一种新的加权最小二乘回归模型(weighted least squares regression model)来解决这些问题(addresses these problems)。 将公式(7)作为最小二乘问题(least squares problem)并将加权函数 f ( X i j ) f(X_{ij}) f(Xij)引入到成本函数中给出了模型
    在这里插入图片描述
    其中V是词汇量的大小(the size of the vocabulary)。 加权函数应遵循以下属性(The weighting
    function should obey the following properties):

    • f ( x ) = 0 f(x)=0 f(x)=0。如果 f f f被视为连续的函数,f应该随着 x → 0 x\rightarrow 0 x0而趋于0,并且有 l i m x → 0 f ( x ) l o g 2 x lim_{x\rightarrow 0}f(x)log^2x limx0f(x)log2x趋于无穷。
    • f(x)应该是非递减的,以便罕见(rare)的共现(co-occurrences)不会超重(overweighted)。
    • 对于较大的x值,f(x)应该相对较小,因此频繁的(frequent)共现不会超重(overweighted)。

    当然,大量函数满足(satisfy )这些属性,但我们发现可以很好地工作的一类函数可以参数化为,
    在这里插入图片描述
    The performance of the model depends weakly on the cutoff,我们所有的实验都设定 x m a x = 100 x_{max}=100 xmax=100 我们发现 α \alpha α= 3/4比使用 α \alpha α= 1的线性版本提供了适度的改进(modest improvement)。虽然我们仅提供选择3/4值的经验动机(empirical motivation),但有趣的是,发现类似的分数功率缩放(fractional power scaling)以提供最佳性能(best performance)。(Mikolov等,2013a)。
    在这里插入图片描述

    展开全文
  • X-VECTORS:稳健的DNN嵌入式,用于声纹识别 摘要   在本文中,我们使用数据增强来提高深层神经网络(DNN)嵌入对于说话人识别的性能。 DNN经过训练以区分说话者,将可变长度的话语映射到我们称为x向量的固定维度...

    X-VECTORS:稳健的DNN嵌入式,用于声纹识别

    摘要

     

    在本文中,我们使用数据增强来提高深层神经网络(DNN)嵌入对于说话人识别的性能。 DNN经过训练以区分说话者,将可变长度的话语映射到我们称为x向量的固定维度嵌入。之前的研究发现,嵌入比i向量更好地利用大规模训练数据集。但是,收集大量用于训练的标记数据可能具有挑战性。我们使用数据增加,包括增加的噪声和回报,作为一种廉价的方法来增加训练数据的数量并提高鲁棒性。将x向量与野外扬声器和NIST SRE 2016 Can-tonese上的i-vector基线进行比较。我们发现虽然增强在PLDA分类器中是有益的,但它在i向量提取器中没有帮助。然而,由于其受过监督的训练,x-vector DNN有效地利用了数据增加。因此,x向量在评估数据集上实现了卓越的性能。

    索引术语 - 说话人识别,深度神经网络,数据增强,x向量

     

    1.简介

     

    使用深度神经网络(DNN)来捕捉说话人特征是目前非常活跃的研究领域。 在我们的方法

    展开全文
  • Precise recovery of latent vectors from generative adversarial networks 翻译 摘要: 生成对抗网络(GAN)将潜在向量转换为视觉上合理的图像。 通常认为原始的GAN的构想没有提供开箱即用的方法来反向映射,将...

    Precise recovery of latent vectors from generative adversarial networks 翻译

    摘要:

    生成对抗网络(GAN)将潜在向量转换为视觉上合理的图像。 通常认为原始的GAN的构想没有提供开箱即用的方法来反向映射,将图像投射回潜在空间。 我们介绍一种简单的基于梯度的技术,称为随机剪切。 在实验中,对于由GAN生成的图像,我们在100%精确地恢复它们的潜在向量预图像。 另外的实验证明该方法对噪声具有鲁棒性。 最后,我们表明,即使是看不见的图像,我们的方法似乎恢复了独特的编码。

    1 引言

    深度卷积神经网络(CNN)现在是机器学习从业者的标准工具。 目前,它们在包括图像分类和目标检测在内的识别学习问题上优于所有其他计算机视觉技术。 生成对抗网络(GAN)(Goodfellow,2014; Radford等,2015)使确定的深度神经网络适应生成建模的任务。

    GAN由生成器和鉴别器组成。 生成器将样本从低维潜在空间映射到图像空间。 鉴别器试图区分由生成器产生的图像和真实图像。 在训练期间,生成器试图愚弄鉴别器。 经过训练,研究人员通常会丢弃鉴别器。 然后可以通过从潜在空间中抽取样本并将它们传递通过生成器来生成图像。

    虽然GAN的生成能力众所周知,但如何最好地执行反向映射(从图像空间到潜在空间)仍然是一个开放的研究问题。 Donahue et al.(2016) 建议对GAN的扩展,其中第三个模型明确地学习反向映射。 Creswell&Bharath(2016)认为反转生成器很困难,注意到原则上,单个图像\phi \left ( z \right )可以映射到多个潜在向量z。 他们提出了一种基于梯度的方法来恢复潜在的向量,并评估图像空间中重建误差的过程。

    我们通过在潜在表示的组成上执行梯度下降来重建潜在向量,并引入称为随机剪切的新技术。 据我们所知,这是DCGANS可以反转为任意精度的第一个经验证明。 此外,我们证明这些重建对增加的噪声是稳健的。 在向图像添加少量高斯噪声之后,我们仍然恢复潜在向量z而几乎没有保真度损失。

    在这项研究中,我们还寻求有关神经网络损失表面优化的见解。 我们寻求问题的答案:(i)优化是否会实现全局最小的0损失或陷入次优临界点? (ii)优化每次都会精确恢复相同的输入吗? 超过1000个实验,我们发现在预训练的DCGAN网络中,具有随机剪切的梯度下降将100%的真实潜在向量恢复到任意精度。

    相关工作:

    一些论文尝试基于梯度的方法来反演深度神经网络。 Mahendran和Vedaldi(2015)将判别CNN转换为理解隐藏的表示。 Creswell&Bharath(2016)反转了GANS的发生器,但没有报告在潜在空间中找到忠实的重建。 我们注意到,找到非凸映射的前图像的任务在计算机视觉中具有至少可以追溯到Bakır等人的历史。

    2 基于梯度的输入重构和随即剪切

    为了反转生成器学习的映射,我们应用以下想法。 对于潜在矢量z,我们产生图像\phi \left ( z \right )。 然后我们初始化一个与z相同形状的新的随机向量{z}'。 该新矢量{z}'映射到对应的图像\phi \left ( {z}' \right )。 为了对输入z进行反向工程,我们接连更新{z}'的分量,以便将表示)推得更接近原始图像\phi \left ( z \right )。 在我们的实验中,我们最小化L2范数,产生以下优化问题:

    我们通过梯度下降优化{z}',执行更新,直到满足一些收敛标准。 学习速率η随时间衰减。 请注意,此优化的全局最小值为0.但是,我们不知道实现此全局最小值的解决方案是否唯一。 此外,这种优化是非凸的,因此我们知道这种优化应该精确地恢复原始矢量是没有理论原因的。 在许多情况下,我们知道原始输入来自有界域。 对于DCGANS,所有潜在向量均匀地从\left [ -1,1 \right ]^{100}超立方体采样。 为了强制执行此约束,我们应用修改后的优化

    使用标准剪切,我们用最大允许值替换太大的组成,并用最小允许值替换太小的组成。 标准剪辑精确地恢复了大部分矢量z。 对于失败的情况,我们注意到重建的{z}'有一些组成停留在-1或1.因为,我们知道一个组成应该位于边界的概率接近于零。 为了防止这些重建被卡住,我们引入了一种称为随机裁剪的启发式技术。 当使用随机剪切时,我们不是将组成设置为-1或1,而是在允许的范围内随机均匀地重新分配剪切的组成。 虽然这不能防止内部局部最小值,但如果唯一的局部最小值包含卡在边界处的组件成,则会有所帮助。

    3 实验

    我们现在总结一下我们的实验结果。 如Radford等人(2015年)所述,所有实验均使用DCGAN进行。 并由Amos(2016)在Tensorflow中重新实施。 首先,我们可视化重建过程,显示初始化、100次迭代和20k次迭代后的\phi \left ( {z}' \right )(图1)。 重建({z}')产生一张无法从原始图像区分的图像。

    接下来,我们考虑100k更新后重建的保真度。 在表1中,我们表明即使使用保守阈值来确定重建成功,随机阈值也可以恢复100%的潜在向量。 我们使用1000个示例评估这些数字。

    然后我们考虑这些重建对噪声的鲁棒性。 我们应用高斯白噪声η,试图从重建z。 我们的实验表明,即使对于大量噪声,z空间中的重建误差也很低,并且似乎与增加的噪声成比例增长(图2)。

    最后,我们询问对于看不见的图像,恢复的矢量是否始终相同。 为了确定恢复的矢量的一致性,我们为同一图像恢复1000个矢量并绘制重建之间的平均成对距离。

    4 结论

    我们证明了GAN发生器在实践中可以反向到任意精度。 这些反向对噪声很鲁棒,即使对于看不见的图像,反转也是独一无二的。 随机剪切比标准剪切更准确,更稳健。 我们怀疑随机剪切还应该从判别CNN重建中提供更好和更稳健的图像重建,将这些实验留给未来的工作。

     

     

     

     

     

     

    展开全文
  • HDLBits——Vectors

    2020-08-21 12:53:23
    Vectors are used to group related signals using one name to make it more convenient to manipulate. For example, wire [7:0] w; declares an 8-bit vector named w that is equivalent to having 8 separate ...

    本人持续更新HDLBits其他题目,详细讲解我们使用Verilog编程时会遇到的各种错误,若有兴趣可以移步我的博客中心浏览本人的其他文章,感谢赏光!

    Vectors are used to group related signals using one name to make it more convenient to manipulate. For example, wire [7:0] w; declares an 8-bit vector named w that is equivalent to having 8 separate wires.

    Contents
    1 Declaring Vectors
    1.1 Implicit nets
    1.2 Unpacked vs. Packed Arrays
    2 Accessing Vector Elements: Part-Select
    3 A Bit of Practice
    Declaring Vectors
    Vectors must be declared:

    type [upper:lower] vector_name;

    type specifies the datatype of the vector. This is usually wire or reg. If you are declaring a input or output port, the type can additionally include the port type (e.g., input or output) as well. Some examples:

    wire [7:0] w; // 8-bit wire
    reg [4:1] x; // 4-bit reg
    output reg [0:0] y; // 1-bit reg that is also an output port (this is still a vector)
    input wire [3:-2] z; // 6-bit wire input (negative ranges are allowed)
    output [3:0] a; // 4-bit output wire. Type is ‘wire’ unless specified otherwise.
    wire [0:7] b; // 8-bit wire where b[0] is the most-significant bit.
    The endianness (or, informally, “direction”) of a vector is whether the the least significant bit has a lower index (little-endian, e.g., [3:0]) or a higher index (big-endian, e.g., [0:3]). In Verilog, once a vector is declared with a particular endianness, it must always be used the same way. e.g., writing vec[0:3] when vec is declared wire [3:0] vec; is illegal. Being consistent with endianness is good practice, as weird bugs occur if vectors of different endianness are assigned or used together.

    Implicit nets
    Implicit nets are often a source of hard-to-detect bugs. In Verilog, net-type signals can be implicitly created by an assign statement or by attaching something undeclared to a module port. Implicit nets are always one-bit wires and causes bugs if you had intended to use a vector. Disabling creation of implicit nets can be done using the `default_nettype none directive.

    wire [2:0] a, c; // Two vectors
    assign a = 3’b101; // a = 101
    assign b = a; // b = 1 implicitly-created wire
    assign c = b; // c = 001 <-- bug
    my_module i1 (d,e); // d and e are implicitly one-bit wide if not declared.
    // This could be a bug if the port was intended to be a vector.

    Adding `default_nettype none would make the second line of code an error, which makes the bug more visible.

    Unpacked vs. Packed Arrays
    You may have noticed that in declarations, the vector indices are written before the vector name. This declares the “packed” dimensions of the array, where the bits are “packed” together into a blob (this is relevant in a simulator, but not in hardware). The unpacked dimensions are declared after the name. They are generally used to declare memory arrays. Since ECE253 didn’t cover memory arrays, we have not used packed arrays in this course. See http://www.asic-world.com/systemverilog/data_types10.html for more details.

    reg [7:0] mem [255:0]; // 256 unpacked elements, each of which is a 8-bit packed vector of reg.
    reg mem2 [28:0]; // 29 unpacked elements, each of which is a 1-bit reg.
    Accessing Vector Elements: Part-Select
    Accessing an entire vector is done using the vector name. For example:

    assign w = a;
    takes the entire 4-bit vector a and assigns it to the entire 8-bit vector w (declarations are taken from above). If the lengths of the right and left sides don’t match, it is zero-extended or truncated as appropriate.
    The part-select operator can be used to access a portion of a vector:

    w[3:0] // Only the lower 4 bits of w
    x[1] // The lowest bit of x
    x[1:1] // …also the lowest bit of x
    z[-1:-2] // Two lowest bits of z
    b[3:0] // Illegal. Vector part-select must match the direction of the declaration.
    b[0:3] // The upper 4 bits of b.
    assign w[3:0] = b[0:3]; // Assign upper 4 bits of b to lower 4 bits of w. w[3]=b[0], w[2]=b[1], etc.
    A Bit of Practice
    Build a combinational circuit that splits an input half-word (16 bits, [15:0] ) into lower [7:0] and upper [15:8] bytes.

    1、标准正确解答

    module top_module( 
        input wire [15:0] in,
        output wire [7:0] out_hi,
        output wire [7:0] out_lo );
        assign out_hi = in[15:8];
        assign out_lo = in[7:0];
    endmodule
    

    2、伪正确解答

    module top_module( 
        input wire [15:0] in,
        output wire [7:0] out_hi,
        output wire [7:0] out_lo );
        assign out_hi = in[15:8];
        assign out_lo = in[8:0];
    endmodule
    

    这两个解答都可以解决这道题目,但是细心的朋友就会发现在对out_lo赋值的过程,标准正确解答是assign out_lo = in[7:0];而伪正确解答是assign out_lo = in[8:0]; 之所以都能Sucess 是因为out_lo本来就是一个8bit bus wires ,即使给一个9bit的输入给它 ,out_lo也只会接收其低8位。

    这既是一个错误,也是启示.
    1、我们可以反过来用,比如一个9位实时输入激励信号—[8:0]in, 输出[7:0]out是一个8位的信号,要求该八位信号是该9位信号的二分频,此时我们就可以 assign out = [8:0]in; 从而实现二分频。
    2、应用在某些ADC中。

    以下是上述题目的中文翻译

    向量用于使用一个名称对相关信号进行分组,以使其更易于操作。例如,电线[7:0] w; 声明一个名为w的8位向量,该向量等效于具有8条独立的导线。

    内容
    1 声明向量
    1.1 隐式网
    1.2未 包装与已包装阵列
    2 访问向量元素:部分选择
    3 点练习
    声明向量
    向量必须声明:

    输入[upper:lower] vector_name;

    type指定向量的数据类型。这通常是wire或reg。如果要声明输入或输出端口,则该类型还可以另外包括端口类型(例如,input或output)。一些例子:

    电线[7:0] w; // 8位线
    reg [4:1] x; // 4位reg
    输出reg [0:0] y; // 1位reg也是一个输出端口(这仍然是一个向量)
    输入线[3:-2] z; // 6位线输入(允许负范围)
    输出[3:0] a; // 4位输出线。除非另有说明,否则类型为“电线”。
    线[0:7] b; // 8位连线,其中b [0]是最高有效位。
    向量的字节序(或非正式地称为“方向”)是指最低有效位是具有较低的索引(较小的字节序,例如[3:0])还是具有较高的索引(较大的字节序,例如[[ 0:3])。在Verilog中,一旦以特定的字节序声明了向量,就必须始终以相同的方式使用它。例如,声明vec[0:3]时写是非法的。与字节序一致是一种好习惯,因为如果将不同字节序的向量一起分配或使用,则会发生奇怪的错误。 vecwire [3:0] vec;

    隐网
    隐式网络通常是难以发现的错误的来源。在Verilog中,可以通过assign语句或通过将未声明的内容附加到模块端口来隐式创建网络类型信号。隐式网络始终是一位导线,如果您打算使用矢量,则会导致错误。可以使用`default_nettype none指令来禁止创建隐式网络。

    wire [2:0] a, c; // Two vectors
    assign a = 3’b101; // a = 101
    assign b = a; // b = 1 implicitly-created wire
    assign c = b; // c = 001 <-- bug
    my_module i1 (d,e); // d and e are implicitly one-bit wide if not declared.
    // This could be a bug if the port was intended to be a vector.

    添加`default_nettype none将使第二行代码出错,从而使该错误更明显。

    未包装阵列与已包装阵列
    您可能已经注意到,在声明中,矢量索引写在矢量名称之前。这声明了数组的“打包”维,其中位被“打包”到了一个Blob中(这在模拟器中是相关的,但在硬件中不相关)。将解压后的尺寸宣布后的名称。它们通常用于声明内存数组。由于ECE253没有涵盖内存阵列,因此在本课程中我们没有使用压缩数组。有关更多详细信息,请参见http://www.asic-world.com/systemverilog/data_types10.html。

    reg [7:0] mem [255:0]; // 256个未压缩的元素,每个元素都是reg的8位压缩向量。
    reg mem2 [28:0]; // 29个解压缩的元素,每个元素都是一个1位的reg。
    访问向量元素:部分选择
    使用向量名称可以访问整个向量。例如:

    分配w = a;
    取整个4位向量a并将其分配给整个8位向量w(从上面获取声明)。如果左右边的长度不匹配,则将其适当地零扩展或截断。
    部分选择运算符可用于访问向量的一部分:

    w [3:0] //仅w的低4位
    x [1] // x的最低位
    x [1:1] // //也是x的最低位
    z [-1:-2] // z的两个最低位
    b [3:0] //非法。矢量零件选择必须与声明的方向匹配。
    b [0:3] // b的* upper * 4位。
    分配w [3:0] = b [0:3]; //将b的高4位分配给w的低4位。w [3] = b [0],w [2] = b [1]等

    展开全文
  • Skip-Thought Vectors 论文信息 NIPS2015 个人解读 Wang & Hytn Chen 更新时间 2020-02-17 句子表示简介 句子分布式表示:将一句话用固定长度的向量进行表示,向量往往高维,因此也可看作将一句话嵌入...
  • Plip提到了一篇名为《Top 10 Web 2.0 Attack Vectors》的文章,对十大Web 2.0攻击向量做了综述:1. AJAX中之跨站脚本攻击例子, Yamanner蠕虫利用了Yahoo Mail的AJAX的跨站脚本漏洞,Samy蠕虫利用了MySpace.com的跨...
  • [HDLBits] Vectors practise

    2020-03-12 18:19:51
    Vectors 题目 Vectors are used to group related signals using one name to make it more convenient to manipulate. For example, wire [7:0] w; declares an 8-bit vector named w that is functionally ...
  • 从本期开始我们进入HDLbits第二章Verilog Language的学习,本期的内容是2.2Vectors 2.2.1Vectors(Vector0) 创建一个单输入、单输出的模块,它就是wire型。 不同于现实中的导线,在Verilog里线网型(和其他信号)...
  • 论文原文:Learned in Translation: Contextualized Word Vectors题外话前段时间一直在写自己的论文,目前论文基本成型,又要转入新一阶段的论文阅读了。由于对GAN等技术不是很了解,所以在挑选论文的时候有选择的...
  • 不,是想搬搬文章,这是一篇我之前翻译之后写在Jupyter notebook 里面的文章。 Spark中的高级分析工具,包括 数据预处理 监督学习 无监督学习 推荐系统 图计算 高级分析是指各种旨在解决核心问题...
  • An Investigation of Non-linear i-vectors for speaker verification 文章地址https://www.isca-speech.org/archive/Interspeech_2018/pdfs/2474.pdf 陈南新,Jesu的Villalba,Najim Dehak 语言和语音处理中心...
  • Rust - Arrays and Vectors | 数组和向量

    千次阅读 2015-09-10 21:25:56
    Arrays and Vectors | 数组和向量 - Translate @ August 22, 2015
  • 视觉SLAM学习(三)--------SLAM 综述

    万次阅读 多人点赞 2017-12-26 13:00:42
     论文翻译: http://qiqitek.com/blog/?p=13    ORB-SLAM是西班牙Zaragoza大学的 Raul Mur-Artal 编写的视觉SLAM系统。他的论文“ORB-SLAM: a versatile and accurate monocular SLAM system"发表在2015年的...
  • 来自吴恩达深度学习系列视频:序列模型第二周作业1:Operations on word vectors。如果英文对你来说有困难,可以参照:【中文】【吴恩达课后编程作业】Course 5 - 序列模型 - 第二周作业 - 词向量的运算与Emoji生成...
  • 最后,最近机器翻译的研究提出可以使用子词单元获取稀有词汇的表示。 3.模型 在本节中,我们提出了一个模型来学习如何考虑到词形态的表示。 一般模型 。我们首先简单回顾一下从我们的模型中导出的 连续的 skip-gram ...
  •  用L(task)表示模型具体进行的nlp任务,也就是下游任务,比如机器翻译、单词分割等,所以总得目标损失函数为: 表示权重,  ,t为迭代次数。 可以看出,在训练的初期,图像分类的影响比较大,随着迭代...
  • 香侬科技近期提出 Glyce,首次在深度学习的框架下使用中文字形信息(Glyph),横扫 13 项中文自然...(7) 语义决策标注 (8) 语义相似度 (9) 意图识别 (10) 情感分析 (11) 机器翻译 (12) 文本分类 (13) 篇章分析。 ...
  • Skip-Thought Vectors

    2017-08-01 13:57:00
    paper的题目是Skip-Thought Vectors,作者是来自多伦多大学的Ryan Kiros博士。 word level表示已经有太多无监督模型,然而sentence level表示大多仍停留在监督模型的范畴内,比如之前分享过的RNN、CNN、RCNN等...
  • 在上节课程中,我们使用语言模型对IMDB影评进行了情感分析。对于语言模型而言,使用的神经网络是一...本节将介绍由法语到英语的机器翻译,该类型网络也是seq2seq,但与语言模型不同之处在于,其在读入整个字符序列后...
  • 在Elasticsearch中查询Term Vectors词条向量信息 这篇文章有点深度,可能需要一些Lucene或者全文检索的背景。...额,对于这个专业词汇,暂且就叫做词条向量吧,因为实在想不出什么标准的翻译。说的...
  • 翻译: CS224n: Natural Language Processing with Deep Learning Lecture Notes: Part II Word Vectors II: GloVe, Evaluation and Training 这套注释首先介绍了用于训练单词向量的GloVe模型。然后,通过查看如何对...
  • 神经机器翻译 这是使用Encoder-Decoder机制以及Attention机制(( )于2016年引入的神经机器翻译的一种实现。Encoder-decoder体系结构通常使用一种编码器,该编码器对将源句子转换成固定长度的向量,解码器根据该...
  • 字向量通常用作下游NLP任务的基本组件,例如,问答系统,文本生成,文本翻译等。因此,建立对词向量优缺点的直观印象很重要。在这里,您将探讨两种类型的词向量:从共现矩阵派生的和通过word2vec派生的。 注释:词...
  • 《Fast loop-closure detection using visual-word-vectors from image sequences》翻译及分析笔记Abstract1.Inroduction2.From image to sequence description2.1. Single-image-based visual place recognition2.2...
  • 资源链接:https://www.bilibili.com/video/BV1r4411f7td?p=1(中英文字母版,不过可能由于up主不了解专业术语,许多专业术语翻译的不是很好,不过也要感谢up的辛苦劳作了~) (2019的感觉相对于之前的少了许多...
  • 前一篇已经翻译过termvectors的使用方法了,这对于学习如何使用tf-idf来说是很有帮助的了。 更多内容参考我整理的ELK教程 什么是TF-IDF? 今天早晨起来,看《ES IN ACTION》的时候,遇到了这个术语,看英文实在不...
  • title: 【线性代数】3-1:向量空间(Space of Vectors) categories: Mathematic Linear Algebra keywords: Vectors Space Subspace Column Space Span toc: true date: 2017-09-19 17:40:30 Abstract...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,783
精华内容 2,713
关键字:

vectors翻译