好的,来个小测验:什么是神经网络?什么是深度学习?你有没有什么印象呢?
我明白你现在这种感觉——要么是你觉得自己知道我在问什么,要么就是不知道。别担心,朋友,我来帮你解答这些疑问。
在这篇文章中,我会向你解释关于深度学习、神经网络的所有你需要了解的知识,同时也会说明为什么你需要掌握一个叫做Keras的强大工具。
先决条件:
这是一篇概念性的文章,因此你不需要有任何深度学习的背景知识就能理解其中的内容。恰恰相反,通过阅读这篇文章,你将会掌握这些基础知识。
对Python有基本的了解会很有帮助,但并不是阅读本文的必要条件。不过,如果你之后想实际操作Keras,那么安装Python 3.9及以上版本以及pip工具会让你更容易开始进行实验。
目录
什么是深度学习?
为了向你解释深度学习,我假设你已经对人工智能以及机器学习有所了解。这些术语在如今这个时代,对你来说应该已经不再陌生了。
简单来说,人工智能是一种能够让计算机模拟人类的认知能力的技术,比如学习、理解、解决问题、发挥创造力以及自主行动。
机器学习是人工智能的一个子领域。它致力于开发能够识别模式、从训练数据中学习,并据此对新数据进行准确分析的算法,而这些算法并不需要被明确地编程来执行这些任务。
则是机器学习的一个子领域,它利用多层神经网络来实现各种功能,而这种神经网络的设计灵感来源于人脑的结构。
请看下面的图表,以便更直观地了解这些概念之间的层次关系:
根据我目前正在阅读的一本书,这本书的作者是François Chollet,书名是《用Python进行深度学习》。在深度学习中,“深度”这个概念并不是指通过这一技术能够获得某种更深入的理解,而是指数据表示层次的结构。这些表示层次是通过被称为神经网络的模型来学习的,而神经网络的结构就是由层层叠加的节点构成的。
请看下面的图片,它会直观地展示这种层次结构:

图片来源 — Research Gate
Chollet还澄清了一个有趣的误解:深度学习模型(即神经网络)并不是对大脑的模拟。事实上,深度学习的某些核心概念确实受到了我们对大脑结构的理解的影响,尤其是对视觉皮层的认识。
但你知道视觉皮层是什么吗?😅 请看下面的图片(标有绿色圆圈的部分):

视觉皮层是大脑中负责处理我们眼睛所看到信息的区域。20世纪60年代,神经科学家Hubel和Wiesel在研究视觉皮层时发现了一个令人惊讶的现象:位于视觉皮层深层的神经元并不会直接对整个物体产生反应。最初,这些神经元只会对一些简单的形状产生反应,比如角度固定的线条。只有到了后续阶段,这些神经元才会将这些简单信号组合起来,从而形成对更复杂物体的识别。
换句话说,大脑是分阶段来“理解”一个物体的——首先处理简单的模式,然后逐渐理解更复杂的结构。这种分阶段的处理方式,正是CNN模型中层层叠加过滤器的设计理念的灵感来源,我们稍后会详细讨论这一点。
现在你已经了解了这些基础知识,接下来让我们一起来探索这个既有趣又令人惊叹的神经网络概念吧。
📌 注意:刚开始接触神经网络时,它们可能会让你感到困惑,因为这确实是一个新的概念。但只要你花一些时间去理解它们,就会发现它们其实并不那么难以掌握。
那么,什么是神经网络呢?
首先需要明确的是,神经网络是深度学习中的一个概念。“神经”这个词来源于人类大脑中的神经元。
神经网络由一系列相互连接的单元或节点组成,这些单元或节点被称为“人工神经元”,它们在某种程度上模拟了人脑中神经元的功能。
以下是较为正式且技术性的定义:
神经网络是一种机器学习模型,它通过将简单的“神经元”分层堆叠起来,从数据中学习能够识别模式的权重和偏置值,从而将输入转化为输出。摘自IBM博客
现在来看一个更简单、也更有趣的定义:
神经网络其实就是一种能够逐步减少猜测、模式识别或分析错误程度的工具,每次都通过微小的调整来改进性能。
神经网络有多种不同的架构和类型,例如:
-
卷积神经网络(CNNs)
-
循环神经网络(RNNs)
-
变换器
我们将在本文后续部分详细探讨这些内容,目前只需了解:不同类型的神经网络之所以存在差异,主要是因为它们在进行预测、模式识别或分析时,会重点关注不同的方面。
神经网络的工作原理类比

