那条下降的loss曲线
那条下降的loss曲线
前天晚上,快十二点了,我还坐在卧室的电脑前。
屏幕上,是一个翻译机模型的训练结果。我盯着那个loss值的表格,看着数字一行一行往下走,从3.2、2.8、2.1……一直降到1.3。
然后是翻译结果。我输入了一句英文,它给出了中文翻译。不算完美,但大部分都对了。
我靠在椅背上,长出了一口气。
终于跑通了。
最初的陌生
但要说起来,这个"终于"来得不容易。
几个月前,我刚开始学机器学习的时候,完全是另一个状态。
打开教材,看到的都是一堆陌生的词:learning rate、delta、training loss、gradient descent……每一个词单独看都认识,但组合在一起就完全看不懂了。
就像在看一本外星人写的书。
我记得第一次看到"反向传播算法"的公式时,盯着那堆符号看了十分钟,脑子里一片空白。完全不知道它在说什么,也不知道这些东西有什么用。
那时候想,我真的能学会这个吗?
两天的折腾
翻译机这个项目,是后半段的任务。
课程要求自己动手训练一个模型,输入英文,输出中文翻译。听起来很简单,但真正开始做的时候才发现,完全不是那么回事。
第一次跑代码,直接报错。改了半天,好不容易跑起来了,但loss值居高不下——4.5、4.3、4.2,就是降不下去。翻译出来的结果完全是乱码。
我开始调参数。把learning rate调大一点,loss反而更高了。调小一点,训练速度又慢得让人抓狂。
就这样折腾了两天。改参数、重新跑、看结果、再改。有时候改完一个参数,要等半个小时才能看到结果。等的时候就坐在那儿发呆,想着这次会不会有用。
大部分时候,没用。
那个"想通"的时刻
但在反复调参的过程中,有些东西开始变得不一样了。
Learning rate,以前对我来说就是书上的一个公式。但当我把它调大,看到loss疯狂跳动;调小,看到loss像蜗牛一样慢慢下降——突然就明白了,这不就是"步子"吗?步子太大容易摔跤,步子太小走不动。
Delta也是。它不再是一个抽象的符号,而是变成了一种可以感知到的"调整幅度"。
那天晚上,我又改了一次参数。这次没有瞎改,而是根据前几次的"手感",把learning rate调到了一个中间值,然后重新跑。
等结果的时候,心里隐约有种感觉:这次可能行。
然后就是开头那个场景。
Loss开始下降,3.2、2.8、2.1……一路降到1.3。翻译结果出来了,虽然不完美,但大部分都对了。
我看着屏幕,突然有种很奇妙的感觉。
不是那种"终于做完了"的轻松,而是一种更深的东西——就像突然打通了一个关卡,原本看不懂的东西,现在能看懂了。
这些参数不再是冰冷的数字,它们变成了一种可以调控的"手感"。我知道它们在做什么,也知道它们为什么这样做。
世界变得透明了一点
更奇妙的是,这种感觉不只局限在机器学习上。
这几天用翻译软件的时候,我会突然想:它的training loss降到多少了?用的是什么优化器?
看到推荐系统给我推内容,也会想:这背后的模型是怎么训练出来的?
以前觉得这些东西很"神奇",现在不是了。我能隐约看到背后的逻辑,能看到那些参数在运转,能看到每个参与者的智慧在闪闪发光。
世界好像突然变得透明了一点。
为什么要学陌生的东西
我突然明白,为什么一定要去学一些完全陌生的东西。
不是为了在简历上多一行,也不是为了证明自己有多聪明。
而是因为,当你真的度过了那个最初的艰难时刻,当你从"完全看不懂"变成"开始有感觉",你对世界的认识就会不一样。
就像原本你只能看到表面,现在能看到一点点内部运作的逻辑。原本觉得遥不可及的东西,现在知道它也是人一点点调出来的。
人一定要做一些能够不断拓宽自己的事情。因为每拓宽一次,你就多了一个看世界的角度。
写在最后
这个月,除了机器学习,公众号也写了好几篇。有意思的是,写文章的时候,我发现自己也在用类似的思路——不断调整、观察反馈、找到那个"手感"。
很多事情,本质上都是一样的。
学会一个新领域,不是终点。它只是给了你一把新的钥匙,让你能打开更多的门。
而那些门后面,是更大的世界。