Multi-Layer Neural Network
http://blog.youkuaiyun.com/surgewong
接触机器学习有一段时间了,但是对于神经网络一直感觉比较“神秘”,再加之深度学习的概念炒得这么热,都不好意思说自己不懂神经网络了。本文主要是为了记录自己对神经网络的理解以及一些心得,由于是一个新手,其中的一些理解不免有些错误,望各位能够指正。本文主要参考 UFLDL Tutorial的同名教程【1】,在理解过程中主要参考了博客,反向传播BP算法【2】。正如【2】所说【1】中变量的上下标比较多,理解起来可能有些不便,记得耐心看下去哦。
一、初识神经网络
给出一个监督学习的问题,输入一系列的带标签的形如的训练数据,神经网络可以给出一个复杂的、非线性的形如
的模型,其参数为
。所有的神经网络模型基本上就是围绕这两个参数展开的。
先了解一下单个神经元(neuron)的网络。其实逻辑回归(Logistic Regression )(不熟悉的同学可以参考【3】),就是一个单神经元网络。
上面的“网络”结构,输入3个变量,外加一个截距(intercept)(+1)。输出结果为:
,这里的函数
是激励函数(activation function)【4】,最常用的激励函数时sigmoid函数,采用它,那这个网络就变成了逻辑回归问题。sigmoid的函数有些很重要的特性,
和
。
刚接触神经网络不久,对一些习以为常的概念感觉有点疑惑,在这里记下自己对其的理解。上面用到公式 ,可以这样理解,把1,
看成变量
的分量,变量
看成是
的分量(注意:与网络参数中的
不同,网络中参数是指
)。另外作为一个初学者,想必很想知道激励函数的作用。激励函数是对生物神经信息处理的一种模拟,根据【4】里的说法,非线性的激励函数能够使得网络系统使用较少的节点适应复杂的模型。激励函数的作用有点类似与SVM中的核函数的作用,是对网络功能的一种扩展。
sigmoid函数是最常用的激励函数,除此之外还有双曲正切函数(hyperbolic tangent),不过双曲正切函数将值映射到(-1,1),相比sigmoid就相当于将类别分为-1和1,可以认为是sigmoid函数的一种“拉伸”。双曲正切函数的特性有:,
最近的研究发现还有一种新的激励函数,修正后的线性函数(rectified linear function),在小于0的部分,激励函数输出0,大于0的部分,输出为 原来的值。与sigmoid函数和双曲正切函数相比,该函数没有限定其值域,并且该函数在0点出,不可导。
下面给出的是sigmoid,tanh,修改后的线性函数的图:
二、神经网络模型(Neural Network model)
下面考虑一个简单地三层的网络结构,相比单个神经元网络结构而言只是增加了一个中间隐层(hidden layer)。隐层(hidden)是相对于输入(Input layer)和输出层(Output layer)而言的,输入层是指输入的数据的各个分量,这个是可见的;输出层是指输出的值
的分量(如果是1维,就相当于是一个分类问题)。
上图的网络结构中+1表示一个偏置(bias),也就是上面讲的截距(intercept),这个虽然是网络中的一个节点,但是在说网络结构的时候,通常不将其计算在内。上图中的网络结构可以描述成,三个输入节点,三个隐藏节点,一个输出节点。
为了描述这个网络结构,令网络层数为,在上述网络结构中
。将第
层表示成