446Deep Learning

Posted alex-bn-lee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了446Deep Learning相关的知识,希望对你有一定的参考价值。

ref: 深度学习基础介绍 机器学习19 神经网络NN算法

技术图片

  1. 组成部分:输入层(input layer),隐藏层(hidden layer),输出层(output layer)
  2. 每层由单元(units)组成(圆圈)
  3. input layer 是由训练集的实例特征向量传入
  4. 经过连接结点的权重(weight)传入下一层,一层的输出是下一层的输入
  5. hidden layer 的个数是任意的,input layer 有一层,output layer 有一层
  6. 每个 unit 也可以被称作神经结点,根据生物学来源定义
  7. 以上为2层的神经网络(输入层不算)
  8. 一层中加权的求和,然后根据非线性方程转化输出
  9. 作为多层向前神经网络,理论上,如果有足够多的隐藏层(hidden layers)和足够大的训练集,可以模拟任何方程

设计神经网络结构

  1. 使用神经网络训练数据之前,必须确定神经网络的层数,以及每层单元的个数
  2. 特征向量在被传入输入层时通常被先标准化(normalize)到0和1之间(为了加速学习过程) 
  3. 离散型变量可以被编码成每一个输入单元对应一个特征值可能赋的值
    • 比如:特征值A可能取三个值(a0, a1, a2),可以使用3个输入单元来代表A
    • 如果 A=a0,那么代表 a0 的单元值就取1,其他取0;
    • 如果 A=a1,那么代表 a1 的单元值就取1,其他取0,以此类推
  4. 神经网络既可以用来做分类(classification)问题,也可以解决回归(regression)问题
    • 对于分类问题,如果是2类,可以用一个输出单元表示(0和1分别代表2类)
      如果多于2类,每一个类别用一个输出单元表示
      所以输出层的单元数量通常等于类别的数量
    • 没有明确的规则来设计最好有多少个隐藏层
      根据实验测试和误差,以及准确度来试验并改进
  5. 交叉验证方法(Cross-Validation)
    K-fold cross validation
    技术图片
    分成3分
    第一次,后两个训练,第一个测试
    第二次,两边两个驯良,中间测试
    第三次,前两个训练,最后一个测试
  6. Backpropagation 算法
    • 通过迭代性的来处理训练集中的实例
    • 对比经过神经网络后输入层预测值(predicted value)与真实值(target value)之间
    • 反方向(从 输出层 => 隐藏层 => 输入层)来以最小化误差(error)来更新每个连接的权重(weight)
    • 算法详细介绍
      • 输入:D:数据集,l 学习率(learning rate),一个多层向前神经网络
      • 输出:一个训练好的神经网络(a trained neural network)

      • 初始化权重(weights)和偏向(bias):随机初始化在 -1 到 1 之间,或者 -0.5 到 0.5 之间,每个单元有一个偏向
      • 对于每一个训练实例 X,执行以下步骤:
        • 由输入层向前传送
        • $$I_{j}=sum_{i}omega_{ij}O_{i}+Theta_{j}$$
          • $i$ 对应前面的单元,$j$ 对应后面的单元
          • $omega_{ij}$ 为权重
          • $O_{i}$ 为前一层的单元值
          • $Theta_{j}$ 为偏向 bias
          • $I_{j}$ 为计算结果
        • 技术图片
        • $$O_{j}=frac{1}{1+e^{-I_{j}}}$$

          • Sigmoid 函数,激活函数
          • $O_{j}$ 为实际的计算值
        • 根据误差(error)反向传送
          • 对于输出层:
            • $$Err_{j}=O_{j}(1-O_{j})(T_{j}-O_{j})$$
            • $T_{j}$ 为真实值
          • 对于隐藏层:
            • $$Err_{j}=O_{j}(1-O_{j})sum_{k}Err_komega_{jk}$$
            • $Err_k$ 为前面一层,相当于后面一层的误差
            • $omega_{jk}$ 为前面一层,相当于后面一层的权重
          • 权重更新:
            • $$Deltaomega_{ij}=(l)Err_{j}O_{i}$$
            • $$omega_{ij}=omega_{ij}+Deltaomega_{ij}$$
            • $l$ 为学习率,逐渐减小,比较优化
          • 偏向更新:
            • $$DeltaTheta_{j}=(l)Err_{j}$$
            • $$Theta_{j}=Theta_{j}+DeltaTheta_{j}$$
        • 终止条件
          • 权重的更新低于某个阈值
          • 预测的错误率低于某个阈值
          • 达到预设一定的循环次数

 

以上是关于446Deep Learning的主要内容,如果未能解决你的问题,请参考以下文章

CSCI446/946

codeforces 446A DZY Loves Sequences

Arithmetic Slices II - Subsequence LT446

在 Nucleo-F446RE 上通过 CANBUS 进行引导加载程序访问

CF 446C 线段树

STM32F446板载温度传感器,定时器配置问题