Lec-9 Tips for training DNN - Machine learning (台大李宏毅)

本文为台大李宏毅的机器学习入门课程笔记。

第 9 章: DNN小贴士

重点:

  • 介绍Keras
  • forward pass
  • backward pass

步骤

在做完三步走的时候,还要再试试看这个学习出来的NN在training set上的正确率。

这一步很unique,因为在一般的机器学习算法,比如KNN, decision tree等问题,就完全不用再回头试试看training set,因为这些算法一般可以看作是为training set 量身打造了一个模型,所以在这个training set上naturally地会有最好的效果。然而在NN上,其实不容易overfitting,很可能在training set上就已经效果不好了,那这个时候就要再改模型。

只有当在training set上效果很好,但testing set上效果不好的时候,才是overfitting。

很多事情就不要都怪overfitting。有的时候只是结构不好、或者只是找到了local minimize。所以在这个时候先看看训练出来的模型在training set上的效果怎么样,然后再来决定是不是overfitting,要不要调整结构。

对症下药

很多人常常一看到performance不好就觉得是overfitting,或者不知道该调整什么。

看看下面的图,进行对症下药吧~

当训练出一个模型之后,先用这个模型到training set上。如果在training data上的效果就不好的话,说明这个模型不太适合,就可以考虑调整结构(增加/减少层/神经元个数等)、更换激活函数等;如果在training set上效果很好,那么再去试试看testing set。如果在testing set上效果也很好,那就恭喜你,完成训练~如果效果不好,那么久考虑用dropout、regularization等方法来排除overfittign所带来的问题。

激活函数

sigmoid

当把layer叠得很深的时候,就会发现sigmoid作为激活函数的时候,会有梯度消失

因为sigmoid function会把正负无穷大的数映射到0-1之间。所以随着sigmoid的次数增加,就会把最前面的影响减小到几乎为零,就几乎变成随机改变了。

ReLU

为了解决这个问题,大家开始用ReLU作为激活函数

原因:

  • 好计算,当然了咯一目了然 :p
  • 有生物上的原因,不明
  • 它其实等于无限次叠加sigmoid的结果
  • 它能解决梯度消失这个问题

为什么它能解决梯度消失这个问题呢?

因为它没有映射的问题,所以就不会把梯度减少乃至消失。而且,当输入为负的时候,输出直接映射成0,所以可以看作直接没有这个neuron,NN的结构被简化成像是linear了。

ReLU变体

Maxout

所以可以看到,maxout 可以塑造出不同的activate function

但是怎么train它呢?

我们可以看到,因为maxout只选取最大的那个来train,所以那些颜色浅的地方不就train不到了嘛?

但是实际上,这个问题并不存在。因为每当输入不同的时候,每个z都有可能会被train到,所以不用担心~

How to set learning rate?

回顾之前,我们能够动态地调整learning rate,就是Adagrad,每个参数有自己独特的一个learning rate

当梯度较大时,证明这里比较陡峭,所以给它比较小的learning rate;当梯度小时,就证明这里比较平坦,所以就给它大一点的learning rate。这么做的目的,是希望各个参数的进步程度都一样,所以如果那个参数的进步比较快,那我们就让它走慢一点;如果那个参数走很慢,那我们就让它一个步伐迈大一点。