5.神经网络算法

1.背景

1.1以人脑的神经网络为启发,历史上出现过很多不同的版本

1.2最著名的算法是1980年的是backpropagation

2.多层向前神经网络(Multilayer Feed-Forward Neural Network)

2.1 Backpropagation被使用在多层向前神经网络上

2.2多层向前神经网络由以下部分组成:

输入层(input layer),隐藏层(hidden layers),输出层(output layers)

《5.神经网络算法》

2.3每一层由单元(untis)组成

2.4输入层(input layer)是由训练集的实例特征向量传入

2.5 经过连接结点的权重(weight)传入下一层,一层的输出是下一层的输入

2.6 隐藏层的个数可以是任意的,输入层有一层,输出层有一层

2.7 每个单元(unit)也可以被称作神经结点,根据生物学来源定义

2.8 以上成为2层的神经网络(输入层不算)

2.9 一层中加权的求和,加一个bias偏移量,然后根据非线性方程转化输出

2.10 作为多层向前神经网络,理论上,如果有足够多的隐藏层(hidden layers) 和足够大的训练集, 可以模拟出任何方程

3.设计神经网络结构

3.1使用神经网络训练数据之前,必须确定神经网络的层数,以及每层单元的个数。

3.2特征向量在被传入输入层时通常被先标准化(normalize)到0和1之间(为了加快学习过程)

3.3 离散型变量可以被编码成每一个输入单元对应一个特征值可能赋的值
          比如:特征值A可能取三个值(a0, a1, a2), 可以使用3个输入单元来代表A。
                    如果A=a0, 那么代表a0的单元值就取1, 其他取0;
                    如果A=a1, 那么代表a1的单元值就取1,其他取0,以此类推

3.4 神经网络即可以用来做分类(classification)问题,也可以解决回归(regression)问题
       3.4.1 对于分类问题,如果是2类,可以用一个输出单元表示(0和1分别代表2类)
                                         如果多余2类,每一个类别用一个输出单元表示
         所以输出层的单元数量通常等于类别的数量

       3.4.2 没有明确的规则来设计最好有多少个隐藏层,一般是先确定一个层数,根据实验测试和误差,以及准确度来实验,慢  慢改进。
              3.4.2.1 根据实验测试和误差,以及准确度来实验并改进

4.交叉验证方法(Cross-Validation)

对于准确度怎么来算呢?前面几篇实践中的做法都是把一组数据分成训练集和测试集两部分。训练集来训练模型。测试集输入进去看结果是不是对的,根据正确率得到一个准确度。 
不过机器学习中有一种更常用和科学的方法,交叉验证方法(cross-validation)。下面来介绍一下这种方法。如下图:

《5.神经网络算法》

前面我们用的方法是把数据分成2份,一份测试集一份数据集。交叉验证方法就是把数据分成更多份,比如10份,9份训练1份测试得到一个准确度。这样10份中每一份都当一次测试集,其它9份当训练集,继续下去可以得到10个准确度,做一个均值就得到最终的准确度。这就是交叉验证方法,这样可以更充分的利用数据集。这个10份只是举个例子,实际上可以分成任意的K份,所以这个方法也被称为K-fold cross validation。

5.Backpropagation算法(重点)
     5.1 通过迭代性的来处理训练集中的实例
     5.2 对比经过神经网络后输入层预测值(predicted value)与真实值(target value)之间
     5.3 反方向(从输出层=>隐藏层=>输入层)来以最小化误差(error)来更新每个连接的权重(weight)
     5.4 算法详细介绍
           输入:D:数据集,l 学习率(learning rate), 一个多层前向神经网络
           输出:一个训练好的神经网络(a trained neural network)
          5.4.1 初始化权重(weights)和偏向(bias): 随机初始化在-1到1之间,或者-0.5到0.5之间,每个单元有          
                    一个偏向
          5.4.2 对于每一个训练实例X,执行以下步骤:
                    5.4.2.1: 由输入层向前传送

《5.神经网络算法》

《5.神经网络算法》

6.Backpropagation算法举例

《5.神经网络算法》

《5.神经网络算法》

《5.神经网络算法》

《5.神经网络算法》

补充:

《5.神经网络算法》

《5.神经网络算法》

S 曲线函数可以将一个数值转为值域在 0 到 1 之间,广义上S 函数是满足y值在某个值域范围,渐变的一个曲线就可以了。通常情况下使用什么样的 Sigmoid 函数呢?有两种。

双曲函数( tanh ) 双曲函数是一类与常见的三角函数(也叫圆函数)类似的函数。详情看https://baike.baidu.com/item/%E5%8F%8C%E6%9B%B2%E5%87%BD%E6%95%B0/8704306?fr=aladdin

《5.神经网络算法》

逻辑函数(logistic function ) 逻辑函数或逻辑曲线是一种常见的S函数,百科:https://baike.baidu.com/item/%E9%80%BB%E8%BE%91%E5%87%BD%E6%95%B0/1759697?fr=aladdin

《5.神经网络算法》

    原文作者:神经网络算法
    原文地址: https://blog.csdn.net/angyinyan0208/article/details/83183967
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