ANN

关于ANN

人工神经网络(英语:Artificial Neural Network,ANN),简称神经网络(Neural Network,NN)或类神经网络,在机器学习和认知科学领域,是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。

神经网络由大量的人工神经元联结进行计算。大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自适应系统,通俗的讲就是具备学习功能。现代神经网络是一种非线性统计性数据建模工神经网络通常是通过一个基于数学统计学类型的学习方法(Learning Method)得以优化,所以也是数学统计学方法的一种实际应用,通过统计学的标准数学方法我们能够得到大量的可以用函数来表达的局部结构空间,另一方面在人工智能学的人工感知领域,我们通过数学统计学的应用可以来做人工感知方面的决定问题(也就是说通过统计学的方法,人工神经网络能够类似人一样具有简单的决定能力和简单的判断能力),这种方法比起正式的逻辑学推理演算更具有优势。
和其他机器学习方法一样,神经网络已经被用于解决各种各样的问题,例如机器视觉和语音识别。这些问题都是很难被传统基于规则的编程所解决的。

一个人工神经网络一般由以下部分组成:
接收数据并传递数据的输入层(input layer);
隐藏层(hidden layer);
输出层(output layer);
层与层之间的权重(weight);
每个隐藏层使用的激活函数(activation function)
这些名词从名字上就可以知道起什么作用了,所以不再展开解释。我们从神经元、激活函数、学习算法、拓扑结构等方面来认识ANN.
先学习神经元。
神经元其实是生物学上的概念,我们先来看看是怎样建模出来的
在这里插入图片描述
我们来看看单个的人工神经元是怎样的。
在这里插入图片描述
什么是神经元呢?它是一个数学函数,并以一定量的数值作为输入(随便你想要多少作为输入),我在上图画出的神经元有两个输入。我们将每个输入记为 x_k,这里 k 是输入的索引。对于每一个输入 x_k,神经元会给它分配另一个数 w_k,由这些参数 w_k 组成的向量叫做权重向量。正是这些权值才使得每个神经元都是独一无二的。在测试的过程中,权值是不会变化的,但是在训练的过程中,我们要去改变这些权值以「调节」我们的网络。

在学习算法的层面认识ANN.
神经网络的学习也称为训练,通过神经网络所在环境的刺激作用调整神经网络的自由参数(如连接权值),使神经网络以一种新的方式对外部环境做出反应的一个过程。每个神经网络都有一个激活函数y=f(x),训练过程就是通过给定的海量x数据和y数据,拟合出激活函数f。学习过程分为有导师学习和无导师学习,有导师学习是给定期望输出,通过对权值的调整使实际输出逼近期望输出;无导师学习给定表示方法质量的测量尺度,根据该尺度来优化参数。常见的有Hebb学习、纠错学习、基于记忆学习、随机学习、竞争学习。
Hebb学习:
(贴公式不方便,只简述原理)这是最早提出的学习方法,原理是如果突触(连接)两边的两个神经元被同时(同步)激活,则该突触的能量(权重)就选择性增加;如果被异步激活,则该突出能量减弱或消除。
纠错学习:
计算实际输出和期望输出的误差,再返回误差,修改权值。原理简单,用到最多,最小梯度下降法(LMS最小均方误差算法)就是这种方法。
基于记忆的学习:
主要用于模式分类,在基于记忆的学习中,过去的学习结果被存储在一个大的存储器中,当输入一个新的测试向量时,学习过程就是把新向量归到已存储的某个类中。算法包括两部分:一是用于定义测试向量局部领域的标准;二是在局部领域训练样本的学习规则。常用最近邻规则。
随机学习算法:
也叫Bolzmann学习规则,根据最大似然规则,通过调整权值,最小化似然函数或其对数。
模拟退火算法:
是从物理和化学退火过程类推过来,是“对物体加温后再冷却的处理过程”的数学建模。整个过程分为两步:首先在高温下进行搜索,此时各状态出现概率相差不大,可以很快进入“热平衡状态”,这时进行的是“粗搜索”,也就是大致找到系统的低能区区域;随着温度降低,各状态出现的概率差距逐渐被扩大,搜索精度不断提高,这就可以越来越准确地找到网络能量函数的全局最小点。
竞争学习:
神经网络的输出神经元之间相互竞争,在任一时间只能有一个输出神经元是活性的。

