目录


1 Setting Up the Architecture

1.0 Quick Intro without Brain Analogies

在线性分类中,我们通过将输入进行线性转换$s=Wx$来获取评分函数,多次线性转换操作是无意义的,因为最终都可合并为1次等价的线性操作;而在Neural Network中,我们可以有多个线性转换的操作,但是在各个线性转换操作之间,加入了非线性转换操作(即激励函数,activation function),这样,NN就可以接近任何(包括线性和非线性)函数,而不会像线性分类一样,多少次线性操作合并起来都等同于1个线性操作。具体来说,1个2层的NN不是计算$S=W_2(W_1x) = (W_2W_1)x = W_{comb}x$,而是计算$s=W_2\max(0,W_1x)$,其中$\max(0,-)$函数就是非线性函数(激励函数)。同理,1个三层的NN可以表示成$s=W_3\max(0,W_2\max(0,W_1))$,其中$W_1$,$W_2$,$W_3$可以通过反向传播优化获得,而它们各自的size属于超参,本文后面会介绍如何获得合适的超参。因此Softmax Classifier就是个1层的NN,它的激励函数是每个label的概率,即$\frac{e^{f_{y_i}}}{ \sum_j e^{f_j} }$。SVM Classifier也是个1层的NN,它的激励函数是与对的label之间的余量,即$\max(0, w_j^T x_i - w_{y_i}^T x_i + \Delta)$ 。

1.1 Modeling One Neuron

1.1.1 Biological Motivation and Connections

下面我们来从神经元的角度来解释神经网络,一个简单的粗糙的对神经元的近似如下图。

Neuron

1个神经元的工作原理可以粗糙的概括成将输入->线性变化->激励函数(值足够大的时候,激发信号)->输出的过程,即$f(Wx+b)$。

1.1.2 Single Neuron as a Linear Classifier

单个神经元是1个线性分类器,可以从下面三方面来理解:

  1. Binary Softmax Classifier。当激励函数是$\frac{e^{f_{y_i}}}{ \sum_j e^{f_j} }$时,是Softmax classifier。

  2. Binary SVM Classifier。当激励函数是$\max(0, w_j^T x_i - w_{y_i}^T x_i + \Delta)$时,是SVM classifier。

  3. Regularization。从神经元这种生物学的角度来看,正则化可以看做逐步遗忘(gradual forgetting)的过程,因为每次$W$的update都会被正则化趋向的零。

1.1.3 Commonly used Activation Functions

常用的激励函数总结成下图。

Activation Function

TLDR: “What neuron type should I use?” Use the ReLU non-linearity, be careful with your learning rates and possibly monitor the fraction of “dead” units in a network. If this concerns you, give Leaky ReLU or Maxout a try. Never use sigmoid. Try tanh, but expect it to work worse than ReLU/Maxout.

1.2 NN Architecture

1.2.1 Layer-wise Organization

NN是由neurons组成的layer的acyclic graph;同1个layer内的neurons不会有数据交流。

NN size参数

1.2.2 Example Feed-forward Computation

NN组织成layer的形式可以使得前向传播的计算形式简化成多次应用矩阵相乘后经激励函数。

The forward pass of a fully-connected layer corresponds to one matrix multiplication followed by a bias offset and an activation function.

1
2
3
4
5
6
# forward-pass of a 3-layer neural network:
f = lambda x: 1.0/(1.0 + np.exp(-x)) # activation function (use sigmoid)
x = np.random.randn(3, 1) # random input vector of three numbers (3x1)
h1 = f(np.dot(W1, x) + b1) # calculate first hidden layer activations (4x1)
h2 = f(np.dot(W2, h1) + b2) # calculate second hidden layer activations (4x1)
out = np.dot(W3, h2) + b3 # output neuron (1x1)

1.2.3 Representation Power

1个随之而来的问题是NN是否能近似所有的函数,或者说是不是存在某种函数不能由NN来近似?事实上1个1层的NN可以近似任何连续函数(e.g. see Approximation by Superpositions of Sigmoidal Function, or this intuitive explanation from Michael Nielsen)。

既然1个1层的NN可以近似任何连续函数,那么我们为什么要用多层NN呢?理论上说,多层NN和单层NN的表达能力是相同的,即都有可以近似任何连续函数;但是实际上,多层NN比单层NN的实现更有效。

1.2.4 Setting Number of Layers and Their Sizes

实际实现中,小的NN(少的hidden layer层数和neuron个数),有一定概率你可以获得很小的loss或者很大;而在大的NN(多的hidden layer层数和neuron个数),不同的local minima之间的loss差距很小,很大概率你可以获得效果几乎一样的最优解。

x vs lambda

因此,对于如何设置layer层数很neuron个数,本文的建议是在你的计算机能力范围内,层数尽量大,neuron个数尽量多,然后用regulariztion(或者higher weight decay)防止overfitting。

2 Summary

NN Architecture Summary

3 参考资料


Share Post

Twitter Google+

Shunmian

The only programmers in a position to see all the differences in power between the various languages are those who understand the most powerful one.