#DeepLearningBook#Chapter 6 Deep Feedforward Networks [1]

Content

6.1 Example: XOR
6.2 Gradient-Based Learning
  6.2.1 Cost Function
   6.2.1.1 Learning Conditional Distributions with Maximum Likelihood
   6.2.1.2 Learning Conditional Statistics
  6.2.2 Output Units
   6.2.2.1 Linear Units for Gaussian Output Distributions
   6.2.2.2 Sigmoid Units for Bernoulli Output Distributions
   6.2.2.3 Softmax Units for Multinoulli Output Distributions
   6.2.2.4 Other Output Types
6.3 Hidden Units
  6.3.1 Rectified Linear Units and their Generalizations
  6.3.2 Logistic Sigmoid and Hyperbolic Tangent
  6.3.3 Other Hidden Units
6.4 Architecture Design
  6.4.1 Universal Approximation Properties and Depth
  6.4.2 Other Architecture Considerations
6.5 Back-Propagation and Other Differentiation Algorithms
  6.5.1 Computational Graphs
  6.5.2 Chain Rule of Calculus
  6.5.3 Recursively Applying the Chain Rule to Obtain Backprop
  6.5.4 Back-Propagation Computation in Fully-Connected MLP
  6.5.5 Symbol-to-Symbol Derivatives
  6.5.6 General Back-Propagation
  6.5.7 Example: Back-Propagation for MLP Training
  6.5.8 Complications
  6.5.9 Differentiation outside the Deep Learning Community
  6.5.10 Higher-Order Derivatives
6.6 Historical Notes
    

说在前面的话:

1. 什么是Deep feedforward networks?

前馈深度网络(Feedforward Deep Networks\feedforward neural networks),也称为多层感知机(multi-layer perceptrons(MLPs))。它的目的是找到一个最佳的映射 y=f(x) ,将输入x映射到一个类别y中。同时,这个映射可以表示为 y=f(x,θ) 。而Deep feedforward networks就是要找出这个 θ ,使得我们得到的这个 f 可以以一定程度地逼近真实的f
补充一点,对于MLPs而言,是不存在输出反馈给自己的回路的。如果存在的话,这个神经网络就是recurrent neural networds(RNN)。原文上写的是There are no feedback connections in which outputs of the model are fed back into iteself.这里个人目前还不是很理解outputs fed back into iteself的具体概念,等待后期学习。

2. 几个补充概念

output layer: 前馈网络的最后一层。
hidden layer: 对于一个完整的神经网络,除去输入层和输出层的其他部分。
first layer: 输入层后的第一层,注意输入层并不是第一层。

3. 神经网络的非线性性

神经网络使用的依旧是线性模型,但是该线性模型的作用对象并非输入 x ,而是x的一个经过非线性函数处理的变形体 ϕ(x) 。关于 ϕ(x) 的选择可以参考以下几点:
(1) ϕ(x) 的维数问题:简单来说, ϕ(x) 是可以利用好核的(kernel trick),比如RBF(径向基函数)。这里可以参考http://blog.csdn.net/cwcww1314/article/details/52425152。然而维数可以理解为这个变形体对Training set的特征的一个抽象和表达能力。维数越高,这个能力越强,但同时它的泛化能力就越弱。这里个人认为考虑的是一个模型复杂度引起的过拟合和欠拟合的问题。
(2) 在有深度学习之前,人们一直要用很多精力来完成这个manually engineer ϕ ,但具体这个manually engineer用到了那些步骤和方法,我也不是很懂啦。O(∩_∩)O~
(3) 在深度学习里,学习 ϕ 一般是使用模型:

y=f(x;θ,ω)=ϕ(x;θ)Tω
其中 ω 连接 ϕ(x) 和output layer。 θ 是我们需要使用某种优化算法计算获得的参数。在这里, ϕ(x) 只需要人为给定一个概率分布家族就好,而不需要像(2)中一样精确为一个最优的概率函数。

