loading...马上就出来rua!

李宏毅2022机器学习笔记


机器学习方法

  1. 预测模型

    猜测预测数据与已知数据的关系($y = b + wx$)

  2. 定义Loss

    传入模型作为参数,平均预算误差的绝对值作为输出(MAE)

    ​ 或误差平方的平均值(MSE)

  3. 找最佳化数值

修改模型(sigmoid)

  1. 考虑w

    $y = b +\displaystyle\sum_{j}w_jx$

  2. 考虑模型

image-20231111154158171 image-20231111154613377 image-20231111154729633 $$ y = b + \displaystyle\sum_i c_i sigmoid(b_i + \sum_jw_{ij}x_j) $$ image-20231111160431657 image-20231111160654332 image-20231111160818625 image-20231111161049073 $$ y = b+ \boldsymbol c^T\sigma(\boldsymbol b+\boldsymbol w\boldsymbol x) $$ image-20231111161822839 image-20231111162554616

$\eta$为自己设定的leaning rate

实际操作:B(batch size)为自己决定的参数量,将N个参数分为N/B份,每次拿一个B进行一次数值更新(update),用光所有B为一次epoch

image-20231111162959893

模型修改2(ReLU)

image-20231111163739389

两个ReLU可以替换一个sigmoid,故可将原式改为$y = b+\displaystyle\sum_{2i}c_imax(0, b_i+\sum_jw_{ij}x_j)$

这样的函数称为激活函数

进一步修改(增加层数)

对得到的数据a再进行$\sigma$操作得到$a^,$ 不断重复

问题:过拟合

image-20231111164754541image-20231111225724229

Pytorch

image-20231111225853587

生成tensor

image-20231112232309333

tensor运算操作

  • 减少长度squeeze

    image-20231112232358180
  • 升维unsqueeze

    image-20231112232736627
  • 转置transpose

    image-20231112233001331
  • 组合cat

    image-20231112233202203
  • 其他

    image-20231112233247391

驱动

image-20231112233517372

可用torch.cuda.is_available() 检测是否存在可用gpu

grad

image-20231112234244805image-20231112234503487

数据读取(data)

image-20231112234244805 image-20231112234943610

shuffle:是否乱序

建立神经网络

  • 线性模型
image-20231112235305657 image-20231112235335026 image-20231112235626950
  • 激活函数

    image-20231112235701333

Loss Functions

MSE

image-20231112235816607

产生神经网络

image-20231113000036718image-20231113000054359

sequential中依次放入不同层的函数

更新模型(optimization)

image-20231113000412683

lr为learning rate

训练模型

  • 准备

    image-20231113000607390
  • 一个epoch的训练

    image-20231113000756919
  • 模型评估

    image-20231113001259335
  • 测试组

    image-20231113001341676

储存/加载模型

image-20231113001604544

代码优化方法

image-20231113165806187

training loss过大

模型太过简单 重新设计模型

解决方法:

  • 加入更多features
  • 增加neuro/layer

optimization不够好

判断方法:比较不同模型

testing loss过大

overfitting过拟合

image-20231113170659159

解决方法:

  • 增加训练资料

  • data augmentation

    用自己对资料的理解合理增加训练资料

  • 减小模型弹性

    • 减少神经数目、共用参数
    • 减少features
    • early stopping
    • regularization
    • dropout

Backpropagation

image-20231113205032580 image-20231113205611772 image-20231113205819948

反推出偏微分

optimization

除了局部最小 gradient 为零(critical point)还可能因为处于鞍点

image-20231113172619170

鉴别处于鞍点还是局部最小点:

image-20231113191019521

处于critical point时g为0,故可以通过红色项判断图像趋势

image-20231113191441848

eigen value:特征值 H为由L的二次微分组成的矩阵

image-20231113192240520

通过H也可求出鞍点时能让Loss变小的方向($\theta^,\rightarrow\theta$)

Batch & Momentum

image-20231113193601124

由于GPU平行计算,大batch效率可能会高于小batch

image-20231113193750843 image-20231113194701311

Momentum

image-20231113195334045image-20231113195924574

自动调整学习率

image-20231113195924574

大体思想:在较平滑的地方lr应较大 反之则较小

  • Adagard
image-20231113200528507
  • RMSProP

    image-20231113200941873

最常用的optimization策略:Adam(RMSProp + Momentum)

image-20231113202456036

Learning Rate Scheduling:

由于$\sigma$随着时间累计,在g变化较小的地方步伐减小,可能出现朝着之前记录的无关方向暴增的现象,故

  • Learning Rate Decay:

    将$\eta$设定为随时间减小的变量

  • Warm Up:

    使$\eta$先变大后变小

分类

