6.神经网络训练细节part1

一、激活函数

  • 前边我们学到,一个节点的输出会进入激活函数进行处理
图片.png
  • 常见的激活函数有以下
常见的激活函数

sigmoid激活函数

  • sigmoid的公式如图
  • 它将数据输入的压缩到[0,1]范围内输出
  • 类似于神经元的饱和放电
sigmoid

问题1:饱和神经元将使得梯度消失

梯度消失
  • 图中是一个sigmoid门
  • 当x=-10时,梯度约为0
  • 当x=0时,梯度为0.25,是0~1之间的值
  • 当x=10时,梯度约为0

当x的值时很大的正数或很小的负数的时候,它们的值位于sigmoid图像的平滑区,这时候梯度消失,神经网络将无法得到梯度反馈

问题2:sigmoid是一个非零中心函数

图片.png
  • 当输入都为正数时会怎么样
图片.png
  • 梯度更新效率非常低

问题3:用到了指数计算,计算代价高

  • 但这不是个大问题

tanh激活函数

tanh
  • 与sigmoid很类似
  • 将数据压缩到[-1,1]到范围
  • 是以0为中心的函数
  • 还是会使得梯度消失

ReLU激活函数

  • ReLU函数方程如下图
  • 如果输入为负数,则输出为0;如果输入为正数,则输出它本身。
  • 在正向区域不会饱和
  • 计算代价也比较低,速度是sigmoid或tanh的6倍
  • 比sigmoid更具有生物学上的符合性
ReLU
  • 不是以0为中心的函数
  • 在负向区域,梯度会消失:
    • 当x=10时,梯度为1,正常
    • 当x=0时,没有梯度,可以取0
    • 当x=-10时,梯度为0
梯度消失
dead ReLU

Leaky ReLU 激活函数

  • 是对ReLU的改进
  • 函数公式如图
  • 没有饱和的情况,即使在负空间
  • 不会失效
Leaky ReLU

PReLU激活函数

  • 也是对ReLU的改进
  • 与Leaky ReLU
    类似,但是引入参数,使系数可变
  • 函数公式如上图

ELU激活函数

  • 函数公式如下图
  • 拥有ReLU的所有优点
  • 它的输出均值接近为0
  • 在负区域相比Leaky ReLU增加了对噪声的健壮性(鲁棒性)
ELU
  • 计算量较大

Maxout “Neuron” 激活函数

  • 可以看到它的形式和其他函数不同
  • 它泛化了ReLU和Leaky ReLU
  • 线性相关,不会饱和,不会失效
Maxout “Neuron”
  • 会把每个神经元的参数量翻倍

经验总结

  • 在实践中,一般最好的经验是使用ReLU
  • 使用ReLU时,注意学习率的调整
  • 可以尝试类ReLU函数,但表现一般
  • 可以尝试 tanh函数,表现也一般
  • 一般不要使用sigmoid
总结

二、数据预处理

  • 对原始数据进行,0中心化处理
  • 对数据进行归一化处理
预处理数据
  • 在图像处理领域一般只做0中心化,不做归一化
更复杂的情况
  • 在机器学习中还会遇到更加复杂的情况,像PCA、白化

经验总结

  • 在实际的图像处理中,值进行0中心化处理
总结
  • 例如 CIFAR-10,图片大小为[32,32,3]:
    • 减去均值(大小为[32,32,3])
    • 减去单通道均值

三、权重初始化

问题1:当初始权重都为0会怎么样?

Q1
  • 答:所有的神经元都会做相同的事,相同的输出,相同的梯度,不能从不同的神经元学的不同的知识

方法1:是给所有权重一个小的随机值

方法1
  • 从标准高斯中抽样
  • 再乘以0.01
  • 在小型网络中运行良好,但是在更深层的网络中就会有问题

一个例子说明存在的问题

  • 这是一个10层的神经网络,每一层500个神经元
  • 使用tanh激活函数
  • 使用小的随机数来初始化权重
例子
  • 下面是激活函数的结果
    • 从图1中可以看出,均值总是在0附近(快速的趋于0)
    • 从图2中可以看出,标准差总是在0附近(快速的趋于0)
    • 从图3可以看出,输出的值全部变成0
