深度神经网络的许多参数是可以学习得到的
先定义一个损失函数,输入数据后通过误差反向传递,进行权重更新
此处讲批量归一化和层归一化
1 Batch Normalization
对数据进行标准化,使得数据均值为0、方差为1,可以使得损失函数更加平滑(当x和y相隔较远时,其导数不会有太大变化,这样子学习率可以设定得更大一些,即步长更大)。
主要分为4步:
- reshape变形:把输入变形为2D矩阵
- normalize标准化:每一列进行标准化 x = [x-mean(x)] / std(x)
- recovery还原:y = γx + β,有时候还是希望有点噪声,γ、β可学习
- 把y还原为原来的维度进行输出
2 Layer Normalization
主要用于循环神经网络RNN中
LN与BN的不同在于reshape时结果会进行转置,其余的和BN一致
其优势在于,数据的均值和方差是在样本中,预测时不需要存储全局的信息
3 微调 in 迁移学习
- 从一个模型中训练出特征,把这个特征拿去给别的模型使用
- 在另一个相关的模型使用训练出的结果
- 新模型有一些调整也可以使用原来的训练结果
预训练模型:
神经网络大致可分为两块
编码器:即特征提取器,把原始像素转换为线性可分特征
解码器:即线性分类器,进行数据标号或者做一些决策
而预训练模型一般是在比较大的数据上训练,具有一定的泛化能力,虽然在最后的解码器中不太起作用,但是在编码器中多多少少学到了东西
新的模型上架构应该是一致的,可以进行一些微调
预训练模型可以去tensorflow hub、TIMM找
4 微调 in NLP自然语言处理
NLP中没有像在CV中的标注好的大模型,而是有大量的没有标注的语言文档
所以NLP更多使用自监督训练,即标号是自己产生的,著名模型有Language model(LM,预测下一个词)、Masked language model(MLM,随机遮挡词语并进行预测,即完形填空)
预训练模型:
- Word embeddings:完形填空
- 基于transformer
大致原理也和CV预训练模型一致
找预训练模型可以去huggingface