机器学习及应用第4章-神经网络课件_第1页
机器学习及应用第4章-神经网络课件_第2页
机器学习及应用第4章-神经网络课件_第3页
机器学习及应用第4章-神经网络课件_第4页
机器学习及应用第4章-神经网络课件_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第04章 神经网络神经元感知机梯度下降法随机梯度下降法前向神经网络分类器BP神经网络玻尔兹曼机4.1 引言神经网络是一门受生物神经网络的启发而兴起的、发展迅速的交叉学科,涉及计算机、生物、数学、心理学、电子、认知科学等学科。人工神经网络可以设计出某些具有类似大脑功能的智能系统来处理各种信息,解决不同问题。如市场预测、数据分类、语音识别、文字识别、医疗诊断等。4.1.1人工神经网络的发展历程1890年,首次阐明了人脑结构功能和相关的学习联想记忆规则。1943年,神经元的基本特性,提出了神经元的数学模型,即M-P模型。1949年,神经元学习的一般规则,即Hebbin法则。1958年,历史上第一个具

2、有学习型神经网络特点的模式识别装置,并给出了两层感知机的收敛定理;之后,又提出三层感知机模型。4.1 引言1960年代初期,自适应线性元结构,提出了Windrow-Hoff算法,主要应用于自适应系统。1969年,单层神经网络的功能局限性,发展走入低谷。20世纪80年代,成功求解NP完全的旅行商问题,研制了Boltzmann机;误差反向传播算法。1990年,神经网络集成方法。1997年,AdaBoost算法。2012年6月,吴恩达和谷歌科学家合作,用1.6万台计算机搭建并模拟了一个人脑神经网络。2015年5月,深度学习开始被学术界接受。2016年3月,AlphaGo打败韩国围棋选手李世石。4.1

3、 引言分布式存储信息并行协同处理信息信息处理与存储合二为一对信息的处理具有自组织、自学习的特点,便于联想、综合和推广4.1.2 人工神经网络的特点4.1.3 人工神经网络的分类前馈神经网络将神经元分层排列,分别是输入层、中间层和输出层。按照层数不同,划分为单层前馈神经网络和多层前馈神经网络。感知机、BP网络、RBF网络。反馈神经网络每个神经元同时将自身的输出信号作为输入信号反馈给其他神经元,Hopfield神经网络是反馈网络中最简单且应用广泛的模型。自组织神经网络是无导师学习网络通常采用竞争原则进行网络学习。4.2 神经元模型神经元是神经网络的基本信息处理单位,是(人工)神经网络的设计基础。对

4、于神经元的研究由来已久,1904年生物学家就已经知晓了神经元的组成结构。一个(生物)神经元主要由细胞体(Cell body)、树突(Dendrites)、轴突(Myelin Sheath)和突触(Synapse)等组成。树突是传入纤维,轴突是传出纤维。4.2 神经元模型 神经元是神经网络的基本信息处理单位,组成结构。1943年,神经学家和解剖学家W.S. McCulloch和数理逻辑学家W. Pitts参考了生物神经元的结构,提出了形似(生物)神经元的线性加权求和阈值模型,简称M-P模型。4.2 神经元模型神经元阈值函数:符号函数SgnLogistic函数M-P神经元特点多输入单输出分为兴奋性

5、输入和抑制性输入空间整合特性和阈值特性输入通过权值表征耦合程度突触接头有时间延迟,网络的活动过程离散化4.3 感知机与多层神经网络美国计算机科学家Frank Rosenblatt于1957年发明了感知机,是最早的人工神经网络,是一种二元线性分类器。单层感知机是一个具有一层神经元、采用阈值激活函数的前向网络。4.3.1 感知机4.3 感知机与多层神经网络4.3.1 感知机4.3 感知机与多层神经网络4.3.1 感知机4.3 感知机与多层神经网络1.感知机训练4.3 感知机与多层神经网络2.感知机神经网络的局限性感知机神经网络的传输函数一般采用阈值函数,故输出只有两种(1或者0),所以只能用来解决

