洞明先生的博客

穷通悟理是极乐
  新随笔  :: 管理

CNN_七月算法5月深度学习班第4次课程笔记

Posted on 2016-06-01 17:14  洞明  阅读(1184)  评论(0编辑  收藏  举报
 
  desc
神经网络与LR 或者感知机的关系
LR 本身也可以视为一个 感知机,只是把 sign 函数转化为 sigmoid 函数
这里既可以说是 LR,也可以说是 感知机
即:神经网络 有 LR 或者感知机组成
神经网络中非线性变换的理解
神经网络通过 sigmoid 等非线性变换函数可以实现逻辑或,逻辑与
主要工作在这个 sigmoid 层,而前面的系数w 需要预先配置好
神经网络 每一层的线性变换与非线性变换的解释
 
 
对于这种分类情况
 
第一层构造的是 线性kernel,第二层是 sigmoid 非线性变换(等价于逻辑操作)
两个合起来 构成 神经网络中的一层
这是对神经网络为什么能做复杂分类的最好的平面解释
神经网络具有表示 AND 与 OR 的功能,因此可以 做任意的平面切分,可以适用各种分类
每一个绿色区域,都是AND 出来的,而多个绿色区域 之间是 OR
所以 所有的 绿色都可以选出来
神经网络可以分类的两种解释
1. NG 的平面解释:神经网络可以 每一层里面 :直线划分 + 逻辑操作 选定模块区域,然后多块区域之间还能 OR 组合
 
2. 兴军亮老师的解释:非线性变换可以进行 空间扭曲,从而使得原线性不可以分的变为线性可分
每一个 sigmoid 都是一次扭曲
参数共享机制
即对于同一个 filter,参数不变 ,for all data in this layer
对于 RNN 来说,各个node 上也是参数共享机制
CNN 中的一些参数
channel: 3
conv: 3*3
stride: 2*2
zero padding: # 这也是一个 tech ,在配置文件中应该有
卷积神经网络的特征
就是:非全连接
 
 80年代的神经网络没有显示出威力是因为:
1. 硬件资源差
2. 没有进行 简化 
   比如 中间不是全连接,但是保存了大部分信息
   降低了 复杂度,这是一种进步 
关于处理去均值
训练集上计算均值 a
在测试集上 也减去训练集的均值 a
因为对于新问题上,是不知道新问题的均值,所以 是减去训练集上的均值
一个 训练神经网络的tech
把梯度打印,需要跟一下,看什么时候骤降为0,需要调整
这就是寒老师说的:小心翼翼
SGD
SGD 不是全量上的 梯度,是随机的梯度,好处是:
对于 非凸的函数,可以 跳过局部最低点
所以 这个S 是有用,SGD > GD 全局的
关于卷积
定义:
一组固定的权重 和 不同窗口内数据(ALL DATA)做内积:卷积
 
1. 抓住局部信息
2. 是一种优化
是 从第二个的角度 解决Full connect 的 训练问题
卷积与池化
1. 池化降低的是原始数据的个数,从而下一层的参数减少
 
2. 卷积直接 降低的是参数的个数,用卷积而不是全连接
关于池化
downsampling -- 老版叫法
subsampling
pooling 
其实都是 池化
 
因为旧版本的 CNN,但是 没有GPU 所以当时才大量用 pooling
现在可以使用 更细致的 pooling 了,即不是大面积池化
图像处理的习惯
jpg 转 为levedb 或者 imdb 存储保存
而不是 直接用图片
caffe 的形式
1. Python 自己写 code
2. 命令行的方式,写 prototxt 这个配置文件
   prototxt 是 google 的文件格式,替代json 的格式
 
现在的趋势:
C 写 core
Python 做接口
docker 作环境配置
图片的特征表示 使用结果层 前面的一层,用这个向量表征这个 图片
关于激励函数
1.  不要用sigmoid ,因为
在两层的偏导为0,那么反传系数就趋于0,
此时的现象叫做:
saturate 饱和 或者 vanish 是消失
可能训练不下去了
 
2. ReLU
仅仅是 求梯度快
但是一旦到了左边 ,那么 偏导数还是0,也就是还是挂掉
解决办法:
1)一般使用ReLU就要 就是用别人的pretrain参数,这样一般ReLU不会挂掉
2)使用改进版本
 
3. leaky ReLU
 
4. eLU
小于0 的部分是曲线
因为有指数,所以求导相对慢
 
5. Maxout
 
6. 关于 tanh 也不建议,它的好处就是 与 sigmoid 相比,中心点是0 
   但是也可能出现 偏导为 0 的 情况
   所以 你的那个 RNN 别用 sigmoid 和 tanh 了
 
tanh 与 sigmoid 的关系
tanh 本质就是 sigmoid,多了些系数而已
最大的告诫
不要用 sigmoid 函数,no matter CNN 还是 RNN
因为都可能训练不出来, sigmoid 是学术界提出的
 
选了一个神经网络很可能训练不出来,这是常事,可能假死,可能早停止等等
经过 大量的试验,图像领域不同的网络其实就是超参数不同,都是试出来,所以需要保留
按照那些已经 试出来成功的 来操纵,比如
LeNet,AlexNet
所以 MS 训练处一个极其深的网络的时候,这个的困难可能是指数级的
norm layer
工业界现在 不使用 norm layer
因为实验 发现,它基本不起作用
但是还用 pool layer
bp 中第一个求导公式
关于 bp 中的间隔一层的求导计算,为什么有一个 Σ 展开
前提是 如果间隔是两层的话,如:
此时如果 dL/dx1 的话,而不是 dz1/dx2,即多间隔了一层,那么
因为有多个 feature,即 如果对 xj 求导的话,xj 与 第一套W1 算过一遍,有
pooling 也是可以求导的 max 也是有导函数,使用了指数函数 I(x)
如何描述CNN
两个角度:
1.不仅仅知道 各层的 卷积与 池化后 是 N*M 的计算方式,这个是显示你懂这个的点
 
2. 每个地方计算 memory 的计算,这个也是功底的体现
refer
PPT 68