1. 为什么想写这样一份不完美的AI学习笔记
"AI入门"这四个字,我盯着看了很久才决定动笔。不是因为它多深奥,而是因为我发现自己学了很多轮,依然不敢说自己"入门"了。从最初觉得机器学习很玄,到终于理解神经网络只是一套参数优化办法,再到如今每天都在跟生成式AI打交道,整个过程里,我走弯路的时间远比顺利推进的时间多。所以这篇文章不是一份标准的教科书式教程,而更像是我中途停下来整理的一份真实学习笔记——里面有当时的理解、后来发现不对又重新修正的理解,也有大量踩坑记录。
我会按照自己的学习路线来写:从机器学习的基本概念讲起,到神经网络的运作逻辑,再过渡到生成式AI是怎么一回事,最后给出一套能直接跑通的小项目实操路径。每一节都会穿插我当时是怎么理解错的、后来又是怎么纠正过来的。如果你属于下面三类人,它应该对你有用:完全零基础、被各种AI名词砸晕的人;有一点编程背景、但概念模糊不清的程序员;以及已经用过生成式AI工具、但不知道背后运作原理的好奇者。至于"不完美",是因为我深知自己的理解还很浅,但正因为不完美,这份笔记才比精致教程更贴近普通人的真实学习轨迹。
1.1 这份笔记适合谁
先说清楚一件事:这不是给要发论文的人看的,也不是给全职算法工程师看的。这份笔记的目标读者,是那些想搞明白AI到底是怎么工作、但又不打算一头扎进数学公式里的人。我默认你会一点Python,知道变量和函数是什么,但完全不要求你懂矩阵求导,也不要求你有深度学习框架的使用经验。
如果你已经能熟练训练模型,那这篇文章的前半部分对你可能太基础,但后半部分关于生成式AI的直觉解释和实操记录,或许还能给你提供一些新的角度。我在实际过程中发现,很多搞过传统机器学习的人,转过来理解生成式AI的时候也有一点卡壳,因为两者解决问题的思路不一样了。
1.2 我理解的"入门"是什么
我给自己确立的入门标准是:能用自己的话解释每个核心概念背后的直觉,而不是只会背名词解释;能独立跑通一个完整的小项目,而不是只会复制教程代码;遇到报错时知道大概是什么环节出了问题,而不是完全不区分解不了和不会查。
按这个标准回头看,我花了很长时间才勉强算是入了门。因为我一开始走了很多弯路,比如上来就啃几十页的数学推导,结果被劝退;比如照着别人的项目教程敲了一遍代码,跑出来结果很好,但换个数据集就完全不会动了。后来我总结出一个规律:学习AI最有效的路径不是从数学原理出发,而是从"一个能跑起来的简单程序"出发,先建立直观感受,再倒回去补原理。这篇文章的编排也遵循了这个思路。
2. 机器学习:从"教规则"到"找规律"
我第一次接触机器学习这个概念时,把它理解成了一门"规则库科学":你告诉电脑一堆"如果……那么……"的规则,然后电脑乖乖按规则执行。后来我才明白,机器学习做的恰恰相反——它不依赖人来写规则,而是从大量数据里自己找规律。
举个最简单的例子。你想预测一个城市的房租价格,能拿到的数据是几千条历史记录,每条记录包含面积、卧室数量、所在楼层、建成年代,以及最终成交价。传统编程的做法是:你根据经验写一个公式,比如"每平米300元、每多一间卧室加500元",然后用这个公式去算。但这个公式准确率大概率不行,因为影响房价的因素远比你能想到的规则复杂。
机器学习的做法完全不同。它把这几千条记录分成两部分:一部分用来"训练"模型,一部分用来"考试"。训练时,模型内部有一堆待调整的数字参数,它不断尝试不同的参数组合,让预测出来的房价尽可能接近真实成交价。整个过程没有人告诉它"面积重要"还是"楼层重要",它自己从数据中学到了这些权重。
2.1 监督学习的三要素
所有监督学习问题都能抽象成三个要素:数据、模型、目标函数。
数据很好理解,就是一堆输入和正确输出的配对。在房价预测里,输入是面积、卧室数这些特征,输出是成交价。模型是一个尚未确定的函数,它接收输入后给出预测,一开始预测得很烂。目标函数告诉模型"你烂到什么程度",通常叫损失函数——预测价和真实价差距越大,损失值越大。训练过程本质上就是不断调整模型参数,让损失值越来越小。
我当时一直没想明白的问题是:模型凭什么知道自己该往哪个方向调整?后来我用一个更具体的公式想通了。以最简单的一元线性回归为例,假设预测函数是 y = wx + b,w和b就是模型要学的那两个数字。损失函数取平均平方误差,那么给定一组数据后,这个误差就是w和b的二次函数。梯度下降做的事情,就是站在当前w和b的位置,看一下误差曲面哪个方向是下坡,然后沿下坡跨一步,重复几千次,直到落进谷底。
听起来简单,但真实世界的模型参数动辄几亿个,误差曲面也不是平滑的碗状,而是凹凸不平的山地。这导致梯度下降经常会掉进某个局部坑里出不来,或者迈步太大直接跳过好区域。后面我会讲到,这些在实际操作中都会以报错、不收敛、效果差等形式出现,都需要学习怎么对付。
2.2 无监督、强化学习及其各自擅长的场景
监督学习是大多数入门者接触的第一类机器学习,但它不是全部。我学机器学习时最大的认知突破之一,是意识到不同任务需要不同的"学习范式"。
无监督学习的特点是数据没有正确答案。比如你手里有某电商平台的用户购买记录,你想知道用户大致分成几类。没有标签的情况下,模型只能根据数据本身的结构做聚类:买母婴用品多的是一类,买电子产品多的是另一类。聚类算法做的事情就是自动把数据分组,至于每个组叫什么名字,那是人后来根据自己的业务去定义的。推荐系统里经常用到的协同过滤,本质上也是无监督思路——通过大量用户的购买行为找到物品之间的相似关系。
强化学习和前两者不太一样。它没有现成的数据集,而是让一个Agent(智能体)在环境里反复试错,通过奖励信号学会策略。我曾经拿"教一只狗坐下"来做类比:狗做了正确动作就给它零食,做了错误动作就不给,慢慢它就懂了。AlphaGo下围棋就是强化学习的杰作——没有任何人告诉它某一步棋有多好,它就靠赢了加分、输了减分这种机制,自己下出了超越人类经验的棋路。
但我在入门阶段最需要记住的,还是监督学习。原因很简单:整个深度学习时代,尤其是生成式AI这条技术路线的基础模型训练,本质上大都可以归结为"从海量配对数据中学会映射关系"。哪怕是最新的大语言模型,其预训练阶段的核心目标,也是预测文本序列中的下一个词——这可以看成一种特殊的监督学习。
2.3 把一个错误直觉修正为正确直觉
这里我想专门记录一下自己最典型的认知偏差,因为它可能代表了很多刚接触机器学习的人的状态。
我一开始天真地以为,模型训练好之后,就能像人一样"理解"数据,能举一反三。后来我拿一段代码做了一个小实验:训练一个房价预测模型,然后把面积这一列的数字全都乘以10,让我惊讶的是,模型预测结果的准确率基本不变。因为线性模型能自动适应特征缩放,只要权重跟着调整就行。真正破坏模型效果的,是训练集和测试集分布不一致。比如训练数据里全是市区小户型,测试集里却全是郊区大户型,那么模型的泛化能力会立刻被打回原形。
这个实验让我明白了一件事:所谓"机器学习",学到的是一个函数映射,而不是人类式的理解。它能把训练分布内的问题解决得很好,一旦遇到分布之外的情况,表现就会非常不稳定。现在很多关于AI"翻车"的新闻,很大一部分原因也是分布偏移——模型没见过那种输入,它只能靠瞎猜。
3. 神经网络:一堆参数,而不是魔法
我学机器学习的时候,一直绕着神经网络走,总觉得那是另一门高深的学问。后来真去看了才发现,神经网络并不是什么神秘的东西,它就是由大量"加权求和外加一个激活函数"的小零件堆叠起来的复合函数。唯一的区别是:层级多、参数多、数据量要求高,所以叫"深度学习"。
3.1 神经元、全连接层和参数量的直觉
一个神经元干的事情,可以用一句话概括:把若干个输入数字分别乘上对应的权重,加在一起,再加上一个偏置,然后过一层激活函数,输出一个新数字。一堆神经元并列组合起来,就叫一层;一层接着一层,就叫多层网络。
为什么需要激活函数?因为如果没有它,多层线性叠加的结果还是线性函数,那样不管叠多少层,表达能力都跟一层一样。激活函数给网络引入了非线性,让它可以拟合复杂的曲线和决策边界。最常用的ReLU函数就一句话:输入大于0就输出原值,小于0就输出0。简单到让人怀疑这是不是搞错了——但事实就是,这样的非线性叠加足够多了,理论上可以逼近任何函数,这叫万能逼近定理。
我第一次真正搞懂神经网络,是通过一个手写数字识别问题。输入是一张28×28像素的灰度图,展开就是784个数字。我搭了一个只有一层的隐藏网络:输入层784个节点,隐藏层128个节点,输出层10个节点(代表数字0到9)。参数数量是多少?输入层到隐藏层有784×128个权重,加上128个偏置;隐藏层到输出层有128×10个权重,加上10个偏置。加起来大约是10万个参数。这在小模型里算很少的了,但就是这种规模的小网络,处理简单的数字识别已经绰绰有余。
我当时在笔记里写了一句话:"所谓神经网络,就是给10万个参数调一个最合适的值。"虽然不够严谨,但方向是对的。后续那些动辄千亿参数的大模型,本质上也还是在做同样的事,只是参数规模和数据规模把模型推到了我们意想不到的能力边界。
3.2 训练循环:前向传播、反向传播和损失函数
训练神经网络的循环过程可以用四步概括:前向传播、计算损失、反向传播、更新参数。开始时权重是随机初始化的,网络给输入一个随机输出,和真实标签一对比,误差很大。然后反向传播用微积分里的链式法则,把误差对每一层的每一个参数求偏导,也就是算出"每个参数往哪个方向调能让误差减小"。最后优化器拿着这些梯度,把参数更新一格。重复这个循环几千几万次。
给我最大震撼的是反向传播。你想一下,面对几亿个参数,每个参数到底对误差有多大贡献,这个问题看起来几乎无解。但链式法则告诉我们,损失函数对某个参数的偏导,可以通过前一层和后一层的偏导乘积一路传回来,计算量甚至只是正向传播的两倍左右。也就是说,现代深度学习得以训练,恰恰是靠大学高等数学里那个被很多人觉得"没什么用"的链式法则。
我在理解这个过程时,还用射箭做了一个类比:前向传播是射出一支箭,看它离靶心多远,损失函数就是这套尺子;反向传播是倒推"刚才手臂抬高了0.5度、用力大了1成,各自对偏离靶心贡献了多少";梯度下降就是根据这个倒推结果,下一次稍微调整姿势。射箭次数多了,箭自然越来越准。
3.3 我第一次训练小模型的踩坑实录
这部分我想记录三个印象最深的错误。
第一个坑是没有做数据归一化。我当时把像素值(原本0到255的整数)直接丢进网络,发现训练损失下降慢得像蜗牛。后来才意识到,特征数值范围差异太大会让梯度下降在参数空间里走弯路。把输入标准化到0到1附近之后,整个训练过程肉眼可见地变快了。这个操作背后的原因,跟损失函数曲面的"等高线"有关:特征尺度太不均衡,会导致曲面像个细长窄道,梯度下降在里面来回震荡。
第二个坑是选错了学习率。学习率是梯度下降每次更新参数的步长。我一开始把学习率设得太大,损失曲线像过山车一样震荡,有时还会直接变成NaN;设得太小,训练几百轮也看不出变化。后来才明白,学习率往往不是定死一个值就完事,而是先设一个比较大的初始值,再随着训练轮数衰减,或者使用带有自适应性质的优化器,让它自己调整每一步的实际步长。
第三个坑是我很长一段时间不知道怎么判断模型训练得好不好。我只看训练集上的损失曲线,看到损失降得很低就高兴,结果模型放到测试集上一塌糊涂——这就是典型的过拟合,模型把训练样本的细节背下来了,根本没有学到规律。后面我会专门讲这个坑。
4. 生成式AI:从"作出判断"到"生成内容"
如果说我学神经网络时还处于"理解旧事物"的阶段,那么生成式AI就是真正让我觉得"AI世界变天"的转折点。传统深度学习模型大多数是判别式的:给它一张图,它判断里面有没有猫;给它一句评论,它判断是正面还是负面。这类模型擅长的是分类和预测。而生成式模型做的是另一件完全不同的事:给它一堆训练数据,让它学会这些数据的分布,然后它自己就能创作出新的、看起来像训练数据的样本。
4.1 生成式模型到底"学"到了什么
我花了不少时间才真正理解"学习数据分布"是什么意思。假如你有100万张猫的图片,判别式模型的任务是:新来一张图,判断它是不是猫。它学到的是一个边界,能区分猫和非猫。生成式模型的任务是:学习猫图像的整体规律——猫有两只耳朵、有胡须、眼睛形状有特点、毛色分布有规律——然后从零开始生成一张新的猫图。
这个区别可以用一个不太严谨但很形象的说法来记:判别式模型学的是"P(类别|输入)",生成式模型学的是"P(输入)"。一个是在给定输入时判断输出,另一个是在学习输入本身长什么样。学好了"P(输入)"之后要做的事情是在里面采样,采出一个新样本,这个样本就是模型"创造"出来的。
生成式模型不是某一个模型的名字,而是一大类模型。从早期的生成对抗网络(GAN)、变分自编码器(VAE),到后来的扩散模型,都是不同的技术路线。我真正入坑是从大语言模型开始的,因为它的使用门槛最低,得到反馈最直接——你输入几个字,它给你补完一整段话,那种冲击感比看一堆图像生成示例还要强。
4.2 大语言模型的"写文章"机制
大语言模型(LLM)看起来无所不能,能写文章、写代码、总结摘要、回答复杂问题,但剥开来看,它最核心的训练目标其实朴素得惊人:给定前面的文本,预测下一个词。就像玩"填词接龙"游戏——给你半句话,让你猜下一个字是什么。
训练阶段,模型看到的是海量文本:书籍、网页、代码、论文,应有尽有。它挨个做这样的任务:前面是"今天天气真",模型预测下一个词是"好"还是"不错"还是"差",预测对了就减少一点损失,预测错了就调整参数。在这个极其简单的目标驱动下,模型被迫学习语言的语法、世界的常识、推理的逻辑,因为只有理解了这些,才能更好地预测下一个词。
要理解为什么这个机制会这么强大,关键在于"预测下一个词"这件事实际上要求模型具备非常丰富的上下文建模能力。比如"张三是李四的导师,张三指导李四完成了论文"这么一句话,要让模型准确预测"导师"这个词,它必须理解人物关系。当训练数据达到千亿词元、模型参数量达到千亿级别时,原本为了填词而学到的各种能力涌现出来,就表现为能回答问题、能翻译、能写代码等"智能行为"。
我在笔记里写道:"大语言模型的本质,是一个被'预测下一个词'逼出来的世界模型。"这句话不严谨,但很能帮我理解它为什么能说人话。
4.3 自注意力机制的生活化解释
大语言模型大多基于Transformer架构,这个架构里最核心的组件是自注意力机制。我第一次看注意力公式时完全看不懂,后来用"读书划重点"来类比才算通了。
想象你在读一句话:"小明因为考试没考好,所以心情很低落。"你在理解"低落"这个词的时候,脑子里其实会不自觉地联系这句话里的其他词:"小明"、"考试"、"没考好",把它们的语义关系串起来。自注意力做的事情就是这个——在处理每一个词时,模型会计算它跟句子中每一个词的相关程度,然后加权整合起来。相关程度高的词贡献大,相关程度低的词贡献小。
这个"相关程度"是怎么算的?本质上是一个点积相似度——每个词都生成两个向量,一个叫查询(Query),一个叫键(Key),查询跟键的相似度决定了注意力权重。这个机制让模型在处理某个词时,能看到整个句子的全局信息,而不是只盯着它旁边那几个词。也正因为这样,Transformer能同时捕捉到相隔很远的词之间的关系,这是它比传统的循环神经网络(RNN)更强大的理由之一。
我也顺便明白了为什么生成式AI训练那么烧钱。自注意力机制的计算量跟序列长度的平方成正比,序列越长,GPU计算量增长得越快。这也是为什么当前大模型都强调"长上下文"是一个稀缺能力——上下文变长,代价是指数级的算力开销。
5. 实操记录:跑通一个生成式AI小项目的全过程
前面讲了大量概念,但真正让我觉得自己入门了的节点,是我亲手跑通了第一个生成式AI小项目。这一步的意义不在于项目多高级,而在于我把所有概念串成了一条完整的链路:环境准备、模型下载、调用生成、参数调整、结果分析。
5.1 环境准备阶段容易踩的坑
我用的是Python加PyTorch这条路线。先装好Python,再用pip或者conda安装PyTorch和Transformers库。整个过程只要十几分钟,但这中间有好几个大坑等着你。
第一个坑是GPU和CPU版本的混用问题。PyTorch是区分CUDA(GPU加速)版本和CPU版本的,如果你电脑有NVIDIA显卡,却没安装对应版本的PyTorch,那么代码里虽然写着device = "cuda",运行起来却会报错。装之前一定要先查一查你的显卡驱动支持的CUDA版本,然后选对应版本的安装命令。我一开始图方便装了CPU版,导致一个训练任务跑了两天才发现GPU根本没被用上。
第二个坑是硬盘空间。开源的大语言模型动辄好几GB,最大的是几十GB甚至上百GB。第一次下载模型时我只盯着"下载进度99%"看,结果发现解压还需要一倍的临时空间,磁盘直接满了。最好先确认目标盘剩余空间至少有模型大小的两倍,再开始下载。
第三个坑是别急着从零训练模型。新手最常犯的错误是想用别人的公开数据集自己从头训一个模型出来,结果发现显存直接爆掉,算力也不够。实际上,绝大多数入门场景用预训练模型就够了——你只是做应用,不是做研究。把宝贵的算力花在微调已有的开源模型上,远比从零训练要实际得多。
5.2 预训练模型做文本Demo的完整流程
我用一个文本生成任务来做演示。目标是:让模型根据我输入的开头,自动续写后面的内容。
实现方式极其简单。用Transformers库的pipeline封装的代码如下:
from transformers import pipeline generator = pipeline( "text-generation", model="一个开源的文本生成模型", device=0 ) prompt = "我今天收到了一份很特别的礼物" result = generator( prompt, max_new_tokens=50, temperature=0.7, top_p=0.9 ) print(result[0]["generated_text"])跑起来之后,模型会顺着"我今天收到了一份很特别的礼物"往下写,生成几十个字。第一次跑通这个Demo的时候,我盯着输出的那段话看了很久,因为它写得居然还通顺——那一刻我才真的体会到了"生成式AI"这四个字的重量。
如果你想做的是问答而不是续写,那就换一个专门针对对话优化的模型,并且按照该模型官方推荐的对话模板来组织输入。很多人直接拿生成模型问问题,得到的答案乱七八糟,其实大半原因是没用对输入格式,而不是模型本身不行。
5.3 生成参数:temperature、top_p和max_new_tokens
跑通Demo之后,我开始调生成参数,发现同样的提示词,不同参数得到的输出天差地别。这里把三个最常用参数讲透。
max_new_tokens控制生成的长度,单位是"词元"而不是"字"。一个词元大约相当于英文里的一个常见单词片段,在中文里大约是一个字到两个字。我当时想让它生成100字的短文,结果设成50,发现输出远比我预期的短,后来才明白词元和字的换算关系。
temperature控制随机性,取值范围通常在0到2之间。值越低,模型越倾向于选概率最大的词,输出更稳定、更保守;值越高,模型越倾向于选概率小的词,输出更丰富、更有创造性,但也更容易胡言乱语。调低到0.1左右适合事实性回答,调高到0.9以上适合头脑风暴、写诗这类创意任务。
top_p控制候选词的范围。它跟temperature不同,是对每一步可选的词做一个"概率过滤":把所有候选词按概率从高到低排序,取概率累计到某个阈值(比如0.9)的词作为候选池,然后只在这个池子里采样。这个机制避免了模型在大量低概率的烂词里乱选。实际经验是,temperature和top_p通常会配合使用,我一般习惯把top_p固定在0.9左右,然后单独调temperature。
6. 学习AI路上的常见问题与避坑地图
如果让我只推荐一个章节给同一阶段的初学者,我会推荐这一章。因为在我自己的学习过程里,真正吃掉最多时间的不是概念理解,而是各种莫名其妙的问题。我把这些问题整理成了一张速查表,每一个都是我亲身蹚过的坑。
6.1 五个让我头疼过的问题处理记录
| 问题 | 现象 | 解决思路 |
|---|---|---|
| 过拟合 | 训练集表现极好,测试集一塌糊涂 | 增加数据量、加正则化、做数据增强、早停 |
| 数据泄漏 | 验证集指标虚高,上线后效果暴跌 | 严格按时间或按ID切分数据,特征里不能混入标签信息 |
| 显存不足(OOM) | 程序直接报CUDA out of memory | 调小batch size、降低输入分辨率、用混合精度、换小模型 |
| 结果不稳定 | 同一个模型跑两遍,效果差异很大 | 设置随机种子,固定数据顺序,保证评测环境一致 |
| 损失不下降 | 训练好几轮,损失曲线一条直线 | 调大学习率、检查数据归一化、检查梯度是否爆炸或消失 |
其中数据泄漏这件事,我特别想多说一句。我做过一个预测任务,为了图省事,把整份数据随机切分训练集和测试集。结果验证阶段指标特别好看,沾沾自喜了好几天。后来业务上线,才发现真实场景里模型的预测能力差得离谱。原因是我犯了一个隐蔽的错误:同一条记录的多行副本同时出现在了训练集和测试集里,模型等于提前看到了一部分"答案"。这个教训让我之后每次处理数据,都会先问一句:这个切分方式会不会让信息从未来泄漏到过去?
6.2 生成式AI特有的两个坑:幻觉与评估
幻觉是生成式AI最大的短板。模型生成的文本读起来自信满满、逻辑通顺,但内容可能是完全瞎编的。比如问它一个冷门历史事件,它能一本正经地给出一个不存在的日期和人物。这背后的原因跟大语言模型的工作机制有关:它本质上是在做词语接龙,目标是生成通顺的文本,而不是检索真实的事实。
应对幻觉有几个实用的手段。一个是给模型提供参考资料,让模型"基于以下资料回答问题,不要编造资料之外的内容";一个是降低temperature,让输出更保守;还有一个是引入检索增强生成(RAG),把回答建立在外部知识库的真实内容上。这些手段不能完全消除幻觉,但能显著降低发生率。
评估生成内容的好坏也是一个坑,因为它没有一个唯一的正确答案。传统的机器翻译有BLEU这类指标,但这类自动指标跟人的观感差距很大——一段机器翻译的句子可能得分高,但读起来生硬;一段得分低的,人觉得还挺自然。我现在做评估都是人工加工具结合:先让几个不同的人分别看一遍输出,从流畅度、忠实度、相关性几个维度打分,再配合一些自动化检测工具做粗筛。这个过程费时间,但是值得。
6.3 几条让我受益的学习习惯
最后分享几条我总结下来的习惯,不夸张地说,它们帮我节省了至少一半的学习时间。
第一,官方文档优先于二手教程。遇到报错,先查文档和GitHub上的issue,不要急着去搜索引擎找别人的答案。很多教程写的时候依赖的版本都比较旧,照着做反而容易踩坑。我自己因为照着旧教程配置环境,浪费过一整个下午。
第二,不要把看视频当学习。看再多别人的讲解,都不如自己动手跑一个代码片段理解得深。我自己的经验是:看课程视频的时候觉得什么都懂了,关了视频自己写,连一个数据加载的代码都写不出来。动手写一遍,哪怕报错十次,也比看十遍教程管用。
第三,保持"可复现"的意识。每次跑实验,都记下用的什么模型、什么参数、什么随机种子、什么版本库。这个习惯一开始不觉得有什么用,等到了需要对比两个模型效果、需要回头排查结果的时候,你才会发现记录救了你一命。我因为没记录随机种子,复现不出之前的好结果,又花了两天时间排查,最后发现罪魁祸首就是没固定随机种子。
第四,容忍自己"不完美"。我标题里说的"不完美",这个心态不仅仅是个感性的说法,也是一个理性的学习策略。你不需要从头到尾读懂每篇论文才敢动手实践。许多术语你会在实操中碰到五六次之后才真正理解,这很正常。先让概念有一个模糊的直觉,做项目时带着问题去定位,往往比死磕理论更快。
7. 最后聊聊我自己的体会
7.1 回看我过去的学习笔记
回头翻看自己半年前的学习笔记,很多地方写得很幼稚,甚至有一些理解和现在的认识完全相反。但我不打算把那些错误理解从笔记里删掉,因为它们记录了我真实的成长轨迹。学习AI这件事最神奇的地方在于:知识体系本身不是一个线性阶梯,而是一张相互关联的网。你从网上任何一个节点出发,沿着感兴趣的线走下去,总会触碰到其他节点。
如果你现在也在学习的路上,我的建议是:不要等自己"足够厉害"了才开始动手做项目,要允许自己带着模糊的理解先跑起来。那些跑不通的报错,那些看起来无解的难题,恰恰就是最好的老师。愿你的每一步走得比我稳,也比我快。