深度学习李宏毅

ML2022官方网站-台湾国立大学

简介

第1讲:深度学习介绍:主要是基础概念的介绍,快速过一遍。
第2讲:为什么训练网络会失败:主要是将训练网络的一些细节,局部最小值,鞍点,自适应学习率,损失函数等。这一讲的选修的梯度下降必看,新的优化器可以先不看,如果有余力可以看,主要讲了对梯度下降的一些改进。
第3讲:图像作为输入:CNN网络,必看,非常重要
第4讲:序列作为输入:先看选修的RNN,再去看自注意力机制,不要搞错顺序。因为注意力太火了,所以RNN放在了选修,不过我认为还是要先看RNN模型基础,再去看自注意力机制,为下面额Transformer模型做准备。选修中的GNN网络,可以你自己的需求,入门阶段可以先跳过不看。
第5讲:序列到序列:主要讲了Transformer模型,必看,选修的指针网络可以先不看。
第6讲:生成模型:主要是对GAN理论的介绍。看你自己研究方向,如果是GAN方向的,可以细细看下,如果入门选手,直接跳过。
第7讲:自监督学习,必看,很火。主要看关于BERT介绍相关的视频,比如模型介绍,微调,预训练等。BERT的各种变体比如Spanbert等可以先不看,同理GPT有余力就看,没余力直接跳过,不影响。
第8讲:自编码,可以先不看,取决于你的自己研究方向。
第9,10,11,12,13,14,15讲,入门阶段可以先不看【取决于你的自己研究方向】,偏理论。入门之后,再来看.

学习材料

学习日志

2022/07/08以前

在bilibili ipad上面看第一节, Colab教学, pytorc教学等.

2022/07/08 60’

重新整理资料, 建立md文件, 整理进度

2022/07/28 180’

第2讲

机器学习任务攻略

局部最小值与鞍点

批次batch和动量momentum

2022/07/29 1day

第3讲

第4讲

教学

第1讲 基本概念

机器学习基本概念简介

第2讲 基础知识

机器学习任务攻略

image-20220728114337827

机器学习的框架:

  1. 找一个函数, $\theta$ 是未知的.
  2. 定义一个损失函数
  3. 最小化损失函数来更新 $\theta$

更新baseline的选项:

image-20220728141254293

  1. 先检查traning data上面的loss, 如果很大的话说明就是在训练阶段就没学好.

    1. Model Bias
      更改模型函数的结构, 将模型设计的更加复杂.

    2. Optimization Issue
      如果更深的网络的loss反而增大, 是Optimation的问题.

  2. 已经降低了traning data上面的loss

    1. 查看testing data上的loss, 如果很小就可以了

    2. 但是如果很大, 此时有可能就是overfitting的情况(traning data loss大. test data loss小)
      image-20220728143137425

      解决方法:

      1. 增加训练数据,
      2. 可以做data augmentation(反转, 变大, 但要合理不太能旋转180°),
      3. 给模型进行限制, 比如比较少的神经元, 共用参数(CNN就是一个没有弹性的网络), dropout, 但是也不能限制的太死, 否则就会上升为model bias.

所以需要在复杂模型和简单模型选择一个训练数据和公开测试数据上的loss都很小的一个模型.

那能不能选择一个public tranning set 的loss最小的函数呢?

不行, 因为有可能那个模型函数就是恰巧在public tranning set上面loss最小而已. 如果所有的test data都是public的话, 那就可以用直接输出test data欺骗程序了.这也就是可以在benchmark corpora上超越人类的能力.!

所以需要把test data 分为training data 和 validation data, 然后用validation data调优, 然后上传到public testing data查看分数. 最后的private testing data才可以有好的分数.

image-20220728145401429

理想中用validation data mse最小的就好了, 老师说越少看public test data的分数越好.

而如何划分traning set和validation set呢

用N-fold cross validation的方法:

image-20220728145743623

周五的数据进行了峰值是因为mismatch

