14、强化学习全解析:原理、挑战与应用

强化学习全解析:原理、挑战与应用

1. 强化学习的优势

强化学习适用于各种复杂问题,这些问题无法通过传统的框架规则计算来处理。它朝着通用人工智能(AGI)迈进,因为它可以在独立检查各种可能结果的同时,追求长期目标。强化学习的优点如下:
- 专注于整体问题 :传统的机器学习算法旨在在特定子任务上表现出色,而不考虑整体情况。强化学习则不将问题分解为子问题,而是直接尝试最大化长期回报。它有明确的目标,知道最终目的,并能为了长期利益而牺牲短期奖励。
- 无需单独的数据收集步骤 :在强化学习中,训练数据是通过智能体与环境的直接交互获得的。训练数据就是智能体的经验,而不是需要输入到算法中的单独的测量数据集合。这从根本上减轻了负责训练系统的管理者的负担。
- 适用于动态、不确定的环境 :强化学习算法本质上具有适应性,能够对环境因素的变化做出响应。在强化学习中,时间很重要,智能体收集的经验不是独立同分布的,这与传统的机器学习算法不同。由于时间因素在强化学习的机制中根深蒂固,学习本质上是适应性的。

2. 强化学习面临的挑战

尽管强化学习算法在解决不同模拟环境中的复杂问题方面取得了成就,但它们的应用进展一直很缓慢。以下是一些使其应用变得困难的挑战性情况:
- 需要标准规模的经验 :强化学习技术通过与环境元素协作独立创建训练数据。因此,数据收集的速度受到环境元素的限制。具有不合理延迟的环境会减缓学习曲线。此外,在具有极端分层状态空间的复杂环境中,在找到一个出色的解决方案之前需要进行大量的调查。
- 延迟奖励 :学习智能体可以用短期补偿换取长期收益。虽然这一原则使强化学习很有用,但它也使智能体难以找到最有价值的策略。在结果在采取大量连续行动之前都不明确的情况下尤其如此。在这种情况下,为结果对先前的行动进行功劳分配很困难,并且在训练过程中可能会出现很大的差异。国际象棋就是一个很好的例子,在每个玩家都完成所有走法之前,游戏的结果是不明确的。
- 缺乏可解释性 :当强化学习智能体发现了最可靠的策略并被部署到环境中时,它基本上根据自己的经验做出行动。对于外部观察者来说,这些行动背后的理由并不明显。这种缺乏可解释性阻碍了智能体和观察者之间信任的建立。如果观察者能够解释强化学习智能体的行动,这可能有助于他更好地发布信息并发现模型的障碍,特别是在高风险的情况下。

3. 强化学习的类型

强化学习有两种类型:

3.1 正强化

正强化被定义为,当一个事件由于特定行为而发生时,它会增强该行为的力量和频率。换句话说,它对行为有积极的影响。正强化学习的优点包括:
- 最大化总体执行效果;
- 长期保持交易;
- 不过,过多的强化可能会导致状态过载,从而降低结果。

3.2 负强化

负强化被定义为由于不良情况被停止或转向而对行为的强化。负强化学习的优点包括:
- 增强行为;
- 提供对一般执行不重要标准的保护;
- 它至少能达到满足不重要行为的程度。

4. 强化学习的有用应用

考虑到强化学习需要大量信息,因此它最适用于数据被模拟的领域,并且像交互性和先进机械这样的常见问题不适用。
- 游戏领域 :强化学习广泛用于构建用于玩电脑游戏的人工智能。AlphaGo 0 是第一个在古老的中国围棋游戏中击败世界冠军的计算机程序。其他应用包括 ATARI 电脑游戏、西洋双陆棋等。
- 机器人和工业自动化 :在机器人和工业自动化中,强化学习用于使机器人为自己创建一个高效的自适应控制系统,该系统可以从自己的经验和行为中学习。DeepMind 在异步策略更新的机械操作深度强化学习方面的工作就是一个很好的例子。
- 其他应用 :强化学习的其他项目包括抽象文本内容摘要引擎、对话代理(文本和语音),它们可以从个人交互中学习并随着时间的推移而改进,在医疗保健中学习最积极的治疗规则,以及基于强化学习的在线股票交易卖家。

5. 强化学习与监督学习和无监督学习的区别

