Pytorch强化学习demo

训练模型, 让它的输出更接近0.8。当离0.8越大, reward越小, 甚至为负, 那就代表着奖励更少, 惩罚更多。比如现在模型输出是0.5, 那么就会有对应的reward值, 代表正奖惩力度。那么当loss向前传导, step()

更新权重时, 它知道0.5会有惩罚, 但它怎么知道要大于0.5的方向调整, 还是小于0.5的方向调整呢。它其实会对reward = 1.0 - diff * 5这个式子求导处理。因此它知道这个0.5小了。如果输出的时0.9,它会知道大了。

它会根据reward = 1.0 - diff * 5知道调整的方向. 就像调节声音一样,当你向左拧按钮,有人告诉你声音小了。往右拧,告诉你大了。多次调整就能调整到一个合适的值了。

一个值x输入model, 经过神经网络fc, 得到输出, 然后输出再经过与标注的值计算loss, 或者强化学习, 设置reward和loss策略, 从loss到x都是张量, 全都被计算图连接着。因此loss.backward()会向前传导所有计算图里的张量, optimizer.step()会根据梯度的方向来改变网络中的权重参数。

python 复制代码
import torch
import torch.nn as nn
import torch.optim as optim

# --- 模型:输入1,输出一个数(0~1之间)
class SimpleModel(nn.Module):
    def __init__(self):
        super().__init__()
        #    #根据fc.weight.grad和fc.bias.grad来去更新fc.bias和fc.weight的值对么
        self.fc = nn.Linear(1, 1)   #     self.fc = nn.Linear(1, 1)  # 输入是一个固定的常数1 y=x×w+b   w 就是 weight,b 就是 bias。  在这个小例子里,唯一在学习的,就是这个 Linear 层的 weight 和 bias。
        self.sigmoid = nn.Sigmoid()  # 输出限制在 [0,1]  Sigmoid()是一个激活函数, 把任何输入映射成[0, 1]之间

    def forward(self, x):
        return self.sigmoid(self.fc(x))


model = SimpleModel()
optimizer = optim.Adam(model.parameters(), lr=0.1)

target_value = 0.8  # 我们希望模型的输出接近这个值

# --- 训练循环 ---
for step in range(50):
    x = torch.ones(1,1)                 # 输入随便,就给常数1
    output = model(x)                   # 模型输出一个值,范围[0,1]

    # 奖励函数:越接近 target_value 越好
    diff = abs(output.item() - target_value)
    reward = 1.0 - diff * 5  # k=5,距离越大惩罚越大

    # 损失函数:-reward * log(output)
    logp = torch.log(output)
    loss = -reward * logp

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    print(f"Step {step}: output={output.item():.3f}, reward={reward:.3f}, loss={loss.item():.3f}")



# loss.backward()   # 计算出梯度,存到 fc.weight.grad 和 fc.bias.grad
# optimizer.step()  # 用梯度更新 fc.weight 和 fc.bias 的值


# optimizer.step()
# 作用:根据梯度更新参数
# 例如用 SGD 的话,大概是:
# w:=w−η⋅gradw​
# b:=b−η⋅gradb​
# 其中 η 就是学习率 (lr)。
# 用 Adam 的话,更新更复杂,但核心思想一样:用 .grad 来更新 weight 和 bias


    
相关推荐
AI科技星5 小时前
全域谱分析:无穷维超复数信息场分形统一场论 ——自然、量子、金融多重分形第一性原理完整体系(中英双语终稿)
人工智能·机器学习·金融·乖乖数学·全域数学
国服第二切图仔5 小时前
HarmonyOS APP《画伴梦工厂》开发第44篇-页面路由注册与动态加载——main_pages配置
深度学习·华为·harmonyos
hans汉斯8 小时前
基于改进交叉熵损失函数与Transformer的心电信号高风险分类研究
功能测试·深度学习·算法·yolo·目标检测·分类·transformer
Token炼金师12 小时前
推理部署层:吞吐上不去的显存账本与调度博弈
人工智能·深度学习·llm
次旅行的库14 小时前
解决Device API gpu is not enabled. Please install the cuda version of dgl.
深度学习·神经网络·推荐算法
Tbisnic14 小时前
从链式法则到ReLU:梯度消失的数学本质与工程解决方案
python·深度学习·大模型·激活函数·梯度消失
_codemonster14 小时前
从零手搓大模型(五)把 GPT 微调成垃圾信息分类器
人工智能·gpt·机器学习
郭泽斌之心14 小时前
不买 Trading Central,自己做一套交易信号引擎:MA/BB/Pivot/ATR + 集中采集架构
人工智能·深度学习·ea·mt5·fay数字人·easydeal
想会飞的蒲公英15 小时前
一个 PyTorch 模型训练的完整流程
人工智能·pytorch·python
留白_15 小时前
【决策树】泰坦尼克号生存预测
算法·决策树·机器学习