Neural Network学习(二)Universal approximator :前向神经网络

1. 概述

  前面我们已经介绍了最早的神经网络:感知机。感知机一个非常致命的缺点是由于它的线性结构,其只能做线性预测(甚至无法解决回归问题),这也是其在当时广为诟病的一个点。

  虽然感知机无法解决非线性问题,但是其给非线性问题的解决提供了一个思路。感知机的局限来自于其线性结构,如果我们能够给其加入非线性结构,比如先给输入做一个非线性变换,这样其就能拟合非线性问题。那么这就是我们这次要讲的前向神经网络。

2. 结构

  前向神经网络(Feed-forward Neural Network)是一种多层的网络结构,非常典型的就是三层结构:输入层、隐藏层和输出层。层与层之间用权值(连线)连接。一般只有前一层的值才能作为后一层的值的输入,而反过来不能,也就是说不能有反馈(Feed-back),这也是其名字的又来。这个结构非常重要,因为名声赫赫的BP算法就是基于这个结构的。

  网络中每一个点(神经元)都有值,设为$a_j$。其中输入层的a就等于x,其他层的a则由权值以及之前层的值来确定。每个神经元在参与后面神经元值的计算时,并不直接使用其自身的值,而是经过一个非线性激活函数(一般是tanh或sigmoid),得到激活值$z_j$,然后再参与计算。输入层用x表示,输出层一般用y表示,权值一般表示为W(包含bias)。下面以三层网络结构为例来表示这些值。

  

      $a^{(0)}_j$ = $x_j$

      $z^{(0)}_j$ = $h(a^{(0)}_j)$

      

      $a^{(1)}_j$ = $\sum_{i}w^{(1)}_{ji}a^{(0)}_i$

      $z^{(1)}_j$ = $h(a^{(1)}_j)$

      $a^{(2)}_j$ = $\sum_{i}w^{(2)}_{ji}a^{(1)}_i$

      $y_j$ = $\sigma(a^{(2)}_j)$

  其中$x_0$ = 1 ,$a_0$ = 1(目的是为了省略bias项)。

  这里我们举的例子是后一层的值只由前一层的值来决定,当然,这个限定并不是一定的。只要没有反馈结构,都能算作是前向神经网络。所以这里就衍生除了一种结构叫做skip layer,即当前层不仅仅由前一层决定,还可以由前几层的值决定。这个网络结构如下:

  这个结构看上去好像输入跳过了隐藏层直接作用与输出,这也是其名字的由来。

3. 权值的对称性

  这是神经网络为数不多的性质之一,使用的也比较少。以三层神经网络为例,假设中间层有M个神经元,如果我们交换其中两个神经元的位置(与其相连的权值也相应移动),那么网络的映射关系 y = f(x) 没有变化。所以对于这个三层网络来说,一共有M!个网络与其等价。这就是网络的对称性。

时间: 2024-10-19 07:21:15

Neural Network学习(二)Universal approximator :前向神经网络的相关文章

学习Make your own neural network 记录(二)

通过前面的理论学习,以及关于Error和weight的关系分析,得出的公式,练习做一个自己的神经网络,通过Python3.5: 跟随书上的python introduction,介绍下numpy中的zeros(): import numpy a = numpy.zeros([3,2]) a[0,0] = 1 a[1,1] = 2 a[2,1] = 5 print(a) 结果是: [[1. 0.] [0. 2.] [0. 5.]] 可以用这个方法来生成矩阵. 接下来用python搭建神经网络的骨骼

Recurrent Neural Network 学习笔记【二】RNN-LSTM

理论上讲,只要足够大的RNN结构就能去生成任意复杂的序列结构. 但是在实际上,标准的RNN并不能有效的长期保存信息(这是由于类似HMM的结构,每次每个节点的信息如果始终经过同样的变换,那么会要么指数爆炸要么指数衰减,很快信息就会丢失).也是由于它这个“健忘”的特点,这种RNN生成的序列很容易缺乏稳定性.这样的话,如果只能依赖上几步的结果去预测下一步,而又使用预测的新结果去预测再下一步,那么一旦出现了错误,系统就会很容沿着错误的方向走下去,而很少有机会能从之前的信息中把错误改正过来. 从这个角度讲

