游戏AI的创造思路-技术基础-机器学习(1)

news2024/11/16 3:22:04

大坑从此开始~~~~

目录

1. 定义

2.发展历程和典型事件

2.1. 发展历程

2.2. 典型事件

3. 学习类型

3.1. 监督学习

3.2. 无监督学习

3.3. 半监督学习

3.3.1.定义与基本思想

3.3.2. 发展历程与应用场景

3.3.3. 核心算法与优势

3.3.4. 实际应用案例

3.4. 游戏AI的半监督学习

3.4.1. 游戏AI为什么选择半监督学习

3.4.2. 典型示例

3.4.3. 代码示例


机器学习是一门多领域交叉学科,它涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。机器学习专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构,从而不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径。


1. 定义

机器学习有多种定义,其中一些重要的定义包括:

  • 机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能。
  • 机器学习是对能通过经验自动改进的计算机算法的研究。
  • 机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。

2.发展历程和典型事件

2.1. 发展历程

机器学习的发展历程可以追溯到几个世纪前,但真正的快速发展是在过去几十年里。以下是一些重要的发展阶段:

  • 起源阶段:机器学习的起源可以追溯到对人工神经网络的研究,这一研究早于1946年世界上第一台电子计算机ENIAC的发明。1943年,Warren McCulloch和Walter Pitts提出了神经网络层次结构模型(又称M-P神经元模型),为机器学习的发展奠定了基础。
  • 推理期(20世纪50-70年代初):在这一阶段,人们认为只要给机器赋予逻辑推理能力,机器就具有智能。例如,A.Newell和H.Simon的“逻辑理论家”和“通用问题求解”程序,就是因为其逻辑推理能力而获得了1975年的图灵奖。
  • 知识期(20世纪70年代中期):此时期人们认为,要使机器具有智能,就必须设法使机器拥有知识。E.A.Feigenbaum作为“知识工程”之父,因其在这一领域的贡献而获得了1994年的图灵奖。
  • 学科形成与发展(20世纪80年代至今):20世纪80年代,机器学习开始形成一个独立的学科领域,并快速发展。1980年,美国卡内基梅隆大学举行了第一届机器学习研讨会,标志着这一学科的正式形成。此后,各种机器学习技术如百花齐放般涌现。到了20世纪90年代后,统计学方法在机器学习中占据主导地位,其中的代表是支持向量机(SVM)。而自2006年至今,基于大数据分析的需求,神经网络又被重新发现和应用,成为深度学习理论的基础。

2.2. 典型事件

  • 神经网络模型的提出:如前所述,1943年Warren McCulloch和Walter Pitts提出的神经网络层次结构模型是机器学习的重要基石。
  • 机器学习的概念提出:1952年Arthur Samuel提出了“机器学习”的概念,为这一领域的发展指明了方向。
  • IBM的下棋程序:在20世纪50年代,IBM的Arthur Samuel开发了一种下棋的电脑程序。由于程序运行的计算机内存有限,Samuel发明了alpha-beta剪枝算法来优化搜索效率。这一事件不仅是机器学习在棋类游戏中的一个重要应用,也展示了机器学习在资源受限条件下的优化能力。
  • 机器学习在信用卡欺诈检测中的应用:近年来,机器学习在信用卡欺诈检测中发挥了重要作用。例如,万事达卡使用多层机器学习和人工智能工具来清除恶意用户并防止欺诈损失。自2016年以来,这些工具已经帮助万事达卡避免了约10亿美元的欺诈损失。这一事件展示了机器学习在金融安全领域中的实际应用和显著效果。

3. 学习类型


机器学习算法可以分为监督学习无监督学习半监督学习等类型。下面将详细介绍这三种学习方式。

3.1. 监督学习