想象一下,你正在学习蒙着眼睛投掷飞镖,而每次投掷后都会有人告诉你应该做出哪些调整。例如,他们会告诉你“你的投掷位置偏左6英寸,且高度偏低2英寸”。但他们不会解释原因,也不会教你如何调整瞄准姿势或握持飞镖的方式,只会给你提供具体的距离和方向上的修正建议。
根据这些反馈,你会稍微调整手臂的角度,然后再次投掷,再得到新的修正提示。这样反复调整,直到你能成功击中目标为止。
随着时间的推移,你的手臂会“学会”如何正确投掷飞镖——这并不是因为有人向你讲解过物理原理,而是因为每次投掷都会给你提供具体的修正建议,而你不断根据这些建议进行调整,从而逐渐减少失误的可能性。
神经网络的工作原理恰恰也是如此。
现在让我们根据上面的类比,来学习一些用于描述神经网络的术语吧。
那种“将手臂调整到这个位置和角度”的指令或信号,我们称之为梯度。梯度指明了进行修正的方向以及所需的幅度、距离或调整速度,同时还能告诉我们应该以多快的速度调整权重和偏置值,才能有效降低损失函数的值。
而那些具体的修正建议,比如“位置偏左6英寸”,则被称为损失。在神经网络中,损失函数是一种数学工具,用于衡量模型的预测结果与实际目标值之间的差距。
当你不断朝着缩小误差的方向进行调整时,我们把这种过程称为**梯度下降**。这是一种优化算法——神经网络通过这种逐步推进的方式来确定应该朝哪个方向移动,以及应该迈多大的步幅才能达到精确的结果。在这里,“下降”这个术语的含义与日常用法完全一致,就是指向下的运动。
你手臂的肌肉记忆所发生的调整,实际上就是**权重更新**的过程。**权重是数值**,它们能够帮助网络中的每个节点判断哪些因素更为重要,从而做出决策。
📍 现在,请暂停一下,好好思考一下这个概念。如果你愿意,可以再读一遍这个类比,然后再继续往下看。
什么是CNN、RNN和Transformer?
希望你还在认真听我说……因为这些概念也是你必须了解的。还记得之前我们说过吗?CNN、RNN和Transformer其实只是不同类型的神经网络架构而已。它们的学习过程是相同的,就像蒙着眼睛投掷飞镖这个类比一样:它们都遵循“先猜测、然后测量误差/损失、再进行调整”的循环机制。
不同之处在于,在进行预测或输出结果之前,这些神经网络会选择关注哪些信息。
📌 让我来详细解释一下:
-
CNN(卷积神经网络)只会观察图像中附近的小区域,并对其进行分析,然后再移动到下一个区域。可以想象,就像是通过一根只指向一个点的细管来看待整个飞镖靶一样。
-
RNN(循环神经网络)会按顺序处理输入数据,并在处理过程中不断更新对整体内容的理解。这就好比从左到右阅读一篇文章,在读完每一句话后都会更新自己对故事情节的认知。
-
而Transformer则能一次性处理所有输入信息,迅速判断出其中哪些因素最为重要。这就像是一眼扫过整页内容,然后确定哪些词语彼此之间存在关联。
接下来,让我们更深入地了解一下这些不同类型的神经网络吧。
CNN的工作原理
CNN是一种专为具有空间结构的数据设计的神经网络,比如图像。它使用一个由数字组成的小网格作为处理工具,这个网格通常被称为“滤波器”(例如3×3大小的矩阵)。这些数字其实就是权重值,起初它们都是随机的,并没有具体的含义。
通过不断的猜测、测量误差并调整权重的过程,这些随机数值会逐渐学会如何对图像中的特定特征产生强烈的反应——比如识别垂直边缘或某种特定的颜色等等。
📌 需要注意的是:没有人告诉滤波器应该关注什么信息。它是通过训练自己来发现这些规律的,就像我们讨论过的其他所有神经网络中的权重值一样,都是通过这样的过程来确定其功能的。
该过滤器会每次移动几像素在图像上滑动,每当它移动到某个位置时,就会检测那一小块区域,并生成一个数值。这个数值实际上反映了过滤器所识别的模式在该位置出现的强度。
当过滤器滑过整个图像后,最终会得到一张由数值组成的网格,这张网格清晰地显示了那些被检测到的模式在图像中的分布情况。
📌 注意:通过一种称为“参数共享”的技术,同一个过滤器会在每一个位置上使用相同的参数进行检测。这就是卷积神经网络之所以如此高效的原因。
请看下面的示例,了解过滤器是如何在图像矩阵上滑动的:

