ai_tools

ai_tools

ai_tools

SOME USEFUL TOOLS

记录一些方便进行实验的tools

wandb

weight & Bias缩写,参数可视化平台,比TensorBoard更强大,优势如下

  • 更有利于复现模型
  • 自动上传云端,可便捷查看旧实验结果
  • 快速集成,每次运行模型可记录完备指标和记录
  • 集中式指示版
常用函数
  • wandb.init():初始化

    1. project:字符串格式,定义项目名称
    2. name:字符串格式,具体名称(项目可能用不同版本)
    3. config:可用wandb.config.update()更新,训练参数配置(比如lrbatchsize,epoch
    4. resume:定义程序意外中断时是否继续,默认为None
    1
    2
    3
    4
    wandb.init(project='project',
    name='name',
    config=config,
    resume='None')
  • wandb.log():将log内的参数值自动上传更新,wandb.Image()为图像显示

    1
    2
    3
    4
    5
    wandb.log({'loss': loss, 'epoch': epoch, 'learning rate': cur_lr,
    'images': wandb.Image(images.float()),
    'masks': {'true': wandb.Image(targets.float()),
    'pred': wandb.Image(pred.float())}
    })
  • wandb.save():保存运行项相关文件,如模型权重

  • wandb.restore():运行指定运行项时恢复代码状态

pytorch支持的优化器

原理 优点 缺点 适用场景
SGD 直接计算梯度进行参数更新
\(\theta_{t+1}=\theta_t-\eta\nabla_\theta L(\theta_t)\)
更用mini-batch的时候,可以收敛得很快 ①在随机选择梯度的同时会引入噪声,使得权值更新的方向不一定正确;②不能解决局部最优解的问题 大规模数据集,以及不需要精细调整超参数的简单模型训练
SGD+Momentum 在SGD基础上引入历史梯度累积
\(v_{t+1}=\beta v_t+(1-\beta)\nabla_\theta L(\theta_t)\\\theta_{t+1}=\theta_t-\eta v_{t+1}\)
加快收敛速度,有一定摆脱局部最优的能力,一定程度上缓解了没有动量的时候的问题 更新的时候
在一定程度上保留之前更新的方向,仍然继承了一部分SGD的缺点
参数空间较复杂
Adam 结合了SGD和Momentum,并对每个参数梯度进行更新
\(\begin{gathered}m_t=\beta_1m_{t-1}+(1-\beta_1)\nabla_\theta L(\theta_t)\\v_t=\beta_2v_{t-1}+(1-\beta_2)(\nabla_\theta L(\theta_t))^2\\\hat{m}_t=\frac{m_t}{1-\beta_1^t},\quad\hat{v}_t=\frac{v_t}{1-\beta_2^t}\\\theta_{t+1}=\theta_t-\eta\frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon}\end{gathered}\)
计算效率高,收敛速度快,自动调整学习率 在某些情况不如SGD的泛化能力,需要调整超参数 对收敛速度和稳定性有较高要求、大规模数据集
Adagrad 累计每个参数平方梯度
\(G_t=G_{t-1}+\nabla_\theta L(\theta_t)^2\\\theta_{t+1}=\theta_t-\eta\frac{\nabla_\theta L(\theta_t)}{\sqrt{G_t}+\epsilon}\)
为每个参数自适应调整学习率,适合稀疏数据 学习率会逐步降低,训练后期速度慢 处理稀疏数据或具有不同频率要求的参数更新
Adadelta Adagrad改进,限制累计历史梯度范围避免学习率过早减小
\(\begin{gathered}E[g^2]_t=\rho E[g^2]_{t-1}+(1-\rho)g_t^2\\\theta_{t+1}=\theta_t-\frac{\eta\nabla_\theta L(\theta_t)}{\sqrt{E[g^2]_t+\epsilon}}\end{gathered}\)
避免在训练后期,学习率过小;初期和中期,加速效果不错,训练速度快 需要手动指定初始学习率,初始梯度过大会导致整个训练过程的学习率一直很小,在模型训练的后期,模型会反复地在局部最小值附近抖动,从而导致学习时间变长 需要自动调整学习率但不希望学习率逐渐降低
RMSprop 字数应学习率优化器,通过计算每个参数梯度指数加权平均调整
\(v_t=\beta v_{t-1}+(1-\beta)(\nabla_\theta L(\theta_t))^2\\\theta_{t+1}=\theta_t-\eta\frac{\nabla_\theta L(\theta_t)}{\sqrt{v_t}+\epsilon}\)
类似于Adadelta,收敛较快 Adam类似,需要更精细的超参数调整,不适用于小批量数据 需要快速收敛,稀疏数据任务
AdamW 权重衰减
\(\begin{gathered}m_t=\beta_1m_{t-1}+(1-\beta_1)\nabla_\theta L(\theta_t)\\v_t=\beta_2v_{t-1}+(1-\beta_2)(\nabla_\theta L(\theta_t))^2\\\hat{m}_t=\frac{m_t}{1-\beta_1^t},\quad\hat{v}_t=\frac{v_t}{1-\beta_2^t}\\\theta_{t+1}=\theta_t-\eta\frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon}-\eta\lambda\theta_t\end{gathered}\)
带权重衰减的Adam,防止过拟合 需要调整超参数 需要防止过拟合
Adamax 计算梯度的加权平方和时,使用的是过去梯度的最大值,而不是加权平方和的平方根
\(u_t=\max(\beta_2u_{t-1},|\nabla_\theta L(\theta_t)|)\\m_t=\beta_1m_{t-1}+(1-\beta_1)\nabla_\theta L(\theta_t)\\\theta_{t+1}=\theta_t-\eta\frac{m_t}{u_t+\epsilon}\)
在处理稀疏梯度时表现较好,尤其是在一些梯度不稳定或参数变化范围较大的场景中 收敛速度稍慢,对超参数选择敏感 需要稳定训练,尤其是学习率选择较为困难
  • SGD

    优点:计算效率高,对于某些模型和数据集泛化能力较好

    缺点:收敛速度慢,容易陷入局部最小值

基础知识学习
T2I

T2I

T2I

Framework

img

Read more
Explainable_ML

Explainable_ML

Explainable_ML

Explainable ML

产生原因:预测正确 != 模型有效,即希望模型能给出预测结果的支撑原因,深度神经网络对我们是一个黑盒结构,不能直接解释其结果

Read more
FGSM & PDG
,"pages":"Pages","categories":"Categories","tags":"Tags"}); });