【cs231n】lecture 6 Training Neural Networks(上)

本文详细介绍了神经网络的训练过程,包括激活函数的选择、数据预处理、权重初始化、批量归一化和超参数优化。重点讨论了Sigmoid、ReLU、Leaky ReLU、PReLU和ELU等激活函数的优缺点,并强调了ReLU在实际应用中的优势。此外,还讲解了数据预处理的重要性,如zero-centered和normalized数据,以及权重初始化中的Xavier方法。批量归一化作为提高模型稳定性和加速训练的有效手段,也在文中进行了阐述。
摘要由CSDN通过智能技术生成


Mini-batch SGD(最小批量随机梯度下降)的整个过程:

  • 对数据进行连续的批量抽样
  • 通过计算图或神经网络将数据进行正向传播,最终得到损失值
  • 通过整个网络反向传播计算梯度
  • 使用梯度来更新网络中的参数或者权重

Activation Functions(激活函数)

在这里插入图片描述
输入数据,在全连接层或者卷积层将输入乘以一个权重值,然后将结果输入一个激活函数或者非线性单元。

Sigmoid

在这里插入图片描述
从这个函数,我们可以知道:

  • 对于输入,每个输出都被压缩到[0,1]范围内
  • Sigmoid在某种意义上可以被看作是一种饱和的“firing rate”(只要范围在[0,1]之间的都可以叫做“firing rate”)

Problems:

  • 饱和神经元将使梯度消失:
    在这里插入图片描述
    从图像可以看出,当x的绝对值很大或者很小的时候,图像位于平滑区,梯度接近于0。
  • Sigmoid函数是一个非零中心的函数:
    在这里插入图片描述
    由于d(f)/d(w) = x,当输入x均为正时,对w的梯度就为正,当输入x均为负时,对w的梯度就为负,他们总是朝着同一个方向移动,当我们在做参数更新时,可以选择用同一个正数(负数)或者不同的正数(负数)去增加(减小)所有的w值,但是这种方法对于梯度更新来说是十分低效的。
    例如上图右边的部分:假设w是二维的,那么只能沿着两个方向更新,要么正向增加,要么负向减少,如果最优的w是蓝色的方向,那么我们只能在允许的两个方向做梯度更新,即图中沿红色箭头的方向,这就是我们一般使用输入x的均值为0的数据的原因,这样我们就能得到正的和负的数值,而不至于使梯度更新只沿着一个方向移动。
  • 使用了指数函数的计算代价会比较高

tanh

在这里插入图片描述
从tanh激活函数我们可以知道:

  • tanh的取值范围是[-1,1]
  • 以0为中心的(zero centered)
  • tanh在饱和的时候仍然会出现梯度消失的问题

ReLU

在这里插入图片描述
从ReLU激活函数我们可以知道:

  • 该函数在正方向上不会达到饱和,所以我们在输入空间的一半都不会存在饱和现象
  • 计算成本不高,计算高效,只有简单的max函数
  • 一般情况下使用ReLU比较多,它比sigmoid/tanh函数都收敛得更快,大约快6倍
  • 比sigmoid函数更具备生物学上的合理性

ReLU存在的问题:

  • Not zero-centered,sigmoid和ReLU都存在这个问题,tanh不存在这个问题
  • 在x>0的区域中,梯度正常;x<0的区域中,梯度消失;x=0的时候,梯度不确定,在实际中,一般取0

Leaky ReLU

在这里插入图片描述
从Leaky ReLU我们可以发现:

  • 这个函数没有饱和的概念
  • 没有涉及到exp的计算,计算高效
  • 比sigmoid/tanh函数收敛快,大约是其6倍
  • 没有"die"的问题

PReLU

这个激活函数和Leaky ReLU很相似,不同之处在于其负区间的梯度是由 α \alpha α参数确定的,所以我们不需要指定它,不用硬编码它,而是把它当作一个可以反向传播和学习的参数,相比之前的激活函数更加灵活。

ELU

在这里插入图片描述
我们可以发现ELU:

  • 具有所有ReLU的优点
  • 输出接近于0均值
  • 相对于Leaky ReLU,ELU在负区间没有倾斜,这实际上是一个负饱和的机制,这样使模型对噪声具有更强的鲁棒性
  • 使用到exp的计算,计算更加复杂

Maxout “Neuron”

在这里插入图片描述
从Maxout "Neuron"我们可以发现:

  • 没有先做点积运算,而是把元素级的非线性特征提前
  • 泛化了ReLU和Leaky ReLu,因为这个激活函数只是提取了这两个线性函数的最大值

