注意:绘画太难了,因为他们画,本文中的所有插图来自基本算法饺子机类。请勿转载

1.习模型:

事实上,基本上全部的基本机器学习模型都能够概括为下面的特征:依据某个函数,将输入计算并输出。

图形化表示为下图:

当我们的g(h)为sigmoid函数时候,它就是一个逻辑回归的分类器。当g(h)是一个仅仅能取0或1值的函数时,它就是一个感知机。那么问题来了,这一类模型有明显缺陷:当模型线性不可分的时候。或者所选取得特征不完备(或者不够准确)的时候。上述分类器效果并非特别喜人。

例如以下例:

我们能够非常轻易的用一个感知机模型(感知器算法)来实现一个逻辑与(and)。逻辑或(or)和逻辑或取反的感知器模型,(感知器模型算法链接),由于上述三种模型是线性可分的。可是。假设我们用感知器模型取实现一个逻辑非异或(同样为1,不同为0),我们的训练模型的全部输出都会是错误的,该模型线性不可分。

                                          

2.神经网络引入:

我们能够构造下面模型:

(当中,A代表逻辑与,B代表逻辑或取反。C代表逻辑或)

上述模型就是一个简单的神经网络,我们通过构造了三个感知器,并将两个感知器的输出作为了还有一个感知其的输入,实现了我们想要的逻辑非异或模型,攻克了上述的线性不可分问题。

那么问题是怎么解决的呢?事实上神经网络的实质就是每一层隐藏层(除输入和输出的节点,后面介绍)的生成。都生成了新的特征,新的特征在此生成新的特征。知道最新的特征能非常好的表示该模型为止。这样就攻克了线性不可分或特征选取不足或不精确等问题的产生。(曾经曾介绍过线性不可分的实质就是特征不够)

神经网络的模型结构例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDQwMzg5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">(蓝色。红色。黄色分别代表输入层,影藏层,输出层)

在此我们介绍的神经网络中的每个训练模型用的都是逻辑回归模型即g(h)是sigmoid函数。

我们能够将神经网络表演示样例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDQwMzg5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDQwMzg5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

3.神经网络的预測结果(hypothesis函数)的计算和CostFunction的计算

预測结果的计算事实上与普通的逻辑回归计算没有多大差别。

仅仅是有时候须要将某几个逻辑回归的输出作为其它逻辑回归模型的输入罢了,比方上例的输出结果为:

那么CostFunction的计算又和逻辑回归的CostFunction计算有什么差别呢?

逻辑回归的CostFunction例如以下:

上述式子的本质是将预測结果和实际标注的误差用某一种函数估算,可是我们的神经网络模型有时候输出不止一个,所以,神经网络的误差估算须要将输出层全部的CostFunction相加:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDQwMzg5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

k:代表第几个输出。

补充:神经网络能够解决几分类问题?

理论上,当输出单元仅仅有一个时,能够解决2分类问题,当输出单元为2时能够解决4分类问题。以此类推...

实质上。我们三个输出单元时,能够解决三分类问题([1,0,0],[0,1,0],[0,0,1]),为什么如此设计?临时留白。以后解决

ps:面试题:一个output机器,15%可能输出1。85%输出0,构造一个新的机器。使0,1输出可能性同样? 答:让output两次输出01代表0,10代表1,其余丢弃

4.神经网络的训练

这儿也同于logistic回归,所谓的训练也就是调整w的权值,让我们再一次把神经网络的CostFunction写出来!

W代表全部层的特征权值,Wij(l)代表第l层的第i个元素与第j个特征的特征权值

m代表样本个数,k代表输出单元个数

hw(x(i))k代表第i个样本在输出层的第k个样本的输出 y(i)k代表第i个样本的第k个输出

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDQwMzg5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

然后同于logistic回归。将全部的W更新就可以。难处在于此处的偏导数怎么求?首先得说说链式求导法则:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDQwMzg5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

所以我们能够有:

接下来的问题就是有theta了,当我们要求的错误变化率是最后一层(最后一层既是输出层的前一层)且仅仅看一个输出神经元时则:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDQwMzg5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDQwMzg5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

多个相加就可以

那么中间层次的神经元变化率怎样求得呢?我们须要研究l层和了+1层之间的关系,例如以下图:

第l层的第i个Z与第l层的第i个a的关系就是取了一个sigmod函数,然而第l层的第i个a与和其相应的w相乘后在加上其它的节点与其权值的乘积构成了第l+1层的Z,好拗口,好难理解啊。看下式:

大体也就是这么个情况,详细的步骤为:

1.利用前向传播算法,计算出每一个神经元的输出

2.对于输出层的每个输出。计算出其所相应的误差

3.计算出每一个神经元的错误变化率即:

