利用神经网络做分类的时候,可以将神经网络看成一个mapping function,从输入到输出经过复杂的非线性变换。而输出的预测值与实际的目标值总是存在一定偏差的,一般利用这种偏差建立error 函数,再利用back propagation 来训练神经网络。

我们可以探讨一下,error 函数与概率分布或者概率密度函数的关系。

二分类

先来看二分类情况(t∈{0,1}),我们假设网络最终的输出会经过一个sigmoid 函数:

y=σ(a)=11+exp(−a)

0≤y(x,w)≤1, y(x,w) 可以看成是x 属于第一类的条件概率 p(C2|x), 显然,p(C1|x)=1−y(x,w), 这种概率分布可以用伯努利分布来表示:

p(t|x,w)=y(x,w)t(1−y(x,w))1−t

那么,给定一组训练数据,含有N个独立观测的样本,我们可以建立如下的概率分布:

p(D|w)=∏n=1Np(tn|w)=∏k=1Nyntn(1−yn)1−tn

这里,yn=y(xn,w). 对上式取对数,对应的是似然估计函数:

lnp(D|w)=∑n=1N{tnlnyn+(1−tn)ln(1−yn)}

我们转换成error的时候,当然是希望error越小越好,最大似然估计对应最小的error,所以对上式取负号,可以得到如下的error函数:

E(w)=−∑n=1N{tnlnyn+(1−tn)ln(1−yn)}

这个就是训练二分类神经网络的时候,用的error 函数。

多个二分类

如果是多个二分类同时存在的情况,就像我们之前在离散变量的概率分布里讨论的那样,可以建立如下的概率分布:

p(t|x,w)=∏k=1Kytkk(1−yk)(1−tk)

整个训练集的概率分布可以表示为:

p(D|w)=∏n=1N∏k=1Kp(tnk|w)=∏n=1N∏k=1Kynktnk(1−ynk)1−tnk

与二分类的情况类似,我们可以通过似然函数,取负对数,得到相应的error 函数:

E(w)=−∑n=1N∑k=1K{tnklnynk+(1−tnk)ln(1−ynk)}

多分类

最后,我们再讨论一下多分类的情况,可以用0-1组成的向量来表示输出,每个输出向量中,只有一个1,其它都是0,第几个分量为1,说明输入的x 属于第几类。y(x,w)=p(tk=1|x), 这种多分类与上面讨论的多个二分类的情况不同,多分类中,每次的输出向量中只有一个1。显然:

∑k=1Kp(tk=1|x)=1

给定一个样本,其概率分布为:

p(t|x,w)=∏k=1Kp(tk|x,w)=∏k=1Kyk(x,w)tk

一组训练样本的概率分布可以表示为:

p(D|w)=∏n=1N∏k=1Kp(tnk|w)=∏n=1N∏k=1Kynktnk

对上式取负对数,我们可以得到多分类的error函数为:

E(w)=−∑n=1N∑k=1Ktnklnyk(xn,w)

其中:

yk(x,w)=exp(ak(x,w))∑jexp(aj(x,w))
 
from: http://blog.csdn.net/matrix_space/article/details/51463117

