机器学习

dawn_r1sing Lv4

简单记录:B站机器学习-李宏毅

model

流程

training

  1. 对于pic,可以先经过edge detection……

  2. 确定有未知数的function,未知参数h - 取值空间H

    • |H| 为复杂度 == 选择的function数目
  3. 定义loss

    • 需要资料计算(x, y)=> D_train
    • 整个资料集的错误率cross-entropy (loss function):L( h, D_train )
  4. 进入epochs

optimization

找最优function的过程,不断调整w、b

最优参数:h* = arg min L(h, D_train)

优化算法

  • SGD
  • Adam

我们希望 L(h_train,D_all) -L(h_all,D_all) <= δ

1
任取 h∈H, |L(h,D_train) - L(h,D_all)| < δ/2	=>	D_train ≈ D_all 说明训练集有代表性

对于loss而言

  • N 越大越好
  • |H| 越小越好。但由于|H|很小,此时在D_all上计算的loss并不准确,即使此时loss很小、和D_all上计算的loss很接近
validation

为了防止出现overfitting的现象,我们在训练过程每个epoch最后阶段使用验证集检查loss是否开始上升

如果开始上升,我们需要调整超参数或停止训练

Validation set:D_val(development data)

  1. 过程:
  • 使用模型计算D_val的loss
  • 若loss开始开始上升,则说明可能发生overfitting,需要采取一些措施(如Reinforcement Learning……)或者及时止损
  1. overfitting
    • H - 待选model数:太多可能导致overfitting

testing

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Model
├── Network(众多神经元叠加成任意函数,本质就是精心设计的数学计算)
│ - Neural → activation function(不同神经元w、b不同)=> σ(w1*x1+w2*x2+……)
│ - Layer(s) → 多个neural(piecewise linear)加和逼近function 为一层,多层形成deep learning
│ - Connection → 权重参数
├── loss Function
| - classification:Cross-Entropy
| - regression:均方误差(MSE)
| - 生成任务:对抗损失(GAN Loss)
├── Optimization(反向传播到network)
| - 优化算法:SGD、Adam
| - 学习率调度:动态调整学习率(如余弦退火)
|── Inference Logic(推理逻辑)
| - classification:取概率最大值(argmax)
| - regression:直接输出数值
| - 生成任务:从分布中采样

概念讨论

batch

  • small batch v.s. large batch
    • large batch
      • 方差小,noisy小,容易停滞
      • 由于平行运算,一定程度上计算时间差不多;但还是有限的
      • large batch会导致正确率下降
    • small batch
      • 方差大,noisy大,一般来说比较分散
      • noisy 可以一定程度上缓解saddle point
      • small batch有利于testing
      • 一周期时长长

critical point

一阶导数为0

  • local minima 局部最小、saddle point 鞍点

  • hasson = 二阶导数矩阵 → 确认critical point种类

    • 特征值有正有负 → saddle point → 向负特征值对应的特征向量移动

hyperparameter

人所设定的参数,不是机器决定的

Loss function

error surface

根据model预测结果和实际结果做差得到的loss图

  • 三维
  • 等高线(和地理思路相同,陡 - 说明loss对于某参数的变化很敏感)

supervised learning

有label

学习和预测,回答有标准答案的问题

classification

预测离散的类别标签(如判断正误,判别种类)

  • 真实值y是0/1串
  • softmax(pre_y) 与 y 越接近越好

pre_y获得方法

1. softmax