再来看看激活函数
激活函数可以看作滤波器,接收外界各种各样的信号,通过调整函数,输出期望值。ANN通常采用三类激活函数:阈值函数、分段函数、双极性连续函数(sigmoid,tanh):

在这里插入图片描述
神经网络的拓扑结构可能在平时大家就或多或少听说过几种了。
常见的拓扑结构有单层前向网络、多层前向网络、反馈网络,随机神经网络、竞争神经网络。
在这里插入图片描述在这里插入图片描述

一个简单的神经网络的结构如下图所示:
在这里插入图片描述

我们通过解决一个实际问题来学习如何创建神经网络,以及如何应用于解决问题。。

问题这样子的:
在这里插入图片描述
如上表所示,给出了4组输入及其对应的输出,然后需要我们根据新的输入1,0,0推测此时的输出
从表中看到,输出的值始终等于输入节中的第一个值。因此,我们可以期望新情形的输出(?)值为1。
不过作为实验,我们将训练神经网络,以便在提供一组新数据时可以预测出正确的输出值。
我们将在Python中创建一个NeuralNetwork类来训练神经元以提供准确的预测,当然我们需要借助numpy的一些方法
EXP——用于产生所述自然指数;
array——用于生成矩阵;
dot——用于矩阵相乘;
random——用于生成随机数;
在这里插入图片描述
我们会使用Sigmoid函数,它绘制出一个“S”形曲线,将其作为这次实验创建的神经网络的激活函数。
在这里插入图片描述
在这里插入图片描述
此函数可以将任何值映射到0到1之间,并能帮助我们规范化输入的加权和。
此后,我们将创建Sigmoid函数的导数,以帮助计算权重的基本调整。
可以使用Sigmoid函数的输出来生成其导数。例如,如果输出变量是“x”,那么它的导数将是x *(1-x)
在这里插入图片描述
训练模型
在这里插入图片描述
训练模型意味着我们将教导神经网络进行准确预测的阶段。每个输入都有一个权重(weights)——正或负的,这意味着具有大值正权重或大值负权重的输入将多所得到的输出有更大地影响。
注意,模型训练最初时,每个权重的初始化都是随机数。
本次实验构建的神经网络示例问题中的训练过程:

  1. 从训练数据集中获取输入,根据它们的权重进行一些调整,并通过计算神经网络输出的方法来一层一层的传输;
    在这里插入图片描述
    2.计算反向传播的错误率。在这种情况下,它是神经元预测得到的输出与训练数据集的预期输出之间的误差;
    在这里插入图片描述
    3.根据得到的误差范围,使用误差加权导数公式进行一些小的权重调整;
    在这里插入图片描述
    4.将此过程重复15,000次,在每次迭代过程中,同时处理整个训练集;
    在这里插入图片描述

再来看看训练数据的处理,本实验中,我们使用“.T”函数对矩阵求偏置。因此,数字将以这种方式存储:
在这里插入图片描述
,体现在代码中,训练数据为:
在这里插入图片描述
最终,神经元的权重将针对所提供的训练数据进行优化。因此,如果神经网络的输出与期望的输出一致时,说明训练完成,可以进行准确的预测。
完整代码在1.py

这是我们创建的一个简单的神经网络。首先神经网络开始为自己分配一些随机权,此后,它使用训练样例训练自身。
运行后会打印出一开始的随机权重,以及训练后得到的权重
在这里插入图片描述
然后我们输入新的数据看看预测结果
在这里插入图片描述
输入[1,0,0],则其输出值为0.9999584。而期望的的正确答案是1,考虑到Sigmoid函数是非线性函数,可以说二者是非常接近了,这点误差是可以接受的。
本次实验中我们只使用一个神经元网络来执行简单的任务,这只是非常基础的神经网络,想要更深入的认识与理解请参考给出的资料。

参考
1.《机器学习》(西瓜书)
2. https://zh.wikipedia.org/wiki/%E4%BA%BA%E5%B7%A5%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C
3. https://www.kdnuggets.com/2018/10/simple-neural-network-python.html
4. https://www.cnblogs.com/subconscious/p/5058741.html
5. http://www.ruanyifeng.com/blog/2017/07/neural-network.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值