精华内容
下载资源
问答
  • 逻辑回归-参数迭代公式推导

    千次阅读 2017-09-19 09:59:02
    ... 在《机器学习实战》一书的第 ...书中只是给出梯度上升算法代码,但是并没有给出数学推导。...因此,梯度迭代公式为:     结合本式再去理解《机器学习实战》中的代码就很简单了。

    原始出处:http://sbp810050504.blog.51cto.com/2799422/1608064

    在《机器学习实战》一书的第5章中讲到了Logistic用于二分类问题。书中只是给出梯度上升算法代码,但是并没有给出数学推导。故哪怕是简单的几行代码,依然难以理解。

     

    对于Logistic回归模型而言,需要读者具有高等数学、线性代数、概率论和数理统计的基础的数学基础。高等数学部分能理解偏导数即可;线性代数部分能理解矩阵乘法及矩阵转置即可;概率论和数理统计能理解条件概率及极大似然估计即可。

    有《高等代数》(浙大)、概率论与数理统计(浙大)、线性代数(同济大学)三本数学足矣。

     

    Logistic回归用于二分类问题,面对具体的二分类问题,比如明天是否会下雨。人们通常是估计,并没有十足的把握。因此用概率来表示再适合不过了。

     

    Logistic本质上是一个基于条件概率的判别模型(DiscriminativeModel)。利用了Sigma函数值域在[0,1]这个特性。

                               

    wKioL1TEnTjA2NPbAAAZDt4MjeU599.jpg

    函数图像为:

    wKioL1TEnTiD9dUWAAB7G34zbW0271.jpg

    通过sigma函数计算出最终结果,以0.5为分界线,最终结果大于0.5则属于正类(类别值为1),反之属于负类(类别值为0)。

    如果将上面的函数扩展到多维空间,并且加上参数,则函数变成:

    wKiom1TEnF3xBqCrAAAtwFC_Y7M318.jpg

    其中X是变量,θ是参数,由于是多维,所以写成了向量的形式,也可以看作矩阵。θT表示矩阵θ的转置,即行向量变成列向量。θTX是矩阵乘法。(高数结合线性代数的知识)

     

    如果我们有合适的参数向量θ,以及样本x,那么对样本x分类就可以通过上式计算出一个概率值来,如果概率值大于0.5,我们就说样本是正类,否则样本是负类。

    比如,对于“垃圾邮件判别问题”,对于给定的邮件(样本),我们定义非垃圾邮件为正类,垃圾邮件为负类。我们通过计算出的概率值即可判定邮件是否是垃圾邮件。

     

    接下来问题来了,如何得到合适的参数向量θ呢?

     

    由于sigma函数的特性,我们可作出如下的假设:

    wKiom1TEnF2hTs5PAABLtf3DlpQ603.jpg

    上式即为在已知样本X和参数θ的情况下,样本X属性正类(y=1)和负类(y=0)的条件概率。

     

    将两个公式合并成一个,如下:

    wKioL1TEnTnA8ZKSAAA8rx3sZUM132.jpg

    既然概率出来了,那么最大似然估计也该出场了。假定样本与样本之间相互独立,那么整个样本集生成的概率即为所有样本生成概率的乘积:

    wKioL1TEnTmCIvnhAACSHATjZaY077.jpg

    其中,m为样本的总数,y(i)表示第i个样本的类别,x(i)表示第i个样本,需要注意的是θ是多维向量,x(i)也是多维向量。

    (接下来从《概率论与数理统计》转到《高等数学》)

    为了简化问题,我们对整个表达式求对数,(将指数问题对数化是处理数学问题常见的方法):

    wKiom1TEnF7glwX2AABxj9lYg18460.jpg

    上式是基本的对数变换,高中数学而已,没有复杂的东西。

     

    满足似然函数(θ)的最大的θ值即是我们需要求解的模型。

     

    梯度上升算法

     

           如此复杂的函数,如何求满足函数(θ)最大值的参数向量θ呢?

     

           如果问题简化到一维,就很好办了。假如需要求取函数:

                  wKioL1TEnTnRW2_ZAAAUUKd9zpQ091.jpg

           的最大值。

           函数图像如下:

    wKioL1TEnTyw8v6ZAAB9RCJA5Vs936.jpg

    函数的导数为:

    wKiom1TEnGGBvHtvAAATGsAEI4c709.jpg

    所以 x=1.5即取得函数的最大值1.25

     

    但是真实环境中的函数不会像上面这么简单,就算求出了函数的导数,也很难精确计算出函数的极值。此时我们就可以用迭代的方法来做。就像爬坡一样,一点一点逼近极值。爬坡这个动作用数学公式表达即为:

    wKioL1TEnTyxHegQAAAgSFtr9U4431.jpg 

    其中,α为步长。

    求上面函数极值的Python代码如下:




    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def  f_prime(x_old):
              return  - 2 * x_old + 3
      
    def  cal():
              x_old = 0
              x_new = 6
              eps = 0.01
              presision = 0.00001
              whileabs(x_new - x_old)>presision:
                        x_old = x_new
                        x_new = x_old + eps * f_prime(x_old)
              return  x_new




    结果为:1.50048

     

    回到Logistic Regression问题,我们同样对函数求偏导。

    wKiom1TEnGHhkXbMAAFCAkpV7Zs421.jpg

     

    这个公式有点复杂,但是依然只是基本的导数变换,待我细细拆解。这里需要的数学知识无外乎两点:函数的和、差、积、商求导法则和复合函数的求导法则(高等数学P88页)。

    先看:

    wKiom1TEnGGgVCkNAABH3qNWcA4288.jpg

    其中:

    wKiom1TEnfKTaMuVAABFm0Px270384.jpg

    再由:

    wKioL1TEnT-xsSdfAABva83f19A126.jpg

    可得:

    wKiom1TEnGPTqcd8AAAxlx9xE7w874.jpg

    接下来就剩下第三部分:

     wKioL1TEnT_jreuTAAA53p9A8ec077.jpg

    (这个公式应该很容易理解,简单的偏导公式)

    还有就是:

    wKioL1TEnwPzRXsWAAAtwFC_Y7M157.jpg

    综合三部分即得到:

    wKiom1TEnGTAhlbMAAAfcirD1mM147.jpg

     

    因此,梯度迭代公式为:

    wKiom1TEnGSDl1JuAAAqXOo511s178.jpg

          

           结合本式再去理解《机器学习实战》中的代码就很简单了。


    展开全文
  • LSTM公式及理解

    万次阅读 多人点赞 2019-01-25 22:34:22
    接下来我们直接看LSTM,放一张网络上极为常见的图: 图片来自 Understanding LSTM Networks ,(丑的要死的)红色字体是贫僧加的。 注意图中 hidden state (短期记忆)和 cell state (长期记忆)的传递,...

    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神经网络设计原理,看不懂这个例子的话看这篇 ↩︎

    展开全文
  • ... ...回归模型而言,需要读者具有高等数学、线性代数、概率论和数理统计的基础的数学基础。...因此,梯度迭代公式为:     结合本式再去理解《机器学习实战》中的代码就很简单了。

    原始出处:http://sbp810050504.blog.51cto.com/2799422/1608064

    在《机器学习实战》一书的第5章中讲到了Logistic用于二分类问题。书中只是给出梯度上升算法代码,但是并没有给出数学推导。故哪怕是简单的几行代码,依然难以理解。

     

    对于Logistic回归模型而言,需要读者具有高等数学、线性代数、概率论和数理统计的基础的数学基础。高等数学部分能理解偏导数即可;线性代数部分能理解矩阵乘法及矩阵转置即可;概率论和数理统计能理解条件概率及极大似然估计即可。

    有《高等代数》(浙大)、概率论与数理统计(浙大)、线性代数(同济大学)三本数学足矣。

     

    Logistic回归用于二分类问题,面对具体的二分类问题,比如明天是否会下雨。人们通常是估计,并没有十足的把握。因此用概率来表示再适合不过了。

     

    Logistic本质上是一个基于条件概率的判别模型(DiscriminativeModel)。利用了Sigma函数值域在[0,1]这个特性。

                               

    wKioL1TEnTjA2NPbAAAZDt4MjeU599.jpg

    函数图像为:

    wKioL1TEnTiD9dUWAAB7G34zbW0271.jpg

    通过sigma函数计算出最终结果,以0.5为分界线,最终结果大于0.5则属于正类(类别值为1),反之属于负类(类别值为0)

    如果将上面的函数扩展到多维空间,并且加上参数,则函数变成:

    wKiom1TEnF3xBqCrAAAtwFC_Y7M318.jpg

    其中X是变量,θ是参数,由于是多维,所以写成了向量的形式,也可以看作矩阵。θT表示矩阵θ的转置,即行向量变成列向量。θTX是矩阵乘法。(高数结合线性代数的知识)

     

    如果我们有合适的参数向量θ,以及样本x,那么对样本x分类就可以通过上式计算出一个概率值来,如果概率值大于0.5,我们就说样本是正类,否则样本是负类。

    比如,对于“垃圾邮件判别问题”,对于给定的邮件(样本),我们定义非垃圾邮件为正类,垃圾邮件为负类。我们通过计算出的概率值即可判定邮件是否是垃圾邮件。

     

    接下来问题来了,如何得到合适的参数向量θ呢?

     

    由于sigma函数的特性,我们可作出如下的假设:

    wKiom1TEnF2hTs5PAABLtf3DlpQ603.jpg

    上式即为在已知样本X和参数θ的情况下,样本X属性正类(y=1)和负类(y=0)的条件概率。

     

    将两个公式合并成一个,如下:

    wKioL1TEnTnA8ZKSAAA8rx3sZUM132.jpg

    既然概率出来了,那么最大似然估计也该出场了。假定样本与样本之间相互独立,那么整个样本集生成的概率即为所有样本生成概率的乘积:

    wKioL1TEnTmCIvnhAACSHATjZaY077.jpg

    其中,m为样本的总数,y(i)表示第i个样本的类别,x(i)表示第i个样本,需要注意的是θ是多维向量,x(i)也是多维向量。

    (接下来从《概率论与数理统计》转到《高等数学》)

    为了简化问题,我们对整个表达式求对数,(将指数问题对数化是处理数学问题常见的方法)

    wKiom1TEnF7glwX2AABxj9lYg18460.jpg

    上式是基本的对数变换,高中数学而已,没有复杂的东西。

     

    满足似然函数(θ)的最大的θ值即是我们需要求解的模型。

     

    梯度上升算法

     

           如此复杂的函数,如何求满足函数(θ)最大值的参数向量θ呢?

     

           如果问题简化到一维,就很好办了。假如需要求取函数:

                  wKioL1TEnTnRW2_ZAAAUUKd9zpQ091.jpg

           的最大值。

           函数图像如下:

    wKioL1TEnTyw8v6ZAAB9RCJA5Vs936.jpg

    函数的导数为:

    wKiom1TEnGGBvHtvAAATGsAEI4c709.jpg

    所以 x=1.5即取得函数的最大值1.25

     

    但是真实环境中的函数不会像上面这么简单,就算求出了函数的导数,也很难精确计算出函数的极值。此时我们就可以用迭代的方法来做。就像爬坡一样,一点一点逼近极值。爬坡这个动作用数学公式表达即为:

    wKioL1TEnTyxHegQAAAgSFtr9U4431.jpg 

    其中,α为步长。

    求上面函数极值的Python代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def  f_prime(x_old):
              return  - 2 * x_old + 3
      
    def  cal():
              x_old = 0
              x_new = 6
              eps = 0.01
              presision = 0.00001
              whileabs(x_new - x_old)>presision:
                        x_old = x_new
                        x_new = x_old + eps * f_prime(x_old)
              return  x_new


    结果为:1.50048

     

    回到Logistic Regression问题,我们同样对函数求偏导。

    wKiom1TEnGHhkXbMAAFCAkpV7Zs421.jpg

     

    这个公式有点复杂,但是依然只是基本的导数变换,待我细细拆解。这里需要的数学知识无外乎两点:函数的和、差、积、商求导法则和复合函数的求导法则(高等数学P88)

    先看:

    wKiom1TEnGGgVCkNAABH3qNWcA4288.jpg

    其中:

    wKiom1TEnfKTaMuVAABFm0Px270384.jpg

    再由:

    wKioL1TEnT-xsSdfAABva83f19A126.jpg

    可得:

    wKiom1TEnGPTqcd8AAAxlx9xE7w874.jpg

    接下来就剩下第三部分:

     wKioL1TEnT_jreuTAAA53p9A8ec077.jpg

    (这个公式应该很容易理解,简单的偏导公式)

    还有就是:

    wKioL1TEnwPzRXsWAAAtwFC_Y7M157.jpg

    综合三部分即得到:

    wKiom1TEnGTAhlbMAAAfcirD1mM147.jpg

     

    因此,梯度迭代公式为:

    wKiom1TEnGSDl1JuAAAqXOo511s178.jpg

          

           结合本式再去理解《机器学习实战》中的代码就很简单了。

    展开全文
  • 作者:董文辉本文长度为4500字,建议阅读10+分钟本文为你总结常见损失函数和评价指标。目录一、损失函数1.1 回归问题1.2 分类问题二、评价指标2.1 回归问题2.2 分类问题参考资...

    作者:董文辉

    本文长度为4500字,建议阅读10+分钟

    本文为你总结常见损失函数和评价指标。

    目录

    • 一、损失函数

      • 1.1 回归问题

      • 1.2 分类问题

    • 二、评价指标

      • 2.1 回归问题

      • 2.2 分类问题

    • 参考资料


    一、损失函数


    1.1 回归问题

    1. 平方损失函数(最小二乘法):

    回归问题中常用的损失函数,在线性回归中,可以通过极大似然估计(MLE)推导。计算的是预测值与真实值之间距离的平方和。实际更常用的是均方误差(Mean Squared Error-MSE):


    2. 平均绝对值误差(L1)-- MAE:

    MAE是目标值和预测值之差的绝对值之和,可以用来衡量预测值和真实值的距离。但是它不能给出,模型的预测值是比真实值小还是大。


    3. MAE(L1) VS MSE(L2):

    • MSE计算简便,但MAE对异常点有更好的鲁棒性:当数据中存在异常点时,用MSE/RMSE计算损失的模型会以牺牲了其他样本的误差为代价,朝着减小异常点误差的方向更新。然而这就会降低模型的整体性能。

    直观上可以这样理解:如果我们最小化MSE来对所有的样本点只给出一个预测值,那么这个值一定是所有目标值的平均值。但如果是最小化MAE,那么这个值,则会是所有样本点目标值的中位数。众所周知,对异常值而言,中位数比均值更加鲁棒,因此MAE对于异常值也比MSE更稳定。

    • NN中MAE更新梯度始终相同,而MSE则不同:MSE损失的梯度随损失增大而增大,而损失趋于0时则会减小。

    • Loss选择建议:

      • MSE:如果异常点代表在商业中很重要的异常情况,并且需要被检测出来

      • MAE:如果只把异常值当作受损数据


    4. Huber损失:

    Huber损失是绝对误差,只是在误差很小时,就变为平方误差。

    • 当Huber损失在 之间时,等价为MSE

    • 时等价为MAE

    使用MAE训练神经网络最大的一个问题就是不变的大梯度,这可能导致在使用梯度下降快要结束时,错过了最小点。而对于MSE,梯度会随着损失的减小而减小,使结果更加精确。在这种情况下,Huber损失就非常有用。它会由于梯度的减小而落在最小值附近。比起MSE,它对异常点更加鲁棒。因此,Huber损失结合了MSE和MAE的优点。但是,Huber损失的问题是我们可能需要不断调整超参数delta。

    下图是Huber跟随 的变化曲线。当 很大时,等价为MSE曲线,当 很小时,等价为MAE曲线。


    1.2 分类问题:

    1. LogLoss:

    二分类任务中常用的损失函数,在LR中,通过对似然函数取对数得到。也就是交叉熵损失函数。

    2. 指数损失函数:

    在AdaBoost中用到的损失函数。它是前向分步加法算法的特例,是一个加和模型。在Adaboost中,经过m此迭代之后,可以得到 :

    Adaboost每次迭代时的目的是为了找到最小化下列式子时的参数α 和G:

    而指数损失函数(exp-loss)的标准形式如下

    可以看出,Adaboost的目标式子就是指数损失,在给定n个样本的情况下,Adaboost的损失函数为:


    二、评价指标

    如何评估机器学习算法模型是任何项目中一个非常重要的环节。分类问题一般会选择准确率(Accuracy)或者AUC作为metric,回归问题使用MSE,但这些指标并不足以评判一个模型的好坏,接下来的内容我将尽可能包括各个评价指标。因为损失函数大部分可以直接作为评价指标,所以损失函数中出现过的简单介绍。


    2.1 回归问题

    1. MAE:平均绝对误差(Mean Absolute Error),范围

    2. MSE:均方误差(Mean Square Error),范围

    3. RMSE:根均方误差(Root Mean Square Error),范围

    取均方误差的平方根可以使得量纲一致,这对于描述和表示是有意义的。

    4. MAPE:平均绝对百分比误差(Mean Absolute Percentage Error)

    注意点:当真实值有数据等于0时,存在分母0除问题,该公式不可用!

    5. SMAPE:对称平均绝对百分比误差(Symmetric Mean Absolute Percentage Error)

    注意点:真实值、预测值均等于0时,存在分母为0,该公式不可用!

    6. R Squared:

    决定系数(Coefficient of determination),被人们称为最好的衡量线性回归法的指标。

    如果我们使用同一个算法模型,解决不同的问题,由于不同的数据集的量纲不同,MSE、RMSE等指标不能体现此模型针对不同问题所表现的优劣,也就无法判断模型更适合预测哪个问题。 得到的性能度量都在[0, 1]之间,可以判断此模型更适合预测哪个问题。

    公式的理解:

    1. 分母代表baseline(平均值)的误差,分子代表模型的预测结果产生的误差;

    2. 预测结果越大越好, 为1说明完美拟合, 为0说明和baseline一致;

    7. 代码实现:

    # coding=utf-8
    import numpy as np
    from sklearn import metrics
    from sklearn.metrics import r2_score
    
    
    # MAPE和SMAPE需要自己实现
    def mape(y_true, y_pred):
        return np.mean(np.abs((y_pred - y_true) / y_true)) * 100
    
    
    def smape(y_true, y_pred):
        return 2.0 * np.mean(np.abs(y_pred - y_true) / (np.abs(y_pred) + np.abs(y_true))) * 100
    
    
    y_true = np.array([1.0, 5.0, 4.0, 3.0, 2.0, 5.0, -3.0])
    y_pred = np.array([1.0, 4.5, 3.5, 5.0, 8.0, 4.5, 1.0])
    
    
    # MSE
    print(metrics.mean_squared_error(y_true, y_pred)) # 8.107142857142858
    # RMSE
    print(np.sqrt(metrics.mean_squared_error(y_true, y_pred))) # 2.847304489713536
    # MAE
    print(metrics.mean_absolute_error(y_true, y_pred)) # 1.9285714285714286
    # MAPE
    print(mape(y_true, y_pred)) # 76.07142857142858
    # SMAPE
    print(smape(y_true, y_pred)) # 57.76942355889724
    # R Squared
    print(r2_score(y_true, y_pred))
    


    2.2 分类问题

    0. Confusion Matrix(混淆矩阵):

    混淆矩阵一般不直接作为模型的评价指标,但是他是后续多个指标的基础。以下为二分类的混淆矩阵,多分类的混淆矩阵和这个类似。


    预测正例预测反例
    真实正例TP(真正例)FN(假反例)
    真实反例FP(假正例)TN(真反例)

    我们训练模型的目的是为了降低FP和FN。很难说什么时候降低FP,什么时候降低FN。基于我们不同的需求,来决定降低FP还是FN。

    • 降低假负数例(FN):假设在一个癌症检测问题中,每100个人中就有5个人患有癌症。在这种情况下,即使是一个非常差的模型也可以为我们提供95%的准确度。但是,为了捕获所有癌症病例,当一个人实际上没有患癌症时,我们可能最终将其归类为癌症。因为它比不识别为癌症患者的危险要小,因为我们可以进一步检查。但是,错过癌症患者将是一个巨大的错误,因为不会对其进行进一步检查。

    • 降低假正例(FP):假设在垃圾邮件分类任务中,垃圾邮件为正样本。如果我们收到一个正常的邮件,比如某个公司或学校的offer,模型却识别为垃圾邮件(FP),那将损失非常大。所以在这种任务中,需要尽可能降低假正例。

    1. Accuracy(准确率):

    准确率也就是在所有样本中,有多少样本被预测正确。

    当样本类别均衡时,Accuracy是一个很好的指标。

    但在样本不平衡的情况下,产生效果较差。假设我们的训练数据中只有2%的正样本,98%的负样本,那么如果模型全部预测为负样本,准确率便是98%,。分类的准确率指标很高,会给我们一种模型很好的假象。

    2. Precision(精准率):

    含义:预测为正例的样本中有多少实际为正;

    3. Recall(召回率):

    含义:实际为正例的样本有多少被预测为正;

    4. P-R曲线:

    通过选择不同的阈值,得到Recall和Precision,以Recall为横坐标,Precision为纵坐标得到的曲线图。

    PR曲线性质:

    • 如果一个学习器的P-R曲线被另一个学习器的曲线完全包住,后者性能优于前者;

    • 如果两个学习器的曲线相交,可以通过平衡点(如上图所示)来度量性能;

    • 阈值下降:

      • Recall:不断增加,因为越来越多的样本被划分为正例,假设阈值为0.,全都划分为正样本了,此时recall为1;

      • Precision:正例被判为正例的变多,但负例被判为正例的也变多了,因此precision会振荡下降,不是严格递减;

    • 如果有个划分点可以把正负样本完全区分开,那么P-R曲线面积是1*1;


    5.  (加权调和平均)和  (调和平均):

    • :召回率(Recall)影响更大,eg.

    • :精确率(Precision)影响更大,eg.

    为1的时候得到

    调和平均亦可推出:


    6. ROC-AUC:

    Area Under Curve(AUC) 是二分类问题中使用非常广泛的一个评价指标。AUC的本质是,任取一个正样本和负样本,模型输出正样本的值大于负样本值的概率。构成AUC的两个基本指标是假正例率和真正例率。

    • 横轴-假正例率: 实际为负的样本多少被预测为正;

    • 纵轴-真正例率: 实际为正的样本多少被预测为正;

    TPR和FPR的范围均是[0,1],通过选择不同的阈值得到TPR和FPR,然后绘制ROC曲线。

    曲线性质:

    1. 阈值最大时,对应坐标点为(0,0),阈值最小时,对应坐标点(1,1)

    2. ROC曲线越靠近左上角,该分类器的性能越好;

    3. 对角线表示一个随机猜测分类器;

    4. 若一个学习器的ROC曲线被另一个学习器的曲线完全包住,后者性能优于前者;

    AUC: ROC曲线下的面积为AUC值。

    7. 代码实现:

    from sklearn.metrics import accuracy_score,precision_score,recall_score,f1_score,fbeta_score
    y_test = [1,1,1,1,0,0,1,1,1,0,0]y_pred = [1,1,1,0,1,1,0,1,1,1,0]
    print("准确率为:{0:%}".format(accuracy_score(y_test, y_pred)))print("精确率为:{0:%}".format(precision_score(y_test, y_pred)))print("召回率为:{0:%}".format(recall_score(y_test, y_pred)))print("F1分数为:{0:%}".format(f1_score(y_test, y_pred)))print("Fbeta为:{0:%}".format(fbeta_score(y_test, y_pred,beta =1.2)))
    

    参考资料:

    [1]分类问题性能评价指标详述: 

    https://blog.csdn.net/foneone/article/details/88920256
    [2]AUC,ROC我看到的最透彻的讲解:

    https://blog.csdn.net/u013385925/article/details/80385873
    [3]机器学习大牛最常用的5个回归损失函数,你知道几个?:

    https://www.jiqizhixin.com/articles/2018-06-21-3
    [4]机器学习-损失函数: 

    https://www.csuldw.com/2016/03/26/2016-03-26-loss-function/
    [5]损失函数jupyter notebook:

    https://nbviewer.jupyter.org/github/groverpr/Machine-Learning/blob/master/notebooks/05_Loss_Functions.ipynb
    [6]L1 vs. L2 Loss function:

    http://rishy.github.io/ml/2015/07/28/l1-vs-l2-loss/
    [7]P-R曲线深入理解: 

    https://blog.csdn.net/b876144622/article/details/80009867

    原文链接:

    https://zhuanlan.zhihu.com/p/91511706

    END


    转自: 数据派THU 公众号

    版权声明:本号内容部分来自互联网,转载请注明原文链接和作者,如有侵权或出处有误请和我们联系。


    合作请加QQ:365242293  

    数据分析(ID : ecshujufenxi )互联网科技与数据圈自己的微信,也是WeMedia自媒体联盟成员之一,WeMedia联盟覆盖5000万人群。

    展开全文
  • 网上看到一篇很实用的帖子关于常见损失函数和评价指标,收藏下来 本文转载于https://zhuanlan.zhihu.com/p/91511706 -----------------------------------------------------------------------------------------...
  • 作者:董文辉本文长度为4500字,建议阅读10+分钟本文为你总结常见损失函数和评价指标。目录一、损失函数1.1 回归问题1.2 分类问题二、评价指标2.1 回归问题2.2 分类问题参考资...
  • 高斯径向基函数(RBF)神经网络

    万次阅读 多人点赞 2019-04-03 00:53:52
    泰勒公式 径向基函数-wiki 径向基网络之bp训练 RBF网络逼近能力及其算法 线性/非线性,使用”多项式“逼近非线性,通过调节超参数来改善多项式参数进一步拟合真实非线性。 径向基函数 说径向基网络之前,先聊下径向...
  • c++常见面试题:求正数a的平方根的迭代公式为:xn+1=(xn+a/xn)/2。建立一个类SQRT,用来求某正数平方根的近似值。具体要求如下:(1)私有数据成员float n:存放某个正数。float sq:存放正数n的近似平方根。(2)...
  • 哈希原理与常见哈希函数

    千次阅读 2020-01-09 18:11:06
    转换的方法称为哈希函数,原值经过哈希函数计算后得到的值称为哈希值。 1.哈希特点 (1)一致性:同一个值每次经过同一个哈希函数计算后得到的哈希值是一致的。 F(x)=rand() :每次返回一个随机值,是不好的哈希 (2)...
  • tanh激活函数

    千次阅读 2018-07-31 00:05:57
    tanh也是一种非常常见的激活函数。与sigmoid相比,它的输出均值是0,使得其收敛速度要比sigmoid快,减少迭代次数。 然而,从图中可以看出,tanh和sigmoid一样具有软饱和性,从而造成梯度消失。 ...
  • 迭代算法

    万次阅读 多人点赞 2018-04-01 14:43:02
    常见迭代法是牛顿迭代法,其他还包括最速下降法、共轭迭代法、最小 二乘法、线性规划、非线性规划、遗传算法、模拟退火等。 使用迭代算法要解决三个方面的问题: (1)迭代变量的确定 在可以用迭代算法解决的...
  • 测试开发笔记

    万次阅读 多人点赞 2019-11-14 17:11:58
    2在整个系统中检查所有 调用了修改函数函数 3明确上诉所有函数对应的界面 4测试上诉界面测试用例 4.测试过程(干什么,怎么干) 整个系统的内容 需求项(业务、主要功能) 需求项 测试计划 测试需求项 系统测试...
  • 常见损失函数

    千次阅读 2017-05-08 09:21:36
    损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构...
  • 基于不动点迭代函数在MATLAB中实现时相关参数形式讨论 一、课本25页代码错误(主要) 1、参数P为矩阵,被P的元素赋值后成为单一元素,导致下表超出无法进行循环操作(p=p(k))。 2、参数P后少一个end结束标志。 3、...
  • 图像分割综述

    万次阅读 多人点赞 2019-07-09 22:03:48
    整个搜索过程是从一组解迭代到另一组解,采用同时处理群体中多个个体的方法,降低了陷入局部最优解的可能性,并易于并行化。搜索过程采用概率的变迁规则来指导搜索方向,而不采用确定性搜索规则,而且对搜索空间没有...
  • 一文读懂逻辑回归

    千次阅读 多人点赞 2019-03-24 21:21:25
    逻辑回归虽然带有回归字样,但是逻辑回归属于分类算法。逻辑回归可以进行多分类操作,但由逻辑...首先我们给出逻辑回归的公式: 其中,Y为决策值,x为特征值,e为自然对数,w为特征值的权值,b为偏置。为两者...
  • 谈谈常见迭代优化方法

    万次阅读 2016-02-02 09:54:22
    如果学习机器学习算法,你会发现,其实机器学习的过程大概就是定义一个模型的目标函数,然后通过优化算法从数据中求取J(θ)取得极值时对应模型参数θ的过程,而学习到的参数就对应于机器学习到的知识。不管学习到的...
  • 机器学习之常见的损失函数(loss function)

    万次阅读 多人点赞 2019-03-06 09:40:43
    解决一个机器学习问题主要有两部分:数据和算法。...所以仅在此以自己理解的方式总结一些常见的损失函数,作为笔记方便日后复习。 参考文章: 一、总览 在机器学习中,通常把模型关于单个样本预测值与真实值的差...
  • 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,:)) ...
  • 常见机器学习损失函数(Loss Function)  损失函数(loss function)是用来估量模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好...
  • 深度学习入门

    万次阅读 多人点赞 2017-11-05 21:23:46
      感知机的学习规则:对于训练样例(x,y)(需要注意的是,这里粗体字x表示训练集合),若当前感知机的实际输出y’,假设它不符合预期,存在“落差”,那么感知机的权值依据如公式规则调整: 其中,η∈(0,...
  • 机器学习(五)——常见损失函数

    千次阅读 2018-07-02 09:13:31
    笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值,找寻数据的秘密,笔者认为,数据的价值不仅仅只体现在企业中,个人也可以... 通常机器学习每一个算法中都会有一个目标函数,...
  • 基于LSTM的股票预测模型_python实现_超详细

    万次阅读 多人点赞 2019-07-05 22:25:13
    门机制是让信息选择式通过的方法,通过sigmoid函数和点乘操作实现。sigmoid取值介于0~1之间,乘即点乘则决定了传送的信息量(每个部分有多少量可以通过),当sigmoid取0时表示舍弃信息,取1时表示完全传输(即完全...
  • Tensorflow中一些常见函数

    千次阅读 2017-11-09 23:02:05
    Tensorflow中一些常见函数 1. tf.constant(value,dtype=None,shape=None,name='Const') 创建一个常量tensor,按照给出value来赋值,可以用shape来指定其形状。value可以是一个数,也可以是一个list。 ...
  • 二阶迭代

    千次阅读 2018-09-30 13:35:46
    二阶迭代法   该优化方法基于牛顿法" "其迭代方式如下:   x←x−[Hf(x)]−1∇f(x)   这里Hf(x)是Hessian矩阵,它是函数的二阶偏导数的平方矩阵。∇f(x)是梯度向量,这和梯度下降中一样。   直观...
  • 梯度下降算法

    千次阅读 2019-11-29 14:14:14
    常见的梯度下降算法有: 全梯度下降算法(Full gradient descent), 随机梯度下降算法(Stochastic gradient descent), 小批量梯度下降算法(Mini-batch gradient descent), 随机平均梯度下降算法...
  • 机器学习中常见的损失函数 现实世界中的DS (DS IN THE REAL WORLD) In mathematical optimization and decision theory, a loss function or cost function is a function that maps an event or values of one or ...
  • 深度学习中常见的loss函数汇总

    千次阅读 2020-05-19 21:22:18
      损失函数(Loss Function)分为经验风险损失函数和结构风险损失函数,经验风险损失函数反映的是预测结果和实际结果之间的差别,结构风险损失函数则是经验风险损失函数加上正则项(L1或L2)。深度学习中的损失函数被...
  • 在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数。 问:激活函数有什么用? 如果没有激励函数,在这种情况下你每一层节点的输入都是上层输出的线性函数,无论你神经...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,085
精华内容 10,834
关键字:

常见函数迭代公式