0%

798.得分最高的最小轮调

第一次写一点思路都没有,扣了半天最终放弃,直奔题解,发现题目主要有两个难点

  1. 从轮调位置角度考虑转换到每个元素位置考虑
    • 我的思路一直局限在从选k出发,如何计算出每个k位置的分数?怎么找到一种贪心或者动态规状态传递的方式
    • 没有从元素的角度出发,某个元素满足小于等于index时,k一定在某个范围内,所有元素决定的k的范围交集次数最多的就是最优解(表达不出来这种思维的转变)
  2. 如何记录最大交集次数?
    • 看完一半题解就想到创建一个数组,每计算出一个k的范围,就将范围内记录全部加一
    • 题解提供的差分数组思路”针不错”
阅读全文 »

ResNet

论文地址 :Deep Residual Learning for Image Recognition

针对深度神经网络难以训练的问题,ResNet提出了一种特殊的网络结构-残差,有效的解决了深度网络的退化问题,降低了深度网络学习难度

论文结构

  1. 摘要 abstract

    按照问题->解决方案->实验效果的逻辑,首先提出问题:“深度神经网络难以训练”,引出解决方案-residual net,最后列举在不同数据上的卓越效果(ImageNet,COCO,CIFAR),证明解决方案的有效性

  2. 介绍 intro

    与摘要的逻辑相同,逻辑非常严密(ps:太丝滑了)

    1. 为什么要用深度网络? 因为深度网络有助于捕捉特征,提升任务效果
    2. 增加网络深度又会出现两个主要问题:一是梯度爆炸/消失,二是深度网络的退化问题
    3. 梯度爆炸可以通过 normalized initialization and intermediate normalization layers 解决
    4. 网络退化如何解决?引出了本文的残差机制-residual
    5. 最后又展示了一轮不同数据上的实验效果
阅读全文 »

迁移学习

由于深度网络的训练对数据要求较大,且训练成本较高,对在其他任务训练好的深度模型使用到相关任务的需求较大,主要方式有

  1. 使用深度模型做特征抽取(bert,word2vec等),输入到不同模型,解决不同任务
  2. 在方便训练的相近的任务(可能是 训练数据充足等)上训练模型,在目标任务上重用训练好的模型
  3. 微调预训练模型

Fine-tuning(从CV方向进行讲解)

CV领域存在很多良好的数据集(imagenet),如何将在这些大数据集上训练好的模型(学到的知识)迁移到自己的任务上来?这就是Fine-tuning要做的任务。

Pre-trained Model

阅读全文 »

深度学习模型设计模式

随着深度学习的不断发展,各式各样包括bert、transformer在内的深度神经网络架构层出不穷,在这些不同的网络架构中往往包含一些通用的深度网络设计模式,主要理解三种:

  1. batch/layer normalization
  2. 残差
  3. 注意力机制

Normalization

Batch Normalization

对输入的一个batch进行标准化处理(减均值,除以方差),能够有效的降低深度网络的学习难度

  • l从梯度角度理解,当从x->y的梯度变化 $\beta$ 变化较大时,梯度下降时沿着x点梯度移动,学习会出现偏差(斜率替代每个点的导数,如果导数变化过大,沿着斜率走就会偏离函数图像)
  • 对于分布变化较大的数据要采用较小的学习率,否则就需要通过Batch Normalization对输入进行平滑化(smooth)
  • 只对线性方法起作用,深度神经不起作用
阅读全文 »

模型调参(Tuning)

模型参数对模型效果有影响较大, 在不同的问题中,我们不仅需要选择合适的模型,也要选择合适的参数

  1. 手动调参(Manual)

    • 从默认参数(工具包默认参数、论文推荐参数)开始

    • 不断调整参数,记录调整后的结果(tensorboard, weight & bias)

  2. 自动调参(Automated)

    • 计算成本在下降,人力成本在上升

  3. AutoML(Automated Machine Learning)

    • 从数据清洗、特征提取到模型选择每一步均由AutoML自动完成
    • 目前模型选择之前的步骤,AutoML完成效果并不好,主要能够解决的两个问题
      1. HPO(Hyperparameter optimization)选择合适的超参数
      2. NAS(Neural architecture search)网络架构搜索
阅读全文 »

集成学习(Ensemble Learning)

In statistics and machine learning, ensemble methods use multiple learning algorithms to obtain better predictive performance than could be obtained from any of the constituent learning algorithms alone.

Bagging-Bootstrap Aggregating

Bagging主要思路是通过结合几个模型(多个相同模型)降低总体的泛化误差(bias+viariance),实际上降低的是方差

  1. 同时训练多个模型(parallel)
  2. 输出取模型平均值(回归模型)或投票(分类模型)

其中每个模型训练数据通过bootstrap sampling方式采样

  1. 有放回采样,m个训练数据,进行m次又放回采样
  2. 大概有 $1- \frac{1}e$ 63%的数据在一次bootstrap采样中未被采样到(out of bag),可以作为模型的验证集
阅读全文 »

Bias & Variance

bias(偏差):模型对于样本的拟合程度,模型输出结果与样本真实结果之间的差距,通过增加模型复杂程度,增加训练轮数,可以实现bias的降低,但可能会出现过拟合问题(high variance)

variance(方差):模型预测结果的稳定性,通过简化模型,可以实现variance的降低 计算公式为 $E[(\hat y - E(\hat y)) ^ 2]$

阅读全文 »

模型验证(Validation)

验证(validation)集与测试(test)集

验证集往往是从训练集中划分出的一部分数据,用来验证模型泛化能力,可以使用多次;测试集是单独的一系列数据,在模型训练完成后,衡量模型效果,一般只使用一次

如何生成验证集

随机划分

特殊情况

某些情况下,训练数据可能不适合采用随机划分的方式验证集合,如

  1. 具有序列关系的数据-股价、房子销售
    • 验证集数据应在训练集后,避免模型训练使用到了验证集的未来信息,导致模型在验证集上的表现较好
  2. 训练数据由不同组,每个组有多个样本-同一个人的多个照片
    • 以组为单位进行随即划分
    • 一百组照片,选70个人训练,30个人验证
  3. 类别不均衡数据
    • 对于较小类更多的采样
阅读全文 »

提升数据质量

在数据收集完成后,数据可能还存在大量的噪声、或者模型难以使用,需要我们进一步处理提高数据质量

  1. 数据噪声较多(脏数据过多) - 数据清洗
  2. 数据格式与模型要求输入不符 - 数据变换
  3. 数据难学习 - 特征工程

数据清洗

针对数据噪声较多的问题,通过数据清洗改善数据质量,常见的Data Error由

  1. Outliers(离群值) 某些数据值远远偏离数据整体分布
  2. Rule violations(违反约束) 例如某些非空字段为空
  3. Pattern violation(语义语法冲突)单位是美元,数据给rmb;数据项目标类型是float,实际类型是string
阅读全文 »

机器学习-数据

当使用机器学习技术解决实际问题时,最先要考虑模型输入数据问题,如何获取数据,对数据进行标注、清理以及变换等,以满足模型的输入要求。

数据获取

主要有两个获取手段

  1. 寻找已有的数据集(MNIST ImageNet等等)
  2. 根据任务,收集,形成自己的数据集
  3. 生成数据
阅读全文 »