如果函数都能被拟合,指针呢?

1.使用模型拟合简单的函数

设想有一个函数,它没有副作用
例如

add(a:float,b:float)->float{
return a+b;
}

那么我们理论上可以训练一个模型:它的输入是一个二维向量,它的输出则应当是v[0]+v[1]
于是我们理应可以将任何num = add(f1,f2),替换为num = addModel.predict(vec({f1,f2}));
而这个model甚至只需要一个神经元.
但函数参数很少只是值类型.

2.数据结构的嵌套

对于内存中的部分比特,它们的含义不仅取决于它们自身,还于其它内存的状态相关.
对于

numptr:int* = &num

如果单独去看numptr的值,那么这只是一串随机数.于是,我们可以说,数字在计算机内部的含义是嵌套的,而计算机最强大的能力之一就是解引用.

2.1内存中的指针

现在我们有一个数组,它的第一个元素为n,以及一个函数定义:

vec={n,5,3,7,9,6,3};
dref(num){
  return vec[num];
}

那么当我们写下dref(vec[0])时,就形成了一个有趣的嵌套结构

  • n=0,返回 0,也就是n本身
  • n=1,返回 5
  • n=5,返回 3

以此类推


这就是在vec内存空间中,对vec[0]的解引用


于是,我们自然地想到:
如果我们让模型去拟合dref(vec[0])呢?

3.模型与解引用

我们假设 vec 的每一项都在 [0-10]


设计这样一个模型,它的输入是
vec.foreach(i=>0.1*1)
看的出来,这是一个七维向量,


它的期望输出是
vec[int(vec[0]*10)]
不过数组越界很烦人,我们不考虑数组越界问题

有了明确的输入输出,让我们编写模型去完成解引用操作,似乎完全可以.


而如果模型足够'直接',那么它可以进化出这种权重:

第一层

第一层分为左右两部分,分别负责编码指针信息传递原数据

第一部分

该部分有7个神经元,使用线性激活函数,
本层的权重为:

{
  in[0],
  in[0]-0.1,
  in[0]-0.2,
  in[0]-0.3,
  .....
  in[0]-0.6
},

激活函数使用
1/1+(x^2)
将其转化为onehot编码

第二部分

依旧是七个神经元,使用线性激活函数,原样输出vec的每一项.

第二层

在第二层,权重依次为

{
  l1[0]+l1[7]-1,
  l1[1]+l1[8]-1,
  l1[2]+l1[9]-1,
  ...,
  l1[6]+l1[13]-1
}

激活函数使用

{
  x|x>0,
  0|x<0
}

第三层

{
  l2[0]+l2[1]..+l2[6]
}

激活函数是x;
第三层这单个神经元的输出值,便是解引用的结果

总结

对于这些数学公式是否正确,我不敢保证,这其实很理想化.
但是个人认为只要模型能够将0-1的数值转化为onehot,那么它就能完成解引用指针的工作.
只是不清楚反向传播能否让模型自发形成这种权重.

更多思考

如果不仅仅是指针解引用
vec中每三项一组,

  • vec[3*i]是右节点指针,
  • vec[3*i]+1是本节点值,
  • vec[3*i+2]是右节点指针,
  • 根节点是index=0,

而这是一颗有序二叉树,那么神经网络能学会二叉搜索吗?
也就是给它存储了二叉树的数组,以及一个目标值,它需要找出目标值在数组中的位置.
如果树的深度是任意的,那或许只有循环神经网络可以做到

posted @ 2026-06-11 23:49  哒哒哒萝卜  阅读(5)  评论(0)    收藏  举报