[Day 40] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

news2024/9/17 8:46:15

強化學習概述

強化學習(Reinforcement Learning, RL)是一種機器學習方法,主要用於訓練智能體(agent)在特定環境(environment)中進行決策。智能體通過嘗試和錯誤來學習,以最大化其累積的獎勵。強化學習的核心思想是利用行動的回饋信息來更新策略(policy),從而優化決策。

核心概念

在強化學習中,有幾個核心概念:

  1. 狀態(State, s):智能體所處的環境狀態。
  2. 行動(Action, a):智能體在特定狀態下可以採取的行動。
  3. 獎勵(Reward, r):智能體執行行動後收到的回饋。
  4. 策略(Policy, π):從狀態到行動的映射,決定智能體在每個狀態下應採取的行動。
  5. 價值函數(Value Function, V(s)):給定狀態下的預期獎勵總和。
  6. 動作價值函數(Action-Value Function, Q(s, a)):給定狀態和行動的預期獎勵總和。

強化學習的應用

強化學習被廣泛應用於各種領域,如:

  • 遊戲AI:訓練AI玩遊戲,例如AlphaGo、Dota 2等。
  • 自動駕駛:通過模擬環境訓練自動駕駛系統。
  • 機器人控制:優化機器人的動作控制策略。
  • 金融交易:優化交易策略以最大化收益。

強化學習的基礎算法

在強化學習中,經典的算法包括Q-Learning和深度Q網絡(Deep Q-Network, DQN)。

Q-Learning

Q-Learning是一種無模型的強化學習算法,用於估計動作價值函數Q(s, a)。它基於貝爾曼方程更新Q值:

Q(s,a)\leftarrow Q(s,a) + \alpha [r + \gamma _{a}' max Q{({s}'}, {a}') - Q(s,a)]

這裡,\alpha 是學習率,\gamma 是折扣因子,r 是立即獎勵,{s}' 是執行行動後的下一狀態。

深度Q網絡(DQN)

DQN是Q-Learning的擴展,它利用神經網絡來近似Q函數。這種方法特別適用於狀態空間較大或連續的情況。DQN的基本架構包括一個目標網絡(Target Network)和一個估計網絡(Estimation Network),用來穩定學習過程。

Q-Learning的Python實現

下面是一個簡單的Q-Learning示例,應用於OpenAI Gym中的FrozenLake環境。

import gym
import numpy as np

# 創建FrozenLake環境
env = gym.make('FrozenLake-v1', is_slippery=False)

# 初始化參數
alpha = 0.1  # 學習率
gamma = 0.99  # 折扣因子
epsilon = 0.1  # 探索率
num_episodes = 1000  # 訓練迭代次數

# 初始化Q表
Q = np.zeros((env.observation_space.n, env.action_space.n))

# 訓練Q-Learning算法
for episode in range(num_episodes):
    state = env.reset()
    done = False
    
    while not done:
        # ε-貪婪策略選擇行動
        if np.random.uniform(0, 1) < epsilon:
            action = env.action_space.sample()
        else:
            action = np.argmax(Q[state, :])
        
        # 執行行動,獲取獎勵和下一狀態
        next_state, reward, done, _ = env.step(action)
        
        # 更新Q值
        Q[state, action] = Q[state, action] + alpha * (
            reward + gamma * np.max(Q[next_state, :]) - Q[state, action]
        )
        
        # 更新狀態
        state = next_state

# 輸出訓練後的Q表
print("Trained Q-table:")
print(Q)
代碼解釋
  1. 創建環境gym.make('FrozenLake-v1')創建了FrozenLake環境。這是一個簡單的4x4格子遊戲,目標是從起點移動到目標位置,避開陷阱。

  2. 初始化參數:設置學習率(alpha)、折扣因子(gamma)和探索率(epsilon)。這些參數控制了學習的速度、未來獎勵的重視程度和隨機探索的程度。

  3. 初始化Q表Q = np.zeros((env.observation_space.n, env.action_space.n))創建了一個大小為狀態數量乘以行動數量的Q表,並初始化為零。

  4. 訓練過程:在每一個訓練迭代中,智能體在環境中進行多次步驟:

    • 使用ε-貪婪策略選擇行動:智能體有epsilon的概率隨機選擇行動,否則選擇當前Q值最大的行動。
    • 執行行動並獲取回饋:env.step(action)執行選擇的行動並返回下一狀態、獎勵、遊戲是否結束的標誌和附加信息。
    • 更新Q值:使用Q-Learning更新公式來更新Q值。
    • 更新狀態:將狀態更新為下一狀態。
  5. 輸出結果:訓練完成後,打印最終的Q表。

