1.神经元——思维的基本单元
我们知道一方面计算机以速度飞快而称奇,但是对于事物识别以及复杂的任务却无能为力,另一方面人类没有计算机快,但是可以做很多极其复杂的事情。一只苍蝇有10万个左右的神经元就可以完成飞行,寻找食物,躲避天敌等等很复杂的任务。一只线虫仅仅有302,个神经元,却可以完成蠕动等相当有用的任务,但是这些任务对于飞快的计算机却很难完成。
下面是一个神经元图:
由树突,细胞体,轴突,髓鞘,以及轴突末端的突触组成。
图片来自网路
下图为秀丽隐杆线虫的神经元连接图,即线虫的神经网路,可见其结构还是相当复杂的。
秀丽隐杆线虫,图片来自Nature, 2019, doi:10.1038/s41586-019-1352-7。
生物学家研究发现,电信号与化学信号在神经元间传递,比如你打针的时候,针会刺疼你,针扎的这种信号通过皮肤传到脑神经。针扎的疼痛因素只有激活痛感受器,将其转化为痛信号经背根节神经元的中枢突传递至脊髓背角,由此处的投射神经元形成上行传导通路,经脑干、丘脑等多级中继到达皮质,才能产生痛感觉。也就是说只有针扎程度达到一定阈值才能激活痛觉。
下图为生物神经元与人工神经元的比较图,是不是有很多相似之处。
如:一个树突好比一个输入,轴突好比一个输出总口,轴突的每一个末端突触类似于一个输出,神经元细胞体类似于一个激活函数,因为输入细胞体的信号只有达到一定的阈值细胞体才会处理才会,除此外神经元细胞体可能还有其他处理。
图片来自网络
受神经元启发,人们发明了人工神经元。如下图其基本思想是:所有输入神经元的信号按一定的权重同一时刻叠加到一起,然后叠加的和信号超过一定的阈值时才会触发神经元的输出。
用公式描述一个人工神经元:
1.output为神经元的输出;
2.x1——xn为神经元的n个输入;
3.w1——wn为神经元对应n个输入的权重;
4.b为受外界影响的偏移量;
5.f是激活函数,也就是可以控制输出的函数;
所以从本质上讲一个人工神经元就是一个n元的线性函数加一个非线性的处理。
图片来源网络
2.神经网络——智能产生的地方
如下图所示为人脑的神经网络彩图和人脑示意图,数以亿计的神经元以各种各样的连接组成一个巨大的神经网络,从而让人处于生物界智慧的顶端。
图片来源网络
模拟生物或者人类的神经网络,产生了人工神经网络。如下为一个7层的人工神经网络和3层人工神经网络。
人工神经元连接到一起形成了人工神经网络,信号从神经网络的最左侧流向最右侧,即信号从输入层输入,穿过中间层,最终流向输出层。
前面说过,每一个神经元相当便于一个n元的线性函数加一个非线性的处理,那么人工神经网络就是多层的多个n元的线性函数加一个非线性的处理的多次叠加与非线性处理,这样想的话人工神经网络确实是一个很复杂的东西,让人很难理解,不过我们不用想那么多,就这么个东西却有很大的用处。
我们以最简单的二层人工神经网络来理解,如下图所示,第一层有3个人工神经元,第二层有2个人工神经元。
信号流向从第一层流向第二层最后输出,可见第一层的输出对于第二层就是输入,所以
第二层的第一个神经元的输出可以写为:
类似第二层的第二个神经元输出可以写为:
其中,w1为第一层第一个神经元与第二层第一个神经元之间的连接权重,其余权重以相同的方式理解。为了便于记忆:我们把第1层第i个神经元与第二层第j个神经元的连接权重用
表示,把第一层第i个神经元的输出用 表示,第二层第j个神经元的输出用 表示,那么下面的二层神经网络输出可以表示为:
仔细观察这两个表达式,忽略掉g激活函数,感觉有些像线性代数里的线性方程组。
我们知道线性方程组可以用矩阵来描述,所以二层神经网络的输出是否可以用矩阵来描述呢?答案是肯定的。
使用矩阵描述二层神经网络如下:
简写为:
受二层神经网络的启发,那么更多层神经网络能否用矩阵描述呢?很明显也是可以的。因为3层是2层的拓展,更多层又是3层的拓展,所以矩阵的乘法可以表示多层神经网络。
由于篇幅问题,后续的神经网络算法和参数内容放到第二篇来阐述,第三篇讲述神经网络的python实现代码以及训练和测试情况。
手写神经网络源代码下载地址: https://download.csdn.net/download/xipengbozai/19781210?spm=1001.2014.3001.5501
转载自https://blog.csdn.net/xipengbozai/article/details/118115444