定义:监督学习是机器学习的一种类型,其中模型通过学习带有标签的训练数据来预测新的、未知的输入数据的输出。标签为模型提供了“正确答案”,使其能够学习输入与输出之间的映射关系。
主要任务:监督学习的主要任务包括分类和回归。分类是预测离散值,如图像识别中的猫或狗;回归则是预测连续值,如根据房屋面积预测房价。
训练过程:在监督学习中,数据集通常被划分为训练集和测试集。训练集用于训练模型,而测试集用于评估模型在未见过的数据上的性能。
应用:监督学习广泛应用于图像识别、语音识别、自然语言处理等领域。

3.2. 无监督学习

定义:

无监督学习是另一种机器学习类型,其中算法在没有标签的数据上进行训练。算法必须自己发现数据中的结构和模式。


主要特点:

  • 模式发现:无监督学习旨在发现数据中隐藏的模式或结构,如聚类算法可以识别数据集中的相似数据点群。
  • 降维:无监督学习可用于将数据从高维空间转化到低维空间,便于可视化和解释。
  • 异常检测:无监督学习算法能够检测数据集中的异常数据点,有助于识别罕见但重要的事件。

常见算法:

包括K-means、分层聚类等聚类算法,以及PCA(主成分分析)等降维算法。

应用:

无监督学习在市场营销、生物学、网络安全等领域有广泛应用,如客户细分、基因表达分析、异常检测等。

3.3. 半监督学习

半监督学习是机器学习领域的一个重要分支,它结合了监督学习和无监督学习的特点,旨在利用有限的标记数据和大量的未标记数据来提升模型的性能。以下是对半监督学习的详细解释:

3.3.1.定义与基本思想

定义:半监督学习是一种结合有标记数据和无标记数据进行学习的方法,旨在通过同时利用这两种类型的数据来提高模型的准确性和泛化能力。
基本思想:在训练过程中,半监督学习算法不仅依赖于标记数据提供的明确指导,还利用未标记数据中的潜在结构和信息来增强模型的学习效果。

3.3.2. 发展历程与应用场景

发展历程:半监督学习的研究可以追溯到20世纪70年代,自训练、直推学习等方法开始出现。到了90年代,随着新的理论的出现和应用领域的发展,半监督学习得到了更广泛的研究和应用,出现了协同训练、转导支持向量机等新方法。
应用场景:半监督学习在多个领域都有广泛应用,如文本分类、图像分类、推荐系统、社交网络分析和生物信息学等。特别是在数据集较大但标签较少的情况下,半监督学习能够充分利用无标签数据来提高模型的准确性和泛化能力。

3.3.3. 核心算法与优势

核心算法:

常见的半监督学习算法包括自编码器、生成对抗网络和迁移学习等。这些算法通过对有标记数据和无标记数据的学习,让模型建立起知识并进行优化。

优势:

半监督学习的主要优势在于它能够充分利用无标签数据进行学习,从而提高模型的准确性和泛化能力。在实际应用中,这意味着可以在有限的标签数据下实现较好的效果,降低对数据标注的依赖。


3.3.4. 实际应用案例
  • 图像分类:在医学影像诊断中,利用半监督学习方法可以利用未标记的医学影像数据来扩充训练集,从而提高模型的分类准确性,为医生提供更可靠的诊断结果。
  • 文本分类:在情感分析中,利用半监督学习算法可以将未标记的文本数据和少量的标记数据结合起来,训练出性能更好的情感分析模型。
  • 异常检测:在工业设备故障检测中,利用半监督学习方法可以通过少量的标记异常数据和大量的未标记数据训练出更准确的异常检测模型。

3.4. 游戏AI的半监督学习

3.4.1. 游戏AI为什么选择半监督学习

由于游戏类型的不同和游戏需求的不同,以及道德准则框架要求和特殊要求存在的约束条件下,为了最接近玩家使用需求,通常我们使用半监督学习方法,在“红框”内让机器进行学习。
最常使用在游戏游戏AI中使用半监督学习的方法通常是为了解决标记数据稀少的问题。在游戏中,获取大量标记数据可能非常耗时且成本高昂,因此利用未标记数据来增强模型的学习效果显得尤为重要。半监督学习能够在有限的标记数据基础上,结合大量的未标记数据,提升AI模型的性能和泛化能力。