就是预测数据的分布和训练数据的分布不相同. 辨别是否是mismatch则需要作者进行判断.

局部最小值与鞍点

本节讲optimization失败的怎么办.

当训练loss下降不下去了(微分为0)但是还比较大是什么情况

  1. local minima(局部最小值)
    这种情况无路可走
  2. saddle point(鞍点)
    但是这种情况再挑一个方向还可以再优化.

那如何判断是局部最小值还是鞍点呢?

image-20220728152353936

可以用后面的红色部分来判断是error surface 大概什么样子

image-20220728152600258

一个结论是用H矩阵的正定性来判断:

image-20220728153027754

举一个例子

把所有w1和w2穷举, 然后得到loss之后画出error surface

image-20220728153920783

那如果不穷举呢?

先计算一次微分g, 带入点对应值w1,w2, 看是不是critical point, 然后计算二次微分Hession, 算Hession矩阵的特征值的正负:

image-20220728154417947

如果是saddle point的话, 这时候gradient就是0, 所以就用H(特征值和特征向量)看:

image-20220728154824001

image-20220728155136608

那么saddle point和local minima哪个更常见呢?

低维的最小值点从更高维看也许就是鞍点, 所以在实际中哪个更常见呢?

image-20220728160800643

从图中看, 没有一个真正的局部最小点, 所以一个模型优化的过程是这样的:

image-20220728160948150

批次(batch)和动量(momentum)

  1. shuffle在每一次训练好都会重新划分一下batch

  2. small batch vs large batch
    small btach的loss计算的值小, 更新的次数多
    large batch的loss计算的值大, 更新的次数小
    但是不一定large batch计算loss时间长, 因为有平行计算, 另外因为update不能平行计算, 所以小batch的update次数多, 一个epoch反而时间更长, 所以大batch反而更快.
    image-20220728162839497

  3. 快不一定意味着正确率就高, 小batch反而正确率更高:

    image-20220728163414945
    可能的原因是小btach的loss函数有点细微的差异, 所以可以不被卡在critical point.

  4. 小batch对testing data反而更好
    比如把大batch和小batch的准确率都训练的同样好, 但是小batch在testing 更好
    image-20220728164028693
    这种情况的一种可能原因是minima也有好坏之分, flat minima 和 sharp minima.

总和来看:

image-20220728164452616

另一种解决局部最小点的方法是叫做momentum:

移动的方向是梯度反方向+原来方向的组合:
image-20220728165027263

如果带入式子的话, 另一种解释方法是, 现在的移动方向考虑之前移动方向的总和:image-20220728165323734

vanilla是一般的意思

自动调整学习速率(Learning Rate)

当loss不再更新的时候, 第一反应是gradient为0了, 但是真得一定吗, 但是有一种可能是gradient不为0, 但是是learning rate太大了.

image-20220729092746241

用一般的gradient decent很难达到local minima, 所以对于不同的参数需要不同的learning rate(而不是原来的固定的learning rate).

比如一个变化的学习速率例如(为了在g不同的时候有不同的learning rate):

image-20220729094109482

image-20220729101847483

最常用的策略(optimazation)就是Adam=(RMSProp+Momentum):

image-20220729102015312

还可以对$\eta$加时间的变化(Learning Rate Decay), 越来越小:

image-20220729102537819

在BERT和Transformer的时候用了这种变化(Warm up), 先变大再变小):image-20220729102840264

总结image-20220729103006268

损失函数可能影响网络训练失败

image-20220729104116083

为什么要用softmax看之前的录影.

image-20220729104242406

当只有两个class的时候, 用sigmoid即可.

而目标值和计算值的距离如何计算, 简单的比如(MSE), 但常用Cross-entropy(在pytorch甚至cross-entroy和softmax是绑定在一起的, 所以当用cross-enctorpy的时候就加了一个softmax):

image-20220729104517938

MSE和Cross-entorpy的区别(MSE在large loss的时候反而就gradient已经为0了):

