- I . 基于 神经网络 进行分类
- II . 神经网络分类适用场景
- III . 神经网络分类的弊端
- IV . 神经网络分类的优点
- V . 后向传播算法
- VI . 后向传播算法 网络拓扑定义
- VII . 后向传播算法 学习过程
- VIII . 后向传播算法 步骤
- IX . 后向传播算法 初始化权
- X . 后向传播算法 步骤 二 : 向前传播输入 第一层输入值
- XI . 后向传播算法 步骤 二 : 向前传播输入 隐藏层 与 输出层 输入值计算
- XII . 后向传播算法 步骤 二 : 向前传播输入 隐藏层 与 输出层 输出值计算
1 . 神经网络 用途 : 感知器 类型的神经网络 , 常用于分类预测 ;
① 感知器 : 感知器 对应有监督的学习方法 , 给出已知的训练集 , 学习过程中指导模型的训练 ;
② 其它分类方法 : 决策树 , 贝叶斯 , 支持向量机 ;
2 . 分类知识存储 : 神经网络 分类知识 , 存储在 神经元单元 互相连接的边上 , 隐式地存储与神经元之间连接的 权值 系数上 ;
3 . 分类过程 : 将连接的 权值 ( 系数 ) 训练学习出来 , 该 神经网络 就可以进行分类 , 将样本特征信息输入到输入层中 , 就可以在输出层得到样本的类型 ;
① 迭代算法 : 神经网络 学习训练的过程 , 是一个迭代过程 , 主要是对权值进行迭代优化 ;
② 初始值 : 开始时 , 给每个连接的权值 , 赋值一个初始值 ;
③ 迭代目标 : 学习过程就是不断迭代优化连接的权值 , 使训练集中的样本能被正确分类 ;
II . 神经网络分类适用场景神经网络 分类 适用场景 :
① 样本少 : 训练集的样本数据量小 , 没有足够的数量用于建立模型 ;
② 结构复杂 : 数据结构复杂 , 无法使用传统的统计方法描述 , 如图片数据 ;
③ 概率模型不适用 : 统计模型无法表示分类模型 , 无法使用概率来进行分类 ;
III . 神经网络分类的弊端神经网络缺点 :
① 训练时间长 : 神经网络 的学习训练花费时间比较长 ;
② 参数 ( 连接权值 ) 数量多 : 神经元单元连接 , 每个连接都有一个权值 , 每个单元节点还有偏置 , 参数数量多 ;
③ 初始值确定依赖经验 : 参数的初始值需要依靠经验确定 , 如果初始值设置不当 , 训练时间会很长 , 如果初始值合适 , 训练时间很短 ;
④ 拓扑结构依赖经验 : 神经网络 的拓扑结构 , 也是需要经验来确定 , 选择不合适的拓扑结构 , 事倍功半 ;
⑤ 解释性差 : 根据一堆没有意义的参数权值预测出的结果 , 无法解释分类的底层原理 ; ( 炼金术 )
IV . 神经网络分类的优点神经网络分类优点 :
① 准确 : 使用神经网络分类 , 准确性高 ;
② 处理 : 并行 分布式 处理数据 能力强;
③ 存储 : 分布式存储 能力强 ;
④ 学习 : 分布式学习 能力强 ;
⑤ 容错 : 对噪音数据容错能力高 , 鲁棒性好 ;
V . 后向传播算法后向传播算法 运行基础 : 该算法在 多路前馈 神经网络 上学习 ;
多路 : 有多个输入 ;
前馈 : 数据不再回来 ;
VI . 后向传播算法 网络拓扑定义1 . 定义网络拓扑结构 :
① 训练之前 , 先定义网络拓扑结构 ;
② 输入层 : 输入层的 单元 个数 ; 第一层是输入层 ;
③ 隐藏层 : 隐藏层 层数 , 每一层隐藏层 单元个数 ; 输入层和输出层之间的都是隐藏层 ;
④ 输出层 : 输出层 单元个数 ; 最后一层是输出层 ;
⑤ 连接方式 : 确定单元的连接方式 , 全连接 还是 局部连接 ;
2 . 输入单元 属性值值规范化 :
① 好处 : 对样本的属性值进行规范化 , 会提高学习的性能 ;
② 常用规范值 : 一般将数据值规范化为 0 ~ 1.0 之间的浮点数值 ;
3 . 输出单元 :
① 单个元表示类别数 : 每个输出单元只能表示 0 0 0 和 1 1 1 两个类别 ;
② 多类别情况 : 如果类别个数多于 2 2 2 个 , 那么使用多个输出单元 , 每个类使用一个输出单元 ;
4 . 训练过程 :
① 拓扑结构 : 网络拓扑结构 设计的过程 , 需要反复实验 , 训练 , 该设置影响最终的分类准确率 ;
② 初始权值 : 初始的 权值直接影响训练时间 , 也影响最终分类的准确度 ;
③ 反复迭代 : 如果经过训练后发现准确率低 , 就是 拓扑结构 和 初始权值 设置不合理 , 需要重复训练 ;
VII . 后向传播算法 学习过程0 . 总结 : 前向传播输入 , 后向传播误差 , 根据误差修改每个连接的权值 , 最终达到要求的准确率 , 或权值趋于稳定 ;
1 . 后向传播算法 学习过程 :
① 前向传播 输入 ( 输入 -> 输出 方向 ) : 迭代 处理训练集样本数据 , 将 输出 的样本预测分类值 , 与实际的分类进行比较 ;
② 后向传播 误差 ( 输出 -> 输入 方向 ) : 每次迭代后 , 根据 分类结果 和 实际分类 进行对比 , 修改 单元 连接权值, 使 预测分类结果 与 实际分类 二者 均方差最小 ; 均方差 是 评分函数 ;
2 . 后向传播 核心 : 每次正向分类后 , 都要对比 分类结果 和 实际分类 , 然后反向将对比结果 , 由 输出层 , 途径每个隐藏层 , 送达第一个隐藏层 ; 目的是修改每个连接的权值 ;
3 . 后向传播迭代终止 :
① 准确率达到 : 训练集 中的样本 能被准确的分类 , 准确率达到标准 ;
② 连接权值稳定 : 训练一段时间 , 单元连接的权值 趋于稳定 , 不再有大的变化 , 如果准确率还很低 , 说明拓扑结构不行 ;
VIII . 后向传播算法 步骤后向传播算法 步骤 :
① 初始化权与偏置 ( 执行 1 1 1 次 ) ;
② 向前传播输入 ( 迭代执行 ) ;
③ 向后传播误差 ( 迭代执行 ) ;
IX . 后向传播算法 初始化权1 . 初始化权 : 神经网络 中神经元单元 连接的权值 , 通常初始化成 小随机数 , 一般是 [ − 0.5 , 5 ] [-0.5, 5] [−0.5,5] 或 [ − 1 , 1 ] [-1 , 1] [−1,1] 区间内的值 ;
2 . 初始化偏置 ( bias ) : 神经网络 中每个神经元单元 都有一个 偏置 属性 , 也是初始化成 小随机数 , 一般是 [ − 0.5 , 5 ] [-0.5, 5] [−0.5,5] 或 [ − 1 , 1 ] [-1 , 1] [−1,1] 区间内的值 ;
X . 后向传播算法 步骤 二 : 向前传播输入 第一层输入值1 . 向前传播输入 : 计算每一层 , 每个单元的输入 和 输出 ;
2 . 输入层 ( 第一层 ) : 不做任何操作 , 只是将样本属性传入即可 , 输入层单元的值 , 就是样本的规范化后的属性值 ;
输 入 值 O j = 输 出 值 I j = 样 本 属 性 值 X j 输入值 O_j = 输出值 I_j = 样本属性值 X_j 输入值Oj=输出值Ij=样本属性值Xj
O j = I j = X j O_j = I_j = X_j Oj=Ij=Xj
j j j 代表单元的索引值 ;
O j O_j Oj 代表单元输入值 ;
I j I_j Ij 代表单元的输出值 ;
X j X_j Xj 代表规范化后的样本属性值 ;
规范化属性值 : 这个属性值 X j X_j Xj 是经过规范化的 , 一般是 [ 0 , 1 ] [0, 1] [0,1] 区间内的值 ;
XI . 后向传播算法 步骤 二 : 向前传播输入 隐藏层 与 输出层 输入值计算1 . 隐藏层 与 输出层 : 这些层 单元 的 输入值 是 前一层输出 的 线性组合 ;
如 : 前一层的 单元 a , b , c a , b , c a,b,c 三个单元 与 后一层的 单元 j j j 连接 , 那么后一层的 单元 j j j 的输入就是 前一层 a , b , c a, b, c a,b,c 单元的线性组合 ;
2 . 隐藏层 与 输出层 输入值计算过程 :
单个单元入计算公式方式 ( 重要 ) : 如果有多个上层单元连接本层的 单元 j j j , 那么需要多个输入值累加 ; 输 入 值 = 上 一 层 单 元 输 出 值 × 连 接 权 值 + 偏 置 输入值 = 上一层单元输出值 \times 连接权值 + 偏置 输入值=上一层单元输出值×连接权值+偏置
单元 j j j 的输入值计算方式 : I j = ∑ w i j O i + θ i I_j = \sum w_{ij} O_i + \theta_i Ij=∑wijOi+θi i = 0 , 1 , ⋯ , n i = 0 , 1 , \cdots , n i=0,1,⋯,n
I j I_j Ij 表示单元 j j j 的输入 ;
n n n 表示前一层有 n n n 个单元与 本层的 单元 j j j 连接 ; n ≥ 0 n \geq 0 n≥0 ;
i i i 表示前一层的单元索引 ;
w i j w_{ij} wij 表示 前一层的单元 i i i 与本层的连接的 权值 ;
O i O_i Oi 表示上一层的输出 ; 这里注意 上一层的输出 与 连接权重 和 偏置 计算后 , 组成下一层的输入 ; ( 上一层的输出值 是 根据上上层的输出 与 上上层 与 连接 偏置计算 得来的 )
θ i \theta_i θi 表示上一层单元 i i i 的偏置 , 该值通常与连接权值组合使用 , 可以看做是连接的附属属性 , 这样好理解 ;
XII . 后向传播算法 步骤 二 : 向前传播输入 隐藏层 与 输出层 输出值计算隐藏层 与 输出层 输出值计算过程 : 使用 激活函数 , 将输入值转为输出值 , 一般使用 Sigmoid 激活函数 ;
O j = 1 1 + e − I j O_j = \dfrac{1}{1 + e^{-I_j}} Oj=1+e−Ij1
Sigmoid 是非线性激活函数 , 作用是将全体实数 映射到 ( 0 , 1 ) (0,1) (0,1) 区间上 , 这样就能保证输出的值是一个 ( 0 , 1 ) (0 , 1) (0,1) 之间的值 ;
O j O_j Oj 代表单元 j j j 的输出值 ;
I j I_j Ij 代表单元 j j j 的输入值 ;