http://blog.csdn.net/pipisorry/article/details/76095118

前馈神经网络:FFNN模型(feedforward neural network)

固定基函数的线性组合构成的回归模型和分类模型。我们看到,这些模型具有一些有用的分析性质和计算性质,但是它们的实际应用被维数灾难问题限制了。为了将这些模型应用于大规模的问题,有必要根据数据调节基函数。一种方法是事先固定基函数的数量,但是允许基函数可调节。换句话说,就是使用参数形式的基函数,这些参数可以在训练阶段调节。在模式识别中,这种类型的最成功的模型时前馈神经网络,也被称为多层感知器( multilayer perceptron )。

回归的线性模型和分类的线性模型基于固定⾮线性基函数ϕj(x)的线性组合,形式为

其中f( )在分类问题中是⼀个⾮线性激活函数,在回归问题中为恒等函数。

神经网络的⽬标是推广这个模型,使得基函数ϕj(x)依赖于参数,从⽽能够让这些参数以及系数fwjg能够在训练阶段调节。当然,有许多种⽅法构造参数化的⾮线性基函数。

神经网络使⽤与公式(5.1)形式相同的基函数,即每个基函数本⾝是输⼊的线性组合的⾮线性函数,其中线性组合的系数是可调节参数。

神经网络的表示

Terminology术语:

weights: the same thing as parameters of the model.

the hidden layer: are values you don't get to observe in the training set.

单个神经元的神经网络表示

单个神经元的神经网络就是logistic regression。

多个神经元的神经网络

神经网络的前向推导

通过前向推导,推导出神经网络模型hypotheses的数学表示。

图:一般化的多层多类输出的神经网络

隐层

激活( activation )a j

额外的输入变量 x 0 的值被限制为 x 0 = 1

在一个一般的前馈网络中,每个单元都会计算输入的一个加权和,形式为

使用一个可微的非线性激活函数( activation function ) h(·) 进行变换,可得激活值

输出层

对于多个二元分类问题,每个输出单元激活使用 logisticsigmoid 函数进行变换,即

多类multi-class:使用softmax函数

多标签multi-label:每个节点使用一个sigmoid函数

整体的网络函数

神经网络相当于定义了一个很复杂的函数,将x映射到y。an artificial neural network defines a function h that maps your x's input values to hopefully to some space and provisions y? And these hypotheses after parametrized by parameters that denoting with a capital θ so that as we be vary θ we get different hypotheses.So we get different functions mapping say from x to y.

神经网络自学习features


遮住左部:单个神经元是logstic regression,原来的featrues是x,现在加了多层以后features就变换成了更加复杂的a,也就是神经网络学习自己的features来feed into the logistic regression。what this neural network is doing is just like logistic regression, except that rather than using the original features x,is using these new features a.

某小皮

梯度下降最优化

(1)BP算法通过链式法则计算出每一层参数的梯度,使用梯度下降的算法进行损失函数的优化;

(2)由于损失函数是非凸的,所以梯度下降算法并不能保证得到最优解,然而在实际应用中,使用随机梯度下降(stochastic gradient descent,SGD)算法可以得到很好的效果;这里的随机指的是每次进行参数迭代时,随机选取部分样本(也就是一个batch)进行优化计算。

误差反向传播:bp算法

针对一组独立同分布的数据的最大似然方法定义的误差函数,由若干项的求和式组成,每一项对应于训练集的一个数据点,即

我们要考虑的是计算 ∇E n (w) 的问题。这可以直接使用顺序优化的方法计算,或者使用批处理方法在训练集上进行累加。

计算En关于权值wji的导数

我们注意到 En 只通过单元 j 的经过求和之后的输入 a j 对权值 w ji 产生依赖

其中误差( error )δ定义为

后面一项直接求解为

为了计算隐含单元的 δ 值,我们再次使用偏导数的链式法则

其中最后一层δ的求导为

如果使用标准链接函数作为输出单元的激活函数,且使用平方误差,那么对于输出单元,我们就有 δ k = y k − t k。

Note:bias单元: 反向传播时也可以用到bias单元Depending on how you define the back propagation algorithm or depending on how you implement it,you may end up implementing something to compute delta values for these bias units as well. The bias unit is always output the values plus one and they are just what they are and there's no way for us to change the value and so, we just discard them because they don't end up being part of the calculation needed to compute the derivatives.

