From c5f8939a4a0834dd51dfd6c58ffb48c9a2e93833 Mon Sep 17 00:00:00 2001 From: "ben.guo" <909336740@qq.com> Date: Thu, 25 Apr 2024 11:05:00 +0800 Subject: [PATCH] =?UTF-8?q?Add.=20=E7=89=B9=E5=BE=81=E5=8F=98=E6=8D=A2?= =?UTF-8?q?=E6=98=A0=E5=B0=84=EF=BC=88=E5=85=A8=E6=95=B0=E5=AD=97=E5=88=97?= =?UTF-8?q?=E8=A1=A8=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 10244 -> 10244 bytes .../第一章——Transformer网络架构.md | 54 +++++++++++++++++- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/.DS_Store b/.DS_Store index 4186fe55c54feb6f70fe574b90e822628af97600..1fbb0fd6d87b3e272a2580ceb629eb602a30aac8 100644 GIT binary patch delta 219 zcmZn(XbISmD!|A-dAD#hBgf>&qTZ8v1s#}$q@*VY2#O2E3-A|bxlp@CsK!(xW@3JPOcQ( 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}, + ... +] +~~~