cs231n assignment2(1)

   assignment2内容有:利用numpy实现Fully-connected Neural Network(forwardbackpropagation)、BatchNormalizationDropout、利用numpy实现Convolutional Networks的卷积层、池化层的朴素版本以及最后熟悉pytorch


Fully-connected Neural Network

   这一部分与assignment1中一样,实现用于CIFAR-10分类的两层全连接神经网络;不过不同点在于,实现方式更为模块化,便于更为方便的组装不同规模的神经网络。

Affine layer

   Affine layerforward pass
而其backward pass
这就是Affine layer的前向和反向过程,而在实现过程中,由与图片的格式是3 x 32 x 32,因此在forward pass过程需要对展开成向量的形式;而在backward过程中,要将向量reshape3 x 32 x 32

ReLU layer

   ReLU layerforward pass:
ReLU layer的作用是激活函数,实现非线性的映射。而其backward pass

loss function

   和assignment1的线性分类器类似,对于每张输入图片经过神经网络后,最后得到一个10维向量代表属于每一类的得分。而神经网络的训练也与线性分类器的类似,定义优化的目标loss function,然后运用梯度下降法来迭代更新网络的参数。


Update rules

   这一部分,主要是完成一些用于训练模型的优化方法:SGD + momentumRMSPropAdam

SGD + momentum

   和SGD相比,SGD+momemtum每次迭代不仅仅是通过梯度来更新参数,引入了类似物理中速度(velocity)的概念来更新参数。其具体更新过程:
是一个hyperparameter,通常会设为0.99;而 会初始化为0。和SGD相比,SGD + momentum的更新速度会更快,并且不容易陷入到鞍面中。关于momentum还有一种改进方法是Nesterov Momentum

RMSProp and Adam

   上述的优化方法,对于learning_rate每次迭代都几乎是一个固定的值,即便可以利用一些退火方法来随着迭代过程降低learning_rate;可是learning_rate还是一个hyperparameter,需要作为调参进行考虑。而RMSProp and Adam是一种自适应learning_rate优化方法,虽然仍然需要调整一些超参数,但是和原本仅调整learning_rate相比,难度没有那么大。
Adagrad的更新过程:

RMSProp的更新过程:

Adam的更新过程:
Adam有点像RMSProp+momemtum,是当前训练网络时,会首选的一种优化方法。


Batch Normalization

Batch Normalization

   对于机器学习方法来说,如果输入数据是由不相关的特征、其数学特征是均值为0,方差为1;这样的话模型会较为容易训练。对于神经网络来说,随着模型深度增加,隐藏层的值会变得不相关并其均值也不再为0、方差也不为1。并且随着网络训练过程,各隐藏层的特征分布也会发生偏移。这两者都会导致模型训练变得更为困难。
   batch normalization是一种让模型更容易训练的方法。在训练过程中,通过每次对隐藏层输出的每个特征进行归一化操作,以此来克服隐藏层特征分布的偏移。
   batch normalization的具体公式如下:
\begin{aligned} u & = {1 \over m} \sum _{i=1} ^{m} {x_i} \\ \sigma & = {1 \over m} \sum _{i=1} ^{m} {x_i - u} \\ \bar{x} & = { {x - u} \over {\sqrt[2]{\sigma + eps } } } \\ y &= \gamma x + \beta \end{aligned} 简单来说,就是计算输入样本数据各个维度的均值与方差,然后对数据各个维度进行归一化,最后进行一个线性变换。batch normalization的反向推导公式不难,这里不作详细解释。
   需要注意的是,batch normalization在测试过程中,使用的均值与方差是在训练过程中记录下来的,即:
每一次迭代时,都会记录当前batch的均值与方差,然后通过上述公式记录起来,做为测试过程中进行batch normalization的均值与方差。
   batch normalization也比较依赖所选用的batch_size的大小,若所包含的batch_size过小,容易给模型带来较严重的偏差。

Layer Normalization

   当batch_size过小时,layer normalization是替代的方法之一;batch normalization是对数据的每个维度进行归一化,而layer normalization是用每条数据自身的均值与方差,针对每条数据本身进行归一化。过程与上述batch normalization类似,并且无需记录训练过程中所用到的均值与方差。


Dropout

   dropout是一种降低模型过拟合的一种方法,在训练过程中,会随机丢弃一些网络的连接(令对应的隐藏层输出值为0),来减少模型过拟合的现象。关于dropout的原理,有种解释是,这与模型集成类似,随机丢弃一些网络的连接,这使得在训练时是训练了很多子网络结构,然后后续测试过程中,使用的是整个网络,就像把之前的训练的子网络集成起来。
   在实现上,只需生成一个和隐藏层结果同样大小的mask矩阵mask的内容是根据概率所得到的0-1值,然后将mask与隐藏层结果进行元素乘,这样就是dropout的大概实现。


小结

   assignment2的第一部分,主要是关注于如何模块化实现全连接神经网络,通过对搭建网络时,所需要的一些affine LayerReLU Layer模块化实现,继而再后续搭建网络时,可以更为方便地实现网络;其次就是介绍一些优化方法batch normalization,来更为简单容易地训练网络;最后就是介绍了dropout,一种类似模型集成的方法,从而降低模型过拟合现象。

你可能感兴趣的:(cs231n assignment2(1))