总误差函数 E 的导数可以通过下面的方式得到:对于训练集里的每个模式,重复上面的步骤,然后对所有的模式求和,即

[反向传播算法可视化]

某小皮

神经网络实现要注意的问题

神经网络的选择

下表列出了各种不同的问题和每种问题最适用的神经网络

数据类型 应用案例 输入 变换 神经网络
文本 情感分析 词向量 高斯修正 RNTN或DBN(采用移动窗口)
文本 命名实体识别 词向量 高斯修正 RNTN或DBN(采用移动窗口)
文本 词性标注 词向量 高斯修正 RNTN或DBN(采用移动窗口)
文本 词性标注 词向量 高斯修正 RNTN或DBN(采用移动窗口)
文本 语义角色标记 词向量 高斯修正 RNTN或DBN(采用移动窗口)
文档 主题建模/语义哈希(无监督) 词频概率 可为二进制 深度自动编码器(包装一个DBN或SDA)
文档 文档分类(有监督) TF-IDF(或词频概率) 二进制 深度置信网络、堆叠式降噪自动编码器
图像 图像识别 二进制 二进制(可见及隐藏层) 深度置信网络
图像 图像识别 连续 高斯修正 深度置信网络
图像 多对象识别 N/A 高斯修正 卷积网络、RNTN(图像向量化)
图像 图像搜索/语义哈希 N/A 高斯修正 深度自动编码器(包装一个DBN)
声音 语音识别 N/A 高斯修正 循环网络
声音 语音识别 N/A 高斯修正 移动窗口,DBN或卷积网络
时间序列 预测分析 N/A 高斯修正 循环网络
时间序列 预测分析 N/A 高斯修正 移动窗口,DBN或卷积网络

注:高斯修正 = Gaussian Rectified | 语义哈希 = Semantic Hashing

神经网络的网络架构network architectures和选择

architecture: the way that neural networks are connected.So the term architecture refers to how the different neurons are connected to each other.

[How to Choose a Neural Network]

Gradient Checking梯度检查

使用梯度下降时可能出现的问题

即使bp算法代码写错了,cost func也可能在每次梯度迭代时减小。Your cost function J of theta may end up decreasing on every iteration of gradient descent, but this could pull through even though there might be some bug in your implementation of back prop. So it looks like J of theta is decreasing, but you might just wind up with a neural network that has a higher level of error than you would with a bug-free implementation and you might just not know that there was this subtle bug that's giving you this performance.

梯度的数值估计Numerical estimation of gradients

用梯度的估计值来检测BP算法计算得到的D向量是否正确。

θ为一个实数时

Note:

1 don't use ε that's too, too small because then you might run into numerical problems.

2 二边差分two-sided difference估计更准确一点点,所以不用单边差分one-sided difference。
θ是一个向量参数时

Note: 检查完没问题就关掉gradient checking。numeric code gradient checking code is a very computationally expensive, that's a very slow way to try to approximate the derivative. Back prop is a much more computationally efficient way of computing the derivatives. So once you've verified that your implementation of back-propagation is correct, you should turn off gradient checking.

随机初始化Random Initialization

权重初始化:一般初始化为接近0的很小的随机数。一般用高斯分布或者uniform分布。但是这样的分布会导致输出的方差随着输入单元个数而变大,因此需要除以fan in(输入个数的平方根)或者一般使高斯分布的标准差为std_func = lambda x: math.sqrt(2.0 / float(input_units))。

神经网络中θ初始化0会带来symmetric weights问题:不要全部初始化为0,这样会导致大部分的deltaw都一样。都初始化0最后重新得到的值又会是一样的(相同颜色线条标注的),即使不再是0。然后计算得到的两个a也是相同的,然后delta相同,然后D相同,一直循环这种相同。这就意味着神经网络不能计算出非常有趣的函数,所有的hidden units都在计算完全一样的feature,都在计算完全一样的关于input的函数,这就成了一个高度冗余的表达redundant representation.

Cost function的选择和对比

分类问题一般选择交叉熵

Note: we don't sum over the terms corresponding to these bias values。

回归问题一般选择平方损失。

神经网络的代码实现

[pybrain库调用实现]

[Python下(只)用numpy写神经网络Neural network with numpy]

