首页 > 其他分享 >浅谈——深度学习和马尔可夫决策过程

浅谈——深度学习和马尔可夫决策过程

时间:2024-10-31 19:46:35浏览次数:6  
标签:浅谈 self state actions 马尔可夫 深度 action col row

        深度学习是一种机器学习方法,它通过模拟大脑的神经网络来进行数据分析和预测。它由多层“神经元”组成,每一层从数据中提取出不同的特征。多层次的结构使得深度学习模型可以捕捉到数据中的复杂关系,特别适合处理图片、语音等复杂数据。

        马尔可夫决策过程(MDP)是一种数学框架,用于描述决策过程,特别是在环境中存在不确定性的情况下。在MDP中,一个智能体(比如机器人)在一个状态下执行某个动作,进而移动到另一个状态,并获得相应的奖励。它有一个很重要的特性,叫做“马尔可夫性”,意思是智能体当前的决定只取决于当前的状态,而与之前的状态无关。MDP常用于强化学习中,帮助智能体通过试错学习最优策略。


深度学习的原理

        深度学习的核心是神经网络。神经网络可以看成一组“神经元”组成的网络结构,每个神经元模拟人脑中的神经细胞。神经网络通过层层计算,将输入数据(如图像、文本)转化为可以预测输出的特征。

        每层神经网络通常包含多个神经元,这些神经元通过特定的权重和偏置来影响输入数据的特征提取过程。通过反向传播算法,网络的权重不断调整,以便在输出端实现最小的预测误差

        示例应用:图像分类,如用神经网络区分猫和狗的图片。下方是一个简单的示例代码,通过深度学习模型来分类手写数字:

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms

# 数据预处理
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
train_data = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(train_data, batch_size=64, shuffle=True)

# 定义神经网络模型
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(28*28, 128)  # 输入层到隐藏层
        self.fc2 = nn.Linear(128, 64)     # 隐藏层
        self.fc3 = nn.Linear(64, 10)      # 输出层
        
    def forward(self, x):
        x = x.view(-1, 28*28)
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        x = self.fc3(x)
        return x

# 训练模型
model = SimpleNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

for epoch in range(10):  # 训练10个周期
    for images, labels in train_loader:
        optimizer.zero_grad()
        output = model(images)
        loss = criterion(output, labels)
        loss.backward()
        optimizer.step()
print("训练完成")

马尔可夫决策过程(MDP)的原理

        马尔可夫决策过程是描述决策环境的一种框架,特别适合那些具有随机性和连续状态的环境。一个典型的MDP包括:

  • 状态(S):表示环境的当前情况。
  • 动作(A):智能体可以执行的动作。
  • 奖励(R):每次执行动作后得到的反馈。
  • 转移概率(P):从一个状态转移到另一个状态的概率。

        MDP的“马尔可夫性”意味着下一个状态只依赖于当前状态和动作,而与之前的状态无关。这个性质使得我们可以用动态规划或强化学习来求解最优策略。

        示例应用:简单的迷宫游戏。假设有一个机器人要在迷宫中找到出口,迷宫的每个位置都是一个状态,机器人可以选择上、下、左、右四个方向作为动作,每次移动获得相应的奖励值。

        以下代码是一个简单的基于MDP的迷宫寻路示例,用Q学习算法来实现。

import numpy as np

# 定义迷宫的奖励矩阵(5x5网格),终点为(4,4)位置
rewards = np.zeros((5, 5))
rewards[4, 4] = 10  # 给终点设置一个较高的奖励

# 初始化Q值表
Q = np.zeros((5, 5, 4))  # 4个动作:上、下、左、右

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

# 获取当前状态的可能动作
def get_possible_actions(state):
    actions = []
    row, col = state
    if row > 0: actions.append(0)  # 上
    if row < 4: actions.append(1)  # 下
    if col > 0: actions.append(2)  # 左
    if col < 4: actions.append(3)  # 右
    return actions

# 通过动作更新状态
def take_action(state, action):
    row, col = state
    if action == 0 and row > 0: row -= 1
    elif action == 1 and row < 4: row += 1
    elif action == 2 and col > 0: col -= 1
    elif action == 3 and col < 4: col += 1
    return (row, col)

