当前位置: 首页 > news >正文

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

強化學習與生成對抗網絡(GAN)

引言

強化學習 (Reinforcement Learning, RL) 和生成對抗網絡 (Generative Adversarial Networks, GANs) 是現代人工智能中的兩大關鍵技術。強化學習使得智能體可以通過與環境交互學習最佳行動策略,而生成對抗網絡則通過兩個相互競爭的神經網絡生成高質量的合成數據。本文將詳細介紹這兩種技術的基本概念、應用場景以及實現方法,並通過多段代碼示例展示其具體實現細節。

一、強化學習
1. 強化學習基本概念

強化學習是一種機器學習方法,智能體通過與環境交互學習最優策略,以最大化其累積獎勵。強化學習的主要組成部分包括:

  • 智能體 (Agent):進行行動並從環境中獲得反饋的實體。
  • 環境 (Environment):智能體進行行動的空間。
  • 狀態 (State, s):環境在某一時刻的表徵。
  • 行動 (Action, a):智能體在某一狀態下採取的行動。
  • 獎勵 (Reward, r):環境對智能體行動的反饋。
  • 策略 (Policy, π):智能體在給定狀態下選擇行動的概率分佈。
2. Q-Learning實現

Q-Learning 是一種經典的強化學習算法,用於學習行動值函數 (Q-Value Function),這個函數表示在特定狀態下採取某一行動的預期累積獎勵。以下是Q-Learning算法的Python實現。

import numpy as np
import gym# 環境初始化
env = gym.make('FrozenLake-v0')# Q-表格初始化
Q = np.zeros((env.observation_space.n, env.action_space.n))# 參數初始化
alpha = 0.8  # 學習率
gamma = 0.95  # 折扣因子
epsilon = 0.1  # 探索率# 訓練過程
for episode in range(10000):state = env.reset()done = Falsewhile 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_stateprint("Q-Table:")
print(Q)
代碼解釋
  • env = gym.make('FrozenLake-v0'):使用OpenAI Gym庫中的FrozenLake環境。
  • Q = np.zeros((env.observation_space.n, env.action_space.n)):初始化Q表格,大小為狀態數乘以行動數。
  • alpha, gamma, epsilon:設置學習率、折扣因子和探索率。
  • env.reset():重置環境,獲取初始狀態。
  • env.action_space.sample():隨機選擇一個行動,用於探索。
  • np.argmax(Q[state, :]):選擇Q值最大的行動,用於利用。
  • env.step(action):執行選擇的行動,獲取下個狀態和獎勵。
  • Q[state, action] = ...:更新Q值。
3. DQN(深度Q-Learning網絡)

DQN將深度學習引入Q-Learning中,用神經網絡替代Q表格,能夠處理更大規模的狀態空間。以下是DQN的簡化實現。

import tensorflow as tf
from tensorflow.keras import layers# 神經網絡模型定義
def build_model(input_shape, output_shape):model = tf.keras.Sequential([layers.Dense(24, input_dim=input_shape, activation='relu'),layers.Dense(24, activation='relu'),layers.Dense(output_shape, activation='linear')])model.compile(loss='mse', optimizer=tf.keras.optimizers.Adam(lr=0.001))return model# 參數設定
input_shape = env.observation_space.n
output_shape = env.action_space.nmodel = build_model(input_shape, output_shape)
target_model = build_model(input_shape, output_shape)# 訓練過程
def train_dqn(episodes):for episode in range(episodes):state = env.reset()state = np.reshape(state, [1, input_shape])done = Falsewhile not done:if np.random.rand() <= epsilon:action = env.action_space.sample()else:action = np.argmax(model.predict(state))next_state, reward, done, _ = env.step(action)next_state = np.reshape(next_state, [1, input_shape])target = model.predict(state)if done:target[0][action] = rewardelse:t = target_model.predict(next_state)target[0][action] = reward + gamma * np.amax(t)model.fit(state, target, epochs=1, verbose=0)state = next_statetrain_dqn(1000)
代碼解釋
  • build_model:定義神經網絡模型,包含兩個隱藏層,每層24個神經元。
  • model.compile:編譯模型,使用均方誤差損失函數和Adam優化器。
  • train_dqn:DQN訓練過程,每次從環境中獲取狀態並更新神經網絡。
  • model.predict(state):預測當前狀態的Q值。
  • model.fit(state, target):訓練模型,更新神經網絡參數。