[tensorflow中实现][(Python/Theano)28行代码的神经网络《A Neural Network in 28 Lines of Theano | codekansas》by bkbolte18]

[tensorflow Module: tf.contrib.layers ][tensorflow tf.contrib.learn.DNNClassifier ]

某小皮

神经网络的评价

优点:分类的准确度高,并行分布处理能力强,分布存储及学习能力强,对噪声神经有较强的鲁棒性和容错能力,能充分逼近复杂的非线性关系,具备联想记忆的功能等。特别重要的是,神经网络可以用来提取特征,这是许多其他机器学习方法所不具备的能力。

  • 网络实质上实现了一个从输入到输出的映射功能,而数学理论已证明它具有实现任何复杂非线性映射的功能。这使得它特别适合于求解内部机制复杂的问题;
  • 网络能通过学习带正确答案的实例集自动提取“合理的”求解规则,即具有自学习能力;
  • 网络具有一定的推广、概括能力。

缺陷:神经网络需要大量的参数,如网络拓扑结构、权值和阈值的初始值;不能观察之间的学习过程,输出结果难以解释,会影响到结果的可信度和可接受程度;学习时间过长,甚至可能达不到学习的目的。

  • BP算法的学习速度很慢,其原因主要有:

    • 由于BP算法本质上为梯度下降法,而它所要优化的目标函数又非常复杂,因此,必然会出现“锯齿形现象”,这使得BP算法低效;
    • 存在麻痹现象,由于优化的目标函数很复杂,它必然会在神经元输出接近0或1的情况下,出现一些平坦区,在这些区域内,权值误差改变很小,使训练过程几乎停顿;
    • 为了使网络执行BP算法,不能用传统的一维搜索法求每次迭代的步长,而必须把步长的更新规则预先赋予网络,这种方法将引起算法低效。
  • 网络训练失败的可能性较大,其原因有:

    • 从数学角度看,BP算法为一种局部搜索的优化方法,但它要解决的问题为求解复杂非线性函数的全局极值,因此,算法很有可能陷入局部极值,使训练失败;
    • 网络的逼近、推广能力同学习样本的典型性密切相关,而从问题中选取典型样本实例组成训练集是一个很困难的问题。
    • 难以解决应用问题的实例规模和网络规模间的矛盾。这涉及到网络容量的可能性与可行性的关系问题,即学习复杂性问题;
    • 网络结构的选择尚无一种统一而完整的理论指导,一般只能由经验选定。为此,有人称神经网络的结构选择为一种艺术。而网络的结构直接影响网络的逼近能力及推广性质。因此,应用中如何选择合适的网络结构是一个重要的问题;
    • 新加入的样本要影响已学习成功的网络,而且刻画每个输入样本的特征的数目也必须相同;
    • 网络的预测能力(也称泛化能力、推广能力)与训练能力(也称逼近能力、学习能力)的矛盾。一般情况下,训练能力差时,预测能力也差,并且一定程度上,随训练能力地提高,预测能力也提高。但这种趋势有一个极限,当达到此极限时,随训练能力的提高,预测能力反而下降,即出现所谓“过拟合”现象。此时,网络学习了过多的样本细节,而不能反映样本内含的规律

因为神经网络的cost function J(θ)是非凸的non-convex,所以理论上易受极小值的影响,但是不会成大问题。 But it turns out that in practice this is not usually a huge problem and even though we can't guarantee that these algorithms will find a global optimum, usually algorithms like gradient descent will do a very good job minimizing this cost function j of theta and get a very good local minimum.

One figure to get that intuition about what gradient descent for a neural network is doing

神经网络的改进

cnn, rnn, lstm, attention机制等等。

对于FFNN模型来说,每计算一个样本点,模型信息就丢失,对于相互独立的样本点来说,这样的模型可以起到很好的作用,但是若样本点之间存在关联性,那么将会有信息丢失以至无法很好完成任务;因此,为了对时间进行建模,RNN模型出现。

from: http://blog.csdn.net/pipisorry/article/details/76095118

ref: [PRML]*

[andrew ng machine learning lecture]

[深度学习笔记(七):RNN模型]

转载于:https://my.oschina.net/u/3579120/blog/1508153