类似将计算值normalize后获得一串pre_y,然后再进行比较

  • 多个class

  • 输入:logit(类似一个分类评分

    输出:介于0-1之间(类似概率值、连续

  • logit → (exponential) → 中间值(正) → (normalize) → pre_y

  • 可以放大差距

  • Σpre_y = 1

2. sigmoid

(3. arg max获得离散类别)

regression

预测连续型数值(如预测播放量、房价等)

  • pre_y 和 y 越接近越好

loss function

  • MSE - 求差的平方和
    • 更多用在regression
  • cross-entropy - 交叉熵
    • classification更常用
    • 原因:从optimization角度,避免了梯度消失(loss_function求导发现仅取决于预测值与真实值的差距),更有利于后续优化的进行(否则在很平坦的地方他就跑不动了),对loss更敏感,迫使模型修正

Optimization

帮你改未知参数,update

Gradient Descent

  • 计算gradient,向其反方向移动参数

  • Loss计算:

    • gradient :损失函数对所有未知参数求微分,使用g更新参数,表示梯度
    • g在每个batch中更新(在一个批次的数据中求微分),处理完所有batch为一个周期epoch
    • learning rates
    • θ :影响参数,θ* 最佳参数

image-20250302145245942

Root Mean Square(RMS)

loss不再下降时,并不意味着gradient == 0

training stuck ≠ small gradient → 优化有问题 → 客制化learning rate

  • σ = 所有gradient平方和的均值,开根号

  • lr = lr / σ

对于一个参数:

  • 陡峭,gradient大,σ大,lr小,步长小
  • 平缓,gradient小,σ小,lr大,步长长

不足:

  • 随着训练的进行,σ会不断增大(越后期,变化越慢,甚至基本不变)
  • 求解历史g平方均值,使得历史g的权重较大,无法适于新的梯度变化
  • 在训练初期,参数变化较大,导致梯度可能会有较大的波动性

image-20250306202333685

上图出现的原因:

在纵轴方向上,前部分训练过程的g比较大,等到后面逐渐变小。由于是做平均数,当小的g逐渐积累、平均,最终导致某时刻的σ变得很小,此时纵轴方向的lr变大,因此会突然跑出去

后期由于g较大,σ又变大,lr变小,步子变小。

learning rate scheduling

  • learning rate decay → 随着时间的推移,逐渐减小lr(逐渐接近终点,看作不断在刹车)
  • warm up → lr先增大,在减小

进阶版 - Adam

= RMSProp + momentum

  • RMSProp(油门+刹车) => 步伐长短

动态调整lr,lr随着gradient、时间而变化(调整α

  • momentum(惯性) => 方向

前一步移动方向 - gradient方向 的反方向移动

normalization

change landscape,令error surface不崎岖

batch normalization、……

  • 将 feature vector 中同dimension的x标准化,令均值为0

  • 每一层之间对输入也进行一次normalization

    • activation function之前或之后进行normalization都可以
  • 而实做过程中,我们使用一个batch作为输入进行normalization

问题:

  • internal covariate shift ?似乎并没有这个问题

network

activation function

σ(w1x1+w2x2+……)这就是一个neural做的事情,会有许多参数w_i,其中σ就是activation function

piecewise linear

  • 非线性激活函数
  • 可以逼近任何的function
  1. Sigmoid Function
  • 逼近 Hard Sigmoid(阶梯型)
  • 多个Sigmoid加和逼近实际Function(一个hidden layer)
  • 对于一个Sigmoid可以反复求Sigmoid(deep),但过深会导致过拟合
  1. ReLU

多个ReLU合成Hard Sigmoid (形状: ___/ )

image-20250302143729403

深度学习

可实现 loss小 + 与现实接近

deep v.s. fat

  • one hidden layer(fat)可以表示任何function

  • deep结构更有效,使用参数更少(减少overfitting的可能)(指数级)

  • 复杂且有规律的 → deep更有优势 e.g.image、video

model分析

training models的loss太大

  • model bias v.s. optimization
    • model bias

      • 修改model:增加features
    • optimization

      • 换更好的算法
    • 区分:使用浅model和深model,对比计算train和test数据的loss

testing models的loss太大

  • overfitting v.s. ()

    • overfitting:

      P(D_train is bad) <= |H|*2exp(-2Nε^2)

      • 增加training data - N(真实或猜测新的training数据 → 放大缩小左右翻转)
      • 限制 model - H(model弹性不要太大 = complication不要太大 = 可能的function不要太多 = 未知参数取值可能性不要太多
        • 减少参数
        • dropout(随机临时丢弃neural
        • ……

image-20250302152214814

layer

层与层neural之间的连接形式

FC层

fully connected

  • 每一个neural都会和前一层的neural相连
  • 可以逼近任何函数
  • 参数量大

卷积层

  • 一组neural(filter)与一个field进行连接
  • neural进行平移,也就是参数共享

CNN

(卷积神经网络 convolutional neural network)

  • 主要处理图片 + 下围棋AlphaGo

    还有语音、影像

  • 输入:向量

  • 输出:类别

  • 过度简化(pooling)导致model bias比较大

    可能无法分辨放大、缩小、旋转的图片(因为向量变化了)→ 所以我们可以往sample中加一些放大和缩小后的图片

  • 流程:

    • convolution 和 pooling 交替使用 (随着计算能力的提升,pooling的使用逐渐减少)
    • 通过flatten操作将pic拉直,作为fully connected layers的输入,之后再将结果过一遍softmax,完成classification

convolution

一组filter扫描一遍图片

  1. receptive field

    将图片分块

    • receptive field设定方式为 all channel * (3*3)

    • 一组 neural(大概64,即64个filter)接受一个receptive field

    • 水平、竖直移动长度stride,希望不同的receptive field会重叠。

      超出范围padding补值

    • 所有数据全部覆盖

  2. 参数共享

    对于审查不同field但审查功能相同的neural(filter),可以让他们共享参数,实现simplify

    • 相当于neural是成套的,每一个field分配一套neural

      类似学校发练习册,每个学生学习内容是一样的,因此练习册也完全可以是一样的,没有必要给每个人都量身定制一本不一样的练习册,对应这里就是:对于每一个field,既然做的检查项目都是一致的,那对应的一整套参数也完全可以设计成一致的,实现simply

    • 具体体现:每次卷积操作中,将一组filter进行平移

pooling

由于计算能力有限,我们会将image进行模糊化(让数据量减小)

maxpooling :当获取到filter的output后,取块x*x中的最大值代替整个field

……

生成式对抗网络 GAN

生成,回答开放性问题

GAN

→ generative models

  1. 输入:random simple distribution(可sampling)
  2. 输出:complex distribution(可sampling),有多种可能的输出 → 富有创造性
  3. 有很多变形
  4. generator + discriminator(鉴别器)

流程

自己卷自己

  1. 初始化generator和discriminator
  2. 将向量输入给generator,output与dataset一起输入给discriminator进行对比分辨,输出分数(训练discriminator)
  3. 将分数输回generator,反复
理论

P_G:generator生成的distribution

P_data:真实的distribution(data set)

让divergence越小越好 → argminDiv(P_G, P_data)(就像loss function)→ 只需要sampling采样就可以估计出divergence

→ argmaxV(D, G) ≈ JS divergenceargmin maxV(D, G)

训练技巧

GAN很难train

JS divergence的问题:

  • P_G, P_data是高位空间中在低维空间中的manifold,重叠范围非常小
  • 对于两个没有重叠的distributions,JS divergence == log2,所以一般情况下基本没有变化,此时无法进行有效的generator的训练

WGAN

Wasserstein distance (替代JS divergence

将P分布moving成Q分布,穷举找到最小的moving plan

1
max{E_data[D(y)] - E_G[D(y)]}, D为平滑distribution

conditional GAN

  1. 输入:x,random simple distribution

  2. 输出:distribution

  • discriminator输入:(描述x,图片)对

pixtopix

  • 输入x、image,生成image(e.g.输入房子草图,生成房子真实图 / 输入声音,生成影像

  • supervised → 输出模糊

    GAN → 想象力过丰富

    supervised + GAN → 更优

Cycle GAN(unsupervised)

application:learning from unpaired data

e.g. 影像风格转换、文字风格转换

  • 输入:
  • 问题是如何让generator不忽视输入
过程:
  1. 输入与进行两次转换之后的输出越接近越好
  2. 同时discriminator判断generator一次转换的output是否为“二次元”类
问题:
  • 学习到的特征转换很奇怪(现实中比较少)

类似的:StarGAN

img

评估

  • 人工

  • 使用分类系统(CNN),越集中,可能说明generator比较好

    • mode collapse - 没有diversity,此时classification结果好,也并不意味着generator性能好

    • mode dropping - 不易发现的low diversity

      • 同一输入的输出classification结果好,大量输入的输出均值classification很平均

      => IS → good quality + large diversity

    • FID:使用softmax之前的输出向量进行评估,比较两组的Gaussian distance,计算FID

      • 并不完全是Gaussian
      • 大量samples
    • 生成和train中相同的images

Self-attention

计算机制

内部元素之间的attention机制

处理input是一个sequence的情况,即输入一串有序序列、sample之间有关联

输入:

  1. 文字 → vector

    • one-hot encoding(没有语义信息)
    • word embedding(将离散数据映射到连续的空间上)
  2. 音频

    • 一小段音频 → frame
    • 移动frame
  3. graph / 分子

    • 每个节点可以看做一个vector

输出:

  1. one vector to one label - sequence labeling
  2. each vector to one label: sentiment analysis……
  3. 未知数目的label:语音辨识
  • 应用:transformer
  • 计算量大

过程

img

法1

在Self-attention中,each output取决于所有input

通过线性变换获得key和q两个矩阵(乘以输入矩阵的W_Q、W_K矩阵内容是可以训练的,也是multi的)

  • Query(Q):当前 token 希望获取的信息向量矩阵。

  • Key(K)所有 token 的信息向量

qkey得到*当前输入vector对key中每一个信息的score,即输入vector a与所有vector的关联性α

softmax获得概率分布进行归一化(activate function),获得权重 α‘

即可确定哪些vector和a更有关联性

获得第i个输出

法2

简化计算,计算output时只需要改q

image-20250313203942990

优化

重点在于n*n的矩阵乘法计算的优化

当sequence相当长的时候,在model训练过程中对self-attention进行优化才会有比较明显的效果,正因如此,许多self-sttention的优化变形更多的是针对image的model

transformer

使用传统的self-attention的通用架构( Neural Network Architecture)

image-20250315152002417

multi-head attention

从不同角度捕捉输入vector的特性,就是乘以不同的矩阵(W_Q、W_K)获得q、k

多种相关性 → 多个head → 多个q ……

  • 位置资讯 → positional encoding:e_i加到vector上……
Local / truncated attention

只计算和左右邻居的关联性(类似CNN)

  • stride attention:不一定是紧邻的邻居,可以跨一个、两个……
global attention
  • 向sequence中加上special token,告诉model从剩余所有token中收集global information。非special token之间没有关联
  • 直接将sequence中选一些token作为special token 或 添加两个
clustering

将k、q进行分类,同一类的说明attention大,对应的key和query的attention留下来,其余的忽略不计,直接看做0,从而简化计算

sinkhorn sorting network

使用另一个network来决定计算哪些地方的attention,将这个model练出来

linformer

只选择有代表性的key和q计算attention

  • 使用CNN获取代表性key
synthesizer

直接使用network训练出 关联度α表

linear transformer

先算k、q → 先算v、k,减少计算量

attention-free

……

v.s. CNN

  • CNN是简化版的Self-attention,recepted field不是人定的,像是机器自己学出来的
  • Self-attention更flexible的CNN(model弹性大,sample数少的时候容易overfitting)

sequence-to-sequence

network

输入输出为序列,机器自己决定输出长度

deep learning

QA问题、翻译、语音识别、语法剖析、muti-label classification(一个sample由多个label)……

最好针对每种任务提供客制化模型

encoder-decoder结构

  • 实现:RNN →(新) transformer
  • 更像是一种学习的思路,具体实现使用transformer框架

encoder

  • 输入一排向量 - block - 输出一排向量 *n
  • positional encoding 加入位置信息
  • block = self-attention - residual(将输入输出相加 作为输出,叫残差连接)- layer normalization - FC - residual - layer normalization
  • 重复block,输出

decoder

Autoregressive - NT - 自回归model
  • (以语音辨识为例)→ sentence completion
  • 输入:encoder 的输出
  • special token作为begin输入(one-hot-vector:00010000000),输出一个vector(长度为vocabulary - 单位),对vocabulary进行评分,输出max
  • 重复,前一个的输出作为本次的输入
  • decoder可以输出‘断’作为end
  • 内部结构:
    • masked-self-attention:先有a1,再有a2……,也就是说计算b2时,他是不知道a3、a4……,所以使用masked
    • masked-self-attention - residual - layer normalization - FC - residual - layer normalization
  • 流程
    • cross attention:decoder会对encoder的输出做cross attention
      • 输入:上一层decoder的输出 + encoder的输出
      • decoder可以动态的关注encoder的输出的不同部分
Non-Autoregressive - NAT
  • 一次性并行生成整个序列,速度快
    • 使用classification吃encoder的输出,预测长度x(一种方法)
    • 给decoder输入x个begin,进而获得x长的输出,直接获得一整个句子
  • 可以控制语音长度(控制x)
  • 但performance不如NT

training

  • 正确的字会被表示成一个one-hot-vector,我们希望model预测输出的vector和它越接近越好,即计算每个字的cross-entropy,总和越小越好(类似一个巨大的分类)

  • teacher forcing

    training过程中,decoder的输入是正确答案**(不是前一个的输出),即让model知道:

    1
    2
    3
    4
    begin+机 → 器
    begin+机+器 → 学
    begin+机+器+学 → 习
    begin+机+器+学+习 → end

    但实际过程中会有一个mismatch

  • tips
    • copy mechanism(复制)
      • 例如:chat-bot、摘要
    • guided attention
      • 要求model的attention是有固定方式的
    • beam search
      • greedy decoding不一定是最好的
      • 但有时候根据任务的性质,我们不一定要最佳答案(比如需要model进行想象) → TTS(测试的时候加点noise)

testing

  • BLEU score:计算两个句子之间的score,越高越好

  • 而training的过程中看的是loss-entropy

  • testing过程中,decoder看到的是自己的输出(可能是错的)

  • train和test的过程是不一致的!→ exposure bias

    • scheduled sampling:training时也给decoder一些错误的东西 → 会影响平行化的能力

image-20250313141857169

$ \text{ROUGE-N Recall} = \frac{\text{生成文本与参考文本重叠的 N-gram 数量}}{\text{参考文本中总的 N-gram 数量}} $

Self-Supervised learning

不需要label data训练model的方法

评价:

  • GLUE任务集 - 文字,计算平均正确率,和人类比较
  • SUPERB任务集 - 语音

auto-encoder

不需要label data

dimension reduction

old

  • 输入:image vector
  • 输出:image vector
  • 高维输入 → encoder → 低维vector → decoder → 输出,二者越像越好

de-noising auto-encoder

先将输入add noise,之后auto-encoder,输出尽可能和没有noise的data一致

BERT

model

Non-Autoregressive 预测并行,但不能生成整个sequence,只是填空

340M parameters 参数量巨大

一般用于自然语言处理 text

干细胞

bert使用transformer实现的encoder + MLM(能看到前后的token)

  • 输入:[CLS] + sequence + [SEP] + sequence
  • 输出:一排vector00哦

pre-train(Self-Supervised learning)

手段:Masked language model(MLM)
  • 将输入中的token随机遮住

    • 将token用特殊符号mask取代

    • 随机换成另外一个字

  • 遮住的部分的输出做linear(乘以一个矩阵),经softmax输出概率分布,得到一个output → 这可以看做一个LM model(language model )

  • 计算output与被盖住的正确答案minimize cross entropy

这个model可以看做在学习填空题,根据上下文学会了文字的含义(?)

  • bert和linear要一起训练
实现
  • 预测被覆盖token
  • 判断两个sequence是否相连

fine-tune(semi-supervised)

细胞分化

bert(trained) + linear(需要training)

case1
  • 输入:[CLS] + sequence
  • 输出:class

取[CLS] 的输出

case2
  • 输入:[CLS] + sequence
  • 输出:same sequence

取sequence的输出

case3

Natural Language Inference

输入:[CLS] + sequence + [SEP] + sequence

输出:class(好坏、正误……)

取[CLS] 的输出

case4

Q&A,答案在文章中

  • 输入:[CLS] + Q+ [SEP] + article
  • 两个正整数i、j,答案就是在第i个到第j个token之间

任意取两个vector a、b

将article的输出与a进行内积,经softmax获得概率分布,概率最高点即为i

将article的输出与b进行内积,经softmax获得概率分布,概率最高点即为j

  • 此时我们要训练的是随机选取的vector a、b

特性

cross-lingual

跨语言

  • multi-lingul bert

    仅使用English Q&A pre-trained multi-lingul bert,test时发现model也能做中文的Q&A任务!

    • 基础model是multi-lingul,理解一下就是这个model已经学会超多语言了

    • model让不同语言同一个意思的token的向量很接近(描述接近程度的指标 MRR)

    • 但又能分清楚不同语言 → 不同语言相同意思的token的vector之间也有固定的偏移

cross-dicipline

跨学科

NLM 也可以读懂 DNA、蛋白质语言

  • 将不同碱基对应到word上
  • 输入进人类语言的bert model(比如英文填空题)中,linear得到output,不断update linear的参数
  • 测试发现DNA种类预测正确率颇高

pre-trained的作用:

  • optimization - loss下降快
  • generalization - 举一反三的能力更强

speech Q&A

pre-training on artificial data

pre-train的过程中使得model学会了一些能力:???

pre-trained data:

  • 成对的 - good
  • 完全random - bad
  • shuffle:连续编号随机打乱 - good

GPT

预测接下来的token是什么

异常大

使用transformer实现的decoder-Autoregressive Model 自回归模型,MLM(只能看到前面的token)

预测 → 实现生成任务

few-shot learning

  • no gradient-desent

pre-trained language model (PLM) - advance

image-20250315103934305

  • example:bert、GPT、T5

problem & solution

  • 现实中没有太多有label的data → data set 转换成 prompt 的形式

    • prompt tuning

      将传统的分类任务转换成LM更擅长的填空任务;使用few-shot提高model的任务适配度,达到微调的目的

      • 准备好prompt template:将data set转换成natural language prompt形式
      • 用这些少量的data训练PLM填合适的mask,或者说 是将label与特定token进行对齐
      • 最后通过 LM Head (linear+softmax)得到概率分布【不使用classification的model,因为他的训练是需要很多data+label的】,最高token转换为label
    • few-shot-learning

      • prompt + demonstration
    • semi-supervised learning - PET

      • 使用仅有的少量的label data训练prompt tune model
      • 使用prompt tune model给unlabeled的data预测label,多重复几次,取概率和最大的作为pre-label
      • 使用fine-tune去train model
    • zero-shot

      • GPT-3
      • multi-task
  • BIG,参数多,不同的task需要copy一个bert去fine-tune,时间长

    1. parameter-efficient
    • adapter

      参数 = bert基准参数h + 对应某task专属的参数△h

      • 在transformer中插入adapter
      • adapter将h转变成△h

      image-20250315152039900

    • LoRA

      • 在feed-forward前面插一个LoRA,LoRA生成△h
    • prefix tuning

      • 在self-attention中加prefix,产生一个△h,加到原来的h上
      • 训练prefix的值

      image-20250315153537835

    • soft prompting

      • 直接在transformer的输入前插入prefix,训练prefix的值
    1. early exit
    • reduce layers:在每一层加一个classifier,找到合适且正确的output,直接终止输出即可

For Speech data

  • 输入:语音信号(vector)
  • 输出:一排vector

bert

和文字处理基本一致:

  • 先mask
    • mask的长度要长
    • mask所有向量的同一位置
  • 拿到输出给到linear,让他恢复语音data

e.g.Mockingjay model

GPT

  • 输入一段声音信号,model去预测下一段时间内的向量(长一点)

e.g.APC

改进

对于model来说,语音信号和图像的细节很多,相较于文字很难生成;

并且这些vector之间的差别很小,只是预测一个token对于model来说意义不大;

因此需要做一些改进

  1. 预测的东西尽可能长一点

  2. predict simplified objects

    • 将输入的声音vectors进行clustering(分类,也就是离散化)
    • 当model进行预测时(填空or 预测下一段),输出类别id即可(相比生成一个vector更容易)
  3. constrastive learning

    实现:让相似的数据输出vector越近越好,不相似的越远越好

    • positive example

      negative example

    • CPC

      • 输入:音频向量
      • 输出:vector
      • output输入到predictor中,使用linear令输出与相邻的vector越像越好,与不同输入的vector越不像越好
    • wav2vec

      • 输出:discrete离散的id/class
        • discret可以消除杂讯
      • 后面接一个bert的encoder(处理文字的bert输入就是离散的)
    • wav2vec 2.0

      • image-20250315221313258
      • 语音的token很大,给的id很大,不宜使用classifier
    • bootstrapping approach - Data2vec

For Image

图像处理:

image → pixel像素 → 将pixel拉直成为向量

bert

GPT

改进

  • SimCLR

    • data augmentation(随机做变化 random cropping……)

      形成positive和negative

      augmentation程度控制比较重要

      • 同一张图片data augmentation形成的图片就是positive
      • 不同图片data augmentation形成的图片就是nagative
  • problem:选择negative example

  • 解决:不再去挑选negative example

    1. bootstrapping approach

      选择两张positive,让他们产生的vector越接近越好

      BYOL/SimSiam:teacher & student,student学一次后当做下一次的teacher

      image-20250315223041314

    2. regularization

      VICReg:variance-invariance-covariance

  • MoCo

explainable machine learning

linear model 解释能力强,但not powerful

deep model 很强大,但是不容易解释

decision tree,但没有完全解决问题

  • local explanation (为什么你认为这张图片是cat
  • global explanation(你认为什么样的东西是cat

local explanation

我们想知道model是根据那一部分推断出output的

  • mask,计算输出正确answer的概率,据此知道model到底认识什哪一part
  • 对vector的某一处加上△x,计算loss的变化△e;△e/△x → 画出saliency map,也可以看出model是根据哪一part做出的判断

通过这些方法我们知道有时model的learning会被杂讯干扰,比如model并不是通过cat的特征辨认而是通过其他内容(如背景、文字……),因此我们需要将杂讯去除掉

smoothGrad

  • 对data添加random noisy,获得大量noisy data,计算平均saliency map

visualization

probing

探针

global explanation

我们想知道model在进行learning时到底在看哪些位置

create data

例如:

法1:我们想知道convolutional中filter1到底在做些什么,可以创造一个image X,令X的filter1评分和最大,此时观察这张X,就可以知道filter1重点观察识别什么东西

法2:也可以直接创造一张X,使得输出类别y的概率最大,但此时得到的X中有很多杂讯

法3:使用image generator输入z产生X,将X丢到image classifier(convolutional)中。依旧是找到合适的z,让输出类别y的概率越大越好,此时观察X。

  • outlook

    让explanable model模仿复杂model的行为

Domain adaptation

training set 与 testing set 有一定的差异,我们希望model的performance依旧很好,我们希望model可以用在不一样的domain上

  • source domain、target domain

basic idea

target domain large but non-labeled

  • feature extractor:不管输入来自哪个domain,输出是二者相似的部分,即过滤掉二者不同的部分

    image → feature extractor → vector → label predictor → output

    要求在vector处无法判断输入是来自哪个domain

image-20250316210638244

domain generalization

不知道新的domain

Reinforcement Learning

下面举例:game

  • actor(Actor-Critic)

    • 采取action
    • 接受observation、reward
  • environment

    • 接收action,调整,输出reward并提供observation
  • reward最大化

流程

  • actor(network = 复杂的function)

    • 输入:image的pixel - transformer(实际上是游戏的参数)

    • 输出:基于action的score进行随机sample

    • score计算:loss的大小(classifier)

      • 想left,令 L_left 越小越好
      • 不想left,令 -L_left 越小越好

      但我们的“控制期望”一般不是binary的,所以我们给期望进行评分A_n

    • A为reward的总和(某种计算形式,不一定是简单的加和)

  • A 对应于 loss,取负号最小化即可

  • optimization

    • 和 ML 有所不同(随机性很强)
    • policy gradient

actor

针对A的计算方式

version1
  • cumulated reward:将输入a后所有的reward加和
  • 但如果整个过程很长,后面的reward可能并不归功于a的取值
version2

降低后期reward对当前A的影响

  • 将输入a后计算所有的reward * r^(n-1)并加和
version3

好与坏是相对的,最终的A最好还是有正有负

  • 所有的 A - b,减去baseline (normalization)
version3.5
  • version3中b的取值使用critic确定,b=V_θ(s_t),即

  • A = G’ - V_θ,

    V_θ 指 actor 在 s_t 环境中,采取 输出的选择策略(一串评分或概率) 的G的均值

    G’ 指 actor 在 s_t 中采取预测action的 reward总和

  • 当A > 0:采取预测action的reward高于均值(随便sample出来的一个action),是一个好action

    当A < 0:采取预测action的reward低于均值,是一个坏action

version4 - Advantage Actor-Critic

在version3.5中,G’是取了预测action后的一个sample的结果,而V取了整个选择策略的reward期望

可是采取了预测action后,也会有大量sample,也应该计算期望

(就是往前迈了一步

  • 在s_t中采取预测action进入s_t+1,计算此时采取所有action的A的均值,也就是 critic 输入s_t+1的输出V_θ(s_t+1)(if critic is good),此时在critic中计算得到的 G' = r_t + V_θ(s_t+1)

  • 计算A = r_t + V_θ(s_t+1) - V_θ(s_t)

  • 当A > 0:预测action的reward高于平均值,是一个好action

    当A < 0:预测action的reward低于平均值,是一个坏action

image-20250317213347594

Policy Gradient

采用 on-policy

off-policy 可以实现收集一次data,update多次参数

  • 初始化actor参数(此时是一个随机的network)

  • training loop

    资料收集在training阶段

    • 令actor与环境交互,获取datas

    • 计算 A_i

    • 计算 Loss

    • θ_i = θ_i-1 - η▽L

    • update actor && exploration

      • actor要试图做些随机的事情,让training data多一点、不要太贪心,即令actor的输出根据分数随机化选择

        • 在actor的参数上加noisy

        • ……

critic

评估在某个environment中,actor采取它输出的选择策略后会得到多少cumulated reward(A)

critic评估的是actor的整体选择策略,带有期望意味

  • V_θ(s)

  • training method

    MC

    • actor与环境多互动几次
    • critic的output 和 真实A大小越近越好

    TD

    • image-20250317203324547

training

tip

由于actor和critic的输入是一样的,这两个network的前部分会有一定的重叠,因此可以共用一部分network

image-20250317222446228

reward shaping

想办法提供额外的reward,help network train (有种望梅止渴的感觉)

  • sparse reward

    reward 几乎都是 0(可能action太多了,纯靠随机很难碰上有reward

    (这就很难train了

  • 额外增加reward,其实就是增加奖励机制,从而引导model往reward增加的方向走

    比如game中: 捡到物资、活着 = reward++、空闲 = reward–

    虽然这些并不会直接影响分数,但人通过这些domain knowledge可以引导model往对的方向走

  • curiosity

    model看到新的有意义的东西,reward++

    e.g.Mario game

no-reward

真实环境中的reward?自动驾驶……

人定reward,有时候会产生一些意想不到的questions

behavior cloning

比如:将人类的驾驶信息作为example给model

  • problemS……

inverse reinforcement learning

reward function 是通过 expert 学出来的

  • 输入:expert

  • 输出:reward function

  • 流程

    • actor与environment互动,获得trajectories(轨迹)
    • reward function,要求teacher的分数比actor高(一开始随机初始化function)
    • 根据上面的reward function去train actor【Reinforcemnet learning】
    • 更新actor,循环
  • 很像GAN!

image-20250317231747338

network compression

在一些资源有限的应用场景中,例如智能手表、无人机,本地资源无法承担 big model 的计算,而在云上计算又面临latency、privacy的问题,因此我们需要smaller model

软件层面

不互斥,可以同时采用

network pruning

将一些参数、neural剪掉

  1. 流程

    • train一个大的network

    • evaluate 参数重要性

    • remove 少量参数

    • fine-tune smaller network

    • 循环

  2. 问题

    以参数为单位:此时network变得不规则,反而无法加速,实做上比较难;but……

    以neural为单位:比较好

    • 如果直接train small network,正确率没有对大network剪枝得来的高,很难train起来
    • 但将prune后的参数 随机初始化给small network,或者只给参数正负,值随机,就可以train起来

knowledge distillation

teacher network (large or much network)

student network (small)根据teacher学习

  • 给teacher和student相同的输入,student根据teacher的输出进行training

  • student可以跟teacher学习到不同类别之间的关系,所以不直接让student学习正确答案

    • temperature for softmax(y/T)

      将teacher的output变得平滑一些,给student提供更多信息

    • 将teacher与student的每一层network分别对应train

应用:

ensemble:train model时会多train几个,最终的model取这些model的均值

实现:network参数做平均、直接output做平均

可以实现将多个ensemble model整合成一个

parameter quantization

  • less bit

  • weight clustering

    • 相近的值看做一个群
  • huffman encoding

  • binary weight(防止overfitting)

Architecture design

I :通道数

O:输出通道数(filter数)

k*k:filter size

原始convolution

参数量:k*k*I*O

depthwise convolution

考虑同一个channel内部的关系,filter的数量就等于channel的数量

参数量:k*k*I

pointwise convolution

考虑不同channel的关系,1*1 filter

参数量:I*O

  • 作比:depthwise + pointwise / 原始 < 1

  • 类似 low rank approximation

    在两层大小相差悬殊的network之间插一层,可以减小参数量

dynamic computation

希望一个network可以自由选择参数计算量

比如应对各种运算资源的情况

  • 自由调整depth

    • 在layer之间加一个extra layer,低电量时层数少些:training时evaluate一下中间层的输出loss
  • 自由调整宽度

    • train一个large network,训练过程中选择不使用的neural,evaluate loss,不断尝试

life long learning(LLL)

image-20250318230054618

  • 不同的任务:更像是不同domain相同的任务

catastrophic forgetting

问题

model 先学task1,再学task2,此时model会忘记task1的做法

但同时学习multi-task,model的两个task的正确率都很高

说明model是有能力同时学会两个task的

  • upper bound:multi-task training(太费劲了)

  • a model for each task:储存不了太多model

  • LLL v.s. transfer learning

    • LLL关注旧的task做得如何
    • transfer learning(fine-tune)关注新的任务做得如何

evaluation

准备 a sequence of tasks

  • Accuracy
  • backward transfer:一般是负的,描述学习完所有任务后,model对于任务T记住的程度
  • forward transfer:在学习到对应任务T之前,对于任务T model已经学会了多少

image-20250318232439809

method

selective synaptic plasticity

学习task2时只改变对于task1来说不重要的参数b_i

  • 新loss计算时,除了包括正常的loss计算,还包括新参数与旧参数之间的loss

  • b_i指这个参数对于旧task是否重要:越大越重要,此时loss占比也变大

  • b_i 全为0:catastrophic forgetting

    b_i 全为1:(固执)

    b_i 可人为设定、直接算出来

    • GEM:
      • 在新task中更新参数的方向是旧task和新task更新方向的矢量和
      • 需要一点点过去的资料

image-20250319131731504

additional neural resource allocation

progress network

packnet

CPG

memory reply

  • generator 生成所有旧task的data

curriculum learning

  • 研究更好的task学习顺序

Meta learning

学习更新model参数

training

learn to learn

训练出一个F,它可以通过学会几个task从而学会这一类的task

e.g.我们用猫狗辨识、苹橘辨识任务训练F,之后F就能够生成能够完成各种各样辨识类任务的model

帮我们:调超参数Φ,在原来ML中都是人工调

cross-task training

trainingcross-task training

  • function:learning algorithm

    元学习器

    • F_Φ,自动调整model参数
    • 输入:train task中train data
    • 输入:train task中的train data
    • 输出:model的参数 - 动态调整model参数
  • loss function:

    • L(Φ)

    • 所有train tasktest data的loss均值

    • 直接评估classifier,从而间接评估F

  • optimization:

    • gradient descent
    • 如果微分不了,用reinforcement learning
    • 反馈、循环
  • 训练出一个F:learning algorithm

  • training过程中还需要development task评估F,防止其过拟合

    • 使用development task计算loss,若开始上升,说明可能发生过拟合,应停止training

testing

cross-task testing

下面的整个过程称为episode

  • 使用train task喂给F(learning algorithm),train出一个F
  • 使用test task中的train set喂给F,F输出一个model
  • 使用test task中的test set喂给model,得到output,evaluate output与真实结果

学习initialize

  • AML

  • reptile

学习optimize

学习训练network architecture

  • 没办法微分 → reinforcement learning
    • 输入:生成的network的accuracy
    • 输出:network architecture的超参数
    • environment:根据生成的参数建立network,进行within-task training
    • maximize reward(-L)

还有data augmentation、sample reweighting、

v.s. self-supervised

  • meta learning:学习如何更好的初始化
  • self-supervised:也是在做初始化,有learning gap,但实做上效果好

将二者结合,使用bert给meta learning提供初始化参数

v.s.knowledge distillation

  • knowledge distillation:teacher model的教学能力未知,最厉害的teacher不一定能教出最好的学生
  • 在knowledge distillation过程中,让teacher model跟着student model的loss一起update,teacher model更新的目标是让student的正确率更高(teacher的正确率无所谓) → 例如用meta learning学习调temperature

v.s.domain generalization

  • 输入:有很多training domain
  • 输出:target domain(未知)

结合meta learning:

  • 从training domain中挑一个domain假装是target,当做一个train task,收集many train task
  • 训练learning algorithm

v.s.life long learning

  • LLL:catastrophic forgetting
  • 使用meta learning解决这个问题

Attacks

model功能受损、误导

white box

adversarial example敌对样本

  • benign良性输入 → transformation → 得到possible perturbations → constrains → search

  • goal

    • non-targeted
    • targeted
  • transformation

    • word level

      • 同义词替换

      • vector距离近的word替换(counter-fitting GloVe embedding space)

      • bert,将要替换的word进行mask,bert进行预测,但这样也会输出语义相反的word

        此时no-mask,会输出与之相近的word

      • 语法方面

      • insertion

      • deletion

    • char level

    • image:

      targeted:

      • x与x0间的差距越大越好,与targeted x1间的差距越小越好
      • x与x0的 L-infinity 小于阈值(肉眼看起来越像越好)
      • FGSM:只需要update一次参数 → g中只有1与-1

black box

  • 有training data

    • 训练一个proxy model
  • 无training data

    • 使用teacher model的输入输出对训练proxy model
  • targeted attack难度比较大

one pixel attack

universal adversary attack

speech processing - 语音辨识

adversarial reprogramming

将一些任务寄生在model上

backdoor

训练资料上

defense

被动防御

输入data时,先加一个“盾牌”filter挡住attack signal

  • 模糊化

  • 压缩

  • 过一遍generator

  • 加各种随机的defence手段

主动防御

proactive defense

  • adversarial training

先正常训练model,然后将training data变得具有攻击性,把这些data与正确label扔给model再进行训练,重复多次

会导致额外计算(solved)

image-20250319220450807

image-20250319220312955

  • Author: dawn_r1sing
  • Created at : 2025-04-07 20:07:05
  • License: This work is licensed under CC BY-NC-SA 4.0.(转载请注明出处)