神经网络(ANN)

来源:互联网 发布:安知我意txt百度云 编辑:程序博客网 时间:2024/06/04 22:48

先抛出几个问题:

1、怎么求解

2、优缺点

3、反向传播,梯度为什么会弥散

4、激活函数怎么选取

5、几个优化方案?


零、为什么要引入神经网络

回想SVM从线性可分情况,转到非线性可分时,引入了核函数,将样本空间映射到高维线性可分空间。

同样的,神经网络的隐含层也在做这种事情,在高维空间中找到几个特征,可以放到输出层的激活函数里,利用线性学习器来输出结果。

再啰嗦一句,特征工程+LR <  GBDT+LR  < 神经网络 +LR <  CNN+DNN+LR (我脑补的哈哈哈哈)


一、神经元模型

神经网络中最基本的成分就是神经元模型:

神经元接收到来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元收到的总输入值将与神经元的阈值(又叫偏置)进行比较,然后通过“激活函数”处理以产生神经元的输出。


激活函数,你可以理解为,要么就激活,要么不激活,那么可以用阶跃函数表示,但是这个函数具有 不连续、不光滑等不太好的性质,因此实际中通常用Sigmoid函数(后面还会讲到其他激活函数,因为sigmoid函数也有缺点)。



二、为什么要多层?

如果没有隐藏层,那么就类似于逻辑回归了,只能求解线性可分的情况,不能解决XOR问题。


可以看到层数越多,学习能力越强,但是!!!!可以看到 单隐含层已经可以划分了,再加一层就有点过拟合了,有木有!!!!谁让你参数这么多呢。。。


三、怎么求解多层网络?

误差逆传播(BP)算法是比较常用的一种。

1、参数表达:


2、误差选 :均方误差后,每一步参数的迭代推导,涉及求导的链式法则,这也是反向传播名称的由来。




类似的可以求得其他参数的更新公式!!!!!!


3、算法过程:


4、标准BP、累计BP

BP算法的目标是最小化训练集D上的累积误差,累积BP算法,在读取整个训练集D一遍后才对参数进行更新。具体地:

标准BP的做法:样本1,更新下W1为W2,样本2就直接用更新完的w了,即W2!!!!

累积BP的做法:样本1,更新W1为W2,样本2仍然用W1。扫一遍全量训练集之后,W更新为Wn,下一轮,样本1就用Wn了。!!!!


实际使用中,累积误差下降到一定程度后,进行下一步下降会非常缓慢,这时候标准BP往往会更快获得较好的解。


四、怎么设置隐含层的个数及每层的神经元的个数,还有激活函数的选取

1、怎么设置隐含层的个数及每层的神经元的个数 

遗憾的是,至今为止还没有理论规定该如何来确定网络隐含层的数目.所以,只能用尝试的方法来寻找最适宜的隐含层神经元数目.


2、激活函数

http://blog.csdn.net/u013146742/article/details/51986575

传统的S函数有一个很大的缺点,就是BP迭代更新参数时,需要用到梯度,如果一个很大的数据传入S函数,那么其梯度为0,之后就不会被更新,当神经网络层数较多时,S函数在反向传播中梯度值会逐渐减小,经过多层的传递后会呈指数级急剧减小,这就是所谓的梯度弥散问题

ReLU函数可以很好解决这个问题。


3、一般输出层的激活函数是线性分类器的函数,比如 sigmoid、softmax、linear SVM。


五、试图跳出局部最小的几个策略:

1、以多组不同参数值初始化多个神经网络,最后取其中误差最小的解。

2、模拟退火:在每一步都以一定的概率接受比当前解更差的结果。接受“次优解”的概率要逐步降低,以保证算法稳定。

3、随机梯度下降:

4、遗传算法。


六、优缺点:

优点:

1、准确度高

2、适合噪声数据集


缺点:

1、训练慢

2、参数多,调参难

3、解释学弱


七、优化方法

1、过拟合:正则化、Dropout,不要简单的减少层数和每层的神经元个数。

2、参数调优:Adagrad

3、激活函数:ReLU

4、避免局部最优

5、CNN、RNN等。


八、Tensorflow代码

http://blog.csdn.net/u010745111/article/details/62217464


九、Tensorflow demo

http://playground.tensorflow.org/

参考:

机器学习--周志华

0 0
原创粉丝点击