二、生成對抗網絡(GAN)
1. GAN基本概念

GAN由生成器 (Generator) 和判別器 (Discriminator) 兩個神經網絡組成。生成器試圖生成逼真的假數據,而判別器則試圖區分真實數據和生成數據,兩者相互對抗,共同提升生成數據的質量。

2. GAN結構與訓練過程
  • 生成器:從隨機噪聲中生成數據。
  • 判別器:區分真實數據與生成數據。
  • 損失函數:判別器和生成器的損失函數互為對手,生成器希望最大化判別器的錯誤率,而判別器希望最大化識別率。
3. GAN實現

以下是GAN在MNIST數據集上的實現示例。

import tensorflow as tf
from tensorflow.keras import layers
import numpy as np# 生成器模型
def build_generator():model = tf.keras.Sequential([layers.Dense(256, input_dim=100, activation='relu'),layers.BatchNormalization(),layers.Dense(512, activation='relu'),layers.BatchNormalization(),layers.Dense(1024, activation='relu'),layers.BatchNormalization(),layers.Dense(28 * 28 * 1, activation='tanh'),layers.Reshape((28, 28, 1))])return model# 判別器模型
def build_discriminator():model = tf.keras.Sequential([layers.Flatten(input_shape=(28, 28, 1)),layers.Dense(512, activation='relu'),layers.Dense(256, activation='relu'),layers.Dense(1, activation='sigmoid')])model.compile(loss='binary_crossentropy', optimizer=tf.keras.optimizers.Adam(0.0002, 0.5), metrics=['accuracy'])return model# GAN模型
def build_gan(generator, discriminator):discriminator.trainable = Falsemodel = tf.keras.Sequential([generator, discriminator])model.compile(loss='binary_crossentropy', optimizer=tf.keras.optimizers.Adam(0.0002, 0.5))return model# 創建模型
generator = build_generator()
discriminator = build_discriminator()
gan = build_gan(generator, discriminator)# 訓練過程
def train_gan(epochs, batch_size=128):(X_train, _), (_, _) = tf.keras.datasets.mnist.load_data()X_train = (X_train.astype(np.float32) - 127.5) / 127.5  # Normalize to [-1, 1]X_train = np.expand_dims(X_train, axis=3)for epoch in range(epochs):# 訓練判別器idx = np.random.randint(0, X_train.shape[0], batch_size)real_images = X_train[idx]noise = np.random.normal(0, 1, (batch_size, 100))fake_images = generator.predict(noise)d_loss_real = discriminator.train_on_batch(real_images, np.ones((batch_size, 1)))d_loss_fake = discriminator.train_on_batch(fake_images, np.zeros((batch_size, 1)))d_loss = 0.5 * np.add(d_loss_real, d_loss_fake)# 訓練生成器noise = np.random.normal(0, 1, (batch_size, 100))valid_y = np.array([1] * batch_size)g_loss = gan.train_on_batch(noise, valid_y)# 打印進度if epoch % 1000 == 0:print(f"{epoch} [D loss: {d_loss[0]} | D acc.: {100*d_loss[1]}] [G loss: {g_loss}]")train_gan(10000)
代碼解釋
  • build_generator:定義生成器模型,包含多層全連接層和批量歸一化層,最終輸出生成的圖像。
  • build_discriminator:定義判別器模型,包含多層全連接層,最終輸出0或1,表示真假。
  • build_gan:將生成器和判別器結合成GAN模型,並設置判別器在GAN模型中不可訓練。
  • train_gan:GAN訓練過程,首先訓練判別器,再訓練生成器,交替進行。