机器学习公开课笔记(5):神经网络(Neural Network)——学习

这一章可能是Andrew Ng讲得最不清楚的一章,为什么这么说呢?这一章主要讲后向传播(Backpropagration, BP)算法,Ng花了一大半的时间在讲如何计算误差项$\delta$,如何计算$\Delta$的矩阵,以及如何用Matlab去实现后向传播,然而最关键的问题——为什么要这么计算?前面计算的这些量到底代表着什么,Ng基本没有讲解,也没有给出数学的推导的例子.所以这次内容我不打算照着公开课的内容去写,在查阅了许多资料后,我想先从一个简单的神经网络的梯度推导入手,理解后向传播算法的

Neural Network学习(一) 最早的感知机:Perceptron of Rosenblatt

1. Frank Rosenblatt 首先介绍的是神经网络的开山祖师,先放张图拜拜 Frank Rosenblatt出生在纽约,父亲是医生,其1956年在Cornell大学拿到博士学位后,留校任教,研究方向为心理学和认知心理学.1957年,Frank提出了Perceptron的理论.1960年,在计算机运算能力还不强的时候,其使用基于硬件结构搭建了一个神经网络,大概长下面这样(跪).   但是和所有先驱一样,Frank开创性的工作并没有在当时得到认可.当时两位科学家 Marvin Minksy

coursera机器学习技法笔记(12)——Neural Network

12 Neural Network 12.1 Motivation 在神经网络的节点上使用感知机,那我们可以把神经网络看作是通过不同感知机以及常数的线性组合得到一个新的特征,将新的特征加上一个常数再进行线性组合得到结果.其原理和aggregation类似,但是在神经网络中进行了多层级的aggregation. 从生物的角度来说神经网络模拟了人脑神经网络. 12.2 Neural Network Hypothesis 如果神经元节点都用线性回归的话,那么无论怎么组合最终都是个线性回归,模型的能力没

Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1

3.Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1 http://blog.csdn.net/sunbow0 Spark MLlib Deep Learning工具箱,是根据现有深度学习教程<UFLDL教程>中的算法,在SparkMLlib中的实现.具体Spark MLlib Deep Learning(深度学习)目录结构: 第一章Neural Net(NN) 1.源码 2.源码解析 3.实例 第二章D

Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.2

3.Spark MLlib Deep Learning Convolution Neural Network(深度学习-卷积神经网络)3.2 http://blog.csdn.net/sunbow0 第三章Convolution Neural Network (卷积神经网络) 2基础及源码解析 2.1 Convolution Neural Network卷积神经网络基础知识 1)基础知识: 自行google,百度,基础方面的非常多,随便看看就可以,只是很多没有把细节说得清楚和明白: 能把细节说清

深度学习论文笔记--Recover Canonical-View Faces in the Wild with Deep Neural Network

文章来源:CVPR2014 作者:Zhenyao Zhu,Ping Luo,Xiaogang Wang,Xiaoou Tang (香港中文大学果然牛啊,CVPR一刷一大堆) 主要内容: 提出了利用深度学习(还是CNN)来进行人脸图像重构正面人脸,然后利用重构的正面人脸图像来进行人脸的verification,当然能够取得更高的准确率(比没有用正脸去verification),文章提出利用DL来学习从任意脸到canonical 脸的转换,可以认为是一个回归问题(也不一定非得用DL方法来做). 现有

Recurrent neural network language modeling toolkit 源码深入剖析系列(二)

系列前言 参考文献: RNNLM - Recurrent Neural Network  Language Modeling Toolkit(点此阅读) Recurrent neural network based language model(点此阅读) EXTENSIONS OF RECURRENT NEURAL NETWORK LANGUAGE MODEL(点此阅读) Strategies for Training Large Scale Neural Network  Language