腾讯技术工程 · 2023年06月15日

由浅入深了解机器学习和GPT原理

目前看到的最通俗易懂、由浅入深的图解机器学习和GPT原理的系列文章,这是第一篇,由我和 GPT-4共同翻译完成,分享给大家。

原作者:@JayAlammar 翻译:成江东

我不是一个机器学习专家,本来是一名软件工程师,与人工智能的互动很少。我一直渴望深入了解机器学习,但一直没有找到适合自己的入门方式。这就是为什么,当谷歌在2015年11月开源TensorFlow时,我非常兴奋,知道是时候开始学习之旅了。不想过于夸张,但对我来说,这就像是普罗米修斯从机器学习的奥林匹斯山上将火种赠予人类。在我脑海中,整个大数据领域,以及像Hadoop这样的技术,都得到了极大的加速,当谷歌研究人员发布他们的Map Reduce论文时。这一次不仅是论文,而是实际的软件,是他们在多年的发展之后所使用的内部工具。

因此,我开始学习机器学习基础知识,发现初学者需要更通俗易懂的资源。这是我尝试提供的。

从这里开始

让我们从一个简单的例子开始。假设你正在帮助一个想买房子的朋友。她被报价40万美元购买一个2000平方英尺(185平方米)的房子。这个价格合适吗?在没有参照物的情况下,这很难判断。所以你询问了在同一个社区购买过房子的朋友们,最后得到了三个数据点:

面积(平方英尺)(x) 价格(y)

2,104                            399,900

1,600                            329,900

2,400                            369,000

就我个人而言,我的第一反应是计算每平方英尺的平均价格。这个价格是每平方英尺180美元。

欢迎来到你的第一个神经网络!虽然它还没有达到Siri的水平,但现在你已经了解了基本的构建模块。它看起来是这样的:

image.png

这样的图表展示了网络的结构以及如何计算预测。计算从左侧的输入节点开始。输入值向右流动。它乘以权重,结果就成为我们的输出。将2,000平方英尺乘以180,我们得到360,000美元。在这个层面上,计算预测就是简单的乘法。但在此之前,我们需要考虑我们将要乘以的权重。这里我们从平均值开始,稍后我们将研究更好的算法,以便在获得更多输入和更复杂模型时进行扩展。找到权重就是我们的“训练”阶段。所以,每当你听到有人在“训练”神经网络时,它只是指找到我们用来计算预测的权重。

image.png
这是一个简单的预测模型,它接受输入,进行计算,并给出输出(由于输出可以是连续值,我们所拥有的技术名称是“回归模型”)

注:回归模型是一种用于预测因果关系的统计模型,它通常用于研究与某些因素有关的连续变量。它基于已知数据的线性或非线性方程,通过最小化误差或损失函数来拟合数据,并通过该方程对未知数据进行预测。回归模型可以用于分析多种因素对某一变量的影响,例如在经济学、社会学、医学、工程学等领域中,它经常被用于探索因果关系和预测未来趋势。常见的回归模型包括线性回归、多项式回归、逻辑回归等。

让我们将这个过程可视化(为了简化,让我们将价格单位从1美元换成1000美元。现在我们的权重是0.180而不是180):

640.gif

更难、更好、更快、更强

我们能否在估计价格方面做得比基于数据点平均值更好呢?让我们试试。首先,让我们定义在这种情况下更好的意义。如果我们将模型应用于我们拥有的三个数据点,它会做得多好?

640 (1).gif

如图所示,黄线是误差值,黄线长是不好的,我们希望尽可能减小黄线的长度。

面积 (x) 价格 ($1000) (y\_) 预测值 (y) y\_-y (y\_-y)²

2,104     399.9             379                 21      449

1,600     329.9             288                 42     1756

2,400     369                432                 -63    3969

平均值:2,058

在这里,我们可以看到实际价格值、预测价格值以及它们之间的差异。然后我们需要对这些差异求平均,以便得到一个表示预测模型中有多少错误的数字。问题是,第3行的值为-63。如果我们想用预测值和价格之间的差异作为衡量误差的标准,我们必须处理这个负值。这就是为什么我们引入了一个额外的列,显示误差的平方,从而消除了负值。这就是我们定义更好模型的标准 - 更好的模型是误差较小的模型。误差是数据集中每个点误差的平均值。对于每个点,误差是实际值和预测值之间的差异的平方。这称为均方误差。将其作为指导来训练我们的模型使其成为我们的损失函数(也称为成本函数)。

image.png
现在我们已经定义了衡量更好模型的标准,让我们尝试一些其它权重值,并将它们与我们的平均值进行比较:

640 (2).gif

