机器学习: 神经网络中的Error函数

利用神经网络做分类的时候,可以将神经网络看成一个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))

时间: 2024-10-24 20:07:00

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

ajax中error函数参数详解

xhr.status和error函数中的status是不一样的,error函数中的status主要包括:"success"."notmodified"."error"."timeout"."parsererror",而xhr.status如下所讲. 一.error:function (XMLHttpRequest, textStatus, errorThrown) { } (默 认: 自动判断 (xml 或

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

1.什么是超参数 所谓超参数,就是机器学习模型里面的框架参数.比如聚类方法里面类的个数,或者话题模型里面话题的个数等等,都称为超参数.它们跟训练过程中学习的参数(权重)是不一样的,通常是手工设定的,经过不断试错来调整,或者对一系列穷举出来的参数组合一通枚举(叫做网格搜索).深度学习和神经网络模型,有很多这样的参数需要学习. 2.一些启发式规则 在实际应用中,当你使用神经网络去解决问题时,很难找到好的超参数.假设我们现在正在处理MINIST数据库的问题,并且对超参数是如何使用的一无所知.假设我们大

人肉工程在机器学习实践中的作用

关于人肉工程,包括业务知识.领域知识,经验等,在实际的机器学习问题中的应用,是一个屡见不鲜的话题,典型的有苦逼的数据清洗.人肉特征工程等.大家都想把尽可能多的过程由机器自动完成,但是目前的状态是,大部分机器学习问题中,最困难也最重要的部分,还是依靠人的经验来生成特征.那么人的经验为什么重要,能否用机器完成这个过程,本文试作一简单分析. 机器和人看待数据的区别 首先要看一下,从机器的角度看,机器学习是怎样一个问题?在机器看来,机器学习的问题通常是在一组特征上,最大化某个目标函数.注意,对于这组特征

机器学习--神经网络

以下是最近在学习人工智能时整理的一点心得,没有很深的东西,觉得可以简单的了解一下机器学习与神经网络是什么 机器学习 所谓机器学习,就是在大量数据的运行下,使得计算机可以进行归纳,预测   机器学习分为三类:监督学习,无监督学习,强化学习 抛开强化学习不讲,这里的监督学习与无监督学习的根本区别在于:有无数据的标记(即y值) 我们将输入的数据称之为数据的特征,一组特征为一个样本,需要求得的结果为标签 例: 1. 有一组数据,格式为(身高,体重,BMI) 这里使用监督学习的效果为: 输入若干样本的特征

检测某个方法是否属于某个类中--解析php函数method_exists()与is_callable()的区别

php函数method_exists() 与is_callable()的区别在哪?在php面相对象设计过程中,往往我们需要在调用某一个方法是否属于某一个类的时候做出判断,常用的方法有 method_exists()和is_callable() 相比之下,is_callable()函数要高级一些,它接受字符串变量形式的方法名作为 第一个参数,如果类方法存在并且可以调用,则返回true.如果要检测类中的方法是否能被调用,可以给函数传递一个数组而不是类的方法名作为参数.数组必须包含对象或类名,以将其作

PHP中的安全函数

安全是编程非常重要的一个方面.在任何一种编程语言中,都提供了许多的函数或者模块来确保程序的安全性.在现代网站应用中,经常要获取来自世界各地用户的输入,但是,我们都知道“永远不能相信那些用户输入的数据”.所以在各种的Web开发语言中,都会提供保证用户输入数据安全的函数.今天,我们就来看看,在著名的开源语言PHP中有哪些有用的安全函数. 在PHP中,有些很有用的函数开源非常方便的防止你的网站遭受各种攻击,例如SQL注入攻击,XSS(Cross Site Scripting:跨站脚本)攻击等.一起看看

理解与使用Javascript中的回调函数 -2

在javascript中回调函数非常重要,它们几乎无处不在.像其他更加传统的编程语言都有回调函数概念,但是非常奇怪的是,完完整整谈论回调函数的在线教程比较少,倒是有一堆关于call()和apply()函数的,或者有一些简短的关于callback的使用示例. 函数也是对象 想弄明白回调函数,首先的清楚地明白函数的规则.在javascript中,函数是比较奇怪的,但它确确实实是对象.确切地说,函数是用 Function()构造函数创建的Function对象.Function对象包含一个字符串,字符串

C中调用Lua函数

我们先来看一个简单的例子: lua_State* L = NULL; // 内部调用lua函数 double f(double x, double y) { double z; lua_getglobal(L, "f"); // 获取lua函数f lua_pushnumber(L, x); // 压入参数x和y lua_pushnumber(L, y); if(lua_pcall(L, 2, 1, 0) != 0) error(L, "error running functi

STM32工程中出现 error: A1163E: Unknown opcode R0, , expecting opcode or Macro错误分析及处理

最近测试以前的一个程序,一般都是打开以前写的程序修改参数直接测试 但是发现以前的编译后出现错误. 奇怪了,以前的出现都是调试好了的啊,一般都是没有错误的,迅速找问题 跳转到错误代码行 代码区域 1 Heap_Size EQU 0x00000000 2 3 AREA HEAP, NOINIT, READWRITE, ALIGN=3 4 __heap_base 5 Heap_Mem SPACE Heap_Size 6 __heap_limit 7 8 PRESERVE8 9 THUMB ;指定为TH