存在的问题:
会把每个神经元的参数数量翻倍,若每个神经元原来有权重集W,但是现在有了 W 1 W_1 W1 W 2 W_2 W2,相当于原来的两倍。

一般我们在考虑激活函数时,最好的经验法则是使用ReLU,然后调整学习率,也可以尝试着使用Leaky ReLU、Maxout、ELU三种激活函数,这些激活函数可以用于实验,但是实用性比较弱,也可以尝试着使用tanh,但是不是经常使用,一般不会使用sigmoid函数,这是最原始的激活函数之一。

Data Preprocessing(数据预处理)

在这里插入图片描述
一般数据预处理的过程主要有:zero-centered data和normalized data,也可能会用到PCA和Whitening。
在这里插入图片描述
数据预处理一般是只做zero-centered,主要有两种思路:(1)减去所有训练集图像的均值。(2)减去训练集图像的单通道均值,如RGB图像,有三个通道,每个通道有一个均值,我们用输入图片的三个通道分别减去对应通道的均值。

Weight Initialization(权重初始化)

问题1:如果我们把所有的参数都设置为0
所有的神经元都在你的输入数据上做相同的事情,然后输出相同的数值,并且得到相同的梯度,然后用相同的方式更新,最后得到完全相同的神经元。当我们用相同的值去初始化所有的参数时,就会出现这样的问题。
解决措施1:将所有权重设为一个小的随机数,可以从一个概率分布中抽样。这种方法在比较小的网络中适用,但是在比较深的网络中不适用。
在这里插入图片描述
如果增大W的值,使用tanh激活函数的话,参考tanh的图像,终会达到饱和,不管是正方向还是负方向,梯度都会变为0,使权值得不到更新。

因此,权值的初始化是一个比较复杂的问题,初始值太小,网络容易崩溃,初始值太大,网络容易达到饱和。经过研究发现,一个很好的初始化经验是Xavier初始化:思想是我们需要从高斯分布中抽样,然后根据根据我们拥有的输入量,来进行缩放。

具体操作是:要求输入的方差等于输出的方差,推到出权重应该是多少。直觉上来说,如果输入量较小,我们需要较大的权重,反之,如果输入量较大,我们需要较小的权重

Batch Normalization(批量归一化)

对输入数据做了归一化处理,就是将每个特征在所有样本上的值转归一化成均值0方差1。这样我们保证训练数据里数值都同样量级上,从而使得训练的时候数值更加稳定。假设训练样本总数为N,每个训练样本有D维,那么首先,单独地计算每个维度的均值和方差;然后利用公式进行归一化。
在这里插入图片描述
一般来说,Batch Normalization是插入在全连接层或者卷积层之后,而在非线性层(激活函数)之前的。
在这里插入图片描述
完成归一化之后,我们可以对归一化后的结果进行一定程度的缩放,先使用 γ \gamma γ进行缩放,再用 β \beta β进行平移。若 γ \gamma γ,为方差, β \beta β,为均值。这样就可以恢复恒等映射,就像没有进行归一化一样,这个过程其实就是归一化公式的变形。
在这里插入图片描述
总结批量归一化的思想:
我们计算输入的mini-batch的均值和方差,通过均值和方差进行归一化,然后还有额外的缩放和平移因子,从而改进了整个网络的梯度流,具有更高的鲁棒性,可以使网络在更广泛的学习率和不同的初始值下工作,使用了归一化之后训练更加容易。另一个角度来看,归一化也是正则化的一种方法。

Babysitting the Learning Process(训练过程监控)

学习率(learning rate):即步长stride,是反向传播中的η:
在这里插入图片描述
学习率大小:

学习率大学习率小
学习速度
使用时间点刚开始训练时一定轮数过后
副作用1.易损失值爆炸;2.易振荡。1.易过拟合;2.收敛速度慢。

Hyperparameter Optimization(超参数优化)

超参数优化,我们一般采用的策略是:交叉验证(cross-validation)
是一种统计学上将数据样本切割成较小子集的实用方法。于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证。 一开始的子集被称为训练集。而其它的子集则被称为验证集或测试集。交叉验证是一种评估统计分析、机器学习算法对独立于训练数据的数据集的泛化能力。
交叉验证一般要满足:

  1. 训练集的比例要足够多,一般大于一半
  2. 训练集和测试集要均匀抽样
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值