image-20220729105002715

重温神奇宝贝和数码宝贝分类器

这节课讲为什么参数越多越容易过拟合

image-20220729113313137

所以现在的目标是找一个好的$D_{train}$, 我们不一定找到好的$D_{train}$, 所以评估找到差的$D_{train}$的概率为多少呢?

image-20220729113516204

结论是:

image-20220729135138889

image-20220729135524896

其中$|H|$是模型的个数, $N$是训练样本的个数, N越大, $|H|$是可能模型的个数.(注意是上届)

进行变式, 得

image-20220729135840373

所以为了逼近训练(理想)和全部资料(现实), 也就是Dtrain和Dall训练的loss都很接近, 要么减小H要么增大N.那么N就是训练资料, H的话,太小了则说明模型很少, 但这时候也许就很难拟合函数了.

鱼和熊掌简单的话就是要深度学习.

第3讲 CNN

卷积神经网络

输入时矩阵, 如果非正方形, 则进行变形处理成正方形.

输入是one-hat向量, 维度为种类的个数.

输入:

3*100*100., 可以将其拉成一维向量, 也可以直接将其作为多维向量输入.

观察

不需要让neual看完整的信息=>局部作为recept field(这里可以将卷积重叠, 将卷积不重叠, 将卷积部分设置成长方形)

最常用的receptive field为3X3, receptive filed可以进行移动, 移动步数叫做stride, 而考虑边的地方而超出影像的部分叫做padding.

而图片给的不同地方有些相似, 所以可以用一个神经元来表示, 这就引申出了共享参数.

也就是说, 通过观察把模型的个数减小了

image-20220729144352030

观察2

通过filtter进行获得特征提取, 通过很多个fillter进行不同特征的提取

image-20220729144706984

总结

image-20220729145313476

pooling

把图片的像素拿掉之后不会影响画面, 所以这层没有leraning什么东西.

在实际中卷积和池化交叉使用, 做几次卷积之后做一次池化.池化的理由是减少运算量, 所以现在也逐渐不用池化, 因为计算能力增加了.

flatten

把多维矩阵拉直

image-20220729145751104

应用

alphago 就是把19*19的棋盘用矩阵来描述.alpha原始论文中以48个数据来描述一个点(没有pooling, 但是棋盘不适合用pooling).

image-20220729150500326

CNN的局限

CNN不适合影响放大和旋转.
image-20220729150829764

第4讲 Sequence as input(self-attention)

自注意力机制(Self-attention)上

有时候输入不一定是长度相同的向量, 比如句子, 声音讯号, 图, 这些都是一堆向量

句子: 首先将词语进行向量化, 然后句子就是一排长度不一的向量, 词语向量化的方法如下:

  1. one-hot encoding
    没有语义信息
  2. word embedding
    相似的词语的向量比较接近.

声音: 将同一时间间隔的声音讯号(比如25ms作为一个frame), 声音向量化的方法如下:

  1. 400 sample points
  2. 39-dim MFCC
  3. 80-dim filter bank output

图, 比如一个人际关系图, 把每个节点看作一个向量.

分子结构, 把一个分子作为一个图, 然后分子上面的原子就看作一个向量(One-hot vector)

那这时候的输出呢?

有三种可能性:

  1. each vector has a lable
    比如词性标注, 比如作业2音标分类的简化版
  2. whole sequence has a label
    比如情绪分析, 一整个句子有一个label, 比如语者辨认
  3. model decides the number of label itself.
    比如seq2seq.

本节课讲第一种类型的输出sequence labeling.

再进行sequence labeling模型输出的时候要考虑当前输入的上下文.

image-20220729154618629

Transformer(Attention is all you need)就用了self-attention.

attention具体细节

首先找出$a^1$和$a^n$有多相关, 用$\alpha$表示.

image-20220729155742695

然后计算$\alpha$

image-20220729155100541

image-20220729155513746

