Microsoft 神经网络分析算法(原理篇)

前言

本篇文章继续我们的微软挖掘系列算法总结,前几篇文章已经将相关的主要算法做了详细的介绍。在开始Microsoft 神经网络分析算法之前,本篇我们先将神经网络分析算法做一个简单介绍,此算法由于其本身的复杂性,所以我打算在开始之前先将算法原理做一个简单的总结,因为本身该算法就隶属于高等数学的研究范畴,我们对算法的推断和验证过程不做研究,只介绍该算法特点以及应用场景,且个人技术能力有限,不当之处还望勿喷。

算法起源

在思维学中,人类的大脑的思维分为:逻辑思维、直观思维、和灵感思维三种基本方式。

而神经网络就是利用其算法特点来模拟人脑思维的第二种方式,它是一个非线性动力学系统,其特点就是信息分布式存储和并行协同处理,虽然单个神经元的结构及其简单,功能有限,但是如果大量的神经元构成的网络系统所能实现的行为确实及其丰富多彩的。其实简单点讲就是利用该算法来模拟人类大脑来进行推理和验证的。

我们先简要的分析下人类大脑的工作过程,我小心翼翼的在网上找到了一张勉强看起来舒服的大脑图片

嗯,看着有那么点意思了,起码看起来舒服点,那还是在19世纪末,有一位叫做:Waldege的大牛创建了神经元学活,他说人类复杂的神经系统是由数目繁多的神经元组成,说大脑皮层包括100亿个以上的神经元,每立方毫米源数万个,汗..我想的是典型的大数据。他们相互联系形成神经网络,通过感官器官和神经来接受来自身体外的各种信息(在神经网络算法中我们称:训练)传递中枢神经,然后经过对信息的分析和综合,再通过运动神经发出控制信息(比如我在博客园敲文字),依次来实现机体与外部环境的联系。

神经元这玩意跟其它细胞一样,包括:细胞核、细胞质和细胞核,但是它还有比较特殊的,比如有许多突起,就跟上面的那个图片一样,分为:细胞体、轴突和树突三分部。细胞体内有细胞核,突起的作用是传递信息。树突的作用是作为引入输入信息的突起,而轴突是作为输出端的突起,但它只有一个。

也就是说一个神经元它有N个输入(树突),然后经过信息加工(细胞核),然后只有一个输出(轴突)。而神经元之间四通过树突和另一个神经元的轴突相联系,同时进行着信息传递和加工。我去...好复杂....

我们来看看神经网络的原理算法公式

中间那个圆圆的就是细胞核了,X1、X2、X3....Xn就是树突了,而Yi就是轴突了....是不是有那么点意思了,嗯...我们的外界信息是通过神经元的树突进行输入,然后进过细胞核加工之后,经过Yi输出,然后输出到其它神经元...

但是这种算法有着它自身的特点,就好像人类的大脑神经元一样,当每次收到外界信息的输入,不停的刺激的同时会根据信息的不同发生自身的调节,比如:通过不断的训练运动员学会了远动,不停的训练学会了骑自行车....等等吧这些人类的行为形成,其本质是通过不停的训练数百亿脑神经元形成的。而这些行为的沉淀之后就是正确结果导向。

同样该算法也会通过X1、X2、X3....Xn这些元素不停的训练,进行自身的参数的调整来适应,同样训练次数的增加而形成一个正确的结果导向。这时候我们就可以利用它的自身适应过程产生正确的结果,而通过不断的训练使其具备学习功能,当然,该算法只是反映了人脑的若干基本特性,但并非生物系统的逼真描述,只是某种简单的模仿、简化和抽象。

该算法不同数字计算机一样,会按照程序的一步一步地执行运算,而是能够自身适应环境、总结规律、完成某种运算、识别或控制过程,而这就是机器人的起源...人工智能的基础。

神经网络算法原理

由于神经网络算法的设计面太大,我们此处暂且只分析Microsoft神经网络算法的原理,在Microsoft神经网络算法中,我们可以简化成下面这个图片:

Microsoft神经网络使用的由最多三层神经元组成的“多层感知器”网络,分别为:输入层、可选隐含层和输出层。

输入层:输入神经元定义数据挖掘模型所有的输入属性值以及概率。

隐含层:隐藏神经元接受来自输入神经元的输入,并向输出神经元提供输出。隐藏层是向各种输入概率分配权重的位置。权重说明某一特定宿儒对于隐藏神经元的相关性或重要性。输入所分配的权重越大,则输入值也就越重要。而这个过程可以描述为学习的过程。权重可为负值,表示输入抑制而不是促进某一特定结果。

