Chapter 6 Deep Feedforward Networks
首先,介绍了Deep feedforward networks
的概念:之所以称为networks
,是因为它们是通过把不同的函数组合起来的形式表达的(typically represented by composing together many different functions);feedforward
是因为 no feedback connections in which outputs of the model are fed back into itself()。
然后,介绍了output layer
与hidden layer
。training examples 决定了的output layer
的行为:输出要接近目标值y
。但是它并没有定义hidden layer
的行为,不过 learning algorithm 则必须决定如何使用这些hidden layer
来完成对函数的逼近。
接着,引入了非线性函数的概念(不是activation function
,是指最终学出来的那个函数),指出得到非线性函数的方法有3种:
使用一个比较 generic 的函数,比如
RBF kernel
,但最终在 test dataset 上的效果非常不好(generalization to the test set often remains poor)。使用 domain knowledge 人工指定,但是太费时费力。
算法自己学习,这种方法既可以保证第一种方法的 generic 的性质,又能保证第二种 domain knowledge 的优点(人为的设置一些biased)。
最后,介绍了本章的主要内容。
6.1 Example: Learning XOR
首先,举
XOR
的例子说明了使用传统的linear model
不能完成这个任务,引出可以使用neural networks
完成这项任务。因为层与层之间需要做非线性的变换,否则还是linear model
,这就引出了activation function
。所以
activation function
的作用就是:为neural networks
引入非线性元素。接着,指出上面的学习例子比较简单,现实中的任务比较复杂,模型参数的数量非常多,需要一个有效的算法来学习,从而引出了下节内容。
6.2 Gradient-Based Learning
neural networks
与linear model
的最大区别是:由于activation function
的原因,会使得大多数的cost function
变成非凸的。通常使用Gradient Descent
的方法,进行最优化求解。对于
feedforward networks
,parameters
的初始化很重要,通常把所有的weights
都初始化为 small random values,把biase
初始化为 0 或 small positive values。为了应用
gradient descent
,必须要定义一个cost function
,而cost function
的具体使用和形式又和output units
相关,所以分 2 小节进行讲解。
6.2.1 Cost Functions
大多数时候
cost function
使用cross-entropy
。(有个问题不明白:回归问题大多数使用MSE
?)通常时候会加上一个
regularization term
(通常是weight decay
,直接作用在cost function
上)。
6.2.1.1 Learning Conditional Distributions with Maximum Likelihood
Most modern neural networks are trained using maximum likelihood. This means that the cost function is simply the negative log-likelihood, equivalently described as the cross-entropy between the training data and the model distribution.
虽然
cost function
大多是cross-entropy
,但它的具体形式也会随着具体模型的变化而变化。通常使用
maximum likelihood estimation
的方法定义object function
;使用gradient descent
的方法求解使得object function
取得最小值的parameters
;使用BP
的方法更新parameters
相对于
MSE
,使用log-likelihood
的优点有 2 个:把
cost function
中的乘法操作变成加法操作。把
e^x
重新转化为x
。
上面两点有效的可以避免
cost function
在 extreme large 或 extreme negative 的时候梯度消失。
6.2.1.2 Learning Conditional Statistics
没看懂 -_-
大概意思是使用
MSE
可能会使得训练速度很慢(梯度消失),这是cross-entropy
之所以很流行的原因。可以看这个博客,写的很好。
6.2.2 Output Units
这里主要是说cost function
的选取与的output units
选取有很大的关系,output units
的不同,也会导致cost function
具体形式的不同,即使是同一种cost function
。
然后,讲了 4 中不同形式的output units
,本小节的主要内容就是对这几种不同形式的output units
做介绍。
6.2.2.1 Linear Units for Gaussian Output Distributions
- 是说最后的
output layer
如果没有使用任何activation function
的时候,linear units 不会 saturates,所以cost function
可以使用MSE
?但是如果隐藏层使用了sigmoid
,当sigmoid
saturates 的时候,cost function
不也是会 saturates 吗?
6.2.2.2 Sigmoid Units for Bernoulli Output Distributions
对于二元分类问题,就可以把这个看成是一个 Bernoulli 试验,如果在最后的
output layer
使用了sigmoid
,记输出正确的概率是p
,那么错误的概率就是1-p
。sigmoid
会在输入 very negative 的时候 saturates to 0,在输入 very positive 的时候 saturates to 1 。如果使用MSE
,当sigmoid
saturates 的时候,MSE
也会 saturates。如果最后一层的
output layer
使用了sigmoid
,最好使用maximum likelihood
的方法进行最优化求解。也就是说使用概率的方式(log-likelihood
形式的cost function
) –> 也就是说不使用MSE
。
6.2.2.3 Softmax Units for Multinoulli Output Distributions
对于多元分类问题,就可以把这个看成是一个 Multinoulli 试验,这样就可以在最后的
output layer
使用softmax
,直接得到各个分类的概率。softmax functions can be used inside the model itself, if we wish the model to choose between one of n different options for some internal variable. 比如
Attention model
中的权重。softmax
可以看成是上面的一种 generalization(一般化),因为sigmoid
可以看成是一种二项分布(p(y)=a
,p(1-y)=1-a
),softmax
可以看成是一种多项式分布(经softmax
操作后,输出的和为1
)。另外,这里更加清楚的解释了为什么要使用
log-likelihood
形式的cost function
:因为softmax
中含有e^x
,当 x 极小的时候,也会出现梯度消失的现象。而使用log-likelihood
形式的cost function
就可以很好的避免这种现象的发生。
6.2.2.4 Other Output Types
没看这一小节
6.3 Hidden Units
这里主要讲了各个activation function
的定义、变种形式以及优缺点。
activation function
都是以element-wise
的形式作用于output
。It is usually impossible to predict in advance which will work best。
6.3.1 Rectified Linear Units and Their Generalizations
有的
activation function
可能不是处处可微,比如ReLU
在 0 处就不可微。此时通常返回它左、右(偏)导数的其中一个(如果是 0 的话,通常不会返回0,而是返回一个接近 0 的数)。ReLU
也有缺点: they cannot learn via gradientbased methods on examples for which their activation is zero。ReLU
有几种比较重要的变种形式,可以看书中的内容。Maxout
也是ReLU
的一个变种形式,书中介绍了它的优点,可以参考书中的内容,也可以看这里的笔记:Maxout Networks & Network in Network
6.3.2 Logistic Sigmoid and Hyperbolic Tangent
Their use as output units is compatible with the use of gradient-based learning when an appropriate cost function can undo the saturation of the sigmoid in the output layer.
sigmoid
和tanh
有着很强的联系:tanh(z) = 2sigmoid(2z) - 1,但tanh
有着比sigmoid
更好的特性(tanh(0) = 0),所以在必须要使用sigmoid
的时候,最好使用tanh
代替。sigmoid
在很多的时候还是很有用的,比如RNN/LSTM
中的gate unit
、probabilistic models
以及autoencoders
(Recurrent networks, many probabilistic models, and some autoencoders have additional requirements that rule out the use of piecewise linear activation functions and make sigmoidal units more appealing despite the drawbacks of saturation.)。
6.3.3 Other Hidden Units
这节主要介绍了一些其它的activation function
,这些activation function
和前面的效果都差不多,在某些特定的情况下可能取得更好的效果。
可以通过把一个使用
activation function
的 layer 分成 2 个 layer:一个 layer 不使用任何activation function
(相当于使用 identity function as the activation function) + 一个 layer 使用activation function
。这样做的好处是可以减少parameters
(具体可见195页)。softmax function
通常作为 output units,但有时也可以作为hidden units
,比如Attention model
中的权重。(These kinds of hidden units are usually only used in more advanced architectures that explicitly learn to manipulate memory, described in section 10.12.)。
6.4 Architecture Design
这里讨论了Neural Networks
的 Architecture 问题,主要是depth
和width
的设计问题。
书中多次强调要使用深层的网络,然后使用regularization
减轻overfitting
(CS231n
课程中也有强调这一点)。
6.4.1 Universal Approximation Properties and Depth
任何
Borel measurable
的函数都可以通过Neural Networks
表示出来(必须含有non-linear
的activation function
)。虽然只有 1 个
hidden layer
的Neural Networks
就足够用来拟合所有的函数,但是每个hidden layer
可能需要设定非常多的hidden units
(exponential number of hidden units),最终可能无法学习到合适的parameters
来表达这个函数,generalization 也不会好(对浅层的Neural Networks
也是这个道理)。从上图可以看出,
所以,通常还是使用多层的
Neural Networks
(更少hidden units
与parameters
、更好的学习和 generalization 能力)(Empirically, greater depth does seem to result in better generalization for a wide variety of tasks)。网络越深,表达能力就越强。如果用浅层的网络,为了达到同等好的效果,则需要增加每层网络的
hidden units
个数,但此时会增加overfitting
的概率(202页的图对比了 depth 和 width 对网络的影响,就是下图)。上图主要讲的内容可以概括为下面几点(具体可以参看 202 页):
只增加网络每层的 parameters 数量,而不增加网络的 depth,效果并不会有很好的提升,并且此时更容易过拟合。
层数越深,可以学习到的 features 越细,feature 的 representation 也就越 simple。
层数浅的时候,为了提升效果可能采取增加的方式,但这样容易过拟合。加深层数可以在一定程度上减轻过拟合,但也会产生过拟合(太多,training dataset过小,训练周期太长等)
总结:使用层数深的网络,然后使用正则化等方法,减轻过拟合。
6.4.2 Other Architectural Considerations
- 强调了应该根据具体的任务选择不同的
NN Architecture
,比如CV
就使用CNN
,Time Series
就使用RNN
。同时,还需要考虑内部细节(是否使用skip connections
),具体的结构(比如CNN
又有FCN
、Deconvolution CNN
与ResNet
等)。
6.5 Back-Propagation and Other Differentiation Algorithms
主要介绍
BP
算法,算法实现时的computation graph
、chain rules
等。推荐参考这些博客:
6.6 Historical Notes
主要介绍feedforward networks
的发展历史。
大家也都知道Neural Networks
在很早之前就提出来了,但是一直没有发展起来(主要是因为硬件的计算能力不够,大家也都知道的),最近又火起来的原因主要是因为计算能力的提高(GPU
的使用)。
那么现在Neural Networks
的与之前的Neural Networks
有什么区别呢?答案是:core ideas 并没有太大的区别,还是使用的Backpropagation
和Gradient Descent
的方法进行学习和优化。
但是还是有着一些 improvements 的:
更大的数据集。这使得 statistical generalization 变得容易。
正是由于计算能力的提高,使得
Neural Networks
可以变得 larger 与 deeper。一些 algorithmic changes 也提高了
Neural Networks
的 performance:用
cross-entropy family of loss functions
代替MSE
。用
ReLU
代替sigmoid
。其实
ReLU
也在很早之前就提出了,一是因为它在 0 处是不可微的,ReLU
被很多人否定;二是由于当时的Neural Networks
比较小,sigmoid
在小型Neural Networks
上的效果又比ReLU
好,所以ReLU
就被sigmoid
代替了。现在又开始使用
ReLU
是因为随着Neural Networks
的变大,sigmoid
出现了梯度消失的问题,使得学习速度变慢;同时overfit
的问题也出现了,而ReLU
可以很好的解决这两个问题。其它的一些改进,比如网络结构的改变:
RCNN
、FCNN
以及ResNet
等(书中没有提及这个)。