|
|
|
@ -76,7 +76,7 @@
|
|
|
|
|
|
|
|
|
|
### 语义关系学习(多头注意力)
|
|
|
|
|
|
|
|
|
|
> Multi-HeadAttention
|
|
|
|
|
> Multi-Head Self-Attention
|
|
|
|
|
>
|
|
|
|
|
> WHY:捕捉多种语义关系,提高模型的表达能力。如LLM是大模型的缩写,同时也是法学硕士的缩写。亦或者冬天里的能穿多少穿多少,跟夏天里的能穿多少穿多少。
|
|
|
|
|
|
|
|
|
@ -92,7 +92,7 @@
|
|
|
|
|
|
|
|
|
|
### 数值缩放
|
|
|
|
|
|
|
|
|
|
> Add & Norm
|
|
|
|
|
> Addition and Normalization
|
|
|
|
|
>
|
|
|
|
|
> WHY:前面我们讲到,矩阵里的数字越大,表示跟其它词的语义关系越紧密,如果两个大值相加,很可能就造成大的值特别大,小的值特别小。所以要统一到一个维度,特别是深度学习场景里,由于深度学习是矩阵乘法, 所以大值或者小值都会被无限放大,导致模型不稳定。
|
|
|
|
|
|
|
|
|
@ -106,6 +106,8 @@ Add & Norm的过程可以理解为相同位置元素相加,再做层归一化
|
|
|
|
|
|
|
|
|
|
### 前馈神经网络
|
|
|
|
|
|
|
|
|
|
> Feed Forward Neural Network
|
|
|
|
|
>
|
|
|
|
|
> WHAT:数学上,对于每个位置的输入向量`x`,FFNN可以表示为:
|
|
|
|
|
>
|
|
|
|
|
> ~~~
|
|
|
|
@ -122,3 +124,51 @@ Add & Norm的过程可以理解为相同位置元素相加,再做层归一化
|
|
|
|
|
|
|
|
|
|
当数据输入到神经网络后,经过一系列运算(点积),输出的数据一般是非线形的。而且维度输出的维度与输入的维度是不变的。种设计允许FFN在不改变输入和输出维度的情况下,增加网络的非线性和复杂性,从而使模型能够学习更加复杂的特征表示。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 最后一个数据缩放
|
|
|
|
|
|
|
|
|
|
同样,当数据进行点积后,大值会越来越大,小值也会越来越小,所以再做一次数值缩放。另外整个子模块会进行多次叠加,即前面说到的如GPT叠加了175层。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 特征变换映射(全数字列表)
|
|
|
|
|
|
|
|
|
|
> Linear
|
|
|
|
|
|
|
|
|
|
前面数据经过最后一次缩放后,线形变换用于将模型的内部表示转换为最终输出,通常是一个预测任务,如语言模型中的下一个词(话)预测。
|
|
|
|
|
|
|
|
|
|
里面包含着我们输入的文字,如果是3个,就会有3个字的列表(1万个字就是1万个字的列表),每个字都有一个概率。预测下一个字,就是找出3个字里概率最高的。当然训练过程肯定不止3个字,如GPT就有xxx个字,那么"LLM with me"的下一个词的概率,一般展示如下:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
{
|
|
|
|
|
"is": 0.10,
|
|
|
|
|
"the": 0.05,
|
|
|
|
|
"a": 0.03,
|
|
|
|
|
...
|
|
|
|
|
"learning": 0.07,
|
|
|
|
|
...
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
如果是预测下一个句子,通常会采用一种称为“自回归语言生成”的方法,在这种方法中,模型会一次生成一个词,然后将生成的词作为下一个预测的上下文的一部分。这个过程会重复进行,直到生成一个终止符号(如句号或特殊的结束标记),或者达到预设的最大长度限制。中间阶段的展示一般如下:
|
|
|
|
|
|
|
|
|
|
~~~
|
|
|
|
|
[
|
|
|
|
|
{"sequence": "The cat is", "probability": 0.09, "next_words": {"sitting": 0.5, "sleeping": 0.3, ...}},
|
|
|
|
|
{"sequence": "She went to", "probability": 0.07, "next_words": {"the store": 0.4, "school": 0.2, ...}},
|
|
|
|
|
...
|
|
|
|
|
]
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
> 当然,模型一般会采用某种策略(如贪婪搜索、束搜索(beam search)或采样)来逐步构建句子,而不是会生成这么庞大的组合,因为一个句子可能有几千甚至几万个词。
|
|
|
|
|
|
|
|
|
|
每个条目包含了当前的候选序列("sequence"),该序列的累积概率("probability"),以及下一个可能的词及其概率("next_words")。模型会在每一步更新这些候选序列,直到生成完整的句子。
|
|
|
|
|
|
|
|
|
|
~~~
|
|
|
|
|
[
|
|
|
|
|
{"sequence": "The cat is sitting by the window.", "probability": 0.08},
|
|
|
|
|
{"sequence": "She went to the store to buy some groceries.", "probability": 0.06},
|
|
|
|
|
...
|
|
|
|
|
]
|
|
|
|
|
~~~
|
|
|
|
|