精华内容
下载资源
问答
  • LSTM公式及理解

    万次阅读 多人点赞 2019-01-25 22:34:22
    \tilde{C}(t) = f(W \cdot x(t) + V \cdot y(t - 1)) C ~ ( t ) = f ( W ⋅ x ( t ) + V ⋅ y ( t − 1 ) ) (其实就是当前输入和上一时序输出加权求和) 神经元当前时序的输出: y ( t ) = f ( c ( t ) ) y(t) = f...

    LSTM的基本结构及推导

    这部分内容基本都是来自Step-by-step to LSTM: 解析LSTM神经网络设计原理,只是摘录了部分内容并添加了一些贫僧的想法。

    LSTM公式与结构

    LSTM(Long Short Term Memory,长短期记忆,注意这里的“长短期”,后面会提到是什么意思)的作者是个有点奇怪的人1,他的名字是Jürgen Schmidhuber(发音也挺奇怪)。LSTM的作者很有意思,如果读者感兴趣的话可以自己去看看相关资料(一定要去看作者本人的个人网站)。

    接下来我们直接看LSTM,放一张网络上极为常见的图:

    在这里插入图片描述

    图片来自Understanding LSTM Networks,(丑的要死的)红色字体是贫僧加的。

    注意图中hidden state(短期记忆)和cell state(长期记忆)的传递,以及输出其实就是 h t h_t ht

    然后就是LSTM的计算公式:
    输入门:
    i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) i_t = \sigma (W_i \cdot [h_{t-1}, x_t] + b_i) it=σ(Wi[ht1,xt]+bi)
    遗忘门:
    f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f_t = \sigma (W_f \cdot [h_{t-1}, x_t] + b_f) ft=σ(Wf[ht1,xt]+bf)
    C t ~ = tanh ⁡ ( W C ⋅ [ h t − 1 , x t ] + b C ) \tilde{C_t} = \tanh{(W_C \cdot [h_{t-1}, x_t] + b_C)} Ct~=tanh(WC[ht1,xt]+bC)
    输出门:
    o t = σ ( W o [ h t − 1 , x t ] + b o ) o_t = \sigma (W_o [h_{t-1}, x_t] + b_o) ot=σ(Wo[ht1,xt]+bo)
    两种记忆:
    长记忆: C t = f t ∗ C t − 1 + i t ∗ C t ~ C_t = f_t * C_{t-1} + i_t * \tilde{C_t} Ct=ftCt1+itCt~
    短记忆: h t = o t ∗ tanh ⁡ ( C t ) h_t = o_t * \tanh(C_t) ht=ottanh(Ct)

    LSTM最重要的概念就是三个门:输入、输出、遗忘门;以及两个记忆:长记忆C、短记忆h。只要弄懂了这三个门两种记忆就可以弄明白LSTM了。这里先留个印象就行,接下来我们展开来讲。

    从RNN、长时记忆说起

    接下来我们直接进入正题,首先我们先从LSTM的父类RNN(循环神经网络,重点在循环)说起。提出RNN的目的是为了解决一个问题:LSTM以前的神经网络没有记忆,无法根据之前的输入来预测出输出。那怎么给神经网络加上记忆
    记忆就是过去发生的事情,那么如果神经网络现在的输出受到过去输入的影响,是不是就可以说神经网络拥有了记忆?于是就有了这样的神经网络:

    y ( t ) = f ( X ( t ) ⋅ W + y ( t − 1 ) ⋅ V + b ) y(t) = f(X(t) \cdot W + y(t - 1) \cdot V + b) y(t)=f(X(t)W+y(t1)V+b)

    这就是无隐藏层的循环神经网络,结构如下:

    在这里插入图片描述
    上图来自Step-by-step to LSTM: 解析LSTM神经网络设计原理,一如既往, x x x是输入, y y y是输出。此图与上面的公式无关,只是作为“过去的输入能够影响现在的输出”的例子,意会即可

    注意,上图中的圆圈(神经“圆”)共享权重 W W W V V V,即上面画的神经元都是同一个神经元,只是代表同一个神经元在不同时序时候的状态。所有数据依次通过同一个cell然后cell不断更新自己权重2。RNN都这样,后面会详细说明的LSTM也是这样。这里的“时序”就是常说的time step的单个step。time step通常就是一个句子的长度3;如果是batch的话那time step就是batch中最长句子的长度,其余的句子会通过pad来进行补齐(例如补充0作为pad,这部分是工程细节,不是重点)。

    正是因为上图中神经元共享同样的权重,所以就有了“记忆”。为什么可以称为是“记忆”呢?可以用人日常的思考方式来帮助理解。假设您(又一次)在人生的道路上迷路了,您会4

    1. 看看现在走到了哪里
    2. 回忆一下之前走过的路
    3. 结合1和2的信息来决定该继续往哪里走

    而这里的回忆一定是模糊而抽象的地形图,您通常不会回忆细节,例如路上某颗树的具体形状。而上图中的神经网络就是这样工作的,它将上一个时序的输出传给了下一个时序的神经元,而神经元做的处理就是用 V V V来乘 y ( t − 1 ) y(t - 1) y(t1),相当于是从上一个输出中抽象出(或者说提取出)了部分信息来作为当前决策的辅助工具。因此,我们的神经网络在某种程度上就具备了记忆

    把所谓的“经过抽象的信息”用隐结点 h h h表示就可以得到:
    在这里插入图片描述
    这就是standard RNN。

    总结一下:通过对上一个时序的神经元的输出提取抽象信息,并与输入一同输入进神经元中,就可以赋予神经元【记忆】。

    抽象化信息

    定义抽象化了的信息为: c ~ ( t ) = f ( W ⋅ x ( t ) + V ⋅ y ( t − 1 ) ) \tilde{c}(t) = f(W \cdot x(t) + V \cdot y(t - 1)) c~(t)=f(Wx(t)+Vy(t1))(先这么定义,后面会解释,反正记住 c ~ \tilde{c} c~是经过抽象化之后的信息就是了)。定义好抽象化信息是定义好了,问题来了,怎么装进到长时记忆单元?

    将抽象出来的信息装载进长时记忆单元

    有两种装载方法:

    1. 乘进去
    2. 加进去

    这里我们用加法,具体为什么及相关推导过程可以看Step-by-step to LSTM: 解析LSTM神经网络设计原理,这里略要提一下结果。乘法更多是作为对信息控制的操作(类似阀门和放大器的组合);加法则是新信息和旧信息叠加的操作(其实这也挺符合常识,所以这里没有作太多解释)。此外,LSTM中长时记忆单元最怕的就是梯度爆炸和消失,如果用乘法的话就会导致梯度/爆炸的速度更快(具体推导过程看Step-by-step to LSTM: 解析LSTM神经网络设计原理,主要是贫僧不想敲公式了。。。反正不难)。总而言之,因为加法更适合做信息叠加,而乘法更适合做控制和scaling,所以我们使用加法来加载新的信息到记忆中。

    装载信息: C ( t ) = C ( t − 1 ) + C ~ ( t ) C(t) = C(t - 1) + \tilde{C}(t) C(t)=C(t1)+C~(t)
    抽象出来的信息: C ~ ( t ) = f ( W ⋅ x ( t ) + V ⋅ y ( t − 1 ) ) \tilde{C}(t) = f(W \cdot x(t) + V \cdot y(t - 1)) C~(t)=f(Wx(t)+Vy(t1))(其实就是当前输入和上一时序输出加权求和)
    神经元当前时序的输出: y ( t ) = f ( c ( t ) ) y(t) = f(c(t)) y(t)=f(c(t)) f ( …   ) f(\dots) f()是激活函数)

    但是如果只是不加选择地往记忆中添加信息,那么记忆中的有用信息会被无用的信息埋没,所以我们应该只往记忆中添加需要的信息。我们通过添加输入门来实现对信息进行挑选。

    输入门

    这么做其实很简单,只需要对新信息添加控制的阀门就可以了,所以这里要用到乘法:

    C ( t ) = C ( t − 1 ) + g i n ⋅ C ~ ( t ) C(t) = C(t - 1) + g_{in} \cdot \tilde{C}(t) C(t)=C(t1)+ginC~(t)

    g i n g_{in} gin就是输入门,取值0~1。因为取值0~1,所以通常使用sigmoid函数作为激活函数,所以 g i n = s i g m o i d ( …   ) g_{in} = \mathrm{sigmoid}(\dots) gin=sigmoid()

    通常记忆单元是 n × m n \times m n×m的矩阵,而 g i n g_{in} gin也是 n × m n \times m n×m的矩阵。同时, g i n g_{in} gin起阀门的作用,所以需要通过element-wise的相乘来控制装载与否,我们通常用 ⨂ \bigotimes 来表示这种操作。最后得到的公式:

    C ( t ) = C ( t − 1 ) + g i n ⨂ C ~ ( t ) C(t) = C(t - 1) + g_{in} \bigotimes \tilde{C}(t) C(t)=C(t1)+ginC~(t)

    不过输入门只在必要的时候开启,所以大部分情况下上述公式可以等价为: C ( t ) = C ( t − 1 ) C(t) = C(t - 1) C(t)=C(t1),这样就可以降低梯度爆炸/消失出现的可能性(因为这就相当于是不添加任何东西直接一直将同样的记忆往后传)。

    遗忘门

    如果输入门一直打开,就会有大量的信息涌入到记忆中,导致记忆 C C C的值变得非常大。因为输出是 y ( t ) = f ( C ( t ) ) y(t) = f(C(t)) y(t)=f(C(t)),而且通常激活函数选的是sigmoid、tanh这种激活函数,那么就会导致激活函数的输出饱和。例如tanh,在输入值很大的时候梯度基本消失了:

    在这里插入图片描述

    所以就需要添加个遗忘的机制来将记忆中的信息剔除,这个记忆就是遗忘门。遗忘门其实就是个阀门,所以这里还是用乘法实现:

    C ( t ) = g f o r g e t C ( t − 1 ) + g i n ⨂ C ~ ( t ) C(t) = g_{forget}C(t - 1) + g_{in} \bigotimes \tilde{C}(t) C(t)=gforgetC(t1)+ginC~(t)

    输出门

    在处理事情的时候,通常人只会让其中一部分跟当前人母当前时刻相关的脑细胞输出,所以我们设计的神经网络也一样,要添加个输出门来控制负责输出的脑细胞:

    y ( t ) = g o u t ⨂ f ( C ( t ) ) y(t) = g_{out} \bigotimes f(C(t)) y(t)=goutf(C(t))

    Peephole(猫眼)

    不要看错成“pee hole”了。

    回到正题,当输出门因为某种原因关闭的时候就会导致记忆 C ( t ) C(t) C(t)被截断,这样每一个时序中门只受当前时刻的外部输入 x ( t ) x(t) x(t)控制了。为了解决这个问题就是直接把长时记忆单元接入到各个们,即接入 C ( t − 1 ) C(t - 1) C(t1)到遗忘、输入门,把 C ( t ) C(t) C(t)接入到输出门(因为信息流动到输出门时长时记忆已经计算完了,具体可以看最上面的图)。最后我们得到的公式就是:

    g i n ( t ) = s i g m o i d ( W ⋅ x ( t ) ) + V ⋅ y ( t − 1 ) + U ⋅ C ( t − 1 ) ) g_{in}(t) = \mathrm{sigmoid}(W \cdot x(t)) + V \cdot y(t - 1) + U \cdot C(t - 1)) gin(t)=sigmoid(Wx(t))+Vy(t1)+UC(t1))
    g f o r g e t ( t ) = s i g m o i d ( W ⋅ x ( t ) + V ⋅ y ( t − 1 ) + U ⋅ C ( t − 1 ) ) g_{forget}(t) = \mathrm{sigmoid}(W \cdot x(t) + V \cdot y(t - 1) + U \cdot C(t - 1)) gforget(t)=sigmoid(Wx(t)+Vy(t1)+UC(t1))
    g o u t ( t ) = s i g m o i d ( W ⋅ x ( t ) + V ⋅ y ( t − 1 ) + U ⋅ C ( t ) ) g_{out}(t) = \mathrm{sigmoid}(W \cdot x(t) + V \cdot y(t - 1) + U \cdot C(t)) gout(t)=sigmoid(Wx(t)+Vy(t1)+UC(t))

    这些后来添加的连接叫做“Peephole”。

    总结下现在得到的网络:

    长时记忆:
    C ( t ) = g f o r g e t C ( t − 1 ) + g i n ⨂ C ~ ( t ) C(t) = g_{forget}C(t - 1) + g_{in} \bigotimes \tilde{C}(t) C(t)=gforgetC(t1)+ginC~(t)
    C ~ ( t ) = f ( W ⋅ x ( t ) + V ⋅ y ( t − 1 ) ) \tilde{C}(t) = f(W \cdot x(t) + V \cdot y(t - 1)) C~(t)=f(Wx(t)+Vy(t1))
    y ( t ) = g o u t ⨂ f ( C ( t ) ) y(t) = g_{out} \bigotimes f(C(t)) y(t)=goutf(C(t))

    g i n ( t ) = s i g m o i d ( W ⋅ x ( t ) ) + V ⋅ y ( t − 1 ) + U ⋅ C ( t − 1 ) ) g_{in}(t) = \mathrm{sigmoid}(W \cdot x(t)) + V \cdot y(t - 1) + U \cdot C(t - 1)) gin(t)=sigmoid(Wx(t))+Vy(t1)+UC(t1))
    g f o r g e t ( t ) = s i g m o i d ( W ⋅ x ( t ) + V ⋅ y ( t − 1 ) + U ⋅ C ( t − 1 ) ) g_{forget}(t) = \mathrm{sigmoid}(W \cdot x(t) + V \cdot y(t - 1) + U \cdot C(t - 1)) gforget(t)=sigmoid(Wx(t)+Vy(t1)+UC(t1))
    g o u t ( t ) = s i g m o i d ( W ⋅ x ( t ) + V ⋅ y ( t − 1 ) + U ⋅ C ( t ) ) g_{out}(t) = \mathrm{sigmoid}(W \cdot x(t) + V \cdot y(t - 1) + U \cdot C(t)) gout(t)=sigmoid(Wx(t)+Vy(t1)+UC(t))

    引入短时记忆/隐藏层

    直接用隐藏层单元 h h h代替最终输出 y y y,可得:

    C ( t ) = g f o r g e t ⨂ C ( t − 1 ) + g i n ⨂ C ~ ( t ) C(t) = g_{forget} \bigotimes C(t - 1) + g_{in} \bigotimes \tilde{C}(t) C(t)=gforgetC(t1)+ginC~(t)
    C ~ ( t ) = f ( W ⋅ x ( t ) + V ⋅ h ( t − 1 ) ) \tilde{C}(t) = f(W \cdot x(t) + V \cdot h(t - 1)) C~(t)=f(Wx(t)+Vh(t1))
    h ( t ) = g o u t ⨂ f ( C ( t ) ) h(t) = g_{out} \bigotimes f(C(t)) h(t)=goutf(C(t))
    y ( t ) = h ( t ) y(t) = h(t) y(t)=h(t)

    g i n ( t ) = s i g m o i d ( W ⋅ x ( t ) ) + V ⋅ h ( t − 1 ) + U ⋅ C ( t − 1 ) ) g_{in}(t) = \mathrm{sigmoid}(W \cdot x(t)) + V \cdot h(t - 1) + U \cdot C(t - 1)) gin(t)=sigmoid(Wx(t))+Vh(t1)+UC(t1))
    g f o r g e t ( t ) = s i g m o i d ( W ⋅ x ( t ) + V ⋅ h ( t − 1 ) + U ⋅ C ( t − 1 ) ) g_{forget}(t) = \mathrm{sigmoid}(W \cdot x(t) + V \cdot h(t - 1) + U \cdot C(t - 1)) gforget(t)=sigmoid(Wx(t)+Vh(t1)+UC(t1))
    g o u t ( t ) = s i g m o i d ( W ⋅ x ( t ) + V ⋅ h ( t − 1 ) + U ⋅ C ( t ) ) g_{out}(t) = \mathrm{sigmoid}(W \cdot x(t) + V \cdot h(t - 1) + U \cdot C(t)) gout(t)=sigmoid(Wx(t)+Vh(t1)+UC(t))

    由于h随时都可以被输出门截断,所以我们可以很感性的把h理解为短时记忆单元。
    而从数学上看的话,更是短时记忆了,因为梯度流经h的时候,经历的是h(t)->c(t)->h(t-1)的连环相乘的路径(在输入输出门关闭前),显然如前边的数学证明中所述,这样会发生梯度爆炸和消失,而梯度消失的时候就意味着记忆消失了,即h为短时记忆单元。
    同样的思路可以再证明一下,由于梯度只从c走的时候,存在一条无连环相乘的路径,可以避免梯度消失。又有遗忘门避免激活函数和梯度饱和,因此c为长时记忆单元。
    (引用自Step-by-step to LSTM: 解析LSTM神经网络设计原理

    最后,我们就得到了LSTM(长短时记忆神经网络)。

    参考

    Step-by-step to LSTM: 解析LSTM神经网络设计原理:这一篇必须看,很接地气,本篇博文绝大部分内容借鉴了这篇文章的内容(某种程度上本博客就是这篇文章的笔记)
    Understanding LSTM Networks:很多图片来自这篇文章(例如LSTM相关的基本都来自这篇文章)
    理解LSTM Networks:上面这篇文章的翻译
    难以置信!LSTM和GRU的解析从未如此清晰(动图+视频)


    1. 每个人都在使用LSTM,主流学术圈却只想让它的发明者闭嘴 ↩︎

    2. LSTM神经网络输入输出究竟是怎样的? ↩︎

    3. 此处假设您是将句子拆分成词并且一个词一个词地喂给循环神经网络 ↩︎

    4. 此处例子改自Step-by-step to LSTM: 解析LSTM神经网络设计原理,看不懂这个例子的话看这篇 ↩︎

    展开全文
  • 梯度下降算法原理讲解——机器学习

    万次阅读 多人点赞 2019-01-21 20:27:48
    2.3 数学解释 首先给出数学公式: Θ 1 = Θ 0 + α ▽ J ( Θ ) → e v a l u a t e d a t Θ 0 {\color{Red} \Theta^1} = {\color{Blue} \Theta^0} + {\color{Green} \alpha} {\color{Purple} \triangledown J(\...

    1. 概述

    梯度下降(gradient descent)在机器学习中应用十分的广泛,不论是在线性回归还是Logistic回归中,它的主要目的是通过迭代找到目标函数的最小值,或者收敛到最小值。
    本文将从一个下山的场景开始,先提出梯度下降算法的基本思想,进而从数学上解释梯度下降算法的原理,解释为什么要用梯度,最后实现一个简单的梯度下降算法的实例!

    2. 梯度下降算法

    2.1 场景假设

    梯度下降法的基本思想可以类比为一个下山的过程。
    假设这样一个场景:一个人被困在山上,需要从山上下来(找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径就无法确定,必须利用自己周围的信息一步一步地找到下山的路。这个时候,便可利用梯度下降算法来帮助自己下山。怎么做呢,首先以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着下降方向走一步,然后又继续以当前位置为基准,再找最陡峭的地方,再走直到最后到达最低处;同理上山也是如此,只是这时候就变成梯度上升算法了
    在这里插入图片描述

    2.2 梯度下降

    梯度下降的基本过程就和下山的场景很类似。

    首先,我们有一个可微分的函数。这个函数就代表着一座山。我们的目标就是找到这个函数的最小值,也就是山底。根据之前的场景假设,最快的下山的方式就是找到当前位置最陡峭的方向,然后沿着此方向向下走,对应到函数中,就是找到给定点的梯度 ,然后朝着梯度相反的方向,就能让函数值下降的最快!因为梯度的方向就是函数之变化最快的方向(在后面会详细解释)
    所以,我们重复利用这个方法,反复求取梯度,最后就能到达局部的最小值,这就类似于我们下山的过程。而求取梯度就确定了最陡峭的方向,也就是场景中测量方向的手段。那么为什么梯度的方向就是最陡峭的方向呢?接下来,我们从微分开始讲起:

    2.2.1 微分

    看待微分的意义,可以有不同的角度,最常用的两种是:

    • 函数图像中,某点的切线的斜率
    • 函数的变化率
      几个微分的例子:

    1.单变量的微分,函数只有一个变量时

    d ( x 2 ) d x = 2 x \frac{d(x^2)}{dx}=2x dxd(x2)=2x

    d ( − 2 y 5 ) d y = − 10 y 4 \frac{d(-2y^5)}{dy}=-10y^4 dyd(2y5)=10y4

    d ( 5 − θ ) 2 d θ = − 2 ( 5 − θ ) \frac{d(5-\theta )^2}{d\theta}=-2(5-\theta) dθd(5θ)2=2(5θ)

    2.多变量的微分,当函数有多个变量的时候,即分别对每个变量进行求微分

    ∂ ∂ x ( x 2 y 2 ) = 2 x y 2 \frac{\partial}{\partial x}(x^2y^2) = 2xy^2 x(x2y2)=2xy2

    ∂ ∂ y ( − 2 y 5 + z 2 ) = − 10 y 4 \frac{\partial}{\partial y}(-2y^5+z^2) = -10y^4 y(2y5+z2)=10y4

    ∂ ∂ θ 2 ( 5 θ 1 + 2 θ 2 − 12 θ 3 ) = 2 \frac{\partial}{\partial \theta_{2}}(5\theta_{1} + 2\theta_{2} - 12\theta_{3}) = 2 θ2(5θ1+2θ212θ3)=2

    ∂ ∂ θ 2 ( 0.55 − ( 5 θ 1 + 2 θ 2 − 12 θ 3 ) ) = − 2 \frac{\partial}{\partial \theta_{2}}(0.55 - (5\theta_{1} + 2\theta_{2} - 12\theta_{3})) = -2 θ2(0.55(5θ1+2θ212θ3))=2

    2.2.2 梯度

    梯度实际上就是多变量微分的一般化。
    下面这个例子:

    J ( Θ ) = 0.55 − ( 5 θ 1 + 2 θ 2 − 12 θ 3 ) J(\Theta ) = 0.55 - (5\theta_{1} + 2\theta_{2} - 12\theta_{3}) J(Θ)=0.55(5θ1+2θ212θ3)

    ▽ J ( Θ ) = < ∂ J ∂ θ 1 , ∂ J ∂ θ 2 , ∂ J ∂ θ 3 > = ( − 5 , − 2 , 12 ) \triangledown J(\Theta ) = \left < \frac{\partial J}{\partial \theta_{1}}, \frac{\partial J}{\partial \theta_{2}},\frac{\partial J}{\partial \theta_{3}} \right > =(-5,-2,12) J(Θ)=θ1J,θ2J,θ3J=(5,2,12)

    我们可以看到,梯度就是分别对每个变量进行微分,然后用逗号分割开,梯度是用<>包括起来,说明梯度其实一个向量。

    梯度是微积分中一个很重要的概念,之前提到过梯度的意义

    • 在单变量的函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率
    • 在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向

    这也就说明了为什么我们需要千方百计的求取梯度!我们需要到达山底,就需要在每一步观测到此时最陡峭的地方,梯度就恰巧告诉了我们这个方向。梯度的方向是函数在给定点上升最快的方向,那么梯度的反方向就是函数在给定点下降最快的方向,这正是我们所需要的。所以我们只要沿着梯度的方向一直走,就能走到局部的最低点!

    2.3 数学解释

    首先给出数学公式:

    Θ 1 = Θ 0 + α ▽ J ( Θ ) → e v a l u a t e d a t Θ 0 {\color{Red} \Theta^1} = {\color{Blue} \Theta^0} + {\color{Green} \alpha} {\color{Purple} \triangledown J(\Theta)}\rightarrow evaluated at \Theta^0 Θ1=Θ0+αJ(Θ)evaluatedatΘ0

    此公式的意义是:J是关于Θ的一个函数,我们当前所处的位置为Θ0点,要从这个点走到J的最小值点,也就是山底。首先我们先确定前进的方向,也就是梯度的反向,然后走一段距离的步长,也就是α,走完这个段步长,就到达了Θ1这个点!
    在这里插入图片描述

    2.3.1 α

    α在梯度下降算法中被称作为学习率或者步长,意味着我们可以通过α来控制每一步走的距离,以保证不要步子跨的太大扯着蛋,哈哈,其实就是不要走太快,错过了最低点。同时也要保证不要走的太慢,导致太阳下山了,还没有走到山下。所以α的选择在梯度下降法中往往是很重要的!α不能太大也不能太小,太小的话,可能导致迟迟走不到最低点,太大的话,会导致错过最低点!

    2.3.2 梯度要乘以一个负号

    梯度前加一个负号,就意味着朝着梯度相反的方向前进!我们在前文提到,梯度的方向实际就是函数在此点上升最快的方向!而我们需要朝着下降最快的方向走,自然就是负的梯度的方向,所以此处需要加上负号;那么如果时上坡,也就是梯度上升算法,当然就不需要添加负号了。

    3. 实例

    我们已经基本了解了梯度下降算法的计算过程,那么我们就来看几个梯度下降算法的小实例,首先从单变量的函数开始,然后介绍多变量的函数。

    3.1 单变量函数的梯度下降

    我们假设有一个单变量的函数

    J ( θ ) = θ 2 J(\theta) = \theta^2 J(θ)=θ2

    函数的微分,直接求导就可以得到

    J ′ ( θ ) = 2 θ J'(\theta) = 2\theta J(θ)=2θ

    初始化,也就是起点,起点可以随意的设置,这里设置为1

    θ 0 = 1 \theta^0 = 1 θ0=1

    学习率也可以随意的设置,这里设置为0.4

    α = 0.4 \alpha = 0.4 α=0.4

    根据梯度下降的计算公式

    Θ 1 = Θ 0 + α ▽ J ( Θ ) → e v a l u a t e d a t Θ 0 {\color{Red} \Theta^1} = {\color{Blue} \Theta^0} + {\color{Green} \alpha} {\color{Purple} \triangledown J(\Theta)}\rightarrow evaluated at \Theta^0 Θ1=Θ0+αJ(Θ)evaluatedatΘ0

    我们开始进行梯度下降的迭代计算过程:

    θ 0 = 1 \theta^0 = 1 θ0=1

    θ 1 = θ 0 − α ∗ J ′ ( θ 0 ) = 1 − 0.4 ∗ 2 = 0.2 \theta^1 = \theta^0 - \alpha*J'(\theta^0)=1 - 0.4*2 = 0.2 θ1=θ0αJ(θ0)=10.42=0.2

    θ 2 = θ 1 − α ∗ J ′ ( θ 1 ) = 0.2 − 0.4 ∗ 0.4 = 0.04 \theta^2 = \theta^1 - \alpha*J'(\theta^1)= 0.2 - 0.4*0.4=0.04 θ2=θ1αJ(θ1)=0.20.40.4=0.04

    θ 3 = 0.008 \theta^3 = 0.008 θ3=0.008

    θ 4 = 0.0016 \theta^4 = 0.0016 θ4=0.0016

    如图,经过四次的运算,也就是走了四步,基本就抵达了函数的最低点,也就是山底
    在这里插入图片描述

    3.2 多变量函数的梯度下降

    我们假设有一个目标函数

    J ( Θ ) = θ 1 2 + θ 2 2 J(\Theta) = \theta_{1}^2 + \theta_{2}^2 J(Θ)=θ12+θ22

    现在要通过梯度下降法计算这个函数的最小值。我们通过观察就能发现最小值其实就是 (0,0)点。但是接下来,我们会从梯度下降算法开始一步步计算到这个最小值!
    我们假设初始的起点为:

    Θ 0 = ( 1 , 3 ) \Theta^0 = (1, 3) Θ0=(1,3)

    初始的学习率为:

    α = 0.1 \alpha = 0.1 α=0.1

    函数的梯度为:

    ▽ J ( Θ ) = < 2 θ 1 , 2 θ 2 > \triangledown J(\Theta ) = \left < 2\theta_{1},2\theta_{2} \right > J(Θ)=2θ1,2θ2

    进行多次迭代:

    Θ 0 = ( 1 , 3 ) \Theta^0 = (1, 3) Θ0=(1,3)

    Θ 1 = Θ 0 − α ▽ J ( Θ ) = ( 1 , 3 ) − 0.1 ∗ ( 2 , 6 ) = ( 0.8 , 2.4 ) \Theta^1 = \Theta^0 - \alpha\triangledown J(\Theta ) = (1,3) - 0.1*(2, 6)=(0.8, 2.4) Θ1=Θ0αJ(Θ)=(1,3)0.1(2,6)=(0.8,2.4)

    Θ 2 = ( 0.8 , 2.4 ) − 0.1 ∗ ( 1.6 , 4.8 ) = ( 0.64 , 1.92 ) \Theta^2 = (0.8, 2.4) - 0.1*(1.6, 4.8)=(0.64, 1.92) Θ2=(0.8,2.4)0.1(1.6,4.8)=(0.64,1.92)

    Θ 3 = ( 0.5124 , 1.536 ) \Theta^3 =(0.5124, 1.536) Θ3=(0.5124,1.536)

    Θ 4 = ( 0.4096 , 1.228800000000001 ) \Theta^4 =(0.4096, 1.228800000000001) Θ4=(0.4096,1.228800000000001)
    ⋮ \vdots
    Θ 10 = ( 0.1073741824000003 , 0.32212254720000005 ) \Theta^{10} =(0.1073741824000003, 0.32212254720000005) Θ10=(0.1073741824000003,0.32212254720000005)
    ⋮ \vdots
    Θ 50 = ( 1.141798154164342 e − 05 , 3.42539442494306 e − 05 ) \Theta^{50} =(1.141798154164342e^{-05}, 3.42539442494306e^{-05}) Θ50=(1.141798154164342e05,3.42539442494306e05)
    ⋮ \vdots
    Θ 100 = ( 1.6296287810675902 e − 10 , 4.8888886343202771 e − 10 ) \Theta^{100} =(1.6296287810675902e^{-10}, 4.8888886343202771e^{-10}) Θ100=(1.6296287810675902e10,4.8888886343202771e10)

    我们发现,已经基本靠近函数的最小值点
    在这里插入图片描述

    4. 代码实现

    4. 1 场景分析

    下面我们将用python实现一个简单的梯度下降算法。场景是一个简单的线性回归的例子:假设现在我们有一系列的点,如下图所示:
    在这里插入图片描述
    我们将用梯度下降法来拟合出这条直线!

    首先,我们需要定义一个代价函数,在此我们选用均方误差代价函数(也称平方误差代价函数)

    J ( Θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\Theta) = \frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2 J(Θ)=2m1i=1m(hθ(x(i))y(i))2

    此公式中

    • m是数据集中数据点的个数,也就是样本数
    • ½是一个常量,这样是为了在求梯度的时候,二次方乘下来的2就和这里的½抵消了,自然就没有多余的常数系数,方便后续的计算,同时对结果不会有影响
    • y 是数据集中每个点的真实y坐标的值,也就是类标签
    • h 是我们的预测函数(假设函数),根据每一个输入x,根据Θ 计算得到预测的y值,即

    h Θ ( x ( i ) ) = Θ 0 + Θ 1 x 1 ( i ) h_{\Theta}(x^{(i)}) = \Theta_{0} + \Theta_{1}x_{1}^{(i)} hΘ(x(i))=Θ0+Θ1x1(i)

    我们可以根据代价函数看到,代价函数中的变量有两个,所以是一个多变量的梯度下降问题,求解出代价函数的梯度,也就是分别对两个变量进行微分

    ▽ J ( Θ ) = < δ J δ Θ 0 , δ J δ Θ 1 > \triangledown J(\Theta ) = \left < \frac{\delta J}{\delta \Theta_{0}}, \frac{\delta J}{\delta \Theta_{1}} \right > J(Θ)=δΘ0δJ,δΘ1δJ

    δ J δ Θ 0 = 1 m ∑ i = 1 m ( h Θ ( x ( i ) ) − y ( i ) ) \frac{\delta J}{\delta \Theta_{0}} = \frac{1}{m}\sum_{i=1}^{m}(h_{\Theta}(x^{(i)})-y^{(i)}) δΘ0δJ=m1i=1m(hΘ(x(i))y(i))

    δ J δ Θ 1 = 1 m ∑ i = 1 m ( h Θ ( x ( i ) ) − y ( i ) ) x 1 ( i ) \frac{\delta J}{\delta \Theta_{1}} = \frac{1}{m}\sum_{i=1}^{m}(h_{\Theta}(x^{(i)})-y^{(i)})x_{1}^{(i)} δΘ1δJ=m1i=1m(hΘ(x(i))y(i))x1(i)

    明确了代价函数和梯度,以及预测的函数形式。我们就可以开始编写代码了。但在这之前,需要说明一点,就是为了方便代码的编写,我们会将所有的公式都转换为矩阵的形式,python中计算矩阵是非常方便的,同时代码也会变得非常的简洁。
    为了转换为矩阵的计算,我们观察到预测函数的形式

    h Θ ( x ( i ) ) = Θ 0 + Θ 1 x ( i ) h_{\Theta}(x^{(i)}) = \Theta_{0} + \Theta_{1}x^{(i)} hΘ(x(i))=Θ0+Θ1x(i)

    我们有两个变量,为了对这个公式进行矩阵化,我们可以给每一个点x增加一维,这一维的值固定为1,这一维将会乘到Θ0上。这样就方便我们统一矩阵化的计算

    ( x 1 ( i ) , y ( i ) ) → ( x 0 ( i ) , x 1 ( i ) , y ( i ) ) w i t h x 0 ( i ) = 1 ∀ i (x_{1}^{(i)},y^{(i)})\rightarrow (x_{0}^{(i)},x_{1}^{(i)},y^{(i)}) with x_{0}^{(i)} = 1 \forall _{i} (x1(i),y(i))(x0(i),x1(i),y(i))withx0(i)=1i

    然后我们将代价函数和梯度转化为矩阵向量相乘的形式

    J ( Θ ) = 1 2 m ( X Θ − y ⃗ ) T ( X Θ − y ⃗ ) J(\Theta) = \frac{1}{2m}(X\Theta - \vec{y})^{T}(X\Theta - \vec{y}) J(Θ)=2m1(XΘy )T(XΘy )

    ▽ J ( Θ ) = 1 m X T ( X Θ − y ⃗ ) ) \triangledown J(\Theta) = \frac{1}{m}X^{T}(X\Theta - \vec{y})) J(Θ)=m1XT(XΘy ))

    4. 2 代码

    首先,我们需要定义数据集和学习率

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # @Time    : 2019/1/21 21:06
    # @Author  : Arrow and Bullet
    # @FileName: gradient_descent.py
    # @Software: PyCharm
    # @Blog    :https://blog.csdn.net/qq_41800366
    
    from numpy import *
    
    # 数据集大小 即20个数据点
    m = 20
    # x的坐标以及对应的矩阵
    X0 = ones((m, 1))  # 生成一个m行1列的向量,也就是x0,全是1
    X1 = arange(1, m+1).reshape(m, 1)  # 生成一个m行1列的向量,也就是x1,从1到m
    X = hstack((X0, X1))  # 按照列堆叠形成数组,其实就是样本数据
    # 对应的y坐标
    y = np.array([
        3, 4, 5, 5, 2, 4, 7, 8, 11, 8, 12,
        11, 13, 13, 16, 17, 18, 17, 19, 21
    ]).reshape(m, 1)
    # 学习率
    alpha = 0.01
    

    接下来我们以矩阵向量的形式定义代价函数和代价函数的梯度

    # 定义代价函数
    def cost_function(theta, X, Y):
        diff = dot(X, theta) - Y  # dot() 数组需要像矩阵那样相乘,就需要用到dot()
        return (1/(2*m)) * dot(diff.transpose(), diff)
    
    
    # 定义代价函数对应的梯度函数
    def gradient_function(theta, X, Y):
        diff = dot(X, theta) - Y
        return (1/m) * dot(X.transpose(), diff)
    

    最后就是算法的核心部分,梯度下降迭代计算

    # 梯度下降迭代
    def gradient_descent(X, Y, alpha):
        theta = array([1, 1]).reshape(2, 1)
        gradient = gradient_function(theta, X, Y)
        while not all(abs(gradient) <= 1e-5):
            theta = theta - alpha * gradient
            gradient = gradient_function(theta, X, Y)
        return theta
    
    
    optimal = gradient_descent(X, Y, alpha)
    print('optimal:', optimal)
    print('cost function:', cost_function(optimal, X, Y)[0][0])
    

    当梯度小于1e-5时,说明已经进入了比较平滑的状态,类似于山谷的状态,这时候再继续迭代效果也不大了,所以这个时候可以退出循环!
    运行代码,计算得到的结果如下:

    print('optimal:', optimal)  # 结果 [[0.51583286][0.96992163]]
    print('cost function:', cost_function(optimal, X, Y)[0][0])  # 1.014962406233101
    

    通过matplotlib画出图像,

    # 根据数据画出对应的图像
    def plot(X, Y, theta):
        import matplotlib.pyplot as plt
        ax = plt.subplot(111)  # 这是我改的
        ax.scatter(X, Y, s=30, c="red", marker="s")
        plt.xlabel("X")
        plt.ylabel("Y")
        x = arange(0, 21, 0.2)  # x的范围
        y = theta[0] + theta[1]*x
        ax.plot(x, y)
        plt.show()
    
    
    plot(X1, Y, optimal)
    

    所拟合出的直线如下
    在这里插入图片描述
    全部代码如下,大家有兴趣的可以复制下来跑一下看一下结果:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # @Time    : 2019/1/21 21:06
    # @Author  : Arrow and Bullet
    # @FileName: gradient_descent.py
    # @Software: PyCharm
    # @Blog    :https://blog.csdn.net/qq_41800366
    
    from numpy import *
    
    # 数据集大小 即20个数据点
    m = 20
    # x的坐标以及对应的矩阵
    X0 = ones((m, 1))  # 生成一个m行1列的向量,也就是x0,全是1
    X1 = arange(1, m+1).reshape(m, 1)  # 生成一个m行1列的向量,也就是x1,从1到m
    X = hstack((X0, X1))  # 按照列堆叠形成数组,其实就是样本数据
    # 对应的y坐标
    Y = array([
        3, 4, 5, 5, 2, 4, 7, 8, 11, 8, 12,
        11, 13, 13, 16, 17, 18, 17, 19, 21
    ]).reshape(m, 1)
    # 学习率
    alpha = 0.01
    
    
    # 定义代价函数
    def cost_function(theta, X, Y):
        diff = dot(X, theta) - Y  # dot() 数组需要像矩阵那样相乘,就需要用到dot()
        return (1/(2*m)) * dot(diff.transpose(), diff)
    
    
    # 定义代价函数对应的梯度函数
    def gradient_function(theta, X, Y):
        diff = dot(X, theta) - Y
        return (1/m) * dot(X.transpose(), diff)
    
    
    # 梯度下降迭代
    def gradient_descent(X, Y, alpha):
        theta = array([1, 1]).reshape(2, 1)
        gradient = gradient_function(theta, X, Y)
        while not all(abs(gradient) <= 1e-5):
            theta = theta - alpha * gradient
            gradient = gradient_function(theta, X, Y)
        return theta
    
    
    optimal = gradient_descent(X, Y, alpha)
    print('optimal:', optimal)
    print('cost function:', cost_function(optimal, X, Y)[0][0])
    
    
    # 根据数据画出对应的图像
    def plot(X, Y, theta):
        import matplotlib.pyplot as plt
        ax = plt.subplot(111)  # 这是我改的
        ax.scatter(X, Y, s=30, c="red", marker="s")
        plt.xlabel("X")
        plt.ylabel("Y")
        x = arange(0, 21, 0.2)  # x的范围
        y = theta[0] + theta[1]*x
        ax.plot(x, y)
        plt.show()
    
    
    plot(X1, Y, optimal)
    

    5. 小结

    至此,就基本介绍完了梯度下降法的基本思想和算法流程,并且用python实现了一个简单的梯度下降算法拟合直线的案例!
    最后,我们回到文章开头所提出的场景假设:
    这个下山的人实际上就代表了反向传播算法,下山的路径其实就代表着算法中一直在寻找的参数Θ,山上当前点的最陡峭的方向实际上就是代价函数在这一点的梯度方向,场景中观测最陡峭方向所用的工具就是微分 。在下一次观测之前的时间就是有我们算法中的学习率α所定义的。
    可以看到场景假设和梯度下降算法很好的完成了对应!

    本文部分内容来自一位前辈,非常感谢分享!谢谢!

    展开全文
  • 傅里叶变换 二维离散傅里叶变换

    万次阅读 热门讨论 2019-11-07 15:41:28
    1、介绍。 DFT:(Discrete Fourier Transform)离散傅里叶变换是傅里叶变换在时域和频域上都呈离散的形式,将信号的时域采样变换为其DTFT的频域采样。在形式上,变换两端(时域和频域...1)、欧拉公式: ,其中i是...

    1、介绍。

            DFT:(Discrete Fourier Transform)离散傅里叶变换是傅里叶变换在时域和频域上都呈离散的形式,将信号的时域采样变换为其DTFT的频域采样。在形式上,变换两端(时域和频域上)的序列是有限长的,而实际上这两组序列都应当被认为是离散周期信号的主值序列。即使对有限长的离散信号作DFT,也应当将其看作其周期延拓的变换。

    1)、欧拉公式:

    \LARGE \dpi{100} \LARGE e^{\theta i}=cos \theta +(sin \theta )i,其中i是虚数,即i的平方为-1。

     

    2)、二维离散傅里叶变换DFT公式:

    N是二维数组的行数,M是二维数组的列数。u和v是转换后二维数组的位置,F(u,v)是转换后数组中相应位置的值。x和y是原二维数组的位置,f(x,y)是原数组中相应的值。

    展开全文
  • 高斯分布的积分期望E(X)方差V(X)的理论推导) 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 这里是引用 ...

    本文主要推导高斯分布(正态分布)的积分,期望E(X)和方差V(X)。

    其中主要是方差V(X)的推导,本文介绍3种高斯方差的推导方法。

    高斯分布的概率密度函数:
    f ( x ) = 1 2 π δ e − ( x − u ) 2 2 δ 2 (1) f(x) = \frac{1}{\sqrt{2\pi}\delta}{e^{-\frac{(x-u)^2}{2\delta^2}}} \tag{1} f(x)=2π δ1e2δ2(xu)2(1)


    高斯分布的概率分布函数(归一化):
    F = ∫ − ∞ + ∞ f ( x ) d x = ∫ − ∞ + ∞ 1 2 π δ e − ( x − u ) 2 2 δ 2 d x = 1 2 π δ ∫ − ∞ + ∞ e − ( x − u ) 2 2 δ 2 d ( x − u ) = 1 2 π δ ∫ − ∞ + ∞ e − x 2 2 δ 2 d x (2) \begin{aligned} F &=\int^{ +\infty }_{ - \infty }f(x)dx=\int^{ +\infty }_{ - \infty } \frac{1}{\sqrt{2\pi}\delta}{e^{-\frac{(x-u)^2}{2\delta^2}}dx}\\\\ &=\frac{1}{\sqrt{2\pi}\delta}\int^{ +\infty }_{ - \infty } {e^{-\frac{(x-u)^2}{2\delta^2}}d(x-u)}\\\\ &=\frac{1}{\sqrt{2\pi}\delta}\int^{ +\infty }_{ - \infty } {e^{-\frac{x^2}{2\delta^2}}dx} \end{aligned} \tag{2} F=+f(x)dx=+2π δ1e2δ2(xu)2dx=2π δ1+e2δ2(xu)2d(xu)=2π δ1+e2δ2x2dx(2)

    概率密度函数的积分为 F ( x ) = 1 F(x)=1 F(x)=1,如下开始证明。这里直接计算 F ( x ) F(x) F(x)比较困难,但可以利用双重积分转极坐标计算体积的方式计算 F ( x ) 2 F(x)^2 F(x)2,如下
    F 2 = 1 2 π δ ∫ − ∞ + ∞ e − x 2 2 δ 2 d x 1 2 π δ ∫ − ∞ + ∞ e − y 2 2 δ 2 d y = 1 2 π δ 2 ∫ − ∞ + ∞ ∫ − ∞ + ∞ e − x 2 + y 2 2 δ 2 d x d y (3) \begin{aligned} F^2 &=\frac{1}{\sqrt{2\pi}\delta}\int^{ +\infty }_{ - \infty } {e^{-\frac{x^2}{2\delta^2}}dx} \frac{1}{\sqrt{2\pi}\delta}\int^{ +\infty }_{ - \infty } {e^{-\frac{y^2}{2\delta^2}}dy}\\\\ &=\frac{1}{2\pi\delta^2}\int^{ +\infty }_{ - \infty }\int^{ +\infty }_{ - \infty } {e^{-\frac{x^2+y^2}{2\delta^2}}dxdy} \end{aligned} \tag{3} F2=2π δ1+e2δ2x2dx2π δ1+e2δ2y2dy=2πδ21++e2δ2x2+y2dxdy(3)

    x = r sin ⁡ θ x=r\sin\theta x=rsinθ , y = r cos ⁡ θ y=r\cos\theta y=rcosθ , 坐标系转换到极坐标系就行积分
    F 2 = 1 2 π δ 2 ∫ 0 2 π ∫ 0 + ∞ e − r 2 2 δ 2 r d r d θ = 1 2 π δ 2 ∫ 0 2 π d θ ∫ 0 + ∞ e − r 2 2 δ 2 r d r = 1 δ 2 ∫ 0 + ∞ e − r 2 2 δ 2 r d r = ∫ 0 + ∞ e − r 2 2 δ 2 d ( r 2 2 δ 2 ) = ∫ 0 + ∞ e − m d m = 1 (4) \begin{aligned} F^2 &=\frac{1}{2\pi\delta^2}\int^{ 2\pi }_{ 0 }\int^{ +\infty }_{ 0 } {e^{-\frac{r^2}{2\delta^2}}rdrd\theta}\\\\ &=\frac{1}{2\pi\delta^2}\int^{ 2\pi }_{ 0 }d\theta\int^{ +\infty }_{ 0 } {e^{-\frac{r^2}{2\delta^2}}rdr}\\\\ &=\frac{1}{\delta^2}\int^{ +\infty }_{ 0 } {e^{-\frac{r^2}{2\delta^2}}rdr}\\\\ &=\int^{ +\infty }_{ 0 } {e^{-\frac{r^2}{2\delta^2}}d(\frac{r^2}{2\delta^2})}\\\\ &=\int^{ +\infty }_{ 0 } {e^{-m}dm}\\\\ &=1 \end{aligned} \tag{4} F2=2πδ2102π0+e2δ2r2rdrdθ=2πδ2102πdθ0+e2δ2r2rdr=δ210+e2δ2r2rdr=0+e2δ2r2d(2δ2r2)=0+emdm=1(4)

    即可证明得:
    F = ∫ − ∞ + ∞ 1 2 π δ e − ( x − u ) 2 2 δ 2 d x = 1 (5) F =\int^{ +\infty }_{ - \infty } \frac{1}{\sqrt{2\pi}\delta}{e^{-\frac{(x-u)^2}{2\delta^2}}dx}=1\tag{5} F=+2π δ1e2δ2(xu)2dx=1(5)

    注:这里可以由 F 2 = 1 F^2=1 F2=1 看出, F F F为一个2维正态分布,其在二维空间中体积为1


    高斯分布的期望 E ( x ) = u E(x)=u E(x)=u 证明:
    E ( x ) = ∫ − ∞ + ∞ x f ( x ) d x = ∫ − ∞ + ∞ 1 2 π δ e − ( x − u ) 2 2 δ 2 x d x = ∫ − ∞ + ∞ 1 2 π δ e − x 2 2 δ 2 ( x + u ) d x = ∫ − ∞ + ∞ 1 2 π δ e − x 2 2 δ 2 x d x ⏟ 0 + u ∫ − ∞ + ∞ 1 2 π δ e − x 2 2 δ 2 d x ⏟ 1 = u (6) \begin{aligned} E(x)&=\int^{ +\infty }_{ - \infty }xf(x)dx=\int^{ +\infty }_{ - \infty } \frac{1}{\sqrt{2\pi}\delta}{e^{-\frac{(x-u)^2}{2\delta^2}}xdx}\\\\ &=\int^{ +\infty }_{ - \infty } \frac{1}{\sqrt{2\pi}\delta}{e^{-\frac{x^2}{2\delta^2}}(x+u)dx}\\\\ &=\underbrace{\int^{ +\infty }_{ - \infty } \frac{1}{\sqrt{2\pi}\delta}{e^{-\frac{x^2}{2\delta^2}}xdx}}_{0}+u\underbrace{\int^{ +\infty }_{ - \infty } \frac{1}{\sqrt{2\pi}\delta}{e^{-\frac{x^2}{2\delta^2}}dx}}_{1}\\\\ &=u \end{aligned}\tag{6} E(x)=+xf(x)dx=+2π δ1e2δ2(xu)2xdx=+2π δ1e2δ2x2(x+u)dx=0 +2π δ1e2δ2x2xdx+u1 +2π δ1e2δ2x2dx=u(6)

    由于 ∫ − ∞ + ∞ 1 2 π δ e − x 2 2 δ 2 x d x \int^{ +\infty }_{ - \infty } \frac{1}{\sqrt{2\pi}\delta}{e^{-\frac{x^2}{2\delta^2}}xdx} +2π δ1e2δ2x2xdx 为奇函数,积分为0,因此可得高斯分布的期望: E ( x ) = u E(x)=u E(x)=u


    高斯分布的方差 V ( x ) = δ 2 V(x)=\delta^2 V(x)=δ2 证明,根据方差定义为误差平方的期望:
    V = ∫ − ∞ + ∞ ( x − u ) 2 f ( x ) d x = ∫ − ∞ + ∞ 1 2 π δ e − ( x − u ) 2 2 δ 2 ( x − u ) 2 d x = ∫ − ∞ + ∞ 1 2 π δ e − x 2 2 δ 2 x 2 d x (7) \begin{aligned} V&=\int^{ +\infty }_{ - \infty }(x-u)^2f(x)dx\\\\ &=\int^{ +\infty }_{ - \infty } \frac{1}{\sqrt{2\pi}\delta}{e^{-\frac{(x-u)^2}{2\delta^2}}(x-u)^2dx}\\\\ &=\int^{ +\infty }_{ - \infty } \frac{1}{\sqrt{2\pi}\delta}{e^{-\frac{x^2}{2\delta^2}}x^2dx} \end{aligned}\tag{7} V=+(xu)2f(x)dx=+2π δ1e2δ2(xu)2(xu)2dx=+2π δ1e2δ2x2x2dx(7)

    如下介绍3种推导方法,第一种最为复杂的推导,先计算 V 2 V^2 V2
    V 2 = ∫ − ∞ + ∞ 1 2 π δ e − x 2 2 δ 2 x 2 d x ∫ − ∞ + ∞ 1 2 π δ e − y 2 2 δ 2 y 2 d y = 1 2 π δ 2 ∫ − ∞ + ∞ ∫ − ∞ + ∞ e − x 2 + y 2 2 δ 2 x 2 y 2 d x d y (8) \begin{aligned} V^2&=\int^{ +\infty }_{ - \infty } \frac{1}{\sqrt{2\pi}\delta}{e^{-\frac{x^2}{2\delta^2}}x^2dx}\int^{ +\infty }_{ - \infty } \frac{1}{\sqrt{2\pi}\delta}{e^{-\frac{y^2}{2\delta^2}}y^2dy}\\\\ &=\frac{1}{2\pi\delta^2}\int^{ +\infty }_{ - \infty }\int^{ +\infty }_{ - \infty } {e^{-\frac{x^2+y^2}{2\delta^2}}x^2y^2dxdy} \end{aligned}\tag{8} V2=+2π δ1e2δ2x2x2dx+2π δ1e2δ2y2y2dy=2πδ21++e2δ2x2+y2x2y2dxdy(8)

    x = r sin ⁡ θ x=r\sin\theta x=rsinθ , y = r cos ⁡ θ y=r\cos\theta y=rcosθ
    V 2 = 1 2 π δ 2 ∫ 0 2 π ∫ 0 + ∞ r 4 sin ⁡ 2 θ cos ⁡ 2 θ e − r 2 2 δ 2 r d r d θ = 1 2 π δ 2 ∫ 0 2 π sin ⁡ 2 θ cos ⁡ 2 θ d θ ∫ 0 + ∞ r 5 e − r 2 2 δ 2 d r (9) \begin{aligned} V^2&=\frac{1}{2\pi\delta^2}\int^{ 2\pi }_{ 0 }\int^{ +\infty }_{ 0 } {r^4\sin^2\theta \cos^2\theta e^{-\frac{r^2}{2\delta^2}}rdrd\theta}\\\\ &=\frac{1}{2\pi\delta^2}\int^{ 2\pi }_{ 0 } {\sin^2\theta \cos^2\theta d\theta\int^{ +\infty }_{ 0 }r^5e^{-\frac{r^2}{2\delta^2}}dr} \end{aligned}\tag{9} V2=2πδ2102π0+r4sin2θcos2θe2δ2r2rdrdθ=2πδ2102πsin2θcos2θdθ0+r5e2δ2r2dr(9)

    上面两部分可分开计算,首先计算左边关于 θ \theta θ 的积分,由于 sin ⁡ 2 θ = 1 − cos ⁡ 2 θ 2 \sin^2 \theta=\frac{1-\cos2\theta}{2} sin2θ=21cos2θ
    ∫ 0 2 π sin ⁡ 2 θ cos ⁡ 2 θ d θ = 1 4 ∫ 0 2 π sin ⁡ 2 2 θ d θ = 1 4 ∫ 0 2 π 1 − cos ⁡ 4 θ 2 d θ = 1 8 ∫ 0 2 π d θ − 1 8 ∫ 0 2 π cos ⁡ 4 θ d θ = π 4 − 1 32 ∫ 0 8 π cos ⁡ θ d θ = π 4 (10) \begin{aligned} \int^{ 2\pi }_{ 0 } {\sin^2\theta \cos^2\theta d\theta}&=\frac{1}{4}\int^{ 2\pi }_{ 0 }{\sin^22\theta d\theta}\\\\ &=\frac{1}{4}\int^{ 2\pi }_{ 0 }\frac{1-\cos4\theta }{2} d\theta\\\\ &=\frac{1}{8}\int^{ 2\pi }_{ 0 }d\theta-\frac{1}{8}\int^{ 2\pi }_{ 0} {\cos4\theta } d\theta\\\\ &=\frac{\pi}{4}-\frac{1}{32}\int^{ 8\pi }_{ 0} {\cos\theta } d\theta\\\\ &=\frac{\pi}{4} \end{aligned}\tag{10} 02πsin2θcos2θdθ=4102πsin22θdθ=4102π21cos4θdθ=8102πdθ8102πcos4θdθ=4π32108πcosθdθ=4π(10)

    计算右边关于 r r r 的积分,设 m = r 2 m=r^2 m=r2
    ∫ 0 + ∞ r 5 e − r 2 2 δ 2 d r = 1 2 ∫ 0 + ∞ m 2 e − m 2 δ 2 d m = − δ 2 ∫ 0 + ∞ m 2 d ( e − m 2 δ 2 ) = − δ 2 ( m 2 e − m 2 δ 2 ∣ 0 + ∞ − ∫ 0 + ∞ e − m 2 δ 2 d ( m 2 ) ) lim ⁡ m → + ∞ m 2 e − m 2 δ 2 = 0 ⟶ = 2 δ 2 ∫ 0 + ∞ m e − m 2 δ 2 d m = − 4 δ 4 ∫ 0 + ∞ m d ( e − m 2 δ 2 ) = − 4 δ 4 ( m e − m 2 δ 2 ∣ 0 + ∞ − ∫ 0 + ∞ e − m 2 δ 2 d m ) lim ⁡ m → + ∞ m e − m 2 δ 2 = 0 ⟶ = 4 δ 4 ∫ 0 + ∞ e − m 2 δ 2 d m = 8 δ 6 (11) \begin{aligned} \int^{ +\infty }_{ 0 }r^5e^{-\frac{r^2}{2\delta^2}}dr&=\frac{1}{2}\int^{ +\infty }_{ 0 }m^2e^{-\frac{m}{2\delta^2}}dm\\\\ &=-\delta^2\int^{ +\infty }_{ 0 }m^2d(e^{-\frac{m}{2\delta^2}})\\\\ &=-\delta^2 \bigg( m^2e^{-\frac{m}{2\delta^2}}|^{+\infty}_{0}-\int^{ +\infty }_{ 0 }e^{-\frac{m} {2\delta^2}}d(m^2)\bigg)\\\\ \lim_{m\rightarrow+\infty} m^2e^{-\frac{m}{2\delta^2}}=0\longrightarrow&=2\delta^2 \int^{ +\infty }_{ 0 }me^{-\frac{m}{2\delta^2}}dm\\\\ &=-4\delta^4\int^{ +\infty }_{ 0 }md(e^{-\frac{m}{2\delta^2}})\\\\ &=-4\delta^4 \bigg( me^{-\frac{m}{2\delta^2}}|^{+\infty}_{0}-\int^{ +\infty }_{ 0 }e^{-\frac{m} {2\delta^2}}dm\bigg)\\\\ \lim_{m\rightarrow+\infty} me^{-\frac{m}{2\delta^2}}=0\longrightarrow&=4\delta^4 \int^{ +\infty }_{ 0 }e^{-\frac{m}{2\delta^2}}dm\\\\ &=8\delta^6 \end{aligned}\tag{11} 0+r5e2δ2r2drm+limm2e2δ2m=0m+limme2δ2m=0=210+m2e2δ2mdm=δ20+m2d(e2δ2m)=δ2(m2e2δ2m0+0+e2δ2md(m2))=2δ20+me2δ2mdm=4δ40+md(e2δ2m)=4δ4(me2δ2m0+0+e2δ2mdm)=4δ40+e2δ2mdm=8δ6(11)

    因此
    V 2 = 1 2 π δ 2 ∫ 0 2 π sin ⁡ 2 θ cos ⁡ 2 θ d θ ⋅ ∫ 0 + ∞ r 5 e − r 2 2 δ 2 r d r = 1 2 π δ 2 ⋅ π 4 ⋅ 8 δ 6 = δ 4 (12) \begin{aligned} V^2&=\frac{1}{2\pi\delta^2}\int^{ 2\pi }_{ 0 } {\sin^2\theta \cos^2\theta d\theta\cdot\int^{ +\infty }_{ 0 }r^5e^{-\frac{r^2}{2\delta^2}}rdr}\\\\ &=\frac{1}{2\pi\delta^2}\cdot\frac{\pi}{4}\cdot8\delta^6\\\\ &=\delta^4 \end{aligned}\tag{12} V2=2πδ2102πsin2θcos2θdθ0+r5e2δ2r2rdr=2πδ214π8δ6=δ4(12)

    所以 V = δ 2 V=\delta^2 V=δ2,即证。

    如下介绍第二种较为巧妙的推导:
    V = ∫ − ∞ + ∞ 1 2 π δ e − ( x − u ) 2 2 δ 2 ( x − u ) 2 d x = ∫ − ∞ + ∞ 1 2 π δ e − x 2 2 δ 2 x 2 d x = − δ 2 π ∫ − ∞ + ∞ x d ( e − x 2 2 δ 2 ) = − δ 2 π ( x e − x 2 2 δ 2 ∣ − ∞ + ∞ ⏟ 0 − ∫ − ∞ + ∞ e − x 2 2 δ 2 d x ) = δ 2 π ∫ − ∞ + ∞ e − x 2 2 δ 2 d x = δ 2 ⋅ 1 2 π δ ∫ − ∞ + ∞ e − x 2 2 δ 2 d x = δ 2 (13) \begin{aligned} V&=\int^{ +\infty }_{ - \infty } \frac{1}{\sqrt{2\pi}\delta}{e^{-\frac{(x-u)^2}{2\delta^2}}(x-u)^2dx}\\\\ &=\int^{ +\infty }_{ - \infty } \frac{1}{\sqrt{2\pi}\delta}{e^{-\frac{x^2}{2\delta^2}}x^2dx}\\\\ &=-\frac{\delta}{\sqrt{2\pi}}\int^{ +\infty }_{ - \infty } xd\Big(e^{-\frac{x^2}{2\delta^2}}\Big)\\\\ &=-\frac{\delta}{\sqrt{2\pi}}\bigg(\underbrace{xe^{-\frac{x^2}{2\delta^2}}|^{+\infty}_{-\infty}}_{0}-\int^{ +\infty }_{ - \infty }{e^{-\frac{x^2}{2\delta^2}}dx}\bigg)\\\\ &=\frac{\delta}{\sqrt{2\pi}}\int^{ +\infty }_{ - \infty }{e^{-\frac{x^2}{2\delta^2}}dx}\\\\ &=\delta^2 \cdot\frac{1}{\sqrt{2\pi}\delta}\int^{ +\infty }_{ - \infty }{e^{-\frac{x^2}{2\delta^2}}dx}\\\\ &=\delta^2 \end{aligned}\tag{13} V=+2π δ1e2δ2(xu)2(xu)2dx=+2π δ1e2δ2x2x2dx=2π δ+xd(e2δ2x2)=2π δ(0 xe2δ2x2++e2δ2x2dx)=2π δ+e2δ2x2dx=δ22π δ1+e2δ2x2dx=δ2(13)

    第三种证明方法则利用方差特性:
    V ( x ) = E ( ( x − E ( x ) ) 2 ) = E ( x 2 − 2 x E ( x ) + E 2 ( x ) ) = E ( x 2 ) − 2 E ( x ) E ( x ) + E 2 ( x ) = E ( x 2 ) − E 2 ( x ) = E ( x 2 ) − u 2 (14) \begin{aligned} V(x)&=E\Big((x-E(x))^2\Big)\\\\ &=E\Big(x^2-2xE(x)+E^2(x)\Big)\\\\ &=E(x^2)-2E(x)E(x)+E^2(x)\\\\ &=E(x^2)-E^2(x)\\\\ &=E(x^2)-u^2 \end{aligned}\tag{14} V(x)=E((xE(x))2)=E(x22xE(x)+E2(x))=E(x2)2E(x)E(x)+E2(x)=E(x2)E2(x)=E(x2)u2(14)

    这里只需再求取 E ( x 2 ) E(x^2) E(x2) 即可

    期望 E ( x ) E(x) E(x) 的另一个叫法是分布函数的 一阶矩 ,而 E ( x 2 ) E(x^2) E(x2) 也叫 二阶矩,这里就是求概率分布的二阶矩

    E ( x 2 ) = ∫ − ∞ + ∞ 1 2 π δ e − ( x − u ) 2 2 δ 2 x 2 d x (15) E(x^2)=\int^{ +\infty }_{ - \infty } \frac{1}{\sqrt{2\pi}\delta}{e^{-\frac{(x-u)^2}{2\delta^2}}x^2dx}\tag{15} E(x2)=+2π δ1e2δ2(xu)2x2dx(15)

    参考第二种证明的方法,可以比较快速的得到:

    E ( x 2 ) = δ 2 + u 2 (16) E(x^2)=\delta^2+u^2\tag{16} E(x2)=δ2+u2(16)

    从而可得 V ( x ) = E ( x 2 ) − u 2 = δ 2 V(x)=E(x^2)-u^2=\delta^2 V(x)=E(x2)u2=δ2 , 即证明。

    感悟:三种方法证明完成,最近在看《概率机器人》,里面所有理论基础都是概率贝叶斯,索性重新推导了高斯分布,发现高斯分布真是一个伟大的发现,用一个如此优雅的曲线描绘这个世界的创造规律,从而让所有的不确定性可以被估计和优化,打开了人类与上帝对话的一个窗口,窥探上帝的造物规律。

    参考文献:

    https://blog.csdn.net/qq_37549266/article/details/95942282
    https://www.zhihu.com/question/23971601

    展开全文
  • $ V_{t+1} =w \cdot V_t +c_1r_1\cdot(pBest-X_t) +c_2r_2\cdot(gBest-X_t) $ X t + 1 = X t + V t + 1 X_{t+1} = X_t+V_{t+1} X t + 1 ​ = X t ​ + V t + 1 ​ $其中 , t:代数 , X是位置,V是速度,...
  • MySQL的跨年周统计问题(%X-%V

    千次阅读 2017-01-14 15:09:23
    MySQL的跨年周统计问题 最近在做项目的时候,发现了一个报表在进行周统计并且跨年的时候会出现问题,具体问题截图如下:(主要与%X-%V的时间格式符有关)2016-12-18 ~~ 2017-01-13 周统计 图12015-12-20 ~~ 2016-01-...
  • Latex之数学公式基本使用格式

    万次阅读 2018-05-16 19:55:11
    Latex之数学公式基本使用格式 一. 数学公式格式背景介绍 TEX有两种数学公式,一种是夹杂在行文段落中的公式,一般称为行内(inline) 数学公式,或正文(in-tex:t)数学公式;另一种就是像单独占据整行居中展示出来的...
  • 离散数学学习笔记【第一篇】

    千次阅读 多人点赞 2019-04-03 23:33:15
    在命题公式中,对于分量指派真值的各种可能组合,就确定了这个命题公式的各种真值情况,把它汇列成表,就是命题公式的 真值表 。 定义 1 - 4.2 给定两个命题公式 A A A 和 B B B ,设 P 1 , P 2 , ⋯ &...
  • 卷积公式介绍

    千次阅读 2021-04-15 13:12:20
     若f(x)f(x)f(x)与h(x)h(x)h(x)有界且可积,一维函数卷积连续形式g(x)=f(x)∗h(x)=∫−∞+∞f(ξ)h(x−ξ)dξ\begin{aligned}g(x)&=f(x)*h(x)\\ &=\int^{+\infty}_{-\infty}f(\xi)h(x-\xi)d\xi\end{aligned...
  • 二维联合分布(X,Y)求(U,V)

    千次阅读 2016-11-09 12:41:46
    二维联合分布(X,Y)求(U,V)@(概率论)问:从F(x,y)是否可以求得f(x,y)? 是不是只有相互独立时,由f(x,y)=fX(x)fY(y)f(x,y) = f_X(x)f_Y(y)得到。其中,fX(x)=FX′(x)f_X(x) = F_X\prime(x),而FX′(x)=limy→∞F(x,y)F_X...
  • 协方差cov(X),cov(X,Y);变异系数c.v

    万次阅读 2019-09-20 11:37:27
    目录协方差 cov(x)- x 为一个样本向量- x 为一个样本矩阵协方差 cov(x,y)变异系数 c.v 首先看看 均值,样本方差,样本协方差 公式区别 其中样本方差公式中为什么除的n-1而不是n,样本协方差同样除的是n-1而不是n...
  • 粒子群算法及其改进算法

    万次阅读 多人点赞 2019-07-01 19:27:08
    式(6)是二阶微分方程,通过二阶微分方程求解公式,求得搜索位置在 t 代的 x(t)的位置路径公式: xi(t)=C1 cos( φ1+φ2t)+C2 sin( φ1+φ2t) (7) 由式(7)可知,xi(t) 在一个固定区间内波动,即在 该区间中...
  • 粒子群优化算法(PSO)python 3实现

    万次阅读 多人点赞 2019-06-10 20:31:20
    粒子通过下面的公式来更新自己速度和位置: 速度变换公式: vi+1=w∗vi+c1∗rand1∗(pbesti−xi)+c2∗rand2∗(gbesti−xi)v_{i+1}=w*v_i+c_1*rand_1*(pbest_i-x_i)+c_2*rand_2*(gbest_i-x_i)vi+1​=w∗vi​+c1​∗...
  • 维度公式

    千次阅读 2018-01-24 14:43:39
    维度公式 如果 V1,V2V_1, V_2 是线性空间 VV 的两个有限维子空间,那么 dim(V1)+dim(V2)=dim(V1+V2)+dim(V1∩V2)\dim (V_1) + \dim (V_2) = \dim (V_1 + V_2) + \dim (V_1 \cap V_2) 证明: 设 V1,V2V_1, V_2 的...
  • 泰勒公式的展开细节解析

    万次阅读 多人点赞 2017-08-05 08:58:22
    如果函数f(x)在(x_0,x)上可导,[x_0,x]上连续,则必有一ξ∈[x_0,x]使得: f(x)=f(x_0)+f^ \prime(\varepsilon)(x-x_0) 按照这个思路展开,既然在直观的1阶导数情形下,拉格朗日中值定理拥有的几何意义,...
  • 转载自罗德里格斯公式推导 - Jing_Rui - 博客园​www.cnblogs.com罗德里格斯(Rodrigues)旋转方程此公式有2种形式,...r如图向量V绕K轴旋转 角到向量 ,我之前的理解是两个向量的旋转关系是旋转矩阵R,罗德里格斯公...
  • 【PID】位置式PID控制原理

    万次阅读 多人点赞 2018-07-12 20:14:27
    $\left.X\right._{1}$,$\left.X\right._{2}$ ,$\left.X\right._{3}$...,$\left.X\right._{k-2}$,$\left.X\right._{k-1}$,$\left.X\right._{k}$ 分析采样的数据序列,可以挖掘出三方面的信息: E k \left.E\...
  • 粒子群算法详解

    万次阅读 多人点赞 2016-12-02 16:44:35
    v[i][j]=(float)(w*v[i][j]+C1*Math.random()*(xpbest[i][j]-x[i][j])+C2*Math.random()*(xgbest[j]-x[i][j])); x[i][j]=(float)(x[i][j]+v[i][j]); } System.out.print("粒子"+i+"本次X1的速度变化幅度:...
  • 维纳滤波

    万次阅读 多人点赞 2016-12-17 16:55:43
    公式也称为维纳-霍夫方程,是最小均方误差准则下的滤波器系数最优解。 滤波器应用 维纳滤波器的应用十分广泛,总体上可以分为下面四类。 图2.1 维纳滤波器 下面分别对这四...
  • 谓词公式

    千次阅读 2019-03-17 21:20:50
    谓词公式 单个谓词是谓词公式,称为原子谓词公式 若A是谓词公式,则¬A\lnot A¬A也是谓词公式...若A是谓词公式,则(∀X)A,(∃X)A(\forall X)A,(\exists X)A(∀X)A,(∃X)A也都是谓词公式 有限步应用1~4步所得到的公...
  • mpu6050姿态解算与卡尔曼滤波(2)卡尔曼滤波

    万次阅读 多人点赞 2017-03-09 12:10:59
    Z_k=h(X_k,k)+V_k 上述的基于线性方程的做法已经不再适用了。为了能对非线性系统应用卡尔曼滤波,利用泰勒展开对原非线性系统在 X k − 1 = X ^ k − 1 X_{k-1}=\hat X_{k-1} 处做一阶线性化: X k = f ( X ^...
  • Mathjax公式教程

    万次阅读 多人点赞 2018-03-16 09:36:30
    一般公式分为两种形式,可以理解为一种特殊的代码块, 这是行内公式:$ \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. $ 这是行内公式:Γ(z)=∫∞0tz−1e−tdt.Γ(z)=∫0∞tz−1e−tdt. \Gamma(z) = \int_0^\...
  • 【SVPWM】SVPWM算法推导及其Simulink仿真(一)

    万次阅读 多人点赞 2019-05-27 11:48:34
    七段式 SVPWM 关键公式前言SVPWM生成流程判断扇区计算占空比计算非零矢量持续时间计算三路占空比 前言 有关原理部分请参照 SVPWM算法原理及详解 和 SVPWM的原理及法则推导和控制算法详解。本文主要讲解七段式SVPWM...
  • ...xmax(N)​) 则输入向量 x x x应满足 X m i n < x < X m a x X_{min}Xmin​<x​ 每个粒子的初速度定为0,即 v 0 = 0 v_0=0 v0​=0,第 j j j个粒子( 1 ≤ j ≤ m 1≤j≤m 1≤j≤m)的下一次迭代的速度 v ( j ) v^...
  • Stirling公式

    千次阅读 2019-01-21 22:43:38
    Stirling 公式 1.阶乘 n!=n(n−1)(n−2)⋯×3×2×1(n≥1) n! = n(n-1)(n-2)\cdots\times3\times2\times1\quad(n\geq1)n!=n(n−1)(n−2)⋯×3×2×1(n≥1)0!=1 0!= 10!=1 Stirling公式 n!≈2...
  • MATLAB 粒子群算法,例题与常用模版

    万次阅读 多人点赞 2018-09-06 18:09:18
    end end % 进入主要循环,按照公式依次迭代,直到满足精度要求 for t=1:M for i=1:N % 更新速度、位移 v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:)); x(i,:)=x(i,:)+v(i,:); if fitness(x(i,:)) ...
  • MarkDown公式输入

    千次阅读 2019-07-08 10:42:40
    文章目录1 如何插入公式2 上标、下标与组合3 汉字、字体与格式4 占位符5 定界符与组合6 四则运算7 高级运算8 矩阵9 逻辑运算10 集合运算11 数学符号12 罗马字母 1 如何插入公式 行内公式:将公式插入到本行内,...
  • 高等数学学习笔记(1)——微分方程解法公式

    万次阅读 多人点赞 2020-11-22 14:28:11
    本文列举了微分方程的公式,当做一个笔记,如果后面有地方用得上就回来翻翻。 当然本文是为了求解模型中用得上的微分方程而书写的,并非是为了考研或者本科课程应试,所以不会有例题,只会有对应的解法。同时公式...
  • 傅里叶变换公式整理

    万次阅读 2018-11-26 16:09:26
    令f(x,y)表示一幅大小为MXN像素的数字图像,其中,x=0,1,2,…,M-1, y=0,1,2,…,N-1,由F(u,v)表示的f(x,y)的二维离散傅里叶变换(DFT)由下式给出: F ( u , v ) = ∑ x = 0 M − 1 ∑ y = 0 N − 1 f ( x , y ) e − ...
  • 机器学习公式推导

    千次阅读 多人点赞 2018-03-28 15:06:31
    本篇笔记主要记录及推导Andrew NG的Machine Learning课程中出现的公式。  我们假设对于任意的分类、聚类、回归等问题在自然界中总是存在一个精确的模型与之相对应,接下来我们要做的就是根据获取的样本来反推并...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 121,498
精华内容 48,599
关键字:

v(x)公式