6、简单的分类问题;单层感知机网络只能解决线性可分的分类问题,而对线性不可分的分类问题无能为力;感知机学习算法只适于单层感知机网络,所以一般感知机网络都是单层的。4.3 感知机与多层神经网络3.感知机实验 (a)线性可分 (b) 线性不可分4.3 感知机与多层神经网络 # 训练感知机 def train(self, inputs, targets, eta, nIterations): # 偏置加入输入,构成4 * 3维矩阵 inputs = concatenate(inputs, - ones(self.nData,1), axis = 1) # 训练 for n in range( nIter

7、ations ): # 前向传播 self.outputs = self.forward(inputs) # 修改权值 self.weights = self.weights + eta * dot(transpose(inputs), targets - self.outputs)# 前向传播 def forward(self, inputs): outputs = dot(inputs, self.weights) return where(outputs 0.5, 1, 0) # 输出阈值 # 输出 def prn(self): print(Percetrons weights:n, s

8、elf.weights) print(Percetrons outputs:n, self.outputs)主要实现代码:4.3 感知机与多层神经网络inputs = array(0,0,0,1,1,0,1,1) # 输入数据,也是测试数据targets = array(0,0,0,1) # AND运算的标签数据p = singlePerception(inputs,targets) #单层感知机对象p.train(inputs, targets, 0.25, 6) # 训练感知机对象 p.prn() # 输出结果运行结果:Percetrons weights: 0.51900471 0.46

9、993134-0.28361255Percetrons outputs:0001主程序(含输入数据):(续上)4.3.2 梯度下降法1.逻辑回归(Logistic Regression)4.3.2 梯度下降法1.逻辑回归(Logistic Regression)4.3.2 梯度下降法1.逻辑回归(Logistic Regression)4.3.2 梯度下降法1.逻辑回归(Logistic Regression)4.3.2 梯度下降法1.逻辑回归(Logistic Regression)4.3.2 梯度下降法2.梯度下降(gradient descent)4.3.2 梯度下降法2.梯度下降(gr

10、adient descent)4.3.3 随机梯度下降法4.3.4 多层神经网络1.二层前向神经网络4.3.4 多层神经网络1.二层前向神经网络4.3.4 多层神经网络1.二层前向神经网络4.3.4 多层神经网络 # 通过试错训练神经网络,每次微调突触权重 def train(self, trainingInputs, trainingOutputs, nTrainingIteration): for iteration in range(nTrainingIteration): # 将整个训练集传递给神经网络 output_from_layer_1, output_from_layer_2

11、= self.predict(trainingInputs) # 计算第二层的误差 layer2_error = trainingOutputs - output_from_layer_2 layer2_delta = layer2_error * self._sigmoid_derivative(output_from_layer_2) # 计算第二层的权重调整量 layer2_adjustment = self.layer2.eta * output_from_layer_1.T.dot(layer2_delta) # 调整第二层的权重 self.layer2.weights += lay

12、er2_adjustment # 计算第一层的误差,得到第一层对第二层的影响 layer1_error = layer2_delta.dot(self.layer2.weights.T) layer1_delta = layer1_error * self._sigmoid_derivative(output_from_layer_1) # 计算第一层的权重调整量 layer1_adjustment = self.layer1.eta * trainingInputs.T.dot(layer1_delta) # 调整第一层的权重 self.layer1.weights += layer1_ad

13、justment实现代码:4.3.4 多层神经网络# 二层神经网络的预测(第一层神经网络输出,第二层神经网络输出) def predict(self, inputs): output_from_layer1 = self.sigmoid(dot(inputs, self.layer1.weights) output_from_layer2 = self.sigmoid(dot(output_from_layer1, self.layer2.weights) return output_from_layer1, output_from_layer2# 训练集,XOR函数trainingInput

14、s = array(0, 0, 0, 1, 1, 0, 1, 1)trainingOutputs = array(0, 1, 1, 0).T# 初始化随机数种子random.seed(1)#创建第一层 (4神经元, 每个2输入)layer1 = NeuronLayer(4, 2)#创建第二层 (单神经元,4输入)layer2 = NeuronLayer(1, 4)主程序(含训练数据):4.3.4 多层神经网络# 组合成神经网络tlnn = TwoLayersNeuralNetwork(layer1, layer2)print (1) 随机初始突触权重: )tlnn.print_weights(