实际中还有一个$W^v$矩阵得到$V$向量.

image-20220729155555353

image-20220729155714767

$b^n$的计算可以并行计算.

其中$W^q$是矩阵参数, 是学习出来的, 后面讲.

自注意力机制(Self-attention)下

在实际过程中, 是这样计算出$Q$, $K$, $V$的.

image-20220729160434093

image-20220729160950605

image-20220729161214636

总结:

image-20220729161436242

进阶版: multi-head self-attention(不同单词之间有多种关联度需要计算), 计算出来的两个b就可以接起来再送入下一次.

image-20220729161957427

但是, 只考虑到了单词的关联度, 不同单词的位置信息没有考虑到, 解决的方法是Positional encoding:

image-20220729164021396

一些生成position encoding的方法:

image-20220729164143600

Selfattenion的应用: NLP, Speech(Truncated Self-attention), Image,

CNN可以看作简化版本的Self-attention, Self-attention是复杂版的CNN.

image-20220729164629284

RNN和Self的区别

  1. RNN很难考虑很远的输入.Self-attention而可以考虑到
  2. RNN不能并行化.

image-20220729170106577

把Self-attention应用到Graph上面时, 也就是GNN:

image-20220729170419137

第5讲 Sequence to Sequence Transformer

Transformer-1(Encoder)

Transformer 是一个Seq2Seq的模型, 输入和输出都是序列, 并且输出的长度是由模型决定, 比如常见的问题为

  • Speech Recognition
  • Machine Translation
  • Speech Translation(不先speech recognition再translation是因为很多语言没有文字)

image-20220730133221833

并且多数的NLP任务都可以被视为Question Answering, QA就可以用seq2seq来解决: 输入为question, context, 输出为answer, 所以多数任务都可以用seq2seq来解决.

NLP: https://speech.ee.ntu.edu.tw/~hylee/dlhlp/2020-spring.html

另外还有很多任务都可以用seq2seq来硬train:

  • syntactic parsing(输出的树状结构可以看作一个sequence)
  • multi-label classification(与Multi-class作比较的话也就是同一个东西可能有很多个label而不只一个class)
  • object detection
    image-20220730135137825

seq2seq的具体的操作为:

一般的encoder的block为:输入一组向量, 输出一组向量, encoder是这样的

image-20220730141207714

而encoder是由好几组block组成的, 每个block是这样的:

image-20220730141402431

在实际中的transform是这样的(加了reditual和norm):

image-20220730140011381

当然这样安排不一定是最好的, 只不过transformer这样安排了

Transformer-2(Decoder)

Decoder有两种, 最常见的是Autoregressive.

注意这里要先准备一个

image-20220730145205366

注意这里和ibizsim结合, 另外这里有一个bug就是”一步错步步错”的问题, 在ibizsim中也要考虑到.

Encoder和Decoder的差别

image-20220730145409343

  1. 遮住了灰色部分几乎一样
  2. Decoder多了一个Masked self-attention部分

Self-attention和Masked Self-attention的区别是, 在考虑当前输出的时候, 只考虑当前输出时间上之前的输入来形成当前的输出, 而不是像Self-attention一样全都考虑(因为在计算b2的时候只产生了a1和a2):

image-20220730145809007

在准备了, 也要准备符号, Decoder需要在适当的时候输出

Non-autoregressive(NAT)

image-20220730151111244

Encoder和Decoder的联系

decoder接受Encoder输入的部分(Cross attention)就是那样:

image-20220730151209957

image-20220730151647266

不过先有Cross Attention再有的Self-attention.

但是一定用encoder的最后一层输出做decoder一层的输入吗, 不一定. 还有各种各样的模型组合.

训练(这里一定要再多看):

image-20220730152953013