机器学习: 神经网络中的Error函数的更多相关文章

  1. ajax中error函数参数详解

    xhr.status和error函数中的status是不一样的,error函数中的status主要包括:"success"."notmodified".&quo ...

  2. $.ajax({})方法中的回调函数beforeSend,success,complete,error使用示例

    在与后台交互的时候,经常使用到jquery的$.ajax()方法来请求数据.回调函数用的比较多的是success,但是beforeSend.complete.error函数也是很有用的.下面是使用例子 ...

  3. 机器学习算法中的准确率(Precision)、召回率(Recall)、F值(F-Measure)

    摘要: 数据挖掘.机器学习和推荐系统中的评测指标—准确率(Precision).召回率(Recall).F值(F-Measure)简介. 引言: 在机器学习.数据挖掘.推荐系统完成建模之后,需要对模型 ...

  4. 如何选取一个神经网络中的超参数hyper-parameters

    1.什么是超参数 所谓超参数,就是机器学习模型里面的框架参数.比如聚类方法里面类的个数,或者话题模型里面话题的个数等等,都称为超参数.它们跟训练过程中学习的参数(权重)是不一样的,通常是手工设定的,经 ...

  5. [AI]神经网络章2 神经网络中反向传播与梯度下降的基本概念

    反向传播和梯度下降这两个词,第一眼看上去似懂非懂,不明觉厉.这两个概念是整个神经网络中的重要组成部分,是和误差函数/损失函数的概念分不开的. 神经网络训练的最基本的思想就是:先“蒙”一个结果,我们叫预 ...

  6. Batch Normalization原理及其TensorFlow实现——为了减少深度神经网络中的internal covariate shift,论文中提出了Batch Normalization算法,首先是对”每一层“的输入做一个Batch Normalization 变换

    批标准化(Bactch Normalization,BN)是为了克服神经网络加深导致难以训练而诞生的,随着神经网络深度加深,训练起来就会越来越困难,收敛速度回很慢,常常会导致梯度弥散问题(Vanish ...

  7. TensorFlow神经网络中的激活函数

    激活函数是人工神经网络的一个极其重要的特征.它决定一个神经元是否应该被激活,激活代表神经元接收的信息与给定的信息有关. 激活函数对输入信息进行非线性变换. 然后将变换后的输出信息作为输入信息传给下一层 ...

  8. 神经网络中 BP 算法的原理与 Python 实现源码解析

    最近这段时间系统性的学习了 BP 算法后写下了这篇学习笔记,因为能力有限,若有明显错误,还请指正. 什么是梯度下降和链式求导法则 假设我们有一个函数 J(w),如下图所示. 梯度下降示意图 现在,我们 ...

  9. 一文弄懂神经网络中的反向传播法——BackPropagation【转】

    本文转载自:https://www.cnblogs.com/charlotte77/p/5629865.html 一文弄懂神经网络中的反向传播法——BackPropagation   最近在看深度学习 ...

随机推荐

  1. 邀请用户进TestFlight 体验 App 的测试版本

    iphone手机用户,在工作中常见到,APP版本现在是Beta阶段(iOS版本),需要邀请一些用户来体验新版本,在版本上线前提出更好的建议及时进行修改,此时用到了testflight,很方便的通过邀请 ...

  2. SGU 205. Quantization Problem

    205. Quantization Problem time limit per test: 0.25 sec. memory limit per test: 65536 KB input: stan ...

  3. js求区间随机数

    function rnd(n, m){ var random = Math.round(Math.random()*(m-n)+n); return random; }

  4. HDU - 4777 离线树状数组

    离线树状数组搞一搞. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #de ...

  5. Linq简单使用

    简单使用 from子查询 关联多个数据源 分组 let 子句 查询对象(上例中为list变量)为IEnumerable<T>或IQueryable<T>类型 查询返回结果同样为 ...

  6. 【leetcode】22. Generate Parentheses

    题目描述: Given n pairs of parentheses, write a function to generate all combinations of well-formed par ...

  7. SQL必知必会 -------- 聚集函数、分组排序

    聚集函数 1.AVG()函数 输入:SELECT AVG(prod_price) AS avg_price FROM Products 输出: 警告:只用于单个列AVG()只能用来确定特定数值列的平均 ...

  8. java float与double的范围和精度

    float与double的范围和精度 1. 范围  float和double的范围是由指数的位数来决定的.  float的指数位有8位,而double的指数位有11位,分布如下:  float:  1 ...

  9. Unity Shader 之 透明效果

    透明效果 透明效果一般有两种实现方法: 第一种,使用透明度测试(Alpha Test) 第二种,使用透明度混合(Alpha Blending) 透明度测试和透明度混合机制: 透明度测试(Alpha T ...

  10. 使用matplotlib绘图(一)之折线图

    # 使用matplotlib绘制折线图 import matplotlib.pyplot as plt import numpy as np # 在一个图形中创建两条线 fig = plt.figur ...