三、強化學習與GAN的聯動應用

強化學習和GAN的聯動應用在很多領域都有廣泛的前景。以下是一個簡單的例子,展示如何結合這兩種技術實現更加智能的數據生成和策略學習。

1. 生成環境數據並訓練智能體

假設我們希望通過GAN生成虛擬環境數據,然後使用強化學習在這些虛擬環境中訓練智能體。以下是基本步驟:

四、結論

強化學習和生成對抗網絡是現代人工智能中兩個非常重要的技術,它們各有特色並且在很多應用場景中相互補充。通過理解和實現這些技術,讀者可以在企業級應用中充分利用它們的強大功能。本文詳細介紹了強化學習和GAN的基本概念、實現方法以及聯動應用,希望對讀者有所幫助。

  • 使用GAN生成高質量的環境數據。
  • 使用強化學習在這些生成的環境中訓練智能體,學習最佳策略。
    import gym
    from tensorflow.keras.models import Model
    from tensorflow.keras.layers import Input, Dense# 簡單的環境數據生成器
    def simple_data_generator():noise = np.random.normal(0, 1, (1, 100))generated_data = generator.predict(noise)return generated_data# 簡單的強化學習模型
    def simple_rl_model():inputs = Input(shape=(28, 28, 1))x = Dense(24, activation='relu')(inputs)x = Dense(24, activation='relu')(x)outputs = Dense(4, activation='linear')(x)  # 假設有4個動作model = Model(inputs, outputs)model.compile(optimizer='adam', loss='mse')return model# 訓練智能體
    def train_rl_agent(episodes, data_generator, rl_model):for episode in range(episodes):state = data_generator()done = Falsewhile not done:action = np.argmax(rl_model.predict(state))next_state = data_generator()  # 使用生成器生成下一個狀態reward = compute_reward(state, action, next_state)  # 定義獎勵函數target = reward + gamma * np.max(rl_model.predict(next_state))target_f = rl_model.predict(state)target_f[0][action] = targetrl_model.fit(state, target_f, epochs=1, verbose=0)state = next_state# 訓練過程
    rl_model = simple_rl_model()
    train_rl_agent(1000, simple_data_generator, rl_model)
    
    代碼解釋
  • simple_data_generator:使用生成器生成簡單的環境數據。
  • simple_rl_model:定義簡單的強化學習模型,包含兩層全連接層,輸出四個動作的Q值。
  • train_rl_agent:使用生成的環境數據訓練強化學習智能體。

相关文章:

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

強化學習與生成對抗網絡(GAN) 引言 強化學習 (Reinforcement Learning, RL) 和生成對抗網絡 (Generative Adversarial Networks, GANs) 是現代人工智能中的兩大關鍵技術。強化學習使得智能體可以通過與環境交互學習最佳行動策略&#xff0c;而生成對抗網絡則通過兩個相互競爭…...

【Mac】DMG Canvas for mac(DMG镜像制作工具)软件介绍

软件介绍 DMG Canvas 是一款专门用于创建 macOS 磁盘映像文件&#xff08;DMG&#xff09;的软件。它的主要功能是让用户可以轻松地设计、定制和生成 macOS 上的安装器和磁盘映像文件&#xff0c;以下是它的一些主要特点和功能。 主要特点和功能 1. 用户界面设计 DMG Canva…...

RAG分块方法 从固定大小到自然语言处理分块——深入研究文本分块技术

发掘文本分块-准确的搜索结果和更智能的语言模型背后的秘诀&#xff0c;通过了解如何有效地分块文本&#xff0c;我们可以改进索引文档、处理用户查询和利用搜索结果的方式。准备好揭开文本分块的秘密了吗? 一、了解分块 分块是一种旨在嵌入尽可能少噪音的内容&#xff0c;同…...