6.1 Example: XOR

一个简单的例子,讨论神经网络的非线性性。
XOR这个函数本身就是非线性的,图1可以看出,不可能画出一根直线,把这四个点分成期望的两个类:


#DeepLearningBook#Chapter 6 Deep Feedforward Networks [1]_第1张图片
Figure 1

于是我们建立一个简单的前馈神经网络,如图2所示:

#DeepLearningBook#Chapter 6 Deep Feedforward Networks [1]_第2张图片
Figure 2

这个网络可以用下面的表达式来表达:
h⃗ =f(1)(x⃗ ;W⃗ ,c⃗ )

y=f(2)(h⃗ ;w⃗ ,b)

总结来说就是:
f(x⃗ ;W⃗ ,c⃗ ,w⃗ ,b)=f(2)(f1(x))

f(1) 必须是一个非线性函数,这个非线性函数在神经网络中成为激活函数(Activation function)。假如说 f(1) 是一个线性函数,那么会导致 f 也是一个线性函数,简证如下(考虑bias = 0):
Suppose
f(1)(x)=W⃗ Tx⃗ 

f(2)(x)=h⃗ Tw⃗ 

Then
f(x)=w⃗ TW⃗ Tx⃗ 

这样的话 f(x) 从本质上来说还是线性的。
因此对于隐藏层 h⃗ =g(W⃗ Tx⃗ +c⃗ ) W⃗  提供的是权值Weights,而 c⃗  提供的是Bias。目前 g(x) 通常取为rectified linear units(ReLU),即 g(z)=max(0,z) 。关于ReLU更多,请参考 https://www.zhihu.com/question/29021768。所以我们的网络可以表达为:
f(x⃗ ;W⃗ ,w⃗ ,c⃗ ,b)=w⃗ Tmax(0,W⃗ Tx⃗ +c⃗ )+b

具体求解过程在这个章节也怎么重要啦~到这里为止只需要明白1. 神经网络区别于Logistic Regression等可以处理非线性的问题; 2. 神经网络如果要想完成自己非线性分类的功能,其激活函数(Activation function)必须是个非线性函数,比如ReLU。

#DeepLearningBook#Chapter 6 Deep Feedforward Networks [1]_第3张图片
Figure 3. ReLU Function

6.2 Gradient -Based Learning

神经网络的非线性性导致了它相应的损失函数(loss functions)编程了非凸函数。这意味着神经网络需要通过迭代式的、基于梯度的优化器随机梯度下降(Stochastic gradient descend),这个优化器逐步将损失函数的值降到局部最低值,且这个值极大依赖于初值点。然而对于诸如Logistic Regression和SVM由于它们优化的目标函数都是凸函数,因此可以直接收敛到全局最优值。

6.2.1 Cost Function

一般训练神经网络的总Cost function由两部分组成:原始的cost function(比如likelihood, 训练集和预测集的cross-entropy)以及一个regularization term。
For more information concerning regularization term, please refer to http://blog.csdn.net/zouxy09/article/details/24971995/。

6.2.1.1 Learning Conditional Distributions with Maximum Likelihood

一种比较常见的损失函数就是-log likelihood了。它等价于training data和the model distribution之间的交叉熵(cross-entropy)。关于交叉熵的更多https://www.zhihu.com/question/41252833。用数学公式表达:

J(θ⃗ )=Ex⃗ ,y⃗ P^data[logPmodel(y⃗ |x⃗ )]

而我们需要做的事情即是最小化这个loss function J(θ⃗ )
好,上面这些都是常识。下面则是关于设计神经网络中Cost function选择的原则:
Cost function的梯度值一定要足够大,来为我们的学习算法提供一个可靠的优化方向。饱和了的损失函数会比较平坦,因而不能完成优化的任务。隐藏层的激励函数和输出层的饱和经常导致损失函数发生饱和而难以进一步优化。(?这里个人暂时不是很能理解前向通道的饱和与损失函数的饱和之间的关系)Negative log-likelihood可以帮助很多模型解决上述问题。譬如说对于一个exp(x)函数,它在x<0的区间内基本上就饱和并且flat了。但是如果对这个exp(x)取一个log,那么这个函数即使是在x<0的时候也有一个比较可观的下降梯度。

