[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:使用生成的環境數據訓練強化學習智能體。

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

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

相关文章

MySQL——Delete和Truncate语句详解

delete 命令 语法&#xff1a;delete from 表名 [where 条件] -- 删除数据(避免这样写&#xff0c;会全部删除) DELETE FROM student -- 删除指定数据 DELETE FROM student WHERE id 7 TRUNCATE 命令 作用&#xff1a;完全清空一个数据库表&#xff0c;表的结构和索引约束不会…

Typora配置自建的兰空图床

文章目录 Typora配置自建的兰空图床 - 前言先看效果1、搭建兰空图床 - docker2、配置兰空图床3、登录进入兰空图床后台4、Typora配置兰空图床安装兰空插件获取兰空图床的Token编辑PigGO的配置文件 使用 Typora配置自建的兰空图床 - 前言 Typora插入的图片默认存储在本地&#…

仓库管理系统07--顶部标题设计

1、创建全局变量 2、应用全局变量 1&#xff09;主窗体应用 2&#xff09;登录窗体应用 3、自定义弹窗 弹窗中各按钮的事件代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows…

odoo17 tree视图添加按钮

需求描述 点击下图中tree视图上的同步退货单按钮&#xff0c;弹出相应的form视图进行退货单同步&#xff0c;然后点击同步按钮调用后端python代码处理。 实现步骤 主要文件目录结构 js文件的创建 /** odoo-module **/ import { registry } from "web/core/registry&quo…

证件照制作工具有哪些?分享当下热门的证件照制作工具

无论是考证、出国旅游还是应聘&#xff0c;一张符合标准的证件照成了必备之物。 如果手头的证件照尺寸不符合要求&#xff0c;不必惊慌&#xff0c;现在有多种证件照制作软件可以帮助你迅速解决问题。 今天&#xff0c;本文就为大家分享几个证件照制作教程&#xff0c;让你的…

基于单片机的智能温控风扇设计

摘 要 : 本次设计是基于单片机的智能温控风扇 。 以 STC89C52 单片机为核心 &#xff0c; 可以实现对风扇的有效控制 。 可以根据需要设置不同的温度 &#xff0c;如果温度在设定值最大值和最小值之间时则启动风扇弱风档&#xff0c; 如果温度超过设定的数值时将会变到大风档…

一文学会用Helm部署rancher 高可用集群

rancher集群架构图 Helm部署rancher 高可用集群 Helm简介 Helm是Kubernetes的一个包管理工具,用来简化Kubernetes应用的部署和管理。可以把Helm比作CentOS的yum工具。 Helm有如下几个基本概念: Chart: 是Helm管理的安装包,里面包含需要部署的安装包资源。可以把Chart比作C…

Linux iptables

Linux iptables CentOS7及以上配置iptables自动重启 yum install -y iptables-services systemctl enable iptables # 修改规则后保存&#xff0c;保存的文件在/etc/sysconfig/iptables service iptables saveDebian配置iptables自动重启 # 安装该包&#xff0c;实际上是创建…

iOS政策解读之二丨安全和性能要求到底有多重要

上一篇文章我们介绍了App提交审核前&#xff0c;都有哪些注意事项需要引起重视和关注&#xff0c;如果“前菜”您还没来得及阅读&#xff0c;传送门在这里&#xff1a;iOS政策解读之一丨App提交审核前注意事项必知 今天奉上我们的“正菜”&#xff0c;从App审核指南的正文章节…

什么牌子的开放式耳机好?五大优质机型,新手必看!小白闭眼入系列

音乐技术的不断进步为耳机市场的发展有了更多的选择&#xff0c;开放式耳机成为音乐爱好者们新的一个选择。从最初的基础音质到如今的高解析度音频&#xff0c;开放式耳机经历了一次次的技术革新和升级。这类耳机以开放式不入耳的设计&#xff0c;舒适的佩戴体验著称&#xff0…

44.商城系统(二十五):k8s基本操作,ingress域名访问,kubeSphere可视化安装

上一章我们已经配置好了k8s集群,如果没有配置好先去照着上面的配。 一、k8s入门操作 1.部署一个tomcat,测试容灾恢复 #在主机器上执行 kubectl create deployment tomcat6 --image=tomcat:6.0.53-jre8#查看k8s中的所有资源 kubectl get all kubectl get all -o wide#查看po…

探索 PrimeVue——开源项目的卓越之旅

嗨&#xff0c;大家好&#xff0c;我是徐小夕。之前一直在社区分享零代码&低代码的技术实践&#xff0c;也陆陆续续设计并开发了多款可视化搭建产品&#xff0c;比如&#xff1a; H5-Dooring&#xff08;页面可视化搭建平台&#xff09;V6.Dooring&#xff08;可视化大屏搭…

简单聊聊JSX

什么是JSX&#xff1f; JSX 是 JavaScript XML 的缩写&#xff0c;是 React 中用来描述用户界面的语法&#xff08;其实可以看作是JavaScript的扩展语法&#xff09;。可以把它看作是一种将 HTML 与 JavaScript 结合在一起的方式&#xff0c;使得在 JavaScript 中写 HTML 变得…

优化流程市政道路乙级资质内部管理优化

1. 建立资质管理专项小组 组建由高层领导挂帅&#xff0c;包含资质管理、人力资源、财务、技术等部门代表的专项小组&#xff0c;负责资质的日常维护、升级规划及申报工作。 2. 信息化管理系统 引入或升级资质管理信息系统&#xff0c;自动化追踪人员资质状态、继续教育记录…

sqlserver backup and restore

在 SQL Server 中&#xff0c;备份&#xff08;Backup&#xff09;和还原&#xff08;Restore&#xff09;是非常重要的数据库维护操作&#xff0c;用于确保数据的安全性和完整性。以下是关于 SQL Server 备份和还原的简要概述以及一些基本的 SQL 语句示例 参考官方地址 https…

定时邮件教程

下面是一个在Linux下使用crontab定时发送邮件的教程。假设你已经有一个Python邮件脚本&#xff0c;接下来我们会通过crontab定时执行这个脚本。 1. 编写Python邮件脚本 假设你的Python邮件脚本名为send_email.py&#xff0c;并且它位于/home/scripts/目录下。 mkdir -p /hom…

【数学建模】—【Python库】—【Numpy】—【学习】

目录 ​编辑 1. NumPy安装 2. ndarray对象 1. 创建ndarray 1.从列表或元组创建&#xff1a; 2.使用内置函数创建&#xff1a; 2. ndarray属性 3. 数组运算 1. 基本运算 2. 数学函数 3.统计函数 4. 数组索引与切片 1. 一维数组索引与切片 2.多维数组索引与切片 5.…

5.javaSE基础__集合(List+Set+Map实现类)

\1. 抽象类和接口的区别 抽象类的需要abstract修饰,内部方法可以是抽象的也可以是不抽象的接口: 可以看成抽象类,但不是类,方法没有方法体(1.8之前),由实现类实现具体方法功能 \1. 什么是异常 程序运行时出现的错误 \1. 异常的分类 ErrorException RunTimeException: 除0,空指针…

如何在 CentOS 上卸载 Nginx?

本章教程,主要介绍如何彻底卸载删除nginx 一、停止nginx服务 sudo systemctl stop nginx二、卸载nginx服务 sudo yum remove nginx三、查找nginx相关文件 sudo find / -name *nginx*将nginx相关文件进行删除 四、删除nginx相关文件 这里是常见的一些nginx相关文件 s

机器学习/pytorch笔记:time2vec

1 概念部分 对于给定的标量时间概念 t&#xff0c;Time2Vec 的表示 t2v(t)是一个大小为 k1的向量&#xff0c;定义如下&#xff1a; 其中&#xff0c;t2v(t)[i]是 t2v(t)的第 i 个元素&#xff0c;F是一个周期性激活函数&#xff0c;ω和 ϕ是可学习的参数。 以下是个人理解&am…