1. 先从人工智能这个话题说起最近总有人在后台问我我想学人工智能应该先看什么Keras是什么学它之前要不要先把AI和ML弄明白这类问题见得多了我慢慢意识到一个现象大家不是不想学而是被一堆名词绕晕了AI、ML、DL、神经网络、TensorFlow、PyTorch、Keras每个词都听过但真要说清它们是什么关系、从哪开始学很多人一头雾水。这篇文章就是专门来解决这个问题的。我打算把Keras教程之前最该掌握的地基给各位梳理清楚也就是人工智能AI和机器学习ML到底是什么、它们和深度学习DL是怎么扯上关系的、为什么入门选Keras而不是其他工具以及学习路上最容易踩的坑。别看题目里带着浅谈两个字里面的东西却都是实战层面的适合零基础的朋友建立认知框架也适合那些会一点Python但没系统学过机器学习的半新手。读完这篇你对后续要碰到的数据、模型、训练、评估这些词心里就有底了。我自己刚入行那会儿也走过不少弯路。那时候看到一篇讲机器学习的文章里面一会儿冒出监督学习无监督学习一会儿又说什么损失函数梯度下降每个字都认识连起来就不知道在讲什么。后来做了一些实际项目再回头看才发现这些东西本身并不难难的是没有一个清晰的导览图。这篇前置篇说白了就是我当年想要而没有的那张导览图。2. 先别急着写代码AI、ML、DL到底是什么关系2.1 人工智能人类想造一个能思考的机器人工智能这个概念的诞生比大多数人想象的早得多。上世纪中叶某位图灵奖级别的前辈提出了一个著名的问题机器能思考吗并给出了一个判断标准后来演变成了所谓的图灵测试。那个年代的科学界对AI的期待非常高甚至有人预测不出十年机器就能做人类所有的工作后来的现实当然打了脸这就是后话的两次AI寒冬。抛开教科书定义不谈我对AI的理解非常简单人工智能是人类用计算机去模拟、延伸和扩展自己智能行为的总目标。注意我说的是总目标它不是一个具体的技术而是一个方向。就像人类想飞上天最终有了飞机但飞上天这个目标本身演化出了一大堆学科和技术分支。AI也一样它的终极目标是让机器能感知、推理、学习、决策像一个真正智能体那样和世界互动。这个终极目标有多宏大呢举个例子你让一个三岁小孩认出照片里的猫他一下子就指出来了但让计算机做这件事科学家花了整整好几十年才做到接近人类的水平。AI要客服的不仅是算法问题还有视觉、语言、推理、运动控制等一大堆子问题。理解了AI是总目标我们再看它下面的子领域就不会被绕晕了。2.2 机器学习不写规则让机器自己找规律机器学习Machine LearningML是AI的一个核心子领域也是今天我聊的重点。它最大的思想转变在于传统编程是人写规则、机器执行机器学习则是人写学习方法让机器从数据里自己找规则。我打个比方。想要让程序识别一封邮件是不是垃圾邮件传统方式是程序员总结垃圾邮件的特征比如标题里带恭喜中奖、正文里有陌生链接、发件人地址奇怪然后把这几条规则写死。问题是语言的表达千变万化骗子换个说法就能绕过去你根本没办法把规则写全。机器学习换了个思路给它十万封已经标记好的邮件里面哪些是垃圾邮件、哪些是正常邮件然后让它自己去看这些邮件里有哪些规律、怎么判断更靠谱。最终训练出来的模型本质上就是一堆数字组成的判断逻辑我们甚至很难用几行规则去复述它到底学会了什么但这不妨碍它在新邮件上做出准确的判断。这是机器学习最大的突破也是它能在今天飞速发展的根基数据足够多模型足够强AI自己就能学到人类靠直觉才能总结出的规律。2.3 深度学习机器学习的深度学习在哪聊完机器学习就该聊聊深度学习Deep LearningDL了。深度学习是机器学习的一个分支但它特殊在使用的模型结构上——人工神经网络而且是层数非常深的那种。神经网络这个概念的灵感最初来自生物学人脑有几百亿个神经元每个神经元接收信号、处理后传递给下一个大量神经元连成网络就产生了智能。神经网络的计算模型模仿了这种结构一个节点接收多个输入加权求和后再经过一个非线性的激活函数输出给下一层。单层神经网络能力有限但当你把几十层、上百层这样的节点堆叠起来它能表达的函数空间就大得惊人这就是深度学习里深度两个字的来源。过去十年深度学习之所以爆发有两个必要条件一是GPU并行计算让训练深度网络的时间从几个月缩到了几天几小时二是互联网积累了海量数据可供训练。说白了深度学习模型不是新概念神经网络在上世纪八十年代就有了但它一直被诟病训练不动、效果不好。是算力和数据这两股风把它吹上了天。如今图像识别、语音交互、自然语言处理这些领域绝大部分顶尖成果都是深度学习做出来的。2.4 把AI、ML、DL的关系装进一个同心圆这三者的关系我用一句话概括**AI是总目标ML是达成目标的路径DL是实现ML的一种强力武器。**外层是AI往里是ML最里面是DL。AI保证了方向ML提供了方法论DL则用深度网络把效果做到了实用化。实践中经常遇到朋友问我学的是机器学习那算是搞AI的吗当然算。还有人问学了深度学习是不是就不用学传统机器学习了我向来不建议这么想。深度神经网络虽然强大但它需要的数据量、算力都很大在数据量只有几百条的场合传统机器学习方法反而又稳又快。这就像工具箱里既要有电钻也要有螺丝刀你不能因为有电钻就扔掉所有手动工具。3. 机器学习到底在做什么剥开核心概念3.1 数据、特征、标签机器学习的原料三件套要理解机器学习绕不开三个最基本的概念数据、特征、标签。所谓数据就是你手头已有的原始材料。比如你想做一个房价预测系统数据就是过去几年某座城市里每一套成交房子的面积、地段、楼层、装修程度、成交价格。特征则是从数据里提炼出来的、能够用来做判断的输入变量。前一句话里的面积、地段、楼层就是特征。标签是你想预测的东西也就是那套房子的成交价格。我私下管这三样叫原料三件套。缺了任何一样机器学习都没法玩。你得有足够的原料数据得有合适的特征供模型参考还得有明确的标签告诉模型正确答案长什么样。很多新手在实战项目里碰壁不是因为模型不够先进而是连前两步都没做踏实数据收集得太少、特征处理得太粗糙后面模型再花哨也是空中楼阁。关于特征多说一句。原始数据经常不能直接用。比如地段这个字段放在数据库里可能是市中心郊区这样的字符串我们得把它转换成计算机能理解的形式要么用数字编码要么用独热编码One-Hot Encoding。这类把原始数据变成模型能用的输入的过程就是特征工程。特征工程做得好的老手用简单的模型也能取得不错的效果这正好印证了一句话机器学习项目里数据与特征的质量比模型本身更重要。3.2 有监督、无监督、强化学习三种学习范式机器学习按照训练数据给不给标签可以分为三大类有监督学习、无监督学习、强化学习。新手上来最容易搞混的就是前两种。有监督学习就是我们上面说的那种训练数据里既包含特征也包含标签模型通过反复比对自己的预测结果与真实标签之间的差异逐步调整内部参数直到预测准确率足够高。常见的任务又分两种预测连续数值的叫回归比如房价预测、温度预测预测离散类别的叫分类比如判断邮件是不是垃圾邮件、图片里是猫是狗。无监督学习就完全相反训练数据里只有特征没有任何标签。它要解决的问题是在没有正确答案的情况下如何帮我们从海量数据中发现潜在的结构。最常见的是聚类比如一家电商公司有几十万条用户购买记录没有事先分组但希望通过算法自动把用户划分成几类人群方便市场部分别制定策略。无监督学习在现实中扮演着探路者的角色常常在有监督模型之前做探索性分析。强化学习则完全是另一种玩法。它不依赖事先准备好的数据集而是让智能体在一个环境里不断试错通过环境的奖励或惩罚信号学习策略。这几年备受关注的棋类AI用的就是强化学习思路让AI自己和自己下棋百万局以后自然棋力大增。3.3 训练、验证、测试模型的三次考试训练集、验证集、测试集这三组词初学者特别容易在做项目时搞混我来把它们的区别说透。机器学习模型的学习过程相当于一个学生备考。训练集就是平时的练习册模型在上面反复做题、订正、再做题把知识点都记下来。验证集则像考前模拟卷我们在训练过程中定期拿出来测一测看模型在没见过的题上表现如何用来调节学习率、正则化强度这类超参数防止模型只刷熟了练习册、换个题目就傻眼。测试集则是最后的高考它从头到尾都没参与过训练和调参只在全部训练完成后用来做最终评估检验模型真实的泛化能力。一个很常见的错误是有人把测试集的数据提前拿来做了特征工程的统计或者反复看测试集结果来调参这等于把高考试卷提前漏给了学生最终得到的高分没有参考价值。正确的做法是把数据按6:2:2或8:1:1切成三份训练集负责拟合验证集负责调参测试集只使用一次放在最后定论。4. 为什么入门选Keras而不是其他框架4.1 Keras的价值把复杂留给框架把简单留给用户现在深度学习框架的牌桌上TensorFlow和PyTorch是两大巨头但论入门友好度我一直推荐Keras。很多人疑惑Keras不是已经并进TensorFlow了吗它还有独立存在的意义吗这话要从Keras的定位说起。Keras原本就是一套高层API它的设计哲学我可以浓缩成这个字Pythonic。什么叫Pythonic就是读起来像英语句子一样明白。你用Keras写一个神经网络模型代码是分块堆叠的Sequential模型里一层层add进去卷积层、池化层、全连接层每一层的功能从名字上就能看出来几乎不需要查阅文档。即便完全没接触过框架的人看着示例代码也能猜出八九不离十。而直接裸用TensorFlow或PyTorch你需要关心底层张量的形状变化、自动求导机制、优化器内部实现这些对入门者来说是很大的认知负担。不是说这些知识不重要而是不应该让它们在第一次上手深度学习这个阶段就堵在你面前。Keras帮你把这些细节封装起来让你先把注意力放在数据、模型结构、训练效果上等你走通了全流程再回头补底层原理也来得及。4.2 从训练Hello World看Keras的体验我不喜欢空谈概念直接给出一个用Keras训练分类模型的骨架思路你感受一下它的表达力。数据处理通常用NumPy或者pandas把数据读进来整理成张量然后划分训练集和测试集。模型构建是Keras最舒服的部分from tensorflow import keras from tensorflow.keras import layers model keras.Sequential([ layers.Dense(64, activationrelu, input_shape(784,)), layers.Dense(64, activationrelu), layers.Dense(10, activationsoftmax) ]) model.compile(optimizeradam, losscategorical_crossentropy, metrics[accuracy])紧接着调用fit方法训练history model.fit(x_train, y_train, validation_split0.2, epochs10, batch_size32)这段代码完成了什么它构建了一个三层的全连接神经网络输入是784维的向量中间两层各有64个神经元、使用ReLU激活函数输出层用Softmax把结果变成十个类别的概率分布。compile阶段指定了优化器、损失函数和评估指标fit阶段用训练集开始训练同时在里面划出20%的数据做验证。整个过程结构一目了然没有复杂的样板代码。如果你现在还不完全理解每一行的具体含义不要紧这些细节在后面教程里会逐个拆解。你现在只需要记住这种搭积木的体验这就是Keras区别于其他框架的最大魅力思路是什么代码就长什么样。4.3 背靠生态走向生产有人担心Keras过于简单会不会只适合学习、不适合实际项目这个担心是多余的。Keras既可以通过TensorFlow的完整生态无缝衔接生产部署也可以转换到其他运行时环境。也就是说你用Keras搭建的原型模型在需要上线服务时可以导出为标准的模型文件格式部署到各类终端平台。入门时的玩具和上线时的产品在框架选型上不是割裂的。当然我也要说句公道话如果你决定深耕研究、经常需要实现论文里那些非标准模型那PyTorch的灵活性和社区论文代码生态可能更合适。但如果你是为了解决问题、做应用开发、快速验证想法Keras完全够用而且从入门到项目落地的路径极其顺滑。先学好Keras这套思维再向其他框架迁移也是很多成熟工程师选择的路线。5. AI和ML实际能干些什么应用场景巡礼5.1 图像相关任务从看见到理解图像是深度学习最经典的应用阵地。图像识别、目标检测、图像分割、人脸识别、医疗影像分析……随便拎一个出来背后都能写一整本书。早期神经网络在这块吃了不少苦头因为一张普通图片的像素动辄几十上百万传统全连接网络根本处理不过来。后来卷积神经网络CNN横空出世用卷积核在图像上滑动提取局部特征参数大幅减少识别精度迅速提高。我做过的模拟项目X里就有一个用Keras训练猫狗图片分类器的环节。数据来自某个公开的图片数据集一万多张图片通过ImageDataGenerator做数据增强比如随机旋转、平移、翻转让模型看到更多样的形态最后用迁移学习套用预训练网络把准确率提到了98%以上。这个过程对新手来说极有成就感你投喂的数据、调整的参数直接被模型从图像里抽象出来了。5.2 自然语言处理人机交互的入口自然语言处理NLP让机器具备了理解人类语言的能力。情感分析、文本分类、机器翻译、对话系统、语音识别都是NLP的范畴。举个例子一家公司想了解客户对产品的态度它可以收集社交平台上的评论短文用情感分析模型把每条评论分成正面、中性、负面再做统计。这类任务如果用传统规则做你得维护一张巨大的情感词典还得应付很好和不是很差这种反讽语境基本上不可能穷尽。到了深度学习时代NLP用词嵌入Embedding把每个词汇映射成高维空间的向量词汇之间语义相近的向量距离也相近比如苹果与香蕉的距离远小于苹果与汽车。基于这个大前提循环神经网络、Transformer等结构可以对句子建模上下文关系也被纳入考量。虽然NLP依旧是个很有挑战的领域但现在的模型效果已经是十年前难以想象的。5.3 推荐系统让每个人看到不同的内容你现在打开购物App、视频App首页内容都是千人千面背后基本都是推荐系统在起作用。推荐系统的核心任务就是预测某个用户在某个场景下更可能喜欢哪个物品。有监督学习的思路在这里也很清楚把用户历史行为、物品属性、场景信息拼成特征把用户是否点击或购买作为标签训练一个二分类模型。预测时对候选物品逐一打分取出Top N推荐给用户。Keras非常适合快速搭建这种排序模型先用Embedding层把物品ID和用户ID映射为稠密向量再拼接其他特征送入全连接层做打分。我在帮某跨平台系统做用户增长时就曾搭建过一个轻量级推荐模型效果不错但真正的业务难点其实不在模型上而在特征处理、样本采样策略和线上响应延迟上。这也是给新手提个醒模型只是推荐系统中的一环工程能力同样重要。5.4 预测与决策支持从历史数据看见未来趋势机器学习还有一个极其广泛的应用方向就是预测。销量预测、需求预测、库存优化、金融风控、设备故障预警全都离不开回归和分类模型。制造业里有一种场景给机械设备装传感器采集温度、震动、电流等信号训练一个分类模型在故障发生前识别异常状态提前安排检修。这类预测模型的共同点是它们不追求理解因果只捕捉数据里的相关趋势而深度学习尤其擅长从高维数据中捕捉那些人类难以察觉的微弱信号。风控领域更典型。银行判断一笔贷款申请能否获批传统信用评分卡做的是把申请人的各项指标加权打分逻辑透明但表达能力有限。深度学习模型可以根据几千个弱特征做综合判断往往能识别出传统方法遗漏的风险点。但随之而来的是可解释性问题模型说这个申请有高风险但为什么这个问题不解决监管和业务部门就没法采纳。这也引出我接下来要说的AI不是万能的一味追求模型指标而忽略业务约束很容易踩坑。6. 新手学习AI和ML最容易踩的坑6.1 只调库不理解原理现在工业界有句玩笑话调包侠遍地走问个原理三不知。很多同学跑通了一个项目model.fit一执行看到loss在下降、accuracy在上升就觉得自己会了。但你要是问他为什么这时候用交叉熵损失学习率设置成0.001的依据是什么卷积层的感受野是什么意思他却答不上来。这样的状态项目复现没问题独立解决新问题就露馅了。我的建议是前几个练习项目要特别克制调包的冲动。遇到不懂的操作亲手把矩阵乘法的输出形状在纸上算一遍把梯度下降更新参数的过程手推一轮。哪怕慢一点也没关系底层原理这个东西前期不补后期成本十倍不止。6.2 上来就想搞大模型忽略基础前几年大模型火的时候身边总有人一上来就问怎么训练一个大模型。我通常反问一句你是否能独立完成一个图像分类的小任务绝大多数人沉默。这就像学跑步还没利索就想去跑马拉松。万丈高楼平地起机器学习的地基是数学线性代数、概率论、微积分编程PythonNumPypandas数据处理能力。这些不过关即便从开源社区下载了别人的模型代码你也改不动、调不了、部署不出去。如果你想走学习路线我建议这样推进第一步学Python基础语法和常用科学计算库能熟练处理表格数据第二步系统理解机器学习基础概念包括回归、分类、聚类、评估指标、交叉验证第三步选择一个深度学习框架Keras是极佳的起点用它完成几个标准任务手写数字识别、文本分类、图像分类第四步参加一些小型比赛或自己找数据集做完整项目从数据清洗到模型部署走一遍全流程这才是真正的学以致用。6.3 忽略环境安装和可复现性还有一个特别现实的问题就是环境配置。初学者花在装框架上的时间经常比写代码的时间还长。我见过不少同学卡在CUDA、cuDNN版本不匹配上折腾一整天没跑通一个案例信心受挫。这里我给出一个实在的建议如果你的电脑没有NVIDIA独立显卡或者不确定显卡型号直接用CPU版TensorFlow/Keras来学习完全没有问题。图像分类小任务用CPU训练虽然慢一点但足够承载教学场景。配置环境时我强烈建议用Anaconda建一个独立的虚拟环境Python版本选择3.9或3.10然后安装符合版本的TensorFlow。不要图省事直接在自己的主环境里乱装包若干版本冲突会把你整崩溃。另外每次实验固定随机种子确保结果可复现这也是专业做法。头一回就考虑这些后面会少很多痛苦。深度学习界有一句名言永远不要用随机种子跑两次实验去证明你的模型好过基线那是不科学的。6.4 只看书不动手陷入收藏夹学习最后再说一个心态上的坑。很多人学AI的方式是关注了一堆博主、收藏了一堆教程、买了一堆书然后就没有然后了。看视频的时候觉得道理都懂关上电脑却一行代码都写不出来。你问是不是智力和数学基础不够完全不是就是刷的量和动手的量不成比例。学习编程和机器学习最有效的路径永远是带着问题做项目。先定一个足够小、足够明确的目标比如用Keras训练一个识别手写数字的模型准确率超过98%然后查资料、写代码、改Bug、调参数每一步都在喂给你真知识。要敢于在不会的状态里开工碰到什么查什么遇到什么错改什么错。这个在坑里挣扎再爬出来的过程才是你真正转化为动手能力的过程。我在带新人时经常说一句话知识是贝壳实践是沙粒。你收藏夹里的东西再精美也只有动手把沙子磨成珍珠那些知识才真正属于你。7. 写在最后的一点个人体会聊了这么多关于AI、ML和Keras的事最后说几句掏心窝的话。这些年接触了不少从零开始学AI的朋友我发现最终能跑起来的人往往不是基础最扎实的而是那种敢动手、不害怕报错、愿意把一个问题死磕到底的人。技术更新迭代特别快今天学的模型结构后面可能就过时了但学习能力、排查问题的能力、把想法变成代码的能力永远都不会过时。我对Keras这套工具一直抱有特殊的感情就是因为它极大降低了入门的门槛让更多人有机会亲手触碰AI这块曾经遥不可及的领域。你在跑通第一个模型、看着那行准确率打印出来的时候那种成就感我相信会是你继续学下去的强劲动力。准备好了吗下一篇文章我们就正式开始装环境、写代码一起动手训练属于你的第一个神经网络模型。
阅读完成 · 觉得有帮助?