输出层:输出神经元代表数据挖掘模型的可预测属性值。

数据从输入经过中间隐含层到输出,整个过程是一个从前向后的传播数据和信息的过程,后面一层节点上的数据值从与它相连接的前面节点传来,之后把数据加权之后经过一定的函数运算得到新的值,继续传播到下一层节点。这个过程就是一个前向传播过程。

而当节点输出发生错误时,也就是和预期不同,神经网络就要自动“学习”,后一层节点对前一层节点一个“信任”程度(其实改变的就是连接件的权重),采取降低权重的方式来惩罚,如果节点输出粗粗哦,那就要查看这个错误的受那些输入节点的影响,降低导致出错的节点连接的权重,惩罚这些节点,同时提高那些做出正确建议节点的连接的权重。对那些受到惩罚的节点而说,也用同样的方法来惩罚它前面的节点,直到输入节点而止。这种称为:回馈。

而我们学习的过程就是重复上面的介绍的流程,通过前向传播得到输入值,用回馈法进行学习。当把训练集中的所有数据运行过一遍之后,则称为一个训练周期。训练后得到神经网络模型,包含了训练集中相应值和受预测值影响变化的规律。

在每个神经元中的隐含层中都有着复杂的函数,并且这些都非线性函数,并且类似生物学神经网络的基本传输特征,这些函数称之为:激活函数,即:输入值发生细微的变化有时候会产生较大的输出变化。

当然Microsot神经网络算法使用的函数是这样的:

其中a是输入值,而O是输出值。

处理反向传播,计算误差,更新权值时输出层所用的误差函数为交叉熵

上述公式中Oi是输出神经元i的输出,而Ti是基于训练样例的该输出神经元实际值。

隐含神经元的误差是基于下一层的神经元的误差和相关权值来计算的。公式为:

其中Oi是输出神经元i的输出,该单元有j个到下一层的输出。Erri是神经元i的误差,Wij是这两个神经元之间的权值。

一旦计算出每个神经元的误差,则下一步是使用以下方法来调整网络中的权值。

其中l为0-1范围内的数,称之为学习函数。

其实以上函数应用的激活函数还是挺简单的。有兴趣的可以进行详细的研究和公式的推算,咱这里只是简要分析,列举算法特点。

Microsoft神经网络分析算法特点

经过上面的原理分析,我们知道了神经网络算法分为了:输入层、隐含层、输出层三层方式连接,其中隐含层是可选的,也就是说在Microsoft神经网络算法中如果不经过隐含层,则输入将会直接从输入层中的节点传递到输出层中的节点。

输入层特点:如果输入层如果为离散值,那么输入神经元通常代表输入属性的单个状态。如果输入数据包含Null值,则缺失的值也包括在内。具有两个以上状态的离散输入属性值会生成一个输入神经元,如果存在NUll值,会自动再重新的生成一个输入的神经元,用以处理Null值,一个连续的输入属性将生成两个输入神经元:一个用于缺失的状态、一个用以连续属性自身的值。输入神经元可向一个多多个神经元提供输入。

隐含层特点:隐含神经元接受来自输入神经元的输入,并向输出神经元提供输出。存在激活函数供其使用改变阀值。

输出层特点:输出神经如果对于离散输入属性,输出神经元通常代表可预测可预测属性的单个预测状态,其中包括缺失的Null值。

如果挖掘模型包含一个或多个仅用于预测的属性,算法将创建一个代表所有这些属性的单一网络,如果挖掘模型包含一个或多个同时用于输入和预测的属性,则该算法提供程序将为其中每个属性构建一个网络。

对于具有离散值的输入属性和可预测属性,每个输入或输出神经元各自表示单个状态。对于具有连续值的输入属性和可预测属性,每个输入或输出神经元分别表示该属性值的范围和分布。

算法提供程序通过接受之前保留的定性数据集也就是事例集合并将维持数据中的每个事例的实际已知值与网络的预测进行比较。即通过一个“批学习”的过程来迭代计算的整个网络,并且改变的输入权重。该算法处理了整个事例集合之后,将检查每个神经元的预测值和实际值。该算法将计算错误程度(如果错误),并且调整与神经输入关联的权重,并通过一个“回传”的过程从输出神经元返回到输出神经元。然后,该算法对整个事例集合重复该过程。经过以上的层层沉淀我们的算法就算从一个不懂的“婴儿”逐渐成长成“成人”,而这个结果就是我们那它来发掘和预测的工具。