通过改变权重,我们无法在模型上做出太多改进。但是,如果我们添加一个偏置值,我们可以找到改进模型的值。现在我们添加了这个b值到线性公式中,我们的预测值可以更好地逼近我们的实际值。在这种情境下,我们称之为“偏置”。这使得我们的神经网络看起来像这样:

image.png

我们可以概括地说,一个具有一个输入和一个输出的神经网络(剧透警告:没有隐藏层)看起来像这样:

image.png

在这个图中,W 和 b 是我们在训练过程中找到的值,X 是我们输入到公式中的值(例如,我们的示例中的房屋面积(平方英尺))。Y 是预测的价格。现在,计算预测使用这个公式:

image.png

因此,我们当前的模型通过将房屋面积作为 x 插入,使用这个公式来计算预测:

image.png

训练你的龙  你想尝试训练我们的玩具神经网络吗?通过调整权重和偏置来最小化损失函数。你能让误差值低于799吗?

image.png

自动化 恭喜你手动训练了你的第一个神经网络!让我们看看如何自动化这个训练过程。下面是另一个带有自动驾驶功能的示例。这些是 GD Step 按钮。它们使用一种称为“梯度下降”的算法,尝试向正确的权重和偏置值迈进,以最小化损失函数。

image.png
image.png

这两个新图表可以帮助你在调整模型参数(权重和偏置)时跟踪误差值。跟踪误差非常重要,因为训练过程就是尽可能减少这个误差。梯度下降如何知道它的下一步应该在哪里?可以利用微积分。你看,我们知道我们要最小化的函数(损失函数,所有数据点的(y\_ - y)²的平均值),也知道当前输入的值(当前的权重和偏置),损失函数的导数告诉我们应该如何调整 W 和 b 以最小化误差。想了解更多关于梯度下降以及如何使用它来计算新的权重和偏置的信息,请观看 Coursera 机器学习课程的第一讲。

引入第二变量

房子的大小是决定房价的唯一变量吗?显然还有很多其他因素。让我们添加另一个变量,看看我们如何调整神经网络来适应它。假设你的朋友做了更多的研究,找到了更多的数据点。她还发现了每个房子有多少个浴室:

面积(平方英尺)浴室数量 价格

2,104                   3            399,900

1,600                   3            329,900

2,400                   3            369,000

1,416                   2            232,000

3,000                   4            539,900

1,985                   4            299,900

1,534                   3            314,900

1,427                   3            198,999

1,380                   3            212,000

1,494                   3            242,500

我们的两变量神经网络如下所示:

image.png

现在我们需要找到两个权重(每个输入一个)和一个偏置来创建我们的新模型。计算Y的公式如下:

image.png

但是我们如何找到w1和w2呢?这比我们只需要考虑一个权重值时要复杂一些。多一个浴室对我们预测房价的影响有多大呢?尝试找到合适的权重和偏置。从这里开始,你会看到随着输入数量的增加,我们面临的复杂性也在增加。我们开始失去创建简单二维形状的能力,这使得我们不能一眼就能看出模型的特点。相反,我们主要依赖于在调整模型参数时,误差值是如何变化的。

image.png

我们再次依靠可靠的梯度下降法来帮助我们找到合适的权重和偏置。

特征

现在你已经了解了具有一个和两个特征的神经网络,你可以尝试添加更多特征并使用它们来计算预测值。权重的数量将继续增长,当我们添加每个新特征时,我们需要调整梯度下降的实现,以便它能够更新与新特征相关的新权重。这里需要注意的是,我们不能盲目地将我们所知道的所有信息都输入到网络中。我们必须在输入模型的特征上有所选择。特征选择/处理是一个拥有自己一套最佳实践和注意事项的独立学科。如果你想看一个关于检查数据集以选择输入预测模型的特征的过程的例子,请查看《泰坦尼克号之旅》。这是一个笔记本,Omar EL Gabry在其中讲述了他解决Kaggle泰坦尼克挑战的过程。Kaggle提供了泰坦尼克号上乘客的名单,包括姓名、性别、年龄、船舱以及该人是否幸存等数据。挑战的目标是建立一个模型,根据其他信息预测一个人是否幸存。

分类

让我们继续调整我们的例子。假设你的朋友给你一份房子清单。这次,她标注了哪些房子在她看来具有合适的大小和浴室数量:

面积(平方英尺)浴室数量 标签

2,104                   3            Good

1,600                   3            Good

2,400                   3            Good

1,416                   2            Bad

3,000                   4            Bad

1,985                   4            Good

1,534                   3            Bad

1,427                   3            Good

1,380                   3            Good

1,494                   3            Good