6.2.1.2 Learning Conditional Statistics

这一节主要说的是一个学习的思想,在做这个学习的时候,我们优化的对象不再是一个固定函数类的对应参数,而是函数本身。而这一块需要的是变分方面的知识(calculus of variations)。例如有以下两种方法:
Mean squared error

f=argminfEx⃗ ,y⃗ Pdata||y⃗ f(x⃗ )||2

Mean absolute error
f=argminfEx⃗ ,y⃗ Pdata||y⃗ f(x⃗ )||

但这两个损失函数十分容易饱和,造成优化效果不佳。因此还是交叉熵在这种情况下有更好的效果。具体如何使用这里不详述。

6.2.2 Output Units

为什么我们需要一个合适的Output Units?
因为Output units会影响最终cost function(cross-entropy)的形式。

6.2.2.1 Linear Units for Gaussian Output Distributions

线性output layer简单用公式表达就是:

y^=W⃗ Th⃗ +b⃗ 

Linear output layer经常用在生成条件高斯分布均值上(Conditional Gaussian Distribution),即 p(y⃗ |x⃗ )=N(y⃗ ;y^,I⃗ ) 。因为在这种情况下maximizing the log-likelihood就相当于是minimizing the mean squared error。
另外,线性的output layer不会发生饱和。因此对于基于梯度的优化算法,这样的输出层不会对其造成负面的影响。

6.2.2.2 Sigmoid Units for Bernoulli Output Distributions

先来回忆一发:
Bernoulli distribution 有一个糖两个小朋友,随机给一个小朋友
Binomial distribution 有很多个糖和两个小朋友,随机分配糖
Categorical distribution 有一个糖很多小朋友,随机给一个小朋友
Multinomial distribution 有很多糖和很多小朋友,随机分配糖
下面正题:
Sigmoid Units主要是用在伯努利问题的输出层上。因为这个时候输出y确定是2类中的一类。这个神经网络需要预测的是 P(y=1|x)ϵ[0,1]
假如说我们选用的output layer是线性的,譬如下式:

P(y=1|x)=max{0,min{1,w⃗ Th⃗ +b}}

但是经常出现的问题就是, P(y=1|x) 落在了[0, 1]这个区域外面。而上面的这个函数在区域外的梯度都是0,这会导致我们的优化算法没有了优化的方向。所以我们就要用Sigmoid units了。
Sigmoid units:
y^=σ(w⃗ Th⃗ +b)

σ(x)=11+ex

Sigmoid output unit可以看作两步:
(1) z=w⃗ Th⃗ +b
(2)利用sigmoid activation function将z转化为probability。
在这种情况下 P(y) 的和一般都不会为1。这个时候需要Normalize概率的分布。(这里Normalize的推导并没有看懂…马克一下…)
logP⃗ (y)=yz 个人认为可以理解为y表征的是符号,z表征的是数值。因此在这种情况下人为定义 P⃗ (y)=eyz 。)
总之就是在normalize之后有
P(y)=σ((2y1)z)

J(θ⃗ )=logσ((2y1)z)=ζ((12y)z)

ζ(x)=log(ex+1) 叫做softplus function,它当且仅当 (12y)z 非常负的时候才会饱和。这个时候一般是y = 0,z负得厉害;或是y = 1,z正得厉害。output layer工作正常的时候和上面的情况是契合的。因而这个特性可以帮助那些以梯度为工作基础的优化算法修正错误,收敛到正确的答案处。

你可能感兴趣的:(AI读书笔记,深度学习,神经网络)