word2vec_中的数学原理详解
word2vec_中的数学原理详解个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!wordzvec中的数学hoty@163.com2014年7月目录前言2预备知识2.1 sigmoid函数2.2逻辑回归3 Bayes公式2.4 Huffman编码,,,,,,,,524.1Humu树242 Huttman树的构造62.4.3 Huffman编码..,.3背景知识3.1统计语言模3.2n-gram模型103.3神经概率语言模型123.4词向量的理解4基于 Hierarchical softmanⅹ的模型41CBOW模型..191.1.1网络结构41.2梯度计算201.2 Skip-gram模型42.1网络结构42.2梯度计算255基于 Negative sampling的模型285.1CBOW模型285.2 Skip-gram模型53负采样算法326若干源码细节346.1a(x)的近似计算62词典的存储63换行符3564低频词和高频词366.5窗口及上下文3766自应学习率3767参数初始化与训练386.8多线程并行3869几点疑问和思考11m3881前言word2vec是 Google于2013年开源推出的一个用于获取 word vector的工具包,它简单、高效,因此引起了很多人的关注,由于word2vec的作者 Tomas nikolov在两篇相关的论文(,[4)中并没有谈及太多算法细节,因而在一定程度上增加了这个工具包的神秘感些按捺不住的人于是选择了通过解剖源代码的方式来一窥究竟第一次接触word2ve是2013年的10月份,当时读了复且大学郑骁庆老师发表的论文7,其主要工作是将SENA的那套算法(8])搬到中文场景.觉得挺有意思,于是做了一个实现(可参见[20),但苦于其中字向量的训练时间太长,便选择使用word2we来提供字向量,没想到中文分词效果还不错,立马对word2vec刮目相看了一把,好奇心也随之增长后来.陆陆续续看到∫word2ve的一些具体应用,而 lomas nikolov团队本身也将其推广到了句子和文档(),因此觉得确实有必要对word2vec里的算法原理做个了解,以便对他们的后续研究进行追踪.于是,沉下心来,仔细读了一回代码,算是基本搞明臼里面的做法了.筼一个感觉就是,“明明是个很简单的浅层结构,为什么被那么多人沸沸扬扬地说成是Decp Learning呢?”解剖word2vec溟代码的过程中,除了算法层面的收获,其实编程技巧方面的收获乜颇多.既然花了功夫来读代码,还是把理解到的东西整理成文,给有需要的朋友提供点参考吧在整理本文的过程中,和深度学习群的群友北流浪子(15,16)进行了多次有益的讨论在比表示感谢另外,也参考了其他人的一些资料,鄱列在参考文献了,在此对他们的工作也并表示感谢2预备知识本节介绍word2vee中将用到的些重要知识点,包括 sigmoid函数、 Beyes公式和Huffman编码等821 sigmoid函数sigmoid函数是神经网络中常用的激活函数之一,其定义为1+e该函数的定义域为(-x,+x),值域为(0,1).图1给出了 sigmoid函数的图像0.5图1 sigmoid函数的图像sigmoid数的导函数具有以下形式)=0(x)1-0(x)由此易得,函数logo(a)和log(1-0(x)的导函数分别为log o(a)(21)公式(2.1)在后面的推寻中将用到822逻辑回归生活中经常会碰到二分类问题,例如,某封电子邮件是否为垃圾邮件,某个客户是否为在客户,某次在线交易是舌仔在诈行为,等等.设{(x,)}1为一个二分类问题的样本数据,其中x∈R",∈{0,1},当1=1时称相应的样本为正例,当v=0时称相应的样本为负例利用 sigmoid函数,对于任意样木x=(x1,x2,…,xn),可将二分类问题的 hypothesis函数写成h(x)=0(o+61x1+622+…+nxn),其中0=(0o,01,…,O)为待定参数.为了符号上简化起见,引入x0=1将x扩展为(x0,x1,x2,…,xrn)},且在不引起混淆的情况下仍将其记为ⅹ.于是,he可简写为取阀值T-0.5,则二分类的判别公式为1,b(x)≥0.5y(x0.5那参数θ如何求呢?通常的做法是,先确定一个形如下式的整体损失函数∑co(x,v)然后对其进行优化,从而得到最优的參数θ实际应用中,单个样本的损失函数cost(x,)常取为对数似然函数cosl(xi, yi)),v-1;(1-(x),v=0注意,上式是一个分段函数,也可将其写成如下的整体表达式cost(x2,3)=·log(ho(x)(1y1)·log(1h(x)323 Baves公式贝叶斯公式是英国数学家贝叶斯( Thomas Bayes)提出来的,用来描述两个条件概率之间的关系.若记P(A),P(B)分别表示事件A和事件B发生的概率,P(AB)我示事件B发生的情况下事件4发生的慨率P(A,B)表示事A.B同时发生的概率.则有P(AB)P(B), P(BLA)=P(A, B)P(A, B利用上式,进一步可得P(B AP(AB)-P(A)P(B)这就是 Bayes公式g2.4 Huffman编码本节简单介绍Humn编码(具体内容主要来白百度百F的词条.[10),为此,首先介绍Huffman树的定义及其构造算法§24.1 Huffman树在计算机科学中,树是一种重要的非线性数据结构,它是数据元素(在树中称为结点)按分支关系组织起来的结构.若干棵互不相交的树所构成的集合称为森林.下面给出几个与树相关的常用概念·路径和路径长度在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径.通路中分支的数目称为路径长度.若规定根结点的层号为1,则从根结点到第L层结虑的路径长度为L-1●结点的权和带权路径长度若为树中结点赋予一个具有某种含义的(非负)数值,则这个数值称为该结点的权结点的带权路径长度是指,从根结点到该结点之间的路径长度亐该结点的杈的乘矾·树的带权路径长度树的带权路径长度规定为所有叶子结点的带权路径长度之和二叉树是每个结点最多有两个子树的有序树.两个子树通常被称为“左子树”和“右子树”,定义中的“有序”是指两个子树有左石之分,顺序不能颠倒给定n个权值作为n个叶子结点,树造一棵二叉树,若它的带权路径长度达到最小,则称这样的二叉树为最优二叉树,也称为 Huffman树82.4.2 Huffman树的构造给定m个权值{mn,m2;…,mn}作为二叉树的m个叶子结点,可通过以下算法来构造颗 Huffman树算法2.Ⅰ(Hu「man树构造算法)(1)将{1,2,……,wn}看成是有n棵树的表林(每树仅有一个结点)2)在森林中选出两个根结,的权值最小的树合并,作为-棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和〔3)从森林中燜除选取的两樑树,并将新树加入森林(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求的 luffman树接下来,给出算法2.1的一个具体实例例2.1假设2114年世界杯期间,从新浪毀博中抓取了若干条与足球相关的微博,经统计,“我”、“喜欢”、“观看”、“巴西”、“足球”、“世界杯”这六个词岀现的次薮分别为15,8,6,5,3,1.请以这6个词为叶子结点,以相应词频当权值,构造一棵Hu∥n树.⊙Q⑨Q⊙只66如→只只③⊙图2 Huffman树的构造过程利用算法.,易知其枃造过程如国g所示,团中第六步给出了最终的 Hutman树,由囚可见词频越大的词离根结点越近构造过程中,通过合并新増的结点被标记为黄色.由于每两个结点邡要进行一次合并,因此,若叶子结点的个数为η,刘枃造的H們πω树中新増结点的个数为π-1.本例中n6,因此新增结,的个数为5注意,前面有捉到,二叉树的丙个子树是分左右的,对于某个非叶子结点来说,就是其两个孩子结点是分左右的,在本例中,统一将词频大的结点作为左孩子结点,词频小的作为右孩子结点当然,这只昃一个约定:你要将词頻大的结点作为右孩子结点也浸有问题§24.3 Huffman编码在数据通倍中,需要将传送的文宁转换成二进制的字符串,用0,1码的不同排列米表示字符.例如,需传送的报文为“A上 TER DATA EAR ARE ART AREA”,这里用到的字符集为“A,E,R,T,F,D”,各字母出现的次数为84,5,3,1,1,现要求为这些字母设计编码要区别6个字母,最简单的二进制编码方式是等长编码,固定采用3位二进制(23=8>6),可分别用000.001、010、011、100、101对“A,E,R,T,F,D”进行编码发送,当对方接收报文时再按照三位一分进行译码显然编码的长度取决报文中不同字符的个数,若报文中可能出现26个不同字符,则固定编码长度为5(2=32>26).然而,传送报文时总是希望总长度尽可能短.在实际应用中,各个字符的出现频度或使用次数是不相同的,如A、B、C的使用频率远远高于X、Y、7,自然会想到设计编码时,让使用频率高的用短码,使用频率低的用长码,以优化整个报文编码.为使不等长编码为前缀编码(即要求一个字符的编码不能是另一个字符編码的前缀),可用字符集中的每个宇符作为叶子结点生成一棵编码二叉树,为了获得传送报文的最短长度,可将每个字符的岀现频率作为字符结烹的权值赋予该结点上,显然字使用频率越小权值越小,权值越小叶子就越靠下,于是颎率小编码长,频率高编码短,这样就保证了此树的最小带权路径长度,效果上就是传送报文的最短长度.因此,求传送报文的最短长度问题转化为求由字符集中的所有字符作为叶子结点,由字符出现频率作为其权值所产生的Hman树的问题.利用 Hultman树设计的二进制前缀編码,称为 LuminaL编码,它既能满足前缀编码的条件,又能保证报文编码总长最短本文将介绍的word2ve工具中也将用到 Huffman编码,它把训练语料中的词当成叶子缩点,其在语料中出现的次数当作权值,通过构造相应的 Huttman树来对每一个词进行Huffman编码图3给岀了例2.1中六个词的 Huffman编码,其中约定(词频较大的)左孩子结点编码为1,(词频较小的)石孩子编码为θ.这惮一米,“我”、“喜欢”、“观看”、“巴西”、“足球”、“世界杯”这六个词的 Huffman编码分别为0.111,110,101,1001和10000我告欢巴匹0足球图3 Huffman编码示意图注意,到目前为止,关于 Huttman树和 Huttman編码,有两个约定:(1)将权值大的结点作为左孩子结点,权值小的作为右孩子结点(2)左孩子结点编码为1,右孩子结点编码为0.在word2vec源码中将权值较大的孩子结点编码为1,较小的孩子结点编码为0.为与上述约定统一起见,下文中提到的“左孩了结点"都是指权值较大的孩了结点83背景知识word2vec是用来生成词向量的工具,而词向量与语言模型有着密切的关系,为此,不妨先了解一些语言模型方面的知识83.1统计语言模型当今的互联网迅猛发展,每天都在产生大量的文本、图片、语音和视频数据,要对这些数据进行处理并从中挖掘岀有价值的信息,离不开自然语言处理( Nature Language processing,NP)技术,其中统计语言模型( Statistical language model)就是很重要的一环,它是所有NLP的基础,被广泛应用于语音识别、机器翻译、分词、词性标注和信息检索等任务.例.1在语音识别糸统中,对于给定的语音段Vire,霄要找到一个使概率p( TertVoice最大的文本段Tert.利用 Bayes公式,有P(Teat voice)p(VoiceText). p(Textp(Voice)其中p( CicetE.c)为声学模型,而 elEct)为语言模型(18])简单地说统计语言模型是用来计算一个句子的概率的概率模驷,它通常基于一个语料库来构建.那什么叫做一个句子的概率呢?假设W=m1:=(m1,2,…,mr)表示由T个词,2,……,按顺序构成的一个句子,则1,c2…,w的联合慨率p()=p(x1)=p(01,t2,…,r)就是这个句子的概率利用 Bayes公式,上式可以被链式地分解为p(uh)-p(1)·p(u2lu1)p(u3lu2)…p( wru-1),(3.1)其中的(条件)概率p(1),p(2t1),p(un),…,p(mr1-)就是语言模型的参数,若这些参数已经全部算得,那么给定一个句子U1,就可以很快地算出相应的p(1)了看起来奷像很简单,是吧?但是,具体实现起来还是有点麻烦.例如.先来看看模型参数的个数.剛刚才是考虑一个给定的长度为T的句子,就需要计算T个参数.不妨假设语料库对应词典D的大小(即词汇量)为N,那么,如果考虑长度为T的任意句子,理论上就有M种可能.而每种可能都要计算T个参数,总共就需要计算TN7个参数.当然,这里只是简单估算,并没有考虑重复参数,但这个量级还是有蛮吓人.此外,这些概率计算好后,还得保存下来,因此,存储这些信息乜需要很大的內存开销此外,这些参数如何计算呢?常见的方法有n-gram模型、决策树、最大熵模型、最大熵马尔科夫模型、条件随机场、神经网络等方法,本文只讨论n-gram模型和神经网络两种方法.首先来看看 n-gram模型
- 2020-12-04下载
- 积分:1
基于FPGA的数字通信实现多路数据时分复用和解复用系统系统
本文档介绍了一种基于FPGA的数字通信多路时分复用和解复用系统,使用硬件描述语言很好的实现了系统功能。第2页共63页AbstractThe system is designed for data multiplexed and de-multiplexed. It is based on TDMThe systern includes the transmitter and the receiver. They are implemented mainly by FPGaThere are three inputs in the transmission system: data from A/converter, DIPI and DIP2The three channels are out serially and time-divisional under the FPgas control. The FPGain the transmitter is divided into four modules which are frequency divider, Barker generator,data multiplexer and voltage display. voltage display is used for processing the data convertedy ADC and sending it to the LED. The serial data are serial shifted into the FPGa in thereceiver. Bit-synchronize and frame-synchronize are both picked up, and then de-multiplexThe FPGA in the receiver is divided into three modules which are digital PLL, datade-multiplexer and voltage display. The transmitter will multiplex four ways of 8-bit paralleldata. The first way is adC data, the second and the third way is generated by dip-key. Theother is Barker code used for frame synchronizing. The receiver will maintain the bitsynchronizing, recognize one frame and de-multiplex three ways data. The essay will discussthe design progress, the programming idea and some problems. Works have to be done by thedesigner are: Specify all system components, Make system specification, Draw systemschematics, Write RTL code according the schematics, Synthesis and simulate the rtl codeDesign the PCBS, Validate the functions of the FPGA on-line.Keywords: DPLL; Frame-synchronize; TDM; Verilog HDl; Serial A/D convert;第3页共63页目录引1数字复接系统简介52数字复接方法及方式2.1数字复接的方法…中中·2.2数字复接的方式………3系统原理和各模块设计………………………63.1系统原理及框图…3.2发端系统设计…3.3收端系统设计…···中··中··中····中·,中………93.4FPGA的设计流程“····“:*·············=·······*·*··3.4.1设计输入···“··++··+··*+··+··+++*···++++·*·+·++34.2设计综合……………………123.4.3仿真验证123.4.4设计实现……123.4.5时序分析123.5发端FPGA设计………………………133.5.1分频模块…翻……143.5.2复接模块……………………………………153.5.3显示模块……………………163.5.4编译与仿伤真…………………183.6收端FPGA设计……………………………………………………193.6.1数字锁相模块…………···→····;··中·······中···········→··············203.6.2解复用模块…··++·*···中+“··“++………………………213.6.3显示模块………………………………………………223.6.4编译与仿真………………………………223.7数字锁相环原理及设计……………………………2338串行AD工作原理………………2539并行D/A的工作原理…263.10 Altera flex10K10介绍………………………………………………………………274系统调试…………………………………………………325 Quartus||软件及 Ver log语言简介…………325.10 artus I软件简介……………………………………………………325.2 Verilog语言简介……………………………………………………………34第4页共63页6结论····“4··+·→··*·*··“······+“·+····“······“··+·+“+·…“*·.·+··+“·+·+·*··…………35谢辞36参考文献·a···.········和··::··中.事…37附录…38docn豆丁www.oocin.com第5页共63页引言数字复接、分接技术发展到80年代已经趋于成熟,形成了完善的EI、T系列。它使得多路低速信号可以在髙速信道中传输,同时提髙信道的利用率。PLD/FPGA是电子设计领域中最具活力和发展前途的一项技术,它的影响丝毫不亚于70年代单片机的发明和使用。可以毫不夸张的讲,PID/FPGA能完成任何数字器件的功能,上至高性能CP,下至简单的74电路,都可以用PLD/FPGA来实现。PLD/FPGA如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入法,或是硬件描述语言自由的设计一个数字系统。通过软件仿真,我们可以事先验证设计的正确性。在PCB完成以后,还可以利用PLD/FPGA的在线修改能力,随时修改设计而不必改动硬件电路。使用PLD/FGA来开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。,PLD/FGA的这些优点使得PLD/FPGA技术在90年代以后得到飞速的发展,同时也大大推动了EDA软件和硬件描述语言的进步。本设计主要利用了FPGA及 Verilog hdl语言来设计数字复、接分接系统。数字复接系统简介在数字通信网中,为了扩大传输容量和提高传输效率常常需要把若干个低速数字信号合并成为一个高速数字信号,然后再通过高速信道传输,这就是所谓的数字复接技术。数字复接是一种已经非常成熟的技术,广泛地应用于无线通信、光通信和微波接力通信。图1-1数字复接系统方框饜图1-1所示,数字复接系统包括数字复接器( digital multiplexer)和数字分接时钟「定时同定时步复分日恢接复器( digital de- multiplexer)两部分。数字复接器是把两个或多个低速的支路数字信号按照时分复用方式合并成为一路高速的合路数字信号的设备;数字分接器是把合路数字信号分解为原来的支路数字信号的设备。数字复接器是由定时、调整和复接单元所组成;数字分接器是由同步、定时、分接和恢复单元所组成。定时单元给设备提供统一的基准时间信号,同步单元给分接器提供与复接器基准时间同步的时间信号,调整单元负责同步输入的各支路信号。恢复单元与调整单元相对,负贵把分接出来的各支路信号复原第6页共63页2数字复接方法及方式2.1数字复接的方法数字复接的方法主要有按位复接、按字复接和按帧复接三种(1)按位复接按位复接的方法是每次只复接每个支路的·位码,复接后,码序列中的第·位表示第一路中的第一位码;第二位表示第二路的第一位码;以此类推,第N位表示第N路的第一位码。这N位码形成第一时隙。同样,第二时隙是有每路的第二位码复接而成。这种复接方法的特点是设备简单、只需小容量存储,易于实现(2)按字复接按字复接就是每次复接支路的一个字或字节。复接后的码顺序是每个封隙为一路n位码。它的特点是利于多路合成和处理,但要求有较大的存储容量,使得电路较为复杂(3)按帧复接这种方法是每次复接一个之路的一帧数码,它的特点是复接时不破坏原来的帧结构,有利于交换,但要求有更大的存储容量。22数字复接的方式按照复接时各低速信号的情况,复接方式可分为同步复接、异步复接与准同步复接。(1)同步复接同步复接被复接的各个支路信号在时间上是完全同步的。在实际应用中,由于各个支路信号到达的时间不一样,造成支路间的码位相位不同,使得信息不能被正确复接。因此需要对支路进行相位调整。在复接时,要插入帧同步码及其它的业务码。(2)异步复接将没有统一标称频率的不同支路数字信号进行复接的方式成为异步复接。在数字通信中广泛采用这种复接方式。(3)准同步复接准同步复接是指参与复接的各个低速信号使用各自的时钟,但各支路的时钟需要在定的容差范围内。准同步复接实际上是在同步复接的基础上增加了码速调整功能3系统原理和各模块设计3.1系统原理及框图首先介绍系统的工作过程。此数字通信系统分为发端和收端两部分。在发端,FPGA对A①D变换数据、DIP1数据和DIP2数据插入帧同步码,形成一帧,对此帧按位时分复用并串行发送出去。同时,A/D输入端的模拟电压值将通过FPGA的处理,显示在七段数码管上。在收端,FPGA首先从串行码中提取位时钟,然后识别帧同步。当识别出帧同步后,FPGA解复用三路并行码,分别将这三路并行码送到后面的D/A变换器、LED1和LED2同时,第一路并行码通过FGA的处理,显示到七段数码管上。传输帧结构如图3-1所示:第7页共63页帧同步第一路第二路|第三路图3-1传输帧结构总系统框图如图3-2所示:七段数码管七段数码管A/DD/A信道DI P1立FPGA收端FPGALED 1DIP2LED2图3-2总系统框图3.2发端系统设计图3-3是发端系统方框图七数码簣豆丁A/D信道DP1愛端FPGADIP2图3-3发端系统方框图如图3-3所示,发端有三路信号:A/D变换信号、拨码开关1和拨码开关2产生的8位信码。AD变换的信码经过FPGA处理显示到七段译码管上,它代表变换前模拟信号的电压值。由于三路信号都是静态信号,因此输入不用进行码速变挨和码速调轄。输出信号的码速率为256Kbps。发端电路在做PCB时需要单层布线,因此将发端系统板倣成三块小板,分为三个图,分别是发端主图、AD变换图和LED显示图。发端主图如34所示,以发端FPGA为核心,其它功能块逐一实现。为了FGA运行的稳定,要在其周围加入6个滤波电容,电容值为0.1uF。拨码开关与排阻共同构成八位信码,分别接到FPGA的8个I/0端口。复位电路是系统正常运行的必要部分,它由按键开关,电解电容和电阻构成。主图板与AD变换板、LED显示板之间用插针和电线连接。这些插针和电线将为A/D变换板和LED显示第8页共63页板提供电源和通信路径。此外,FPGA还需要配置电路。配置电路在开杌时将配置文件载入到FPGA中,FPGA才可以工作。配置电路由上拉电阻和插座组成,其中,五个端口接到FGA五个配置引脚,他们是:DATA0、 sTATuS、 nCONFIG、 CONF DONE与DCLK。3图AA399999温899998旨若起Ed kDYnizisr含已四=图3-4发端主图原理图A/D变换图如图35所示,要说明的是,这里没有采用并行A/D,而是采用了串行A/D,这样可以节省FPGA的管脚。我使用的ADC型号是TC549。TLC549转换输入端模拟量为数字量,为FPGA提供串行数据。这块板的电源由主图板提供,电源端接到主图板的电源端。TLC549需要一片0.1uF的陶瓷电容为芯片的电源端滤波。在做PCB时,这片电容应靠近芯片的VCC与GND。TLC549的模拟输入量有电位器分压和外部输入,通过单刀双掷开关选择。外部输入的模拟量可以是信号源输出,音频输入等。AA「区YcAy图3-5AD变换图第9页共63页LED显示图如图3-6所示,我用五位LED显示模拟电压值。它可以提供0.0001的显示精度。这五位LED由一位独立LED和一个四LED组组成。这五个LED采用扫描方式显示。扫描显示是LED显示的常用方法。通过五个PNP管控制五个LED分时发光,时隙为32ms。在此时隙下,人眼不会察觉到LED分别点亮,而是同时在亮。此法不仅节省七段译码驱动芯片和FPGA的管脚,而且节约电能。小数点的位置固定不变:因此只需将独立LED的小数点设计为常亮。LED数码管采用共阳极,公共端接PP发射极,PNP集电极接电源,PNP的导通由FPGA控制。七段译码芯片采用DM74LS47,它是一片驱动共阳极LED数码管的芯片。同样,在这片芯片的VCC与GND之间加入0.1uF陶瓷滤波电容和essOyNC 5v In图3-6LED显示图3.3收端系统设计收端系统框图如图3-7所示七段数码管D/A信道收端FPGAED1LED2图3-7收端系统框图
- 2020-12-03下载
- 积分:1