15、)# 用训练集训练神经网络tlnn.train(trainingInputs, trainingOutputs, 50000)print (2) 训练后的权重值: )tlnn.print_weights()print (3) 预测: )for i in range(len(trainingInputs): hidden_state, output = tlnn.predict(trainingInputsi) print(output)主程序(含训练数据):(续上)4.3.4 多层神经网络1) 随机初始突触权重: Layer 1 (4 neurons, each with 2 inputs):

16、 -0.16595599 0.44064899 -0.99977125 -0.39533485 -0.70648822 -0.81532281 -0.62747958 -0.30887855 Layer 2 (1 neuron, with 4 inputs):-0.20646505 0.07763347 -0.16161097 0.370439 2) 训练后的权重值: Layer 1 (4 neurons, each with 2 inputs): 2.57612468 3.91438561 -5.96509441 -7.38577669 -1.0245413 -8.02972636 -5.8

17、6303221 3.40368198 Layer 2 (1 neuron, with 4 inputs): -5.89617401 10.15582609 -19.37274716 6.449688243) 预测: 0.01297458 0.99036898 0.98825116 0.01010893运行结果:4.4 误差反向传播算法1986年,David E. Rumelhart和James McClelland提出的BP神经网络(Back Propagation Network),是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络。BP神经网络的基本思想是梯度下降

18、法,利用梯度搜索技术,以期使网络的实际输出值和期望输出值的误差均方差为最小。算法包括信号的前向传播和误差的反向传播,即计算误差输出时,按从输入到输出的方向进行;而调整权值和阈值时,按从输出到输入的方向进行。正向传播时,输入信号通过隐含层作用于输出结点,经过非线性变换,产生输出信号,若实际输出与期望输出不相符,则转入误差的反向传播过程。误差的反向传播是将输出误差通过隐含层向输入层逐层反传,并将误差分摊给各层所有单元,以从各层获得的误差信号作为调整各单元权值的依据,所以称该算法为误差反向传播算法。4.4 误差反向传播算法4.4.1 BP神经网络学习算法4.4 误差反向传播算法4.4.1 BP神经网

19、络学习算法4.4 误差反向传播算法4.4.1 BP神经网络学习算法4.4 误差反向传播算法4.4.1 BP神经网络学习算法4.4 误差反向传播算法4.4.1 BP神经网络学习算法4.4 误差反向传播算法2.隐藏层权值训练4.4 误差反向传播算法2.隐藏层权值训练4.4 误差反向传播算法4.4 误差反向传播算法 stochastic gradient descent algorithm for training a three-layer network (only one hidden layer)4.4 误差反向传播算法4.4.1. BP神经网络实验4.4 误差反向传播算法# 前向计算。以i

20、nput_vector作为输入值,计算神经网络neural_network的各层输出def feed_forward(neural_network, input_vector): outputs = for layer in neural_network: input_with_bias = input_vector + 1 # 扩展输入向量 output = neuron_output(neuron, input_with_bias) for neuron in layer # 计算每一层的输出结果 outputs.append(output) # 记录当前层(隐含层)的输出值 input_

21、vector = output # 将当前层的输出作为下一层的输入 return outputs4.4.2 BP神经网络实验程序代码:4.4 误差反向传播算法4.4.2 BP神经网络实验# 反向传播。以input_vector 为输入训练向量,target为标准,# 采用BP算法,反向逐层调整network的连接权值def backpropagate(network, input_vector, target): # 以input_vector为输入,前向计算网络的各层输出值hidden_outputs, outputs = feed_forward(network, input_vector

22、)# 计算各层的delta值=output * (1 - output)。此处的激活函数为sigmoid output_deltas = output * (1 - output) * (output - targeti) for i, output in enumerate(outputs) # 调整输出层的连接权重 for i, output_neuron in enumerate(network-1):续代码4.4 误差反向传播算法 for j, hidden_output in enumerate(hidden_outputs + 1): output_neuronj -= output_deltasi * hidden_output # 反向调整各隐含层(除第一层外)的连接权重 hidden_deltas = hidden_output * (1 - hidden_output) * dot(output_deltas,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论