第60章 第一个模型(2/2)
89.7%。他眨了眨眼,重新读了一遍。然后,几乎是本能地,他修改了代码——将epoch数从5改为20,学习率微调到0.005,重新运行。
这一次他不再干等。他打开了TensorBoard(PyTorch的可视化工具),看着损失曲线随着训练轮次平滑下降,准确率曲线稳步上升。第10个epoch时,准确率突破92%;第15个epoch,94.1%;第20个epoch结束时,终端显示:FalTestAuracy:95.3%。
房间里安静得能听到电流声。林晨靠在椅背上,长长地呼出一口气。95.3%。这意味着他刚刚亲手构建的这个简单神经网络,在识别手写数字图片的任务上,已经能达到接近人类的水平——至少对于MNIST这种相对干净的数据集是这样。
但这还不是终点。他打开测试集,随机抽取了几张图片,用训练好的模型进行预测。代码输出预测结果,他对照着真实标签一一核对。
第一张,图片是个歪歪扭扭的“7”,模型预测:7,正确。第二张,像个“3”又有点像“8”,模型预测:3,正确。第三张,一个很标准的“0”,模型预测:0,正确。连续对了十张。
然后他故意挑了一张模糊的、像素似乎有噪声的图片,看起来像“4”但下半部分缺失。模型预测:4,概率置信度87%。真实标签:4。林晨盯着那张图片看了很久。
那一刻,他忽然理解了为什么AI会让人着迷。不是因为它有多神秘,恰恰相反,是因为它的确定性。你给它数据,定义好架构和优化目标,它就会沿着数学上最陡峭的下降方向,一点一点调整自己内部的数百万个参数,直到找到那个能最大限度区分不同类别特征的权重组合。这个过程是可重复、可测量、可改进的。
而更关键的是,这个刚刚能识别手写数字的模型,和那些能识别猫狗图片、翻译语言、下围棋、甚至预测股票走势的模型,在本质上用的是同一套方法论。区别只在于数据规模、模型复杂度和计算资源。
林晨关掉TensorBoard,打开一个新的文件。他开始修改代码——不是照搬教程,而是尝试自己的改动:增加一个隐藏层,把神经元数量从128增加到256,尝试不同的激活函数(把ReLU换成LeakyReLU),调整学习率衰减策略。
重新训练。这一次,准确率在30个epoch后达到了97.1%。虽然只是提升了不到两个百分点,但那种“通过调整架构和超参数来控制系统性能”的掌控感,比第一次看到准确率上升时更强烈。
窗外的科技园,几栋写字楼还亮着零星的灯光。林晨看了眼时间,凌晨两点半。他应该去睡觉了,明天还要继续学卷积神经网络()——那才是处理图像更专业的架构。
但他没动。他打开那个名为“投资系统数学基础构想”的笔记,在空白处写下:
“凌晨2:35。训练出第一个神经网络模型,MNIST准确率97.1%。关键体会:
AI不是魔法,是工程。可量化、可优化。
模型性能取决于三要素:数据质量、架构设计、训练策略。
如果它能从像素中学会识别数字,那它应该也能从K线图中学会识别模式。
下一步:用重做MNIST,理解卷积层如何提取空间特征。这对处理金融时间序列可能有启发”。
写完,他保存笔记,关掉电脑。
躺在床上时,脑子却停不下来。那些损失曲线、准确率数字、权重矩阵在眼前旋转。他想起大学时第一次写出能正确运行的“HelloWorld”程序时的兴奋,想起第一次做出能处理真实业务的电商系统时的成就感。
但今晚的感觉不一样。那不只是“让代码运行起来”的满足,而是更接近……创造。创造一个能“学习”的东西,给它数据,看它成长,调整它的结构让它变得更好。
黑暗中,林晨睁着眼睛。房贷月供一万二,存款还剩不到二十三万,再次失业第二个月。这些数字依然冰冷地悬在头顶。但此刻,他第一次清晰地看到了一条路——不是Web3那种充满不确定性的新领域,而是一条基于数学、代码和数据,每一步都踏实可测的路。
AI这条路。
他翻了个身,想跟苏婉说点什么,却听到妻子均匀的呼吸声——她早就睡了。明天吧,明天可以告诉她,自己今天做出了一个能认数字的“小东西”。虽然它现在还只能认数字。但林晨知道,这只是开始。
窗外的鹏城,凌晨三点的街道空旷安静。而在狭窄书房的书桌上,那个保存在硬盘里的模型文件,正安静地等待下一次被加载、被改进、被赋予新的任务。
比如,认识K线图的形态。比如,预测明天的涨跌。比如,从混乱的市场噪声中,找出那些微弱的、可盈利的信号模式。
林晨闭上眼,脑子里不再是焦虑和迷茫,而是一层层堆叠的神经网络架构图,是损失函数需要优化的曲面,是等待被挖掘的金融数据。他睡着了,嘴角带着半年来第一次真正放松的弧度。