精华内容
下载资源
问答
  • 前面已经在从知乎几个大神那里转载了一些比较通俗易懂的三个公式的推导,现在着重讲一下本人所理解的几个公式之间的相互关系及物理意义。 格林公式其实表达的是能量守恒的关系,比较详细的解释可以参照知乎的这篇...

     最近要推倒波动方程积分解,要对散度、旋度以及他们之间的相互关系有一个理解。看了两天,自己认为理解的差不多了,现在写在这个地方,作为笔记,以后忘记了拿过来看一下,加深一下印象。

    前面已经在从知乎几个大神那里转载了一些比较通俗易懂的三个公式的推导,现在着重讲一下本人所理解的几个公式之间的相互关系及物理意义。

    格林公式其实表达的是能量守恒的关系,比较详细的解释可以参照知乎的这篇文章(https://www.zhihu.com/question/22674439),其主要功能是构建曲线积分和曲面积分的关系,推倒过程简述如下:

    最终可得如下结果:

    将其拓展到三维,就得到斯托克斯公式,其表达式为

    将散度展开,则表达式为

    比较格林公式和斯托克斯公式,可以看到格林公式是斯托克斯公式在xy面上的投影

    不过斯托克斯公式从做功的角度进行理解还是有点太抽象,本来这个公式的产生是为了计算物理中的磁场通量,即电场产生磁场,规定线圈逆时针为正方向,用右手定律可知z方向为磁通量正方向(如上图),而磁通量可以按照曲面形状分别投影到三个坐标平面进行求取,即三个坐标平面的投影面积乘上相对应的磁通量分量,这样理解的话与高斯公式有一定的相似之处(都是计算通量),可以说高斯公式是斯托克斯公式的特殊情况,只是高斯公式构建了三维体积分和闭合曲面积分之间的关系,而斯托克斯公式构建的是面积分和闭合曲线之间的关系(曲面可以不闭合)。这么说可能还是有点抽象,现在给出高斯公式的具体物理意义:

    比如说,闭合曲面中有很多点往外散发能量,现在要求取闭合曲面往外散射的能量(通过闭合曲面的能量),这个时候有两种方法,一种是在闭合曲面上取很小的一个面积乘上这个面积上的强度,按照微积分学的基本思想,在曲面上求取曲面积分,其表达式为

    另外一种方法就是对闭合曲面内中的每个点进行体积分,其表达式为

    这就是高斯公式的表达式。

    将高斯公式与斯托克斯公式进行比较,可以发现

    1. 二者都是描述通量,不同之处在于高斯公式对应有源闭合曲面情况,斯托克斯公式对应无源曲面情况,在此种情况下如果都为闭合曲面,斯托克斯公式对应的通量为零,高斯公式对应的通量非零;
    2. 斯托克斯公式对应的通量是矢量(平行曲面法向方向),高斯公式对应的通量为标量没有方向,这是二者本质区别;

    由以上分析可以知道  高斯公式是斯托克斯公式的特殊形式,在一定情况下斯托克斯公式能退化成高斯公式。

    以上是我对这三个公式的理解,如有不当或者错误的地方,大神们请提出宝贵意见。

    另外插播一条广告,摘抄的方向导数

     

     

     

    现在我们来讨论函数在一点沿某一方向的变化率问题.

    定义 设函数在点的某一邻域内有定义.自点引射线.设轴正向到射线的转角为(逆时针方向:0;顺时针方向:0),并设'(+△,+△)为上的另一点且'∈.我们考虑函数的增量(+△,+△)-'两点间的距离的比值.当'沿着趋于时,如果这个比的极限存在,则称这极限为函数在点沿方向的方向导数,记作,即

                                  (1)

    从定义可知,当函数在点的偏导数x、y存在时,函数在点沿着轴正向=轴正向=的方向导数存在且其值依次为x、y,函数在点沿轴负向=轴负向=的方向导数也存在且其值依次为-x、-y.

    关于方向导数的存在及计算,我们有下面的定理.

    定理  如果函数在点是可微分的,那末函数在该点沿任一方向的方向导数都存在,且有

                                                        (2)

    其中轴到方向的转角.

    证  根据函数在点可微分的假定,函数的增量可以表达为

               

    两边各除以,得到

                         

    所以                 

    这就证明了方向导数存在且其值为

                               

     

    完毕

    展开全文
  • 下标t1t_1t1​表示方法为t_1,左右加$,如果下标是个字符不能直接标,要用花括号{}括起来 分数怎么打?用\frac,后面加{}把分子分母区分:\frac{分子}{分母}

    1. 下标t1t_1表示方法为t_1,左右加$,如果下标是多个字符不能直接标,要用花括号{}括起来

     $t_1$
    

    t1t_1

    $t_{xyz}$
    

    txyzt_{xyz}
    2. 分数怎么打?
    用\frac,后面加{}把分子分母区分:\frac{分子}{分母}

     $\frac{x}{y}$
    

    xy\frac{x}{y}

    3. LaTeX 公式过长怎么办:

    • 方法一,缩小公式,前后加\small;
    $xyz$
    

    xyzxyz

    $\small xyz \small$
    

    xyz\small xyz \small

    • 方法二,分行
    D&=D_1+D_2+D_3+D_4+D_5\\
    & +D_6+D_7+D_8
    

    第一行等号前加&,行尾加\,第二行行首加&即可

    展开全文
  • 介绍 分子式 −1xi-\frac{1}{x_i... 【csdn使用小技巧】如何将已经发布的文章重新移入分类专栏 【csdn使用小技巧】怎样让你的csdn博客被更人关注 【csdn使用小技巧】怎样用latex公式写出分子式、求和、积分、连符号

    介绍

    分子式 1xi-\frac{1}{x_i}的写法如下:

    $-\frac{1}{x_i}$
    

    frac表示fraction分数

    求和号 i=1Nxi\sum_{i=1}^N x_i的写法如下:

    $\sum_{i=1}^N X_i$
    

    sum表示summation和

    积分号 i=1Nxi\int_{i=1}^N x_i的写法如下:

    $\int_{i=1}^N x_i$
    

    int表示integration积分

    连乘号 i=1Nxi\prod_{i=1}^N x_i的写法如下:

    $\prod_{i=1}^N x_i$
    

    prod表示production积
    英文方便记忆,关键是常用则熟练。

    您的鼓励是我创作的源泉,如果你有收获,点个赞吧👍

    除此以外,我还陆续更新了其他相关的使用技巧。如果看到这里的话,说明你有认真看这篇文章,希望你能有所收获!最后,欢迎交流指正!
    【csdn使用小技巧】如何将已经发布的文章重新移入分类专栏
    【csdn使用小技巧】怎样让你的csdn博客被更多人关注
    【csdn使用小技巧】怎样用latex公式写出分子式、求和、积分、连乘符号

    展开全文
  • 本文将会使用大量的图片和公式推导通俗易懂地讲解RNN,LSTM,Seq2Seq和attention注意力机制,希望帮助初学者更好掌握且入门。 目录 RNN LSTM Seq2Seq 注意力机制 参考 RNN(递归神经网络) 我们知道人类并不是从零...

    本文将会使用大量的图片和公式推导通俗易懂地讲解RNN,LSTM,Seq2Seq和attention注意力机制,希望帮助初学者更好掌握且入门。

    目录

    • RNN
    • LSTM
    • Seq2Seq
    • 注意力机制
    • 参考

    RNN(递归神经网络)

    我们知道人类并不是从零开始思考东西,就像你读这篇文章的时候,你对每个字的理解都是建立在前几个字上面。你读完每个字后并不是直接丢弃然后又从零开始读下一个字,因为你的思想是具有持续性的,很多东西你要通过上下文才能理解。

    然而传统的神经网络并不能做到持续记忆理解这一点,这是传统神经网络的主要缺点。举个例子,你打算使用传统的神经网络去对电影里每个时间点发生的事情进行分类的时候,传统的神经网络先让不能使用前一个事件去推理下一个事件。

    RNN(递归神经网络)可以解决这个问题。他们是带有循环的神经网络,允许信息在其中保留。

    在上图中,A代表神经网络主体,XtX_t表示网络的输入,hth_t表示网络的输出。循环结构允许信息从当前输出传递到下一次(下个时间点)的网络输入。

    这些循环让递归神经网络看起来有点神秘,然而如果你再思考一下,RNN其实和传统的神经网络并没有太多的不同。RNN可以看作是一个网络的多次拷贝,其中每次网络的输出都是下一次的输入。我们可以思考一下我们如果展开这个循环结构会是什么样的:

    这种像是链状的网络结构表明RNN和序列以及列表有着天然的联系,他们是处理这些序列数据的天然的神经网络。而且很明显我们可以看出,输入输出的序列是具有相同的时间长度的,其中的每一个权值都是共享的(不要被链式形状误导,本质上只有一个cell)。

    在最近的几年,RNN在很多问题上都取得了成功:比如语音识别,语音模型,翻译,图片注释等等,但是RNN存在着梯度消息/爆炸以及对长期信息不敏感的问题,所以LSTM就被提出来了。现在很多问题的成功都必须归功于LSTM,它是递归神经网络的一种,它在许多的任务中表现都比普通的RNN更好,所以接下来我们来探索一下这个神奇的网络。

    LSTM

    长期依赖问题

    人们希望RNN可以将一些之前的信息连接到当前的任务中来,比如使用之前的视频帧来帮助理解当前帧。如果RNN可以做到将会非常有用。那实际RNN能做到吗?这要视情况而定。

    有时候,我们只需要当前的信息来完成当前的任务。举个例子,一个语音模型试图基于之前的单词去预测下一个单词。如果我们尝试预测“the clouds are in the sky”,我们不需要太多的上下文信息——很明显最后一个单词会是sky。在像这样不需要太多的相关信息的场合下,RNN可以学习到之前使用的信息。

    但是我们要注意,也有很多场景需要使用更多的上下文。当我们试图去预测“I grew up in France… I speak fluent French”这句话的最后一个单词,最近的信息会表明这应该是一种语言的名字,但是如果我们需要知道具体是哪一种语语言,我们需要France这个在句子中比较靠前的上下文信息,相关信息和需要预测的点的间隔很大的情况是经常发生的。

    不幸的是,随着间隔变大,RNN变得无法连接到太前的信息。

    理论上RNN完全可以处理这种长期依赖(long-term dependencies)的问题。人们可以通过小心地选择参数来解决这个问题。令人悲伤的是,实践表明RNN并不能很好地解决这个问题,Hochreiter (1991) [German] and Bengio, et al. (1994)发现了RNN为什么在这些问题上学习很困难的原因。

    而LSTM则没有这个问题。

    LSTM网络

    长期短期记忆网络-通常叫做LSTM-是一种特殊结构的RNN,它能够学习长期依赖。它在大量的问题有惊人的效果,现在已经被广泛使用。

    LSTM被明确设计来避免长期依赖问题,记住长时间的信息对LSTM来说只是常规操作,不像RNN那样费力不讨好。

    所有的RNN都有不断重复网络本身的链式形式。在标准的RNN中,这个重复复制的模块只有一个非常简单的结果。例如一个tanh层:

    LSTM也有这样的链式结构,但是这个重复的模块和上面RNN重复的模块结构不同:LSTM并不是只是增加一个简单的神经网络层,而是四个,他们以一种特殊的形式进行交互:

    读者不需要担心看不懂,接下来我们将会一步步理解这个LSTM图。首先我们先了解一下图中的符号:

    在上图中,每条线表示一个向量,从一个输出节点到其他节点的输入节点。粉红色的圆圈表示逐点式操作,就像向量加法。黄色的盒子是学习好的神经网络层。线条合代表联结,线条分叉则表示内容被复制到不同的地方。

    LSTM背后的核心思想

    LSTM的核心之处就是它的cell state(神经元状态),在下图中就是那条贯穿整个结果的水平线。这个cell state就像是一个传送带,他只有很小的线性作用,但却贯穿了整个链式结果。信息很容易就在这个传送带上流动但是状态却不会改变。cell state上的状态相当于长期记忆,而下面的hth_t则代表短期记忆。

    LSTM有能力删除或者增加cell state中的信息,这一个机制是由被称为门限的结构精心设计的。

    门限是一种让信息选择性通过的方式,它们是由sigmoid神经网络层和逐点相乘器做成的。

    sigmoid层输出0和1之间的数字来描述一个神经元有多少信息应该被通过。输出0表示这些信息全部不能通过,而输出1则表示让所有信息都通过。

    一个LSTM有三个这样的门限,去保护和控制神经元的状态。

    一步步推导LSTM

    LSTM的第一步就是决定什么信息应该被神经元遗忘。这是一个被称为“遗忘门层”的sigmod层组成。他输入ht1h_{t-1}XtX_t(上一次的输出以及这轮的输入),然后在Ct1C_{t-1}的每个神经元状态输出0和1之间的数字。同理1表示完全保留这些信息,0表示完全遗忘这个信息。

    让我们再次回到一开始举的例子:根据之前的词语去预测下一个单词的语言模型。在这个问题中,cell state或许包括当前主语中的性别信息,所以我们可以使用正确的代词。而当我们看到一个新的主语(输入),我们会去遗忘之前的性别信息。我们使用下图中的公式计算我们的“遗忘系数”ftf_t

    下一步就是决定我们要在cell state中保留什么信息。这包括两个部分。首先,一个被称为“输入门层”的sigmoid层会决定我们要更新的数值。然后一个tanh层生成一个新的候选数值CtC_t^~,它会被增加到cell state中。在下一步中,我们将会组合这两步去生成一个新的更新状态值。

    在那个语言模型例子中,我们想给cell state增加主语的性别,来替换我们将要遗忘的旧的主语。

    现在是时候去更新旧的神经元状态Ct1C_{t-1}到新的神经元状态CtC_t。之前我们已经决定了要做什么,下一步我们就去做。

    我们给旧的状态乘一个遗忘系数ftf_t,来遗忘掉我们之前决定要遗忘的信息,然后我们增加itCti_t * C_t。这是新的候选值,由我们想多大程度更新每个状态的值决定。

    在语言模型中,就像上面描述的,这是我们实际上要丢弃之前主语的性别信息,增加新的主语的性别信息的地方。

    最后,我们需要决定我们要输出什么。这个输出是建立在我们的cell state的基础上,但是这里会有一个滤波器。首先,我们使用sigmoid层决定哪一部分的神经元状态需要被输出;然后我们让cell state经过tanh(让输出值变成-1到1之间)层并且乘上sigmod门限的输出,这样我们就只输出我们想要输出的。

    对于那个语言模型的例子,当我们看到一个新的主语的时候,或许我们想输出相关动词的信息,因为动词是跟在主语后面的。例如,它或许要输出主语是单数还是复数的,然后我们就知道主语后动词的语态了。

    LSTM的一些变体

    上面讲的都是一些常规的LSTM,但并不是所有的LSTM都是上面这种形式。实际上现在很多包含LSTM的论文都有小的差异,但是它值得一提。

    Gers & Schmidhuber (2000)引入了一个流行的LSTM变体,它增加了一个窥视孔连接。这意味着我们让门限层监视cell state的状态。

    上图中给每一个门限都增加了窥视孔,但是有些论文只是给一部分的门限增加窥视孔,并不是全部都加上。

    另外一个变体是使用组合遗忘和输入门,而不是分开决定哪些神经元需要遗忘信息,哪些需要增加新的信息,我们组合起来决定。我们只遗忘那些需要被放入新信息的状态,同样我们旨在旧信息被遗忘之后才输入新的信息。

    一个更神奇的LSTM变体是门递归单元(也就是大家常说的GRU),它组合遗忘门和输入门为一个更新门,它合并了cell state和隐层状态,并且做了一些其他的改变。最终这个模型比标准的LSTM更简单,并且变得越来越流行。

    这里只介绍了几个最有名的LSTM的变体,还有更多变体没有介绍,就像Yao, et al.(2015)深度门递归神经网络(Depth Gated RNNs)。这里也有一些处理长期依赖问题问题的完全不同的方法,就像Koutnik, et al(2014)提出的时钟机递归神经网络(Clockwork RNNs)。

    结论

    我们一开始提到人们使用RNN取得了卓越的成果,但其实本质上都是使用LSTM取得的,他们的确在多数任务上表现得更好。

    写下来一系列等式以后,LSTM看起来挺吓人,但在文中一步步解释后它变得可以理解了。我们不禁想问:是否有比LSTM更好的模型?学者一致认为:那就是attention注意力机制。核心观点就是让RNN每一步都监视一个更大的信息集合并从中挑选信息。例如:如果你使用RNN去为一个图像生成注释,它会从图像中挑选一部分去预测输出的单词。接下来在讲解attention之前,我们会先聊聊Seq2Seq。

    Seq2Seq

    我将会结合一个机器翻译的例子来给大家形象地介绍Seq2Seq。

    在这个例子中,我们试图将英语转换为德语,这里要注意这里是一个多对多的模型,而且输入和输出的长度都不固定。

    准备数据


    因为只是做一个例子,所以我们在www.manythings.org/anki/这个网站选一个小规模的数据来训练一个简单的Seq2Seq即可,我们可以看到左边是英语句子,右边则是翻译的德语句子。

    我们先进行一下预处理,比如把大写字母变成小写,把标点符号去掉等等。

    预处理完之后我们要做tokenization,即把一句话分成很多个单词或者字符,这里要注意做tokenization的时候要用两个tokenization,英语用一个,德语用一个;tokenization之后要建立两个字典,一个英语字典,一个德语字典,后面会解释我为什么要这么做。

    tokenization可以是char-level,也可以是word-level,顾名思义前者就是会把一句话分为一个个字符,而后者则会把一句话分成一个个单词,为了简单方便,我们使用char-level来说明。

    经过tokenization之后一句话变成了一个list,每个元素都是一个字符,但实际中一般都使用word-level,因为他们的数据集足够大,这在之后会解释。

    我们前面说了tokenization要用两个不同的字典,这是因为不同的语言它的字母表不同,无法进行统一的映射,如上图所示。

    如果你使用word-level,那就更有必要使用两个不同的字典,比如很多德语单词在英语字典中是找不到的,而且不同语言分词方便也是不一样的。

    左边是英语字典,包括26个字母和一个空格符,德语字典删去了一些不常用字母后再加入空格符,另外可以发现德语字典多了一个起始符和一个终止符,这里用什么都行,只要别跟字典字符冲突就可以,后面大家就知道这两个符号的作用。

    tokenization结束之后每句话就变成了一个字符字典,然后原字符经过字典映射后就变成了下面这个序列,对于德语也是一样。

    接下来我们还可以把这些数字变成One-hot向量表示,黑色表示1,白色表示0。经过One-hot每个字符就变成了一个向量,每句话就变成了一个矩阵,这就是我们的输入,现在数组准备好了,我们来搭建我们的Seq2Seq模型。

    搭建并训练Seq2Seq模型

    Seq2Seq有一个编码器和一个解码器,编码器一般是LSTM或者其他模型用于提取特征,它的最后一个输出就是从这句话得出的最后的特征,而其他的隐层输出都被丢弃。

    编码器提取特征之后就到了解码器,解码器靠编码器最后输出的特征也就是(h,c)(h,c)来知道这句话是"go away",这里要强调一下Decoder的初始状态就是Encoder的最后一个状态,现在Decoder开始输出德语字母,这里Decoder也是一个LSTM模型,他每次接受一个输入然后输出下一个字母的概率,第一个输入必须是起始符,这就是我们为什么要在德语字典中要加入起始符的原因。Decoder会输出一个概率分布p向量,起始符后面的第一个字母是m,我们将m做一个one-hot编码作为y标签,用标签y和预测p做一个CrossEntropy来作为我们的损失函数优化,梯度从Decoder传回Encoder。

    然后输入是两个字符,起始符和m,下一个字母是a,我们将a做one-hot编码作为y标签,将它与我们输出的概率分布做一个CrossEntropy来作为损失函数,一直进行这个循环,应该就很好理解了。

    最后一轮将整句德语作为输入,将停止符做标签y,再进行CrossEntropy,拿所有的英语和德语来训练我们的编码器和解码器,这就是我们的训练过程了。

    总结一下,我们使用英语句子的one-hot矩阵作为encoder的输入,encoder网络由LSTM组成来提取特征,它的输出是最后一个状态hh和传送带cc,decoder网络的初始状态是(h,c)(h,c),decoder网络的输入是德语句子,decoder输出当前状态hh^``,然后全连接层输出下一个字符的预测,这样我们的训练阶段就结束了。

    预测阶段

    同样,我们先把句子输入到我们的Encoder里面,Encoder会输入最后状态(h0,c0)(h_0,c_0),作为这句话的特征送给Decoder。

    (h0,c0)(h_0,c_0)作为Decoder的初始状态,这样解码器就知道这句话是go away,首先把起始符输入,有了新的状态解码器就会把状态更新为(h1,c1)(h_1,c_1)并且预测下一个字符,decoder输出的是每个字符的概率值,我们可以根据这个概率值进行预测,比如我们可以选取概率值最大的字符,也可以对概率进行随机抽样,我可能会得到字符m,于是我把m记录下来。

    现在状态是(h1,c1)(h_1,c_1),把新生成的字符m作为LSTM的输入,接下来再更新状态为(h2,c2)(h_2,c_2),并且输出一个概率分布,根据概率分布抽样我们得到字符a,记录下字符a,并一直进行这个循环。

    运行14轮了状态是(h14,c14)(h_{14},c_{14}),再结合上一轮生成的字符e,根据decoder输出的概率分布抽样,我们抽到了终止符,一旦抽到了终止符,就终止文本生成,并返回记录下的字符串,德语也就被成功翻译了。

    总结

    Seq2Seq模型有一个encoder网络和一个Decoder网络,在我们的例子中encoder的输入是英语句子,每输入一个词RNN就会更新状态并记录下来,encoder最后一个状态就是这个句子的特征,并把之前的状态丢弃。把这个状态作为decoder的初始状态,初始化后decoder就知道这个句子了,首先把起始符作为decoder的输入,然后一步步更新,输出状态和概率分布预测下一个字符,再把预测的字符作为下一个输入,重复这个过程,最后直到预测终止符就返回输出的这个序列。

    如何提升?

    我们的encoder和decoder都是LSTM,encoder把所有句子的特征压缩到最后一个状态,理想情况下encoder最后一个状态包含完整的信息,假如句子很长,那么句子有些信息就会被遗忘,那么Decoder就没有完整的句子信息,那decoder输出的德语句子就不完整。

    一种简单方法就是使用双向LSTM,双向LSTM简单来说就是用两条链,从左到右这条链可能会遗忘最左边的信息,而从右往左的这条链可能会遗忘右边的信息,这样结合起来就不容易遗忘句子信息,这里要注意只是encoder用双向LSTM,decoder是单向LSTM,他要生成正确顺序的序列。

    这次我们用的是char-level比较方便,但是最好还是使用word-level,因为用单词代替字母,序列就会短大概4.5倍,就不容易遗忘,但是用word-level需要大的数据集,得到的单词大概就是一万,one-hot之后向量的维度也就是一万,太大了,需要embedding进行降维,因为embedding参数很多,所以如果数据集不够很容易过拟合。

    另外一种方法改进就是multi-Task learning,我们还可以多加入几个任务,比如让英语句子让他自己翻译成英语句子,这样encoder只有一个但是数据多了一倍,这样encoder就能被训练的更好,当然你还可以添加其他语言的任务,通过借助其他语言更好训练encoder,这样虽然decoder没有变得更好,但是因为encoder提取的更好最后效果也会变好。

    当然还有一个方法就是使用注意力机制,这个对机器翻译提高作用很大,我们接下来就讲解这个注意力机制。

    注意力机制

    我们知道Seq2Seq模型有一个缺点就是句子太长的话encoder会遗忘,那么decoder接受到的句子特征也就不完全,我们看一下下面这个图,纵轴BLUE是机器翻译的指标,横轴是句子的单词量,我们可以看出用了attention之后模型的性能大大提升。

    用了注意力机制,Decoder每次更新状态的时候都会再看一遍encoder所有状态,还会告诉decoder要更关注哪部分,这也是attention名字的由来。但是缺点就是计算量很大。

    attention原理

    在encoder结束之后,attention和decoder同时工作,回忆一下,decoder的初始状态s0s_0是encoder最后一个状态,不同于常规的Seq2Seq,encoder所有状态都要保留,这里需要计算s0s_0与每个状态的相关性,我使用αi=aligh(hi,s0)\alpha_i = aligh(h_i,s_0)这个公式表示计算两者相关性,把结果即为αi\alpha_i,记做Weight,encoder有m个状态,所以一共有m个α\alpha,这里所有的值都是介于0和1的实数,全部加起来为1。

    下面看一下怎么计算这个相似性。第一种方法是把hih_iSoS_o做concat得到更高的向量,然后求矩阵W与这个向量的乘积,得到一个向量,然后再将tanh作用于向量每一个元素,将他压到-1和1之间,最后计算向量V与刚才计算出来的向量的内积,这里的向量V和矩阵W都是参数,需要从训练数据里学习,算出m个α\alpha后,需要对他们做一个softmax变换,把输出结果记做α1\alpha_1αm\alpha_m,因为是softmax输出,所以他们都大于0相加为1,这是第一篇attention论文提出计算的方法,往后有很多其他计算的方法,我们来介绍一种更常用的方法。

    输入还是hih_iS0S_0,第一步是分别使用两个参数矩阵WkW_kWqW_q做线性变换,得到kik_iq0q_0这两个向量,这两个参数矩阵要从训练数据中学习。第二步是计算kik_iq0q_0的内积,由于有m个K向量,所以得到L个αi\alpha_i。第三步就是对这些值做一个softmax变换,α1\alpha_1αm\alpha_m,因为是softmax输出,所以他们都大于0相加为1。这种计算方法被Transformer模型采用,Transformer模型是当前很多nlp问题采用的先进模型。

    刚才讲了两种方法来计算hih_iS0S_0的相关性,现在我们得到了m个相关性α\alpha,每个α\alpha对应每个状态hih_i,有了这些权重α\alpha我们可以对m个状态计算加权平均,得到一个Context vector C0C_0。每一个Context vector都会对应一个decoder状态sis_i

    接下来我们来看一下decoder是怎么计算新的状态的。我们来回顾一下,假如不用attention,我们是这样更新状态的,新的状态S1S_1是旧状态S0S_0与新输入X1X_1^``的函数,看一下下图左边的公式,将两者做concat,然后乘上权重矩阵加上偏置b,最后通过tanh就是我们的新状态,也就是说状态的更新仅仅是根据上一个状态,并不会看encoder的状态。用attention的话更新状态还要用到我们计算出的Context vector C0C_0,把三个参数一起做concat后更新。

    回忆一下,C0C_0是所有encoder状态hih_i的加权平均,所以C0C_0知道输入X1X_1XmX_m的完整信息,decoder新的状态S1S_1依赖于C0C_0,这样RNN遗忘的问题就解决了。下一步则是计算context vector C1C_1,跟之前一样,先计算权重αi\alpha_i,这里是计算S1S_1跟之前encoder所有状态的相关性,得到了m个α\alpha,注意一下这里的权重也是要更新的,上一轮算的是跟s0s_0的相关性现在算的是跟S1S_1的相关性,这样就可以通过加权平均计算出新的C1C_1

    Decoder接受新的输入X2X_2,还是用那个公式计算出新状态,然后一直循环下去直到结束。

    我们知道在这个过程中我们会计算出很多权重αi\alpha_i,我们思考一下我们究竟计算了多少个α\alpha?想要计算出一个context vectorCjC_j,我们要计算出m个相似性权重α\alpha,所以每轮更新都需要计算m个权重,假如一共有t个state,那么一共就要计算m×t个权重,也就是encoder和decoder数量的乘积。attention为了不遗忘,代价就是高数量级的计算。

    权重α\alpha的实际意义

    这张图下面是encoder,上面是decoder,attention会把decoder所有状态与encoder所有状态计算相似性,也就是α\alpha.在这张图中每条线就对应一个α\alpha,线越粗说明相关性越高。

    比如下面,法语中的zone就是英语的Area,所以两者的线就很粗。

    总结

    这次仅仅是从机器翻译的角度介绍了attention的一个应用,还有一些比如self-attention,Transformer应用,希望以此为印子能够打开读者attention的大门。

    参考

    1.colah’s bloghttp://colah.github.io/posts/2015-08-Understanding-LSTMs/

    2.CS583 https://github.com/wangshusen/DeepLearning

    展开全文
  • 欧拉公式推导

    千次阅读 多人点赞 2019-04-26 11:37:13
    1. ...学习了一下欧拉公式,果然很神奇,用到了自然常数e,圆周率π,虚数i,三角函数sin/cos,指数,还有泰勒展开.倒不是算法有难,只是涉及基础太,经常被卡住,总结如下. 2.  ...
  • 贝叶斯公式:  提到贝叶斯公式,首先需要从条件概率说起,因为他们都是基于条件概率发展而来的,既然条件概率那么重要,那么什么是条件概率呢?  条件概率是概率论中的一个重要而时用的概念,生活中我们总是无...
  • 泰勒公式

    千次阅读 2016-06-12 14:57:14
    泰勒公式 编辑 锁定 在数学中,泰勒公式是一个用函数在某点的信息描述其附近取值的公式。如果函数足够平滑的话,在已知函数在某一点的各阶导数值的情况之下,泰勒公式可以用这些导数值做系数构建一个多项式来...
  • 如果需要条件,符合条件1:初级,且符合条件2:去掉空值 可以用下面两种方法实现 =MEDIAN(IF(($B$4:$B$18=E4)*($C$4:$C$18>0),$C$4:$C$18)) 条件 true*true 表示and (true在数值运算里作为1,false作为...
  • 海伦公式

    千次阅读 2017-04-13 15:41:59
    海伦公式  S=√[p(p-a)(p-b)(p-c)] 而公式里的p为半周长: p=(a+b+c)/2 与海伦在他的著作"Metrica"(《度量论》)中的原始证明不同,在此我们用三角公式公式变形来证明。设三角形的三边a、b、c...
  • 最完美的公式——欧拉公式

    万次阅读 多人点赞 2018-08-22 09:45:49
    学习了一下欧拉公式,果然很神奇,用到了自然常数e,圆周率π,虚数i,三角函数sin/cos,指数,还有泰勒展开.倒不是算法有难,只是涉及基础太,经常被卡住,总结如下. 2. 泰勒展开 泰勒展开是用多项式逼近...
  • 泰勒公式到欧拉公式的推导

    千次阅读 2019-07-19 09:25:59
    一、泰勒公式 1.1泰勒公式的意义 对于一些较复杂的函数,为了便于研究,往往希望用一些简单的函数来近似表达。对于精度要求较高且需要估计误差的时候就必须用高次多项式来近似表达函数,同时给出误差公式。...
  • markdown中的数学公式简要

    万次阅读 2017-04-24 13:26:36
    在CSDN的博客开始支持Markdown编辑器后,自己完全转向了markdown编辑器。 ......看一下Markdown中书写数学公式的三招两式吧
  • LaTeX插入数学公式

    万次阅读 2018-10-25 22:01:51
    form:... LaTeX 中插入数学公式 一、常用的数学符号 1、小写希腊字母 \alpha \nu \beta \xi \gamma o \delta \pi \epsilon ...
  • 一、信道概述 1. 信道:以传输媒质为基础的信号通道。 分类 狭义信道:根据传输媒质:有线(恒参信道)/无线(随参...信道本身特性不良为无源干扰,性干扰。 2. 电磁波的特性 低频电磁波主要束缚在有形的导...
  • 一步一步理解欧拉公式

    万次阅读 多人点赞 2019-06-30 12:50:03
    这篇文章 不保证你看了后一定会明白 欧拉公式,那么数学专业的人深入浅出讲得比我好多了。但提供一种 从不明白到明白经过的一些步骤。如果你按这些步骤一步一步去做,先搞清什么,再搞清什么(可以从别的文章/知乎...
  • 如何在Markdown中写公式

    千次阅读 2017-12-15 18:52:53
    在很主流的博客网站,github等地方都会用到Markdown的语法,比如CSDN。我们在写博客的时候,会有想要写公式的情况,这时候我们怎么把公式漂亮的写在博客里面呢?下面介绍三种还算方便的方法: Online LaTex ...
  • 概率论---全概率公式和贝叶斯公式

    千次阅读 2018-11-08 19:34:04
    (一)全概率公式 先给全概率公式一个通俗一点的解释:一个工厂要生产一批零件,这批零件由B1,B2,...也就是说全概率公式要求的是一个整体事件的概率,这个事件由个部分(车间)来组成,要求这个事件的概率就等于...
  • 梯度下降法和泰勒公式

    千次阅读 2019-05-22 19:24:21
    第一部分:泰勒公式 在高数中,引出相关需求,其描述如下: 对于一些较复杂的函数,为了便于研究,往往希望用一些简单的函数来近似表达。由于用多项式表示的函数,只要对自变量进行...所以说,泰勒公式是使用项...
  • 概率论只不过是把常识用数学公式表达了出来。——拉普拉斯记得读本科的时候,最喜欢到城里的计算机书店里面去闲逛,一逛就是好几个小时;有一次,在书店看到一本书,名叫贝叶斯方法。当时数学系的课程还没有学到概率...
  • 卡特兰数公式

    千次阅读 2017-07-21 18:29:32
    开始我是一个一个试试的,但是如果序列较时,这种情况并不好计算。看了下底下的大神解析,说是用卡特兰数公式可以很快解决,所以就找来了这篇博文。 1.什么是卡特兰数 卡特兰数的递归公式是:F(n)=∑(k=1,2...n)...
  • Bias公式

    千次阅读 2013-09-27 14:28:57
    在合成或者其他需要让值“偏高”或者“偏低”的时候有很方法,比如gain就是简单的上一个因子,offset就是加上一个数,但如果把0和1固定,让中间偏高偏低,现在最常用的莫过于gamma。好处一方面是两端(0和1)是...
  • PID公式通俗理解

    千次阅读 多人点赞 2019-07-25 17:11:59
    PID调节是有方法、有规律可循的,不过在此之前先深入理解其公式。 别怕,先看认真看PID本体: 其中: u(t) -------------输出曲线,pid输出值随时间的变化曲线 Kp --------------比例系数 e(t)------------- ...
  • Latex特殊符号、公式、颜色整合

    万次阅读 多人点赞 2018-10-10 13:57:44
    Latex特殊符号、公式整合 文章目录Latex特殊符号、公式整合花体希腊字母括号/点/运算符/箭头公式 花体 命令 示例 \mathscr {abcdefghigklmnopqrstuvwxyz} abcdefghigklmnopqrstuvwxyz\mathscr...
  • 欧拉公式——真正的宇宙第一公式

    千次阅读 2018-11-30 21:00:00
    欧拉公式是数学里最令人着迷的公式之一,它将数学里最重要的几个常数联系到了一起:两个超越数:自然对数的底e,圆周率π;两个单位:虚数单位i和自然数的单位1,以及数学里常见的...
  • 算法之_欧拉公式

    千次阅读 2017-06-01 17:59:40
    学习了一下欧拉公式,果然很神奇,用到了自然常数e,圆周率π,虚数i,三角函数sin/cos,指数,还有泰勒展开.倒不是算法有难,只是涉及基础太,经常被卡住,总结如下. 2. 泰勒展开 泰勒展开是用多项式逼近原...
  • Latex 数学公式入门

    千次阅读 2016-07-26 19:27:45
    包括CSDN的markdown编辑器在内的很markdown编辑器都支持Latex的数学公式编辑,所以整理一份基础常用的Latex公式代码,备查。
  • 点乘公式推导

    千次阅读 2012-07-03 15:45:31
    多公式推导都用到它,所以特地查了下,结果在gamedev上找到了答案。 其实很简单,wiki上说点乘的定义式是dot(a,b) = sum(a1*b1,a2*b2,...),简单的二维就是dot(a,b) = a1*b1+a2*b2. 现在由它推导出最上面的公式...
  • Maple 公式推导

    万次阅读 2014-12-24 16:05:37
    Maple 公式推导  2012-03-24 13:07:35| 分类: 学习 | 标签:maple  |举报 |字号 订阅 即以此功德,庄严佛净土。上报四重恩,下救三道苦。惟愿见闻者,悉发菩提心。在世富贵全,往生极乐国...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,016
精华内容 19,206
关键字:

多乘多的公式