神经网络分析算法应用场景

神经网络研究内容广泛,非本篇文章所能涵盖,而且它反映了多学科交叉技术领域的特点。研究工作集中以下领域:

(1)生物原型研究。从生理学、心理学、脑科学、病理学等生物科学方面研究神经细胞、神经网络、神经系统的生物原型结构及其功能机理。

(2)建立理论模型。根据生物原型的研究,建立神经元、神经网络的理论模型。其中包括概念模型、知识模型、物理化学模型、数学模型等。

(3)网络模型与算法研究。在理论模型研究的基础上构作具体的神经网络模型,以实现计算机模拟或准备制作硬件,包括网络学习算法的研究。这方面的工作也称为技术模型研究。

(4)人工神经网络应用系统。在网络模型与算法研究的基础上,利用人工神经网络组成实际的应用系统,例如,完成某种信号处理或模式识别的功能、构造专家系统、制成机器人等等。

我去....这那是我这个码农层面研究的事,上面说的种种如果有兴趣童鞋可以继续深入研究,随便一块玩好了都可以升官加禄,衣食无忧......

回归正题,我们还是来看看我们的Microsoft 神经网络分析算法在数据挖掘领域的应用那些:

  • 营销和促销分析,如评估直接邮件促销或一个电台广告活动的成功情况。
  • 根据历史数据预测股票升降、汇率浮动或其他频繁变动的金融信息。
  • 分析制造和工业流程。
  • 文本挖掘。
  • 分析多个输入和相对较少的输出之间的复杂关系的任何预测模型。

其实它的应用场景是最广泛的,比如当我们拿到一堆数据的时候,针对一个目标无从下手毫无头绪的时候,Microsoft 神经网络分析算法就是该应用的最佳场景了,因为其利用“人脑”的特点去茫茫的数据海洋中去发掘有用的信息。比如:BOSS把公司的数据库扔给你了...让你分析下公司为啥不挣钱...或者说啥子原因导致的不盈利...这时候该算法就应该出场了。

不过从最近的市场中发现,该算法的在"文本挖掘"中特别火,而且更在微软中得到充分利用,比如当前的:微软小冰,各种平台下的语音识别,并且就连苹果这样的孤傲的公司也在慢慢的臣服于该算法的魅力下。

结语

本篇文章到此结束了,满篇的只是简要的介绍了神经网络算法的一些基础和原理,当然因为该算法的高大上我暂且不做深入分析,只是记住其典型的应用场景即可,下一篇的文章我们将通过微软的VS工具使用该算法做一个详细的数据挖掘应用方法介绍。

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2015-08-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏项勇

笔记68 | 切换fragmengt的replace和add方法笔记

1444
来自专栏聊聊技术

原 数据结构-二叉搜索树(Binary S

2887
来自专栏ml

朴素贝叶斯分类器(离散型)算法实现(一)

1. 贝叶斯定理:        (1)   P(A^B) = P(A|B)P(B) = P(B|A)P(A)   由(1)得    P(A|B) = P(B|...

3477
来自专栏拭心的安卓进阶之路

Java 集合深入理解(12):古老的 Vector

今天刮台风,躲屋里看看 Vector ! 都说 Vector 是线程安全的 ArrayList,今天来根据源码看看是不是这么相...

2447
来自专栏desperate633

LeetCode Invert Binary Tree题目分析

Invert a binary tree. 4 / \ 2 7 / \ / \1 3 6 9 to4 / \ 7 2 / \ / \9 6 3 1 Tri...

871
来自专栏拭心的安卓进阶之路

Java 集合深入理解(6):AbstractList

今天心情比天蓝,来学学 AbstractList 吧! ? 什么是 AbstractList ? AbstractList 继承自 AbstractCollec...

19210
来自专栏alexqdjay

HashMap 多线程下死循环分析及JDK8修复

1.1K4
来自专栏计算机视觉与深度学习基础

Leetcode 114 Flatten Binary Tree to Linked List

Given a binary tree, flatten it to a linked list in-place. For example, Given...

1958
来自专栏学海无涯

Android开发之奇怪的Fragment

说起Android中的Fragment,在使用的时候稍加注意,就会发现存在以下两种: v4包中的兼容Fragment,android.support.v4.ap...

3175
来自专栏开发与安全

算法:AOV网(Activity on Vextex Network)与拓扑排序

在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称之为AOV网(Activity on Vextex ...

2607

扫码关注云+社区