How to set Architecture of Neural Networks?

【OUTLINE】:

  • Neural Networks是对人的神经传递系统的模拟;需要一个activation函数f,通常选sigmoid函数;
  • Neural Networks 是一个比较coarse的系统,说它粗糙是因为跟真正的生物神经机能相比,它只能说弱爆了。
  • 神经网络中的每一个神经元,即示意图中的每一个圆圈,都可以被看做是一个线性分类器;可以引入诸如Binary Softmax Classifer、Binary SVM classifer、Regularization Interpretation等分类器。
  • 通常使用的activation 函数包括:sigmoid, tanh, ReLU, Leaky ReLU, Maxout等;其中sigmoid 是最不推荐使用的,缺点太多;ReLU和Maxout可以一试。
  • Neural Networks的架构:它就是一个图,单向无循环图。如何确定一个神经网络是几层的,最后一层通常是一个分数,如何设置一个Neural Networks的大小即复杂度,它的复杂度取决于神经元neuro的个数和整个神经网络的层数。越复杂,则需要学习的parameter数越多,系统也就越复杂。
  • Feed-forward Computation:跟上一章提到的forward pass方法类似,只是要注意关于Matrix的计算;
  • Representational Power:每一个Neural Networks都定义了相应的函数簇,如何评价一个函数族的表达能力?事实证明,Neural Networks可以表述模拟任何一个连续函数来构建模型。一个2层的神经网络和一个20层的神经网络相比其模拟能力基本相同,现实中,3层的网络往往比2层的效果要好,但是4,5,6层以上对效果的改进就没有那么显著了。
  • Setting Number of Layers and their sizes:虽然一个2层的神经网络和一个20层的神经网络相比其模拟能力基本相同,但大量经验表明,深层的系统的确比浅层的效果要好得多。对同一个问题,深层容易陷入overfitting,但是不表示越浅层越好,解决overfitting的方法有很多,如L2,dropout等,所以尽量深层吧。

首先给出一个比拟图,因为神经网络的原理是从人的神经传递结构中想象出来的一种模拟神经传递过程的,所以对于理解Neureal Networks的传递方式的理解可以参考下图:

image

 

正如上篇文章《How Backpropagation Computes》里提到的计算forward pass和backward pass的计算过程一样,给定初始权重w的值和样本数据x,我们可以很轻松地计算forward-Porpagation在各个阶段的值:(这里的激活函数activiation仍然是sigmoid 函数)

image

由于Neural Networks 是对人类神经系统的一个简单的模拟,我们不难理解,目前的Neural NetWorks 只不过是神经网络的一个非常粗糙的理论,远远不如真正的生物神经网络发达。

【每一层到下一层的一个节点的映射,可以看做一个linear classifer】

参考下图。事实上,Neural Networks的每一竖层上的节点到下一层的节点的映射过程被理解成了一个linear classifer,如下图第一层到第二层上的每一个节点都是通过一个sigmoid函数的activation过程获取到的,第二层到最终层的过程也是如此。

image

而可以用作这样的linear classifer的方法有这样一些可供选择:Binary Softmax classifer, Binary SVM classifer, Regularization Interpretation等。

【目前一般会遇到的activation 函数】

1、sigmoid

image

sigmoid被钟爱的原因是它以real-value为输入,并且具有很好的类别区分性,由于它的取值范围在0-1之间,所以对于defend<0.5的就是negative类,大于0.5的就是positive类。它在很长一段时间被业界频繁使用,但今年貌似已经开始淡出这个范围。

sigmoid有两个缺点:

1)sigmoid的activation值接近0或者1的时候,容易对梯度计算造成影响。见上图,activation值在接近0或者1的时候,曲线的梯度非常小且接近于0,这就会导致在计算backPropagation的时候出现问题,因为存在乘以梯度的过程。

另外,在对sigmoid的参数进行初始化的时候需要注意,如果参数值太大,可能会导致产生上述情况,以致该networks 无法得到训练。所以,尽可能选择比较小的随机参数。

2)由sigmoid的曲线可以看出,它的值不是以0为中心的,而是以0.5为中心,于是sigmoid的函数值只能为正的,这就会导致在backpropagation过程中对参数w进行梯度求解的时候,所有的参数w的梯度都是negative或者都是positive的,至于究竟会是哪个这取决于整个神经网络路线图最后的1,2层梯度值。

虽然这也是个缺点,但是相对于第1)个,这个的影响没有那么明显。

2、tanh

这个比sigmoid要好一些,虽然同样存在在两边的极端情况下偏导数为0的情形,但它却是以0为中心的。

3、除了以上两个,还有ReLU、leaky ReLU、MaxOut等方法,其中MaxOut方法和ReLU是目前常用的方法,坚决不要用sigmoid函数。可以用tanh,但是效果不会比上两种方法好。

ReLU方法:全称是Rectified Linear Unit,计算的是函数f(x)=max(0,x)的值,也就是说这个activation函数就是简单地以0为阈值,大于等于0的部分等于x,小于0的部分等于0。这个方法曾经在很长一段时间内很流行。

它相比sigmoid和tanh方法其收敛速度快得多;相比sigmoid和tanh类型,它在0点直接简单地设置了一个阈值界限,没有上述两个函数的指数运算。但LeRU也有它的缺点,

image

How to set Architecture of Neural Networks?”的一个响应

留下评论