强化学习被视为机器学习的一部分,尽管它与不同类型的机器学习有一些相似之处,但可以分解为以下四个方面:
|学习类型|特点|示例|
| ---- | ---- | ---- |
|监督学习|算法在一组有标签的数据上进行训练。监督学习算法只能检查数据集中指定的特征。|图像识别模型,这些模型接收一组有标签的图像,并尝试分离预定义类别的常见属性。|
|无监督学习|开发者让算法在完全无标签的数据上自由运行。规则集通过对记录特征的感知进行索引来学习,而不需要被告知要寻找什么。|无|
|半监督学习|这种策略采取折中的方法。开发者输入一个非常小的有标签的训练数据集合,以及一个更大的无标签数据语料库。然后,算法被训练将从有标签数据中学到的东西推断到无标签数据,并从整个集合中得出结论。|无|
|强化学习|它采取一种完全不同的方法。它在具有明确边界的环境中安排一个智能体,这些边界定义了有益和无益的兴趣,以及一个要达到的总体最终阶段。在很大程度上,它与监督学习类似,因为设计者应该为计算提供明确的目标,并描述奖励和指导。这表明所需的明确编程程度比无监督学习更高。然而,当这些边界设定好后,算法会自行工作,使其比监督学习算法更具自我协调性。|无|

6. 执行强化学习的方法

在机器学习中有三种执行强化学习的方法:

6.1 基于价值的方法

基于价值的方法旨在找到理想的价值函数,即在任何策略下一个状态的最大价值。因此,智能体期望在策略 π 下任何状态的长期回报。

6.2 基于策略的方法

基于策略的方法是在不使用价值函数的情况下,为最可能的奖励找到最合适的策略。在这种方法中,智能体尝试使用一种策略,使得每一步所采取的行动有助于最大化未来的回报。基于策略的方法有两种类型的策略:
- 确定性策略 :在任何状态下,策略(π)都会产生相同的行动。
- 随机策略 :在这种策略中,机会决定了所产生的行动。

6.3 基于模型的方法

在基于模型的方法中,为环境创建一个高级模型,智能体通过探索该环境来学习。由于每个环境的模型表示都是独特的,因此这种方法没有特定的响应或规则集。

7. 强化学习的组件

强化学习有四个主要组件:

7.1 策略

策略可以被定义为智能体在给定时间的行为方式。它将环境的可见状态映射到在这些状态下采取的行动。策略是强化学习的核心组件,因为它 alone 可以描绘智能体的行为。在某些情况下,它可能是一个简单的元素或一个探索表,而在其他情况下,它可能包含著名的计算作为搜索方法。它可以是确定性策略或随机策略:
- 确定性策略:x = π(a)
- 随机策略:π(x | a) = P[At =x | St = a]

7.2 奖励信号

强化学习的目的通过奖励信号来体现。在每个状态下,环境向学习智能体发送一个即时信号,这个信号被称为奖励信号。这些奖励是根据智能体所采取的最佳和最差行动来给予的。智能体的主要目标是为积极的行动增加奖励的总数。奖励信号可以改变策略,例如,如果智能体所做的一个行动导致了低奖励,那么策略也可以改变,以便在未来选择不同的行动。

7.3 价值函数

价值函数提供了关于情况和行动的精确程度以及智能体可以预期的回报类型的信息。奖励表示每个正确和错误行动的即时信号,而价值函数表示未来的最佳状态和行动。价值函数依赖于奖励,因为没有奖励就没有价值。评估价值的目的是为了获得更多的奖励。

7.4 模型

强化学习的额外细节是模拟环境行为的模型。借助该模型,你可以对环境的行为进行推断。此外,如果给定一个状态和一个行动,那么模型可以预测下一个状态和奖励。该模型用于制定计划,这意味着它提供了一种在实际遇到未来情况之前,通过考虑所有未来情况来采取行动过程的方法。借助模型解决强化学习问题的方法被称为基于模型的方法。同样,不使用模型的方法被称为无模型方法。

8. 典型的强化学习算法

强化学习的循环由一些采用非常特殊系统的算法组成,而不是与特定的估计进行交互。这些区别主要是由于它们探索周围环境的方法不同。

8.1 状态 - 行动 - 奖励 - 状态 - 行动(SARSA)

