learning_rate.py

这段代码实现了一个线性调度器(linear_schedule),用于在训练过程中动态调整某个值(例如学习率)。调度器的作用是根据训练进度(progress)从初始值(initial_value)线性过渡到最终值(final_value),并在达到指定的进度(final_progress)后保持最终值不变。


1. 函数定义

python
复制
def linear_schedule(initial_value: float, final_value: float, final_progress: float) -> Callable[[float], float]:
  • 参数:

    • initial_value: 初始值(例如初始学习率)。

    • final_value: 最终值(例如最终学习率)。

    • final_progress: 达到最终值的进度比例(范围是 0 到 1)。

  • 返回值:

    • 返回一个函数,该函数接受当前进度(progress)并返回当前的值。


2. 内部函数 func

python
复制
def func(progress: float) -> float:
  • 参数:

    • progress: 当前进度,范围是 1(训练开始)到 0(训练结束)。

  • 返回值:

    • 当前的值(例如当前的学习率)。

逻辑

  1. 线性过渡阶段:

    • 如果当前进度 progress 大于 final_progress,说明还未达到最终值的进度。

    • 使用线性插值公式计算当前值:

      python
      复制
      initial_value + (1.0 - progress) * (final_value - initial_value) / (1.0 - final_progress)

      这里 (1.0 - progress) 表示剩余的进度比例,(final_value - initial_value) 是值的总变化量,(1.0 - final_progress) 是线性过渡的总进度比例。

  2. 保持最终值阶段:

    • 如果当前进度 progress 小于或等于 final_progress,说明已经达到最终值的进度。

    • 直接返回 final_value


3. 返回值

  • 返回 func 函数,该函数可以根据当前进度动态计算并返回当前的值。


4. 代码的核心功能

  • 动态调整值:

    • 在训练过程中,根据进度从 initial_value 线性过渡到 final_value

    • 在达到 final_progress 后,保持 final_value 不变。

  • 灵活性:

    • 可以用于调整学习率、探索率(epsilon)等需要动态变化的参数。


5. 代码的应用场景

  • 学习率调度:

    • 在训练初期使用较高的学习率,随着训练进度逐渐降低学习率,以提高训练的稳定性和收敛性。

    • 例如:

      python
      复制
      lr_schedule = linear_schedule(initial_value=1e-3, final_value=1e-5, final_progress=0.9)
  • 探索率调度:

    • 在强化学习中,随着训练进度逐渐降低探索率(epsilon),从探索为主过渡到利用为主。

    • 例如:

      python
      复制
      epsilon_schedule = linear_schedule(initial_value=1.0, final_value=0.01, final_progress=0.5)

6. 示例

假设我们使用 linear_schedule 来调整学习率:

python
复制
# 定义学习率调度器
lr_schedule = linear_schedule(initial_value=1e-3, final_value=1e-5, final_progress=0.8)

# 训练过程中动态调整学习率
for progress in np.linspace(1.0, 0.0, num=10):
    current_lr = lr_schedule(progress)
    print(f"Progress: {progress:.2f}, Learning Rate: {current_lr:.6f}")

输出:

复制
Progress: 1.00, Learning Rate: 0.001000
Progress: 0.89, Learning Rate: 0.000888
Progress: 0.78, Learning Rate: 0.000775
Progress: 0.67, Learning Rate: 0.000663
Progress: 0.56, Learning Rate: 0.000550
Progress: 0.44, Learning Rate: 0.000438
Progress: 0.33, Learning Rate: 0.000325
Progress: 0.22, Learning Rate: 0.000213
Progress: 0.11, Learning Rate: 0.000100
Progress: 0.00, Learning Rate: 0.000010

总结

这段代码实现了一个线性调度器,用于在训练过程中动态调整某个值(如学习率或探索率)。它根据训练进度从初始值线性过渡到最终值,并在达到指定进度后保持最终值不变。这种调度器在强化学习和深度学习中被广泛使用,以提高训练的稳定性和性能。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