一些训练的Tips:

  1. 机器对话从输入里面copy一些数据作为输出
    image-20220730153315064

  2. 还比如摘要, 也可以从输入做一些copy, 最早的模型是叫做Pointer network.

  3. Guided Attention, 在一些任务, 比如语音识别, TTS时输入和输出需要人为的进行一些aligned, 对attention的结构进行一些固定, 关键词为Monotonic Attention, Location-aware attention.

  4. Beam Search

    也许第一步选择小的概率后面反而更好一点.
    image-20220730154203077

Optimizing Evaluation Metrics

评估方法用BLEU score, 但是没法微分只能用Cross entopy, 但是可以用RL来硬用BLEU score来traing:

image-20220730154736956

exposure bias

训练的时候是用对的答案来矫正, 但是在真正预测的时候预测的结果可能不是正确的, 所以会一步错, 步步错, 优化方法就是在traing的时候投入一些不好的数据, 训练出来在测试数据中反而更好:

image-20220730154931061

image-20220730154941419

自注意力机制类别总结

第6讲 GAN

生成式对抗网络(GAN)-1

image-20220731224941839

当任务的具有创造性的时候,就需要用生成模型, 具体的说, 就是同一个模型输出是不固定的, 常见的任务有:

  • Drawing
  • Chatbot

生成模型最常见的模型是: Generative Adversarial Network(GAN).有很多GAN(the-gan-zoo)

Distribution选个简单的就好, 模型会自动把分部对应成不同的输出.

image-20220731230058842

除了Genrator之外, 还需要训练一个Discriminator(输入图片,输出一个数字, 意义是评价二次元图片真实程度):

image-20220731230243625

Discriminator就像是Generator的天敌:

image-20220731230445762

image-20220731230648006

训练过程:

  1. 固定G, 然后输入vector让G产生假图片, 然后喂给真图和假图训练D可以识别出真假图
  2. 固定D, 然后输入vector让G生成图片, 然后目标让D的分数变大(也就是让D识别不出假).
    image-20220731231751723
  3. 循环
    image-20220731231824389

李宏毅训练了100次, 还没效果, 1000次开始有眼睛, 2000次开始有嘴巴, 5000次开始逐渐轮廓, 20000次基本就有了, 50000次基本能看了.

如果对输入的向量做一些内叉, 输出也会有对应:

image-20220731232421925

生成式对抗网络(GNN)-2

image-20220731234029029

问题是如何计算这种divergence?GAN就是可以解决, 最大化Obejecttive Function(和divergence是有关的), 我感觉就是把分类问题的交叉熵转换成了一个分数, 而最大化这个分数.

image-20220731234654077

所以, 真假divergenceUI越小, 则方框函数越小, 也就是越难分辨, 同理越大.

image-20220731235006419

最终的数学形式如图:

image-20220731235203795

也可以用其他的divergence对应的Obeject function:

image-20220731235242035

GAN训练的Tips(挑一个最著名的W Gan):

首先, 讲一下JS divergence:

JS divergence在$P_G$和$P_{data}$的分布不想交时计算值永远为$log2$.

所以如果两个分布不相交时,永远可以分类出来:

image-20220801000203308

所以改进是用Wasserstein distance.

image-20220801000628566

image-20220801000719480

image-20220801001225621

image-20220801001403177

生成式对抗网络(GNN)-3

image-20220801194533568

GAN for Sequence Generation(Scratch GNN):

其他的生成模型:

image-20220801195225063

用监督学习的方法生成生成模型:

image-20220801195447224

生成模型的评估:

  1. 人看
  2. 跑图片分类, 如果分类越集中, 则更好一点(但是有个问题, 在GNN训练的时候, 只能出现一张很像的图片们, 这时候这个评估不太好了, mode collapse), 这个问题目前还没解决.
  3. More Dropping
  4. 可以Diversity看一张图片用多个分类器输出的平均, 越平均越好, 具体叫做Inception Score.
  5. 也可以用FID来评估, 也就是分类前进入softmax前的那个向量, 算各个图片对应的这个向量的距离.
    image-20220801200347871

Conditional Generator:

