张瑞
中国科学技术大学数学科学学院
rui@ustc.edu.cn |
人工神经网络(Artificial Neural Network,即ANN )是在现代神经科学的基础上提出和发展起来的,旨在反映人脑结构及功能的一种抽象数学模型。自 1943 年美国心理学家 W. McCulloch 和数学家 W. Pitts 提出形式神经元的抽象数学模型—MP模型以来,人工神经网络理论技术经过了 50 多年曲折的发展。特别是 20 世纪 80 年代,人工神经网络的研究取得了重大进展,有关的理论和方法已经发展成一门界于物理学、数学、计算机科学和神经生物学之间的交叉学科。
它在模式识别,图像处理,智能控制,组合优化,金融预测与管理,通信,机器人以及 专家系统等领域得到广泛的应用,提出了 40 多种神经网络模型,其中比较著名的有感知机,Hopfield 网络,Boltzman 机,自适应共振理论及反向传播网络(BP)等。
最简单的神经网络仅由一个“神经元”(感知器, Perceptron)构成,以下即是这个“神经元”的图示:
|
这个神经元是由,,和一个偏置(阈值) 作为输入,,,是他们的权重,输入节点后,得到输出 其中函数 被称为激活函数。 |
常用的激活函数:
神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。
网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。
目前已有的数十种神经网络模型,目前主要有以下几种类型:前向型、反馈型、随机型和竞争型。
前向型: 前馈神经网络是指神经元分层排列,由输入层,隐藏层和输出层构成,其中隐藏层可能会有多层。这种神经网络的每一层的神经元只接受前一层神经元的输入,后面的层对于前面的层没有信号反馈。每一层对于输入数据进行一定的转换,然后将输出结果作为下一层的输入,直到最后输出结果。
其中,目前广泛应用的BPNN(Back Propagation Neural Network, 后向传播神经网络)就属于这种网络类型。
反馈型: 反馈网络又称回归网络,输入信号决定反馈系统的初始状态,系统经过一系列状态转移后逐渐收敛于平衡状态,因此,稳定性是反馈网络最重要的指标之一,比较典型的是Hopfield神经网络。
Hopfield神经网络用于非线性动力学问题分析,已在联想记忆和优化计算中得到成功的应用.
随机型: 具有随机性质的模拟退火(SA)算法解决了优化计算过程陷于局部极小的问题,并已在神经网络的学习及优化计算中得到成功的应用.
竞争型: 自组织神经网络是无教师学习网络,它模拟人脑行为,根据过去经验自动适应无法预测的环境变化,由于无监督,这类网络通常采用竞争原则进行网络学习,自动聚类。目前广泛用于自动控制、故障诊断等各类模式识别中.
一个多层前向型神经网络如下图:
|
最左边一层是输入层,中间是隐藏层,右侧是输出层。输入层以及隐藏层每个节点代表一个神经元。每一层和下一层之间对应的也有一个权重矩阵。 |
这个简单的神经网络的整个过程是,将输入与权重矩阵结合,以的形式输入隐藏层(Layer L2),经过激活函数的处理,得到输出结果,, 然后与对应的权重,偏置结合,作为输出层(Layer L3)的输入,经过激活函数,得到最终输出结果。
例 1. 蠓虫分类问题可概括叙述如下:生物学家试图对两种蠓虫(Af 与 Apf)进行鉴别, 依据的资料是触角和翅膀的长度,已经测得了 9 支 Af 和 6 支 Apf 的数据如下:
Af: (1.24,1.27),(1.36,1.74),(1.38,1.64),(1.38,1.82),(1.38,1.90),
(1.40,1.70), (1.48,1.82),(1.54,1.82),(1.56,2.08).
Apf: (1.14,1.82),(1.18,1.96),(1.20,1.86),(1.26,2.00),(1.28,2.00),(1.30,1.96).
现在的问题是:
如上的问题是有代表性的,它的特点是要求依据已知资料(9 支 Af 的数据和 6 支 Apf 的数据)制定一种分类方法,类别是已经给定的(Af 或 Apf)。今后,我们将 9 支Af 及 6 支 Apf 的数据集合称之为学习样本。
|
使用如图所示的人工神经网络。, 为输入(只有翅长和触角长两个参数),, 为输出,使用sigmoid 激活函数。则 |
需要选定一组适当的权值, ,使得对应于学习样本中任何一组Af样品的输出为,对于Apf样品输出为。这样,当新的样品输入时,看它的输出靠近还是就可以进行分类判别。
对于一个多层网络,如何求得一组恰当的权值,使网络具有特定的功能,在很长一 段时间内,曾经是使研究工作者感到困难的一个问题,直到 1985 年,美国加州大学的 一个研究小组提出了所谓反向传播算法(Back-Propagation),使问题有了重大进展,这 一算法也是促成人工神经网络研究迅猛发展的一个原因。
BP神经网络的应用场景
BPNN的优点
缺点:
经典人工神经网络本质上是解决两大类问题:
对于分类问题来说,数据可以是有标签(Labeled)或者无标签的(Unlabeled),这对应了经典机器学习中的有监督学习(Supervised Learning)和无监督学习(Unsupervised Learning)。在机器学习中,对于无标签的数据进行分类往往被称作聚类(Clustering)。
Python sklearn
0.21 以上,含有分类与回归类
neural_network.BernoulliRBM([n_components, …]) Bernoulli Restricted Boltzmann Machine (RBM).
neural_network.MLPClassifier([…]) Multi-layer Perceptron classifier.
neural_network.MLPRegressor([…]) Multi-layer Perceptron regressor.
可以得到Apf分类结果
(2,2,2)
import numpy as np
# % 原始数据
Apf=np.array([[1.14,1.78],[1.18,1.96],[1.20,1.86],[1.26,2.00],[1.28,2.00],[1.30,1.96]]) # %Apf蠓虫数据
Af=np.array([[1.24,1.72],[1.36, 1.74],[1.38,1.64],[1.38, 1.90],[ 1.40, 1.70],[1.48, 1.82], [1.38,1.82], [1.54,1.82], [1.56, 2.08]]) # %Af蠓虫数据
x=np.array([[1.24,1.80],[1.29,1.81],[1.43,2.03]]) # %待判蠓虫数据
# 准备训练数据
X_train=np.concatenate((Apf, Af))
y_train=np.concatenate((len(Apf)*[1.0],len(Af)*[2.0]))
from sklearn.neural_network import MLPClassifier
# Class MLPClassifier implements a multi-layer perceptron (MLP) algorithm that trains using Backpropagation.
clf = MLPClassifier(solver='lbfgs', alpha=1e-5,
hidden_layer_sizes=(5, 2), random_state=1)
clf.fit(X_train, y_train)
print(clf.predict(x))
例 2. 公路运量预测: 公路运量包括公路的客运量和货运量。据研究,某地区的公路运量与该地区的人数、机动车数量和公路面积有关。现在有20年的数据,试对运量做出预测。
#%原始数据
#%人数(单位:万人)
sqrs=np.array([20.55, 22.44, 25.37, 27.13, 29.45, 30.10,
30.96, 34.06, 36.42, 38.09, 39.13, 39.99, 41.93, 44.59,
47.30, 52.89, 55.73, 56.76, 59.17, 60.63])
#%机动车数(单位:万辆)
sqjdcs=np.array([0.6, 0.75, 0.85, 0.9, 1.05, 1.35, 1.45,
1.6, 1.7, 1.85, 2.15, 2.2, 2.25, 2.35, 2.5, 2.6, 2.7, 2.85, 2.95, 3.1])
#%公路面积(单位:万平方公里)
sqglmj=np.array([0.09, 0.11, 0.11, 0.14, 0.20, 0.23, 0.23,
0.32, 0.32, 0.34, 0.36, 0.36, 0.38, 0.49, 0.56, 0.59, 0.59, 0.67, 0.69, 0.79])
#%公路客运量(单位:万人)
glkyl=np.array([5126.0, 6217, 7730, 9145, 10460, 11387, 12353,
15750, 18304, 19836, 21024, 19490, 20433, 22598, 25107, 33442, 36836, 40548, 42927, 43462])
#%公路货运量(单位:万吨)
glhyl=np.array([1237.0, 1379, 1385, 1399, 1663, 1714, 1834, 4322,
8132, 8936, 11099, 11203, 10524, 11115, 13320, 16762, 18673, 20724, 20803, 21804])
X_train=np.array((sqrs, sqjdcs, sqglmj)).T #np.concatenate((sqrs, sqjdcs, sqglmj)) #%输入数据矩阵
from sklearn import preprocessing
#归一化处理
min_max_scaler = preprocessing.MinMaxScaler(feature_range=(0,1))
X_train = min_max_scaler.fit_transform(X_train)
print("数据归一化")
#%公路客运量(单位:万人)
y = min_max_scaler.fit_transform(glkyl.reshape(-1, 1))
from sklearn.neural_network import MLPRegressor
# hidden layer sizes (3,7,2)
#est = MLPRegressor( activation='logistic', max_iter=5000)
# 数据集比较小(<1000),使用 lbfgs solver
est = MLPRegressor( solver='lbfgs', max_iter=5000)
# y=glkyl.T #%公路客运量(单位:万人)
est.fit(X_train, y.ravel())
y0=est.predict(X_train)
深度学习(Deep Learning)是机器学习(machine learning)研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。
Deep learning与传统的神经网络的相同在于deep learning采用了神经网络相似的分层结构,系统由包括输入层、隐层(多层)、输出层组成的多层网络,只有相邻层节点之间有连接,同一层以及跨层节点之间相互无连接,每一层可以看作是一个logistic regression模型;这种分层结构,是比较接近人类大脑的结构的。
大约二三十年前,neural network曾经是机器学习领域特别火热的一个方向,但是后来确慢慢淡出了,原因包括以下几个方面:
而为了克服神经网络训练中的问题,DL采用了与神经网络很不同的训练机制。
2006年,hinton提出了在非监督数据上建立多层神经网络的一个有效方法,简单的说,分为两步
人工智能诞生于1950年代,当少部分的计算机科学初期领域的先驱开始探讨计算机是否可以思考–该问题的一个分支我们现在仍在探索:使通常由人类完成的智力任务自动化的努力。
因此,人工智能是一个包含机器学习和深度学习的通用领域,但它也包含了更多不涉及任何学习的方法。
例如,早期的国际象棋程序只涉及由程序员制定的硬编码规则,不具备机器学习的特性。在相当长的一段时间里,许多专家认为,通过让程序员手工制作一套足够大的明确的规则来操纵知识,可以实现人类水平的人工智能。这种方法被称为符号(symbolic)人工智能
尽管机器学习在上世纪90年代才开始蓬勃发展,但它很快就成为人工智能最受欢迎、最成功的子领域,这一趋势是由更快的硬件和更大的数据集的可用性推动的。
深度学习是机器学习的一个特定子领域: 从数据中学习表示的一种新方法,强调学习越来越有意义的表示的连续层(layers)。
Python库 sklearn
中的神经网络,没有GPU加速,只适用于小型应用
https://scikit-learn.org/stable/modules/neural_networks_supervised.html
https://blog.csdn.net/asd20172016/article/details/81454009 sklearn中神经网络使用的2个例子
https://blog.csdn.net/qq_29831163/article/details/89380235 一文弄懂神经网络中的BP反向传播算法 (python代码)
https://yq.aliyun.com/articles/412747?spm=a2c4e.11153940.blogcont397074.19.7eb15065LNZ4Xi 人工神经网络到底能干什么?到底在干什么?
https://blog.csdn.net/zouxy09/article/details/8775518?spm=a2c4e.11153940.blogcont326808.16.11524a54pywqES Deep Learning(深度学习)学习笔记整理系列之(三)
更一般地的分类(模式识别)问题:
现给定个模式向量, 不失一般性,设前个属于某一类而剩下的个不属于该类。 如果模式集合线性可分,那么存在维向量及实数使得
成立。