这种强化学习算法是通过给智能体提供所谓的策略来开发的。该策略基本上是一种可能性,它告诉智能体导致奖励或有价值状态的积极行动的比率。

8.2 Q - 学习

这种强化学习方法采用另一种策略。智能体没有策略,这意味着它对环境元素的探索更加自我协调。

8.3 深度 Q 网络

这些算法与强化学习方法类似地使用神经网络。它们利用强化学习的自我协调环境因素探索。未来的行动完全取决于神经网络发现的过去有用行动的随机样本。

9. 强化学习算法:使用 Q - 学习的 Python 实现

以下是使用 Q - 学习算法训练一个机器人到达目标的详细步骤:

9.1 步骤 1:导入必要的库

import numpy as np
import pylab as pl
import networkx as nx

9.2 步骤 2:定义并可视化图形

edges = [(0, 1), (1, 5), (5, 6), (5, 4), (1, 2), (1, 3), (9, 10), (2, 4), (0, 6), (6, 7), 
         (8, 9), (7, 8), (1, 7), (3, 9)]
goal = 10
G = nx.Graph()
G.add_edges_from(edges)
pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G, pos)
nx.draw_networkx_edges(G, pos)
nx.draw_networkx_labels(G, pos)
pl.show()

9.3 步骤 3:为机器人定义奖励框架

MATRIX_SIZE = 11
M = np.matrix(np.ones(shape=(MATRIX_SIZE, MATRIX_SIZE)))
M *= -1
for point in edges:
    print(point)
    if point[1] == goal:
        M[point] = 100
    else:
        M[point] = 0
    if point[0] == goal:
        M[point[::-1]] = 100
    else:
        M[point[::-1]] = 0  # reverse of point
M[goal, goal] = 100
print(M)

9.4 步骤 4:定义一些在训练中使用的实用函数

Q = np.matrix(np.zeros([MATRIX_SIZE, MATRIX_SIZE]))
gamma = 0.75  # learning parameter
initial_state = 1

# Determines the available actions for a given state
def available_actions(state):
    current_state_row = M[state, ]
    available_action = np.where(current_state_row >= 0)[1]
    return available_action

available_action = available_actions(initial_state)

# Chooses one of the available actions at random
def sample_next_action(available_actions_range):
    next_action = int(np.random.choice(available_action, 1))
    return next_action

action = sample_next_action(available_action)

def update(current_state, action, gamma):
    max_index = np.where(Q[action, ] == np.max(Q[action, ]))[1]
    if max_index.shape[0] > 1:
        max_index = int(np.random.choice(max_index, size=1))
    else:
        max_index = int(max_index)
    max_value = Q[action, max_index]
    Q[current_state, action] = M[current_state, action] + gamma * max_value
    if (np.max(Q) > 0):
        return (np.sum(Q / np.max(Q) * 100))
    else:
        return (0)

# Updates the Q-Matrix according to the path chosen
update(initial_state, action, gamma)

9.5 步骤 5:使用 Q 矩阵训练和评估机器人

scores = []
for i in range(1000):
    current_state = np.random.randint(0, int(Q.shape[0]))
    available_action = available_actions(current_state)
    action = sample_next_action(available_action)
    score = update(current_state, action, gamma)
    scores.append(score)

# Testing
current_state = 0
steps = [current_state]
while current_state != 10:
    next_step_index = np.where(Q[current_state, ] == np.max(Q[current_state, ]))[1]
    if next_step_index.shape[0] > 1:
        next_step_index = int(np.random.choice(next_step_index, size=1))
    else:
        next_step_index = int(next_step_index)
    steps.append(next_step_index)
    current_state = next_step_index

print("Most efficient path:")
print(steps)

pl.plot(scores)
pl.xlabel('No of iterations')
pl.ylabel('Reward gained')
pl.show()

10. 结合环境线索的拓展

现在,我们将这个机器人置于一个更现实的场景中,假设机器人是一名侦探,正在寻找一个大型毒品团伙的位置。他通常认为街头药剂师不会在警察经常光顾的地方销售他们的产品,而毒品交易的高发地点靠近毒品团伙的所在地。此外,毒贩在销售产品的地方会留下痕迹,这可能有助于侦探找到预定的地点。我们需要训练我们的机器人利用这些环境线索来找到该地区。

10.1 步骤 6:定义并可视化带有生态线索的新图形