3.4.2. 典型示例

假设我们正在开发一款角色扮演游戏,其中有一个任务是让NPC(非玩家角色)能够自主地进行战斗。我们可以使用半监督学习来训练NPC的战斗行为。具体步骤可能如下:

  1. 数据收集:首先,我们可以手动标记一部分NPC的战斗数据,包括其行动、攻击、防御等策略,作为训练集中的标记数据。同时,我们还可以收集大量的未标记战斗数据,这些数据可能来自于玩家与NPC的战斗记录、NPC之间的战斗等。
  2. 模型训练:利用半监督学习算法,如自训练(Self-Training)、协同训练(Co-Training)或转导支持向量机(TSVM)等,结合标记数据和未标记数据进行模型训练。这些方法通常首先使用标记数据训练一个初始模型,然后利用这个模型对未标记数据进行预测,并将预测结果作为新的标记数据加入到训练集中,如此迭代进行,直到满足停止条件。
  3. 模型应用:训练完成后,我们可以将得到的模型应用于游戏中的NPC,使其能够根据当前战斗情况自主选择合适的战斗策略。
3.4.3. 代码示例

Python示例代码(使用scikit-learn的LabelSpreading模型)

from sklearn import datasets  
from sklearn.semi_supervised import LabelSpreading  
from sklearn.model_selection import train_test_split  
from sklearn.metrics import classification_report  
  
# 加载数据集(以鸢尾花数据集为例)  
iris = datasets.load_iris()  
X = iris.data  
y = iris.target  
  
# 假设我们只有部分数据是标记的  
labeled_size = 50  # 假设我们只有50个标记样本  
labeled_idx = np.random.choice(len(y), labeled_size, replace=False)  
X_labeled, y_labeled = X[labeled_idx], y[labeled_idx]  
X_unlabeled = np.delete(X, labeled_idx, axis=0)  
  
# 创建半监督学习模型  
lp_model = LabelSpreading(kernel="knn", alpha=0.8)  
  
# 训练模型  
lp_model.fit(np.vstack((X_labeled, X_unlabeled)), y_labeled)  
  
# 对未标记数据进行预测  
y_pred_unlabeled = lp_model.predict(X_unlabeled)  
  
# 评估(仅作为示例,实际应用中未标记数据没有真实标签)  
print(classification_report(iris.target[labeled_idx], lp_model.predict(X_labeled)))


C++算法示例(伪代码)
在C++中实现半监督学习算法相对复杂,因为C++标准库没有直接提供机器学习算法。但你可以使用如MLPACK、Shark等C++机器学习库,或者自己实现算法。以下是一个简化的半监督学习伪代码示例,用于说明基本概念:

// 伪代码,非实际可运行代码  
  
// 假设我们有一些标记数据和大量未标记数据  
vector<vector<double>> labeledData; // 标记数据特征  
vector<int> labeledLabels; // 标记数据标签  
vector<vector<double>> unlabeledData; // 未标记数据特征  
  
// 初始化模型,这里以KNN为例  
KNNModel model;  
model.train(labeledData, labeledLabels); // 使用标记数据训练初始模型  
  
// 半监督学习迭代过程  
for (int iteration = 0; iteration < maxIterations; ++iteration) {  
    vector<int> predictedLabels = model.predict(unlabeledData); // 对未标记数据进行预测  
      
    // 将部分预测结果加入到训练集中(这里可以加入一些策略来选择哪些数据加入)  
    for (int i = 0; i < predictedLabels.size(); ++i) {  
        if (shouldAddToTrainingSet(predictedLabels[i])) { // 自定义的加入策略  
            labeledData.push_back(unlabeledData[i]);  
            labeledLabels.push_back(predictedLabels[i]);  
        }  
    }  
      
    // 重新训练模型  
    model.train(labeledData, labeledLabels);  
}  
  
// 使用最终模型进行预测或应用