4.计算CostFunction的微分,即:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDQwMzg5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

5.代码:

点击打开链接

版权声明:本文博主原创文章,博客,未经同意不得转载。

神经网络和BP算法推导的更多相关文章

  1. 从 0 开始机器学习 - 神经网络反向 BP 算法!

    最近一个月项目好忙,终于挤出时间把这篇 BP 算法基本思想写完了,公式的推导放到下一篇讲吧. 一.神经网络的代价函数 神经网络可以看做是复杂逻辑回归的组合,因此与其类似,我们训练神经网络也要定义代价函 ...

  2. [DL学习笔记]从人工神经网络到卷积神经网络_1_神经网络和BP算法

    前言:这只是我的一个学习笔记,里边肯定有不少错误,还希望有大神能帮帮找找,由于是从小白的视角来看问题的,所以对于初学者或多或少会有点帮助吧. 1:人工全连接神经网络和BP算法 <1>:人工 ...

  3. 误差逆传播(error BackPropagation, BP)算法推导及向量化表示

    1.前言 看完讲卷积神经网络基础讲得非常好的cs231后总感觉不过瘾,主要原因在于虽然知道了卷积神经网络的计算过程和基本结构,但还是无法透彻理解卷积神经网络的学习过程.于是找来了进阶的教材Notes ...

  4. 三层神经网络自编码算法推导和MATLAB实现 (转载)

    转载自:http://www.cnblogs.com/tornadomeet/archive/2013/03/20/2970724.html 前言: 现在来进入sparse autoencoder的一 ...

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

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

  6. BP算法推导python实现

    def sigmoid(inX):   return 1.0/(1+exp(-inX))   '''标准bp算法每次更新都只针对单个样例,参数更新得很频繁sdataSet 训练数据集labels 训练 ...

  7. 神经网络的BP算法

    正向传播: W下脚标定义根据用户自己的习惯 反向传播算法 1.误差由本层传到上层相关联的结点,权重分配 2.上层某个结点的总误差 2.误差最小化与权重变量有关,最小梯度法. 权重因子更新 偏导数求解, ...

  8. 【神经网络】BP算法解决XOR异或问题MATLAB版

    第一种 %% %用神经网络解决异或问题 clear clc close ms=4;%设置4个样本 a=[0 0;0 1;1 0;1 1];%设置输入向量 y=[0,1,1,0];%设置输出向量 n=2 ...

  9. bp算法推导过程

    参考:张玉宏<深度学习之美:AI时代的数据处理与最佳实践>265-271页

随机推荐

  1. sql 列轉行、行轉列

    PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P ...

  2. C#设置IP地址,启用禁用适配器

    界面效果图如下: 报表界面 说下关键代码 需要开启 Windows Management Instrumentation服务(默认已经开启),在程序中需要增加 Management引用. 主要有Net ...

  3. JavaScript_object(基于map和数组练习)

    JavaScript在编程过程中,不会像java那么方便,提供大量的API让开发这直接去调用,但底层也封装大量的工具让开发者写方法去实现, 以map为例,写简单的增删改查模拟java中的map: fu ...

  4. 【转】各种字符串Hash函数比较

    常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法.这些函数使用位运算使得每一个字符都对最后的函数值产生影响.另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎 ...

  5. underscorejs-groupBy学习

    2.18 groupBy 2.18.1 语法 _.groupBy(list, iteratee, [context]) 2.18.2 说明 把list分为多个集合,iterator为分组的依据,返回值 ...

  6. JavaScript奇技淫巧44招

    JavaScript是一个绝冠全球的编程语言,可用于Web开发.移动应用开发(PhoneGap.Appcelerator).服务器端开发(Node.js和Wakanda)等等.JavaScript还是 ...

  7. 如何完全禁用或卸载Windows 10中的OneDrive - 51CTO.COM

    OneDrive 是微软的个人云存储平台,提供了对个人用户的文件托管.存储和同步等服务,OneDrive 默认被内置在 Windows 10 操作系统当中,而且当用户使用 微软账户 登录时,OneDr ...

  8. MYSQL管理之主从同步管理 转载

    MYSQL主从同步架构是目前使用最多的数据库架构之一,尤其是负载比较大的网站,因此对于主从同步的管理也就显得非常重要,新手往往在出现主从同步错误的时候不知道如何入手,这篇文章就是根据自己的经验来详细叙 ...

  9. C# Ini文件操作

    在开源中国看到的操作ini文件的,写的还不看,留着以后用 using System; using System.IO; using System.Runtime.InteropServices; us ...

  10. type和instance

    获取对象类型 type(object) >>> test_data = [1, 2, 3] >>> type(test_data) <type 'list'& ...