一、介绍
网上现在狂推说AI要崩盘了,不管它,继续搞AI的学习。还是那句话,只有在灰烬上才能建起高楼大厦。没有毁灭,哪来的新生。
AI和大模型的底层,基础其实就是神经网络。大模型之所以叫大模型,原因就在于大字。而大家都明白,一下子掌握大很有难度。但可以从小开始,掌握原理,然后再一点点的扩大。至于能不能成为大模型开发者,除了个人的能力和意愿,更多还是机会和环境。
二、神经网络的组成
所谓神经网络,听名字就知道,它是模仿人类大脑神经元连接机制构建的可学习计算模型。其中包含大量人工神经元及相关带权重的连接。它能够从海量数据中自行提取规律、完成复杂任务。目前的AI大模型,本质上就是神经网络整体规模上的极大的扩展。
它主要包括基础计算单元(神经元)、输入层和输出层、隐藏层、连接参数、非线性组件、训练配套模块等组成。掌握好神经网络的计算原理,是学习大模型的重要基础。
三、学习过程的分析
在现实的世界中,如果人类面对一系列的数字和文字,除非那些文字或图片非常模糊或者变形,否则,基本都能正确的辨识出来。举个例子,大家可能都有过升学、参军或学车时的色盲检查,其实就是从纷乱的不同颜色的图元像素中,找出具体的数字或图形。对于正常人来说,可能这非常自然。可对于程序员来说,如果让你写一个程序来象人一样识别这些图像或数字呢?如何处理面对的对象整体的变形、明暗、大小和颜色等等呢?
以常见的数字识别为例,一个正常的老师,很容易分别小学生的各种歪七扭八的数字是否正确。而前面讲到神经网络对于处理这种数字的识别,天然也具有优势。下面就以识别数字的简单神经网络为例分析说明一下神经网络工作的过程。
一个数字是由像素组成的,以28*28个大小的像素处理来看,一个数字就是这784个像素的边缘特征来判断出来的。这和人通过数字的形状、走势和大小缩放等判断没有什么不同。也就是说,判断不是简单靠长得一样,而是靠边缘特征来确定的。
那么神经网络是如何处理这个过程的呢?首先要明白,神经网络组成的基本单元神经元在这种数字分析中,到底做了什么。其实它做得非常简单,就是正确的得到0~1之间的数字,而这个数字就是激活值,当这个值越大(即趋近于1),像素就越明亮(有过图片分析的很容易明白,这里以灰度图说明);反之则越暗,界于二者之间的,则为不同的灰度。
一个数字有784个像素,也就是说有784个神经元。即被识别的数字的图像像素与神经元是一一映射的。那么最终结果,这个数字就被784个0~1的数字(激活值)所代表。这些数字就会输入到神经网络的输入层中。
在输入层,被分解的像素的数字特征(激活值)会被输入到N层的隐藏层,即输入层的数字进入第一个隐藏层处理,然后得到进入第二层数字,再交第二层处理,如此反复,直到隐藏层结束(这只是简单的神经网络,真正的神经网络还会有反馈等复杂的操作)。最后交由输出层进行行判断。也就是说,在这种情况下的神经网络,前一层的结果影响着下一层的输入。
有过开发经验的都知道,一个大的问题往往难于直接处理,但若是把它们拆解成一个个小的问题,则可以分而治之,这就是典型的分治法的解题思路。而神经网络的解决问题的机制也和其有些类似,它也天然更适合于这种情况即分层处理问题。对于一个待识别的数字来说,它有什么特征呢?这很容易找出来。比如1,就是近假于一段范围内的很小弯曲的高亮像素组成;8,有两个近似圆圈的上下连接组成,等等。找到这些特征,才能更好的解决数字歪曲、大小不同(缩放)等不同的场景下的差别。而在神经网络中,可以把这些特征再进行细化,比如找出关键的位置特征。
此时,可以把隐藏层的第一层,用来处理最低粒度划分的特征组成,第二层处理稍粗细节的特征,第三层继续如此...直到达到最后一层识别整体的特征,得到满意结果为止。比如0,只要识别出一个类似圆圈的结果就说明它是0。而如何识别圆圈,则可以把圆圈更细分多个关键的线段即可。把这些细节从细到粗依次送入隐藏层即可达到识别数字的目的。是不是觉得,可以扩展将其用来处理更复杂的任务,只是细节划分的更密即可。OK,简单的来说,这是没有大问题的。
那么一个细节特征是如何被判断成功的呢?其实很简单,以上面的数字识别为例,只要把输入的784个神经元与需要识别的特征(比如某个直线或斜线)的相关神经元进行匹配即此神经元与784个输入的神经元全部连接,然后这个连接上都设置一个连接权重,神经网络会把输入的激活值和权重相乘然后把所有结果相加得到一个结果(加权求和值)。
那么如何计算权重值呢,可以看这些数字图片的特征,比如1,除了一条直线外内的像素和周边很近的一些像素权重会高,而其它地方的权重可以视为0.也就是说,神经网络希望哪里更应该出现明亮的像素,哪里更不应该出现。而禁止出现的地方则为负权重。这样就可以发现,如果这样计算出来的加权和,结果往往更趋近于正确的识别结果。
神经网络是分层的,可以先从局部的最小的粒度区域开始进行加权和处理,而不关心的区域可以不做处理,将其权重设置为0.这样,通过一个基本的神经元,就可以确定一个数字图片的特定区域的特征图案(比刚才提到的斜线、圆等)。当多个不同个处理不同特征图案的神经元组合起来后,就可以得到一个激活值。不过这个值可能很大,这需要怎么做?归一化。这里一般可以使用Sigmoid这种非线性激活函数来实现。它得到的结果,就是一个0~1的范围的数字。而为了调整神经元的激活门槛(因为计算的数据可能超出范围),会设置一个偏置值即将神经元激活的触发值更准确,这意味着提高神经元的兴奋性(偏置越大,兴奋越明显,神经元越容易激活)。
z=∑i=1nwixi+bz = \sum_{i=1}^{n} w_i x_i + bz=∑i=1nwixi+b
其中b为偏置值,很容易理解上面的分析说明了。即权重侧重于对图案类型的处理,而偏置决定了图案高亮的阈值。通过上面的分析可以看到,这个神经网络仅仅处理第一层就需要784*(每层的神经元个数,至少是十几个)个权重参数及对应的相关偏置参数。如果有多层,会有多少个参数呢?而前面说过,大模型是神经网络的极大扩展,那也就明白大模型为什么称之为大模型了。而所谓调参,其实就是调整这些值。让这些值可以进行正确的判断,从而实现神经网络的训练。
而在神经网络中,实现其的方法就是前面提到的向量和矩阵。激活值可以是一个列向量,而权重可以是一矩阵,它连接下一层对应在神经元。将激活值的向量和权重矩阵相乘后就可以计算出下一层所有神经元的加权和,再加上偏置数,如此到最后再使用激活函数即可得到最终的判断结果。
而在输出层,则对应着10个最终的数字结果即0~9,它们由10个神经元代表,当前面的神经网络计算完成后,这十个神经元会得十个不同的激活值,其中哪个最亮(上面隐藏层输出的结果),即趋近于1,则说明神经网络判断哪个数字被认为是正确识别的结果。
从整体来看,可以将神经网络看成一个黑箱,即一个函数。通过输入参数(前面的权重等),利用隐藏层提取数字图像像素的边缘特征,最终根据特征结果判断输出10个结果的概率值。
四、总结
从上面的分析可以看出,总说大模型就是数学和统计学的结合,是非常有道理的。正是通过严密的数学计算和概率分析,才能够正确的映射输出的结果。明白了这点,也就打破了AI大模型的高不可攀的形象。这也是学习的第一步,知其所以然,方可循序渐进,学有所得。