目录
线性函数和多层神经元
在上一篇文章(深度学习-CSDN博客)了解了线性函数和神经元后,我们来聊一聊多层神经网络。
在上一篇文章中,我们知道了,神经元是这样的:,它表示的线性函数是:ŷ=wx+b ,由一个个这样的神经元就可以组成一个多层神经网络:
这样的神经网络依然可以由线性函数表示:例如y1=w11 * x1+b1+ w12 * x2 + b2 + w13 * x3+b3,
把b1,b2,b3合并后,y1= w11 * x1 + w12 * x2 + w13 * x3 + b 。 y2,y3,y4......都可以由形如y1这样的线性函数表示。最后输出的也是线性函数。
1.神经网络
在讲这样的大型神经网络前,我们先来谈谈人类大脑神经与神经元。因为神经网络最开始叫做人工神经网络或者人工神经元,它起初就是想模仿人的大脑,从而形成的网络,AI和人的大脑很像。
当我们看到“蜻蜓低飞”这样的场景,大脑接收到信息,输出“要下雨了”这个想法;当我们要解某一道题,大脑经过计算,得到了这道题的答案。这些跟人工智能其实是很像的。
当我们叫“SiRi”,人工智能一判断,就知道这是在叫它;当我们让人工智能画一个图,AI根据你输入的语言描述,就画出了你想要的图。
通过对比,我们知道了,神经元就是模仿人的大脑存在的。我们来看一下更为具体的结构:
这是一条人的神经元,它的末梢能够感知到一些情况,比如:温度、湿度、压力、干燥情况等,这些情况通过神经元传输给大脑。
对于AI,也是这样的。有一个例子是这样的:一个大学生在4个方面的特征决定了他的恋爱次数:外貌X1,性格X2,财富X3,内涵X4 , 给这4个方面进行赋分,想得到他在大学里的恋爱次数。这个时候神经元接收到外部的信息,从而进行一个判断,得到恋爱次数,这个公式写起来也很简单:
我们都知道,人的神经元不是只有一条的,是有多条的,也就是说,多条神经元接收到相同的外部信息,再把信息传输给大脑,让大脑做出决断。我们的人工智能也是一样,也是有多条神经元传输信息。这样子,整个神经元就变宽了,由上述的一个神经元变成了三个;也变深了,从一层变成了两层。
2.神经元与矩阵
我们知道一个神经元:,它可以写成 ŷ=wx+b ,那上述的这个复杂网络又该怎么表示呐?
r1,r2,r3可以这样表示:
r1 = b1 +w11 * x1 +w12 * x2 + w13 * x3 + w14 * x4
r2 = b2 +w21 * x1 +w22 * x2 + w23 * x3 + w24 * x4
r3 = b3 +w31 * x1 +w32 * x2 + w33 * x3 + w34 * x4
你们是否对这个东西感到熟悉,其实它就是线代中,线性方程组的表示方法,可以写成下面这样的形式:
这样,我们就把复杂的神经网络图,写成了矩阵相乘的形式。这里,又不得不说到 神经元:,它是 ŷ=wx+b ,只不过,这里的w和b是一个数。但是,这与神经网络图的表示方式是一模一样的,只不过,换成了矩阵的形式。实际上,神经网络的背后就是矩阵的运算。
最后,我们得到的上述神经网络的表示就是:
(这里的b是一个数,上面的b是一个矩阵。通常用粗体表示矩阵,细的表示数)
3.神经元的串联
人的神经元不是一根直接连到大脑,它是一根接一根的连到大脑的。神经网络和人类的神经元一样,在经过一次处理后,它不是直达终点,而是再传输给下一条神经网络处理,依次传递,最后到达终点
如果全等的传输信息,即从外界获取到5个信息,经过神经元的传输后,大脑也接收到5个信息,那么串联的神经元似乎只有传递的作用,,那么一根和多根似乎没有区别了。对于神经网络也是一模一样的,我们加深层数,是为了多进行一点计算,让神经网络变得更好,但如果只是单纯的线性加深网络,这没有任何意义。例如,在 上一篇文章(深度学习-CSDN博客)最后的例子:我们无法用一条直线分隔出正方形和三角形。
为什么说单纯的加深没有意义,我们可以算一下,以2层的神经网络为例:
可以算出:
r1 = b1 + w11 * x1 + w12 * x2
r2 = b2 + w21 * x1 + w22 * x2
z1= _b1 + _w11 * r1 + _w12 * r2
=_b1 +_w11(b1 + w11 * x1 + w12 * x2) + _w12(b2 + w21 * x1 + w22 * x2)
=b + u1 * x1 + u2 * x2
也就是刚才的两层神经网络变成了一层。
人类的神经元不是全等的传递信息的,它有自己的决定权。当接收到的刺激高于一定的阈值时,才会把信息传递给大脑。神经网络也有与人的刺激阈值相对应的东西,即激活函数。
激活函数
人的神经元有突触,突触在传递信息时会进行筛选,超过阈值的才传递,低于这个阈值的都抑制。
激活函数的作用也一样,在得到r1后,对r1进行一次激活函数的运算。
1.激活函数和非线性因素
(1)如果没有激活函数,无论网络多么复杂,最后的输出都是输入的线性组合,而纯粹的线性组合并不能解决更为复杂的问题。这一点我们在前面已经验证过。
(2)引入激活函数之后,由于激活函数都是非线性的,这样就给神经元引入了非线性元素,使得神经网络可以逼近任何非线性函数,这样使得神经网络应用到更多非线性模型中。
(3)常见的且简单的激活函数:sigmoid() 和 relu()
(4)激活函数最重要的特性:能求导
2.激活函数的位置
激活函数在每个神经元的输出上:
3.激活函数的作用
有这样的一个神经网络:,
1)当没有激活函数,线性函数是线性时,预测函数和真实函数是这样的:
从图中,我们可以清楚的看到预测函数和真实函数是贴着的,也就是说,当真实函数是线性函数时,即使模型没有激活函数,它也能够准确的预测。
2)当没有激活函数,真实函数y = x^3 + 2 * x^2 ,预测函数和真实函数是这样的:
从图中我们看到,预测函数完全不能预测真实函数。因为无论怎么画,它都是一条直线,它怎么样都无法贴近曲线。
3)在模型上加一个激活函数sigmoid(),此时,预测函数变成了曲线。
4) 在模型上加两个激活函数sigmoid(),此时,预测函数和真实函数贴的很紧。
当然啦,我们也可以加激活函数relu():
通过此,我们感受到了激活函数的强大作用。
标签:函数,多层,神经网络,深度,x2,激活,x1,神经元 From: https://blog.csdn.net/qq_53983845/article/details/145030341