深度学习笔记(二):训练神经网络

2018-04-22  本文已影响0人  Android笨鸟之旅
image

Part 1

一.Activation Function激活函数

image

当激活函数是线性的时候,两层的神经网络就可以逼近所有的函数了。激活函数的作用就是给network加入非线性因素,因为线性模型尽管组合还是一个线性模型,对于数据的表达和分类效果不强。详情

常用的激活函数:

image

1.sigmoid函数存在三个问题:
1)当数据正太大和负太小时会陷入饱和,也就是梯度为0,这时候back propagation的时候数据为0,kill了这个gradients
2)sigmoid输出不是以0为中心的。这会导致数据进入神经元的时候是正的,那么w计算出的梯度也会始终都是正的。而我们通常使用这种zigzag path去逼近最佳向量。

image
3)exp计算比较非时间

2.tanh函数:比sigmoid好的地方是他是零均值的。

3.LeRU函数是今年受欢迎的一种函数,存在几个优点:
1)在正区域不会饱和
2)计算更方便
3)收敛起来比sigmoid/tanh更快

但是缺点是在负区域还是会饱和,并且很容易就die了。举个例子,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了。实际操作中,learning rate较大时神经元容易die,较小时发生的较少。

image

4.Leaky-ReLU,P-ReLU,R-ReLU
这些都是ReLU的变体,为了解决dying ReLU的问题。最终效果众说纷纭。

5.Maxout:ReLU和Leaky-ReLU的泛化形式,不会饱和也不会die。缺点是参数被double了。

如何选择激活函数?

二.数据预处理

常见的数据预处理方式有zero-centered(减去平均值)和normalized(归一化),也有进行PCA和whitening的。但是对于image来说,一般采取两种:

数据预处理可以很好的减低分类损失对于weight matrix的敏感度。比如下面,左边直线稍微摆动影响要比右边大很多。在深度学习中,也要保证第一层均值不为0,方差不为0


image

三.权值初始化

常见的权值初始化方式:随机小数。随机小数又有好几种设置:

通常我们会使用Xavier initialization。

W = np.random.randn(fan_in, fan_out) / np.sqrt(fan_in)

四.Batch Normalization

归一化操作通常在FC或conv层之后进行,在nonlinearity之前进行。

image

进行批量归一化的步骤是:

五.调控学习过程

学习过程:

六.Hyperparameter Optimization

当我们在进行参数调优时,Random Layout有时会比Grid Layout更有效,因为这样能增加达到较优值的可能性。


image

七.Fancier optimization

1.带冲量的SGD
前面我们使用了SGD来求得目标函数的最小值,但是SGD存在着一些问题:

为了解决这个问题,提出了一种更有效的方法,就是在SGD的基础上加上一个冲量。

image

这里的rho是摩擦系数,通常取0.95或0.9。通过这种操作,在最小点和鞍点的时候,就算梯度为0,冲量也不为0,可以冲过最小点和鞍点。

还有更好的是Nesterov Momentum:

image

2.RMSProp
RMSProp是AdaGrad的变体,解决了AdaGrad对于局部最小值学习率逐渐下降直到为0的问题。

image

3.Adam算法:Adam是上面几种算法的集合。


image

4.learning rate decay
先不用decay,然后看看学习率,再加上学习率decay,观看效果

八.Regularition

正则是提高算法性能的方法。常见的有L2,L1和Elastic net.

image

但是这个正则法在大型神经网络中不能实现。大型网络中通常使用的是Dropout。

Dropout是在一个网络层(通常选择FC层)中随机的选择部分节点,将他们的激活函数设置为0。

image

这样的好处有两点:

但是Dropout在测试的时候就不是特别的好,因为需要减少这种随机性,否则会对测试结果造成不必要的改变。这样就需要一些处理。

先对简单的加以判断,对于一个简单的x+y--> a的网络,测试时我们就只想得到w1x+w2y的均值,但是在训练时由于Dropout选择不同,均值就只有1/2(w1x+w2y)。所以我们就想到能不能再测试的时候乘以,或者训练的时候除以dropout概率。当然更倾向于训练的时候除以概率,因为训练可以在高配置机器上长时间运行。

九.Transfer Learning迁移学习

迁移学习其实就是当我们遇到的问题和数据跟原有的一些问题和数据有联系的时候应该怎么利用好原来的数据。比如,当我们想要处理一些自己的动植物的图片,只要使用好ImageNet预训练的模型,在最上面加个线性分类器就行了。


image

cs231n assignment实现在这:https://github.com/oubindo/cs231n-cnn

上一篇 下一篇

猜你喜欢

热点阅读