Accel Brain Code: 从概念验证到原型
本代码库的目的是在概念验证(PoC)和研发(R&D)的背景下制作原型作为案例研究,这些内容我已经在我的网站Accel Brain(日语)和Accel Brain Co., Ltd.(日语)上撰写过。主要研究主题包括与表示学习相关的自编码器、基于能量的模型的统计机器学习、对抗生成网络(GANs)、深度强化学习如深度Q网络、半监督学习,以及用于自然语言处理的神经网络语言模型。
问题设定:"人工智能(AI)民主化"时代后的深度学习
在"人工智能(AI)民主化"时代之后,如何进行机器学习(包括深度学习)的研发?简单地实现标准机器学习库和AutoML等应用程序提供的模型和算法只会重复造轮子。如果你只是复制粘贴库中的演示代码并使用,你的研发就会陷入教条式的权威开发,或所谓的炒作驱动开发。
如果你沉迷于"AI民主化"的概念,你可能会忘记研发不仅受民主主义影响,还受资本主义影响的现实。当研发成果与标准机器学习库和AutoML等应用程序实现的模型和算法有所区别时,研发才能提供经济价值。一般来说,研发必须提供差异化因素,以最大化其实现成果的稀缺性。
另一方面,必须记住,任何研发都建立在社会结构的历史和先前研究设想的概念语义之上。许多模型和算法不仅源于研究,还源于与业务领域的关系。不考虑社会及其历史的共性和同一性,就不可能假设差异化因素。
问题解决:PoC的PoC
当整个社会(包括商业)创造出新概念时,"AI民主化"的盲点就会出现。从面向对象分析等角度将新概念分解为接口规范,并实现符合接口规范的代码,这需要时间。以这种方式创造的新AI与已经"民主化"的AI之间总会存在一些差异。
从更现实的角度来看,只是等待AI"民主化"的普通用户总是会落后。相反,那些能够通过PoC创造新概念和新AI的人将始终在以AI为主题的市场中保持领先优势。隐藏在"AI民主化"的"民主"运动背后的是"资本主义"竞争的冷酷现实。
生活窍门的生活窍门
我的PoC的基本主题是生活窍门,即任何能减轻我们生活负担并使其更易控制或更方便的技巧。考虑到许多生活窍门解决方案都是技术性的,显然产品设计和开发技术也是一种可以被"破解"的"生活",生活窍门本身也可以成为生活窍门的目的。由于这种自我逻辑,我的PoC和技术原型看似无止境的循环是由自我参照驱动,周期性地重复"生活窍门的生活窍门"。
在这种问题设定和递归解决方案中,本代码库通过信息收集、寻找最优解决方案和注意力提升器等组成进行功能分化。每个功能都可以被视为生活窍门解决方案的组成部分。这些工具使思考过程更加高效,加速我们的大脑,为本代码库中其他工具的开发提供支持。所有代码,以机器学习或数据科学算法的形式实现,都反映了概念验证(PoC)的理念。
问题解决:Accel-Brain-Base
作为原型开发的一部分,本代码库发布了一个特殊的机器学习库,Accel-Brain-Base。
accel-brain-base
是一个用于低成本快速开发的深度学习基础库。该库通过组合多个功能分化的模块,如受限玻尔兹曼机(RBM)、深度玻尔兹曼机(DBMs)、堆叠自编码器、基于长短期记忆(LSTM)的编码器/解码器和卷积自编码器(CAE),使得设计和实现深度学习成为可能,这必须被配置为复杂系统或系统的系统。
Weizmann马匹数据集中的图像。
卷积自编码器重构的图像。
从功能等价和结构扩展的角度来看,该库还原型化了许多变体,如基于能量的模型和生成模型。典型例子是生成对抗网络(GANs)和对抗自编码器(AAEs)。此外,它还提供了深度强化学习,将上述神经网络应用为函数逼近器。
考虑到深度学习范式中的许多可变部分、结构联合和功能等价(这些变体不仅源于研究,还源于与业务领域的关系),从面向对象设计的共性/可变性分析角度出发,该库提供了定义深度学习算法骨架的抽象类,将一些步骤推迟到具体变体算法(如深度玻尔兹曼机、堆叠自编码器、基于LSTM的编码器/解码器和卷积自编码器)的客户端子类中。该库中的抽象类和接口允许子类重新定义深度学习算法的某些步骤,而不改变算法的结构。
这些抽象类还可以通过实现对象流动元素的可变部分,提供新的原创模型和算法,如生成对抗网络(GANs)、深度强化学习或神经网络语言模型。
文档
完整文档可在 https://code.accel-brain.com/Accel-Brain-Base/README.html 上获取。该文档包含有关功能可重用性、功能可扩展性和功能可扩展性的信息。
问题解决方案:自动摘要库:pysummarization
pysummarization
是一个用于自动摘要、文档抽象和文本过滤的 Python3 库。
该库的功能是使用一种自然语言处理方法进行自动摘要。它使您能够创建原始文档或经文本聚类过滤的网络抓取文本的主要要点摘要。
文档
完整文档可在 https://code.accel-brain.com/Automatic-Summarization/ 上获取。该文档包含有关功能可重用性、功能可扩展性和功能可扩展性的信息。
问题解决方案:强化学习库:pyqlearning
pyqlearning
是一个用于实现强化学习和深度强化学习的 Python 库,特别是用于 Q-Learning、深度 Q 网络和多智能体深度 Q 网络,这些可以通过模拟退火、自适应模拟退火和量子蒙特卡罗方法等退火模型进行优化。
根据强化学习问题设置,Q-Learning 是一种时序差分学习(TD 学习),可以被视为蒙特卡罗方法和动态规划方法的混合。作为蒙特卡罗方法,TD 学习算法可以在没有环境模型的情况下通过经验学习。这种学习算法是动态规划方法中引导方法的功能扩展。
Q-Learning 的共性/可变性
在这个库中,Q-Learning 可以分为Epsilon Greedy Q-Learning和Boltzmann Q-Learning。这些算法在功能上是等效的,但它们的结构在概念上应该有所区分。
考虑到 Q-learning 范式中的许多可变部分和功能扩展,从共性/可变性分析的角度来实践面向对象设计,该库提供了一个抽象类,定义了 Q-Learning 算法操作中的骨架,将一些步骤推迟到具体变体算法(如 Epsilon Greedy Q-Learning 和 Boltzmann Q-Learning)的客户端子类中。这个库中的抽象类允许子类重新定义 Q-Learning 算法的某些步骤,而不改变算法的结构。
深度 Q 网络解决简单迷宫问题
demo/search_maze_by_deep_q_network.ipynb 是一个 Jupyter notebook,展示了基于深度 Q 网络的迷宫求解算法,与深度卷积神经网络(Deep CNNs)紧密耦合。深度学习的功能是泛化,而 CNNs 是一个函数逼近器。在这个notebook中,可以从功能角度比较几个功能等效的模型,如 CNN、长短期记忆(LSTM)网络,以及松散耦合 CNN 和 LSTM 的模型。
- 黑色方块代表墙壁。
- 浅灰色方块代表通道。
- 深灰色方块代表起点。
- 白色方块代表终点。
追逃游戏
扩展迷宫的搜索问题可以描述追逃游戏,这是数学和计算机科学中的一类问题,其中一组试图在环境中追踪另一组成员。
这个问题可以重新描述为多智能体控制问题,涉及将全局系统状态分解为图像状态表示,信息编码在不同的通道中。这种重新表述允许我们使用卷积神经网络有效地从图像状态中提取重要特征。
demo/search_maze_by_deep_q_network.ipynb 还原型化了多智能体深度 Q 网络,以基于多智能体的图像状态表示解决追逃游戏。
- 黑色方块代表墙壁。
- 浅灰色方块代表通道。
- 深灰色方块代表起点。
- 移动的深灰色方块代表敌人。
- 白色方块代表终点。
组合优化问题和模拟退火。
在实际搜索和学习过程开始之前,我们需要设置许多超参数。每个参数都应该根据强化学习理论来决定,它会对训练模型产生副作用。这个问题可以被视为组合优化问题,即从有限的解决方案集中识别最优解的优化问题。在这种问题设置下,该库提供了诸如模拟退火等退火模型来搜索超参数的最佳组合。
如annealing_hand_written_digits.ipynb所示,模拟退火有许多功能扩展和功能等价物。例如,自适应模拟退火,也称为超快速模拟再退火,是模拟退火的一个非常高效的版本。而量子蒙特卡罗,通常被认为是求解薛定谔方程的随机方法,是在经典计算机上模拟量子退火的最早解决方案之一。
文档
完整文档可在https://code.accel-brain.com/Reinforcement-Learning/上获取。该文档包含了功能可重用性、功能可扩展性和功能可扩展性的信息。
问题解决方案:生成对抗网络库:pygan
pygan
是一个用于实现生成对抗网络(GANs)和对抗自编码器(AAEs)的Python库。
该库使得设计基于生成对抗网络(GANs)和对抗自编码器(AAEs)的统计机器学习问题相关的生成模型成为可能,以实践半监督学习的算法设计。
生成对抗网络(GANs)(Goodfellow等,2014)框架在两个神经网络之间建立了一个最小-最大对抗游戏——一个生成模型G和一个判别模型D。判别器模型D(x)是一个神经网络,计算观察到的数据点x在数据空间中是来自我们试图建模的数据分布(正样本)而不是来自我们的生成模型(负样本)的概率。同时,生成器使用函数G(z)将先验p(z)的样本z映射到数据空间。G(z)被训练以最大程度地混淆判别器,使其相信它生成的样本来自数据分布。生成器通过利用D(x)相对于x的梯度来训练,并使用该梯度修改其参数。
该库提供了对抗自编码器(AAEs),这是一种概率自编码器,使用GANs通过将自编码器隐藏层中特征点的聚合后验与任意先验分布匹配来执行变分推断(Makhzani, A.等,2015)。将聚合后验与先验匹配确保从先验空间的任何部分生成都会产生有意义的样本。因此,对抗自编码器的解码器学习了一个将施加的先验映射到数据分布的深度生成模型。
文档
完整文档可在https://code.accel-brain.com/Generative-Adversarial-Networks/上获取。该文档包含了功能可重用性、功能可扩展性和功能可扩展性的信息。
问题解决方案:算法作曲
pycomposer
是一个用于通过强化学习(如Q-Learning和递归时间受限玻尔兹曼机(RTRBM))进行算法作曲或自动作曲的Python库。该库中的Q-Learning和RTRBM允许你提取MIDI轨道的旋律信息,这些模型可以学习和推断旋律的模式。此外,该库还有一个包装类,用于将Q-Learning和RTRBM推断的旋律数据转换为MIDI文件。
文档
完整文档可在https://code.accel-brain.com/Algorithmic-Composition/上获取。该文档包含了功能可重用性、功能可扩展性和功能可扩展性的信息。
问题解决方案:Cardbox
这是一个简单的卡片盒系统,使你能够找到并保存你的想法。
你可以在卡片上写下尽可能多的想法。像KJ法或思维导图工具一样,这个简单的JavaScript工具帮助我们发现你创建的卡片之间潜在的关系。标签功能允许你为卡片生成元数据,使其含义和关系易于理解。
问题解决方案:用Python实现双耳节拍和单耳节拍
AccelBrainBeat
是一个用于创建双耳节拍或单耳节拍的Python库。你可以播放这些节拍并生成wav文件。频率可以选择性地设置。
这个Python脚本使你能够通过一种简化的方法使用一种通常被称为双耳节拍或单耳节拍的"脑波控制器"来控制你的精神状态。
文档
完整文档可在https://code.accel-brain.com/Binaural-Beat-and-Monaural-Beat-with-python/上获取。该文档包含了功能可重用性、功能可扩展性和功能可扩展性的信息。
问题解决方案:用JavaScript实现双耳节拍和单耳节拍
这些模块在功能上等同于AccelBrainBeat
中的Python脚本。
问题解决方案:潜意识感知
这些JavaScript是用于潜意识感知实验的工具。
这是我在我的网站上进行案例研究的演示代码。
参考文献
这个库背后的基本概念、理论和方法在以下书籍中有所描述。
『数据可视化的媒体美学:混合策略的魔术师们』(日文)
『「浮士德式人类」的教育:终身学习的创业精神』(日文)
作者
- Accel Brain株式会社
作者网址
许可证
- GNU通用公共许可证v2.0