机器学习——强化学习与深度强化学习

news2024/10/8 17:27:37

强化学习与深度强化学习:从基础到深入

引言

近年来,强化学习(Reinforcement Learning, RL)在多个领域取得了巨大的进展。从早期简单的迷宫导航问题到今天 AlphaGo 击败围棋世界冠军,强化学习的潜力得到了充分展现。而随着深度学习的引入,深度强化学习(Deep Reinforcement Learning, DRL)更是将这一技术推向了前所未有的高度。本篇文章将深入探讨强化学习与深度强化学习的基本原理、常见算法以及应用场景,旨在为读者提供一个详尽的学习路线图。

1. 强化学习基础

1.1 什么是强化学习

强化学习是一种让智能体(Agent)通过与环境(Environment)交互,获得奖励(Reward)来学习如何采取行动的学习方法。在强化学习中,智能体通过试错不断学习,以期最大化其累积的奖励。

强化学习的基本框架包括以下几个核心元素:

  • 状态 (State):智能体所处的环境状态。
  • 动作 (Action):智能体在当前状态下可以采取的行动。
  • 奖励 (Reward):智能体采取某个动作后得到的反馈。
  • 策略 (Policy):智能体选择某个动作的策略,可以是确定性的也可以是随机的。
  • 价值函数 (Value Function):衡量一个状态或者状态-动作对的好坏。

强化学习的目标是找到最优策略,使得智能体能够在与环境交互的过程中,累积到最多的奖励。

1.2 马尔可夫决策过程(MDP)