可以操纵Generator的结果,(监督学习), 也就是Text-to-Image:

image-20220801201850831

也可以看一张图片, 产生一张图片:

image-20220801201909624

image-20220801202315474

也可以输入声音, 产生图片, 也可以输入一张图片, 产生它的动态图

生成式对抗网络(GNN)-4

用Unspaired Data来训练GNN(比如影像风格转换):

image-20220801203708544

image-20220801203836454

可以在多种风格间做转换:

image-20220801204024481

也可以Text-Style-Transfer, 还有其他:

image-20220801204742695

第7讲 自监督学习-BERT

自监督学习(self-surpervised learning)

ELMO:94M

BERT: 340M

GPT-2: 1542M

Megatron: 8B

T5: 11B

Turing NLG: 17B

GPT-3: 10倍 NLG

自监督学习2-BERT介绍

BERT的作用:

image-20220804201640153

image-20220804201813493

image-20220804201932063

image-20220804202137884

BEAT的好处:

  1. loss下降的更快
  2. loss最终降低的更低

BERT的下游任务:

  1. Input: Sequence, output: class, 比如情感分类

  2. Input: Sequence, output: same as input, 比如词性标注
    image-20220804202438455

  3. 输入: 2个句子, 输出: 1个类别, 比如Natrual Language Inference(NLI).
    image-20220804202626923

  4. Extraction-based Question Answering(QA)
    image-20220804202912012

    image-20220804203116000
    image-20220804203128502

    BERT的向量长度理论没有限制, 但是实际上512以内.

那如何将BERT运用到seq2seq中的任务中呢?

image-20220804203555644

image-20220804203627187

自监督学习-3-BERT的奇闻异事

BERT的工作方式(做填空题):

image-20220805091736268

虽然BERT是从文字来训练出来的, 但是BERT用到protein, DNA, music, 都可以, 比如DNA sequece, 把A G A C分别对应某个单词, 然后再输入BERT, 再进行分类, 也有比较好的效果.

Multi-lingual BERT

用多语言预训练, 并且就算是用English来Fine-tune, 但直接用chinese, 也有比较好的效果:

image-20220805092537476

Multi-lingual BERT的中英文具体区别在哪里:

image-20220805093234191

自监督学习-4-GPT的野望

GPT的Model的训练是 Predict Next Token.

GPT的使用:

BERT还是需要fine-tune的, 但是使用GPT时, 用Few-shot learning, 并且不用梯度下降调参数, 知识给几个例子, 然后让做相同的任务, 这种训练叫做In-context learning. 但是正确率有点低.

Self-supervised learning还用再Speech , CV领域:

image-20220805094820400

Speech GLUE - SUPERB

image-20220805095206730

第8讲 Auto-encoder

image-20220805102220541

自编码器(Auto-Encoder)上-基本概念

Auto-encoder是self-supervised learning的一种, 然后将pre-train model用于下游任务:

image-20220805100200833

而Auto-encoder是这样的, 将生成的中间vector用做下游的feature:

image-20220805100535162

Auto-encoder变形: De-noising Auto-encoder(加入杂讯, 然后还原加入杂讯前的图片):

image-20220805101238813

而从加入杂讯的角度, BERT也就是加入了杂讯, 所以BERT也可以看作一个de-noising auto-encoder:

image-20220805101559598

自编码器(Auto-encoder)下-更多应用

Feature Disentangle:

image-20220805101858243

Feature Disentangle的应用: Voice Conversion.

Discrete Representation

中间的向量可以强制为离散的, 也许可以用于自监督分类.

image-20220805102523932

VQVAE:

image-20220805102822737

文字也可以做Auto-encoder, 中间的向量也许是Summary(但是行不通, 所以还需要GAN的概念),

image-20220805103209833

Auto-encoder更多应用

  1. Generator(用Auto-encodeer的后半部分decoder做生成)

    image-20220805103704308

  2. Compression
    image-20220805103831643

  3. Anomaly Detection(异常检测)
    比如信用卡交易欺诈侦测
    image-20220805104157696
    image-20220805104325083

