如何系统化地迭代自己

前几天我刷到 Andrej Karpathy 的一条推文,讲”如何成为某个领域的专家”,有三条:第一,先找一个具体项目去做,过程中遇到不懂的再查,用”输出驱动”的方式学习;第二,不要”自下而上”,别像学生时代那样先把基础理论学完才动手;第三,只跟过去的自己比,不跟别人比。

这让我想到费曼的一句话:如果你不能把一个东西讲给完全不懂的人听明白,说明你自己也没真懂。

两人说的是同一件事:用输出来检验输入。 你以为自己懂了,但只有真的动手或开口,才知道到底懂没懂。这篇文章想讲清楚:这种方式为什么有效、为什么难做、以及怎么坚持下去。

与深度学习的相似之处

训练一个神经网络,是四个步骤的循环:

  1. Forward(前向传播): 网络根据当前参数产生一个输出。
  2. 计算 Loss(损失): 把输出和正确答案对比,算出差距。
  3. Backward(反向传播): 根据差距,反推每个参数该往哪个方向调。
  4. 梯度下降: 按这个方向,把参数调整一点点。

然后回到第一步,重复成千上万次,输出就越来越准。

人的学习几乎一样:“先做项目”就是 Forward,你做出来的东西和理想结果的差距就是 Loss,你复盘”哪里没做好、下次怎么改”就是 Backward 和梯度下降。Karpathy 说”投入足够多次数就会成为专家”,本质上是在说:这是个迭代算法,没有一步到位的解,威力全部来自小步、大量、持续的重复。

人的局限性

人和神经网络最大的不同是:网络面对很大的 Loss 没有任何感觉,但人会痛。

而且这种痛绕不开。道理很简单:想进步,就必须在自己还没掌握的领域里先输出,过程中必然频繁犯错、不断撞见自己的无知。反过来,已经完全掌握的东西,再练也不会有新进步。真正的成长一定发生在能力的边缘,而边缘按定义就是不舒服的。

所以这种方式真正的难点不是智力,而是如何承受这个过程中的不适感。

为什么人会痛、网络不会?因为人容易把”我做得怎么样”和”我这个人怎么样”混在一起。一旦自我价值建立在”我很能干”上,每个错误就都成了对你这个人的否定,于是你会本能逃避一切可能暴露不足的场合,也就是逃避一切成长。

要面对这种痛,关键是把两件事拆开:可以毫不留情地批判自己的”行为”,但不要伤到自己的”价值”。

用神经网络理解:梯度下降调整的是参数,对应你的行为、技能、方法,本来就该被一次次修正;而架构是更底层、不该被乱动的东西。你应该把自我价值放在架构那一层,而不是参数那一层。这样错误改的只是行为,不会动摇”你是谁”。如果反过来,让每次 Loss 都去冲击架构本身——相当于每犯一次错就把整个网络推翻重建——训练根本不会收敛,只会剧烈震荡然后崩掉。这就是”一犯错就全盘否定自己”的状态。稳定的训练,前提是 Loss 只更新参数,不炸架构。

两个技巧

技巧一:把错误序列化地写下来。

每次遇到错误、无知或想改进的地方,就用日志或笔记记下来。这件事有个极好的榜样:罗马皇帝马可·奥勒留写的《沉思录》,本意就是”写给自己的”私人手记,即使贵为皇帝,他每天也记录和复盘自己的不足。

写下来为什么有用?痛苦待在脑子里时是一团绕圈的东西,很多念头同时翻涌、落不了地,这正是它最折磨人的状态。而写字这个动作强迫你把它排成一条线——一次只能写一句,一句只能说清一个意思。这种”序列化”逼大脑进入理性状态,把事情冷静想清楚,而不是任由情绪在脑子里乱窜、损耗信心。

技巧二:写完就立刻开始下一轮。

日志写完,就意味着这一轮的 Backward 和梯度下降已经完成。下一步不要在痛苦里停留,直接进入下一轮 Forward——投入新的行动。这也有依据:训练时你不会拿同一批数据反复 Backward 十遍,那会让网络过拟合到这一个样本上。人也一样,对同一个错误反复咀嚼,只会陷进这次失败的细节,学不到能用在下次的教训。“再多想只会有痛苦”,本质上就是”再多 Backward 只会过拟合”。

这两个技巧配套,而且有先后:你之所以敢”忘”,正是因为已经”写”下来了。 事情既然清楚归档,脑子里那个”得一直记着否则吃亏”的警报就能解除,以后要回想翻记录就行。写日志给上一轮收尾,立刻行动给下一轮起步。