输出形式为向量,与标准做Loss前(称为logit)要先用Soft-max函数归一化(同时使大小差距更大

image-20231113203134896

而如果只有两种分类一般直接套用sigmoid(实质等价)(判别与生成)

cross-entropy

可以理解为计算两组概率之间的相似度

** 在pytorch中使用cross-entropy时自动对最后一层调用soft-max

image-20231113203916492 image-20231113204117032 image-20231113212641390 image-20231113213323356 image-20231113213521316 image-20231113213458428

改进:

共用同一个$\sum$参数

image-20231114160201310

分界线变为直线,称这种分类模型为linear model

三步骤总结:

image-20231114160651106

逻辑回归(判别)

image-20231114162117186

在共享$\sum$的前提下 经计算可将$P_{w,b}(C_1|x)$化为$f_{w,b}(x)=\sigma(wx+b)$

image-20231114164522109

step2中不使用square error的原因:

image-20231114164928852 image-20231114165052873

判别模型与生成模型找出的w与b并非同一组

image-20231114165655869

由于生成模型有对模型的先行猜测,一般来说判别模型优于生成模型,在少数据量的环境下生成模型也可能占优势

即判别模型受data影响大,生成模型熟data影响小

  • 为什么需要一个好的Training Data:

    ($\sigma$为自己设定的理想差值)

image-20231115190022574 image-20231115191455687

故增加N(sample出来的训练资料数)或减小H(取参范围)可以减小训练资料和实际资料的差距

但是H不能太小

image-20231115192124449

CNN

很有趣!

专为影像识别设计的学习算法 特点:1.一个特征只要看很小部分就能知道 2.同一个特征可能出现在不同位置

先将图片缩放为统一大小,再用filter进行卷积操作

  1. 经典设置
img
  1. 共享参数
img img

pooling 在横纵轴拿掉一些像素, 识别出的物体不变 降低计算量,但减少精确度

img img

为什么deep learning能减少参数量与运算速度

img

也可用于alphago(满足最开始的两个特征 去除pooling提高精确度

问题:无法处理缩放、旋转图片

spatial transformer

对原图片进行平移、旋转、缩放等操作,再投入CNN模型方便识别

自注意力

问题:目前输入只能是一维向量,且长度不能改变

image-20231118162347705

经过self-attention的向量是考虑了所有向量后生成的新向量

如何产生新向量?

  1. 判断一个向量与其他各向量之间的关联性
image-20231118162756960

dot-product:

常用的关联性计算方式 关联性越大值越大 其中soft-max可改为任意激活方程 常用soft-max

image-20231118164003817

再将结果乘上矩阵得到第一个向量

image-20231118164220097

其中$W^v,W^q,W^q$均靠机器学习得到

写成矩阵形式:

image-20231118165442577

multi head

image-20231118192616797 image-20231118192638718

缺点:feature里完全未包含位置资讯

Positional Encoding

image-20231118193109818

将不同的$e^i$加到$a^i$前面 e可由特定函数求出,也可由学习得出

现有的一些positional encoding方法

image-20231118193321083

truncated self-attention

由于有时输入向量长度过大(如语音识别等 经过self-attention时可以不看所有向量,而只看前后数个

for image

image-20231118194326843 image-20231118194349227

实际上,CNN为self-attention的特例

self-attention的filter范围实际通过学习决定,限制更少,弹性更大,更容易过拟合,需要的资料量更大

CNN的filter范围由人为决定,限制更多,弹性更小,小资料量下表现更好

image-20231118195157019

对比RNN

image-20231118195616416

RNN:

  1. 只考虑当前向量之前的向量(存在双向RNN 故可忽略
  2. 新参数依赖之前计算的参数,各个参数不能平行计算。
  3. 参数关联性更难计算,最后一个参数获得第一个参数的关联需将第一个参数一直存在内存中
  4. 参数顺序有关

for graph(a kind of GNN)

关联性已知,计算关联性与参数时可以指考虑相连的节点

RNN

无关:将词汇表示为vector的方法

image-20231118200806969

Elman Network

image-20231118201139517

例子:

注:三次为同一个network

image-20231118201600461

Jordan Network

将output存入memory,并在下个向量的hidden layer输入

image-20231118201951393

Bidirectional RNN

同时train一个正向、逆向的network,将两者hidden layer参数结合考虑再投入output layer

image-20231118202352070

Long Short-term Memory(LSTM)

image-20231119135524436 image-20231119135602896

四个input中输入的都是同一参数值乘上不同的weight

image-20231119140623182

故lstm network需要的参数量是普通network的四倍

矩阵形式:

image-20231119141213464

真正的LSTM:

(在Keras中,这个结构叫做LSTM,上面的结构为SimpleRNN, 此外,还有个GRU的简化版,只有两个门,少了1/3的参数,不容易过拟合

image-20231119141515123


文章作者: mashimaro kumo
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 mashimaro kumo !
评论
  目录