肇庆企业自助建站wordpress动图
文章目录
- 主流应用方向
 - 核心流程(5步)
 - 1.选定语言模型结构
 - 2.收集标注数据
 - 3.forward 正向传播
 - 4.backward 反向传播
 - 5.使用模型预测真实场景
 
主流应用方向
- 文本分类
 - 文本匹配
 - 序列标注
 - 生成式任务
 
核心流程(5步)

基本流程实现的先后顺序(每一步都包含很多技术点):
1.选定语言模型结构
- 语言模型作用
判断那一句话相对更合理,相对不合理的会得到较底的分值,需要挑选成句概率分值最高的。 - 评价指标:PPL(Perplexity) 困惑度 
- 评估一个语言模型在给定数据集上的预测效果
 - PPL 值与成句概率成反比(PPL 越小,成句概率越高)
 
 - 模型分类 
- SLM 统计语言模型
ngram - NLM 神经语言模型(2003)
RNN(循环神经网络)
LSTM(RNN 进阶版)
CNN(卷积神经网络)
GRU - PLM 预训练语言模型(2018) 
- 基于 Transformer 架构 
- BERT(预训练模型)
生成式任务是逐词预测,bert 是预测缺失的词或者句子前后关系 - GPT
生成式模型 - 一系列类 bert 模型
 
 - BERT(预训练模型)
 
 - 基于 Transformer 架构 
 - LLM 大语言模型(2023)
GhatGPT 
 - SLM 统计语言模型
 
2.收集标注数据
- 样本数据
 - 预测数据
 
3.forward 正向传播
- 模型超参数随机初始化
 
- 训练轮数:epoch_num
 - 每次训练样本个数:batch_size
 - 样本文本长度:window_size
 - 学习率:lr
 - 隐藏层:hidden_size
 - 模型层数:layer_num
 
-  
构建词表
load_vocab -  
构建数据集
dataset -  
模型组成
-  
离散值连续化(可选)
- Padding(可选) 
- 将不同长度的文本补齐或截断到统一长度
 - 使得不同长度的文本可以放在同一个batch内运算
 - 补齐所使用的token需要有对应的embedding向量
 
 - embedding 层 
- 作用: 
- 将字符转为向量
将离散型的输入数据(如单词、类别等)映射到连续的向量空间中 - 核心
将离散值转化为向量 
 - 将字符转为向量
 - 形状:[vocab_dim, hidden_size]
hidden_size 是embedding 的下一层模型的输入形状 
 - 作用: 
 
 - Padding(可选) 
 -  
模型结构处理连续数据
 -  
pooling 池化层
embedding 结果要先转置后才能 pooling
embedding.transpose(1,2)- 作用 
- 降低后续网络层的输入维度
 - 缩减模型大小
-提高计算速度 - 提高鲁棒性,防止过拟合
 
 - 分类 
- 平均池化
 - 最大池化
 
 
 - 作用 
 -  
全连接层
- 作用 
- 将前面层提取到的特征进行组合和加权
 - 参数可通过反向传播学习,适应不同数据和任务
 - 提高模型的表示能力 
- 更好地捕捉数据中的复杂模式和关系
 - 通过堆叠多个全连接层,结合非线性激活函数,模型就可以学习更复杂的非线性映射
 
 - 分类与回归 
- 分类任务中 
- 将特征映射到不同类别的概率分布上
 - 方便模型对输入进行分类
 
 - 回归任务中
生成连续值的预测 
 - 分类任务中 
 
 - 参数 
- 权重(Weights) 
- 是模型中每个神经元或连接的参数
 - 权重矩阵定义了输入和输出之间的关系
 
 - 偏置(Biases)
额外参数,与权重一起用于计算激活函数的输入 
 - 权重(Weights) 
 
 - 作用 
 -  
激活函数(可选)
不会改变输入内容的形状- 作用 
- 引入非线性变换 
- 全连接层仅可线性变换
 - 将激活函数结果传递给下一个全连接层,可在学习复杂任务时,更好的表达数据的抽象特征
 
 - 约束输出范围
 - 提高模型的数值稳定性
 
 - 引入非线性变换 
 - 常用激活函数 
- Sigmoid
 - tanh
RNN 自带一个 tanh - Relu
可以防止梯度消失问题 - Gelu
 
 
 - 作用 
 -  
Normalization 归一化层(可选)
对输入数据进行归一化处理,使其具有零均值和单位方差,加速模型训练过程,提高模型稳定性和收敛速度 
- 代码
from torch.nn import BatchNorm1d
self.bn1 = BatchNorm1d(50) - 分类 
- 批量归一化 batch normalization
对每一层的向量求平均,再求标准差,之后进行公式计算,获得可训练参数- 样本与其他样本归一化,适合 cv
 - 适合两张图片之间相似度评价
 
 - 层归一化 layer normalization
纵向向量求平均,再求标准差,之后进行公式计算,获得可训练参数- 样本内进行归一化,适合 nlp
 - 适合文本
 
 
 - 批量归一化 batch normalization
 
- dropout 层(可选) 
- 代码
from torch.nn import Dropout
self.dropout = Dropout(0.5) - 是一种常用的正则化技术 
- 作用 
- 减少神经网络的过拟合
 - 提高模型的泛化能力
 - 强制网络学习更加健壮和泛化的特征
 - 减少神经元之间的依赖关系
 - 使得网络更加鲁棒
 
 - 在训练期间 
- 随机“丢弃”一些神经元
以一定的概率(通常在0.2到0.5之间)随机地将隐藏单元的输出置为零 - 保持总体期望值不变
将其余值按比例进行缩放 
 - 随机“丢弃”一些神经元
 - 在测试期间
Dropout不会应用,而是将所有神经元的输出乘以保留概率,以保持输出的期望值 
 - 作用 
 
 - 代码
 
 -  
 -  
获取预测值
 -  
计算 loss
是指预测值与样本真实值之间的loss计算。- 常见 loss 函数 
- 均方差(MSE)
回归场景 - 交叉熵(Cross Entropy)
分类场景 - BCE 0/1损失
分类场景,一般输入为 sigmod 的输出 - 指数损失
 - 对数损失
 - Hinge损失
 
 - 均方差(MSE)
 
 - 常见 loss 函数 
 
4.backward 反向传播
- Optimizer 优化器 
-  
Adam
- SGD 进阶版
 - 在模型的权重没有收敛之前(没有训练到预期结果之前),不断循环计算,历史每轮的梯度都参与计算。
 - 可无脑选择使用的优化器。是非常好的baseLine,一般出问题,不会因为adam 出问题。
 - 特点

 - 实现
 - 一阶动量
历史 n 轮梯度差值 - 二阶动量
历史 n 轮梯度的平方差 - 避免由于一阶动量与二阶动量初始值为零向量,引起参数估计偏向于 0 的问题 
- 一阶动量偏差修正
一阶动量历史累计值/(1-超参数 t 次方) - 二阶动量偏差修正
二阶动量历史累计值/(1-超参数 t 次方) 
 - 一阶动量偏差修正
 - 权重更新
 
 - 一阶动量
 
 -  
SGD
计算逻辑:新权重 = 旧权重 - 学习率 * 梯度 
- optmi->梯度归零
optimizer.zero_grad() - loss->反向传播,计算梯度
loss.backward() - optim->更新权重
optimizer.step() 
 -  
 
5.使用模型预测真实场景
经过前4步,得到训练好的模型,将模型投放到真实场景进行预测。