在真实的卷积神经网络中,多层过滤器是叠加在一起工作的,每一层都会基于前一层处理后的结果进行进一步的分析。处于较低层的过滤器直接作用于原始像素,因此它们能够识别出非常简单的特征,比如边缘或某种颜色的区域;而位于较高层的过滤器则会利用前一层处理后的结果,将这些简单的特征组合成稍微复杂的形状,例如曲线或角点。
通过这种逐层处理的方式,各种形状会不断被组合起来:先形成部分结构,再由这些部分组成整个物体,比如一只猫。
正是这种多层过滤器的叠加机制,使得卷积神经网络能够高效地完成识别任务——因为这一切都不是在一步之内完成的,而且每一层只需要解决稍微复杂一点的问题而已。
下面这张图片展示了整个卷积神经网络的运作过程:
卷积神经网络的应用场景包括:
-
医学影像分析:卷积神经网络可以分析胸部X光片等医学图像,帮助医生发现潜在的异常情况。
-
图像生成:卷积神经网络能够创建新的图像或对现有图像进行加工处理。
-
自主系统:在自动驾驶汽车等自主系统中,卷积神经网络可用于车道检测、障碍物识别以及交通标志辨认等功能。
您可以通过这里了解更多相关信息。
📍 现在,请暂停一下,重点记住以下两个关键概念:过滤器与参数共享。
循环神经网络的工作原理
循环神经网络用于处理具有顺序结构的数据,其中数据的排列顺序本身就蕴含着意义。比如音频数据或构成故事的句子等。
与CNN不同,CNN可以以任意顺序遍历图像中的各个区域,而RNN则需要逐一步地处理数据。
例如,我们在阅读一句话时会依次读取每一个单词,因为前面理解的内容会影响神经网络对后续内容的理解。这种顺序处理的方式使得RNN在处理大型数据集时效率较低。
RNN会维护一个被称为隐藏状态的动态摘要。
📌 注意:可以把这个隐藏状态想象成一本小笔记本,它记录下神经网络目前理解到的所有重要信息。在开始阅读任何内容之前,这本笔记本实际上是空白的(即初始隐藏状态通常为全0)。
以下是RNN的简单架构图:

隐藏状态并不是RNN所见过所有信息的汇总表,而是一个会在每一步都被更新的动态摘要,它只保留网络认为值得保留的信息。
📌 注意:RNN的一个缺点是,如果序列很长,早期处理过的信息很可能会被遗忘,从而导致RNN无法理解前面的内容。这个问题被称为梯度消失问题。
RNN的应用场景包括:
-
语音识别:RNN被用于语音识别系统中,它们能够逐时间处理音频数据,帮助模型理解声音是如何组成单词和句子的。
-
语音AI系统:在语音处理流程中,RNN有助于处理序列化的音频数据。结合文本转语音等技术,它们可以构建出自然的语音生成系统。
-
时间序列预测:在金融或天气预报领域,RNN通过分析历史数据,利用概率方法来预测未来结果。
-
文本生成:RNN可以根据前面的单词来预测下一个单词,从而生成文本。这一功能在聊天机器人和基于生成式AI的工具中非常有用。
这里有一个视频,你可以观看它来进一步了解RNN的相关知识。
📍 现在,请暂停视频,重点记住隐藏状态以及梯度消失问题这两个关键概念。
Transformer的工作原理
2017年,谷歌大脑的一组研究人员发表了一篇简短但具有划时代意义的论文:“注意力机制就是你所需的一切。”
它引入了Transformer这种新的语言处理架构,这一创新悄然改变了人工智能工程的开发方式。从那时起,Transformer几乎成为了所有大型语言模型的核心组成部分,包括Gemini模型。
以下是简化的Transformer架构图:

