近日,一则标题为“Show HN: I implemented a neural network in SQL”的帖子在知名技术社区Hacker News上引发热议。一位匿名开发者宣布,他成功使用纯SQL(结构化查询语言)实现了一个完整的神经网络,并公开了源代码。这一消息让众多数据库工程师和机器学习从业者大跌眼镜——因为SQL通常被视作处理关系数据的查询语言,与需要大量矩阵运算、自动微分和优化算法的神经网络看似毫无关联。

当查询语言遇上深度学习

SQL是数据管理的“通用语言”,其核心能力是数据检索、插入、更新和删除。而神经网络则依赖线性代数、微积分和梯度下降等复杂计算。在绝大多数开发者眼中,用SQL写神经网络,好比用锤子拧螺丝——不是不可能,但极度反直觉。

然而,这位开发者利用SQL的递归公共表表达式(CTE)、窗口函数以及聚合函数,巧妙模拟了前向传播和反向传播过程。根据其公开的技术文档,模型支持多层全连接网络,采用Sigmoid激活函数,并能通过简单SQL语句执行训练和推理。例如,一次前向传播被拆解为多个递归步骤,每一层的结果通过CTE逐层传递,最终输出预测值。反向传播则利用链式法则,同样用递归查询计算梯度并更新权重。

“整个过程没有使用任何外部扩展或自定义函数,完全依赖标准SQL语法。”开发者在帖文中强调。这意味着,该项目理论上可以运行在任何支持递归CTE的数据库系统中,如PostgreSQL、MySQL 8.0+或SQLite(需要开启递归支持)。

背景:一场“没必要但极客”的挑战

实际上,用SQL实现机器学习算法并非首次出现。过去曾有开发者尝试在SQL中实现线性回归、K-Means聚类甚至决策树。但完整的多层神经网络因其计算复杂度,鲜有人挑战成功。此次项目之所以引发热议,不仅因为技术实现本身,更因为它触及了“到底什么才算是合理的编程工具”这一哲学问题。

一位在Hacker News上留言的网友评论道:“这就像是用鱼叉捕蝴蝶——虽然能做到,但你真的需要吗?”而项目作者回应:“纯粹是为了好玩和学习。通过这个过程,我加深了对SQL执行模型和神经网络底层原理的理解。”

从实用角度看,该项目目前只能处理小型数据集(如经典的鸢尾花或手写数字识别简化版),训练速度远低于Python框架。不过,它证明了SQL的图灵完全性——理论上任何可计算问题都能用SQL表达,只不过效率堪忧。

意义:超越炫技的思考

尽管该项目被不少网友调侃为“史上最慢神经网络”,但其背后折射出两个重要趋势。

第一,数据库系统的计算能力正在被重新发现。随着SQL标准的演进,递归查询、窗口函数、甚至JSON操作等功能让SQL从简单的数据检索工具,进化成一种可完成有限通用计算的领域特定语言。当神经网络都能在SQL中运行时,数据科学家或许能直接在数据库内部完成一些轻量级特征工程或模型微调,减少数据搬运成本。

第二,极客文化推动技术边界。许多看似“无用”的项目,后来都成为重要创新的先声。例如,早期的浏览器、JavaScript引擎乃至比特币,最初都被认为只是“玩具”。在SQL中训练神经网络,虽然不实用,但可能启发数据库厂商优化对矩阵运算的内建支持,或者催生下一代“SQL机器学习引擎”。

社区反应:赞誉与质疑并存

截至发稿,该帖在Hacker News上获得了超过800个点赞和近200条评论。不少开发者表示“大脑被刷新”,并分享了自身在SQL中实现数学函数的经历。也有技术严谨派指出,项目的梯度计算依赖于数值近似而非自动微分,收敛速度可能受限。还有人关心版权与许可证问题——作者已将该代码以MIT许可证开源,供学习研究使用。

无论如何,这一事件已成功吸引了全球技术爱好者的目光。正如项目作者在结尾处写的那样:“不要被‘这就是SQL该做的事’这种想法限制住。只要你想,任何语言都能成为你的神经网络。”

(字数:约980字)