# Defining the locations of the police and the drug traces
police = [2, 4, 5]
drug_traces = [3, 8, 9]
G = nx.Graph()
G.add_edges_from(edges)
mapping = {0: '0- Detective', 1: '1', 2: '2 – Police', 3: '3 – Drug traces',
           4: '4 - Police', 5: '5 Police', 6: '6', 7: '7', 8: 'Drug traces',
           9: '9 - Drug traces', 10: '10- Drug racket location'}
H = nx.relabel_nodes(G, mapping)
pos = nx.spring_layout(H)
nx.draw_networkx_nodes(H, pos, node_size=[200, 200, 200, 200, 200, 200])
nx.draw_networkx_edges(H, pos)
nx.draw_networkx_labels(H, pos)
pl.show()

10.2 步骤 7:定义一些用于训练交互的实用函数

Q = np.matrix(np.zeros([MATRIX_SIZE, MATRIX_SIZE]))
env_police = np.matrix(np.zeros([MATRIX_SIZE, MATRIX_SIZE]))
env_drugs = np.matrix(np.zeros([MATRIX_SIZE, MATRIX_SIZE]))
initial_state = 1

# Determines the available actions for a given state
def available_actions(state):
    current_state_row = M[state, ]
    av_action = np.where(current_state_row >= 0)[1]
    return av_action

available_action = available_actions(initial_state)

# Chooses one of the available actions at random
def sample_next_action(available_actions_range):
    next_action = int(np.random.choice(available_action, 1))
    return next_action

action = sample_next_action(available_action)

# Exploring the environment
def collect_environmental_data(action):
    found = []
    if action in police:
        found.append('p')
    if action in drug_traces:
        found.append('d')
    return found

def update(current_state, action, gamma):
    max_index = np.where(Q[action, ] == np.max(Q[action, ]))[1]
    if max_index.shape[0] > 1:
        max_index = int(np.random.choice(max_index, size=1))
    else:
        max_index = int(max_index)
    max_value = Q[action, max_index]
    Q[current_state, action] = M[current_state, action] + gamma * max_value
    environment = collect_environmental_data(action)
    if 'p' in environment:
        env_police[current_state, action] += 1
    if 'd' in environment:
        env_drugs[current_state, action] += 1
    if (np.max(Q) > 0):
        return (np.sum(Q / np.max(Q) * 100))
    else:
        return (0)

# Updates the Q-Matrix according to the path chosen
update(initial_state, action, gamma)

def available_actions_with_env_help(state):
    current_state_row = M[state, ]
    av_action = np.where(current_state_row >= 0)[1]
    # if there are multiple routes, dis-favor anything negative
    env_pos_row = env_matrix_snap[state, av_action]
    if (np.sum(env_pos_row < 0)):
        # can we remove The negative directions from av_act?
        temp_av_action = av_action[np.array(env_pos_row)[0] >= 0]
        if len(temp_av_action) > 0:
            av_action = temp_av_action
    return av_action

10.3 步骤 8:可视化环境矩阵

scores = []
for i in range(1000):
    current_state = np.random.randint(0, int(Q.shape[0]))
    available_action = available_actions(current_state)
    action = sample_next_action(available_action)
    score = update(current_state, action, gamma)
    # print environmental matrices
    print('Police Found')
    print(env_police)
    print(' ')
    print('Drug traces Found')
    print(env_drugs)

10.4 步骤 9:训练和评估模型

scores = []
for i in range(1000):
    current_state = np.random.randint(0, int(Q.shape[0]))
    available_action = available_actions_with_env_help(current_state)
    action = sample_next_action(available_action)
    score = update(current_state, action, gamma)
    scores.append(score)

pl.plot(scores)
pl.xlabel('Number of iterations')
pl.ylabel('Reward gained')
pl.show()

通过以上步骤,我们可以看到强化学习在不同场景下的应用和实现,以及如何利用环境线索来优化智能体的决策过程。

11. 强化学习流程总结

为了更清晰地理解强化学习中使用 Q - 学习算法训练机器人的过程,下面用 mermaid 流程图展示整个流程:

