欢迎光临散文网 会员登陆 & 注册

cs231n第4节课笔记

2023-09-08 09:50 作者:请原谅我o  | 我要投稿


2016版第5节视频

激活函数

先介绍了几种激活函数,sigmoid不管输入是多少,都会激活为正数(副作用?)

tanh解决了sigmoid的问题,拥有正负数,但是饱和的时候梯度很小

ReLU解决了tanh的问题,梯度很大,但是左侧没有梯度(彻底饱和),(所以W的初始化要比0大一点点,像0.01左右的随机数)

Leaky ReLU解决了ReLU的问题,左侧有梯度

ELU解决了Leaky的问题,输出均值为0(Leaky呢?)

还有种非主流激活方式:maxout,有ReLU和Leaky ReLU的作用,但是要双倍的参数量(很像水平细胞?)

数据预处理

减去均值图像 [32,32,3]  (如Alex Net)

或减去3通道均值 [3,]   (如VGGNet)

权重初始化

W都=0,不好,一个隐藏层的所有神经元都会学到一样的参数

W都=0.01左右的随机值,网络层数少可以,网络层数多,网络深层输出分布会接近0,即W的更新梯度会趋近于0,网络会更新不了

W都=1左右的随机值,网络层数多,网络深层输出分布会趋近于-1和1,因为tanh会处于饱和状态,W的梯度会趋近于0,网络几乎更新不了

W=Xavier更新方法,除以输入的根号值,网络层数多,网络深层输出分布会维持在高斯正态分布,所以梯度很健康,网络可以继续更新,如果加了ReLU,那就再除以根号2,如果是tanh,那就不知道怎么样再搞一搞。

BN(Batch Normalization),在FC层/Conv层后,激活函数层前加入,使即使在网络深层输出也依然塑造成高斯正态分布。要是tanh不喜欢单位高斯正态分布咋办?那就加入2个参数调整BN的“w和b”,让网络自己具有“改变BN幅度或取消BN”的能力。有了BN,网络对权重初始化的高度依赖就大大减弱了,基本上普通的W=0.01左右的随机值可以胜任训练。

照看网络宝宝的学习过程

sanity check:不带reg(reg=0)地前向传播一次,看看loss(softmax):和预期相同

sanity check:带小reg(=1e3)地前向传播一次,看看loss:和预期相同,稍微大了一点

在20个训练集样本上训练,看看能不能过拟合:loss很小,accuracy=100%,过拟合成功,网络没问题

lr(学习率)=1e-6试试看:loss几乎没动(训练集精度在上升),看来需要让学习率增大一点

lr(learning rate)=1e6试试看:loss得到了溢出NaN,意味着学习率太大了

lr=3e-3试试看:loss得到了inf,学习率还是太大了

超参数优化

在log范围搜索(epoch=5)

reg = 10 ** uniform(-5, 5)

lr = 10 ** uniform(-3, -6)

不要网格搜索,要随机数搜索(因为一个超参可能比另一个超参重要得多)


cs231n第4节课笔记的评论 (共 条)

分享到微博请遵守国家法律