人工神经网络(多层神经网络)

多层神经网络, Multi-layer neural network, 是研究的最多,结构又相对比较简单的神经网络。这种网络是属于前馈神经网络,一般由输入层,隐层,输出层组成。隐层的多少决定了该网络叫深度还是“浅度”神经网络。通常将大于3层的称为深度网络了。深度学习,狭义上讲就是对深度网络的训练过程。

在上一讲中我们提到
从上个世纪80年代开始
人工神经网络领域迎来了新的突破
产生了多层神经网络
人们终于可以利用人工神经网络处理非线性可分问题了
这一节课我们主要介绍多层神经网络的结构
这张图是最简单的多重神经网络
它包含两层
总共由三个神经元相互连接而成
输入x向量它有两个分量
x1 x2
输出y是一个数字
我们逐层写出从输入到输出之间的关系
a一等于欧米伽11x一加上欧米伽12×2 加上b1
这是第一个神经元的输入和输出的关系
a2 等于欧米伽21x一加上欧米伽22×2 加上b2
这是第二个神经元输入和输出的对应关系
z一等于fa 1
其中y是非线性函数
z2 等于fa 2
其中y是非线性函数
y等于欧米伽1z一加上欧米伽2z2 加上b3
这是第三个神经元输入和输出的对应关系
当然我们也可以用一个非常复杂的公式描述
多层神经网络输入和输出的关系
这个神经网络分成了两层
第一层是前两个神经元
第二层是后一个神经元
两层之间用非线性函数f连接起来
考一下大家在这个多层神经网络的模型中
带球的参数是哪些呢
对了带球的参数有九个
分别是第一层网络中的欧米伽一一
欧米伽一二
欧米伽二一
omega 22 b1 b2
第二层网络中的欧米伽一
欧米伽2b3
需要强调的是
两层之间的非线性函数
fi是必须的
我们不妨考虑一下
如果我们不加这个非线性函数
而是让第一层的输出直接作用到第二层的输入上
会有什么结果呢
这时输出y将等于如下这个式子
把它经过一系列的化解
你也可以看到y是x1 x2 加权求和
再加上偏置这样一个形式
可以看出输出仍然是输入的线性加权求和
再加偏执的形式
而我们如果现在假设一个神经元的状况
那么y将等于欧米伽1x一加上欧米伽2×2 加b
综合上面那个复杂的式子和下面这个简单的式子
我们可以看到
如果下面这个式子的欧米伽一等于上面那个市值的
欧米伽一乘以欧米伽一一加上欧米伽二乘以欧米伽二一
同时另外两个相应的市值也相对的相等
那么上面和下面将会是同一个模型
也就是说
如果乘与层之间不加非线性函数
那么多层神经网络将会退化到一个神经元的感知器模型状态
我们论证了在多层神经网络当中必须加入非线性函数
下一个问题是我们要加的非线性函数是什么呢
我先说答案
非线性函数是节约函数
例如fx等于一
当x大于零的时候
fx等于零
当x小于零的时候
fix图如右边所示
为什么要用节约函数作为多层神经网络的非线性函数呢
因为有一个定理
如果非线性函数采用节约函数
那么三层神经网络可以模拟任意的非线性函数
在证明这个定理之前
我们来看一下多层神经网络的结构
我们可以任意的增加神经网络的层数
同时对于每一层
我们可以任意地设置这一层的神经元个数
运用前面讲过的连接方式
我们将获得更大的神经网络
例如在如图所示的神经网络中
总共有三层
第一层有三个神经元
第二层有两个神经元
第三层有两个神经元
层与层之间用非线性函数连接
接下来我们可以给出三层神经网络
模拟任意非线性函数的证明了
在这里我们假设特征空间是二维的
同时我们假设是二分类问题
对于特征空间大于二维类别数大于两类的情况
证明的思路也是一样的
首先我们来看一个简单的非线性函数
在特征空间上有一个三角形
在三角形内部的区域属于一类
而在三角形外部的区域属于另一类
我们要用多层神经网络来构造一个函数
使得如果x在三角形里面则输出y大于零
如果x在三角形外面
则输出y小于零
怎么做了
首先我们假定这个三角形的三条边的方程分别是
欧米伽11x一加上我们改12×2 加b一等于零
欧米伽21x一加上欧米伽22×2 加b2 等于零
欧米伽31x一加上欧米伽32×2 加b3 等于零
同时我们假定上述三个方程中
在朝向三角形的一侧
其方程的值大于零
而在远离三角形的一侧
其方程的值小于零
这是一定可以做到的
因为如果做不到
只需要将omega和b取相反数即可
那么我们如何构造一个两层的神经网络来实现三角形内输出大于零
而三角形外输出小于零呢
构造如下
第一层有三个神经元
每个神经元的omega和b的值分别对应着三角形每一条边的方程
如图所示
这样如果一个二维向量x它的两个分量x1 x2 在三角形里面
那么三个神经元输出的a1 a2 和a3 将会都大于零
他们经过节约函数过后
输出的z1 z2 z3 都将等于一
另一方面
如果x在三角形外
那么a1 a2 和a3 将至少有一个小于零
经过节约函数过后
z1 z2 z3 也至少有一个等于零
根据上面的分析
我们在第二层将z1 z2 z3 对应的omega全设置为一
而将偏置b设置为-2.5
则满足条件
因为当且仅当x在三角形内
z1 z2 z3 全为一
经过第二层神经元后
输出y等于0.5
而如果x不在三角形内
z1 z2 z3 不能全为一
至少有一个零
经过第二层后输出的y将是一个负数
这样就达到了模拟这个非线性函数的目的
下面我们假设特征空间有一个四边形
四边形里面属于一类
而四边形外面属于另一类
我们如何做一个两层神经网络来区分这两类呢
有了前面的例子
这个问题很简单
只需要在第一层增加一个神经元
而第二层所有的权重设置为一
偏置
设置为-3.5
即可满足条件
同学们可以自己验证一下
那么对于任意的多边形都可以采用这样的方法
所以两层神经网络足以模拟这样多边形的非线性函数
接下来如果有一个不规则的封闭曲线呢
例如在这个圆圈里面是属于一类
而这个圆圈外面是属于另一类
我们能否用两层神经网络来模拟这样的非线性函数呢
虽然我们不能精确地获得这个非线性函数
但是我们却可以无限地逼近它
因为任何一个不规则的封闭曲线都可以用多边形去进视
例如我们可以用这个多边形去近似图上的圆圈
当多边形的边数趋近无限时
第二层神经元的个数也会趋于无限
这时我们可以以任意精度去逼近这个非线性函数
最后我们看一下
如果特征空间有两个三角形
如果x处于两个三角形的任何一个当中
我们把它判定为同一类
而两个三角形的外面是另外一类
这时我们能否用多层神经网络来模拟这个非线性函数呢
答案是也是可以的
不过对于这个例子
我们需要用三层神经网络来模拟
如图所示
这个神经网络前面两层的设置都已经讲过了
我们主要看最后一层
经过简单的推理可以得出
如果x在第一个三角形里面
那么c一等于一
c2 等于零
如果x在第二个三角形里面
那么c一等于零
c2 等于一
如果x同时在两个三角形的外面
那么c一等于零
c2 也等于零
因此只要最后一层将c1 c2 对应的权重都设置为一
而偏置b设置为-0.5
就可以区分x是在两个三角形的内部还是在外部了
同学们可以验证一下
学习了上面的知识
我们可以利用三层神经网络模拟任意的非线性二分类函数
我们可以把特征空间上任意的区域设置为一类
再把另外的区域设置为另外一类
请大家思考
按照上面的知识
如何设计三层神经网络来逼近这些函数呢
课程的结尾留两道思考题给大家
第一假设非线性函数有三个取值的情况
例如特征空间中有两个三角形
当向量的x在第一个三角形内时
y等于二
当向量的x在第二个三角形内时
y等于一
当x在两个三角形的外面的时候
y等于-1
请设计一个三层的神经网络来模拟这个非线性函数
第二如图所示
两条直线相交
将特征空间分为四个区域
其中两个对角的区域如阴影部分属于同一类
而另两个对角的区域如白色部分属于另一类
请设计一个神经网络来模拟这个非线性函数
请你深入的思考一下
最少需要多少个神经元就能模拟这个非线性函数呢

发表评论

邮箱地址不会被公开。 必填项已用*标注