zoukankan      html  css  js  c++  java
  • CNN注意事项_七月算法5月深度学习班第5次课程笔记

     
      desc
    神经网络问题的解决
    1. 网络调不了
    1) init 的工作
    2) 想办法找pre train 去 fine tuning
    3) batch normalization 减小依赖度
    4) 别用 sigmoid
     
    2. 准确率上不去 或者 早停止 了,即:validate 或者 交叉验证集 上的loss 不再下降,但是 train 上可能还会下降,此时是一个瓶颈,即 还有办法做
    1) 调 lr,halved the α步长
       即 准确率上不去 有哪些method
    关于 tensorFlow
    1. caffe model zoo 可以转化为 TF 的
    2. 可视化中间的过程,然后可以实时监控
    CNN 的几个层
    data
    conv
    pooling 下采样
    激励层
    全连接
    softmax
    SGD 与 全局梯度下降的对比
    SGD
    优点:可以跳过局部最优点
    缺点:但是loss 曲线会震荡,即不是每次都是 loss 下降的(上一个data 按照其梯度下降了,但是 next data 可能loss 还是很大,甚至比原来上升了)
     
    全局GD:
    优点:每次loss 都在稳定的下降
    缺点:很可能收敛到局部极值 
     
    因此两者 balance 就是 mini-batch
    多个batch随机,可能收敛到全局最优
    多个batch,每次全局 loss 降低 速度加快
    单次看不一定是下降的,长期看是下降的
    现在工业界的激活函数 一般都是 RELU 了
    RNN 很多是全连接的
    · 数据维度变更也是全连接
    · LSTM 的参数是 全连接相乘
    · 对于 RNN 的参数也是全连接
    所以可能用到 Batch Normalizaiton
    两个对神经网络工程化的理解
    【important】
    1. 关于初始化的重要性,但是你从没有考虑过:
        受这个伤了,重要性占 整个网络的 60%!!!
     
    2. 因为有这种 layer input 成为全 0的现象 或者 ±1 震荡
    所以才会有:监控可视化,作为一个模块单独引入在 TF 中
    全零初始化
    如果全部的w都是0,那么这里:
    四个input都是一模一样的 ,下一层的两个input 也是一模一样的了
    传回来的梯度也一模一样,再传入也是一模一样
    即:所有的 cell 在学习同一个东西
    但是希望:希望参数非对称,分化出不同的权重 ,从而学习不同的角度
    结论:不可取
     
    小值的正态随机初始化
     
    层次不深,可行;层次深,不可行
    因为传到后面,input layer X 也都成了全0 
    大值的正态随机初始化
    节点容易饱和
    即:每次的输出 sigmiod(wx+b) 后的输出是 ±1,相当于 wx+b 这个值很大
    此时的 梯度接近于 消失
    理论求证
    对于 非ReLU 的层
    让初始化的范围与 input 与 output 的节点的个数相关
     
    这样初始化,可以保证:
    输入层序列的方差和输出层序列的方差是一致的
    因为经过推到这个可以看出是 与 神经元个数相关的
    理论求证
    对于 ReLU 的层
    或者
    这样的初始化,其实就是在原基础上 把 根号n 变为 
    batch normalization
    中心极限定理:不管X 服从什么分布,只要 Xi 独立同分布
    那么 这几个 Xi 的和就服从 正态分布
    这里相当于 n 为1,那么 处理过的 X' 服从 N(0,1) 的标准正态分布
     
    然后因为正态分布化以后,这个对原始信息的表征是有损失的
    还要使用r 和 β通过线性组合来进行信息的还原,
     
    用这个 Y 作为新的next layer 的输入【important】
    BN 层的位置
    一般 BN 接在FC 后面的 ,是因为FC 的输出的波动状况会更大
    conv 层 后面其实还是没那么大波动
    现在的CNN 已经开始有多个FC层
    这是有可能的,只要计算力够,然后再需要BN
    batch normalization的好处
    1. 降低对init 的敏感度,因为降低了 全0 或者 ±1饱和的情况,因此传导计算也流畅
    2. 属于一种正则化,即 input 被约束在一定范围内
    FC 的学习能力是强的,在尽可能记录原始信息, 所以在一个幅度大的范围内进行信息表征,所以输出的vector 的波动大,目的是:能记录所有的信息
    现在的约束是 在一定的空间范围内进行学习,只能在这个范围内将信息表示出来,所以可以视为一种正则化
    batch normalization 解决的问题不是 梯度相关的,而是 input 相关的
    所以其实最大的问题就是  input 全都成了0,那么输出也都是 0 了
    这可能使得网络训练不下去,此时的梯度很大
    而 batch normalization 就是解决这个 input layer X 分布不均与的问题
     
    如果 input 很大——> 梯度消失
    如果 input 全0 ——> 梯度很大
    Alex 的地位
    就是给后面的网络一个很好的初始化
    其它的往往使得网络训练不下去,你不知道考虑这个init,即太脆弱了
    三大网络:
    Alex net,GoogleLeNet,VGG,resNet
    都是给后面提供了 fine tuning 的借鉴
    而 VGG 都是在 Alex 的基础上训练出来的
    去均值的两种情况
    1. 按:像素点:
    32 * 32 个像素点,按照 element wise 的求均值,
    即一共有:32*32*3 个均值
     
    2. 按通道:
    只有三个均值,即便是同一张图片内的所有像素点,同一个通道的都要相加,
    这个方法比较粗暴
    如何理解加入 noise 加一些noise,使得学习这些 noise,从而更健壮
    对牛顿法的观点 可以理解为2阶的SGD,会更快,但是对内存要求大
    对深度学习的认识 深度学习极强,如果技巧得当 讲一个 task 做好,其实不是 理论上多么强,而是 工程能力好,而 普通的 model,是没有这么强的灵活性的 
    对 dropout 的认识 
    神经网络中 倾向于 不使用 L2 norm
    因为神经网络的参数量太大,而 L2 norm 这个量级的计算太大
    所以使用的是 dropout
    预测过程的dropout 
    预测的时候怎么做?
    1. 所有的 x  乘以 概率值p, 而不是再0-1化的开关损失了,此时是连续化的
    2. 训练的时候所有有dropout 的layer 都 x'=x/p
        那么预测的时候什么都不用做,即学的时候就是 x/p的参数
    为什么dropout 能防止过拟合
    1. 别开启所有的学习单元,遗忘一定的细节
    2. 每次训练过程中都随机关掉一部分感知器,每次得到一个新模型
       那么调参的方向将会是 多个模型的综合,不至于听一家所言
    多类别分类
    损失函数使用:互熵损失最好
    对于多类别,其实是 两个序列,尤其是看做两个 概率分布
    caffe 的使用步骤
    · 图像转数据库
    · 定义层次结构
    · 定义solver # 训练时候的参数 
    使用 caffe 可以规范化 你的很多 tech
    即:如果你搞懂每个参数的含义的化
     
    使用caffe 的时候,可以将前面的学习率为指定为 0,即不调整前面,只训练后面的一个分类器
    对于超参数的一个角度
    不是静止的而是触发式调整
    即:learning rate 和 weight decay 都是超参数,
    是可以动态调整出来的
    一开始肯定 欠拟合,所以不必weight decay ,然后再去 decay
    这个就是精细化 过程
     
    其实:欠拟合 与 过拟合 是时间轴上的关系
    一个跑前的技巧
    首先是小数据集(100张图片等) ,准确率应该收敛到100%
    如果到不了 100%,那么网络是有问题的
    # 注:这个是没有的正则化 和 dropout 的情况,因为正则化是其到不了100%的
    tensor flow
    比 caffe 强在:即 多机器上的GPU 它也可以用, 即分布式训练
    而这个 caffe 是不能用到多服务器上的GPU的 ,它可以用一台机器上的多个GPU
    关于中间过程可视化
    1. 对于隐层的可视化
     
    2. 对于 每一个 epoch 的可视化
  • 相关阅读:
    Visual Studio 2008中 在工具栏上添加"在文件中查找"
    WPF 获得文件夹路径/浏览文件夹路径
    WPF ListBox
    如何:创建和使用 C# DLL(C# 编程指南)
    (收藏)《博客园精华集》分类索引
    WPF 文件级资源(类似与使用CSS文件,然后引用CSS文件)
    [WPF/Silverlight]让INotifyPropertyChanged的实现更优雅一些
    WPF 动画
    WPF 鼠标移动到图片变大,移开还原,单击触发事件效果
    Regsvr32.exe 用法
  • 原文地址:https://www.cnblogs.com/jianzhitanqiao/p/5550335.html
Copyright © 2011-2022 走看看