cs231n_lecture_6_怎样训练神经网络-PART 1

之前我们学习了怎样用计算图表示一个函数;神经网络——score functionloss functionCNN——用convolutional layer表达空间结构,conv layeractivation maps来自不同filter的卷积;通过最优化的方法得到参数值;更新的时候我们用的方法是mini-batch SGD.其方法是我们先=随机得到一组weights,在训练集上随机采样得到一批数据,在computational graphforward prop计算loss,然后back prop计算梯度,更新我们的weights,直到我们的loss小于误差。


这节课我们将学习训练NN的一些细节。

包括哪些东西呢?

1.one time setup

激活函数的选取;预处理;权重初始化;正则化;梯度检查

2.training dynamics

检查调整学习过程;参数更新;超参数的最优化

3.评估模型效果


Activation functions

常见的激活函数:

这些函数是不是用哪个都可以呢?他们之间有什么区别呢?可不可以对这些函数进行修改呢?下面我们一一探讨。

首先我们看到近些年常用的激活函数都是非线性的,这一点符合神经细胞输出复杂的特性。

sigmoid函数

1.sigmoid将所有输入x压缩到[0,1]之间,如果x正的比较大,输出为1x负的比较大,输出接近0;如果x0附近,输出类似于一个线性函数。

2.sigmoid曾经十分流行,你可以把它看成是一个有饱和的激活率的神经元。

缺点:
1.容易kill gradient

比如,当x=-10时,梯度=0,反向传播时参数就没有更新,x=10时类似。只有当x0附近时,能得到一个合适的梯度。

2。输出不是以0为中心的

f(WiXi + b)

x都是正数或负数的时候,lossw的导数(DL/DF * DF/DW)就全为正或负,这样当你在更新W的时候,所有Wi都朝着同一个方向更新,要么都增加要么都减少。

这是一种非常低效的更新方式,下图中蓝色是最优的W的向量,要找到这个W,我们要经过很多迭代才能到达。


这也引出了一个问题——我们总是希望zero-mean data

3.exp()  计算上较复杂。


tanh(x)

输出范围是[-1,1],是zero-center了。但是仍然存在killgradient的问题。


ReLU ——Rectified Linear Unit,2012年首次被使用

这是我们在之前的CNN中使用的函数。

1.在+ region没有饱和的问题了

2.计算也快,max(0,x)

3.在实际中比sigmoid和tanh收敛更快,大概快6倍

4.输出更接近生物学上的神经元than sigmoid

缺点:
1.不是zero-center的

2.当x<0时,仍然会饱和,kill gradient

存在dead ReLU的情况:
 

当你的learning rate很高的时候,一开始的时候ReLU还是OK的,但是由于你的更新步长很大,weights会跳的很高,back prop的数据流就被阻塞了。

在训练的时候,就会出现这种情况:一开始模型更新好好的,从某个点开始,开始变坏直至死掉。这时候你停下来测试一下你的神经网络,给一批输入数据,你会发现有大约10%-20% 的结点死掉了。

这是一个问题,但并没有完全阻碍ReLuctant训练网络。

什么时候导致dead ReLu
当输入数据使得weights下降的时候会出现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值