开发者学习笔记【阿里云人工智能工程师ACA认证(2023版):多层感知机(一)】
课程地址:https://edu.aliyun.com/course/3112108/lesson/19267
多层感知机(一)
内容介绍:
一、感知机的概述
二、多层感知机的层级结构与激活函数
三、BP神经网络算法概述
四、本节回顾
本节内容我们学习多层感知。首先是感知基的概述,什么是感知基,然后我们会学习多层感知基的层次结构和激活函数,最后给大家介绍 BP 神经网络的算法,我们一起来学习感知机。
一、感知机概述
感知机,中文的概念感知,能够感知的这个机器,它是对神经元的模仿,在机器里对神经元的模仿,它的英文叫perceptual。感知机我们认为它是人工智能最早的模型。
一九五几年的时候这个模型就被提出,然后引起科学家们的各种研究。我们讲这个神经网络,我们去模仿人类,去思考生物的神经网络,它是由神经元组成的,我们就用感知基,这感知基对应的相当于生物神经网络里面的组成的神经元。
感知机的这个模型是非常简单,我们可以看下面这个图,中间这个就相当于细胞核,这是一个f,就是一个function,一个函数,然后它有输入X1、X2,或者是可以有多个输入,x,n,每个输入过来都有一定的权重,每个权重不一样,W1, W2 有这个输入,输出就是这个 y ,输出就这个y,也就是它是一个函数,然后有输入经过它的处理,然后有输出。
比如这里举这个例子,这个 y 是这样的一个函数,当 w 乘以X1,加上 w 乘以X2,它是小于等于 0 的时候,输出是0,如果是大于 0 的时候输出是1。
综合来看,也就是这个最后它输出的值是 0 或者是1, 0 或者1两种,我们整体来看,也就是这个感知机它可以有很多的输入,输入有这个权重,输入求和后得到输出,是一个二分类的问题。
这里我们提到它是一种有监督的学习算法,既然是一种有监督的学习算法,它需要进行训练,需要去训练,需要学习,堆给他的数据可能是X1, X2 的一些值,然后输出的这个结果 01 这样,在训练的过程中,它是不断的调整这个W1,W2,使得过来训练的数据都能够得到很好的分类,训练完之后,这个 W1,W2 得到一个恰当的值,这个分类就能够进行。来一个新的值的时候,经过这个分类器,然后分类得到它是 0 还是1。
这个感知机,看起来就比较简单,有输入汇总,运算得到一个输出学习,但是这个东西它是神经网络和支持向量机的基础,这里面有一点问题,就是这个输入并不单纯的是这个输入完后对它的这个输入值跟权值,然后求和,直接得到输出。
这个过程中还可以用这个 f ,这个函数 function 来对这个求和,对值进行运算后再输出。比如我们可以用这个 sigmooid 的这个函数,等下我们会学习激活函数,我们可以用这个进行运算,然后再得到输出,也就是这个激活函数这里面我们可以有一些选择,有一些变化。
感知机这个东西出来后,我们说它引起了一段时间的研究热潮,但是后来有一个人工智能的大脑出现,提到这个感知机它是有缺点,用这个官方的语言就是它不能解决抑或问题,也就是它解决这个分类时,它只能去解决单纯的线性可分的问题,线性不可分的就没办法解决。
比如在一个二维平面里,假如画一个它的二维平面里面,如果你的点的分布是这样的,比如这有一个圆作为一个另外一种数据差,对于这种情况,它就是线性不可分的。
比如你随便画一条线,你是很难把这两类分开,不可能这样分开,面对这种线性不可分的问题,这个感知机是无能为力的,这个证明完无能为力之后,感知肌的这个缺点,因为这个缺点这个神经网络这个研究方向很快就冷却下来。因为大家知道你使用感知机,有些问题是不能解决的,就是在数学上它是不完备的,所以感知肌就冷却下来,直到后来有了多层感知肌。
二、多层感知机的层级结构与激活函数
首先看这个多层感知机的层级的结构,多层感知基因顾名思义就是一个感知机,它有缺陷,它不能解决这种线性不可分的问题,就数量,开始用多层,把很多的感知机结合在一起,群众的力量大,集体的力量大,把感知机单个的组合起来,组合成多层的感知机,然后就可以用来去拟合非线性函数。
这个多层感知机它怎么组合,我们是把它分层的,分层分为输入层,就接受数据的输入在这一层,然后中间是隐藏层,有的时候又叫隐层, hidden 这样称呼的隐层,然后最后是这个输出层,就输出的结果可以有多个,这是输出层、输入层、隐藏层跟这个输出层。这个输入层,输入的决定了这个输入的数量,输入层的大小决定了输入的数量。隐藏层是可以有 0 层,可以有1层,可以有多层。
为什么叫隐藏层?因为这个部分对于这个使用者来说,它可能是不可见的,所以这个可以认为它是隐藏起来的,像一个黑盒子。这个是黑盒子,关注一般只关注输入跟输出就可以,隐藏里你打开一看就是一堆数字,不知道里面是什么样的内容,对你来说是黑盒的。
这种层次的结构其实理解起来不会很难,因为我们讲神经网络,你看到的生物神经它也不是像感知机一样,它就一个神经去做计算、去思考,这个是不可能的,它都是很多的神经元组成复杂的神经网络,同样这个感知机也是一个不够,解决不了问题,我们就大量的这个感知机,把它排好,分层组合在一起,这样搭配一起工作。
在这个多层感知肌,单拿出某一个这个神经元,人工神经元拿出某一个来看,其实拿这个来说它也是有很多的输入,比如这个中间这个神经元还有三个输入,分别来自于X12、X2、X3,这三个输入都有相应的权重,它也有输出,它有输出到过到这个FX,三个 FX 的时候,其实可以根据三个线的这个权重去调整,又变成他们的输入,有这样一层一层的传递下去,神经元,特别是这个中间的隐层的这个神经元,它的弹性变化比较大,可以有一层,可以有多层,层数越多,其实它计算起来这个难度就越大。但是层数越多,它能表征的函数也就越多,它的能力也就越强。
相对来说,多层感知机一般它的输入跟它的输出都是相对固定的,就是你的输入是一个什么样的形式,这个可能是固定的,你的输出需要,比如是分类问题,你需要几个分类,这个也是固定的,所以对于多层感知机的设计很大一块是在中间这个层,分多少层,然后每一层有多少个神经元,这个是很大的一个问题。
另外就这个神经元之间是怎么连接?像这个大家看到这种图的情况,每一个神经元跟它上层跟它下一层的神经元都是有连接,都是有连接的这种就叫全连接。但是这种情况也是带来这个数据量非常大,计算任务非常大的一个问题,要不要做成全连接是一个值得去思考去优化的这个方向,所以多层感知机结构是这样的,怎样分层,怎样连接都是要考虑的。
多层感知积里面那个函数,中间那个函数到底选用什么样的函数,也是不同函数会导致这个多层感知具有不同的特性,这个就是我们等下分享的激活函数。
激活函数我们讲到这个构建这个多层的感知积时,很重要的一环就是怎么样去设定这个激活函数。
首先这个激活函数要设计,因为不同的激活函数给这个神经网络会带来不同的特性。首先这个激活函数不能是很简单的线性函数,这里先要注意,不能是很简单的线性函数。
因为如果激活函数是很简单的线性函数,它会导致整个神经网络就变成一个线性神经网络,这个在数学上是可以证明,在激活函数它的运算又不能太复杂,如果它的运算复杂,会导致这个神经网络的成本会非常的高,这个激活函数就因此就选出来有一些常用的激活函数,大家熟悉它,然后在不同的情况,根据它的特性来选择该用什么样的激活函数。
这里给出来的定义激活函数是一种人工智能神经网络的神经元上面运行的函数,来帮助网络学习数据中的复杂的模式,将神经元的节点的输入映射到输出端,做一个映射这个作用。
常见的激活函数最常见的就是sogmoid函数,最常见是 tanh 函数, Relu 也是一个其实是非常简单的一个函数,但是很有特色,然后Relu的一个变种叫leaky、elu,然后还有其他的一些激活函数。
我们这里介绍三种常用的激活函数,是一个sigmoid, tanh,relu我们来学习第一个激活函数,是sigmoid的激活函数,这个是非常经典非常常见的一个激活函数。这个函数也叫 logistic 函数,它是用于隐藏上的神经元的输出,取值范围是 0- 1。
我们看下图,这个函数的图像,画出后是这样的,它可以把一个实数映射到从 0 到 1 的这个范围,这中间在 0. 5 的时候,在这个 x 等于 0 的时候,正好是 1 + 1 分之1,正好,是 0. 5,然后这个从 0 到1整个这个范围曲线的形态是这样的,它的函数的公式是写在右上角,在这里,这是一个指数,然后它用这个sigmoid的这个函数。
假如输入的时候这个值是 -2,可能这个曲线上是出现在这里就是零点几,比如输入的时候是2,这个时候它的输出是可能接近 0. 9,大概在这个位置,这样一个映射的效果的这样一个激活函数非常经典的。
这个激活函数它可以用于二分类,就是用于激活的时候大于某一个数或者小于一个某一个数,可以用这个函数,然后运算完之后可以加一个bells,加一个偏值,然后得到这个二分的结果,这里因为有一点点问题,它的输出不是 0 均值,这个看起来就没有那么优美。因为它的输出是从 0 到 1 这个范围内,均值是这个 1/ 2,不是 0 均值。
就这样一个问题,用sigmoid这个激活函数它有一个缺点,它存在这个梯度消失的情况。
在进行这个神经网络的学习的时候,我们经常用这个梯度下降来进行学习,用这个做激活函数的时候,存在着这种情况,如果这个神经网络的层数比较多,他可能学习两层后,这个梯度再也就消失,就没有,后面的就学习不到,没有办法进行学习。这种现象叫梯度消失,这个是要用这个sigmoid函数的时候需要注意到的。
这是第一个激活函数,然后有一个函数叫tanh,tanh激活函数,tanh 激活函数它的这个方程是这样的,它的函数是这样的。
可以看这个,可以认为它是跟这个 sigmoid 很像是一个改进。
它解决了 sigmoid 的不是零均值化的这个输出的问题,因为它的这个取值的范围是从 - 1 到 1 这个范围,它的曲线的形态是这样的,因为这个特性它在特征相差明显的时候,它的效果会更好,而且在循环过程中会不断的扩大特征效果,有这个用 tanh 这个函数有这个优点,但是它也同时也存在这个梯度消失的问题,跟这个 sigmoid 是这一点是差不多的。
所以从整体上看,这个 tanh这个激活函数,它比sigmoid的函数会更加的受欢迎。最近的 sigmoid 和 tanh 这两种激活函数用的已经越来越少。
最流行的其实是下面一种,relu,现在目前最常用的最受欢迎的激活函数是这个,叫 relu的激活函数。 relu激活函数它解决了基督消失的问题,计算的速度非常快,它的收敛速度远远快于 sigmoid 和 tanh。这个是有论文去测算的,在这个 Imagenight 分类基准论文上 relu 它的这个收敛的状况比tanh 要提高 6 倍。
可以看到这个函数非常简单,极其简单,但是可能发现的最简单的,最优雅的这种方案可能就是最好的方案。这一点也是适用于relu函数的,它不像 sigmory 的或者 tanh那样,它涉及大量的运算,所以它可以更快的学习。它也避免了梯度消失的问题。
几乎所有的神经网络都会用到relu,但是relu 基本上都是用在隐藏中,但是用relu的时候也会遇到一个问题,就是有部分神经元可能在训练的时候会很脆弱,甚至会死掉。
这就意味着比较大的梯度通过 relu函数的时候会导致梯度更新,使得无法再次激活任何的数据点。
这个时候我们可以引入一种叫 leaky -relu 的这个函数来解决这个问题。leaky -relu 这个函数在这个基础上加一个很小的复斜率的函数,这样就不是 0 ,这个叫 leaky- relu。
总的来看,在我们去选用激活函数的时候,这个不是太复杂的情况下,我们可以用 sigmoid 或者是 tanh。
在很多情况下,你都可能要优先考虑到relu,再把它放在神经网络的隐藏层,如果使用relu的时候发现很容易产生节点死掉的这种情况,就改进使用leaky- relu能帮你解决问题。
以上就是激活函数的一些基本的介绍和这个怎么去选择激活函数?