简而言之,Transformer能够同时处理大量数据(这与按顺序处理数据的RNN不同)。
Transformer的核心理念主要包括两个方面。首先是自注意力机制,这种机制为每个数据元素赋予了位置编码,从而使Transformer能够了解这些元素的排列顺序;其次是嵌入层,它们有助于捕捉每个单词的含义以及所有数据元素之间的上下文关系。正是由于这些机制的存在,Transformer在处理数据时比其他类型的神经网络更加高效。
📍 需注意的是,Transformer架构有效解决了RNN所存在的梯度消失问题。
Transformer的应用场景包括:
-
自然语言处理任务:自注意力机制使机器学习模型能够高效、全面地分析整段文本,从而显著提升其语言处理能力。
-
计算机视觉:图像识别技术的发展表明,自注意力机制对于提高模型的鲁棒性和泛化能力至关重要。
你可以通过这个视频进一步了解Transformer的相关知识。
📍 请特别注意以下关键概念:自注意力机制、嵌入层、位置编码,以及数据被同时输入并处理这一特性。
使用Keras构建机器学习模型

现在你已经了解了各种类型的神经网络及其应用场景,那么你可能会想知道该如何开始构建自己的模型吧。
什么是Keras?
虽然有很多工具可供选择,但我认为最值得推荐的还是Keras。它已经被广泛应用于许多项目中,比如谷歌的YouTube推荐系统以及Waymo自动驾驶车队等。
Keras是一个开源的高级神经网络API,它被设计得用户友好、模块化且可扩展。该技术最初是独立开发的,可以运行在TensorFlow、Theano或CNTK等后端平台上。
自2019年以来,它成为了TensorFlow(TensorFlow 2.0及更高版本)官方使用的高级API,提供了高级接口(序列模型和函数式模型),同时还内置了对常见层结构、优化器和损失函数的支援。
📌 总而言之,Keras能够让你快速而轻松地构建AI/ML模型。
Keras为构建深度学习模型提供了一整套工具。如今,构建、训练、评估和部署深度学习模型已经变得前所未有的简单。
新版本——Keras 3.0
最近的一项重要发展就是Keras 3.0。这一全新版本的发布使得Keras的工作流程能够运行在JAX、TensorFlow、PyTorch以及OpenVINO(仅用于推理)等多种后端平台上,而不再局限于TensorFlow。
📍 以下是Keras真正区别于其他神经网络开发工具的地方:
-
它不仅允许你构建CNN、RNN或Transformer模型,更重要的是,你可以使用相同的模式来构建这三种类型的模型。
-
贯穿整个文章我们所讨论的训练流程——即“进行预测 → 测量误差 → 根据结果调整参数”这一循环,在Keras中是完全不变的。无论你使用的是哪种架构,Keras都能提供一种统一的方式来实现这一流程。
你只需编写一次模型代码,之后就可以根据需要选择最适合自己的框架;即使目标发生变化,也不必重新编写模型本身即可切换框架。
这种灵活性并非仅仅是理论上的,它在实际性能方面也具有重要意义。
在Keras自身的测试中,JAX通常能在GPU、TPU和CPU上提供最佳的训练和推理性能,不过不同模型的测试结果可能会有所差异。
📌 由于可以在不修改模型代码的情况下更换后端平台,因此你在开始项目时并不一定非得使用速度最快的框架。
总结
到这里为止,我的讲解就结束了。希望你现在已经对CNN、RNN、Transformer以及深度学习框架Keras有了清晰的认识。
归根结底,就是这样一个概念:存在一种统一的学习流程,三种由不同数据类型决定的架构模型,而Keras正是提供了这种能够构建任意类型模型的通用API。如果你能从这些内容中记住什么的话,那就是“进行预测 → 测量误差 → 根据结果调整参数”的循环——这正是你学习深度学习的全部基础。
如果这篇文章对你有帮助,请通过电子邮件或LinkedIn与我联系,告诉我哪些内容让你印象深刻,以及你接下来还想了解什么。<干杯。>