写在前面:本项目暂无任何实用价值,仅用于测试Transformer的学习能力。为了保证测试的合理性,建议在模型的推理过程中不使用任何基于搜索的算法,例如MCTS、BFS、DFS;不利用计算机的运算速度和存储记忆优势来搜寻较优解。
对于一个打乱的三阶魔方,很多人经过一段时间的训练可以快速还原,那人工智能可以达到或超过人的水平吗? 本文将通过训练一个会玩魔方的BERT分类模型来回答上述问题。
先定义输出动作空间:
"U1", "U2", "U3", "R1", "R2", "R3",
"F1", "F2", "F3", "D1", "D2", "D3",
"L1", "L2", "L3", "B1", "B2", "B3",
U, R, F, D, L, B对应魔方的6个面:Up, Right, Front, Down, Left, Back。
1, 2, 3分别表示顺时针旋转90°, 180°, 270°
例如U1表示将Up面顺时针旋转90°,R3表示将Right面顺时针旋转270°(等效于逆时针旋转90°)
训练数据集比较简单,直接贴代码吧:
from random import SystemRandom
random = SystemRandom()
from torch.utils.data import Dataset
"""
https://github.com/hkociemba/RubiksCube-TwophaseSolver
pip install RubikTwoPhase
"""
from twophase.cubie import CubieCube, moveCube
class CubeDataset(Dataset):
def __init__(self, alpha=1.2) -> None:
self.weights = tuple([alpha**i for i in range(20)])
self.population = tuple(range(1, 21))
self.move_names = [
"U1", "U2", "U3", "R1", "R2", "R3",
"F1", "F2", "F3", "D1", "D2", "D3",
"L1", "L2", "L3", "B1", "B2", "B3",
]
self.itos = [
"-", " ", "\n",
"U", "R", "F", "D", "L", "B",
"0: ", "1: ", "2: ", "3: ", "4: ", "5: ",
]
self.face_names = ["U", "R", "F", "D", "L", "B"]
self.stoi = {k:i for i, k in enumerate(self.itos)}
self.color_id = self.stoi["U"]
self.face_id = self.stoi["0: "]
self.newline_id = self.stoi["\n"]
self.space_id = self.stoi[" "]
self.pad_id = self.stoi["-"]
def reverse_move(self, m):
m = int(m)
m1 = (m // 3)
m2 = (m % 3)
m2 = 2 - m2
return m1 * 3 + m2
def __len__(self):
return 1024 * 128
def __getitem__(self, index):
_ = index
# n为随机打乱的步数,n越大,还原难度越高
n = random.choices(population=self.population, weights=self.weights, k=1)[0]
c = CubieCube()
moves = []
""" 随机打乱魔方,我们希望最小还原步数也为n,
已发现:存在实际最小还原步数小于n的情况,暂时不知道如何解决
"""
for _ in range(n):
while True:
m = random.randrange(3*6)
if len(moves) >= 1 and (moves[-1] // 3) == (m // 3): continue
if len(moves) >= 2:
f1 = self.face_names[moves[-2] // 3]
f2 = self.face_names[moves[-1] // 3]
f = self.face_names[m // 3]
if f1+f2 in "UDU" and f in "UD": continue
if f1+f2 in "LRL" and f in "LR": continue
if f1+f2 in "FBF" and f in "FB": continue
break
c.multiply(moveCube[m])
moves.append(m)
fc = c.to_facelet_cube()
aout = self.reverse_move(m)
ain = []
for i in range(54):
if i % 9 == 0:
ain.append(i//9 + self.face_id)
ain.append(fc.f[i] + self.color_id)
if (i+1) % 9 == 0:
ain.append(self.newline_id)
elif (i+1) % 3 == 0:
ain.append(self.space_id)
# 填充到固定长度
ain += [self.pad_id] * 10
return ain, aout
if __name__ == "__main__":
c = CubeDataset()
for _ in range(2):
print()
ain, aout = c[0]
print("Input: ", len(ain))
for e in ain:
print(c.itos[e], end="")
print()
print("Label: ", c.move_names[aout])
训练样本示例如下:
Input: 88
0: FLF BUF LRD
1: RDD URU LRD
2: UBB LFB UDD
3: BRF FDF BUL
4: UDF FLD LLR
5: RBR RBU BLU
----------
Label: U3
Input: 88
0: FFF RUB BUB
1: UDL RRF RDB
2: RRL UFD LFD
3: UUB BDF RLD
4: RBU LLL UUF
5: DLD RBB LDF
----------
Label: F1
说明:输入中U, R, F, D, L, B的具体含义可参考:
魔方的初始状态为: UUUUUUUUURRRRRRRRRFFFFFFFFFDDDDDDDDDLLLLLLLLLBBBBBBBBB
经过n步随机打乱后,状态变为S,其中n小于等于20。对某个面旋转一次算一步,旋转90°, 180°, 270°都只算一步。
使用BERT分类模型,模型的输入为状态S,输出为还原魔方的下一步动作A。由于模型比较小,使用一张2G显存的显卡即可完成模型的训练。
在测试环节,每次选择置信度最高的动作来还原魔方,若在n步之内(含n步)无法将魔方还原为初始状态,则失败。每轮测试10000次,统计成功率。
单卡训练约12小时,测试结果如下:
随机打乱步数n | n步之内(含n步)还原成功率 |
---|---|
1 | 100.00% |
2 | 100.00% |
3 | 100.00% |
4 | 99.94% |
5 | 99.35% |
6 | 96.10% |
7 | 87.33% |
8 | 70.29% |
9 | 48.37% |
10 | 27.83% |
11 | 13.40% |
12 | 5.64% |
13 | 2.14% |
14 | 0.93% |
15 | 0.53% |
16 | 0.16% |
17 | 0.07% |
18 | 0.06% |
19 | 0.04% |
20 | 0.03% |
如何系统的去学习大模型LLM ?
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料
包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型商业化落地方案
阶段1:AI大模型时代的基础理解
- 目标:了解AI大模型的基本概念、发展历程和核心原理。
- 内容:
- L1.1 人工智能简述与大模型起源
- L1.2 大模型与通用人工智能
- L1.3 GPT模型的发展历程
- L1.4 模型工程
- L1.4.1 知识大模型
- L1.4.2 生产大模型
- L1.4.3 模型工程方法论
- L1.4.4 模型工程实践
- L1.5 GPT应用案例
阶段2:AI大模型API应用开发工程
- 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
- 内容:
- L2.1 API接口
- L2.1.1 OpenAI API接口
- L2.1.2 Python接口接入
- L2.1.3 BOT工具类框架
- L2.1.4 代码示例
- L2.2 Prompt框架
- L2.2.1 什么是Prompt
- L2.2.2 Prompt框架应用现状
- L2.2.3 基于GPTAS的Prompt框架
- L2.2.4 Prompt框架与Thought
- L2.2.5 Prompt框架与提示词
- L2.3 流水线工程
- L2.3.1 流水线工程的概念
- L2.3.2 流水线工程的优点
- L2.3.3 流水线工程的应用
- L2.4 总结与展望
阶段3:AI大模型应用架构实践
- 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
- 内容:
- L3.1 Agent模型框架
- L3.1.1 Agent模型框架的设计理念
- L3.1.2 Agent模型框架的核心组件
- L3.1.3 Agent模型框架的实现细节
- L3.2 MetaGPT
- L3.2.1 MetaGPT的基本概念
- L3.2.2 MetaGPT的工作原理
- L3.2.3 MetaGPT的应用场景
- L3.3 ChatGLM
- L3.3.1 ChatGLM的特点
- L3.3.2 ChatGLM的开发环境
- L3.3.3 ChatGLM的使用示例
- L3.4 LLAMA
- L3.4.1 LLAMA的特点
- L3.4.2 LLAMA的开发环境
- L3.4.3 LLAMA的使用示例
- L3.5 其他大模型介绍
阶段4:AI大模型私有化部署
- 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
- 内容:
- L4.1 模型私有化部署概述
- L4.2 模型私有化部署的关键技术
- L4.3 模型私有化部署的实施步骤
- L4.4 模型私有化部署的应用场景
学习计划:
- 阶段1:1-2个月,建立AI大模型的基础知识体系。
- 阶段2:2-3个月,专注于API应用开发能力的提升。
- 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
- 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