深度Q網絡(DQN)的Python實現

下面是一個DQN的基本實現,使用Keras建立神經網絡來近似Q函數。

import gym
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import Adam
from collections import deque
import random

# 創建FrozenLake環境
env = gym.make('FrozenLake-v1', is_slippery=False)

# 參數設置
state_size = env.observation_space.n
action_size = env.action_space.n
batch_size = 32
n_episodes = 1000
output_dir = 'model_output/'

# 建立DQN網絡
def build_model():
    model = Sequential()
    model.add(Dense(24, input_dim=state_size, activation='relu'))
    model.add(Dense(24, activation='relu'))
    model.add(Dense(action_size, activation='linear'))
    model.compile(loss='mse', optimizer=Adam(lr=0.001))
    return model

# 訓練過程
def train_dqn():
    model = build_model()
    memory = deque(maxlen=2000)
    epsilon = 1.0  # 探索率
    epsilon_decay = 0.995
    epsilon_min = 0.01
    gamma = 0.95  # 折扣因子

    for e in range(n_episodes):
        state = env.reset()
        state = np.reshape(state, [1, state_size])
        done = False
        for time in range(500):
            if np.random.rand() <= epsilon:
                action = env.action_space.sample()
            else:
                action = np.argmax(model.predict(state)[0])
            next_state, reward, done, _ = env.step(action)
            reward = reward if not done else -10
            next_state = np.reshape(next_state, [1, state_size])
            memory.append((state, action, reward, next_state, done))
            state = next_state

            if done:
                print(f"Episode: {e}/{n_episodes}, score: {time}, e: {epsilon:.2}")
                break

            if len(memory) > batch_size:
                minibatch = random.sample(memory, batch_size)
                for state_mb, action_mb, reward_mb, next_state_mb, done_mb in minibatch:
                    target = reward_mb
                    if not done_mb:
                        target = reward_mb + gamma * np.amax(model.predict(next_state_mb)[0])
                    target_f = model.predict(state_mb)
                    target_f[0][action_mb] = target
                    model.fit(state_mb, target_f, epochs=1, verbose=0)

            if epsilon > epsilon_min:
                epsilon *= epsilon_decay

        if e % 50 == 0:
            model.save(output_dir + f"weights_{e:04d}.hdf5")

train_dqn()
代碼解釋
  1. 神經網絡模型構建build_model()函數定義了一個簡單的三層全連接神經網絡,用於近似Q函數。輸出層的節點數等於動作空間的大小,每個節點對應一個行動的Q值。

  2. 記憶體初始化deque(maxlen=2000)用於存儲經驗回放(experience replay),保存最近2000次的狀態轉換。

  3. 訓練過程

    • 初始化探索率epsilon,並逐漸衰減。
    • 在每個episode中,智能體從隨機初始狀態開始,然後在環境中執行多次步驟。
    • 使用ε-貪婪策略選擇行動。
    • 執行行動並存儲狀態轉換(狀態、行動、獎勵、下一狀態、是否結束)到記憶體。
    • 當結束時,打印episode信息。
    • 使用小批量訓練(minibatch training),從記憶體中隨機抽取樣本進行Q網絡更新。
  4. 模型保存:每隔50個episode保存一次模型權重。

這是DQN的一個簡單示例,實際應用中可能需要更多的優化和調參。

結論

強化學習是AI領域中的重要技術,能夠處理多種決策問題。從簡單的Q-Learning到複雜的深度Q網絡(DQN),每種方法都有其適用的場景和優缺點。在實踐中,選擇合適的強化學習算法以及良好的參數調整對於獲得優秀的結果至關重要。

