1951人阅读 评论(9)

# 前馈神经网络：FFNN模型（feedforward neural network）

## 神经网络的表示

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.

## 神经网络的前向推导

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

# 梯度下降最优化

（1）BP算法通过链式法则计算出每一层参数的梯度，使用梯度下降的算法进行损失函数的优化；

# 误差反向传播：bp算法

### 计算En关于权值wji的导数

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.

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

## 神经网络的选择

### 神经网络的架构设计

[How to Choose a Neural Network][深度学习]

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

θ为一个实数时

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.

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

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

## 神经网络的改进

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

ref: [PRML]*

[andrew ng machine learning lecture]

2
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：2611820次
• 积分：25422
• 等级：
• 排名：第246名
• 原创：534篇
• 转载：30篇
• 译文：5篇
• 评论：245条
Welcome to 皮皮blog~

博客专栏
 概率图模型 文章：21篇 阅读：120449
 PythonQT 文章：5篇 阅读：39257
 Django 文章：13篇 阅读：78920
 Git 文章：8篇 阅读：46520
 主题模型 文章：16篇 阅读：115506
 机器学习 文章：18篇 阅读：57146
最新评论
友情链接