【数据挖掘】神经网络 后向传播算法 ( 神经网络分类 | 适用场景 | 优缺点 | 多路前馈神经网络 | 后向传播算法步骤 | 初始化权 | 向前传播输入 )

2023-03-27 19:37:49 浏览数 (3)

文章目录
  • I . 基于 神经网络 进行分类
  • II . 神经网络分类适用场景
  • III . 神经网络分类的弊端
  • IV . 神经网络分类的优点
  • V . 后向传播算法
  • VI . 后向传播算法 网络拓扑定义
  • VII . 后向传播算法 学习过程
  • VIII . 后向传播算法 步骤
  • IX . 后向传播算法 初始化权
  • X . 后向传播算法 步骤 二 : 向前传播输入 第一层输入值
  • XI . 后向传播算法 步骤 二 : 向前传播输入 隐藏层 与 输出层 输入值计算
  • XII . 后向传播算法 步骤 二 : 向前传播输入 隐藏层 与 输出层 输出值计算

I . 基于 神经网络 进行分类

1 . 神经网络 用途 : 感知器 类型的神经网络 , 常用于分类预测 ;

① 感知器 : 感知器 对应有监督的学习方法 , 给出已知的训练集 , 学习过程中指导模型的训练 ;

② 其它分类方法 : 决策树 , 贝叶斯 , 支持向量机 ;

2 . 分类知识存储 : 神经网络 分类知识 , 存储在 神经元单元 互相连接的边上 , 隐式地存储与神经元之间连接的 权值 系数上 ;

3 . 分类过程 : 将连接的 权值 ( 系数 ) 训练学习出来 , 该 神经网络 就可以进行分类 , 将样本特征信息输入到输入层中 , 就可以在输出层得到样本的类型 ;

① 迭代算法 : 神经网络 学习训练的过程 , 是一个迭代过程 , 主要是对权值进行迭代优化 ;

② 初始值 : 开始时 , 给每个连接的权值 , 赋值一个初始值 ;

③ 迭代目标 : 学习过程就是不断迭代优化连接的权值 , 使训练集中的样本能被正确分类 ;

II . 神经网络分类适用场景

神经网络 分类 适用场景 :

① 样本少 : 训练集的样本数据量小 , 没有足够的数量用于建立模型 ;

② 结构复杂 : 数据结构复杂 , 无法使用传统的统计方法描述 , 如图片数据 ;

③ 概率模型不适用 : 统计模型无法表示分类模型 , 无法使用概率来进行分类 ;

III . 神经网络分类的弊端

神经网络缺点 :

① 训练时间长 : 神经网络 的学习训练花费时间比较长 ;

② 参数 ( 连接权值 ) 数量多 : 神经元单元连接 , 每个连接都有一个权值 , 每个单元节点还有偏置 , 参数数量多 ;

③ 初始值确定依赖经验 : 参数的初始值需要依靠经验确定 , 如果初始值设置不当 , 训练时间会很长 , 如果初始值合适 , 训练时间很短 ;

④ 拓扑结构依赖经验 : 神经网络 的拓扑结构 , 也是需要经验来确定 , 选择不合适的拓扑结构 , 事倍功半 ;

⑤ 解释性差 : 根据一堆没有意义的参数权值预测出的结果 , 无法解释分类的底层原理 ; ( 炼金术 )

IV . 神经网络分类的优点

神经网络分类优点 :

① 准确 : 使用神经网络分类 , 准确性高 ;

② 处理 : 并行 分布式 处理数据 能力强;

③ 存储 : 分布式存储 能力强 ;

④ 学习 : 分布式学习 能力强 ;

⑤ 容错 : 对噪音数据容错能力高 , 鲁棒性好 ;

V . 后向传播算法

后向传播算法 运行基础 : 该算法在 多路前馈 神经网络 上学习 ;

多路 : 有多个输入 ;

前馈 : 数据不再回来 ;

VI . 后向传播算法 网络拓扑定义

1 . 定义网络拓扑结构 :

① 训练之前 , 先定义网络拓扑结构 ;

② 输入层 : 输入层的 单元 个数 ; 第一层是输入层 ;

③ 隐藏层 : 隐藏层 层数 , 每一层隐藏层 单元个数 ; 输入层和输出层之间的都是隐藏层 ;

④ 输出层 : 输出层 单元个数 ; 最后一层是输出层 ;

⑤ 连接方式 : 确定单元的连接方式 , 全连接 还是 局部连接 ;

2 . 输入单元 属性值值规范化 :

① 好处 : 对样本的属性值进行规范化 , 会提高学习的性能 ;

② 常用规范值 : 一般将数据值规范化为 0 ~ 1.0 之间的浮点数值 ;

3 . 输出单元 :

① 单个元表示类别数 : 每个输出单元只能表示

0

1

两个类别 ;

② 多类别情况 : 如果类别个数多于

2

个 , 那么使用多个输出单元 , 每个类使用一个输出单元 ;

4 . 训练过程 :

① 拓扑结构 : 网络拓扑结构 设计的过程 , 需要反复实验 , 训练 , 该设置影响最终的分类准确率 ;