希望這篇文章和示例代碼能幫助讀者更好地理解和應用強化學習技術。

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

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

相关文章

【iOS】—— iOS持久化

iOS持久化 1. 数据持久化的目的2. iOS持久化的方案3. 数据持久化方式的分类内存缓存磁盘缓存 4. 沙盒机制5. 沙盒的目录结构获取应用程序的沙盒路径每次编译代码会生成新的沙盒路径&#xff0c;每次运行获得的沙盒路径都不一样。访问沙盒目录常用C函数介绍沙盒目录介绍 6. 持久…

浅谈线程组插件之bzm - Arrivals Thread Group

浅谈线程组插件之bzm - Arrivals Thread Group bzm - Arrivals Thread Group 是 JMeter 中的一个高级插件&#xff0c;由 BlazeMeter 提供&#xff0c;旨在为性能测试提供更灵活、更贴近实际场景的负载生成方式。与传统的线程组不同&#xff0c;Arrivals Thread Group 通过控制…

网上订餐系统2024((代码+论文+ppt)

网上订餐系统2024((代码论文ppt),编号:sp006 代码经过修正,确保可以运行,下载地址在文末 技术栈: springbottvuemysql 展示: 下载地址: CSDN现在上传有问题,有兴趣的朋友先收藏.正常了贴上下载地址 备注: 专业承接各种程序java,c,c,python,cuda,AI 运行有问题请私信我,…

互联网医院系统源码与医保购药APP开发的完整技术指南

本篇文章&#xff0c;笔者将详细介绍互联网医院系统与医保购药APP的开发全过程&#xff0c;帮助开发者理解其技术要点和实现路径。 一、互联网医院系统开发 1.需求分析与系统设计 需要明确系统的功能需求&#xff0c;如在线问诊、预约挂号、电子病历管理、远程医疗、支付系统…

木材缺陷数据集:从手工模式到智能时代的跨越

亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 引言 …

【运维指南】常见的防火墙端口操作

每当一个应用程序想通过网络访问自己时&#xff0c;它就会申请一个 TCP/IP 端口&#xff0c;这意味着该端口不能被其他任何程序使用。那么&#xff0c;如何检查开放的端口&#xff0c;看看哪个应用程序已经在使用它呢&#xff1f; Windows 查看端口使用情况和进程名称 netst…

详解Qt 之QMdiArea 和 QMdiSubWindow

文章目录 前言QMdiArea概念作用为什么需要 QMdiAreaQMdiArea 的主要函数和成员函数列表 QMdiSubWindow概念作用为什么需要 QMdiSubWindowQMdiSubWindow 的主要函数和成员函数列表 示例代码 更多用法... 总结 前言 在复杂的应用程序中&#xff0c;尤其是那些需要同时管理多个子…

Linux AMBA 驱动:DMA 控制器 PL330 驱动简析

文章目录 1. 前言2. 背景3. PL330 简介4. PL330 驱动加载流程4.1 PL330 设备注册流程4.2 PL330 驱动加载流程 5. 小结6. 参考资料 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 背景 本文基于…

什么牌子的骨传导耳机好?这五款骨传导耳机用过都是好评!

骨传导耳机&#xff0c;作为听音设备的创新之作&#xff0c;以其独特的传音方式赢得了市场的广泛认可。它不仅让日常听音更加健康舒适&#xff0c;还完美契合了运动场景的需求&#xff0c;让用户在享受音乐的同时&#xff0c;保持对周围环境的敏锐感知。这种设计上的巧思&#…

【QT串口助手】

首先非常感谢CSDN吾爱技术圈分享的QT初体验&#xff1a;手把手带你写一个自己的串口助手&#xff0c;本教程重点参考 1. 前言 由于qt应用项目需求&#xff0c;前期也安装过QT&#xff08;参考博客&#xff1a;【Qt安装与简易串口控制Arduino开发板小灯教程】&#xff09;&…

守护线程(Daemon Threads)详解:与非守护线程的区别

守护线程&#xff08;Daemon Threads&#xff09;详解&#xff1a;与非守护线程的区别 1、守护线程是什么&#xff1f;2、守护线程与非守护线程的区别2.1 JVM关闭行为2.2 任务性质2.3 线程设置2.4 示例代码 3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收…

人工智能学习笔记 - 初级篇Ⅱ - 图形可视化 - 第11节: 绘制带填充区域的图表

微信公众号&#xff1a;御风研墨 关注可了解更多。问题或建议&#xff0c;请公众号留言 文章目录 绘制带填充区域的图表应用背景准备工作操作步骤工作原理补充说明最后 绘制带填充区域的图表 应用背景 在数据可视化中&#xff0c;带填充区域的图表可以有效地表示数据范围、趋…

创客项目秀 | 基于 XIAO 开发板的语音向导

背景 柴火创客空间作为大湾区科技创新的窗口&#xff0c;每年到访空间的社区伙伴众多&#xff0c;为了更好的进行空间信息交互&#xff0c;我们希望有一个装置是可以解决&#xff1a;当空间管理员不在现场的时候&#xff0c;到访者可以通过装置获得清晰的介绍与引导。 为了解…

APP逆向 day24unidbg上

一.前言 今天开始讲app逆向最后一个也是最重要的unidbg&#xff0c;这已经是从初级进阶到中级的了&#xff0c;我会讲unidbg&#xff0c;讲三节课&#xff0c;分为上中下来和大家讲&#xff08;由简单到难逐步&#xff09;&#xff0c;这节课主要是和大家讲unidbg的介绍并且会…

详解工厂模式与抽象工厂模式有什么区别?【图解+代码】

目录 工厂模式&#xff0c;抽象工厂模式是什么&#xff1f; 两种设计模式的流程&#xff1a; 1、工厂模式 2、抽象工厂模式 两种模式的对比 共同点&#xff1a; 不同点&#xff1a; 总结 工厂模式&#xff0c;抽象工厂模式是什么&#xff1f; 我已经具体的写了这两种模…

我的「Java全栈高级架构师高薪就业课」适合什么样的人群学习?

我的《Java全栈高级架构师高薪就业课》上线了~ 这是一套Java全栈微服务架构、以实战项目驱动的课程&#xff01;包含34个模块&#xff0c;1514课时。对标阿里P7级别技术栈而研发&#xff0c;有着循序渐进的学习体系&#xff0c;助你开启Java进阶之旅。 我的这套《Java全栈高级…

海域感知与岸线监控实施方案:总体技术架构

文章目录 引言I 总体架构1.1 物理结构图1.2 功能逻辑结构图1.3 系统架构1.4 雷达光电船只检测系统拓扑图1.5 雷达光电船只联动跟踪效果图II 技术架构存储Geoserver视频see also引言 利用渔船现有的定位导航通讯设备等资源,实现岸线和近岸海域内违法船舶和可疑船舶预警、抓拍、…

系统学习渗透测试:从零到精通的全面指南

渗透测试&#xff0c;作为网络安全领域的一项重要技术&#xff0c;旨在通过模拟黑客攻击来评估计算机系统的安全性。对于想要系统学习渗透测试的人来说&#xff0c;这既是一条充满挑战的道路&#xff0c;也是一次深入了解网络安全的宝贵机会。本文将从基础知识、技能提升、实战…

怎麼使用ixbrowser指紋流覽器?

ixBrowser是一款指紋流覽器流覽器&#xff0c;利用指紋隔離技術確保在與Pixelscan等第三方檢測網站進行測試時具有出色的通過率&#xff0c;能夠輕鬆管理多個獨立帳戶。此外&#xff0c;ixBrowser能夠創建無限的獨立個人資料並邀請團隊成員。簡化了運營&#xff0c;降低了運營成…

转行要趁早!网络安全岗人才稀缺,前景广阔,收藏这一篇就够了

1 网络安全从业人员能力基本要求&#xff0c;您达标了吗&#xff1f; 引导 根据国家市场监督管理总局、国家标准化管理委员会发布中华人民共和国国家标准公告&#xff08;2023年第1号&#xff09;&#xff0c;由全国信息安全标准化技术委员会归口的《信息安全技术 网络安全从业…