强化学习问题通常被建模为一个马尔可夫决策过程(Markov Decision Process, MDP),MDP 是一个五元组 ( S , A , P , R , γ ) (S, A, P, R, \gamma) (S,A,P,R,γ),其中:

  • S S S:状态空间。
  • A A A:动作空间。
  • P ( s ′ ∣ s , a ) P(s'|s, a) P(ss,a):状态转移概率,表示在状态 s s s 下采取动作 a a a 转移到状态 s ′ s' s 的概率。
  • R ( s , a ) R(s, a) R(s,a):奖励函数,表示在状态 s s s 下采取动作 a a a 所获得的奖励。
  • γ \gamma γ:折扣因子,表示未来奖励的衰减程度。

在 MDP 中,未来的状态只取决于当前的状态和动作,而与之前的状态无关,这就是所谓的马尔可夫性。

1.3 强化学习的主要方法

强化学习的算法主要可以分为三大类:

  1. 值迭代方法:如 Q-Learning。
  2. 策略迭代方法:如策略梯度(Policy Gradient)。
  3. 基于模型的方法:如 Dyna-Q。
1.3.1 Q-Learning

Q-Learning 是一种基于值的强化学习算法,通过学习状态-动作值函数(Q 函数)来找到最优策略。

Q 函数的更新公式如下:

Q ( s , a ) ← Q ( s , a ) + α [ r + γ max ⁡ a ′ Q ( s ′ , a ′ ) − Q ( s , a ) ] Q(s, a) \leftarrow Q(s, a) + \alpha [r + \gamma \max_{a'} Q(s', a') - Q(s, a)] Q(s,a)Q(s,a)+α[r+γamaxQ(s,a)Q(s,a)]

其中, α \alpha α 是学习率, γ \gamma γ 是折扣因子, r r r 是即时奖励, s ′ s' s 是下一状态。

下面是一个简单的 Q-Learning 代码实现:

import numpy as np

# 定义环境
n_states = 6
actions = [0, 1]  # 0: 左, 1: 右
q_table = np.zeros((n_states, len(actions)))

gamma = 0.9  # 折扣因子
alpha = 0.1  # 学习率
epsilon = 0.1  # 探索概率

# Q-Learning 算法
def q_learning(episodes=100):
    for episode in range(episodes):
        state = np.random.randint(0, n_states)
        done = False
        while not done:
            if np.random.uniform(0, 1) < epsilon:
                action = np.random.choice(actions)  # 探索
            else:
                action = np.argmax(q_table[state, :])  # 利用

            next_state = state + 1 if action == 1 else max(0, state - 1)
            reward = 1 if next_state == n_states - 1 else 0

            q_predict = q_table[state, action]
            q_target = reward + gamma * np.max(q_table[next_state, :])
            q_table[state, action] += alpha * (q_target - q_predict)

            state = next_state
            if state == n_states - 1:
                done = True

q_learning()
print("Q-table after training:")
print(q_table)

1.4 策略梯度方法

策略梯度方法直接对策略进行优化,其目标是最大化累计奖励的期望值。常见的策略梯度方法有 REINFORCE 算法。

策略梯度的核心思想是通过参数化策略函数,使用梯度上升的方法不断调整策略的参数,以使得策略获得的期望累积奖励最大化。

1.5 Actor-Critic 方法

Actor-Critic 方法结合了值迭代和策略梯度的优点,Actor 负责选择动作,Critic 负责评估当前策略的好坏。这样可以有效减少策略梯度方法中的高方差问题。

2. 深度强化学习

2.1 深度 Q 网络(DQN)

Q-Learning 虽然简单,但在状态空间很大时,传统的 Q 表无法存储所有可能的状态-动作对。深度 Q 网络(Deep Q Network, DQN)通过引入神经网络来逼近 Q 函数,从而解决了这一问题。

DQN 的核心是使用一个神经网络来估计状态-动作值函数,即 Q ( s , a ; θ ) Q(s, a; \theta) Q(s,a;θ),其中 θ \theta θ 是神经网络的参数。

DQN 的关键技术包括:

  1. 经验回放(Experience Replay):通过存储智能体与环境交互的经验,随机抽取小批量样本进行训练,减少数据之间的相关性。
  2. 目标网络(Target Network):通过引入一个目标网络来稳定训练,目标网络的参数每隔一段时间才更新一次。

以下是一个简单的 DQN 实现代码:

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
import random

class DQN(nn.Module):
    def __init__(self, state_size, action_size):
        super(DQN, self).__init__()
        self.fc1 = nn.Linear(state_size, 24)
        self.fc2 = nn.Linear(24, 24)
        self.fc3 = nn.Linear(24, action_size)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        return self.fc3(x)

state_size = 4
action_size = 2
model = DQN(state_size, action_size)
optimizer = optim.Adam(model.parameters(), lr=0.001)
loss_fn = nn.MSELoss()

# 经验回放缓冲区
memory = []
max_memory = 1000

def replay(batch_size):
    if len(memory) < batch_size:
        return
    batch = random.sample(memory, batch_size)
    states, actions, rewards, next_states, dones = zip(*batch)

    states = torch.tensor(states, dtype=torch.float32)
    actions = torch.tensor(actions, dtype=torch.int64)
    rewards = torch.tensor(rewards, dtype=torch.float32)
    next_states = torch.tensor(next_states, dtype=torch.float32)
    dones = torch.tensor(dones, dtype=torch.bool)

    q_values = model(states).gather(1, actions.view(-1, 1)).squeeze()
    next_q_values = model(next_states).max(1)[0]
    target_q_values = rewards + (1 - dones.float()) * gamma * next_q_values

    loss = loss_fn(q_values, target_q_values.detach())
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

2.2 深度确定性策略梯度(DDPG)

深度确定性策略梯度(Deep Deterministic Policy Gradient, DDPG)是一种适用于连续动作空间的深度强化学习算法,结合了 DQN 和策略梯度方法的优点。

DDPG 使用两个网络:

  1. Actor 网络:用于选择动作。
  2. Critic 网络:用于评估 Actor 的策略。

DDPG 还使用了目标网络和经验回放机制,以稳定训练过程。

2.3 近端策略优化(PPO)

近端策略优化(Proximal Policy Optimization, PPO)是一种广泛使用的策略梯度算法,具有较好的收敛性和鲁棒性。PPO 的核心思想是在更新策略时对策略的变化施加限制,以确保新旧策略之间的差异不会太大,从而稳定学习过程。

PPO 通过优化以下目标函数来更新策略:

L ( θ ) = E [ min ⁡ ( r ( θ ) A , clip ( r ( θ ) , 1 − ϵ , 1 + ϵ ) A ) ] L(\theta) = \mathbb{E}\left[\min(r(\theta)A, \text{clip}(r(\theta), 1-\epsilon, 1+\epsilon)A)\right] L(θ)=E[min(r(θ)A,clip(r(θ),1ϵ,1+ϵ)A)]

其中, r ( θ ) r(\theta) r(θ) 是新旧策略的比值, A A A 是优势函数。

2.4 深度强化学习的挑战与解决方案

深度强化学习在应用中面临许多挑战,如高方差、不稳定性和样本效率低等。针对这些挑战,研究者提出了多种改进方法,如:

  • 双重 DQN(Double DQN):通过分别使用两个网络来减少 Q 值的高估问题。
  • 优势 Actor-Critic(A3C):通过并行训练多个智能体以加速训练过程。

3. 深度强化学习的应用

3.1 游戏 AI

深度强化学习被广泛应用于游戏 AI 中,最著名的例子莫过于 DeepMind 开发的 AlphaGo,它通过深度强化学习击败了人类围棋冠军。

3.2 自动驾驶

在自动驾驶领域,深度强化学习用于解决路径规划、决策和控制等问题。智能体通过不断与模拟环境交互,学习如何在复杂的道路环境中安全驾驶。

3.3 机器人控制

深度强化学习也被应用于机器人控制中,机器人通过学习如何与环境交互,完成如抓取、导航等任务。

4. 结论与展望

强化学习与深度强化学习为人工智能的发展提供了强有力的工具,尤其是在处理连续、复杂环境的决策问题上展现了其强大潜力。然而,深度强化学习的稳定性和样本效率等问题依然存在,需要进一步研究和改进。未来,随着算法的改进和计算能力的提升,深度强化学习将在更多领域取得突破。

本篇文章介绍了强化学习和深度强化学习的基础理论、常见算法及其应用,希望能够帮助读者更好地理解这一领域。强化学习与深度强化学习是一个充满挑战但又充满潜力的研究方向,鼓励大家在这一领域不断探索。

参考文献

  1. Sutton, R. S., & Barto, A. G. (2018). Reinforcement Learning: An Introduction. MIT Press.
  2. Mnih, V., et al. (2015). Human-level control through deep reinforcement learning. Nature.
  3. Lillicrap, T. P., et al. (2016). Continuous control with deep reinforcement learning.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2196837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

掌握RocketMQ——基本概念和系统架构

简述RcoketMQ 概念&#xff1a;RocketMQ是一个开源的分布式消息中间件&#xff0c;由阿里巴巴开发并贡献给Apache软件基金会。它用于处理高吞吐量、低延迟的消息传递&#xff0c;并广泛应用于现代分布式系统中。 1 基本概念 1.1 消息 (Message) 概念&#xff1a;消息是信息传…

自定义协议以及序列化和反序列化

我们知道TCP是全双工的&#xff0c;可以同时进行发收&#xff0c;因为他有一个发送缓冲区和一个接收缓冲区 我们使用write其实是把数据拷贝到发送缓冲区&#xff0c;使用read接收缓冲区的数据&#xff0c;其实是把数据拷贝到文件缓冲区里&#xff0c;发送的过程中&#xff0c;我…

脸书(Facebook)高效开发国外客户的6个技巧

Facebook作为全球使用人数最多的社媒平台&#xff0c;全球三分之一的人都在用。做外贸的话基本上是必须要去掌握的一个平台&#xff0c;因为通过Facebook是可以开发到很多其他渠道平时开发不到的优质客户的。 Facebook跟LinkedIn不同&#xff0c;LinkedIn比较偏向于大B的客户&…

传热学一些“数”和意义

物体单位面积上的导热热阻/单位表面积上的对流换热热阻 无量纲时间 Nu与Bi的表达式相同&#xff0c;但是意义是无量纲的h。它们表达式里的长度取值不同&#xff0c;比如同样一个平板&#xff0c;Bi的L是厚度&#xff0c;Nu是长度&#xff0c;因为Bi面向固体&#xff0c;λ为固…

八种基本服务器类型,看这篇完全够了

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 上午好&#xff0c;我的网工朋友。 服务器作为网络基础设施的核心组件&#xff0c;其重要性不言而喻。 无论是个人空间还是大型企业的数据中心&…

激波是什么?

你肯定能听懂。激波&#xff0c;激烈的波&#xff0c;代表特征&#xff1a;激波扫过你时&#xff0c;重则五脏震动&#xff0c;支离破碎。轻则耳膜震动&#xff0c;隆隆作响&#xff0c;当然也有相对你而言尺度很小的激波&#xff0c;没啥伤害。 所以激波&#xff0c;和相对于…

【VScode】VScode如何离线安装扩展

VScode如何离线安装扩展 一&#xff0c;简介二&#xff0c;操作步骤2.1 扩展下载2.2 扩展安装 三&#xff0c;总结 一&#xff0c;简介 本文以“C/C Extension Pack”扩展为例&#xff0c;介绍如何在没有网络的环境下给VScode安装扩展&#xff0c;供参考。 二&#xff0c;操作…

gradle.properties的注释乱码的解决方案

问题描述&#xff1a; gradle项目的配置脚本的注解出现乱码&#xff1a;&#xff08;#&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff09; gradle.properties #??? PRODSERVER2193.168.0.22 解决方案&#xff1a;&#xff08;3步&#xff09; 增…

OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3568移植案例(上)

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 本文章是基于瑞芯微RK3568芯片的DAYU200开发板&#xff0c;进行标准…

解决AWS Organizatiion邀请多个Linker账号数量限额问题

文章目录 情景再现什么是 AWS Organizations&#xff1f;操作步骤完整支持工单截图参考链接 情景再现 冷知识&#xff1a;默认情况下&#xff0c;一个组织中允许的原定设置最大账户数为10个。新创建的账户和组织的限额可能会低于默认的 10 个账户。 现在需要用一个AWS账号&…

小红书推广的7个数字营销策略分享-华媒舍

数字营销在如今的商业环境中变得越来越重要。在众多数字营销策略中&#xff0c;小红书已经成为了一种受欢迎的推广平台。本文将介绍小红书推广的七个数字营销策略&#xff0c;重点聚焦于第四个策略&#xff0c;该策略能够帮助你超额完成销售目标。 数字营销策略一&#xff1a;明…

JAVA:Fastjson 序列化和反序列化的技术指南

请关注微信公众号&#xff1a;拾荒的小海螺 博客地址&#xff1a;http://lsk-ww.cn/ 1、简述 在 Java 领域&#xff0c;JSON 作为轻量级数据交换格式广泛使用。对于高性能、高并发场景&#xff0c;选择一个高效的 JSON 序列化和反序列化库非常重要。Fastjson 是由阿里巴巴开发…

成长之路:我的技术布道之路回顾

成长之路&#xff1a;从零开始的技术布道之路回顾-哔哩哔哩 大家好&#xff0c;我是许泽宇&#xff0c;今天想跟大家分享一下我在过去一年的成长和收获。这一年对我来说是满满的一年&#xff0c;我在技术布道的道路上取得了一些小小的成绩&#xff0c;也收获了很多宝贵的经验。…

精选四款免费电脑录屏软件,轻松搞定屏幕录制

大家好&#xff0c;我是一个喜欢找各种办公软件的人&#xff0c;今天我要来聊聊咱们日常工作中一个超实用的小工具——电脑录屏软件。作为一个天天和电脑打交道的办公室文员&#xff0c;我算是尝遍了市面上几款热门的录屏神器&#xff0c;它们各有各的绝活&#xff0c;让我在工…

unix系统中的system函数

一、前言 本文将介绍unix系统中的system函数&#xff0c;包括system函数的作用以及使用方法。 二、system函数 简单来说&#xff0c;system函数用于创建一个子进程并让子进程运行新的程序。其原理是依次执行如下操作&#xff1a; fork() --> execl() --> waitpid() 函…

在QT中将Widget提升为自定义的Widget后,无法设置Widget的背景颜色问题解决方法

一、问题 在Qt中将QWidget组件提升为自定义的QWidget后&#xff0c;Widget设置的样式失效&#xff0c;例如设置背景颜色为白色失效。 二、解决方法 将已经提升的QWidget实例对象&#xff0c;脱离父窗体的样式&#xff0c;然后再重新设置自己的样式。

AP8505固定5V输出5V0.2A,SOP7/DIP7非隔离开关电源IC

AP8505基于高压同步整流架构&#xff0c;集成PFM控制器以及500V高可靠性MOSFET&#xff0c;用于外部元器件极精简的小功率非隔离开关电源。AP8505无线门铃芯片内置500V高压启动&#xff0c;实现系统快速启动、超低待机功能。5V非隔离无线门铃芯片AP8505提供了完整的智能化保护功…

基于Python的爬虫设计与数据分析—计算机毕业设计源码37836

目 录 摘要 1 绪论 1.1课题背景 1.2研究目的及意义 1.3爬虫技术 1.4django框架介绍 2 1.5论文结构与章节安排 3 2 基于Python的爬虫设计与数据分析分析 4 2.1 可行性分析 4 2.2 系统流程分析 4 2.2.1数据流程 5 2.2.2业务流程 5 2.3 系统功能分析 5 2.3.1 功能性分析 6 2…

线性代数入门:打开数学的另一扇门

线性代数入门&#xff1a;打开数学的另一扇门 线性代数&#xff0c;作为数学的一个重要分支&#xff0c;它不仅是许多科学和工程领域的核心工具&#xff0c;也是理解现代科技的关键。这篇文章将带你走进线性代数的世界&#xff0c;为你揭开这门学科的神秘面纱。 什么是线性代…

【RAG论文精读1】RAG原始论文-针对知识密集型NLP任务的检索增强生成

目录 一、简介一句话简介作者、引用数、时间论文地址开源代码地址 二、摘要三、引言四、整体架构&#xff08;用一个例子来阐明&#xff09;场景例子&#xff1a;核心点&#xff1a; 五、方法 &#xff08;架构各部分详解&#xff09;5.1 模型1. RAG-Sequence Model2. RAG-Toke…