# Q学习主循环
for episode in range(1000):
    state = (0, 0)
    while state != (4, 4):  # 当状态不是终点时
        if np.random.rand() < epsilon:  # 探索
            action = np.random.choice(get_possible_actions(state))
        else:  # 利用
            action = np.argmax(Q[state[0], state[1], :])
        
        # 更新Q值
        new_state = take_action(state, action)
        reward = rewards[new_state]
        best_next_action = np.argmax(Q[new_state[0], new_state[1], :])
        Q[state[0], state[1], action] += alpha * (reward + gamma * Q[new_state[0], new_state[1], best_next_action] - Q[state[0], state[1], action])
        state = new_state

print("训练完成的Q值表:")
print(Q)

        在这个示例中,Q表即为迷宫中每个状态在不同动作下的奖励累积值。通过1000个回合的训练,Q值表逐步逼近最优策略。

标签:浅谈,self,state,actions,马尔可夫,深度,action,col,row
From: https://blog.csdn.net/qq_56683019/article/details/143373187

相关文章

  • 浅谈对账拓展功能设计
    在Saas类产品中,对账功能是一个拓展比较多的设计,不同企业有着不同的要求。这篇文章,我们看看作者的总结。需求场景:不同企业针对对账单的表单字段有不同的要求,如何满足不同企业用户对于对账的个性化字段诉求,包含核对本账期内发生的企业支付明细、本账期可开票结账明细、本期及......
  • 【算法笔记】位运算算法原理深度剖析
    【算法笔记】位运算算法原理深度剖析......
  • Python深度学习进阶与前沿应用(注意力机制详解、生成式模型详解、自监督学习模型详解、
    近年来,伴随着以卷积神经网络(CNN)为代表的深度学习的快速发展,人工智能迈入了第三次发展浪潮,AI技术在各个领域中的应用越来越广泛。注意力机制、Transformer模型(BERT、GPT-1/2/3/3.5/4、DETR、ViT、SwinTransformer等)、生成式模型(变分自编码器VAE、生成式对抗网络GAN、扩散模型Di......
  • 《神经网络、机器学习和深度学习:开启智能时代的三把密钥》
    神经网络、机器学习和深度学习是人工智能领域中非常重要的概念,它们之间既有联系又有区别。神经网络原理神经元模型:神经网络的灵感来源于人类大脑的神经元结构。在人工神经网络中,每个神经元接收来自其他神经元或输入层的多个输入信号,并对这些输入进行加权求和。每个输入......
  • TYPE-C PD浅谈(三)
    由于TYPE-C两头都一样,没有方向性,所以在对接前并不会有电源输出,数据主从也尚未定义。在PD的规范内,针对装置对接,定义了三个电阻来进行对接的识别。Rp:做为Provider需要在CC脚位上上拉一个Rp电阻。Rp电阻允许有三种阻值(pullhigh5V时,10K/22K/56K),这三种阻值也同时初步的宣告了Provid......
  • 浅谈指标平台的价值:赋能企业决策、加速业务响应与提升技术效率
    指标平台在现代企业管理中扮演着至关重要的角色,它不仅是数据分析的核心工具,更是驱动企业决策优化、业务增长和技术效能提升的关键。通过构建一个“管研用一体化”的指标平台,企业能够在复杂多变的市场环境中迅速响应,精准定位问题,从而实现持续稳健的发展。下面将从管理者、业务侧以及......
  • string类的深度剖析1
    文章目录1.前置语法知识——auto和范围for1.1auto关键字1.2范围for2.string类2.1为什么要学string类2.2认识string类2.3string类的常用接口说明2.3.1常见构造2.3.2容量操作2.3.3访问及遍历操作2.3.4修改操作2.3.5非成员函数3.结尾1.前置语法知识——au......
  • 浅谈TiKV集群运维问题排查与修复——磁盘空间占用问题
    作者:来自vivo互联网存储团队-YuanJianwei本文介绍了TiKV磁盘空间问题的排查思路与解决方案。一、背景介绍在业务快速扩张的年代,vivo内部的很多业务为了可以快速上线,给现网功能提供支撑,在KV类型的选型下许多场景都选用了轻量快速的Redis集群。但是随着业务的不断发......
  • 基于深度学习的舆论分析与检测系统应用与研究
    【1】系统介绍研究背景随着互联网技术的迅猛发展和社会媒体平台的普及,信息传播的速度和范围达到了前所未有的水平。这一变化不仅极大地丰富了人们的社交生活,也为社会科学研究提供了新的视角和工具。舆论分析作为社会科学研究的一个重要分支,其目的是通过收集和分析网络上的......
  • Python 自动化运维:日志与监控的深度探索
    Python自动化运维:日志与监控的深度探索目录......