② 初始权值 : 初始的 权值直接影响训练时间 , 也影响最终分类的准确度 ;

③ 反复迭代 : 如果经过训练后发现准确率低 , 就是 拓扑结构 和 初始权值 设置不合理 , 需要重复训练 ;

VII . 后向传播算法 学习过程

0 . 总结 : 前向传播输入 , 后向传播误差 , 根据误差修改每个连接的权值 , 最终达到要求的准确率 , 或权值趋于稳定 ;

1 . 后向传播算法 学习过程 :

① 前向传播 输入 ( 输入 -> 输出 方向 ) : 迭代 处理训练集样本数据 , 将 输出 的样本预测分类值 , 与实际的分类进行比较 ;

② 后向传播 误差 ( 输出 -> 输入 方向 ) : 每次迭代后 , 根据 分类结果 和 实际分类 进行对比 , 修改 单元 连接权值, 使 预测分类结果 与 实际分类 二者 均方差最小 ; 均方差 是 评分函数 ;

2 . 后向传播 核心 : 每次正向分类后 , 都要对比 分类结果 和 实际分类 , 然后反向将对比结果 , 由 输出层 , 途径每个隐藏层 , 送达第一个隐藏层 ; 目的是修改每个连接的权值 ;

3 . 后向传播迭代终止 :

① 准确率达到 : 训练集 中的样本 能被准确的分类 , 准确率达到标准 ;

② 连接权值稳定 : 训练一段时间 , 单元连接的权值 趋于稳定 , 不再有大的变化 , 如果准确率还很低 , 说明拓扑结构不行 ;

VIII . 后向传播算法 步骤

后向传播算法 步骤 :

① 初始化权与偏置 ( 执行

1

次 ) ;

② 向前传播输入 ( 迭代执行 ) ;

③ 向后传播误差 ( 迭代执行 ) ;

IX . 后向传播算法 初始化权

1 . 初始化权 : 神经网络 中神经元单元 连接的权值 , 通常初始化成 小随机数 , 一般是

[-0.5, 5]

[-1 , 1]

区间内的值 ;

2 . 初始化偏置 ( bias ) : 神经网络 中每个神经元单元 都有一个 偏置 属性 , 也是初始化成 小随机数 , 一般是

[-0.5, 5]

[-1 , 1]

区间内的值 ;

X . 后向传播算法 步骤 二 : 向前传播输入 第一层输入值

1 . 向前传播输入 : 计算每一层 , 每个单元的输入 和 输出 ;

2 . 输入层 ( 第一层 ) : 不做任何操作 , 只是将样本属性传入即可 , 输入层单元的值 , 就是样本的规范化后的属性值 ;

输入值 O_j = 输出值 I_j = 样本属性值 X_j
O_j = I_j = X_j
j

代表单元的索引值 ;

O_j

代表单元输入值 ;

I_j

代表单元的输出值 ;

X_j

代表规范化后的样本属性值 ;

规范化属性值 : 这个属性值

X_j

是经过规范化的 , 一般是

[0, 1]

区间内的值 ;

XI . 后向传播算法 步骤 二 : 向前传播输入 隐藏层 与 输出层 输入值计算

1 . 隐藏层 与 输出层 : 这些层 单元 的 输入值前一层输出线性组合 ;

如 : 前一层的 单元

a , b , c

三个单元 与 后一层的 单元

j

连接 , 那么后一层的 单元

j

的输入就是 前一层

a, b, c

单元的线性组合 ;

2 . 隐藏层 与 输出层 输入值计算过程 :

单个单元入计算公式方式 ( 重要 ) : 如果有多个上层单元连接本层的 单元

j

, 那么需要多个输入值累加 ;

输入值 = 上一层单元输出值 times 连接权值 偏置

单元

j

的输入值计算方式 :

I_j = sum w_{ij} O_i theta_i
i = 0 , 1 , cdots , n
I_j

表示单元

j

的输入 ;

n

表示前一层有

n

个单元与 本层的 单元

j

连接 ;

n geq 0

;

i

表示前一层的单元索引 ;

w_{ij}

表示 前一层的单元

i

与本层的连接的 权值 ;

O_i

表示上一层的输出 ; 这里注意 上一层的输出连接权重 和 偏置 计算后 , 组成下一层的输入 ; ( 上一层的输出值 是 根据上上层的输出 与 上上层 与 连接 偏置计算 得来的 )

theta_i

表示上一层单元

i

的偏置 , 该值通常与连接权值组合使用 , 可以看做是连接的附属属性 , 这样好理解 ;

XII . 后向传播算法 步骤 二 : 向前传播输入 隐藏层 与 输出层 输出值计算

隐藏层 与 输出层 输出值计算过程 : 使用 激活函数 , 将输入值转为输出值 , 一般使用 Sigmoid 激活函数 ;

O_j = dfrac{1}{1 e^{-I_j}}

Sigmoid 是非线性激活函数 , 作用是将全体实数 映射到

(0,1)

区间上 , 这样就能保证输出的值是一个

(0 , 1)

之间的值 ;

O_j

代表单元

j

的输出值 ;

I_j

代表单元

j

的输入值 ;

0 人点赞