激活后的输出
  • 反向传播的情况呢,梯度是什么样的?
    • 梯度是很小的值,趋于0,所以权重得不到更新
  • W×X门的反向传播怎么样呢?
    • 依然是趋于0

方法2:在1的基础上增大权重的值

  • 还是上面的例子
  • 我们从高斯分布取样
  • 乘以1.0而不是0.01
增加权重
  • 所有的神经元都饱和了,因为权重太大,通过激活函数tanh后,激活值分布在平滑区(趋于-1,或趋于1),梯度都为0

方法3:Xavier(一个好的方法)

  • 从高斯分布取样
  • 根据输入的个数来决定相乘的数值大小
  • 当我们有大量的输入,将会得到较小的权重
  • 当我们有少量的输入,将会得到较大的权重
图片.png
  • 当我们使用ReLU激活函数时,它将会使网络崩溃
  • 它会消除一半的神经元,把你得到的方差减半
  • 使得激活后的值趋近于0
ReLU激活
  • 有一个方法来解决上面的问题
  • 因为有一半神经元被消灭,所以除以2,可以保证数量的一致性
解决方法

扩展

如果对初始化感兴趣,可以看看下边的论文


论文

四、批量归一化

  • 在我们想要的高斯范围内保持激活
  • 在训练的时候实现归一化而不是初始化
  • 在某一层实现高斯分布,对每一个维度执行这个公式
批量归一化
  • 如下图,我没有N个训练样本,每个样本是D维的
  • 我们计算每个样本的均值和方差
  • 进行归一化
  • 归一化通常在全连接层或者卷积层之后
  • 在非线性层(激活函数)之前
  • 更多详细的内容请参考论文
  • 问题:对于tanh激活函数来说,我们是否需要一个高斯分布的输入?
  • 答:这可能会导致饱和,但是适度的饱和也是可以的,所以我们可以在归一化之后进行额外的缩放操作来减少饱和。
  • 这个缩放的操作可以恢复恒等映射,相当于没有进行过归一化

总结归一化

  • 输入:小批量输入的值x:求均值;超参数。
  • 输出:归一化,缩放、平移后的值。
  • 具体步骤如图:
    • 计算小批量的均值
    • 计算小批量的方差
    • 进行归一化
    • 进行额外的缩放和平移
总结
  • 归一化的作用:
    • 改善网络的梯度流
    • 允许更高的学习率,拥有更好的健壮性
    • 减少对初始化的依赖
    • 可以看作一种正则化
注意
  • 注意:在测试阶段批量归一化层是不同的:不需要再计算均值和方差,因为在训练阶段已经计算过了。(??)

五、观察学习过程

  1. 数据预处理
预处理
  1. 选择网络结构
选择结构
  1. 初始化我们的网络
  • 检查我们的损失函数是否是应该的样子
  • 这是个很好的完整性测试
  • 首先,不进行正则化,损失是我们预计的值
图片.png
  • 进行正则化,损失变大
图片.png
  1. 开始训练,先从小数据集开始,不进行正则化,看损失是否会减小到0
  2. 开始真正的训练,使用完整的数据集,加一个小的正则化,找到合适学习率,使得损失下降
    • 损失下降缓慢,学习率太低
    • 学习率太大,会导致损失值为nans
  3. 一般学习率设置为 1
    e-3 ~ 1e-5

六、超参数优化

  • 对任何大超参数,执行交叉验证,找到最佳值
交叉验证
  • 首先,选取比较分散的值,使用几个epoch的迭代去学习,这样就可以快速的知道那些超参数的值是好的,得到一个参数区间
  • 然后,在这个参数区间中进一步精确搜索
  • 如果cost的值是使用其他参数值的3倍以上,那么说明这个参数值是不合适的
随机搜索vs.网格搜索
  • 随机搜索效果更好
观察loss
  • 黄色的线,学习率太高了
  • 蓝色的线,收敛太慢,学习率太低了
  • 绿色的线,学习率高,局部最优
  • 红色的线,是最好的,能够快速持续的收敛
初始值没有设好
  • 如上图这样的情况,应该是初始值没有设好
观察准确率
  • 训练精度和验证精度差距太大,意味着过拟合
  • 没有差距,说明没有过拟合,可以增加模型容量,来提高训练速度
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349