神经网络入门

1.机器学习模型


    上图展示了机器学习的基本模型, 我们先从最简单的线性回归来解释每个部分的基本概念。



公式如下
W和b就是这个模型的映射函数(mapper)。 需要找到合适的W和b使代价函数(cost function)最小。模型的代价函数选用均方误差(mean square error)。
对图中每一个点来说
d(i)表示每个点的纵坐标,x2(i)表示横坐标映射后的纵坐标。

代价函数J为

为了简化起见,我们假设b=0。所有J是和W有关的函数,我们只需求
即找到代价函数的最小值,得到最优W。
由于直接求导难以计算,梯度下降算法应运而生,逐点计算误差(error)并更新W使得J趋近于Jmin。公式如下:
u是步长(stepsize)表示每次梯度下降走的距离。W靠误差(error)e(i)和当前值x(i)进行更新,迭代次数可以人为设定,这个公式也叫learning algorithm。

2.神经网络

2.1处理单元(processing element)

处理单元(PE)也叫神经元(neuron), 是神经网络中最小的单位

上图展示了一个最简单的PE, 省略了偏置b。非线性方程也被称为激活函数。本例选取符号函数作为激活函数。若y等于-1,则判定为红色点, 若y等于1,则判定为蓝色点。 由分类图可以看出,我们只需要一个处理单元也就是一条直线就可以对红蓝色点进行分类。
由于符号函数无法求导,也就无法对代价方程进行求解,我们需要引入一个连续的非线性函数作为激活函数,最常用的激活函数是sigmoid函数,如上图所示。引入sigmoid函数后,通过第一节所述的w的迭代公式进行更新。

2.2多层神经网络


如果我们想分离上图中三角形区域和其他区域,直觉上来说只需要含有三个PE的单层网络来分就够了。但是三个PE的单层网络只能分离出浅蓝色区域和其他,原因是对每个PE来说,直线下方表示-1,上方表示1。若要表示三角形区域,我们需要增加网络层数。
如图,需要在网络中增加一层来把第三个PE的映射值翻折上去。
理论上来说,神经元越多,神经网络的层数越多,所能表示的区域就可以越复杂。大家可以想一想,怎样的网络结构能够表示这个面具,把黑白区分开来。

2.3 反向传播算法(Back Propagation algorithm)

基于W更新的公式,每次我们都需要知道计算值与目标值之间的差值e。当神经网络的层数增加后,我们只知道最后一层也就是输出层的e而不知道中间层的e。为了计算中间层的e来更新w,引入了基于链式求导法则的反向传播算法。

y是整个网络的输出,net是x的线性组合,f是激活函数

J表示整个网络输出的代价函数, wij 表示第 i 层第 j 个PE所对应的权重。根据链式求导法则

, k是 i 的下一层也就是输出层的PE, 结合以上两个式子
上面的式子所做的假设是输出层只有一个PE,若输出层有多个PE。
结合此式子和第二个式子,有

带入w的迭代公式
即可逐层更新权重W

3.总结

本文用平面内的二维数据作为例子,简要的讲述了一下神经网络的基本概念和作用。神经网络最主要的作用是当网络层数增加以后,可以表示任何空间,不论是二维,三维,四维或是图像的1080*1080的数据。Dr.Princepe的一句话我很喜欢"Everyone treats neural net as a black box, but it's not. It all depends on you"在模型构造前需要根据当前数据的分布来选取参数,盲目调参是不可取的。

顺带一提

网络初始化时w一般从0-1中随机选取一个作为初始参数,再根据w的迭代公式进行调整。
以后可能会写一写用原生的python实现一个简单的神经网络,有助于神经网络细节的理解。原生的python性能很差,现在基本都用tensorflow框架,用python调c++的库。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。