LLM
ML
机器学习(Machine Learning,ML)是指从有限的观测数据中学习(或“猜测”)出具有一般性的规律,并将这些规律应用到未观测数据样本上的方法
机器学习三个基本要素:模型、学习准则和优化方法
机器学习的目标是找到一个模型来近似真实映射函数或真实条件概率分布 。 由于这个函数是未知的,所以只能根据经验来确定一个假设函数集合F,称为假设空间(Hypothesis Space), 然后通过观测其在训练集 D 上的特性,从中选择一个理想的假设(Hypothesis) 。 假设空间 F 通常为一个参数化的函数族,其中 为假设空间中的模型,θ 为一组可学习参数,m 为参数的数量。
题目
- 基本模型有啥,是干什么的
- 各个模型为了解决什么东西
- 机器学习的训练测试验证集合是什么,怎么用的
- 机器学习的输入是什么?输出是什么?
- 模型训练是在干什么事?
- 为什么机器学习是在”训练“模型
- 什么是欠拟合和过拟合
- 机器学习的训练目标是什么
- 监督无监督和强化是什么
NLP
预处理(preprocess) -> 分词(Tokenization) -> 模型优化(optimization) -> 模型(会拿transformer举例) -> 精调(fine tuning)
预处理(preprocess)
机器学习极其依赖数据的质量,因此在训练前数据的预处理永远都是最关键的一步
LLaMA这个工作的贡献之一就是证明了只用开源数据也能训练出decent performance的LLMs。这可以算得上是对OpenAI花大价钱搞独家数据这一都市传说的回应。事实上只要开源数据保证数量和质量,LLMs的表现不会在数据方面出现瓶颈(至少当下还没有)。
总结来看,数据清洗可以分为以下几点:
去重:去重是防止模型过拟合的格外重要的一步。 去低质量内容:低质量文本对模型效果,和训练进度都有很大的负面影响。 解析.HTML/.tex文件,取得纯文本:这个不用解释,就是取得干净的文本内容必须的过程 合规方面考虑:包括考虑数据源的license,过滤有毒信息,个人隐私信息等内容。
题目
- 预处理做了什么?
- C4、CommonCrawl等开源数据源是什么,如果有条件可以下载一些浏览看看
- 这些数据是如何应用到模型的训练中的
分词(Tokenization)
分词,简而言之就是把一句话分成多个词组,例如我是一个人类,我喜欢水果可以被分词为["我", "是", "一个", "人类,", "我", "喜欢", "水果"]。
由于机器是无法直接理解人类语言的,因此人类语言首先要被转化为机器可以理解的向量(这个向量维度越高,所包含的信息也就越多),而在自然语言,词是最小的单位,如果直接把一整句话转化为向量便会丢失大量的信息,所以我们需要首先把句子拆分为词组,然后再对每个词转化为向量,最后将一句话的所有向量拼接成矩阵(例如一个句子分词后有N个词,每个词的向量维度为M,那么就可以组成一个N*M的矩阵)
题目
- 分词干了什么事?
- 为什么需要把句子分词?
- bpe、wordpiece和unigram language model这三种分词模型的原理是什么?
- 什么是词嵌入
- 如何解决不同长度句子的转化为矩阵后的维度不一致的问题?
模型优化(optimization)
梯度下降
机器学习本质是将一个 输入的 矩阵通过计算转化为另一个 的输出矩阵,而模型内的所有参数都是以矩阵的形式存在的,模型训练即用训练集的输入输出去逐步地优化模型参数,让模型在训练集上的输出更加贴近实际输出(比如线性回归就是一个梯度下降优化的过程)。
题目
- 什么是梯度下降
- 梯度下降是如何计算的
- 手推一下梯度下降的公式
学习率
传统的基于固定学习率的梯度下降算法无法有效的解决鞍点,因此在大模型的训练里我们会用到更多看起来很花哨的梯度下降算法
本节你需要了解:
- 鞍点是什么,如何解决训练中的鞍点问题
- 定量了解momentum、adagrad、adam优化算法的原理
损失函数
模型训练时,我们需要一个函数去评估模型的输出和实际输出的损失有多大
需要看的文档:
本节需要了解:
- 损失函数是什么,最好代码层面实现一下
- 交叉熵损失函数和最大似然函数是什么,解决了什么问题
- 定量了解交叉熵损失函数和最大似然函数的推导
- 交叉熵函数和最大似然函数的区别是什么
正则化
正则化就是避免模型训练中的过拟合现象,通过引入噪音,清洗数据集的方法让模型的训练更不容易出现问题
本节需要了解:
- 正则化是什么,有什么作用
- 尝试用代码写正则化
激活函数
为什么需要在单个神经元的输出经过激活函数:1. 解决线性不可分问题;2. 避免梯度消失和梯度爆炸;3. 归一化
本节需要了解:
- 激活函数常见的有哪些
- 定量了解为什么需要激活函数