自己动手实现AI系统的设计思路

我想自己实现一个AI系统, 在此记录一下设计思路.

  • 训练算法: 采用遗传进化算法. 原因如下:
    • 我没有深厚的数学功底, 不善长BP网络相关算法; 而遗传算法比较容易理解和实现
    • 遗传算法对神经网络的结构没有要求, 使得神经网络的能力潜力很大
    • 可扩展能力强, 很容易实现并行计算
  • 神经网络的基本结构
    • 神经网络本质上是一个有向图, 由神经元和神经元之间的有向连接组成, 如下图所示:
    graph LR A --> C A --> D B --> D C --> C C --> E D --> E
    • 图中的每一个节点代表一个神经元, 有向箭头代表神经元之间的连接; 连接是有向的, 表示前面神经元的信号传递给后面的神经元
    • 神经元可以自己连接自己
    • 两个神经元之间有两条连接的情况
      这种情况是合法的, 为提高计算效率, 是可以合并成一条的; 并且后续在生成连接时, 注意避免生成2条的情况, 提高进化效率
  • 关于输入和输出神经元
    输入神经元获取外界的数据, 经过处理后, 由输出神经元负责输出. 其余的神经元称之为隐藏神经元.
    • 输入和输出神经元的连通性
      如果输入神经元不能连通到输出神经元, 则这种网络结构是无效的, 如下图所示:
      graph LR A --> C A --> D B --> D C --> C C --> E style A fill:green style B fill:red style E fill:blue
      在上图中, A和B是输入神经元, E为输出神经元, 节点B没有与输入神经元连通, 是不合理的结构, 应尽量避免.
  • 关于计算顺序
    • 按神经元依次计算, 模型简单但是应该不符合实际情况
    • 从输入神经元按连接关系, 逐步扩散到输出神经元, 特点如下:
      • 更符合真实的人脑模型
      • 从人脑模型上来看, 神经元的后续神经元的计算应该是并行的; 或许神经元的并行计算是产生意识的基础
  • 关于神经元的并行计算
    如果一个神经元的后继神经元有多个, 应该先计算哪个呢? 在实际人脑模型中, 应该是并行计算的. 为简化计算, 可以采用随机选择一个神经元计算, 效果和并行计算应该是一样的. 如下图所示, B,C,D三个神经元可以并行计算.
    graph LR A --> B A --> C A --> D style B fill:green style C fill:red style D fill:blue
  • 关于神经团
    • 神经团是我自己起的名字, 来源于自然界生物分层的现象. 细胞构成了组织, 组织构成了器官, 器官构成人体. 神经网络也可能有这样的结构, 若干神经元及其连接组成了一小团, 完成特定的功能, 整体对外看起来就像一个大的神经元. 我取名叫神经团. 如下图所示, 绿色区域可以看做一个神经团:
    graph LR subgraph A b1 b2 b3 b4 end style A fill:green a1-->b1 a2-->b2 b1-->b3 b2-->b4 b1-->b2 b1-->b4 b3-->b3 b3-->b4 b2-->c b4-->c
    • 神经团内部有自己的独有进化参数, 可以看做一个小的独立个体
    • 神经团内部, 输入神经元和输出神经元相对是固定的, 不会轻易变更.
    • 如果有新的入连接到神经团, 是连接到已有输入神经元还是把已有的神经元转换为输入神经元呢? 有三种方式:
      • 连接到神经团的输入神经元. 有利于保持神经团的输入输出稳定性
      • 优先连接到新的神经元. 在表达能力上应该是最强的
      • 随机连接到神经团包含的神经元中
posted @ 2023-08-01 11:13  顺其自然,道法自然  阅读(74)  评论(0编辑  收藏  举报