FFmpeg 系列

&#x1f4da; 此篇文章是先引入ffmpeg的概念以及主要的功能&#xff0c;后面会根据每一个特点进行详解&#xff0c;喜欢ffmpeg的可以持续关注。 ffmpeg是什么&#xff1f; FFmpeg 是一个开源的跨平台音视频处理工具&#xff0c;它可以用来录制、转换以及流化音视频内容。具体…...

240626_昇思学习打卡-Day8-稀疏矩阵

240626_昇思学习打卡-Day8-稀疏矩阵 稀疏矩阵 在一些应用场景中&#xff0c;比如训练二值化图像分割时&#xff0c;图像的特征是稀疏的&#xff0c;使用一堆0和极个别的1表示这些特征即费事又难看&#xff0c;此时就可以使用稀疏矩阵。通过参考大佬博文&#xff0c;结合个人理…...

Docker: 使用容器化数据库

使用容器化数据库 使用本地容器化数据库提供了灵活性和简易的设置,使您能够在不需要传统数据库安装开销的情况下,紧密模拟生产环境。Docker 简化了这一过程,只需几条命令就可以在隔离的容器中部署、管理和扩展数据库。 在本指南中,您将学习如何: 运行本地容器化数据库访…...

Oracle对用户敏感数据进行编码处理

由于系统运行时间比较长&#xff0c;没有对用户的身份证号、邮箱、手机号进行脱敏处理&#xff0c;后期对数据进行了编码。 更新表数据 sql UPDATE sys_staff SET MOBIL_PHONE CASEWHEN MOBIL_PHONE IS NULL THEN ELSE utl_raw.cast_to_varchar2(utl_encode.base64_encode(ut…...

VXLAN详解:概念、架构、原理、搭建过程、常用命令与实战案例

一、VXLAN概述 1.1 VXLAN的定义 VXLAN&#xff08;Virtual Extensible LAN&#xff0c;虚拟可扩展局域网&#xff09;是一种网络虚拟化技术&#xff0c;通过在现有IP网络上创建虚拟网络&#xff0c;使数据中心可以实现大规模的网络隔离和扩展。VXLAN使用MAC-in-UDP封装技术&a…...

Redis-数据类型-Hash

文章目录 1、查看redis是否启动2、通过客户端连接redis3、切换到db3数据库4、插入新数据返回15、获取指定哈希&#xff08;hash&#xff09;对象的所有字段&#xff08;field&#xff09;名6、获取存储在指定哈希&#xff08;hash&#xff09;对象中的所有字段&#xff08;fiel…...

基于redisson实现tomcat集群session共享

目录 1、环境 2、修改server.xml 3、修改context.xml 4、新增redisson配置文件 5、下载并复制2个Jar包到Tomcat Lib目录中 6、 安装redis 7、配置nginx负载均衡 8、配置测试页面 9、session共享测试验证 前言&#xff1a; 上篇中&#xff0c;Tomcat session复制及ses…...

postgres数据库的流复制

1. 流复制和逻辑复制的差异 逻辑复制和流复制最直观的不同是&#xff0c;逻辑复制支持表级别复制区分点事原理不同 逻辑日志是在wal日志产生的数据库上&#xff0c;由逻辑解析模块对wal日志进行初步的解析&#xff0c;解析结果是ReorderBufferChange&#xff08;理解为HeapTup…...

Dxf库中的DL_Extrusion类

类DL_Extrusion DL_Extrusion 是 DXF 库中的一个类&#xff0c;用于表示三维实体的扩展信息。在 DXF 文件中&#xff0c;DL_Extrusion 类通常用于表示具有高度的三维图形实体&#xff0c;如立方体、圆柱体等&#xff0c;以及其它具有体积的几何对象。 以下是一个简单的示例代…...

“ONLYOFFICE 8.1版本评测:功能更强大,用户体验更佳”