上述C++伪代码是为了说明半监督学习的基本流程,并不是一个完整的实现。在实际应用中,你需要根据具体的算法细节和实现环境来编写和调整代码。如果你打算在C++中实现具体的机器学习算法,建议参考相关的机器学习库或自行实现算法细节。

下一篇游戏AI的创造思路-技术基础-机器学习(2)-CSDN博客我们介绍下一些常见的机器学习算法和示例代码

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

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

相关文章

高校新生如何选择最优手机流量卡?

一年一度的高考已经结束了&#xff0c;愿广大学子金榜题名&#xff0c;家长们都给孩子准备好了手机&#xff0c;那么手机流量卡应该如何选择呢&#xff1f; 高校新生在选择手机流量卡时&#xff0c;需要综合考量流量套餐、费用、网络覆盖、售后服务等多方面因素&#xff0c;以下…

在Visual Studio Code中使用Phi-3模型

更多数字生产力内容&#xff0c;欢迎关注我的公众号“ONE生产力”。 先前的文章中&#xff0c;我们已经介绍使用LM Studio在本地环境中运行Phi-3。LM Studio是一款革命性的桌面应用程序&#xff0c;它允许用户在自己的计算机上本地运行、管理和部署大型语言模型&#xff0c;但有…

新书速览|Linux C与C++一线开发实践

《Linux C与C一线开发实践》 本书内容 Linux C/C编程在Linux应用程序开发中占有重要的地位&#xff0c;掌握这项技术将在就业竞争中立于不败之地。《Linux C与C一线开发实践》内容针对初中级读者&#xff0c;贴近软件公司一线开发实践。全书厚达620多页&#xff0c;知识点丰富…

Go语言JSON-RPC 实战: `net/rpc/jsonrpc` 包的高效使用指南

Go语言JSON-RPC 实战&#xff1a; net/rpc/jsonrpc 包的高效使用指南 简介jsonrpc 包的基础客户端&#xff08;Client&#xff09;创建客户端调用方法 服务器&#xff08;Server&#xff09;配置服务器数据类型和错误处理 搭建基础的 JSON-RPC 服务服务端的实现客户端的实现 进…

不懂电路搭建可以学嵌入式编程开发吗?

当然可以学嵌入式编程开发&#xff01;虽然电路搭建是嵌入式开发中的一部分&#xff0c;但即使你对电路搭建不太了解&#xff0c;也可以从嵌入式编程开发入手。刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0…

什么是绩效评价?绩效考核的五个标准包括哪些?

什么是绩效评价&#xff1f;绩效评价是指运用一定的评价方法、量化指标及评价标准&#xff0c;对中央部门为实现其职能所确定的绩效目标的实现程度&#xff0c;及为实现这一目标所安排预算的执行结果所进行的综合性评价。   绩效考核的五个标准有&#xff1a; 1、考核标准设置…

解决vscode运行js时突然报错

1. 问题背景 创建JavaScript文件运行&#xff0c;弹出错误&#xff1a;Can’t find Node.js binary “node”: path does not exist. Make sure Node.js is installed and in your PATH, or set the “runtimeExecutable” in your launch.json 这是由于没有配置好setting.js…

cnpm run dev 报错 Error: Cannot find module ‘fs/promises’

主要原因是babel版本冲突 卸载以下依赖可以解决问题&#xff1a; 之后重新安装babel-loader依赖 可能会报以下错误&#xff1a; 接着安装babel-core依赖 项目顺利启动

python turtle 004Hello Kity

代码&#xff1a;pythonturtle004HelloKity资源-CSDN文库 # 作者V w1933423 import math import turtle as t# 设置画笔速度 t.speed(0)# 定义函数画弧 def myarc(t1, r, angle):arc_length 2 * math.pi * r * angle / 360 # 弧长n int(arc_length / 3) 1 # 分割段数step…

电脑启动不了怎么办?教你3招轻松解决!

