史上最通俗易懂的手写人工神经网络——(一)(转载自https://blog.csdn.net/xipengbozai/article/details/118115444)...

1.神经元——思维的基本单元

我们知道一方面计算机以速度飞快而称奇,但是对于事物识别以及复杂的任务却无能为力,另一方面人类没有计算机快,但是可以做很多极其复杂的事情。一只苍蝇有10万个左右的神经元就可以完成飞行,寻找食物,躲避天敌等等很复杂的任务。一只线虫仅仅有302,个神经元,却可以完成蠕动等相当有用的任务,但是这些任务对于飞快的计算机却很难完成。

下面是一个神经元图:

树突细胞体轴突髓鞘,以及轴突末端的突触组成。

        图片来自网路

下图为秀丽隐杆线虫的神经元连接图,即线虫的神经网路,可见其结构还是相当复杂的。

 

秀丽隐杆线虫,图片来自Nature, 2019, doi:10.1038/s41586-019-1352-7。

生物学家研究发现,电信号化学信号在神经元间传递,比如你打针的时候,针会刺疼你,针扎的这种信号通过皮肤传到脑神经。针扎的疼痛因素只有激活痛感受器,将其转化为痛信号背根节神经元的中枢突传递至脊髓背角,由此处的投射神经元形成上行传导通路,经脑干、丘脑等多级中继到达皮质,才能产生痛感觉。也就是说只有针扎程度达到一定阈值才能激活痛觉。

下图为生物神经元与人工神经元的比较图,是不是有很多相似之处。

如:一个树突好比一个输入轴突好比一个输出总口,轴突的每一个末端突触类似于一个输出神经元细胞体类似于一个激活函数,因为输入细胞体的信号只有达到一定的阈值细胞体才会处理才会,除此外神经元细胞体可能还有其他处理。

 

                                                                图片来自网络

受神经元启发,人们发明了人工神经元。如下图其基本思想是:所有输入神经元的信号按一定的权重同一时刻叠加到一起,然后叠加的和信号超过一定的阈值时才会触发神经元的输出。

用公式描述一个人工神经元:

output = f(x1*w1+x2*w2+x3*w3+......+xn*wn+b)

1.output为神经元的输出;

2.x1——xn为神经元的n个输入;

3.w1——wn为神经元对应n个输入的权重;

4.b为受外界影响的偏移量;

5.f是激活函数,也就是可以控制输出的函数;

所以从本质上讲一个人工神经元就是一个n元的线性函数加一个非线性的处理。

 

                                                                图片来源网络

2.神经网络——智能产生的地方

如下图所示为人脑的神经网络彩图和人脑示意图,数以亿计的神经元以各种各样的连接组成一个巨大的神经网络,从而让人处于生物界智慧的顶端。

                                                                                                                                        图片来源网络

模拟生物或者人类的神经网络,产生了人工神经网络。如下为一个7层的人工神经网络和3层人工神经网络。

人工神经元连接到一起形成了人工神经网络,信号从神经网络的最左侧流向最右侧,即信号从输入层输入,穿过中间层,最终流向输出层

前面说过,每一个神经元相当便于一个n元的线性函数加一个非线性的处理,那么人工神经网络就是多层的多个n元的线性函数加一个非线性的处理的多次叠加与非线性处理,这样想的话人工神经网络确实是一个很复杂的东西,让人很难理解,不过我们不用想那么多,就这么个东西却有很大的用处。

 

我们以最简单的二层人工神经网络来理解,如下图所示,第一层有3个人工神经元,第二层有2个人工神经元。

信号流向从第一层流向第二层最后输出,可见第一层的输出对于第二层就是输入,所以

第二层的第一个神经元的输出可以写为:

z1 = g(a1*w1+a2*w2+a3*w3)

类似第二层的第二个神经元输出可以写为:

z2 = g(a1*w4+a2*w5+a3*w6)

其中,w1为第一层第一个神经元与第二层第一个神经元之间的连接权重,其余权重以相同的方式理解。为了便于记忆:我们把第1层第i个神经元与第二层第j个神经元的连接权重用

wij
 表示,把第一层第i个神经元的输出用 
ai
 表示,第二层第j个神经元的输出用 
zj
 表示,那么下面的二层神经网络输出可以表示为:

z1 = g(a1*w11+a2*w21+a3*w31)

z2 = g(a1*w12+a2*w22+a3*w32)

仔细观察这两个表达式,忽略掉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

猜你喜欢

转载自blog.csdn.net/xipengbozai/article/details/118205223