最新版本的在线编辑器已经发布 ONLYOFFICE在线编辑器的最新版本8.1已经发布&#xff0c;整个套件带来了30多个新功能和432个bug修复。这个强大的文档编辑器支持处理文本文档、电子表格、演示文稿、可填写的表单和PDF&#xff0c;并允许多人在线协作&#xff0c;同时支持AI集成…...

搜维尔科技:【研究】触觉手套比控制器更能带来身临其境、更安全、更高效的虚拟体验

自然交互可提高VR模拟的有效性。研究表明&#xff0c;触觉手套比控制器更能带来身临其境、更安全、更高效的虚拟体验。 以下是验证 医疗培训中的触觉技术 “ 95.5%的参与者表示触摸是 XR 教育的重要组成部分&#xff0c;90.9% 的参与者表示 XR 触觉将提供一个安全的学习场所。…...

【小学期】实体类设计——以学生管理系统为例

项目目录中的位置 将Student.java文件放在src/model目录中&#xff0c;即&#xff1a; student_management │ ├── src │ ├── model │ │ ├── Student.java // 这里是Student实体类 │ │ └── StudentDAO.java │ │ │ ├── view │ │ …...

Java测试类

在Java中&#xff0c;为了编写测试类&#xff0c;通常使用JUnit框架。 1. 首先&#xff0c;创建一个名为Calculator的简单Java类&#xff0c;它包含一个方法add用于计算两个整数的和&#xff1a; public class Calculator {public int add(int a, int b) {return a b;} } 2.…...

python 中面向对象编程:深入理解封装、继承和多态

在本章中&#xff0c;我们将深入探讨Python中的高级面向对象编程概念&#xff0c;包括封装、继承和多态。让我们开始吧&#xff01; 目录 面向对象简介类和实例属性和方法继承和多态 高级面向对象概念私有变量使用 property使用 __slots__类的特殊成员__doc____call____str____…...

OpenCV练习(2)图像校正

1、傅里叶变换 霍夫变换 直线 角度 旋转2、边缘检测 霍夫变换 直线角度 旋转3、四点透视 角度 旋转4、检测矩形轮廓 角度 旋转 1.目的 实现类似全能扫面王的图像校正功能 2. 基于轮廓提取和透射变换 基于轮廓提取和透射变换的矫正算法更适用于车牌、身份证、人民…...

Excel中的“点选输入”——次级下拉列表创建

在Excel中&#xff0c;用“数据验证”功能可以设置下拉列表&#xff0c;二级下拉列表需要设置公式。 (笔记模板由python脚本于2024年06月16日 18:36:37创建&#xff0c;本篇笔记适合经常使用Excel处理数据的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;http…...

基于 Spring AOP 实现安全检查

在现代应用程序中&#xff0c;安全性是一个至关重要的方面。通过对系统中的关键操作进行安全检查&#xff0c;可以有效防止未授权的访问和操作。Spring AOP&#xff08;面向切面编程&#xff09;提供了一种优雅的方式来实现安全检查&#xff0c;而无需修改业务逻辑代码。本文将…...

5分钟解锁网盘直链下载:告别限速,拥抱满速自由

5分钟解锁网盘直链下载&#xff1a;告别限速&#xff0c;拥抱满速自由 【免费下载链接】baiduyun 油猴脚本 - 一个免费开源的网盘下载助手 项目地址: https://gitcode.com/gh_mirrors/ba/baiduyun 还在为网盘下载速度而烦恼吗&#xff1f;你是否经历过下载一个几GB的文件…...

探索声发射 b 值:Matlab 程序之旅

声发射b值&#xff0c;Matlab程序在材料科学和岩石力学等领域&#xff0c;声发射&#xff08;Acoustic Emission&#xff0c;AE&#xff09;技术是研究材料内部损伤演化的重要手段。而声发射 b 值作为其中一个关键参数&#xff0c;能反映材料内部微破裂的特征。今天&#xff0c…...