她需要你使用这个方法来创建一个模型,根据房子的大小和浴室数量来预测她是否会喜欢这个房子。你将使用上面的列表来构建模型,然后她将使用这个模型来对许多其他房子进行分类。在这个过程中还有一个额外的改变,那就是她还有另一个包含10个房子的列表,她已经对这些房子进行了标记,但她没有告诉你。这个另外的列表将在你训练模型后用来评估你的模型,从而确保你的模型能够把握她实际喜欢的房子特征。我们迄今为止所尝试的神经网络都是进行“回归”操作的,它们计算并输出一个“连续”的值(输出可以是4,或100.6,或2143.342343)。然而,在实践中,神经网络更常用于“分类”类型的问题。在这些问题中,神经网络的输出必须是一组离散值(或“类别”),如“好”或“坏”。实践中的工作原理是,我们将会得到一个模型,该模型会表明某个房屋是“好”的可能性为75%,而不仅是简单地输出“好”或“坏”。

image.png

在实践中,我们可以将我们已经看到的网络转换成一个分类网络,让它输出两个值——一个值代表某个个类别(我们现在的类别是“好”和“坏”)。然后我们将这些值通过一个叫做“softmax”的操作。softmax的输出是每个类别的概率。例如,假设网络的这一层输出“好”为2,“坏”为4,如果我们将[2, 4]输入到softmax中,它将返回[0.11, 0.88]作为输出。这意味着网络有88%的把握认为输入的值是“坏”的,我们的朋友可能不喜欢那个房子。

Softmax函数接受一个数组作为输入,并输出一个相同长度的数组。注意到它的输出都是正数,并且总和为1,这在输出概率值时非常有用。另外,尽管4是2的两倍,但它的概率不仅是2的两倍,而且是2的八倍。这是一个有用的特性,它可以夸大输出之间的差异,从而改善我们的训练过程。

image.png
如您在最后两行中所看到的,softmax可以扩展到任意数量的输入。所以现在如果我们的朋友添加了第三个标签(比如说“不错,但我得把一间房子租给airbnb”),softmax可以扩展以适应这种变化。花点时间探索一下网络的形状,看看当您改变特征数量(x1、x2、x3等)(可以是面积、浴室数量、价格、靠近学校/工作的距离等)和类别数量(y1、y2、y3等)(可以是“太贵了”、“性价比高”、“如果我把一间房子租给airbnb就好了”、“太小了”)时,网络是如何变化的。

image.png
您可以在我为本文创建的这个笔记本中看到如何使用 TensorFlow 创建和训练这个网络的示例。真正的动力 如果您已经读到这里了,我必须向您揭示我写这篇文章的另一个动力。这篇文章旨在作为一个更加温和的 TensorFlow 教程入门。如果您现在开始学习《MNIST 机器学习初学者》,并遇到了这张图:

image.png

我写这篇文章是为了让没有机器学习经验的人们为 TensorFlow 入门教程中的这张图做好准备。这就是为什么我模拟了它的视觉风格。我希望您会觉得准备充分,并且了解这个系统以及它的工作原理。如果您想开始尝试编写代码,请随时从入门教程开始,它教一个神经网络如何识别手写数字。您还应该通过学习我们在这里讨论的概念的理论和数学基础来继续您的学习。现在可以提出的好问题包括:

  1. 其他类型的损失函数有哪些?
  2. 哪些损失函数更适用于哪些应用?
  3. 使用梯度下降实际计算新权重的算法是什么?
  4. 在您已经了解的领域中,机器学习的应用有哪些?
  5. 通过将这个技能与您技能库中的其他技能相结合,您可以创造出什么新奇的魔法?
  • 以下是一些很好的学习资源:
  1. Coursera上的机器学习课程,由Andrew Ng主讲。这是我开始学习的课程。从回归开始,然后转向分类和神经网络。
  2. Coursera上的神经网络与机器学习课程,由Geoffrey Hinton主讲。更侧重于神经网络及其视觉应用。
  3. 斯坦福大学的CS231n课程:卷积神经网络与视觉识别,由Andrej Karpathy主讲。了解一些高级概念以及使用深度神经网络进行视觉识别的最新技术。
  4. 神经网络社区是一个很好的资源,可以了解不同类型的神经网络。

致谢:

感谢Yasmine Alfouzan、Ammar Alammar、Khalid Alnuaim、Fahad Alhazmi、Mazen Melibari和Hadeel Al-Negheimish在审查本文的早期版本时提供的帮助。如有任何更正或反馈,请在Twitter上联系我。

原文地址: https://jalammar.github.io/visual-interactive-guide-basics-neural-networks/

原作者:@JayAlammar
翻译:成江东
文章来源:腾讯技术工程

推荐阅读

更多腾讯AI相关技术干货,请关注专栏腾讯技术工程 欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
8128
内容数
212
腾讯AI,物联网等相关技术干货,欢迎关注
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息