第9讲 Explainable AI

机器学习的可解释性-1(Local EXPLANATION)

Goal of Explainable ML: 只需要一个解释, 能让人高兴的解释就是好的解释.

两类:

  • Local Explanation, 对某个instance的判断给出理由
  • Global Explanation, 对这个模型给出理由

在图像处理中, 用一个mask把原图遮住, 然后再做判断, 如果影响大, 就说明这个区域重要

image-20220805111308899

具体的来说, 对于某个像素做一些改动, 然后看loss改动的范围:

image-20220805111701808

image-20220805111934932

如何解释network:

  1. 肉眼观察
  2. Probing

机器学习的可解释性-2(GLOBAL EXPLANATION)

image-20220805114441541

也可以用简单模型模仿复杂模型, 再解释简单模型:

image-20220805114849288

思考:

  1. 输入数据是这样, 那如果应用到ibizsim-ml是如何形成训练数据呢

  2. Decoder的结构可以完美的契合ibizsim的数据输入方式, encoder的输出就是初始信息, begin就是第九期决策. 然后第9期的决策结果就又输入网络加上encoder的初始信息再进行下一次判断.

  3. Discriminator的训练过程是否可以用到ibiszim中

  4. BERT的掩盖self-supervised考虑到ibizsim

  5. 冻结前半部分网络(前9轮) ,再训练第10轮, 然后再冻结, 再训练

  6. GPT的预测下一个token的这种模型可不可以用到ibizsim.(也就是生成的能力)

  7. 06年的 RBM 是每一层都训练好, 然后接起来再微调, ibizsim似乎也可以这样做

  8. 用可解释性来评估ibizsim模型

作业

作业二: speech regogition

作业三: image recognition

作业四: sepaker recognition

作业5: Machine Translation

作业6: Generator

作业7: Fine-tune BERT

HW

Task Description

Data

Net

Hints

HW1

Task Description

Given survey results in the past 5 days in a specific state in U.S., then predict the percentage of new tested positive cases in the 5th day.

给前四天阳性病例的人数, 预测第5天的个人.

Data

# train_data size: 2699 x 118 (id + 37 states + 16 features x 5 days)

# test_data size: 1078 x 117 (without last day’s positive rate)

Train

118 X 16X8X1

MSELoss

SGD

Hints

simple : sample code

medium : Feature selection

strong : Different model architectures and optimizers

boss : L2 regularization and try more parameters

HW2

Task Description

  1. Data Preprocessing: Extract MFCC features from raw waveform (already done by TAs!)
  2. Classification: Perform framewise phoneme classification using pre-extracted MFCC features.

Task: Multiclass Classification
Framewise phoneme prediction from speech.

Data

image-20220802160400576

而一个frame是39维度的向量.

Train

self.block = nn.Sequential(
            nn.Linear(input_dim, output_dim),
            nn.ReLU(),
            nn.BatchNorm1d(output_dim),
            nn.Dropout(0.2)

Input: 39 * concat_nframes(11) = 429

block(input_dim, hidden_dim)

[0-n个block(input_dim, hidden_dim)]

output: 41(种类的个数)

注意这里是一个batch, 一个btach训练的, 以batch512为举例则一次训练是这样的:

x = 512 X 429, y = 512 X 1 这个1有41个取值0-40.

CrossEntropy

AdamW

Hints

● (1%) Simple baseline: 0.45797 (sample code)

● (1%) Medium baseline: 0.69747 (concat n frames, add layers)

● (1%) Strong baseline: 0.75028 (concat n, batchnorm, dropout, add layers)

● (1%) Boss baseline: 0.82324 (sequence-labeling(using RNN))


欢迎在评论区中进行批评指正,转载请注明来源,如涉及侵权,请联系作者删除。

×

喜欢就点赞,疼爱就打赏