保姆级教程:用YOLOv5和ReID搞定跨摄像头找人(附完整代码和预训练模型)

跨摄像头人物追踪实战&#xff1a;YOLOv5与ReID技术深度整合指南 在智能安防、零售分析等场景中&#xff0c;跨摄像头追踪特定人物一直是个技术难点。传统方案要么依赖单一摄像头的目标检测&#xff0c;要么需要复杂的人工特征标注。本文将手把手带您实现一套基于YOLOv5目标检测…...

**NPU设计新范式:基于RISC-V的可配置计算单元实现与性能优化实践**在人工智能加速领域,

NPU设计新范式&#xff1a;基于RISC-V的可配置计算单元实现与性能优化实践 在人工智能加速领域&#xff0c;NPU&#xff08;神经网络处理单元&#xff09; 正从专用硬件向灵活可编程架构演进。本文将深入探讨一种基于 RISC-V指令集扩展 的轻量级NPU设计方案&#xff0c;并通过实…...

ChatGPT等大模型安全指南:从数据泄露防护到模型滥用防范的7个关键策略

大模型安全实战手册&#xff1a;7个维度构建企业级防护体系 当ChatGPT在2023年掀起生成式AI的浪潮时&#xff0c;某跨国咨询公司曾发生一起典型的数据泄露事件——工程师将包含客户隐私的对话记录误上传至公开代码库&#xff0c;导致3.2万条敏感数据暴露。这个案例揭示了大模型…...

零门槛!30分钟搭建本地化数字人交互系统:从安装到对话全流程

零门槛&#xff01;30分钟搭建本地化数字人交互系统&#xff1a;从安装到对话全流程 【免费下载链接】Fay Fay 是一个开源的数字人类框架&#xff0c;集成了语言模型和数字字符。它为各种应用程序提供零售、助手和代理版本&#xff0c;如虚拟购物指南、广播公司、助理、服务员、…...

教育心理学教程资源合集

08. 考研心理学课程 文件大小: 34.9GB内容特色: 34.9GB全科视频讲义真题&#xff0c;一站备齐适用人群: 心理学考研党、跨专业考生、二战冲刺核心价值: 名师系统梳理考点&#xff0c;节省50%整理时间下载链接: https://pan.quark.cn/s/074261ae5d32 06. 教育心理学&#xff0…...

DriveVLA-W0:世界模型在自动驾驶中放大数据规模定律【在动作信号的基础上增加视觉自监督信号可增强VLA效果(扩散世界模型、自回归世界模型效果都不错,图4显示扩散策略稍好一些)】

第001/22页(英文原文) DRIVEVLA-W0: WORLD MODELS AMPLIFY DATA SCALING LAW IN AUTONOMOUS DRIVING Yingyan Li1∗ Shuyao Shang1∗ Weisong Liu1∗ Bing Zhan1∗ Haochen Wang1∗ Yuqi Wang1 Yuntao Chen1 Xiaoman Wang2 Yasong An2 Chufeng Tang2 Lu Hou2 Lue Fan1B Zh…...

ESP8266轻量协程调度器:零栈LeanTask与确定性多任务设计

1. 项目概述ESP8266Scheduler 是一个专为 ESP8266 平台设计的协作式多任务调度器&#xff08;Co-operative Multitasking Scheduler&#xff09;&#xff0c;其核心目标是在资源受限的 Wi-Fi SoC 上实现轻量、确定、可预测的任务并发执行模型&#xff0c;同时避免传统抢占式 RT…...

终极指南:3个维度解锁Cyber Engine Tweaks,重塑赛博朋克2077游戏体验

终极指南&#xff1a;3个维度解锁Cyber Engine Tweaks&#xff0c;重塑赛博朋克2077游戏体验 【免费下载链接】CyberEngineTweaks Cyberpunk 2077 tweaks, hacks and scripting framework 项目地址: https://gitcode.com/gh_mirrors/cy/CyberEngineTweaks Cyber Engine …...