引言
如今AI热潮席卷而来,深度学习、神经网络等名词也或多或少的映入每个人的眼帘,然而,面对这些逼格满满又苦大仇深的专业词汇,我们作为一个没有接触过的普通人,往往会有隔离与疏远感。本文的目标,是帮助揭开AI的面纱,初步理解深度学习的基本概念。
1. 深度学习学的是什么?
1.1. 神经元与网络
通过数学模型模拟人脑的神经元网络结构来处理数据。
人脑是如何处理数据的呢?神经元与神经元相连接,数据以电信号的形式在神经元网络中传播。
深度学习模拟的就是电信号在神经网络中传播的过程:
实际概念 | 数学模型概念 |
---|---|
电信号 | 张量(多维向量) |
神经元 | 数学公式:y = G(ax+b) |
神经元的连接方式 | 数学公式的参数传递方式(不同网络类型) |
y = G(ax+b)
x-输入 | a-权重 | b-偏移 |
---|---|---|
y-输出 | G()-激活函数 | ax+b-加权和 |
1.2. 正向传播
各个神经元的权重、偏移量等值是随机初始化的,正向传播的过程是将一组数据放入模型,从左到右走完整个网络,得到模型计算值(预测值)的过程。
1.3. 损失函数
损失函数是一个评价函数 P(预测值) = 损失值,损失函数越小,则模型表现越好,这里,就涉及到了两大类损失函数:
- 监督学习,有打标,也就是标准值,损失函数可以理解为 P(预测值) = |预测值 - 标准值|
- 无监督学习,没有打标,损失函数是一个计算函数,来评价学习结果的好坏,这里不具体展开,只需要简单理解,将预测值带入函数,会得到一个评分即可。
1.4. 反向传播
反向传播是深度学习训练最重要的环节,因为这个环节会对模型参数进行调整,以尽可能得到更小的损失值,我们继续以上面的过程为例子:
损失值 = P(预测值) = P(G(ax+b)) = PG(a, x, b)
我们希望改变a的值,让损失值变小,因此,我们就可以对PG(a,x,b)求a的导数,让a沿着斜率(梯度)下降的方向变化。
2. NLP自然语言处理问题的神经网络
实际上,自然语言处理是一个很大的范畴,但落到如今,我们更常提到并且更感兴趣的,是生成式的语言大模型。那么,语言大模型是如何完成对话的,其训练过程又是如何呢?
2.1. 你吃了吗?吃了!
我们以【你吃了吗?吃了!】这组对话为例,结合我们第一章提到的深度学习过程,来复刻模型的训练过程:
上面演示的是一个最简单的对话训练过程,在这个过程中,首先要把输入(你吃了吗?)与输出(吃了!)编码成数学模型能直接计算的数据,之后,经过深度学习梯度下降的过程,完成模型训练。
这个时候出现了一个问题,和我们做赏析题一样,现实中,往往问题很短,但是答案很长,
2.2. 孤勇者
这时,聪明的我们就想到了一个办法,我们能不能把一段连续的字符串切割成一个个子串,然后将某个子串作为输入,计算下一个字是什么:
都
都是
都是勇
都是勇敢的
都是勇敢的,
都是勇敢的,你
都是勇敢的,你破
都是勇敢的,你破旧
都是勇敢的,你破旧的
都是勇敢的,你破旧的玩
都是勇敢的,你破旧的玩偶
随着字符串越来越长,那么编解码过程造成的信息失真就会非常严重,那么该如何解决这个问题?
这个时候就要提到包括ChatGPT在内的主流大模型都会使用的自注意力机制,在这里,我们不解析原理,只分享表现,所谓的自注意力机制,就是模型在生成文字的过程中,会考虑已经生成的词语之间的关系以及对生成的下一个词语的影响:
- 红色的字,是正在生成的字。
- 灰色的字,是对红字生成影响不大的字。
- 蓝色的字,是对红字生成影响更大的字。
都
都是
都是勇
都是勇敢
都是勇敢的,
都是勇敢的,你
都是勇敢的,你破
都是勇敢的,你破旧
在自注意力机制的影响下,语言的生成可以更加准确。
2.3. 整体流程
3. 什么是注意力机制是什么?
在上面一节,我们提到了注意力机制,那么什么是注意力机制呢?
3.1. seq2seq问题
AIGC生成式大模型于我们而言,最直观且最常见的表现形式就是Q&A,我们提出问题,模型做出回答,回答的过程,而这个问题,本质上就是通过一个字符序列推演出另一个字符序列的过程(seq2seq问题)。
我们无法穷举所有seq的可能,因此,解决seq2seq问题,就需要对seq进行语言识别(或者说编码),以下面的对话为例:
-你吃了吗?/你吃饭了吗?/恰好了吗?
-吃了。/好了。/吃完了。
我们可以看到,一个相同的问题和回答有不同的seq呈现形式,编码的过程,就是将上述提到到问题抽象出其本意(对于吃饭的询问),而在数据的世界中,一切仪式形态的终极都是数字的排列组合(多维矩阵)。因此,在数学世界中,解决seq2seq问题,就需要针对问题,通过编码的形式转化为语义矩阵,之后对矩阵进行推演,生成答案的矩阵,最后,经过解码的过程生成,从答案矩阵中得到我们想要的结果。
seq是由一个个元素组成的,不同的元素组成方式,最终的语义也是相去甚远,因此,如何在编解码的过程中合理准确的考虑seq组成元素间的组合效果,是问题的关键所在。
3.2. RNN与CNN
针对我们上面提到的问题,有两种常用的思考方式:
- RNN
RNN的方案很简单,我们在对seq中的第N个元素编码时,同时考虑前N-1个元素的编码结果:
通过这种递归的方式(本质是一个马尔可夫决策链),最后推演出整个seq的语义。
- CNN
CNN(卷积神经网络),本质上是考虑一个范围区间内数据的影响:
如上,同时考虑N-1,N,N+1三个元素对语义的综合影响,遍历整个seq的所有元素,最后得到整个seq的语义。
3.3. Attention机制
上面提到的RNN与CNN本身都是有一定缺陷的,不过这对于我们非算法研究者而言,不是关注的重点,对于RNN与CNN的介绍只是想让大家都对seq2seq问题有一个初步的概念。
GhatGTP解决seq2seq问题用的是Attention注意力机制。Attention 的思路是一步到位获取全局信息:
(A,B是全局序列矩阵 )
Google模型中的注意力机制如下:
其中的Q、K、V是三个矩阵,这3个变量都是由原seq对应的矩阵与参数矩阵乘积得到的。