在使用电脑的过程中&#xff0c;有时我们会遇到一些棘手的问题&#xff0c;其中最常见的就是电脑无法正常启动。这可能是由于硬件故障、软件冲突、系统崩溃等多种原因造成的。本文将详细介绍三种解决电脑启动不了的方法&#xff0c;帮助大家快速恢复电脑的正常使用。 方法1&…

MySQL连接

MySQL工具包 MySQL实现简单链接 一 引入工具包 JBDCUtils&#xff0c;无需更改&#xff0c;直接使用即可。 import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties;public class JDBCUtil {private static String URL;p…

手机远程控制另一台手机的全新使用教程(安卓版)

看完这篇文章&#xff0c;你可以了解到安卓手机如何远程控制安卓手机&#xff0c;以及苹果手机如何远程控制安卓手机。 如果想要用安卓手机远程管控苹果手机&#xff0c;或者苹果手机远程管控另一台苹果手机&#xff0c;请点击查看视频《手机远程管控另一台手机的全新使用教程…

利用百数应用优化制造细节,提升生产效率的技术实践

制造管理是确保企业高效、高质生产的核心环节&#xff0c;对于提高企业的运营效率、质量控制、成本控制、交货期保障、资源优化、创新能力以及风险管理等方面都具有重要意义&#xff0c;它能帮助企业在激烈的市场竞争中保持领先地位&#xff0c;同时实现资源的有效利用和风险的…

ABC234G Divide a Sequence 题解

题目来源 ABC234G 洛谷 Description 给定长度为 n n n 的序列 { a n } \{a_n\} {an​}。定义一种将 { a n } \{a_n\} {an​} 划分为若干段的方案的价值为每段的最大值减去最小值的差的乘积。求所有划分方案的价值的总和并对 998244353 998244353 998244353 取模。 1 ≤…

【PA交易】BackTrader: 讨论下分析器和评测指标

前言 BackTrader的分析器主要使用的是analyzers模块&#xff0c;我们可以从Analyzers - Backtrader找到一个非常简单的示例。这个示例中使用方式很简单&#xff0c;其他分析器也可以通过如此简单封装方式进行装载。如果仅是复制粘贴官方教程&#xff0c;完全是制造互联网垃圾…

qt开发-14_QListwidget 仿qq好友列表制作

QListWidget 继承 QListView。QListWidget 类提供了一个基于项的列表小部件。QListWidg et 是一个便捷的类&#xff0c;它提供了一个类似于 QListView&#xff08;下一小节将讲到&#xff09;提供的列表视图&#xff0c;但 是提供了一个用于添加和删除项目的基于项目的经典接口…

Pycharm执行打印console中print数据打印显示不全的解决办法?

#设置显示窗口数据显示完整 pd.set_option(display.max_rows, 500) pd.set_option(display.max_columns, 100) pd.set_option(display.width, 1000)

API-事件类型

学习目标&#xff1a; 掌握事件类型 学习内容&#xff1a; 事件类型鼠标事件焦点事件键盘事件文本事件focus选择器案例 事件类型&#xff1a; 鼠标事件&#xff1a; <title>事件类型-鼠标事件</title><style>div {width: 200px;height: 200px;background-c…

three.js - 置换贴图(displacementMap)、凹凸贴图(bumpMap)、法线贴图(normalMap)

这就是个灰度图 瞅瞅下面的贴图们&#xff0c;加深一下印象吧 说一下灰度图 在灰度图中&#xff0c; 黑色&#xff1a;代表最低的深度&#xff08;或最低的置换&#xff09; 白色&#xff1a;代表最高的深度&#xff08;或最高的置换&#xff09; 中间的灰度值&#xff0c;则…

链在一起联机存档同步教程 教你如何学会链在一起联机同存档

双人成行&#xff0c;四人更行了&#xff0c;说的就是新游戏链在一起&#xff0c;多人合作冒险游戏&#xff0c;一个是和兄弟四人一起玩的游戏&#xff0c;游戏中四个人被铁链绑在一起&#xff0c;大型节目之好兄弟到底谁是脑瘫正在上演&#xff0c;甚至有些玩家感觉链子牵的不…