神经网络
1.基本概念
(1)神经网络的定义:
神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,他的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。
-
什么是简单单元?
神经网络中最基本的成分是神经元(neuron)模型
提到神经元,我们似乎应该回想起一些之前的生物认知:
在生物意义上,神经元就是由细胞体和突起(分为树突和轴突)构成的用于接受刺激,产生兴奋并传递兴奋的细胞。
-
M-P神经元模型
理解:某一个神经元接受n个神经元的输入,并经过权重的转换,计算加权和,与阈值进行比较,这里为啥出来一个权重呢?
目的是区分不同神经元对于当前神经元的影响程度。
这里看到数学模型 y,事实上还是线性回归。
这里只是给出了两个示例激活函数(activation function)/响应函数/挤压函数。
-
理想激活函数是跃迁函数,0表示抑制神经元,1表示激活神经元,但是它具有不连续,不光滑等不好的性质
-
所以常用Sigmoid函数,这里注意,它并不是一个特定的固定的函数,而是代表一类"S型"函数,只要函数图形为S型,都可以称之为Sigmoid函数
-
对于我们上面图片中给出的示例Sigmoid函数,它具有一个很好的性质:
f(x)=\frac{1}{1+e^{-x}}
f'(x)=f(x)*(1-f(x))
我们观察这个性质,f(x)实际上是表示一个正or负,那么1-f(x),表示与原来f(x)相反的结果
所以对f(x)求导,表示的就是对于正负几率的乘积
实际上,激活函数可以自己任意的设置。
(2)什么是网络
多层前馈网络的定义
多层网络:包含隐层的网络
前馈网络:神经元之间不存在同层链接也不存在跨层链接
我们看最底层,是我们的输入神经元,一个样本的不同维放到了输入层的不同节点上
最上层,是我们的输出神经元,通常我们认为,有几个类的输出就使用几个神经元
那么中间的一层,叫做隐层神经元 or 隐含层
可以看到左侧a图是单隐层神经网络
右侧是双隐层
多层前馈网络的能力——万有逼近能力
仅需一个包含足够多神经元的隐层,多层前馈神经网络就能以任意精度逼近任意复杂度的连续函数
换言之,任何一个连续函数逼近的问题,我们都可以通过一个单隐层神经网络解决。
怎么理解上面说的话呢?
我们输入一个x,输出就是f(x),且我们要求在X空间中的任意一点都有值,这个空间是一个连续的空间,那就是一个连续函数。
这又涉及到一个问题:
对于底层,我们输入层的神经元个数是根据我们的输入维度确定的
对于上层,我们输出层的神经元个数是根据我们的输出类确定的
那么对于我们的隐层,神经元数是怎么确定的呢?? ——朴实无华的做法------试错法
误区:
并不是只有神经网络才具有万有逼近能力,
万有逼近能力是能够作为机器学习模型的前提,比如最简单的傅里叶变换也有这样的能力
为什么现在学到这里才开始提出这个能力?
因为很多人在怀疑,神经网络究竟有没有这样的能力
比如我们之前学的决策树(信息熵最小化),支持向量机(一定能找到一个那样的超平面)
(2)感知机与多层网络
-
组成:感知机由两层神经元组成,能够轻松实现逻辑与、或、非运算。
-
类型:分类模型,假设我们给定一个样本,可以通过感知机模型判断是正样本还是负样本
-
从几何角度:
这里我们首先回忆一下,特征空间:
比如说,此时样本的特征是二维的,如果数据集线性可分,我们可以找到一个超平面(对于一维空间,超平面就是一个点,对于二维空间,超平面就是一条线,对于三维空间,超平面就是一个面 ),使得数据集被分为正负,这里提到线性可分 ,比如下面的图中,是可以被分开的。
但是在这个数据集中,数据并不线性可分,因此也就找不到对应的超平面
回到我们说的几何意义上的感知机模型:
给定一个线性可分的数据集T,感知机的学习目标是求得能对数据集T中的正负样本完全正确划分的超平面,就是超平面方程。(!!!这里注意,一定是线性可分数据集,才可以求得超平面 )