精华内容
下载资源
问答
  • # 1.导入 机器学习中,一般将数据分为训练数据和...损失函数是表示神经网络性能“恶劣程度”的指标,即当前神经网络对监督数据(训练数据)多大程度上不拟合。简单来讲,就是损失函数值越小,代表权重参数越优。 ...

    # 1.导入

    机器学习中,一般将数据分为训练数据和测试数据两部分来进行学习和实验。
    首先,使用训练数据进行学习,寻找最优的参数;
    然后,使用测试数据评价训练得到模型的实际能力。

    神经网络的“学习”是指从训练数据中自动获取最优权重参数的过程。

    损失函数是表示神经网络性能“恶劣程度”的指标,即当前神经网络对监督数据(训练数据)多大程度上不拟合。简单来讲,就是损失函数值越小,代表权重参数越优。

    损失函数可以使用任意函数,一般使用均方误差和交叉熵误差等。

    # 2.交叉熵误差函数的介绍与实现

    交叉熵误差函数的数学式如下图所示

    上图中yk表示神经网络的输出,tk表示正确解标签。比如在识别MNIST数据集的例子中,k的取值是0到9,yk表示一个图像的推理结果数组y中的y[k],tk表示这个图像的正确解标签t中的t[k]。(正确解标签按照one-hot形式表示,比如标签“2”用数组[0,0,1,0,0,0,0,0,0,0]表示。在one-hot形式下,实际上交叉熵误差函数就是对对应正确解标签的输出结果先取对数再取负)

    单个数据的交叉熵误差函数的实现如下

    # 单个数据的交叉熵误差的实现
    def cross_entropy_error(y,t):             # 入口参数为一个图像的推理结果,和该图像的正确解标签
        delta = 1e-7                          # 定义微小值delta(为防止出现np.log(0)导致负无穷大而无法计算)
        return -np.sum(t*np.log(y+delta))     # y,t均为numpy数组
    	                                  # np.log(y+delta)表示y数组每个元素加上微小值后取对数,得到一个新数组
    				          # t*np.log(y+delta)表示将上述得到数组与t数组各个对应元素相乘,得到一个新数组
    				          # -np.sum(t*np.log(y+delta))表示将上述得到数组中各元素求和并取负,得到最终的损失函数值
    

    N个数据的平均交叉熵误差函数的数学式如下图所示

    tnk表示第n个数据的正确解标签中第k个元素的值,ynk表示第n个数据的推理结果中第k个元素的值。

    N个数据的平均交叉熵误差函数的实现如下

    # mini-batch版交叉熵误差的实现
    def cross_entropy_error(y,t):             # 入口参数为批数量图像的推理结果,和批数量图像的正确解标签
    	if y.ndim == 1:                   # 当推理数组y的维度为1时(即只有一张图像时)
    		t = t.reshape(1,t.size)   # 将标签数组t的形状修改为1*10
    		y = y.reshape(1,y.size)   # 将推理数组y的形状修改为1*10
    	
    	batch_size = y.shape[0]           # 取出批数量(即y数组所囊括的图像数目)赋给batch_size
    	return -np.sum(t*np.log(y+1e-7))/batch_size     # ...同单个数据交叉熵误差的解析相同
    					                # -np.sum(t*np.log(y+1e-7))/batch_size表示将上述得到数组中各元素求和,再除以批数量batch_size再取负,得到批数据的平均交叉熵误差

     

    # 本博客参考了《深度学习入门——基于Python的理论与实现》(斋藤康毅著,陆宇杰译),特在此声明。

    展开全文
  • 深度学习 --- 梯度下降推导--交叉熵误差函数 线性回归 复合函数求导 偏导数 预测函数 损失函数 或者 误差函数 梯度下降推导 概念和公式定义 梯度推导 对单个样本推导 对单个样本推导 对 m 个样本推导 梯度下降的算法...

    线性回归

    线性回归的推导可以看我的另一篇博客 深度学习–2.线性回归

    线性回归就是在二元分类中找到一条合适的分界线,其中二元分类中其结果只能后两种并且互斥,其线性方程为

    y ^ = W T x + b \hat{y} = W^Tx + b y^=WTx+b

    但这不是最好的二元分类方程,因为我们想要得到的结果是0–1的概率,但是线性方程的结果定义域一般是实数集(R),所以我们的线性回归的输出变为

    y ^ = σ ( W T x + b ) \hat{y} = \sigma (W^Tx + b) y^=σ(WTx+b)
    z = W T x + b z = W^Tx + b z=WTx+b
    σ ( z ) = 1 1 + e − z \sigma (z) = \frac{1}{1 + e^{-z}} σ(z)=1+ez1
    σ \sigma σ函数的图像如下图所示,是一个x ∈ \in R,而输出是一个(0,1)的开区间的概率,这就符合我们的二元分类的结果了
    在这里插入图片描述

    复合函数求导

    假设

    1. 函数 μ = φ ( x ) \mu = \varphi(x) μ=φ(x) x 0 x_0 x0出有导数 μ ′ = φ ′ ( x 0 ) \mu '= \varphi'(x_0) μ=φ(x0)
    2. 函数 y = f ( μ ) y=f(\mu) y=f(μ)在对应点 μ 0 = φ ( x 0 ) \mu_0 = \varphi(x_0) μ0=φ(x0)也有导数 y μ ′ = f ′ ( μ ) y_{\mu}' = f'(\mu) yμ=f(μ),于是符合函数 y = f ( φ ( x ) ) y=f(\varphi(x)) y=f(φ(x))在上述的点 x 0 x_0 x0也有导数,它等于 f ( μ ) f(\mu) f(μ)的导数与 φ \varphi φ的导数的乘积:
      [ f ( φ ( x 0 ) ) ] ′ = f μ ′ ( φ ( x 0 ) ) . φ ′ ( x 0 ) [f(\varphi(x_0))]' = f_{\mu}'(\varphi(x_0)) . \varphi'(x_0) [f(φ(x0))]=fμ(φ(x0)).φ(x0)
      更简洁的表示为
      y x ′ = y μ ′ . μ x ′ y_{x}' = y_{\mu}' . \mu_{x}' yx=yμ.μx
      例题
      y = l n ( s i n x ) y = ln( sinx) y=ln(sinx),求导数
      y = l n ( u ) , u = s i n x y = ln(u), u = sinx y=ln(u),u=sinx,根据求导法则
      y u ′ = ( l n ( u ) ) ′ = 1 u y'_{u} = (ln(u))' = \frac{1}{u} yu=(ln(u))=u1
      u ′ = ( s i n ( x ) ) ′ = c o s ( x ) u' = (sin(x))' = cos(x) u=(sin(x))=cos(x)
      y x ′ = 1 s i n ( x ) . ( s i n ( x ) ) ′ = c o s x s i n x = c t g x y_x' = \frac{1}{sin(x)} . (sin(x))' = \frac{cosx}{sinx} = ctgx yx=sin(x)1.(sin(x))=sinxcosx=ctgx

    偏导数

    有的函数不止有一个未知数,还可能有多个未知数,这个时候直接求导就有点困难,假设在三维空间里,x轴和y轴的变化共同决定z轴的变化,我先研究x方向的导数,那么函数在x方向的导数叫做这个函数在x轴的偏导数
    求导原则是对一个变量求导,其他变量看作常数
    例题
    u = x y u = x^y u=xy(x>0),偏导数
    ϑ u ϑ x = y . x y − 1 , ϑ u ϑ y = x y . l n x \frac{\vartheta u}{\vartheta x} = y.x^{y-1}, \frac{\vartheta u}{\vartheta y} = x^y.lnx ϑxϑu=y.xy1,ϑyϑu=xy.lnx

    预测函数

    可以理解为我们要训练的模型
    我们知道在 logistic回归模型中的参数 W(权重) 和 b(偏差) 是很重要的,那我们就需要训练 logistic 回归模型来找到合适的参数 W 和 b,那就需要要给预测函数,我们给出如下定义
    y i ^ = σ ( W T x i + b ) \hat{y^i} = \sigma (W^Tx^i + b) yi^=σ(WTxi+b), where σ ( z ) = 1 1 + e − z \sigma (z) = \frac{1}{1 + e^{-z}} σ(z)=1+ez1
    Given { ( x ( 1 ) , y ( 1 ) ) , . . . . , ( x ( m ) , y ( m ) ) } \{ (x^{(1)}, y^{(1)}), .... , (x^{(m)}, y^{(m)})\} {(x(1),y(1)),....,(x(m),y(m))} , want y ( i ) ^ ≈ y ( i ) \hat{y^{(i)}} \approx y^{(i)} y(i)^y(i)

    我们来具体说明一下,为了让模型来通过学习调整参数,我们给出一个具有m个样本的训练集,来训练这个训练集的样本来得到预测值接近实际值。对于上面的公式,我们约定,上标i 表示第几个训练样本

    损失函数 或者 误差函数

    你可以定义你的损失函数为预测值和真实值差的平方后的二分之一,我们可以理解为对方差进行求导,公式如下
    L ( y ^ , y ) = 1 2 ( y ^ − y ) 2 L(\hat{y}, y) = \frac{1}{2}(\hat{y} - y)^2 L(y^,y)=21(y^y)2
    但是在 logistic 回归中一般不怎么用,因为当当你学习这些参数的时候,在调优参数是很可能得到的是局部最优解,而不是全局最优解。我们定义损失函数的目的是来衡量预测输出 y ^ \hat{y} y^ 和 y 的实际值有多接近,那么我们定义如下的损失函数,至于为什么这么定义何以参见该目录中 神经网络 中的 交叉熵 的讲解

    L ( y ( i ) ^ , y ( i ) ) = − ( y ( i ) ln ⁡ y ( i ) ^ − ( 1 − y ( i ) ) ln ⁡ ( 1 − y ( i ) ^ ) ) L(\hat{y^{(i)}}, y^{(i)}) = -(y^{(i)}\ln\hat{y^{(i)}} - (1-y^{(i)})\ln(1-\hat{y^{(i)}})) L(y(i)^,y(i))=(y(i)lny(i)^(1y(i))ln(1y(i)^))

    需要说明的是:损失函数 是对于一个样本的估计,接下来我们会定义 成本函数 J, 它衡量的是全体训练样本上的表现

    • 当 y = 1 的时候,如果 y ^ \hat{y} y^ 接近1的时候,那么损失L就接近于0 ,如果 y ^ \hat{y} y^ 接近0的时候,那么损失L就很大
    • 当 y = 0 的时候,如果 y ^ \hat{y} y^ 接近1的时候,那么损失L就很大 ,如果 y ^ \hat{y} y^ 接近0的时候,那么损失L就接近于0

    梯度下降推导

    概念和公式定义

    首先我们有如下公式定义

    预测函数: y ( i ) ^ = σ ( W T x ( i ) + b ) \hat{y^{(i)}} = \sigma (W^Tx{(i)} + b) y(i)^=σ(WTx(i)+b)

    激活函数:$ \sigma (z) = \frac{1}{1 + e^{-z}}$

    损失函数: L ( y ( i ) ^ , y ( i ) ) = − ( y ( i ) ln ⁡ y ( i ) ^ + ( 1 − y ( i ) ) ln ⁡ ( 1 − y ( i ) ^ ) ) L(\hat{y^{(i)}}, y^{(i)}) = -(y^{(i)}\ln\hat{y^{(i)}} + (1-y^{(i)})\ln(1-\hat{y^{(i)}})) L(y(i)^,y(i))=(y(i)lny(i)^+(1y(i))ln(1y(i)^))

    成本函数: J ( w , b ) = 1 m ∑ i = 1 m L ( y ( i ) ^ , y ( i ) ) = − 1 m ∑ i = 1 m y ( i ) ln ⁡ y ( i ) ^ + ( 1 − y ( i ) ) ln ⁡ ( 1 − y ( i ) ^ ) J(w, b) = \frac{1}{m}\sum_{i=1}^{m}L(\hat{y^{(i)}}, y^{(i)}) = -\frac{1}{m}\sum_{i=1}^{m}y^{(i)}\ln\hat{y^{(i)}} + (1-y^{(i)})\ln(1-\hat{y^{(i)}}) J(w,b)=m1i=1mL(y(i)^,y(i))=m1i=1my(i)lny(i)^+(1y(i))ln(1y(i)^)

    损失函数衡量单个样本的效果,对每一个样本训练,都会输出一个 y ( i ) ^ \hat{y^{(i)}} y(i)^,把他和对应的真标签 y ( i ) y^{(i)} y(i)进行比较。
    成本函数衡量W 和 b 在总样本上的效果,要想得到小的衡量成本,那么就要得到合适的W 和 b 。我们看一下梯度下降在三维空间的效果
    在这里插入图片描述
    我们分别将 w 和 b 作为实数对待,成本函数 J(w,b) 是在水平轴 w 和 b 上的曲面,曲面的高度代表了 J(w, b)在某一点的值,我们要做的就是找到合适的 w 和 b ,使其对应的成本函数 J 值最小,可以看出这是一个凸函数,就像一个碗一样。
    首先,我们用某一个值来初始化 w 和 b ,比如图中的红点,其实,对于logistic 回归而言,几乎是任意的初始化值都有效。梯度下降要做的就是从初始点开始,朝着最陡的下坡方向走一步,在梯度下降一步后,这就完成了一次梯度的迭代。然后在那里停下,看看四周,再选择一个最陡的方向走一步,如此反复,直到走到最低谷。
    更新w 和b的方法为

    w : = w − α ϑ J ( w , b ) ϑ w ; b : = b − α ϑ J ( w , b ) ϑ b w := w - \alpha \frac{\vartheta J(w, b)}{\vartheta w} ; b := b- \alpha \frac{\vartheta J(w, b)}{\vartheta b} w:=wαϑwϑJ(w,b);b:=bαϑbϑJ(w,b)

    其中的$ \alpha $表示学习率,就是步进速度。我们约定dw表示 J 对 w 的导数,db 表示 J 对 b 的导数 那么更新可以写成

    w : = w − α d w ; b : = b − α d b w := w - \alpha dw ; b := b- \alpha db w:=wαdwb:=bαdb

    我们为了刚能形象的说明梯度下降,我们在二维平面中来说明,途中可以看作w为参数,J(w)为结果的函数,我们要想得到J的最小值,就是dw为0的地方

    在这里插入图片描述

    在上面的曲线中,我们取到线上一点,做切线,可以看到,在曲线左边的切线的斜率是负的,那么改点导数也是负的,我们在这个点更新 w , 根据上面的公式, w : = w − α d w w := w - \alpha dw w:=wαdw 因为dw为负,效果就是w加上了一个实数,其实我们期望改点对 w 的训练结果解释 w 增加,在曲线右侧也是相同,不过我们这个时候期望 w 减小,因为在右边导数为正

    对 b 的分析 和上面对w的分析一样

    梯度推导

    对单个样本推导

    对单个样本推导

    我们现在只演示单个样本的推导,首先我们有如下公式定义

    z = W T + b z = W^T + b z=WT+b

    $\hat{y} = a = \sigma (z) $

    $ \sigma (z) = \frac{1}{1 + e^{-z}}$

    $ \sigma ’ (z) = \sigma (z)(1 - \sigma(z))$

    L ( y ^ , y ) = − ( y ln ⁡ y ^ + ( 1 − y ) ln ⁡ ( 1 − y ^ ) ) L(\hat{y}, y) = -(y\ln\hat{y} + (1-y)\ln(1-\hat{y})) L(y^,y)=(ylny^+(1y)ln(1y^))

    现在我们假设一个样本与两个特征值,(x_1, x_2),那么也有两个权重(w_1, w_2)
    在这里插入图片描述
    我们要计算 L(a, y)对于w的偏导数,那么我们就应该从外到里分别结算导数(复合函数求导),首先计算 L 对 a的导数

    d a = ϑ L ( a , y ) ϑ a = − y a + 1 − y 1 − a . . . . . . . . . ln ⁡ ′ x = 1 x da = \frac{\vartheta L(a, y)}{\vartheta a} = -\frac{y}{a} + \frac{1-y}{1-a} ......... \ln 'x = \frac{1}{x} da=ϑaϑL(a,y)=ay+1a1y.........lnx=x1

    然后我们对z求导

    d z = ϑ L ( a , y ) ϑ a ∗ ϑ a ϑ z = a − y . . . . . . . . . σ ′ ( z ) = σ ( z ) ∗ ( 1 − σ ( z ) ) dz = \frac{\vartheta L(a,y)}{\vartheta a}* \frac{\vartheta a}{\vartheta z} = a - y ......... \sigma '(z) = \sigma (z)*(1- \sigma (z)) dz=ϑaϑL(a,y)ϑzϑa=ay.........σ(z)=σ(z)(1σ(z))

    求 L 对 w 和 b 的导数 ,j表示第几个特征值

    d w j = ϑ L ( a , y ) ϑ a ∗ ϑ a ϑ z ∗ ϑ z ϑ w 1 = ( a − y ) x j dw_j= \frac{\vartheta L(a,y)}{\vartheta a}* \frac{\vartheta a}{\vartheta z}*\frac{\vartheta z}{\vartheta w_1} = (a - y)x_j dwj=ϑaϑL(a,y)ϑzϑaϑw1ϑz=(ay)xj
    d b = ϑ L ( a , y ) ϑ a ∗ ϑ a ϑ z ∗ ϑ z ϑ b = ( a − y ) db= \frac{\vartheta L(a,y)}{\vartheta a}* \frac{\vartheta a}{\vartheta z}*\frac{\vartheta z}{\vartheta b} = (a - y) db=ϑaϑL(a,y)ϑzϑaϑbϑz=(ay)

    对w 和 b 更新

    w 1 : = w 1 − α d w 1 w_1 := w_1 - \alpha dw_1 w1:=w1αdw1

    w 2 : = w 2 − α d w 2 w_2 := w_2 - \alpha dw_2 w2:=w2αdw2

    b : = b − α d b b := b- \alpha db b:=bαdb

    对 m 个样本推导

    Logistic regression on m examples
    先假设有 m 个样本, 一个样本有两个特征值
    成本函数: J ( w , b ) = 1 m ∑ i = 1 m L ( y ( i ) ^ , y ( i ) ) = − 1 m ∑ i = 1 m y ( i ) ln ⁡ y ( i ) ^ + ( 1 − y ( i ) ) ln ⁡ ( 1 − y ( i ) ^ ) J(w, b) = \frac{1}{m}\sum_{i=1}^{m}L(\hat{y^{(i)}}, y^{(i)}) = -\frac{1}{m}\sum_{i=1}^{m}y^{(i)}\ln\hat{y^{(i)}} + (1-y^{(i)})\ln(1-\hat{y^{(i)}}) J(w,b)=m1i=1mL(y(i)^,y(i))=m1i=1my(i)lny(i)^+(1y(i))ln(1y(i)^)

    成本函数就是一个梯度迭代后对每个训练点的误差总和平均数,我们把上面推导单个样本的方法和公式拿来用
    ϑ ϑ w 1 J ( w , b ) = 1 m ∑ i = 1 m ϑ ϑ w 1 L ( a ( i ) , y ( i ) ) \frac{\vartheta}{\vartheta w_1} J(w, b) = \frac{1}{m} \sum_{i=1}^{m}\frac{\vartheta }{\vartheta w_1}L(a^{(i)}, y^{(i)}) ϑw1ϑJ(w,b)=m1i=1mϑw1ϑL(a(i),y(i))

    我们假设给$ J = 0 ; dw_1 = 0; dw_2 = 0; db=0$
    for i = 1 to m 一次循环表示对一个点进行训练
    → z ( i ) = w T x ( i ) + b \to z^{(i)} = w^Tx^{(i)} +b z(i)=wTx(i)+b

    → a ( i ) = σ ( z ( i ) ) \to a^{(i)} = \sigma (z^{(i)}) a(i)=σ(z(i))

    → J + = − ( y ( i ) ln ⁡ y ( i ) ^ + ( 1 − y ( i ) ) ln ⁡ ( 1 − y ( i ) ^ ) ) \to J += -(y^{(i)}\ln\hat{y^{(i)}} + (1-y^{(i)})\ln(1-\hat{y^{(i)}})) J+=(y(i)lny(i)^+(1y(i))ln(1y(i)^))

    → d z ( i ) = a ( i ) − y ( i ) \to dz^{(i)} = a^{(i)} - y^{(i)} dz(i)=a(i)y(i)

    → d w 1 + = x 1 ( i ) ∗ d z ( i ) \to dw_1 += x_1^{(i)} * dz^{(i)} dw1+=x1(i)dz(i)

    → d w 2 + = x 2 ( i ) ∗ d z ( i ) \to dw_2 += x_2^{(i)} * dz^{(i)} dw2+=x2(i)dz(i)

    → d b + = d z ( i ) \to db += dz^{(i)} db+=dz(i)

    在对m个样本一个迭代的训练完毕后,对累加过的$ J ; dw_1 ; dw_2 ; db$ 求平均值 $ J /= m ; dw_1 /=m ; dw_2 /=m ; db /= m$ , 我们没有对$ dw_1 ; dw_2 $ 加上标 i 是因为这里我们是把$ dw_1 ; dw_2 $ 当作对样本一个循环的累加器,将一个循环中的每一个样本的w值相加后最后在一个循环完毕后做平均,因为 d w 1 = ϑ J ϑ w 1 dw_1 = \frac{\vartheta J}{\vartheta w_1} dw1=ϑw1ϑJ

    对w 和 b 更新

    $w_1 := w_1 - \alpha dw_1 $

    $w_2 := w_2 - \alpha dw_2 $

    $b := b- \alpha db $

    梯度下降的算法调优

    在使用梯度下降时,需要进行调优。哪些地方需要调优呢?

    1. 算法的步长选择。在前面的算法描述中,我提到取步长为1,但是实际上取值取决于数据样本,可以多取一些值,从大到小,分别运行算法,看看迭代效果,如果损失函数在变小,说明取值有效,否则要增大步长。前面说了。步长太大,会导致迭代过快,甚至有可能错过最优解。步长太小,迭代速度太慢,很长时间算法都不能结束。所以算法的步长需要多次运行后才能得到一个较为优的值。

    2. 算法参数的初始值选择。 初始值不同,获得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;当然如果损失函数是凸函数则一定是最优解。由于有局部最优解的风险,需要多次用不同初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。

    3. 归一化。由于样本不同特征的取值范围不一样,可能导致迭代很慢,为了减少特征取值的影响,可以对特征数据归一化,也就是对于每个特征x,求出它的期望

    4. x ‾ \overline{x} x 和标准差std(x),然后转化为:

    x − x ‾ s t d ( x ) \frac{x-\overline{x}}{std(x)} std(x)xx

    这样特征的新期望为0,新方差为1,迭代次数可以大大加快。

    展开全文
  • 交叉熵误差(cross entropy error)

    千次阅读 2019-03-01 16:48:42
    熵真是一个神奇的东西,据说之所以把它命名为熵就是因为它难以理解 但是它确实是一个很有用的西东,光机器学习里面,就经常见到它的身影,决策树要用到...交叉熵误差: 为实际的分类结果,为预测的结果,(并且...

    熵真是一个神奇的东西,据说之所以把它命名为熵就是因为它难以理解

    但是它确实是一个很有用的西东,光机器学习里面,就经常见到它的身影,决策树要用到它,神经网络和logistic回归也用到了它。

    先说熵的定义:

    熵定义为信息的期望,某个待分类事物可以划分为多个类别,其中类别x_{i}的信息为(p(x_{i})x_{i}的概率):

    l(x_{i})=-log_{2}p(x_{i})

    熵为所有类别的信息期望值:
    H=-\sum _{i=1}^{n}p(x_{i})log_{2}p(x_{i})

    交叉熵误差:

    E=-\sum _{i=1}^{n}t_{i}logy_{i}

    t=(t_{1},t_{2},...,t_{n})为实际的分类结果,y={y_{1},y_{2},...,y_{n}} 为预测的结果,(0\leq y_{i}\leq 1 并且 \sum _{i=1}^{n}y_{i}=1  )

     

    这个函数被作为神经网络和logistic 回归的损失函数,因为它有三个很好的性质:

    1. 它可以真实的反应出真实分类结果和预测结果的误差

    假设t_{i}=1, 即真实的分类结果是 t_i, 则 交叉熵误差可以简化为:

    E=-logy_{i}

    函数图像如下:

     

    可以看到,y_{i} 越接近 1,即预测结果和真实分类结果越接近,误差越接近0, 即误差越小

     

    2. 交叉熵误差函数和softmax(神经网络用到的输出函数)和sigmoid函数(logistic回归用到的函数)的复合函数是凸函数,即存在全局最优解

    凸函数的充要条件是:如果二阶导数存在,二阶到大于0 ,现在以softmax函数为例证明:

    softmax函数定义:

    y_{i}=\frac{e^{x_{i}}}{\sum _{1}^{n}e^{x_k}}

    输入为x=(x_{1},x_{2},...x_{n})  输出为 y=(y_{1},y_{2},...,y_{n})

    交叉熵误差函数:

    E=-\sum _{i=1}^{n}t_{i}logy_{i}

    两个复合函数对x_{i}求一阶偏导:

    E^{'}_{x_{i}}=-\frac{t_{i}}{y_{i}}\times y'_{i}-\sum _{j \neq i } \frac{t_{j}}{y_{j}}\times y'_{j}

     

     

    所以:

    E^{'}_{x_i}=-t_i(1-y_i)+y_i\sum _{j \neq i }t_j=y_i-t_i

    \sum t_i=1

    二阶导数:

    E''_{x_{i}}=(y_i-t_i)'=y_i(1-y_i)

    由于0< y_i< 1 上面的结果恒大于0, 二阶导数恒大于0 所以它是凸函数

     

    3. 在用梯度下降发求解最优解时,需要用到一阶导数,从上面可以看到一阶导数:

     

    E^{'}_{x_i}=y_i-t_i

     

    很简洁漂亮,可以简化整个求解过程

     

    数学真的很神奇!

     

    reference:

    机器学习实战:peter harrington(美)

    深度学习入门:基于python的理论与实现  斋藤康毅(日)

    展开全文
  • mini-batch版交叉熵误差

    2021-01-24 14:45:58
    mini-batch版交叉熵误差 深度学习入门:基于Python的理论与实现 # 可以同时处理单个数据和批量数据 def cross_entropy_error(y, t): '''判断维数,将单个数据和批量数据处理成同样的形式, 方便后面shape[0]取出...

    深度学习入门:基于Python的理论与实现

    # 可以同时处理单个数据和批量数据
    def cross_entropy_error(y, t):
    	'''判断维数,将单个数据和批量数据处理成同样的形式,
    	方便后面shape[0]取出batch_size'''
        if y.ndim == 1:
            t = t.reshape(1, t.size)
            y = y.reshape(1, y.size)
    
    	# shape[0]即最外层的个数,即batch_size(每一批的数据量)
        batch_size = y.shape[0]
        print("y.shape[0]:", y.shape[0])
        print("y.shape:", y.shape)
        # 返回平均交叉熵误差
        return -np.sum(t * np.log(y + 1e-7)) / batch_size
    

    首先判断维数
    当维数为1时

    # 我们将十个数看做一组数据
    t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
    y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]
    temp = cross_entropy_error(np.array(y), np.array(t))
    print(temp)
    

    运行结果:

    y.shape[0]: 1
    y.shape: (1, 10)
    0.510825457099338
    

    可以看出shape[0]为输入数据的batch_size,但是如果不进行判断,不对一维情况进行处理。

    def cross_entropy_error(y, t):
        # if y.ndim == 1:
        #     t = t.reshape(1, t.size)
        #     y = y.reshape(1, y.size)
    
        batch_size = y.shape[0]
        print("y.shape[0]:", y.shape[0])
        print("y.shape:", y.shape)
        return -np.sum(t * np.log(y + 1e-7)) / batch_size
    
    t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
    y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]
    temp = cross_entropy_error(np.array(y), np.array(t))
    print(temp)
    

    运行结果:

    y.shape[0]: 10
    y.shape: (10,)
    0.0510825457099338
    

    可以看出shape[0]为10,而正确batch_size为1,没有得到正确的值。

    归根结底,此判断就是为了能够统一单个数据和多个数据,求单个数据的交叉熵误差时,需要改变数据的形状。

    if y.ndim == 1:
            t = t.reshape(1, t.size)
            y = y.reshape(1, y.size)
    
    展开全文
  • 神经网络NN以某个指标为线索...很多函数都可以作为损失函数loss function,但常用的是均方误差和交叉熵误差等。 一、均方误差Mean Squared Error E=12∑k(yk−tk)2E=\frac12\sum_{k}(y_k-t_k)^2E=21​k∑​(yk​−t...
  • 神经网络的学习中的“学习”是指从训练数据中自动获取最优权重参数的过程。 为了使神经网络能进行学习,将导入...这个损失函数可以使用任意函数,但一般用均方误差和交叉熵误差等。 损失函数是表示神经网络性能的“恶
  • 比如对于一个4分类问题,期望输出应该为 g0=[0,1,0,0] ,实际输出为 g1=[0.2,0.4,0.4,0] ,计算g1与g0之间的差异所使用的方法,就是损失函数,分类问题中常用损失函数交叉熵交叉熵(cross entropy)描述的是两...
  • mini-batch 版交叉熵误差的实现

    千次阅读 2019-06-19 20:45:49
    4.2.4 mini-batch 版交叉熵误差的实现 one-hot格式的监督数据 def cross_entropy_error(y, t): if y.ndim == 1: #一维数组要把第一维放到第二维,表示只有一条数据 t =...
  • softmax函数交叉熵损失函数

    千次阅读 2020-12-06 05:15:56
    交叉熵损失函数 softmax
  • 交叉熵损失函数详解

    万次阅读 多人点赞 2019-06-12 15:14:45
    模型的最后通常会经过一个 Sigmoid 函数,输出一个概率值,这个概率值反映了预测为正类的可能性:概率越大,可能性越大。 Sigmoid 函数的表达式和图形如下所示: 其中 s 是模型上一层的输出...
  • 交叉熵损失函数

    2020-12-14 16:10:18
    为了衡量模型的优劣,需要使用损失函数,在线性回归模型中通常使用平方损失函数,这是逻辑回归的平方损失函数。 采用梯度下降法来更新W和B时需要计算损失函数对W和B的偏导数,这分别是损失函数对W和B的偏导数。 ...
  • 交叉熵代价函数(Cross-entropy cost function)是用来衡量人工神经网络(ANN)的预测值与实际值的一种方式。与二次代价函数相比,它能更有效地促进ANN的训练。在介绍交叉熵代价函数之前,本文先简要介绍二次代价...
  • Cross Entropy Error Function(交叉熵损失函数) 例子 表达式 函数性质 学习过程 优缺点 这篇文章中,讨论的Cross Entropy损失函数常用于分类问题中,但是为什么它会在分类问题中这么有效呢?我们先从一个简单...
  • 交叉熵损失函数 一般我们学习交叉熵损失函数是在二元分类情况下: L=−[ylogy^+(1−y)log(1−y^)]L=−[ylog ŷ +(1−y)log (1−ŷ )]L=−[ylogy^​+(1−y)log(1−y^​)] 推而广之,我们可以得到下面这个交叉熵损失...
  • 理解交叉熵损失函数

    2020-01-15 13:27:40
    由以上描述可知,交叉熵是用来评估两个样本分布之间的距离,我们可以使用交叉熵来评估当前训练得到的概率分布与真实分布的差异情况,也就是使用交叉熵损失函数刻画的是实际输出(概率)与期望输出(概率)的距离,也...
  • 深度学习中交叉熵损失函数详解

    千次阅读 2020-04-05 23:33:18
    其中上面那个方程式是用于计算最后一层激活函数为softmax函数交叉熵损失函数,下面这个是用于计算最后一层激活函数为sigmoid函数交叉熵损失函数。 下面我将从为什么使用交叉熵函数、交叉熵函数数学推导、为什么...
  • 最近在学习自然语言处理,其中大量模型涉及到了用softmax层作为输出,再用交叉熵(cross-entropy loss)作为损失函数。 在此回忆一下交叉熵损失函数,并从3个方面: 为了解决sigmoid激活函数的问题 从极大似然估计...
  • 平方损失函数交叉熵损失函数

    万次阅读 2018-05-07 15:21:43
    对于机器学习中常见的损失函数有:平方损失函数交叉熵损失函数。在本文中将讲述两者含义与响应的运用区别。 2. 平方损失函数 平方损失函数较为容易理解,它直接测量机器学习模型的输出与实际结果之间的距离。...
  • 损失函数交叉熵与平方误差

    千次阅读 2019-03-22 19:11:44
    题目:一文搞懂交叉熵在机器学习中的使用,透彻理解交叉熵背后...题目:平方损失函数交叉熵损失函数 https://blog.csdn.net/m_buddy/article/details/80224409 题目:分类与回归的区别 https://blog.csdn.net/u010...
  • 转者注:上面虽然使用的是Sigmoid函数,其实分类问题使用的是softmax函数,softmax可以看做sigmoid在对分类问题上的推广。 转者注:上面的y1′(1−y1′)y&#x27;_1(1-y&#x27;_1)y1′​(1−y1′​)是a对z...
  • 简单的交叉熵损失函数

    千次阅读 2018-09-15 16:10:32
    说起交叉熵损失函数「Cross Entropy Loss」,脑海中立马浮现出它的公式:   L=−[ylog y^+(1−y)log (1−y^)]L=−[ylog y^+(1−y)log (1−y^)]   我们已经对这个交叉熵函数非常熟悉,大多数情况下都是直接...
  • 文章目录一、二次代价函数(改变激活函数)二、熵(Entropy)与交叉熵(Cross-Entropy)原理及推导1、熵2、交叉熵3、交叉熵作为代价函数(改变代价函数)4、二分类交叉熵回归用二次代价、分类用交叉熵三、MNIST数据...
  • 交叉熵损失函数 交叉熵损失函数是在分类问题中常用的一种损失函数交叉熵能够衡量同一个随机变量中的两个不同概率分布的差异程度,在机器学习中就表示为真实概率分布与预测概率分布之间的差异。交叉熵的值越小,...
  • sigmoid和交叉熵损失函数

    千次阅读 2020-01-03 23:08:38
    sigmoid和二元交叉熵 sigmoid函数 Sigmoid函数是一个在生物学中常见的S型函数,将值映射到(0,1)之间,常用于神经元的激活函数。σ(x)=11+e−x\sigma(x)=\frac{1}{1+e^{-x}}σ(x)=1+e−x1​ 画出函数图像 import ...
  • 均方误差: t是真实标签,y是网络预测值。 将其求导: 发现它的变化与激活函数的导数有关系
  • 这个损失函数有很多,但是一般使用均方误差和交叉熵误差等。 1.均方误差(mean squared error) 先来看一下表达式: 用于将的求导结果变成,是神经网络的输出,是训练数据的标签值,k表示数据的维度。 用...
  • 文章目录模型交叉熵损失函数及softmax计算误差Python代码 模型 前面得到的Z,然后经过softmax得到输出a,然后根据groud truth y计算损失函数交叉熵损失函数及softmax 计算误差 Python代码 def delta_cross_...
  • 交叉熵损失函数对比平方损失函数其没有那么严格,其只关注对正确类别的预测概率。 1.softmax 假定有4个特征,3个用于分类的类别,则有如下的12个权重,3个输出: 为什么要用softmax? 直接用上面的公式得到...
  • 目录 一、softmax 函数 二、损失函数 loss function 三、最后的准备工作 ​ 四、具体的推导过程 s...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,742
精华内容 5,896
关键字:

交叉熵误差函数