graph TD;
    A[开始] --> B[导入必要的库];
    B --> C[定义并可视化图形];
    C --> D[为机器人定义奖励框架];
    D --> E[定义训练实用函数];
    E --> F[使用 Q 矩阵训练和评估机器人];
    F --> G[结合环境线索拓展];
    G --> H[定义并可视化带有生态线索的新图形];
    H --> I[定义训练交互实用函数];
    I --> J[可视化环境矩阵];
    J --> K[训练和评估模型];
    K --> L[结束];

12. 强化学习组件关系

强化学习的四个主要组件(策略、奖励信号、价值函数、模型)之间存在着紧密的关系,下面通过表格来展示它们之间的相互作用:
|组件|与其他组件的关系|
| ---- | ---- |
|策略|根据奖励信号和价值函数来决定智能体的行动,模型可以辅助策略的制定。|
|奖励信号|是价值函数的基础,策略的调整依赖于奖励信号,模型可以预测奖励信号。|
|价值函数|基于奖励信号计算,策略的优化目标是最大化价值函数,模型可以帮助评估价值函数。|
|模型|可以预测状态和奖励,为策略制定和价值函数评估提供信息,影响奖励信号的获取。|

13. 不同学习类型对比总结

为了更直观地对比监督学习、无监督学习、半监督学习和强化学习,下面用表格进行总结:
|学习类型|训练数据特点|学习方式|应用场景|
| ---- | ---- | ---- | ---- |
|监督学习|有标签数据|在有标签数据上训练,检查指定特征|图像识别等|
|无监督学习|无标签数据|对无标签数据自由探索,自行索引特征|无特定示例场景|
|半监督学习|少量有标签数据和大量无标签数据|将有标签数据学习结果推断到无标签数据|无特定示例场景|
|强化学习|通过智能体与环境交互获得数据|在有明确边界的环境中,根据奖励和目标学习|游戏、机器人等|

14. 强化学习算法对比

不同的强化学习算法(SARSA、Q - 学习、深度 Q 网络)有不同的特点,下面用表格进行对比:
|算法名称|特点|
| ---- | ---- |
|SARSA|给智能体提供策略,策略告知积极行动导致奖励或有价值状态的比率|
|Q - 学习|智能体无策略,对环境的探索更自我协调|
|深度 Q 网络|使用神经网络,未来行动依赖神经网络发现的过去有用行动的随机样本|

15. 强化学习应用展望

强化学习在多个领域已经取得了显著的成果,但仍有很大的发展空间。在未来,强化学习有望在以下方面取得进一步的突破:
- 医疗保健领域 :除了学习最积极的治疗规则,还可以用于疾病预测、个性化医疗方案制定等。通过分析大量的医疗数据和患者的实时反馈,强化学习智能体可以为每个患者提供最适合的治疗方案。
- 自动驾驶领域 :可以使自动驾驶汽车更好地适应复杂的交通环境。智能体可以通过与环境的交互不断学习,优化驾驶策略,提高行车安全性和效率。
- 金融领域 :在股票交易、风险管理等方面有更广泛的应用。强化学习可以根据市场动态实时调整投资策略,降低风险,提高收益。

16. 强化学习面临的挑战应对思路

针对强化学习面临的挑战,我们可以采取以下应对思路:
|挑战|应对思路|
| ---- | ---- |
|需要标准规模的经验|可以采用模拟环境进行预训练,加快数据收集速度。同时,利用迁移学习的方法,将在一个环境中学习到的经验迁移到另一个相似的环境中。|
|延迟奖励|可以采用资格迹等技术,将奖励更合理地分配到之前的行动上。也可以设置中间奖励,引导智能体更快地找到最优策略。|
|缺乏可解释性|研究可解释的强化学习方法,例如使用决策树等可解释的模型来辅助解释智能体的决策过程。同时,开发可视化工具,帮助观察者更好地理解智能体的行动。|

17. 总结

强化学习作为机器学习的重要分支,具有独特的优势和广泛的应用前景。它通过智能体与环境的交互来学习,能够处理复杂的动态问题。然而,强化学习也面临着一些挑战,如需要标准规模的经验、延迟奖励和缺乏可解释性等。通过不断的研究和创新,我们可以克服这些挑战,进一步拓展强化学习的应用范围。在实际应用中,我们可以根据具体问题选择合适的强化学习算法和方法,结合环境线索和领域知识,提高智能体的性能和决策能力。同时,加强对强化学习组件和算法的理解,有助于我们更好地设计和实现强化学习系统。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值