神经网络neural network相关推荐

  1. OpenCV神经网络neural network的实例(附完整代码)

    OpenCV神经网络neural network的实例 OpenCV神经网络neural network的实例 OpenCV神经网络neural network的实例 #include <ope ...

  2. 神经网络-Neural Network 简介

    神经网络-Neural Network 简介 神经元构成 基本结构 简单思考 参考 神经元构成 z=sum(x)=wTx+b=w1x1+w2x2+w3x3+bz=sum(x) = w^Tx+b=w_1 ...

  3. 神经网络 neural network

    神经网络之BP算法,梯度检验,参数随机初始化 neural network(BackPropagation algorithm,gradient checking,random initializat ...

  4. 神经网络(neural network)以及训练原理

    什么是神经网络 神经网络的发现可以说是将人工智能又拔高了一个度,现今很多了不起的成果都是在此之上完成的,那它是如何被发现的呢?既然 是"神经",自然可以联想到人体里面的的神经,及生 ...

  5. 机器学习实验(十):基于WiFi fingerprints用自编码器(Autoencoders)和神经网络(Neural Network)进行定位_1(tensorflow版)

    声明:版权所有,转载请联系作者并注明出处  http://blog.csdn.net/u013719780?viewmode=contents Autoencoders and Neural Netw ...

  6. 神经网络(Neural Network)

    1 引言 机器学习(Machine Learning)有很多经典的算法,其中基于深度神经网络的深度学习算法目前最受追捧,主要是因为其因为击败李世石的阿尔法狗所用到的算法实际上就是基于神经网络的深度学习 ...

  7. 神经网络neural network简单理解

    1,简介 神经网络的一个神经元又叫logistic回归, 由两层神经元组成的神经网络:感知机 单层网络只能做线性分类任务 两层神经网络中的后一层也是线性分类层,应该只能做线性分类任务,关键就是,从输入 ...

  8. 机器学习——神经网络(Neural Network)

    1.MP模型 Mp模型是最基础,最原始的神经网络模型.MP模型是1943年心理学家W.S.McCulloch和数理逻辑学家W.Pitts建立的.它的主要结构如图1所示. 图1 (来源于浙江大学胡浩基老 ...

  9. 反向传播(Back Propagation)与神经网络(Neural Network)

    图片来自:http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html 程序实现参考:http://www.wildml.com/2015/09 ...

最新文章

  1. 免费在线制图神器!内置13个类别上百个模板,不上水印支持中文版,GitHub标星已破1万2...
  2. 谷歌大罢工组织者离职:自曝不得不走,“遭遇秋后算账”
  3. 谷歌体三维捕捉新突破:实现后期任意照明修改
  4. 怎样实现关闭connection时自动关闭Statement和ResultSet
  5. python tkinter Listbox用法
  6. spring5.0学习笔记9
  7. 自学 6 个月 Java 找到了一份 15K 的工作,师弟的方式值得推荐给大家
  8. 【发表案例】JCR1区计算机测量类SCI,仅3个月录用
  9. 16.微信登入与授权
  10. 比伯女友首谈私生子事件 挺男友:事实胜于诡辩
  11. 图的应用:骑士周游问题
  12. 文字转语音软件哪个好?这些软件值得收藏
  13. 深度可分离卷积的Depth,Stack,Channel Multiplier
  14. 请求成功但是报错: Uncaught (in promise)
  15. 差分放大电路的基本工作原理是什么//2021-2-18
  16. java货郎担问题求解_货郎担问题的四种实现方法
  17. Java并发包-java.util.concurrent详解
  18. 交叉编译 arm-poky-linux-gnueabi-gcc libmodbus库笔记
  19. 5.5 Matrix formulation
  20. 实验室异型电磁铁DZ-12的主要技术参数

热门文章

  1. html文件在Chrome打开中文乱码
  2. 使用Python玩转高等数学(2):幂函数
  3. Django电商项目(八)订单生成、悲观锁、乐观锁
  4. Performance overview: Unixbench results on Container and VM, and seccomp
  5. 分布式学习(7)etcd@3@ API v3 gRPC_事务,租约
  6. 其实macbook装win7很简单
  7. html十六进制和RGB颜色表
  8. Bug消灭记:透明 png 图片加水印后变成黑问题
  9. GITC2016北京站——打造技术狂欢盛宴
  10. Unable to instantiate Action错误的解决