CTFweb WarmUp解析

本文介绍了一种通过查看图片页面源码来发现隐藏信息的方法。首先,通过检查source.php文件,发现了另一个hint.php文件的存在。进一步分析后,利用'%253F'绕过技巧,成功获取了flag。这是初次尝试分享此类技巧,希望对读者有所启发。

首先查看源码

返回到图片页面打开source.php文件

发现还包含的有一个文件,于是再次返回图片页面打开hint.php

得到

%253F绕过

即可得flag.

第一次写,不喜勿喷

 

 

 

 

 

 

03-30
### Warmup 在 IT 领域中的含义 在机器学习和深度学习领域,Warmup 是一种优化策略,用于改进模型训练过程中的收敛速度和稳定性。Warmup 的核心思想是在训练初期逐步增加学习率,而不是一开始就使用较高的学习率[^1]。这种方法可以有效防止由于初始阶段的学习率过高而导致的梯度爆炸或模型不稳定。 Warmup 技术通常应用于大规模神经网络训练过程中,尤其是在涉及 Transformer 架构的情况下(如 DeiT)。这是因为 Transformer 模型具有较大的参数量,在训练初期可能会因为过高的学习率而难以稳定收敛。 --- ### Warmup 的实现方式 以下是几种常见的 Warmup 实现方法: #### 方法 1:线性增长法 在线性增长法中,学习率会从一个较小的初始值逐渐线性增加到预设的最大值。这种技术可以通过以下公式表示: \[ \text{lr} = \min\left(\frac{\text{current\_step}}{\text{warmup\_steps}}, 1\right) \cdot \text{base\_learning\_rate} \] 其中 `current_step` 表示当前迭代步数,`warmup_steps` 表示 Warmup 执行的总步数,`base_learning_rate` 则是最终的目标学习率。 下面是基于 PyTorch 的线性 Warmup 实现代码示例: ```python def get_lr_warmup(optimizer, warmup_steps): def lr_lambda(current_step): if current_step < warmup_steps: return float(current_step) / float(max(1, warmup_steps)) return max( 0.0, float(warmup_steps - current_step) / float(max(1, warmup_steps)) ) return torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda) # 使用示例 optimizer = torch.optim.Adam(model.parameters(), lr=base_lr) scheduler = get_lr_warmup(optimizer, warmup_steps=1000) for epoch in range(num_epochs): for batch in data_loader: optimizer.step() scheduler.step() ``` #### 方法 2:指数衰减法 另一种常见的方式是采用指数形式的增长函数。这种方式允许更灵活地控制学习率的变化曲线。其基本公式如下所示: \[ \text{lr} = \text{initial\_lr} \times e^{k \cdot t} \] 这里 \( k \) 和 \( t \) 分别代表增长率常数以及时间变量。 虽然该种方案较为复杂,但在某些特定情况下能够带来更好的效果。 #### 方法 3:余弦退火结合 Warmup 此组合方式先执行一段时间内的渐进升温操作,之后再切换至周期性的余弦退火模式。这有助于进一步提升泛化能力并减少震荡现象的发生概率。 下面是一个简单的 TensorFlow/Keras 版本实现例子: ```python import tensorflow as tf class WarmUpCosine(tf.keras.optimizers.schedules.LearningRateSchedule): def __init__(self, learning_rate_base, total_steps, warmup_steps): super(WarmUpCosine, self).__init__() self.learning_rate_base = learning_rate_base self.total_steps = total_steps self.warmup_steps = warmup_steps @tf.function def __call__(self, step): global_step_recomp = tf.cast(step, dtype=tf.float32) learning_rate = self.learning_rate_base * (global_step_recomp / self.warmup_steps) cosine_decay = 0.5 * ( 1 + tf.cos(np.pi * (global_step_recomp - self.warmup_steps) / (self.total_steps - self.warmup_steps))) learning_rate *= cosine_decay return tf.where(global_step_recomp >= self.warmup_steps, learning_rate, self.learning_rate_base * (global_step_recomp / self.warmup_steps)) # 调用实例 schedule = WarmUpCosine(learning_rate_base=0.01, total_steps=10000, warmup_steps=1000) opt = tf.keras.optimizers.SGD(schedule) model.compile(loss='categorical_crossentropy', optimizer=opt) ``` --- ### 总结 Warmup 主要作用在于缓解大型模型训练早期可能遇到的各种问题,比如数值不稳或者损失发散等状况。通过合理设置相关超参,可显著提高整体效率与质量表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值